图像去雾 利用最小值滤波(待改进)

图像去雾

我的个神啊~ 调了这么久终于阶段性“胜利了” —— 利用最小值滤波正确实现图像去雾。

因为是C语言实现,很多细节都要注意,很砸时间——本来看起来很简单的程序,就是有bug,debug的时间很长了,这也是一种锻炼吧,难得的实战机会。磨C 这把刀这么久了,是该做做具体应用了!刀子是否锋利,要接受考验!

程序很大程度上没有利用OpenCV的一些数据操作的接口,除了图像显示和读取之外,其他的数据处理部分都是自己实现的。这几天的时间全砸进去了~ 暑假哇~时间过的慢点可好~

由于项目正在进行中,代码目前不能开源,等项目结题之后,一定公开代码实现。

不废话了。入正题:

int mininum_filter(IplImage* const img_origin,
		   IplImage* const img_win_dark,
		   IplImage* const img_af_filter);

int defog(IplImage* const img_origin,
	  IplImage* const img_win_dark,
	  IplImage* const img_af_filter,
	  IplImage* const img_temp);

int get_win_dark(IplImage* const img_origin,IplImage* const img_win_dark);

double max_value_in_picture(IplImage* const img);

double average_value_in_picture(IplImage* const img);

上面是程序关键的接口部分。

首先defog函数是实际操作主函数,调用mininum_filter,
get_win_dark, max_value_in_picture, average_value_in_picture.四个函数。

int mininum_filter(IplImage* const img_origin,
		   IplImage* const img_win_dark,
		   IplImage* const img_af_filter);

img_origin 指向原始图片的结构体

img_win_dark用于指向dark channel 暗通道(RGB图像经过取三原色最小值后得到的图像)

img_af_filter用于指向最小值滤波之后得到的图像

前两天搞最小值滤波的经验整理

double max_value_in_picture(IplImage* const img);

double average_value_in_picture(IplImage* const img);

这俩个函数则负责实现从传入图片中找出全图像素值最大值以及全图的像素值平均值

酷帅的前辈搞出来的理论:

香港大学的牛人的论文

大一很有“冲劲”,极力批判大学里的东西学了不用,学习不面向应用,面向社会,学习有什么用?!于是很强调动手能力,想动手做东西,各种问学长,想进实验室做东西,后来慢慢发现,也领悟到,没有强大到“深厚”的理论基础,应用是做不出来的,而另一方面,也不能死读书,不能光搞理论。让想做什么指导想学什么! 这段话出现在这里是为了反省自己,提醒自己,要积累厚实的理论基础。不能抛弃理论。我想很多童鞋大一的时候会有和我一样的想法。仅此炮灰提醒。

我get到的去雾的理论:

生活中常遇到雾霾天气,这时候人的视觉画面变得不够清晰,影响 人们的正常生活。既然都影响正常生活了,去雾的必要性就很大了,汽车驾驶员如果急忙在雾霾天去赶路,高速上,如果能通过监控器看清路面,这里去雾的意义就上升到了保证生命安全!图像去雾是很有必要的!

下面是生活中常见的有雾场景:

下图就是一个去雾的例子:

左边有雾的图像经过去雾处理得到比较清晰的图像(这是多么神奇而又有意思的事情!)

这是贯穿实现代码的最核心的去雾公式:

左边的是有雾的原图像,A是大气光强系数,J是我们希望得到的去雾后图像,t是传递矩阵

暗通道——Dark channel

彩色图像是通过三原色构成的(理解这个很重要,C程序实现的细节要对内存进行操作);

然后这里dark channel就是取每个pixel‘s mininum value.,然后利用一定的窗口大小对得到的图像进行滤波,即可得到dark channel。

最后我目前程序处理之后输入输出对比图:

我都不知道看这几个家伙的脸看了多少遍了~~~Bug啊bug。。。

改进目标:

用最小值滤波显然有不住之处(看那天安门三个人的“光环”。。。),物件周围的雾没有去掉,以至于留下一圈“光环”

已经找到解决办法——中值去雾。然而这又又另一个问题(已经测试过了),中值去雾要对搜索框里的所有数值进行排序,我采用的普通冒泡排序速度都不行,程序运行比较慢,目前打算改成quick sort 试试,能不能有明显的提升。 最小值去雾和中值去雾由于数据排序取值的问题导致两种方案的时间复杂度完全无不一样了。。。

上帝保佑我明天改的时候,改成快排能保证程序运行的速度~

2014.08.11

凌晨 于XTU

图像去雾 利用最小值滤波(待改进)

时间: 2024-11-05 16:40:36

图像去雾 利用最小值滤波(待改进)的相关文章

避免图像去雾算法中让天空部分出现过增强的一种简易方法。

在经典的几种去雾算法中,包括何凯明的暗通道去雾.Tarel的基于中值滤波的去雾以及一些基于其他边缘保留的方法中,都有一个普遍存在的问题:即对天空部分处理的不好,天空往往会出现较大的面积的纹理及分块现象.究其主要原因,还是因为天空部位基本上是不符合暗通道去雾先验这个前决条件的.目前,针对这一问题,我搜索到的主要有以下几篇文章进行了处理: 1. 改进的基于暗原色先验的图像去雾算法 作者: 蒋建国\侯天峰\齐美彬   合肥工业大学 2011. 2.Single image dehazing Algor

用于图像去雾的优化对比度增强算法

图像去雾哪家强?之前我们已经讨论过了著名的基于暗通道先验的图像去雾(Kaiming He, 2009)算法,如果你用兴趣可以参考: 暗通道优先的图像去雾算法(上) 暗通道优先的图像去雾算法(下) 此外,网上也有很多同道推荐了一篇由韩国学者所发表的研究论文<Optimized contrast enhancement for real-time image and video dehazing>(你也可以从文末参考文献[1]给出的链接中下载到这篇经典论文),其中原作者就提出了一个效果相当不错的图

《Single Image Haze Removal Using Dark Channel Prior》一文中图像去雾算法的原理、实现、效果

本文完全转载:http://www.cnblogs.com/Imageshop/p/3281703.html,再次仅当学习交流使用.. <Single Image Haze Removal Using Dark Channel Prior>一文中图像去雾算法的原理.实现.效果(速度可实时) 本文算法合作联系QQ: 33184777, 非诚勿扰 邮件地址:   [email protected] 最新的效果见 :http://video.sina.com.cn/v/b/124538950-125

opencv的图像去雾

上个月用基于中值滤波的暗通道图像去雾算法在matlab中实现了,现在想把它改造成C++的代码,结果效果明显不对,特此发出来,希望能找到问题. 1 #include <opencv2/core/core.hpp> 2 #include <opencv2/highgui/highgui.hpp> 3 #include <opencv2/highgui/highgui_c.h> 4 #include <opencv2/imgproc/types_c.h> 5 #i

高级图像去雾算法的快速实现(转载)

原文:http://blog.csdn.net/laviewpbt/article/details/11555877 最新的效果见 :http://video.sina.com.cn/v/b/124538950-1254492273.html 可处理视频的示例:视频去雾效果 在图像去雾这个领域,几乎没有人不知道<Single Image Haze Removal Using Dark Channel Prior>这篇文章,该文是2009年CVPR最佳论文.作者何凯明博士,2007年清华大学毕业

图像去雾 第二次报告

图像去雾 第二次报告 去雾理论基于是根据何凯明博士的论文成果来做的.Standing on the shoulder of gaints ! 之前我关于去雾的第一次总结 由于采用最小值滤波去雾会出现"边界问题" 当"前景"和"背景"在空间上相距较远时,暗通道的像素value会相差较大,最小值滤波和最大值滤波都会导致边界问题. 此时最理想的方法应该是中值滤波,然而中值滤波几乎完全不可避免的要对搜索框的数据进行排序,然后才能得到中值.排序是时间代价很

暗通道优先的图像去雾算法(下)

书接上文 http://blog.csdn.net/baimafujinji/article/details/27206237 我们已经了解了暗通道图像去雾算法的基本原理,下面我们来编程实现,然后对结果再做一些讨论. 上述代码中调用了几个函数,限于篇幅这里仅给出其中的暗通道处理函数,其余函数读者可以尝试自己写写看,当然其中最关键的就是暗通道处理函数,这也是算法的核心内容. 另外,代码里我们使用了导向滤波函数,导向滤波代码来自何恺明博士,读者可以访问他的网页获得源码,已经论文的原文,链接如下: h

图像去雾算法

题记:——首先交代一下背景,之前一直做FPGA硬件方面的东西,由于业务需要转做图像处理.由一个小白做起,从阅读冈萨雷斯开始了图像处理之路.中间也经历了很多坎坷曲折,不多说了开图. 阅读了一些图像去雾方面的论文与资料,发现大部分都是围绕“何凯明博士(香港大学)提出的暗通道先验理论做研究”,鄙人也拜读了何博士的文章,真是心悦诚服之感. 论文名称为“single image haze removal using dark channel prior” 论文中是这样解释各个参数的:I(X)就是有雾图像(

暗通道优先的图像去雾算法(上)

?? 11.1  暗通道优先的图像去雾算法 图像增强与图像修复二者之间有一定交叉,尽管它们一个强调客观标准,一个强调主观标准,但毕竟最终的结果都改善了图像的质量.图像去雾就是这两种技术彼此交叉领域中最典型的代表.如果将雾霾看作是一种噪声,那么去除雾霾的标准显然是非常客观的,也就是要将图像恢复至没有雾霾下所获取的情况.但是如果将在雾霾环境下拍摄的照片就看作是一种图像本来的面貌,那么去雾显然就是人们为了改善主观视觉质量而对图像所进行的一种增强.早期图像去雾的研究并没有得到应有的重视,很多人认为它的实