一、简介
mark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1RJUUNtYXRsYWI=,size_16,color_FFFFFF,t_70#pic_center)
HR0cHM6Ly9ibG9nLmNzZG4ubmV0L1RJUUNtYXRsYWI=,size_16,color_FFFFFF,t_70#pic_center)
二、源代码
clc,close all;
Image=im2double(rgb2gray(imread('couple.bmp')));%打开图像
[height,width]=size(Image);%获取原图的大小,h行w列
imshow(Image);%展示原图
M=1;%设置最大灰度等级
fImage=M-Image;%求得灰度色调函数
fLImage=log(fImage);%基本正态函数的正变换
AvgW=zeros(height,width);
w=1;%定义邻域窗口半径为1
temp=zeros(2*w+1,2*w+1);
for x=1+w:height-w
for y=1+w:width-w
temp=fLImage(x-w:x+w,y-w:y+w);
AvgW(x,y)=sum(temp(:))/(2*w+1)^2;
end
end%平均灰度值
alpha=3;
imshow(Image), title('原始图像');
[height width c]=size(Image);
dark_I = zeros(height,width);
for y=1:height
for x=1:width
dark_I(y,x) = min(Image(y,x,:)); %计算RGB取最小值后的图像dark_I
end
end
kenlRatio = .03;
krnlsz = floor(max([3, width*kenlRatio, height*kenlRatio]));
dark_I2 = minfilt2(dark_I, [krnlsz,krnlsz]);%最小值滤波
dark_I2(height,width)=0;
dark_channel=dark_I2;
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;%设置调节参数w0值
t=1-w0*(dark_channel/A);%计算透射率t
t=max(t,t0);
img_d = double(Image);
三、运行结果
四、备注
版本:2014a