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);

 


相关文章
|
1月前
|
传感器 算法 计算机视觉
基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容是关于一个基于肤色模型和中值滤波的手部检测算法的描述,包括算法的运行效果图和所使用的软件版本(matlab2022a, vivado2019.2)。算法分为肤色分割和中值滤波两步,其中肤色模型在YCbCr色彩空间定义,中值滤波用于去除噪声。提供了一段核心程序代码,用于处理图像数据并在FPGA上实现。最终,检测结果输出到&quot;hand.txt&quot;文件。
|
1月前
|
机器学习/深度学习 算法 计算机视觉
基于yolov2深度学习网络的视频手部检测算法matlab仿真
基于yolov2深度学习网络的视频手部检测算法matlab仿真
|
6天前
|
机器学习/深度学习 人工智能 算法
基于DCT和扩频的音频水印嵌入提取算法matlab仿真
本文介绍了结合DCT和扩频技术的音频水印算法,用于在不降低音质的情况下嵌入版权信息。在matlab2022a中实现,算法利用DCT进行频域处理,通过扩频增强水印的隐蔽性和抗攻击性。核心程序展示了水印的嵌入与提取过程,包括DCT变换、水印扩频及反变换步骤。该方法有效且专业,未来研究将侧重于提高实用性和安全性。
|
10天前
|
文字识别 算法 计算机视觉
图像倾斜校正算法的MATLAB实现:图像倾斜角检测及校正
图像倾斜校正算法的MATLAB实现:图像倾斜角检测及校正
15 0
|
13天前
|
机器学习/深度学习 算法
【MATLAB】GA_ELM神经网络时序预测算法
【MATLAB】GA_ELM神经网络时序预测算法
286 9
|
1月前
|
算法
m基于log-MPA检测算法的SCMA通信链路matlab误码率仿真
MATLAB 2022a仿真实现了稀疏码多址接入(SCMA)算法,该算法利用码本稀疏性实现多用户高效接入。每个用户从码本中选取码字发送,接收端采用Log-MPA算法进行多用户检测。由于MAP检测计算复杂度高,故采用Log-MPA降低复杂性。仿真展示了不同迭代次数(1, 5, 10, 30)对误码率(BER)的影响,通过比较各次迭代的BER曲线,研究算法性能与迭代次数的关系。
22 0
|
1月前
|
算法 搜索推荐
基于遗传优化的协同过滤推荐算法matlab仿真
该内容是关于推荐系统和算法的描述。使用Matlab2022a执行的算法生成了推荐商品ID列表,显示了协同过滤在个性化推荐中的应用。用户兴趣模型通过获取用户信息并建立数学模型来提高推荐性能。程序片段展示了遗传算法(GA)的迭代过程,确定支持度阈值,并基于关联规则生成推荐商品ID。最终结果是推荐的商品ID列表,显示了算法的收敛和支持值。
|
1月前
|
机器学习/深度学习 算法
m基于深度学习的64QAM调制解调系统相位检测和补偿算法matlab仿真
MATLAB 2022a仿真实现了基于深度学习的64QAM相位检测和补偿算法,有效应对通信中相位失真问题。通过DNN进行相位检测和补偿,降低解调错误。核心程序生成随机信号,模拟AWGN信道,比较了有无相位补偿的误码率,结果显示补偿能显著提升性能。
27 8
|
1月前
|
机器学习/深度学习 算法 生物认证
基于深度学习的人员指纹身份识别算法matlab仿真
这是一个关于使用深度学习进行指纹识别的算法概述。在matlab2022a环境下,通过预处理指纹图像(灰度化、二值化等)并利用卷积神经网络(CNN)提取特征。CNN架构包含卷积、池化、归一化和全连接层。特征向量通过余弦相似度计算匹配,训练时采用triplet loss优化。部分核心代码展示了加载预训练模型进行测试集分类预测并计算准确率的过程。
|
1月前
|
算法
基于Harris角点的室内三维全景图拼接算法matlab仿真
本文介绍了使用Harris角点检测算法构建室内三维全景图的过程。在matlab2022a环境下,通过检测、匹配特征点并进行图像拼接,实现全景图的创建。算法涉及图像梯度计算、协方差矩阵、响应函数及非极大值抑制。示例代码展示了读取图像、调整大小并应用角点检测函数进行图像混合的步骤。最后,通过图像子区显示验证了拼接效果。