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

  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

count(m)=count(m)+count(m-1);

end

count=round(count*255+0.5);

for m=1:256

for n=1:256

d(m,n)=count(b(m,n)+1);

end

end

d=mat2gray(d);

subplot(2,2,3);

imshow(d);

title('program by own');

处理结果:

2、自己设计程序实现图像的直方图均衡;

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');

处理结果

相关文档
最新文档