暗通道先验算法
本文参考何凯明大神的暗通道去雾算法《Single Image Haze Removal Using Dark Channel Prior》和一些相关的csdn上的博客,并附上自己编写的代码
基于统计大量清晰图像得到的暗通道先验理论是指大部分不含天空的优质图像的所有像素在R,G,B这3个通道中最少存在一个颜色通道灰度值相当低以至趋近于0[5],也就是在一定的微小区域里最小辐射强度值极低。一幅图像J可定义为:
前言
暗通道先验算法的学习
一、设置已知参数
t0=0.1,w0=0.95
二、操作如下
clear all ;close all;clc
I = imread('C:\Users\dzt\Desktop\1.jpg'); %读取图片
I = double(I)/255;
[m,n,g] = size(I);
dark_I = zeros(m,n);
for i=1:m %%暗通道
for j=1:n
dark_I(i,j) = min(I(i,j,:));
end
end
I1 = ordfilt2(dark_I,1,ones(15,15),'symmetric'); %%最小值滤波效果最好
figure,
subplot(131),imshow(I);
subplot(132),imshow(dark_I);
subplot(133),imshow(I1); %%生成最终的暗通道图T1
dark_channel = I1;
A = max(max(dark_channel))*0.999; %取前0.1%
w0 = 0.95;
t_ = 1 - w0 * I1/ A; %%透射率t计算
t0 = 0.1;
t = max(t0,t_);
J = zeros(m,n,3);
for k = 1:3
for i = 1:m
for j = 1:n
J(i,j,k) = (I(i,j,k)-A)/t(i,j)+A;
end
end
end
figure(1),
subplot(121),imshow(I);
subplot(122),imshow(J);
二、结果如下
总结
暗通道先验算法处理之后,图中物体出现光环以及失真。