Matlab:单幅图象的暗原色先验去雾改进算法,能够很好地改进天空或明亮部分色彩失真问题

简介: Matlab:单幅图象的暗原色先验去雾改进算法,能够很好地改进天空或明亮部分色彩失真问题

输出结果

image.png




实现代码


%单幅图象的暗原色先验去雾改进算法,能够很好地改进天空或明亮部分色彩失真问题,matlab代码注解详细,能很好地帮助理解算法过程。

clc;

clear all;

img_name='jiedao.jpg';

% 原始图像

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

% 获取图像大小

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

win_size = 7;

img_size=w*h;

figure, imshow(I);

win_dark=ones(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

%选定精确dark value坐标

% win_b = zeros(img_size,1);

figure, imshow(win_dark);

win_t=1-0.95*win_dark;

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_t(ci*w+cj);

           end

       end

   end

end

%显示分块darkchannel

%figure, imshow(win_dark);

neb_size = 9;

win_size = 1;

epsilon = 0.000001;

%指定矩阵形状

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



 %创建稀疏矩阵

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

 lambda=1;

 x=(A+lambda*D)\(lambda*(win_b(:).*win_b(:)));

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

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

figure, imshow(alpha);

% **************************************************

%     自动获取大气光步骤,A为最终大气光的值

% **************************************************

range=ceil(img_size*0.1);%取暗原色中最亮的%1的点数

radi_pro=zeros(range,1); %用于记录最亮点内对应图片点象素的三个通道的颜色强度

     for s=1:range

         [a,b]=max(win_dark);  

         [c,d]=max(a);

         b=b(d);

         m=sparse(b,d,1,h,w);        %b,d为最亮值的坐标

         win_dark=win_dark-c.*m;     %消去选出的最大值

         radi_pro(s)=sum(I(b,d,:));  %最大值对应象素三通道求和

     end

A=max(radi_pro)/3;%大气光的值

% **************************************************

%  算法改进步骤,可修正天空透射率以减小明亮部分的失真率

% **************************************************

inten=zeros(h,w);

   for m=1:h

       for n=1:w

           inten(m,n)=mean(I(m,n,:));

       end

   end

k=70;    

k=zeros(h,w)+k/255; %容差

% A=220/255;

cha=abs(inten-A);   %差限

alpha=min(max(k./cha,1).*max(alpha,0.1),1); %算法改进关键部分

figure,imshow(alpha);

% ***************************************************

alpha=repmat(alpha,[1,1,3]);  

dehaze=(I-A)./alpha+A;  

figure, imshow(dehaze);

 


相关文章
|
7天前
|
存储 编解码 算法
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
|
8天前
|
传感器 机器学习/深度学习 算法
【UASNs、AUV】无人机自主水下传感网络中遗传算法的路径规划问题研究(Matlab代码实现)
【UASNs、AUV】无人机自主水下传感网络中遗传算法的路径规划问题研究(Matlab代码实现)
|
7天前
|
机器学习/深度学习 传感器 算法
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
85 14
|
7天前
|
机器学习/深度学习 运维 算法
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
|
7天前
|
算法 数据可视化 异构计算
【车辆路径问题VRPTW】基于北极海鹦优化(APO)算法求解带时间窗的车辆路径问题VRPTW研究(Matlab代码实现)
【车辆路径问题VRPTW】基于北极海鹦优化(APO)算法求解带时间窗的车辆路径问题VRPTW研究(Matlab代码实现)
|
7天前
|
机器学习/深度学习 运维 算法
【复现】基于改进秃鹰算法的微电网群经济优化调度研究(Matlab代码实现)
【复现】基于改进秃鹰算法的微电网群经济优化调度研究(Matlab代码实现)
|
7天前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】基于非支配排序的鱼鹰优化算法NSOOA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】基于非支配排序的鱼鹰优化算法NSOOA求解无人机三维路径规划研究(Matlab代码实现)
|
7天前
|
机器学习/深度学习 负载均衡 算法
【柔性作业车间调度】基于四种多目标优化算法(NSOOA、NSPSO、NSDBO、NSCOA)求解柔性作业车间调度问题FJSP研究(Matlab代码实现)
【柔性作业车间调度】基于四种多目标优化算法(NSOOA、NSPSO、NSDBO、NSCOA)求解柔性作业车间调度问题FJSP研究(Matlab代码实现)
|
8天前
|
数据采集 机器学习/深度学习 运维
【故障诊断】基于负熵诱导灰狼优化算法的多目标信息频带选择用于滚动轴承故障诊断(Matlab代码实现)
【故障诊断】基于负熵诱导灰狼优化算法的多目标信息频带选择用于滚动轴承故障诊断(Matlab代码实现)
|
8天前
|
机器学习/深度学习 数据采集 传感器
【WOA-CNN-LSTM】基于鲸鱼算法优化深度学习预测模型的超参数研究(Matlab代码实现)
【WOA-CNN-LSTM】基于鲸鱼算法优化深度学习预测模型的超参数研究(Matlab代码实现)

热门文章

最新文章