您的位置:首页 > 其它

数字图像处理--直方图均衡化

2010-11-29 20:49 190 查看
数字图像处理课,老师布置了7道实验题,要求是语言不限,但不能调用现成算法,这些题目有点难度,但题目本身基本涵盖了这门课中所有重要的内容。为了方便学弟和同道中人完成练习,也为了记录下方便以后回顾经典的算法,所以我将一题一题分析。

Histogram Equalization (test images:
fig1.jpg, fig2.jpg)


(a)
Write a computer program for computing the histogram of an image.

(b)
Implement the histogram equalization technique.

(c) Your program must be
general to allow any gray-level image as its input.

As
a minimum, your report should include the original image, a plot of its
histogram, a plot of the histogram-equalization, transformation function, the
enhanced image, and a plot of its histogram.

背景

直方图均衡化通常用来增加许多图像的全局对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。

这种方法对于背景和前景都太亮或者太暗的图像非常有用,这种方法尤其是可以带来X光图像中更好的骨骼结构显示以及曝光过度或者曝光不足照片中更好的细节。这种方法的一个主要优势是它是一个相当直观的技术并且是可逆操作,如果已知均衡化函数,那么就可以恢复原始的直方图,并且计算量也不大。这种方法的一个缺点是它对处理的数据不加选择,它可能会增加背景噪声的对比度并且降低有用信号的对比度。

书本中的原理



Matlab实现

sourcePic=imread('fig2.jpg'); %读取原图象
%以下为了彩色图像
%[m,n,o]=size(sourcePic);
%grayPic=rgb2gray(sourcePic);
grayPic=sourcePic;
[m,n]=size(grayPic);
subplot(2,2,1);%显示原图
imshow(grayPic);
gp=zeros(1,256); %计算各灰度出现的概率
for i=1:256
gp(i)=length(find(grayPic==(i-1)))/(m*n);
end
subplot(2,2,2);%显示原图像直方图
bar(0:255,gp);
title('原图像直方图');
xlabel('灰度值');
ylabel('出现概率');
newGp=zeros(1,256); %计算新的各灰度出现的概率
S1=zeros(1,256);
S2=zeros(1,256);
tmp=0;
for i=1:256
tmp=tmp+gp(i);
S1(i)=tmp;
S2(i)=round(S1(i)*256);
end
for i=1:256
newGp(i)=sum(gp(find(S2==i)));
end
newGrayPic=grayPic; %填充各像素点新的灰度值
for i=1:256
newGrayPic(find(grayPic==(i-1)))=S2(i);
end
subplot(2,2,3);
imshow(newGrayPic);
subplot(2,2,4);%显示均衡化后的直方图
bar(0:255,newGp);
title('均衡化后的直方图');
xlabel('灰度值');
ylabel('出现概率');


效果与演示

fig1.jpg原图,直方图均衡化后效果



fig2.jpg原图,直方图均衡化后效果



体会

直方图均衡化主要是利用统计的思想建立原图像与新图像灰度值的关系,最终让图像的灰度变的均衡。从最终的结果来看第二张图的效果比较好,而第一张图虽然对比度增加了,但与此同时引出了很多椒盐噪声。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: