Im=imread('1.jpg'); I=double(Im)/255; [m,n]=size(I,1,2); subplot(1,2,1); imshow(I,[]);title('Original image') w0=0.95; wh=3; %% dark_channel I1=zeros(m,n); for i=1:m for j=1:n I1(i,j)=min(I(i,j,:)); end end Id = ordfilt2(I1,1,ones(wh,wh),'symmetric'); %% A dark_channel = Id; A_temp = max(max(dark_channel))*0.999; A=A_temp; tr= 1 - w0 * Id/ A; %% out t0=0.1; t1 = max(t0,tr); I_out=zeros(m,n,3); for k=1:3 for i=1:m for j=1:n I_out(i,j,k)=(I(i,j,k)-A)/t1(i,j)+A; end end end subplot(1,2,2); imshow(I_out,[]);title('Improved image')
时间: 2023-06-17 22:03:40 浏览: 82
图像处理代码共享-im_filter2.m
这段代码是用来进行图像去雾的,采用的是暗通道先验理论。具体来说,代码分为以下几个步骤:
1. 读取图像,并将像素值归一化到[0,1]之间。
2. 计算暗通道,即对于每个像素点,取其RGB三个分量的最小值作为其暗通道值。
3. 对暗通道进行最小值滤波,使用一个大小为$wh \times wh$的滑动窗口,在每个窗口内取最小值,得到一个新的矩阵$Id$。
4. 估计全局大气光$A$,即取$Id$的最大值的0.999倍作为$A$的初始值。
5. 计算透射率,即$tr=1-w_0\times Id/A$,其中$w_0$是一个常数。
6. 对每个RGB分量分别计算$t_1=\max(t_0,tr)$,其中$t_0$是一个常数。
7. 根据$t_1$和$A$计算去雾后的图像$I_{out}=(I-A)/t_1+A$。
8. 最后将原始图像和去雾后的图像在同一窗口中进行显示。
需要注意的是,这段代码中的去雾效果并不一定能够适用于所有的图像,因为暗通道先验理论并不能完全解决所有的图像去雾问题。
阅读全文