注:这一系列的文章是我大四时写的,现在回顾,发现当时的布局和公式实在是太难看了,读者可移步至这里查看舒服的排版github同步博客。
一 原论文方法的局限性
谈到优化,我们首先需要了解原论文的方法有何局限,在实际编码测试中我发现了以下的三点局限:
1.太过耗时
在上一篇中,在透射图的精细化(refine)中原论文使用的是softmatting方法,而我编码使用的是引导滤波,一是因为softmatting我看不太懂,二是因为softmatting实在是太耗时间了,而引导滤波的时间复杂度是常数并且其效果不比softmatting差。
即使在使用引导滤波代替原文softmatting之后,处理一幅324*284的图像也需要150ms左右,这对于视频处理来说时间还是太长了(一般30ms左右)!
2.色斑,色块效应
在实验中发现,当像素点的强度(intensity)接近大气光值(airlight)时,去雾的图像会出现局部的色斑,色偏效应,这样说的比较抽象,大家可以看一下下边的对比图:
大家可以看到左图上部区域出现了明显的色斑效应,这是因为上部分的图像像素强度非常接近大气光值,有人可能会问,为什么接近大气光值就会导致色斑呢?
还记得第一篇中提到的透射图的计算公式吗?如下:
当I(y)非常接近A时,t(x)就会非常小,接近于0,也就是说t(x)<t0,于是乎,当我们计算J(x)时,会有很多的像素对应着同一个t值,即t0,这就会导致出项色斑啦!
3.图像亮度降低
何在论文中也提到了,处理完之后,图像的亮度会有一点变暗,至于为啥,我暂时不能理解;这就需要我们使用一定的策略进行图像增强,我使用的是局部非线性增强的方法。
二 解决的策略
1.图像降采样处理
这一点要特别感谢http://www.cnblogs.com/Imageshop/p/3281703.html 的博主,受到他的启发;
我们知道:去雾的过程中计算的暗通道和透射率图像并不需要特别的高质量(高分辨率),那么我们就可以把图像降采样,把缩小的图像作为输入计算暗通道和透射率图像,在最后一步时我们再使用插值的方式resize暗通道和透射率图像到原图的大小,这样从理论上来说对效果没有明显的影响。
基于这样的思路,我进行了实验,其中我的降采样率为0.5,理论上来说应该可以减少1/4左右的计算量,效果如下:
原图:
降采样处理过的去雾效果:
未降采样的去雾效果:
执行时间:降采样处理过的去雾耗时:42ms;未处理的去雾效果:150ms
从上边的对比图像中可以发现,从主观上来看,降采样处理之后的效果几乎与未降采样的效果是一样的,但是,时间确大大减少了,仅仅需要42ms 啊亲!
需要注意:不能把scale降采样率设置的太小了,一是会影响效果;二是在缩小和放大图像过程中耗时可能会过多,得不偿失啊亲!
2.优化t(x)的计算
既然是因为计算t的时候出现的问题,那么我们可以人为的在t过小的时候进行一些处理,使它不至于总是比t0小;
for(int k=0;k<nr;k++){
const uchar* inData=darkimg.ptr<uchar>(k);
const uchar* srcData=srcimg.ptr<uchar>(k);
float* outData=transmission.ptr<float>(k);
for(int l=0;l<nl;l++)
{
pix[0]=*srcData++;
pix[1]=*srcData++;
pix[2]=*srcData++;
r=fabs((pix[0]+pix[1]+pix[2])/3.0-avg_A);
if(r<r0)
*outData++=1-w*(*inData++/avg_A)+(r0-r)/r0;
else
*outData++=1-w*(*inData++/avg_A);
}
}
上述代码中,我加了一个判断,当像素的强度非常接近大气光值时,对于t的计算加上一个增幅项,即:(r0-r)/r0;其中,r是当前的像素intensity,r0是判断的阈值。
经过这样简单的处理之后,我们再来看看效果吧!见下图:
原图:
未优化的效果:
优化之后的效果:
对比可以看出来,优化之后明显的去除了第二幅图中的色斑效应!当然,阈值的选择很重要,太大了,图像去雾不明显,太小了色斑又会出来,大家可以继续优化,搞个动态阈值什么的~
下一篇,介绍一下opencv for android,并在android中实现去雾算法(我并不想染指android,没办法啊,党指挥枪哈哈)。
2016/09/25更新
时隔多日。。博主并不想更新了 ==
主要是在安卓中如果想保持较快的处理速度一定要调用C的函数,其他参考opencv for android的 api即可
这就涉及到如何在java中调用c函数的一些blablabla了。。。
再废话一句:突然想到《藤王阁序》一句:
登高作赋,是所望于群公。