ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【图像去雾】暗通道之图像去雾【Matlab 101期】【图像处理33】

2021-01-23 09:32:06  阅读:147  来源: 互联网

标签:img 33 win 图像处理 Matlab 图像 size


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上述伪代码中,I表示导向图像(guided image),p为输入图像(input image),q为输出图像(output image),表示均值滤波,r为窗口半径。

** 
%--------------------------------------
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;**

**加粗样式
**在这里插入图片描述
注:完整代码或者代写添加QQ2449341593
往期回顾>>>>>>
【Matlab 024期】【图像处理1】Matlab图像处理教程系列之图像压缩
【Matlab 025期】【图像处理2】Matlab图像处理教程系列之图像分割(一)
【Matlab 026期】【图像处理3】Matlab图像处理教程系列之图像分割(二)
【Matlab 029期】【图像处理4】Matlab指纹识别
【Matlab 030期】【图像处理5】银行卡号识别matlab源码
【Matlab 074期】【图像处理6】【图像聚类】基于FCM和改进的FCM脑部CT图像聚类处理
【Matlab 075期】【图像处理7】【图像评价】基于CCF算法的图像质量评价
【Matlab 076期】【图像处理8】【图像增强】基于局部对比度增强的CLAHE算法 --直方图增强
【Matlab 077期】【图像处理9】【图像融合】基于Frequency Partition的图像融合
【Matlab 078期】【图像处理10】【图像评价】基于svm的图像无参考质量评价
【图像边缘检测】基于最小二乘法的椭圆边缘检测matlab源码【Matlab 079期】【图像处理11】
【图像加密】基于混沌系统的图像加密解密matlab源码含GUI【Matlab 080期】【图像处理12】
【图像处理】基于DWT+DCT+PBFO改进图像水印隐藏提取matlab源码含GUI【Matlab 081期】【图像处理13】
【图像配准】基于sift算法的图像配准matlab源码【Matlab 082期】【图像处理14】
【图像融合】基于CBF算法的图像融合matlab源码【Matlab 083期】【图像处理15】
【图像分割】基于随机游走算法的图像分割matlab源码【Matlab 084期】【图像处理16】
【图像滤波】图像二维双边高斯滤波【Matlab 085期】【图像处理17】
【图像去噪】基于自适应形态学的图像去噪【Matlab 086期】【图像处理18】
【图像增强】基于DEHAZENET和HWD的水下去散射图像增强【Matlab 087期】【图像处理19】
【图像增强】PSO寻优ACE的图像增强matlab源码【Matlab 088期】【图像处理20】
【图像增强】基于区域相似变换函数和蜻蜓算法的灰度图像增强【Matlab 089期】【图像处理21】
【图像重建】图像重建之ASTRA算法【Matlab 090期】【图像处理22】
【图像分割】基于四叉树图像分割matlab源码【Matlab 091期】【图像处理23】
【图像分割】心脏中心线提取【Matlab 092期】【图像处理24】
【图像识别】基于svm植物叶子疾病检测和分类【Matlab 093期】【图像处理25】
【图像识别】基于模板匹配之手写数字识别系统GUI界面【Matlab 094期】【图像处理26】
【图像识别】基于不变矩的数字验证码识别含GUI界面【Matlab 095期】【图像处理27】
【图像识别】条形码识别系统【Matlab 096期】【图像处理28】
【图像识别】基于RGB和BP神经网络的人民币识别系统含GUI界面【Matlab 097期】【图像处理29】
【图像识别】基于cnn卷积神经网络之验证码识别matlab源码【Matlab 098期】【图像处理30】
【图像分类】基于极限学习分类器对遥感图像分类【Matlab 099期】【图像处理31】
【图像直线拟合】基于最小二乘法的图像直线拟合并平分角平分线【Matlab 100期】【图像处理32】

标签:img,33,win,图像处理,Matlab,图像,size
来源: https://blog.csdn.net/TIQCmatlab/article/details/113028312

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有