• 大小: 4KB
    文件类型: .m
    金币: 2
    下载: 0 次
    发布日期: 2024-02-01
  • 语言: Matlab
  • 标签:

资源简介

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_

评论

共有 条评论