精华内容
下载资源
问答
  • 暗通道去雾MATLAB

    2017-07-25 16:50:05
    MATLAB暗通道去雾函数,完全按何凯明博士论文做的。
  • 何凯明博士暗通道去雾算法的 matlab 源码,打开文件内的 test.m 文件即可运行。
  • 暗通道先验去雾matlab代码,包括导向滤波代码
  • 何凯明去雾MATLAB代码

    2020-02-25 07:40:16
    何凯明 基于原色先验的图像去雾MATLAB代码
  • 何凯明 基于原色先验的图像去雾MATLAB代码,何恺明,孙剑,汤晓鸥香港中文大学微软亚洲研究院,大家可看看
  • 数字图像处理-暗通道去雾matlab代码实现
  • 基于何恺明的暗影通道去雾实现,matlab源码全上传,直接可用。
  • 暗通道去雾matlab

    2017-10-23 11:22:10
    基于何凯明博士的去雾论文,matlab实现,里面包含了测试程序及图像
  • matlab版何恺明老师暗通道去雾法源码
  • 图像去雾算法
  • 这段代码对内存很高,所使用图片尽量控制在200*300范围内 img_name='002.bmp'; % 原始图像 I=double(imread(img_name))/255; % 获取图像大小 [h,w,c]=size(I); win_size = 7; img_size=w*h; dehaze=zeros...

    这段代码对内存很高,所使用图片尽量控制在200*300范围内

    img_name='002.bmp';

    % 原始图像

    I=double(imread(img_name))/255;

    % 获取图像大小

    [h,w,c]=size(I);

    win_size = 7;

    img_size=w*h;

    dehaze=zeros(img_size*c,1);

    dehaze=reshape(dehaze,h,w,c);

    figure, imshow(I);

    win_dark=zeros(img_size ,1);

    %这段代码可用矩阵处理

    for cc=1:img_size

       win_dark(cc)=1;

    end

     

    win_dark=reshape(win_dark,h,w);

    %计算分块darkchannel,此处也尝试用矩阵处理,循环太多

     for j=1+win_size:w-win_size

        for i=win_size+1:h-win_size

            m_pos_min = min(I(i,j,:));

            for n=j-win_size:j+win_size

                for m=i-win_size:i+win_size

                    if(win_dark(m,n)>m_pos_min)

                        win_dark(m,n)=m_pos_min;

                    end

                end

            end

          

       end

     end

     

     figure, imshow(win_dark);

    %输出darkchannel图像

    %%%%%%%%%%%%%%% 

     for cc=1:img_size

       win_dark(cc)=1-win_dark(cc);

     end

    %%%%%%%%%%%%%%%

     %选定精确dark value坐标

    win_b = zeros(img_size,1);

     

    %rem函数为求余函数,有可能是进行边缘处理

    for ci=1:h

        for cj=1:w

            if(rem(ci-8,15)<1)

                if(rem(cj-8,15)<1)

                    win_b(ci*w+cj)=win_dark(ci*w+cj);

                end

            end

          

        end

    end

     

    %显示分块darkchannel

    %figure, imshow(win_dark);

     

    neb_size = 9;

    win_size = 1;

    epsilon = 0.0000001;

    %指定矩阵形状

    indsM=reshape([1:img_size],h,w);

    %是不是win_dark

    %计算矩阵L

    tlen = img_size*neb_size^2;

    row_inds=zeros(tlen ,1);

    col_inds=zeros(tlen,1);

    vals=zeros(tlen,1);

    len=0;

    for j=1+win_size:w-win_size

        for i=win_size+1:h-win_size

            if(rem(ci-8,15)<1)

                if(rem(cj-8,15)<1)

                    continue;

                end

            end

          win_inds=indsM(i-win_size:i+win_size,j-win_size:j+win_size);

          win_inds=win_inds(:);%列显示

          winI=I(i-win_size:i+win_size,j-win_size:j+win_size,:);

          winI=reshape(winI,neb_size,c); %三个通道被拉平成为一个二维矩阵 3*9

          win_mu=mean(winI,1)';  %求每一列的均值 如果第二个参数为2 则为求每一行的均值  //矩阵变向量

          win_var=inv(winI'*winI/neb_size-win_mu*win_mu' +epsilon/neb_size*eye(c)); %求方差

     

          winI=winI-repmat(win_mu',neb_size,1);%求离差

          tvals=(1+winI*win_var*winI')/neb_size;% 求论文所指的矩阵L

     

          row_inds(1+len:neb_size^2+len)=reshape(repmat(win_inds,1,neb_size),...

                                                 neb_size^2,1);

          col_inds(1+len:neb_size^2+len)=reshape(repmat(win_inds',neb_size,1),...

                                                 neb_size^2,1);

          vals(1+len:neb_size^2+len)=tvals(:);

          len=len+neb_size^2;

        end

    end

    vals=vals(1:len);

    row_inds=row_inds(1:len);

    col_inds=col_inds(1:len);

    %创建稀疏矩阵

    A=sparse(row_inds,col_inds,vals,img_size,img_size);

    %求行的总和 sumA为列向量

    sumA=sum(A,2);

    %spdiags(sumA(:),0,img_size,img_size) 创建img_size大小的稀疏矩阵其元素是sumA中的列元素放在由0指定的对角线位置上。

    A=spdiags(sumA(:),0,img_size,img_size)-A;

     

     

      %创建稀疏矩阵

      D=spdiags(win_b(:),0,img_size,img_size);

      lambda=1;

      x=(A+lambda*D)\(lambda*win_b(:).*win_b(:));   %求解式15

     

       %去掉0-1范围以外的数

      alpha=max(min(reshape(x,h,w),1),0);

    figure, imshow(alpha);

    A=220/255; %大气光没有去计算

    %去雾

           for i=1:c

        for j=1:h

            for l=1:w

                dehaze(j,l,i)=(I(j,l,i)-A)/alpha(j,l)+A;

            end

        end

    end

    figure, imshow(dehaze);

    展开全文
  • 去雾算法matlab何凯明

    2018-03-26 19:28:20
    何凯明大声去雾算法matlab版本的实现,欢迎下载学习!
  • matlab基于暗通道原理去雾算法

    热门讨论 2012-02-10 19:32:36
    matlab基于暗通道原理去雾算法,内含原理文献和程序文件。请参照文献看程序,程序的最后一部分文献中没有,为复原公式。
  • 参考论文:He K M, Sun J, Tang X O. Single image haze removal using dark channel prior...获取大气光值和透射率,是暗通道先验去雾模型的灵魂。 ———写在前面 1、相关代码 close all;clear all w0=0.65; %0.65 .

    参考论文:He K M, Sun J, Tang X O. Single image haze removal using dark channel prior [J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2011, 33(12): 2341-2353.

    大气光值和透射率

    1、相关代码

    close all;clear all
    w0=0.65;   %0.65  乘积因子用来保留一些雾,1时完全去雾    
    t0=0.1;
    I=imread('1.png');
    figure;
    subplot(221)
    imshow(I);
    title('原始图像');
    [h,w,s]=size(I);
    min_I=zeros(h,w);           
    
    %下面取得暗通道图像
    for i=1:h                 
        for j=1:w
            dark_I(i,j)=min(I(i,j,:));
        end
    end
    
    subplot(223)
    imshow(dark_I);
    title('dark channnel的图形');
    
    Max_dark_channel=double(max(max(dark_I)))  %天空亮度
    dark_channel=double(dark_I);
    t=1-w0*(dark_channel/Max_dark_channel);   %取得透射分布率图
    
    subplot(224)
    T=uint8(t*255);
    imshow(T);
    title('透射率t的图形');
    
    t=max(t,t0);
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    I1=double(I);
    J(:,:,1) = uint8((I1(:,:,1) - (1-t)*Max_dark_channel)./t);
    
    J(:,:,2) = uint8((I1(:,:,2) - (1-t)*Max_dark_channel)./t);
    
    J(:,:,3) =uint8((I1(:,:,3) - (1-t)*Max_dark_channel)./t);
    subplot(222)
    imshow(J);
    title('去雾后的图像');
    

    2、测试结果
    在这里插入图片描述

    图1 去雾效果
    展开全文
  • 何凯明的暗通道去雾算法matlab代码,可运行
  • 上述伪代码中,I表示导向图像(guided image),p为输入图像(input image),q为输出图像(output image),表示均值滤波,r为窗口半径。 ** %-------------------------------------- clc; clear; close all; %% ...

    一、获取代码方式

    获取代码方式1:
    完整代码已上传我的资源:【图像增强】基于matlab暗通道图像去雾【含Matlab源码 101期】
    获取代码方式2:
    通过紫极神光博客主页开通CSDN会员,凭支付凭证,私信博主,可获得此代码。

    获取代码方式3:
    通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。

    备注:开通CSDN会员,仅只能免费获得1份代码(有效期为开通日起,三天内有效);
    订阅紫极神光博客付费专栏,可免费获得2份代码(有效期为订阅日起,三天内有效);

    二、简介

    1 暗通道先验图像去雾方法
    1.1 光线透射率模型
    光在传播中由于散射使得从光源发出的辐射只有部分能到达接收传感器,其他则被散射到传播介质中。假设距离较小时散射光强与距离是线性关系,当光源距离传感器无限接近时,光的衰减值可近似为:Br,其中β为空气的散射系数;r为光源与传感器间的距离。大气密度均匀时,光线透射率的数学模型为:
    在这里插入图片描述
    式中:D为场景深度;t为光线透射率,用于量化传感器接收光强与光源表面光强间的比例关系,即没有被散射的辐射与光源辐射间的比例关系。

    1.2 暗通道先验理论
    基于统计大量清晰图像得到的暗通道先验理论是指大部分不含天空的优质图像的所有像素在R,G,B这3个通道中最少存在一个颜色通道灰度值相当低以至趋近于0[5],也就是在一定的微小区域里最小辐射强度值极低。一幅图像J可定义为:
    在这里插入图片描述
    式中:J dark为图像J的暗通道值; J为图像J的c通道灰度值; Q(x) 为以像素x为中心的局部微小区域; y为区域内任一像素。

    1.3 暗通道先验图像去雾处理
    图像去雾的目标是将传感器接收到的有雾图像利用获得的有用信息通过去雾还原出清晰图像。暗通道先验图像去雾处理是根据暗通道原理获取先验知识,再利用有雾图像退化模型实现图像去雾效果。

    1.3.1 图像退化模型
    在计算机视觉图形学领域,有雾图像的退化模型为[6]:
    在这里插入图片描述
    式中:l(x)为传感器接收到的场景信号,即输入的有雾影像;场景辐射J(x)为信号处理后的清晰图像;A为环境光照强度;t(x)为大气透射率。J(x)t(x)称为直接衰减项,用来量化场景辐射和传播中的信号损失。A(1-t(x))表示图像接收到的大气散射光强,它是引起色彩偏移和云雾效果的直接原因。

    1.3.2 估算环境光照强度
    暗通道图像中灰度值越高的区域云雾越厚,在输入图像中位于这部分区域的]像素灰度值越接近于环境光照强度。估算环境光照强度首先需要找到暗通道图像中灰度值最高并占图像总像素数量01%的像素点,记录它们对应的坐标索引,然后根据坐标索引在输入的有雾图像中找到对应像素点,计算有雾图像中对应像素点的灰度平均值作为环境光照强度A。

    1.3.3估算大气透射率
    使用t’(x)表示以像素x为中心的滤波窗口内的大气透射率,假设它局部不变对式(3)最小值运算,分别计算R,G,B这3个颜色通道中的最小值,即
    在这里插入图片描述
    将3个颜色通道的最小值进行运算,可得出以像素x为中心的滤波窗口内的灰度最小值,即
    在这里插入图片描述
    根据暗通道先验原理和式(2)可以得出:
    在这里插入图片描述
    于是,由式(5)和式(6)计算出大气透射率为:
    在这里插入图片描述
    1.3.4 去雾处理
    暗通道先验条件可用来量化云雾厚度和全部像素的辐射还原量,然后恢复出清晰优质的图像。通过式(3)的有雾图像退化模型和环境光照强度A、大气透射率t(x),可进行单幅图像去雾处理,即
    在这里插入图片描述
    2 暗通道先验算法去雾效果优化
    本文优化流程如图1所示。当输入图像云雾不均时,其大气透射率图层的灰度信息仅处于有限范围内,而整张图像的辐射还原量将被限制在一定区间里,不能分别准确还原云雾厚薄区域的辐射强度,从而影响图像去雾效果,考虑利用拉伸大气透射率图层对比度的方法来改善云雾厚薄不均时基于暗通道先验得出的无雾图像质量。
    在这里插入图片描述
    图1 基于暗通道先验的图像去雾处理效果优化流程

    三、部分源代码

    ** 
    %--------------------------------------
    clc;
    clear;
    close all;
     
    %% -----------图像去雾算法----------------
    %% 加载图片
    img = imread('foggy_bench.jpg');
    figure;imshow(img);title('雾图');
    %% 去雾函数
    De_img = anyuanse(img);
    figure;imshow(De_img);title('去雾图');
    %% 输出结果,分辨率300dpi并保存为tiff图片
    imwrite(De_img,'1.tiff','tiff','Resolution',300);
    function R = anyuanse(m_img)
    % 原始图像
     
    win_dark=zeros(img_size ,1);
     
    for cc=1:img_size
       win_dark(cc)=1;
    end
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
    win_dark=reshape(win_dark,h,w);
    %计算分块深度darkchannel
     for j=1+win_size:w-win_size
        for i=win_size+1:h-win_size
            m_pos_min = min(I(i,j,:));
            for n=j-win_size:j+win_size    
                for m=i-win_size:i+win_size
                    if(win_dark(m,n)>m_pos_min)
                        win_dark(m,n)=m_pos_min;
                    end
                end
            end
           
        end
     end
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
     %图像透射率预处理,深度图反相
     for cc=1:img_size
       win_dark(cc)=1-win_dark(cc);
     end
     %%%%%%%%%%%%%%%%%图像软抠图开始%%%%%%%%%%%%%%%%%%%%%
     %选定精确dark value坐标
    win_b = zeros(img_size,1);
     
    for ci=1:h
        for cj=1:w
            if(rem(ci-8,15)<1)     %没有余数?
                if(rem(cj-8,15)<1)
                    win_b(ci*w+cj)=win_dark(ci*w+cj);
                end
            end
           
        end
    end
     
    %显示分块darkchannel
    neb_size = 9;
    win_size = 1;
    epsilon = 0.0000001;
    %指定矩阵形状
    indsM=reshape([1:img_size],h,w);
    %计算矩阵L
    tlen = img_size*neb_size^2;
    row_inds=zeros(tlen ,1);
    col_inds=zeros(tlen,1);
    vals=zeros(tlen,1);
    len=0;
    for j=1+win_size:w-win_size
        for i=win_size+1:h-win_size
            if(rem(ci-8,15)<1)
                if(rem(cj-8,15)<1)
                    continue;
                end
            end
          win_inds=indsM(i-win_size:i+win_size,j-win_size:j+win_size);
          win_inds=win_inds(:);%列显示
          winI=I(i-win_size:i+win_size,j-win_size:j+win_size,:);
          winI=reshape(winI,neb_size,c); %三个通道被拉平成为一个二维矩阵 3*9
          win_mu=mean(winI,1)';  %求每一列的均值 如果第二个参数为2 则为求每一行的均值  //矩阵变向量
          win_var=inv(winI'*winI/neb_size-win_mu*win_mu' +epsilon/neb_size*eye(c)); %求方差
          winI=winI-repmat(win_mu',neb_size,1);%求离差
          tvals=(1+winI*win_var*winI')/neb_size;% 求论文所指的矩阵L
          row_inds(1+len:neb_size^2+len)=reshape(repmat(win_inds,1,neb_size),...
                                                 neb_size^2,1);
          col_inds(1+len:neb_size^2+len)=reshape(repmat(win_inds',neb_size,1),...
                                                 neb_size^2,1);
          vals(1+len:neb_size^2+len)=tvals(:);
          len=len+neb_size^2;
        end
    end 
     
     
     
    vals=vals(1:len);
    row_inds=row_inds(1:len);
    col_inds=col_inds(1:len);
    %创建稀疏矩阵
    A=sparse(row_inds,col_inds,vals,img_size,img_size);
    %求行的总和 sumA为列向量
    sumA=sum(A,2);
    %spdiags(sumA(:),0,img_size,img_size) 创建img_size大小的稀疏矩阵其元素是sumA中的列元素放在由0指定的对角线位置上。
    A=spdiags(sumA(:),0,img_size,img_size)-A;
     
     
      %创建稀疏矩阵
      D=spdiags(win_b(:),0,img_size,img_size);
      lambda=1;
      x=(A+lambda*D)\(lambda*win_b(:).*win_b(:));
      %%%%%%%%%%%%%%%%%%%%%%%%%软图像抠图结束%%%%%%%%%%%%%%%55
     
       %去掉0-1范围以外的数
      alpha=max(min(reshape(x,h,w),1),0);%图像透射率
     
    A=220/255; %大气光没有去计算
    %去雾
           
    for i=1:c
        for j=1:h
            for l=1:w
                dehaze(j,l,i)=(I(j,l,i)-A)/alpha(j,l)+A;
            end
        end
    end
    R = dehaze;function R = anyuanse(m_img)
    % 原始图像
    I=double(m_img)/255;
     
    % 获取图像大小
    [h,w,c]=size(I);
    win_size = 7;
    img_size=w*h;
    dehaze=zeros(img_size*c,1);
    dehaze=reshape(dehaze,h,w,c);
     
    win_dark=zeros(img_size ,1);
     
    for cc=1:img_size
       win_dark(cc)=1;
    end
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
    win_dark=reshape(win_dark,h,w);
    %计算分块深度darkchannel
     for j=1+win_size:w-win_size
        for i=win_size+1:h-win_size
            m_pos_min = min(I(i,j,:));
            for n=j-win_size:j+win_size    
                for m=i-win_size:i+win_size
                    if(win_dark(m,n)>m_pos_min)
                        win_dark(m,n)=m_pos_min;
                    end
                end
            end
           
        end
     end
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
     %图像透射率预处理,深度图反相
     for cc=1:img_size
       win_dark(cc)=1-win_dark(cc);
     end
     %%%%%%%%%%%%%%%%%图像软抠图开始%%%%%%%%%%%%%%%%%%%%%
     %选定精确dark value坐标
    win_b = zeros(img_size,1);
     
    for ci=1:h
        for cj=1:w
            if(rem(ci-8,15)<1)     %没有余数?
                if(rem(cj-8,15)<1)
                    win_b(ci*w+cj)=win_dark(ci*w+cj);
                end
            end
           
        end
    end
     
    %显示分块darkchannel
    neb_size = 9;
    win_size = 1;
    epsilon = 0.0000001;
    %指定矩阵形状
    indsM=reshape([1:img_size],h,w);
    %计算矩阵L
    tlen = img_size*neb_size^2;
    row_inds=zeros(tlen ,1);
    col_inds=zeros(tlen,1);
    vals=zeros(tlen,1);
    len=0;
    for j=1+win_size:w-win_size
        for i=win_size+1:h-win_size
            if(rem(ci-8,15)<1)
                if(rem(cj-8,15)<1)
                    continue;
                end
            end
          win_inds=indsM(i-win_size:i+win_size,j-win_size:j+win_size);
          win_inds=win_inds(:);%列显示
          winI=I(i-win_size:i+win_size,j-win_size:j+win_size,:);
          winI=reshape(winI,neb_size,c); %三个通道被拉平成为一个二维矩阵 3*9
          win_mu=mean(winI,1)';  %求每一列的均值 如果第二个参数为2 则为求每一行的均值  //矩阵变向量
          win_var=inv(winI'*winI/neb_size-win_mu*win_mu' +epsilon/neb_size*eye(c)); %求方差
          winI=winI-repmat(win_mu',neb_size,1);%求离差
          tvals=(1+winI*win_var*winI')/neb_size;% 求论文所指的矩阵L
          row_inds(1+len:neb_size^2+len)=reshape(repmat(win_inds,1,neb_size),...
                                                 neb_size^2,1);
          col_inds(1+len:neb_size^2+len)=reshape(repmat(win_inds',neb_size,1),...
                                                 neb_size^2,1);
          vals(1+len:neb_size^2+len)=tvals(:);
          len=len+neb_size^2;
        end
    end 
     
     
     
     
    R = dehaze;**
    

    四、运行结果

    加粗样式
    **在这里插入图片描述

    五、matlab版本及参考文献

    1 matlab版本
    2014a

    2 参考文献
    [1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
    [2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
    [3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
    [4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.

    展开全文
  • 何恺明等人研究出的基于暗通道的经典图像去雾算法,不仅可以还原图像的颜色和能见度,同时也能利用雾的浓度来估计物体的距离。 (The classic fog removal algorithm based on dark channel, which was developed by ...
  • 何凯明博士的图像去雾算法源代码,经调试可直接运行处理模糊图片
  • 暗通道去雾matlab代码脱氢表雄酮 概括 这是雾度消除算法的MATLAB源代码,该雾度消除算法使用简单的图像增强技术(例如细节增强,伽玛校正和单比例图像融合)对模糊的输入图像进行除雾。 计算流程如下: 输入图像->...
  • 代码用于matlab,有四种去雾程序,包含主要代码的注释,便于图像处理学生使用。如有疑问,私聊解答哦~~
  • 基于暗通道去雾算法Dark Prior的Matlab实现Dark Prior算法简介效果展示 Dark Prior算法简介 Dark Prior算法是由何凯明博士于2009年提出的一种图像去雾处理的算法,其主要特点是利用图像的暗通道(Dark Channel)来...

    基于暗通道的去雾算法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(1t(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);%延拓
    I3=darkchannel(I2,w);
    subplot(2,2,2),imshow(I3,[]);title('暗通道');
    I4=zerowith(I3,w);%延拓
    I5=255*move_haze(I,I4,w);
    subplot(2,2,3),imshow(uint8(I5));title('去雾结果');
    l=length(filename);
    %imwrite(uint8(I5), fullfile('result\', [filename(1:l-4), '.png']));
    end
    
    function I=zerowith(I1,w)
    %零边界延拓
    %I1是原始图像
    %w是窗口宽度
    [m,n,d]=size(I1);
    add_line=(w-1)/2;
    if d==3
        I=ones(m+w,n+w,d);%赋值255是防止0在后面的提取dark channel时影响结果
        for i=1:m
            for j=1:n
                I(i+add_line,j+add_line,1)=I1(i,j,1);
                I(i+add_line,j+add_line,2)=I1(i,j,2);
                I(i+add_line,j+add_line,3)=I1(i,j,3);
            end
        end
    else
        I=zeros(m+w,n+w,d);
        for i=1:m
            for j=1:n
                I(i+add_line,j+add_line)=I1(i,j);
            end
        end
    end
    end
    
    function I=darkchannel(I1,w)
    %计算图像的dark channel
    %I1是边界延拓过后的图像
    % w是窗口宽度
    r=I1(:,:,1);g=I1(:,:,2);b=I1(:,:,3);
    [m,n]=size(r);
    I2=zeros(m,n);
    for i=1:m
        for j=1:n
            save_data=min(r(i,j),g(i,j));
            save_data=min(b(i,j),save_data);
            I2(i,j)=save_data;%计算每点对应的rgb分量最小值
        end
    end
    I=zeros(m-w,n-w);
    for i=1:m-w
        for j=1:n-w
            I(i,j)=min(min(I2(i:i+w-1,j:j+w-1)));%计算dark channel
        end
    end
    end
    
    function I=move_haze(I1,ID,w)
    %去雾算法
    %I1为原始图像,ID为边界延拓后的暗通道图像,w为窗口大小
    omiga=0.95;%已知参数ω
    t=1-omiga*ID;%透射率值
    [m,n]=size(ID);
    add_line=(w-1)/2;
    I=zeros(m-w,n-w,3);
    A=zeros(m-w,n-w);
    for i=1:m-w
        for j=1:n-w
            A(i,j)=max(max(ID(i:i+w-1,j:j+w-1)));
            %A(i,j)=mean(mean(ID(i:i+w-1,j:j+w-1)));%计算全球大气光成分A
            if A(i,j)>=220/255
                A(i,j)=220/255;
            end
            t1=max(t(i+add_line,j+add_line),0.1);
            I(i,j,1)=(I1(i,j,1)-A(i,j))/t1+A(i,j);
            I(i,j,2)=(I1(i,j,2)-A(i,j))/t1+A(i,j);
            I(i,j,3)=(I1(i,j,3)-A(i,j))/t1+A(i,j);
        end
    end
    end
    

    效果展示

    直接输入1次#,并按下space后,将生成1级标题。输入2次#,并按下space后,将生成2级标题。以此类推,我们支持6级标题。有助于使用语法后生成一个完美的目录。
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

    展开全文
  • 暗通道去雾+导向滤波

    2016-06-21 21:42:20
    我用的是VS2010+opencv2.49 当然可以根据自己的环境配置一下就可以了。代码里面用的是三通道去雾,效果不错。 效果比单通道好一点。 比softmating 稍微差一点点(看不怎么出来),但是速度比softmating快很多倍。
  • 暗通道去雾算法Opencv实现

    热门讨论 2013-08-23 22:24:19
    用OpenCV2.3.1实现的暗通道去雾算法。压缩文件是一个工程文件,解压后工程文件内附“说明文档.txt”粘贴代码即可使用.本人练手拙作,注释比较详细,工程内另附Matlab代码,整个OpenCV代码的实现过程依据的就是那段...
  • 基于Matlab暗通道图像去雾处理 一、简介 何恺明的暗通道先验( dark channel prior)去雾算法是CV界去雾领域很有名的算法,关于该算法的论文"Single lmage Haze Removal Using Dark Channel ...暗通道去雾模型如下: I(x)
  • 暗通道matlab代码使用暗通道实现除雾代码 1.演示 2.参考 个人推荐的博客文章: 3.其他除雾算法
  • 基于暗通道优先算法的去雾应用Matlab

    万次阅读 多人点赞 2017-02-24 22:53:41
    %% 求暗通道图像 Jdark = min(min()); Jdark = Idark(J); figure(2);imshow(Jdark,[]); %% % 注意:何凯明使用了soft matting方法对得到的粗透射率Jt进行细化 % 本代码采用梯度导向滤波实现 Jdark = gradient_...
  • 何凯明的暗通道先验理论的代码实现,是目前为止在图像去雾处理领域做得最好的算法之一
  • 本资源是基于导向滤波的暗通道先验图像去雾代码,能够完整的运行。

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 342
精华内容 136
关键字:

暗通道去雾matlab代码

matlab 订阅