资源简介
MATLAB暗通道去雾函数,完全按何凯明博士论文做的。
代码片段和文件信息
%%% 暗通道去雾函数,可自动检测天空,采用不同的算法。
%%% src--------------输入彩色图像
%%% rad1rad2rad3---最小值滤波、引导滤波、天空区域形态学所用算子尺寸
%%% Amax-------------大气光最大值
%%% thre-------------天空区域梯度阈值
%%% tao--------------天空区域亮度阈值
%%% ratio------------天空区域比例阈值
%%% enhance----------是否增强
function imgout=DarkchDehazed(srcrad1rad2rad3Amaxthretaoratioenhance)
[HWC]=size(src);
if C~=3
error(‘Not 3 channels!‘);
end
gray=double(rgb2gray(src));
%% 是否含天空
[FXFY] = gradient(gray);
Indense=sqrt(FX.^2+FY.^2);
candid=gray>tao & Indense<=thre; % 候选区域:亮度超过阈值,梯度幅度为0.
% imshow(candid)
SE1=strel(‘square‘rad3);
issky=imclose(candidSE1); % 天空标为1,非天空0.
% figure;imshow(issky)
disp(sum(sum(issky))/(H*W));
if sum(sum(issky))/(H*W)>=ratio
disp(‘sky exist.‘);
flag=true;
else
disp(‘none‘);
flag=false;
end
chr=double(src(::1));
chg=double(src(::2));
chb=double(src(::3));
perc=0.001;
numPt=floor(perc*H*W);
A=zeros(31);
omg=0.95;
SE2=strel(‘square‘rad1); % 最小值滤波形态学
% 含天空,以天空部分估计A,分别计算透射率。
% 预估透射率
if flag
red_s=double(chr).*issky;
green_s=double(chg).*issky;
blue_s=double(chb).*issky;
sky=cat(3red_sgreen_sblue_s);
skygray=rgb2gray(uint8(sky));
skygray=reshape(skygray1[]);
red_s=reshape(red_s1[]);
green_s=reshape(green_s1[]);
blue_s=reshape(blue_s1[]);
[~ix]=sort(skygray‘descend‘);
sortedred_s=red_s(ix);
sortedgreen_s=green_s(ix);
sortedblue_s=blue_s(ix);
A(1)=min(mean(sortedred_s(1:numPt))Amax);
A(2)=min(mean(sortedgreen_s(1:numPt))Amax);
A(3)=min(mean(sortedblue_s(1:numPt))Amax);
nonsky=~issky;
red_ns=double(chr).*nonsky/A(1);
green_ns=double(chg).*nonsky/A(2);
blue_ns=double(chb).*nonsky/A(3);
red_ns=reshape(red_ns1[]);
green_ns=reshape(green_ns1[]);
blue_ns=reshape(blue_
- 上一篇:基于FPGA分布式算法FIR滤波器verilog代码
- 下一篇:时频分析tfsap
评论
共有 条评论