基于retinex的模型夜间增强算法研究与改进效果

    最近又接到一个需求,要做一个夜间增强的图像增强算法。对于夜间增强,指的是光照不够的时候,对于图像进行图像增强,让细节呈现的处理过程,一般有这么一些方法做夜间增强:

  一:直方图均衡

  最简单,最好做,matlab仿真,直接有库函数调用,一会就好写了,不过效果嘛,明显有细节丢失的缺点,而且在有灯光的图片,有过曝现象

效果图1:山路

原图:

基于retinex的模型夜间增强算法研究与改进效果_第1张图片

HSI亮度直方图均衡

基于retinex的模型夜间增强算法研究与改进效果_第2张图片

2:湖水

原图

基于retinex的模型夜间增强算法研究与改进效果_第3张图片

HSI亮度均衡,发现颜色也有点失真

基于retinex的模型夜间增强算法研究与改进效果_第4张图片

     基于直方图的还有很多改进算法,基本是分块均衡设置阈值,防止过曝,过低,基于暗色分割均衡(N年前发表在CSDN的博客的文章,不我搜不到了),效果都比较一般,直方图的算法缺陷主要在:细节丢失,过曝,或者低亮度区域亮度提升不够,分块的方式改善了一些,但是加大了算法的复杂度。


     二:帧间融合,大致的意思是一个摄像头固定在一个地方,系统会把白天的图片保存,分析,融合到夜间的图片中,

当时直呼:牛逼,这都能想出来,不过,想想也知道,最终处理出来的图像肯定会受到白天的图像影响,导致有鬼影,而且,算法估计也很复杂,大致浏览了下一篇论文,居然在一个停车场的场景中,合成的图像多了几辆车,因为受到白天的停的车信息影响,也被融合到夜间的图像去了,这种情况是不允许出现的,所以直接放弃研究

    三:retinex,在是2个单词融合的词:视网膜---大脑皮层算法,具体介绍大家自己百度,大致说的是,70年代(或者更早?)有一个搞摄影(还是教书)的老外,发现在很暗的地方,人眼睛也可以辨别三原色,然后就做了一个实验,证明人的眼睛可以不受到光照的影响,分辨出来物体真是的颜色,就推测,人的眼就比如摄像机,大脑里有图像处理算法,会把视网膜传递的型号处理,得到真实的物体色彩,还提出来一个模型,P(x) = R(x)*I(X)

    R(X)是入射光,I(X)是物体反射性质,P(X)是最终摄像机获得的信息,即是要处理的图片,而要要获得物体颜色就是I(x)

    那么主要的问题就是要求得入射光R(X) 就可以得到物体原来的信息  I(X) = p(x)/R(x)

    那R(x)咋么求?人家没回答,大伙自己想去。。。

    后来的人想了很多办法,这里最经典就是路径(随机路径和螺旋线路径)法,和SSR(单尺度retinex)算法。

   SSR算法进行了很多改进改进:MSR(多尺度)算法,后续还有带色彩还原的 MSR,而且SSR体系算法还算优秀,90年代被NASA看中,拿来做卫星图像的处理,效果据说很惊人,自己写了一个带色彩还原的MSR算法,效果确实不错

上图:

1:原图还是上面的山路的图

基于retinex的模型夜间增强算法研究与改进效果_第5张图片


   2:湖水的

基于retinex的模型夜间增强算法研究与改进效果_第6张图片

3自己照的照片

基于retinex的模型夜间增强算法研究与改进效果_第7张图片

     可以发现,没有过曝和细节丢失现象,不过色彩有点过于饱和,MSR算法会导致色彩失真,即使加上色彩还原,也只是改善了一些


      这个算法速度还可以,用我老笔记本用matlab仿真一个大图(1300*798左右的),大概也就20~30秒

不过仔细看算法,有3次卷积,log域变换,还要还原,那就要指数运算,都不要讨论,FPGA基本是很难做了,即使做了,估计代码复杂,调试麻烦,内存消耗也大,看论文的时候。有人用TI的达芬奇DSP做的,优化后,做到了30多帧一秒,不过FPGA是肯定不行了。。。

     FPGA的实现就卡主了。

     过了一段时间,有找的一篇文章,我感觉是retinex的研究的集大成的文章,写的很好,作者自己也提出了一个牛逼的算法,效果比MSR好多了,而且也没有卷积,也没有log,指数,真是太好了,可惜不知道哪里写的不对,还是文章隐藏了什么关键步骤,matlab仿真的效果很差,而且其中计算一个点有一个步骤,需要取整幅图的随机点,比较取200个随机点,取最大,然后这个搞20次,求平均,次数不管,但是要取整幅图的随机点这个用FPGA的话,那就需要缓存一帧,一帧要消耗多少内存?三个通道分开计算,一个通道也需要1920X1080X8bit = 2Mbit, 那只能上DDR外部内存了?1秒要算30帧,那要在DDR搬运多少回?带宽又不够了,

这个算法也搁置了。

    后来偶尔重新读那篇集大成的论文的时候,想着自己把retinex的所有算法都实现一下,看看有没有什么灵感

  在实现到路径算法的时候,居然在他基础上改进了一个方式,得到了很好的效果,而且计算超级简单,简单的让我发指,FPGA实现起来比冒泡排序算法都好写,不过有严重的条纹,继续研究,加入一个简单的滤波器就可以很好消除条纹,FPGA实现这个滤波器也很简单。以下是效果图。

1:还是山路

左边是没加滤波器,右边是加入滤波器的,左边的条纹现象明显。右边的基本消除了,

基于retinex的模型夜间增强算法研究与改进效果_第8张图片

2:湖水亭台的

基于retinex的模型夜间增强算法研究与改进效果_第9张图片

3:居民区

基于retinex的模型夜间增强算法研究与改进效果_第10张图片

基于retinex的模型夜间增强算法研究与改进效果_第11张图片

基于retinex的模型夜间增强算法研究与改进效果_第12张图片

对于光照很低,几乎无法辨识的图片,可以很好的发挥效果基于retinex的模型夜间增强算法研究与改进效果_第13张图片

基于retinex的模型夜间增强算法研究与改进效果_第14张图片

而对于原本亮度就正常的,也不会进行太多的破坏

基于retinex的模型夜间增强算法研究与改进效果_第15张图片基于retinex的模型夜间增强算法研究与改进效果_第16张图片基于retinex的模型夜间增强算法研究与改进效果_第17张图片


你可能感兴趣的:(图像处理)