matlab朦胧的去雾、加雾算法

matlab朦胧的去雾、加雾算法

去雾算法

为何要研究图像去雾技术 ?

  1. 雾霾严重频发,图像获取带雾的情况越来越多
  2. 带雾的图像很多特征被掩饰和模糊 ,导致很多细节信息不容易识别
  3. 图像的对比度和颜色鲜艳度受到极大削弱

图像增强技术是关去雾的关键技术 ,主要包括频域处理法和空域处理法,频域处理法基于卷积定理,通过小波变换或者傅里叶变换来实现。空域处理方法直接对像素进行处理,以图像灰度映射变换为基础采用所需的映射变换,例如图像对比度增强和灰度层次优化处理方法都属于空域处理法。

%function darktest(F:\pictures\4.jpg)
%暗影去雾算法
%filename------文件名或文件绝对路径
%用法:darktest('7.png')
close all
clc
w0=0.65;   %0.65  乘积因子用来保留一些雾,1时完全去雾    
t0=0.1;
 
I=imread('F:\pictures\4.jpg');
figure;
set(gcf,'outerposition',get(0,'screensize'));
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('去雾后的图像');
 

加雾算法

当然,有去雾,就会有加雾算法,代码如下:

img_name='F:\pictures\1.jpg';
I=imread(img_name);
I1 = imresize(I,[240,320]);
% subplot(2,2,1);
figure(1);
imshow(I1);
imagesc(I1);
I1=double(I1)/255;
I = I1;
% figure;imagesc(I); %一图
Im_dealt = I;
[row,col,z] = size(Im_dealt);
landline = 0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Iw = I;
A = 0.8;
m = 100;
n = 300;
tidx= 2;
% for beta = 0.05:0.05:0.15
for beta = 0.20:0.05:0.30
for i=1:3
for j=landline+1:row
for l=1:col
d(j,l) = 1/((j-landline)^.05 + 0.0001);
d2(j,l) = d(j,l)*8;
if j < landline
d(j,l) = -0.04*landline + 18;
td(j,l) = exp(-beta*d(j,l));
Iw(j,l,i) = I(landline,l,i)*td(landline,l) + A*(1-td(j,l));

else
d(j,l) = -0.04*sqrt((j-m).^2+(l-n).^2) + 17;
td(j,l) = exp(-beta*d(j,l));
Iw(j,l,i) = I(j,l,i)*td(j,l) + A*(1-td(j,l));
end

end
end
end
for k = 1:landline
for kj = 1:col
Iw(k,kj,: ) = Iw(landline+1,100,:);
end
end
figure(tidx);imshow(Iw);
filename = ['.\outPicture\frame179-',num2str(tidx),'.tif'];
imwrite(Iw,filename);
 subplot(2,2,tidx); imshow(Iw);
a = sprintf('%s %f','beta=',beta);
title(a);
tidx = tidx+1;
end
 figure; imshow(d);
 figure; imshow(td);

如对上述代码有问题,请下方留言,谢谢!

运行结果如下:
在这里插入图片描述
在这里插入图片描述

  • 12
    点赞
  • 110
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 181
    评论
### 回答1: Matlab图像算法是对霾天气下的图像进行预处理的一种方法,通过去除图像中的霾,使得图像更加清晰,并提高图像的质量。通常采用的方法是基于暗通道先验的图像算法。 暗通道先验是指图像中每个像素的RGB三个通道中,最小值通道被视为暗通道,即该通道中像素值最小的一个。在图像中,由于霾的存在,所有的像素值都会受到一些衰减,因此最小值通道对应的像素值就会比较小,在去过程中被广泛使用。 去的过程可以分为以下步骤: 1.计算暗通道:对于一幅输入图像,分别计算RGB三个通道中的最小值,然后对这些最小值进行平滑处理,以消除噪声。 2.估算全局大气光:通过在暗通道中寻找最大值,可以估计出图像的全局大气光。 3.计算透射率:通过计算每个像素与全局大气光之间的比值,可以得到图像中每个像素的透射率。 4.修复图像:将透射率应用到原始图像上,从而去除霾,并还原图像的清晰度。 Matlab图像算法可以通过编程实现,具有较高的效率和精度,是处理图像的一种有效方法。 ### 回答2: Matlab图像算法可以帮助我们有效地去除在图像中产生的气,使得图片更加清晰、真实、明亮。相比于人工处理,Matlab图像算法可以更快捷、准确地处理大量的图片,因此在工业生产、图像识别、科学研究等领域有着广泛的应用。 Matlab图像算法的基本原理是通过对图像的颜色、亮度、对比度、饱和度等方面进行调整,消除气的影响,提升图像的质量。首先,需要通过气模型来了解图像内部存在的气浓度、滴大小、透射率等参数,然后根据这些参数运用指定的公式进行气去除处理。同时,还需要考虑图像的噪声、锐度、色彩等因素,通过调整这些参数,最终呈现出更加清晰、亮丽、真实的图像。 总的来说,Matlab图像算法是一项复杂而重要的图像处理技术,在许多领域都有广泛的应用。相比于传统的图像处理方法,它能更加快速地处理大量的图像,并且能够保证较高的准确度和清晰度,因此越来越受到人们的重视和使用。
评论 181
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫余

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值