MATLAB图像处理:去雾霾多种算法比较

如果有一张下面的雾霾图,如何去雾霾呢?

当然最简单的方式是平衡直方图,分别提取出来该图片RGB分量,分别做直方图平衡,然后再用cat函数组合即可。代码如下

I=imread('test.png') ;%读取图片,并用I保存图片的矩阵  
%拆分三原色  
R=I(:,:,1);  
G=I(:,:,2);  
B=I(:,:,3);  
%平衡直方图  
M=histeq(R);  
L=histeq(G);  
N=histeq(B);  
%组合RGB

I1=cat(3,M,L,N);  
figure,imshow(I);
figure,imshow(I1);  
%  Q=rgb2gray(I);%获取该图直方图  
%  W=rgb2gray(I1);%获取该图直方图  
  
% figure,imhist(Q,64);  
% figure,imhist(W,64);  
最终得到的去雾霾之后的图片为

哇,是不是超清楚,连树上叶子都超清楚的。



clc; clear all; I=imread('9.jpg'); Ir=I(:,:,1); %分别提取图像的R分量,G分量和B分量 Ig=I(:,:,2); Ib=I(:,:,3); %%%%%%%%%%设定所需参数%%%%%% G = 192; b = -30; alpha = 125; beta = 46; %%%%%%%%%%设定高斯参数%%%%%% sigma_1=15; %三个高斯核 sigma_2=80; sigma_3=250; [x y]=meshgrid((-(size(Ir,2)-1)/2):(size(Ir,2)/2),(-(size(Ir,1)-1)/2):(size(Ir,1)/2)); gauss_1=exp(-(x.^2+y.^2)/(2*sigma_1*sigma_1)); %计算高斯函数 Gauss_1=gauss_1/sum(gauss_1(:)); %归一化处理 gauss_2=exp(-(x.^2+y.^2)/(2*sigma_2*sigma_2)); Gauss_2=gauss_2/sum(gauss_2(:)); gauss_3=exp(-(x.^2+y.^2)/(2*sigma_3*sigma_3)); Gauss_3=gauss_3/sum(gauss_3(:)); %%%%%%%%%%对R分量操作%%%%%%% Ir_double=double(Ir); Ir_log=log(Ir_double+1); %将图像转换到对数域 f_Ir=fft2(Ir_double); %对图像进行傅立叶变换,转换到频域中 fgauss=fft2(Gauss_1,size(Ir,1),size(Ir,2)); %用0将图像填充至大小size(Ir,1)*size(Ir,2) fgauss=fftshift(fgauss); %将频域中心移到零点 Rr= ifft2(fgauss.*f_Ir); %做卷积后变换回空域中 Rr_log= log(abs(Rr) + 1); Rr1=Ir_log-Rr_log; %sigam=15的处理结果 fgauss=fft2(Gauss_2,size(Ir,1),size(Ir,2)); fgauss=fftshift(fgauss); Rr= ifft2(fgauss.*f_Ir); Rr_log= log(abs(Rr) + 1); Rr2=Ir_log-Rr_log; %sigam=80 fgauss=fft2(Gauss_3,size(Ir,1),size(Ir,2)); fgauss=fftshift(fgauss); Rr= ifft2(fgauss.*f_Ir); Rr_log= log(abs(Rr) + 1); Rr3=Ir_log-Rr_log; %sigam=200 Rr=0.33*Rr1+0.34*Rr2+0.33*Rr3; %加权求和 Rr=exp(Rr); min1=min(min(Rr)); max1=max(max(Rr)); Rr_final=(Rr-min1)*255/(max1-min1); %线性拉伸 %figure,imshow(Rr_final,[]);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值