基于暗通道的去雾算法Dark Prior的Matlab实现
Dark Prior算法简介
Dark Prior算法是由何凯明博士于2009年提出的一种图像去雾处理的算法,其主要特点是利用图像的暗通道(Dark Channel)来估计影像的球大气光成分A以及透射率t(x)根据如下公式来还原影像:
I ( z ) = J ( x ) t ( x ) + A ( 1 − t ( x ) ) . I(z) = J(x)t(x)+A(1-t(x)). I(z)=J(x)t(x)+A(1−t(x)).
其中,I(x)就是有雾的影像,而J(x)则是我们的目标影像。具体的原理我主要参考的这边博文:DarkPrior原理
其实,里面博主已经给出了他的Dark Prior的代码,但是有点复杂,我没看太懂,就按照他分析的原理自己用matlab写了个代码。反正亲测是可以用的。主要是帮助那些和我一样渴望学习的小白了解一下算法过程的。我用前面那篇博文的博主的图片试了一下,感觉还可以,就是树那幅有点奇怪。另外,那个博主算A的时候是取的窗口内平均值,而不是作者说的最大值,我两个都试了一下,觉得最大值的好一点,反正我代码里面两个都有,大家试验的时候去掉注释就行。另外,本人小白一个,编程能力有限,代码没优化过的,有点慢,还请见谅。
代码:
function darkprior()
w=15;% 窗口宽度,可自己调整
[filename,pathname]=uigetfile({
'*.png';'*.jpg'},'选择图片');
I=double(imread([pathname,filename]))/255;
figure,subplot(2,2,1),imshow(I,[]);title('原始影像');
I2=zerowith(I,w);%延拓