前言
这是我数字图像处理的期末大实验,选了老师发给我们让我们来读并进行代码实现、研究的一篇英文文章。标题为:
New adaptive histogram equalisation heuristic approach for contrast enhancement 发表在IET上。
我把论文原文附上在文末。
这个算法处理的效果还是很不错的,感兴趣的同学可以拿去玩玩。我写的程序使用也很简单,点击运行,然后选一个图片,他就会把结果跑出来。
看来文章里面植入不了文件,我还是把原论文文章上传到下载里面,大家可以到我的主页那边的下载里去下载。
原文算法目的:
对于过暗或过亮的图像都能进行对比度增强。本文提出的方法能够克服以下之前提到的许多方法的缺点,呈现出高对比度和自然性的美观图像。
•图像亮度的平均偏移。
•图像过度增强。
•输入图像的自然特征丢失。
•由于大量的计算而增加的系统的复杂度。
•图像中的饱和伪影。
•图像增强有限。
经过我的实验,原文中提出的算法确实对很多图片处理之后效果很不错。作者没有骗人,基本达到了他说的效果。
实现效果
算法为:
我用的matlab实现的,下面是实现代码:
%img=imread("4.1.03.tiff");
%img=imread("!lg-image22.jpg");
%img=imread('1.jpg');
[f,p]=uigetfile('*.*','选择图像文件');
if f
img=imread(strcat(p,f));
end
oimg=img;
entropy(oimg)
img=rgb2hsv(img);
Red=img(:,:,3).*255;%提取出HSV模型中的V并将其映射到0—255
c=size(Red);%读取图片的尺寸
PCDF=zeros(1,256);
for i=1:c(1)%得出每个明度值对应的像素点数
for j=1:c(2)
PCDF((Red(i,j)+1))= PCDF((Red(i,j)+1))+1;
end
end
Pr=PCDF./(c(1)*c(2));%得到概率密度的矩阵
P_mean=mean(Pr(:));
P_max=max(Pr(:));
R=P_max/P_mean;
if R>10 %修改概率密度函数
for i=1:256
if Pr(i)>=P_mean
Pr(i)=P_mean;
end
end
end
CDF = zeros(1,256);
CDF(1) = Pr(1);
for i=2:256 %得到CDF
CDF(i)= CDF(i-1)+Pr(i);
end
g=min(CDF);
if R>=10 %修改CDF
for i=1:256
CDF(i)= CDF(i)-g;
end
end
h=max(CDF);
for i=1:256 %得到归一化之后的CDF
CDF(i)= CDF(i)/h;
end
alpha = sum(CDF(:))/255;
CDFn=zeros(1,256);
for i=1:256 %得到CFDn
CDFn(i)= CDF(i)^alpha;
end
for i=1:c(1) %执行最后一步的转移函数
for j=1:c(2)
Red(i,j)= 255*CDFn((Red(i,j)+1));
end
end
img(:,:,3)=double(Red)./255;
img=hsv2rgb(img);%图片转回RGB
figure(1)
imshow(img);
title("处理后图像");
figure(2)
imshow(oimg);
title("原始图像");
entropy(img)