首页 > 代码库 > 图像去雾 第二次报告
图像去雾 第二次报告
图像去雾 第二次报告
去雾理论基于是根据何凯明博士的论文成果来做的。Standing on the shoulder of gaints !
之前我关于去雾的第一次总结
由于采用最小值滤波去雾会出现“边界问题”
当“前景”和“背景”在空间上相距较远时,暗通道的像素value会相差较大,最小值滤波和最大值滤波都会导致边界问题。
此时最理想的方法应该是中值滤波,然而中值滤波几乎完全不可避免的要对搜索框的数据进行排序,然后才能得到中值。排序是时间代价很大的操作,说的轻巧,但是如果让user去等待20s+估计没人买你产品了。
快速,优质的图像,是项目应该追求的最好目标,这应该是正方向,两者都不能抛弃
中值算法让这两个条件——快速,优质图像,变得异常艰难(最起码对于我这种渣渣来说,快排都不行,会等很久)。
尝试用均值去滤波
去雾前: 去雾后:
细心观察会发现,人物边缘,图像前景和背景分解的边缘,会有明显的可见白雾没有去除。
为此很苦恼,中值必须排序,排序就慢(做图像的数据量太大了).
在一副500*400像素的图片里面15*15的搜索框感觉算比较大的了,我们可以通过减小搜索框的大小来减小单次待处理的数据量(其实这样以来,总的计算次数也会下降!),而这几乎是一种手段,类似于数学里的非线性模型的小段微分之后的线性化看待,这样,只要框适当小,框内数据值波动不会很大,这很重要,即使在边界也会成立,影响不大。
于是,我尝试改良均值滤波。
用中值滤波和均值滤波结合来处理——”伪中值滤波“
for(square_row = row-SQUARE_LENGTH/2,sub = 0,sub_prev = 255; square_row < (row + SQUARE_LENGTH/2+1); square_row++) { for(square_col = col-SQUARE_LENGTH/2; square_col < (col+SQUARE_LENGTH/2 +1);square_col++) { if(square_row >= 0 && square_col >= 0 && square_row < (search_win_height_end) && square_col < (search_win_width_end)) { sub = temp - *(ptr_array_win_dark + (square_row)*(img_win_dark->width) + (square_col)); //temp 是已经求得的搜索框像素值均值,做差,取差值最小的像素点的像素值 if(sub_prev > sub) { sub_prev = sub; median_value = http://www.mamicode.com/*(ptr_array_win_dark + (square_row)*(img_win_dark->width) + (square_col));>
处理思想:通过先计算均值,然后找到搜索框内距离均值最近的点(该点的像素值不一定是均值,但是是最靠近的)
用这点的像素值作为滤波像素值。
边缘问题得到了很好的解决!
感觉效果蛮好的~
C 版本出来的效果和Matlab的效果几乎完全一致,赶脚可以达到预期目标。
—— EOF
2014.08.16 下午 于XTU