对于图像去雾领域的研究者来说,何凯明博士的“暗通道先验(DCP)”可谓是奉若圭臬,接触这个概念一年了,但一直没有深挖,一直都是“拿来主义”,看大家粗略地一概而过,今天一时兴起,想着小搞一波,咱们就稍微深入一点,看看这个神奇的“暗通道”到底是个什么东西。
先来一段经典的代码吧,何博士的基于暗通道先验的单幅图像去雾中的部分代码,本人做了详细的注释,应该是可以看懂的:
clear all;
I=imread('xxxx\dehazing.png'); %读取图片
I=double(I); %将读入图像I的uint8数据转换为double类型的数据
I=I./255; %将像素值转换到0~1之间
dark=darkfunction(I);
subplot(1,2,1);imshow(I);
subplot(1,2,2);imshow(dark); %展示雾图和对应的暗通道
function [dark] =darkfunction(I)
R=I(:,:,1); %将I的第一层赋值给R,下面的G、B分别为I的第二、三层
G=I(:,:,2); %三个参数分别代表行、列和层
B=I(:,:,3);
[m,n]=size(R); %size求取矩阵大小,返回其行列值,即m、n
a=zeros(m,n); %zeros返回 m x n 大小的零矩阵
for i=1:m %i从1开始一直循环到m
for j=1:n
a(i,j)=min(R(i,j),G(i,j));
a(i,j)=min(a(i,j),B(i,j));
end;
end;