实验一-图像的直方图均衡

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一-图像的直方图均衡

数字图像处理实验

实验一、图像的直方图均衡

一、实验目的

1、理解直方图均衡的原理与作用;

2、掌握统计图像直方图的方法;

3掌握图像直方图均衡的方法。

二、实验原理

直方图均衡化是通过灰度变换将一幅图象转换为另一幅均衡直方图,即在每个灰度级上都具有相同的象素点数的过程。图像对比度增强的方法可以分成两类:一类是直接对比度增强方法;另一类是间接对比度增强方法。直方图拉伸和直方图均衡化是两种最常见的间接对比度增强方法。直方图拉伸是通过对比度拉伸对直方图进行调整,从而“扩大”前景和背景灰度的差别,以达到增强对比度的目的,这种方法可以利用线性或非线性的方法来实现;直方图均衡化则通过使用累积函数对灰度值进行“调整”以实现对比度的增强。直方图均衡的缺点是:1、变换后图像的

灰度级减少,某些细节消失;2、某些图像,如直方图有高峰,经处理后对比度不自然的过分增强。

三、实验步骤

1、利用matlab图像处理工具箱提供的函数进行均衡处理;

程序如下:

clear;

b=imread('b.jpg');

subplot(2,2,1);

title('source image');

imshow(b);

subplot(2,2,2);

c=histeq(b);

imshow(c);

title('equation by system function');

[count,x]=imhist(b);

count=count./(256*256);

for m=2:256

2、

3、自己设计程序实现图像的直方图均衡;PS=imread('image.jpg');

%读入JPG彩色图像文件

imshow(PS)

%显示出来

title('输入的彩色JPG图像')

imwrite(rgb2gray(PS),'PicSampleGray.bmp');

%将彩色图片灰度化并保存

PS=rgb2gray(PS);

%灰度化后的数据存入数组

%绘制直方图

[m,n]=size(PS);

%测量图像尺寸参数

GP=zeros(1,256);

%预创建存放灰度出现概率的向量

for k=0:255

GP(k+1)=length(find(PS==k))/(m*n); %计算每级灰度出现的概率,将其存入GP中相应位置end

figure,bar(0:255,GP,'b')

%绘制直方图

title('原图像直方图')

xlabel('灰度值')

ylabel('出现概率')

%直方图均衡化

S1=zeros(1,256);

for i=1:256

for j=1:i

S1(i)=GP(j)+S1(i); %计算Sk

end

end

S2=round((S1*256)+0.5);

%将Sk归到相近级的灰度

for i=1:256

GPeq(i)=sum(GP(find(S2==i)));

%计算现有每个灰度级出现的概率

end

figure,bar(0:255,GPeq,'b')

%显示均衡化后的直方图

title('均衡化后的直方图')

xlabel('灰度值')

ylabel('出现概率')

%图像均衡化

PA=PS;

for i=0:255

PA(find(PS==i))=S2(i+1); %将各个像素归一化后的灰度值赋给这个像素end

figure,imshow(PA)

%显示均衡化后的图像

title('均衡化后图像')

imwrite(PA,'PicEqual.bmp');

s=imread('girl.bmp');

[m,n]=size(s);

num=m*n;

r=zeros(1,256);

e=zeros(1,256);

d=zeros(size(s));

for i=1:m

for j=1:n

r(s(i,j)+1)=r(s(i,j)+1)+1; %原图像概率密度

end

end

r=r./num;

for i=1:m

for j=1:i

e(i)=e(i)+r(j); %累积分布

end

end

for i=1:256

e(i)=floor(e(i)*255+0.5);

%映射关系

end

for i=1:m

for j=1:n

d(i,j)=e(s(i,j)+1);

end

end

s=uint8(s);

d=uint8(d);

subplot(2,2,1);

imshow(s);

title('source');

subplot(2,2,2);

imhist(s);

title('histogram of source'); subplot(2,2,3);

imshow(d);

title('dest');

subplot(2,2,4);

imhist(d);

title('histogram of dest'); 处理结果

相关文档
最新文档