直方图图像处理实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字图像处理实验
实验一 直方图处理
实验目的
理解图像直方图的概念,掌握图像直方图的绘制方法
掌握直方图均衡化的原理,并会用直方图均衡化对图像进行处理。
"
实验要求
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)原始图及其归一化直方图