图像去雾并与其他非物理模型进行对比


```matlab
clear
clc
close all
img=imread( 'scene1.jpg');subplot(221),imshow(uint8(img)), title('原始低照度图像”);img(::,1)=255-img(::1);
img(::,2)=255-img(:2);
img(:,:3)=255-img(: 3);
sz=size(img);
w=sZ(2);
h=sz(1);
%计算RGB取最小值后的图像darkl
dark l= zeros(h,w);
for y=1:h
for x=1:W
dark_l(y,x)= min(img(y,x,:));%计算每个像素点RGB中最小的值
end
end
kenlRatio = .03:
krnlsz = floor(max([3, w*kenlRatio, h*kenlRatio]));
dark l2 = minfilt2(dark l, [krnlsz,krnlsz]);%最小值滤波
dark 12(h,w)=0;
dark l2=uint8(dark 12);
dark channel=double(dark 12);
aa=dark channel;
hh=floor(w*h*0.001);
bb=reshape(aa,1,);%将a转换为行向量
bb=sort(bb,'descend');%将b按从大到小顺序排列。
cc=find(bb>0,hh);%找到前4个大于0(非NaN)的数的位置
dd=bb(cc(hh));%找到第4大的数
ee=aa(find(aa>dd));%较大的前3个数
[mm,nn]=find(aa>dd);%较大的前3个数对应下标
AA=fee mm nnl:
bw=zeros(h,w);
num=length(find(aa>dd));
sum潍鈔伺0卮繡人始
for y=1:h
for x=1:W
for k=1:num
if y==AA(k,2)&& x==AA(k,3)&& dark channel(y,x)==AA(k,1)bw(y,x)=255;
sum=sum+AA(k,1);
end
end
end
end
meandc=floor(sum/num);
minAtomsLight = 240:
A= min([minAtomsLight, meandc]);%计算大气光A
w0=0.9:
t=1-w0*(dark channel/A);%计算透射率
t0=0.1;
t=max(t,t0);
img d= double(img);
J= zeros(h,w,3);
J(:,:,1)= (img_d(::,1)-(1-t)*A)./t;%计算去雾后的R通道(:,:,2)= (img_d(::,2)-(1-t)*A)./t;%计算去雾后的G通道J(:,:3)= (img_d(:,:,3)-(1-t)*A)./t;%计算去雾后的B通道J=uint8(J);
J(::1)=255-J(::1);
J(::2)=255-J(::2);
J(::3)=255-J(::3);
subplot(222),imshow(J), title("基于暗原色先验的低照度图像增强”);%去雾图像imwrite(,'Lyewan.bmp');
Image=(imread('scene1.jpg'));
%读取彩色图像,提取出红、绿、蓝三个通道的像素值。
% subplot(1,3,1),imshow(lmage), title(原始图像”);
height,width,c]=size(lmage);
Rl=double(lmage(:,:,1)); Gl=double(lmage(:,:,2)); Bl=double(lmage(:..3));
%对每个通道的像素值进行高斯滤波,得到估计的光照分量。
sigma=100; filtersize=[height, widthl; gaussfilter=fspecial('gaussian,filtersize,sigma); Rlow=imfilter(Rl,gaussfilter,replicate,'conv'):
3low=imfilter(Gl,gaussfilter,'replicate','conv');low=imfilter(Bl.gaussfilter.'replicate'.'conv'):
%将估计的光照分量归一化到0到1之间,并将三个通道合并成一张彩色图像
ninRL=min(min(Rlow): minGL=min(min(Glow); minBL=min(min(Blow); maxRL=max(max(Rlow); maxGL=max(max(Glow); maxBL=max(max(Blow).
RLi=(Rlow-minRL//(maxRL-minRL):
3Li=(Glow-minGL)/(maxGL-minGL),
BLi=(Blow-minBL)/(maxBL-minBL);
i=cat(3.RLi.GLi.BLi):
% subplot(1,3,2),imshow(Li), title("估计光照分量”):
%通道的像素值进行对数变换,得到强光照下的图像,并将三个通道合并成一张彩色图像。
Rhigh=log(Rl./Rlow+1):
Shigh=log(Gl./Glow+1):
Bhigh=log(B1./Blow+1): SSRl=cat(3,Rhigh,Ghigh,Bhigh);
subplot(2,2,3),imshow(SSRl), title("单尺度Retinex增强');
Image=imread('scene1.jpg');[height width c]=size(lmage);dark l= zeros(height,width);
for y=1:height
for x=1:width
dark_l(y,x)= min(lmage(y,x,:));%计算RGB取最小值后的图像darkl
end
end
kenlRatio = .03;
krnlsz = floor(max([3, width*kenlRatio, height*kenlRatio]));dark l2= minfilt2(darkl, [krnlsz,krnlsz]);%最小值滤波
dark l2(height,width)=0;
dark channel=dark l2;
hh=floor(width*height*0.001);
bb=reshape(dark channel,1,[]);
bb=sort(bb,'descend');
cc=find(bb>0,hh);
dd=bb(cc(hh));
ee=dark channel(find(dark channel>dd));
AA=[ee];
num=length(find(dark channel>dd));
sum=0:
for k=1:num
sum=sum+AA(k);
end
meandc=floor(sum/num):
minAtomsLight = 240;
A= min([minAtomsLight, meandc]);%计算大气光A
w0=0.9: t0=0.3;%设置调节参数wO值
t=1-w0*(dark channel/A);%计算透射率t
t=max(t,tO);
img d= double(lmage);
Newlmage = zeros(height,width,3);Newmage(:,:,1)= (img_d(:,:,1)-(1-t)*A)./t;%计算去雾后的R通道Newlmage(:,:,2)=(img_d(:,:,2)-(1-t)*A)./t;%计算去雲后的G通道Newlmage(:,:,3)=(img d(:,:,3)-(1-t)*A)./t;%计算去雲后的B通道subplot(224),imshow(uint8(Newlmage)), title('去霎图像");%去雾图像

在这里插入图片描述

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值