直方图图像处理实验报告

直方图图像处理实验报告
直方图图像处理实验报告

数字图像处理实验

实验一 直方图处理

实验目的

理解图像直方图的概念,掌握图像直方图的绘制方法

掌握直方图均衡化的原理,并会用直方图均衡化对图像进行处理。

"

实验要求

1.读入图像,可使用imread 。

2.输出图像,可使用imshow 。

3.绘制图像的归一化的直方图,可使用IPT 函数imhist 。

"

4.对图像进行直方图均衡化,可使用IPT 函数histeq ,对均衡化前后的图像以及直方图进行对比。

实验原理

一幅数字图像在范围[0, G ]内共有L 个灰度等级,其直方图定义为离散函数

k k n r h =)(

~

其中r k 是区间[0, G ]内的第k 级亮度,n k 是灰度级为r k 的图像中的像素数。

通常,我们会用到归一化直方图,即使所用所有元素h (r k )除以图像中的像素总数n 所得到的图形:

n

n n r h r p k k k ==)()( 其中k =1,2,…,L 。

Matlab 中提供了IPT 函数imhist 来绘制图像的直方图,但是除此之外绘制直方图的方法还有很多,可以通过条形图、杆状图等方式来表示直方图。

直方图均衡化主要用于增强动态范围偏小的图像的反差。该方法的基本思想是把原始的直方图变换为均匀分布的形状,这样就增加了像素灰度值的动态范围,从而达到增强图像整体对比度的效果。

直方图均衡化一般采用原始图的累计分布函数作为变换函数。假设灰度级归一化至范围[0, 1]内,p r (r )表示给定图像中的灰度级的概率密度函数,对于离散的灰度级,均衡化变换为:

∑∑=====k j j k j j r k k n n r p r T s 11)()(

式中k =1,2,…,L ,s k 是输出图像中的亮度值,它对应于出入图像中的亮度值r k 。

~

实验心得:

1. matlab的函数的功能很强大,一个简单的函数调用就可以解决复杂的问题。这样,就需要在函数调用时注意函数的参数,否则很容易出错。比如函数histeq(a,n),就要注意其中的n为灰度值的个数。

2. 对于自己编写函数实现某些特定的功能时,需要对原理掌握清楚,如实验二中需自己编写函数实现图像的均衡,就要求对直方图的均衡原理掌握到位。

3. 使用读图像函数imread()时需注意该程序的物理路径和函数参数,即图像的物理路径需要保持一致。

4. 在代码中定义某些参数,可以扩大代码的使用范围,提高代码的灵活性。例如,程序二中定义行,列和像素,则可以稍微修改参数的初始值,就可对不同行,列和像素的图像进行直方图均衡。

实验代码:

1. 实验一代码:

%读入位于D盘\image\tuxiang的lena图像

$

A=imread('D:\image\tuxiang\');

%将读入的彩色图像转化为灰度图像

a=rgb2gray(A);

%对图像进行直方图均衡化

b=histeq(a,256);

,

%绘制均衡化前后的图像及其直方图

subplot(2,2,1);

imshow(a);

title('原始图像');

"

subplot(2,2,2);

imhist(a);

title('原始图像归一化直方图');

*

subplot(2,2,3);

imshow(b);

title('均衡化后的图像');

subplot(2,2,4);

imhist(b);

title('均衡化后图像的归一化直方图');

2. 实验一代码:

@

%读入位于D盘\image\tuxiang的lena图像A=imread('D:\image\tuxiang\');

%将读入的彩色图像转化为灰度图像

a=rgb2gray(A);

`

row=512;%图像每列的像素点

col=512;%图像每行的像素点

n=255;%灰度个数

y=zeros(1,n+1);

z=zeros(1,n+1);

}

f=zeros(1,n+1);

%统计图像中每个灰度的像素点个数

for i=0:n

k=0;

$

for r=1:row

for c=1:col

if(a(r,c)==i)

k=k+1;

end

(

end

end

y(i+1)=k;

end

<

%映射函数

for p=1:n+1

for q=1:p

f(p)=f(p)+y(q);

end

-

f(p)=f(p)*n/(row*col);

end

%利用映射函数对图像实现均衡化

for s=1:row

for t=1:col

b(s,t)=f(a(s,t)+1);

end

end

/

%统计均衡化后的图像的每个灰度的像素点个数for j=0:n

h=0;

for r=1:row

for c=1:col

~

if(b(r,c)==j)

h=h+1;

end

end

end

<

z(j+1)=h;

end

%绘制均衡化前后的图像及其直方图

subplot(2,2,1);

imshow(a);

title('原始图像');

subplot(2,2,2);

bar([0:n],y/(row*col));

title('原始图像归一化直方图');

subplot(2,2,3);

imshow(b);

title('均衡化后的图像');

subplot(2,2,4);

bar([0:n],z/(row*col));

title('均衡化后图像的归一化直方图');

实验结果:

1. 实验一

(1)原始图及其归一化直方图

(2)均衡化后的图像及其归一化直方图

2. 实验二

(1)原始图及其归一化直方图

(2)均衡化后的图像及其归一化直方图

相关主题
相关文档
最新文档