【低光图像增强介绍】
在图像处理领域,低光图像增强是一个具有挑战性的任务。由于光线不足,这些图像往往呈现出低对比度、高噪声和细节丢失等问题,严重影响了图像的视觉效果和后续分析的准确性。因此,开发有效的低光图像增强方法具有重要的实用价值。
近年来,随着深度学习技术的快速发展,基于神经网络的图像增强方法取得了显著进展。其中,一种简单而有效的方法是利用成对的低光和高光图像进行训练,学习从低光图像到高光图像的映射关系。这种方法的核心在于构建一个能够捕捉图像光照变化的神经网络模型,通过对大量低光-高光图像对的训练,学习如何增强低光图像的光照和细节。
在训练过程中,模型会学习到如何调整图像的亮度、对比度和色彩等信息,以恢复出更接近真实场景的高光图像。同时,通过引入不同的损失函数和优化策略,可以进一步提高增强效果,减少噪声和失真。
与传统的图像增强方法相比,基于深度学习的低光图像增强方法具有更高的灵活性和更强的泛化能力。它不仅可以处理各种复杂的低光场景,还可以根据具体需求进行定制和优化。因此,这种方法在视频监控、夜间摄影、医学影像分析等领域具有广泛的应用前景。
总之,学习从配对低光实例中增强简单低光图像是一种有效且实用的技术。随着深度学习技术的不断进步,相信这种方法在未来会得到更多的发展和应用。
【算法介绍】
Learning a Simple Low-light Image Enhancer from Paired Low-light Instances
发表于2023CVPR
论文主要介绍了一种用于低光图像增强(LIE)的方法。在低光条件下拍摄的图像往往存在对比度低、细节模糊等问题。作者提出了一种无监督的方法,通过从低光图像对中学习自适应的先验。同时提出了一种简单的自监督机制,用于去除原始图像中不合适的特征。
论文地址:CVPR 2023 Open Access Repository
论文代码:https: //github.com/zhenqifu/PairLIE
本文贡献
提出了PairLIE方法:本文提出了一种名为PairLIE的无监督方法,该方法通过学习自适应的先验知识来增强低光照图像。传统的低光照图像增强算法通常使用单张输入图像和手工设计的先验知识来调整光照,但由于单张图像的信息有限以及手工先验知识的适应性不足,这些方法通常无法恢复图像细节。PairLIE方法通过学习来自低光照图像对的自适应先验知识,能够更好地提高对比度并恢复图像细节。
基于Retinex理论进行图像分解:为了实现准确的图像分解,本文首先对原始图像进行投影,以去除不合适的特征。通过应用Retinex理论,本文要求分解得到的两个分量应该满足重建输入图像的要求。为了保证合理的分解,文中引入了一个重建项,用于衡量重建后图像与输入图像的差异。通过估计光照分量,可以计算得到反射分量。因此,本文还添加了一个项来引导分解过程,以保证反射分量与低光照图像除以光照分量的结果之间的一致性。
简化网络结构和减少手工先验:与大多数现有方法使用大量手工先验知识不同,PairLIE方法只对光照分量施加了一个平滑项和一个初始化项。具体而言,初始化的光照分量是通过R、G、B通道的最大值计算得到的。相比之下,PairLIE方法使用了更简化的网络结构和较少的手工先验,同时实现了与现有方法相当的性能。
【效果展示】
【实现部分代码】
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using OpenCvSharp;
namespace FIRC
{
public partial class Form1 : Form
{
Mat src = new Mat();
PairLIE pl = new PairLIE();
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "图文件(*.*)|*.jpg;*.png;*.jpeg;*.bmp";
openFileDialog.RestoreDirectory = true;
openFileDialog.Multiselect = false;
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
src = Cv2.ImRead(openFileDialog.FileName);
pictureBox1.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(src);
}
}
private void Form1_Load(object sender, EventArgs e)
{
pl.LoadWeights(Application.StartupPath+@"\weights\pairlie_416x416.onnx");
}
private void button3_Click(object sender, EventArgs e)
{
if (pictureBox1.Image == null)
{
return;
}
var image = pl.Inference(src);
pictureBox2.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(image); //Mat转Bitmap
}
}
}
【视频演示】
https://www.bilibili.com/video/BV1Ly421z7nS/
【源码下载】
https://download.csdn.net/download/FL1623863129/88856153
【测试环境】
vs2019,netframework4.7.2,opencvsharp4.8.0
【参考文献】
[1] https://blog.csdn.net/qq_54510777/article/details/134148179