直方图图像处理实验报告

合集下载

图像直方图实验报告

图像直方图实验报告

图像直方图实验报告实验目的本实验旨在通过使用Python编程语言对图像直方图进行分析和可视化,加深对图像亮度分布的理解,并通过实验结果来探索不同图像的特点和相似性。

实验步骤1. 导入必要的库在开始实验之前,首先需要导入所需的Python库,包括numpy、matplotlib.pyplot和cv2。

可以使用以下代码导入这些库:import numpy as npimport matplotlib.pyplot as pltimport cv22. 读取图像数据选择一张感兴趣的图像作为实验对象,并使用cv2库中的imread()函数读取图像数据。

例如,可以使用以下代码读取名为image.jpg的图像:image = cv2.imread('image.jpg', 0)3. 计算图像直方图使用numpy库中的histogram()函数计算图像的直方图。

直方图是一个表示图像亮度级别频率分布的数组。

可以使用以下代码计算直方图:histogram = np.histogram(image.flatten(), bins=256, range=[0, 256])上述代码将返回一个包含图像直方图数据的数组。

4. 可视化直方图使用matplotlib.pyplot库中的bar()函数将图像直方图可视化。

可以使用以下代码绘制直方图:plt.figure()plt.title('Image Histogram')plt.xlabel('Bins')plt.ylabel('Frequency')plt.bar(histogram[1][:-1], histogram[0], width=1, color='gray')plt.show()上述代码将绘制一个表示图像亮度级别频率分布的直方图。

5. 结果分析通过观察直方图,可以分析图像的亮度特性和分布情况。

光学图像处理实验报告

光学图像处理实验报告

光学图像处理实验报告第一篇:光学图像处理实验报告光学图像处理实验报告直方图均衡化的研究一、摘要直方图均衡化就是把一已知灰度概率分布的图像经过一种变换,使之演变成一幅具有均匀灰度概率分布的新图像。

它是以累积分布函数变换法为基础的直方图修正法。

分析和总结灰度直方图的均衡化算法并通过VC++实验验证该方法能有效达到图像增强的目的。

对于较为暗淡的图像,采用直方图均衡化能够增强其整体对比度,获的较为理想的观察效果。

二、关键字灰度统计直方图均衡化三、实验原理1、直方图的理论基础:(1)直方图概念:灰度直方图表示图像中每种灰度出现的频率。

(2)直方图的作用:反映一幅图像的灰度分布特性n(3)直方图的计算:p(rk)=k0≤rk≤1k=0,1,2,Λ,l-1 n式中:nk为图像中出现rk级灰度的像素数,n是图像像素总数,而nk/n即为频数。

2、设计目的:产生一幅灰度级分布具有均匀概率密度的图像,扩展像素取值的动态范围,达到了图象增强的目的。

3、直方图均衡化的效果:1)变换后直方图趋向平坦,灰级减少,灰度合并。

2)原始象含有象素数多的几个灰级间隔被拉大了,压缩的只是象素数少的几个灰度级,实际视觉能够接收的信息量大大地增强了,增加了图象的反差。

同时,也增加了图象的可视粒度。

4、离散情况下的直方图均衡化的算法:A、列出原始图像的灰度级 fj,j=0,1,Λ,L-1B、统计各灰度级的像素数目 nj,j=0,1,Λ,L-1C、计算原始图像直方图各灰度级的频数 Pf(fj)=nj/n,j=0,1,Λ,L-1kD、计算累积分布函数 C(f)=j=0Pf(fj),j=0,1,Λ,k,ΛL-1F、应用以下公式计算映射后的输出图像的灰度级,P为输出图像灰度级的个数,其中INT为取整符号:gi=INT[(gmax-gmin)C(f)+gmin+0.5] G、用的映射关系修改原始图像的灰度级,从而获得直方图近似为均匀分布的输出图像。

∑四、实验内容及源程序1、灰度分布密度的统计程序代码如下:/*********************************************** *函数名称:ZhiFangTu(float *tongji)*函数类型:void *变量说明:tongji,灰度分布密度统计 *功能:对图像进行灰度直方图统计***********************************************/ void CAAAView::OnZhifangtu(float *tongji){ // TODO: Add your command handler code hereint huidu[256];//灰度计数CAAADoc* pDoc = GetDocument();LPSTR lpDIB;LPSTRlpDIBBits;lpDIB =(LPSTR)::GlobalLock((HGLOBAL)pDoc->GetHDIB());lpDIBBits = ::FindDIBBits(lpDIB);//原图数据区指针int iH,iW;memset(huidu,0,sizeof(huidu));//变量初始化iH = ::DIBHeight(lpDIB);//宽iW = ::DIBWidth(lpDIB);//长LPBYTE temp1=new BYTE[iH*iW];//新图像缓冲区memcpy(temp1,lpDIBBits,iH*iW);//复制原图像到缓冲区for(int i=0;i{ for(int j=0;j{unsigned char temp;temp=temp1[iW*i+j];//灰度统计计数huidu[temp]++;} } for(i=0;i<256;i++)//统计灰度分布密度tongji[i]=huidu[i]/(iH*iW*1.0f);}2、直方图分布的均衡化(1)统计直方图数组,用一个数组p记录p[i];(2)i从1开始,令s[i]=s[i-1]+p[i];(3)一个数组L记录新的s的索引值,即令L[i]=s[i]*(256-1);(4)依次循环每个像素,取原图的像素值作为数组L的下标值,取该下标值对应的数组值作为均衡化之后的像素值。

数字图像处理实验-灰度直方图

数字图像处理实验-灰度直方图

实验一灰度直方图1.实验目的:(1)加强灰度直方图的图像增强技术的认识和了解;(2)掌握均衡化处理方法对图像做增强处理;2.实验内容:如下图所示是一张大脑的医学核磁共振( MRI)图像,原图由于对比度太低而使得大脑的内部组织层次不清,欲利用直方图均衡等方法对该图做增强处理,先编制出位图读取程序,对该图像进行灰度值统计,并在屏幕上绘制出相应的直方图。

3.实验结果(代码&结果可视化)1)编写程序设原始图像在x,y处的灰度为f而改变后的图像为g则对图像增强的方法即为在x,y处的灰度f映射为g在直方图均衡化处理中对图像的映射函数可以定义为g=Q(f), 即是一个累加分布函数CDF。

实际处理变换算法是先对原始图像的灰度情况进行统计分析并计算出原始直方图分布。

然后根据计算出的累计直方图分布求出f->g的灰度映射关系。

重复上述步骤得到原始图像所有灰度级到目标图像灰度级的映射关系后按照这个映射关系对原始图像各点像素进行灰度转换即可完成对原始图像的直方图均衡化。

具体算法:首先统计原始图像的各级灰度值在程序中定义了一个数组lCount[256]来统计原设计图像的各级灰度值,然后对得到的灰度值做灰度映射将映射后的结果存到一个新的灰度映射关系数组bMap[256]中根据这个数组就可以确定出原始图像的某个灰度级经过变换后对应于德灰度级,最后将变换后的结果保存到DIB中。

2)核心程序for (i = 0; i < lHeight; i ++){for (j = 0; j < lWidth; j ++){lpSrc = (unsigned char *)lpDIBBits + lLineBytes * i + j;lCount[*(lpSrc)]++; // 计数加1}}// 统计原设计图像的各级灰度值// 计算灰度映射关系for (i = 0; i < 256; i++){lTemp = 0; // 初始为0for (j = 0; j <= i ; j++){lTemp += lCount[j];}bMap[i] = (BYTE) (lTemp * 255 / lHeight / lWidth); // 计算对应的新灰度值}for(i = 0; i < lHeight; i++)// 每行{for(j = 0; j < lWidth; j++)// 每列{// 指向DIB 第i 行第j 个象素的指针lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j;// 保存新的灰度值*lpSrc = bMap[*lpSrc];}}3)直方图绘制4.实验分析和总结直方图均衡化处理后图像的直方图较为平直,各灰度级的值相对均匀。

关于图形图像处理实训报告总结【九篇】

关于图形图像处理实训报告总结【九篇】

关于图形图像处理实训报告总结【九篇】实训报告总结:图形图像处理实训图形图像处理实训是计算机科学与技术专业的基础课程之一。

通过本次实训课程,我深入了解了图形图像处理的基本概念、方法和技术,并通过实际操作来提升了自己的实践能力。

下面是对本次实训的九篇报告总结:1. 实验一:图像读取与显示本次实验主要是学习如何读取和显示图像,以及使用Matplotlib库进行图像展示。

通过实验,我掌握了图像读取和显示的基本方法,并学会了基本的图像处理操作。

2. 实验二:图像的灰度变换实验二主要是学习图像的灰度变换,包括线性变换和非线性变换。

我学会了如何使用不同的灰度变换函数来调整图像的亮度和对比度,进一步提升图像的质量。

3. 实验三:图像的空间域滤波本次实验主要是学习图像的空间域滤波技术,包括均值滤波、中值滤波和高斯滤波等。

通过实验,我掌握了不同滤波方法的原理和实现方式,并学会了如何选择合适的滤波方法来降噪和模糊图像。

4. 实验四:图像的频域滤波实验四主要是学习图像的频域滤波技术,包括傅里叶变换和频域滤波等。

通过实验,我了解了傅里叶变换的原理和应用,并学会了如何使用频域滤波来实现图像的锐化和平滑。

5. 实验五:图像的形态学处理本次实验主要是学习图像的形态学处理技术,包括腐蚀、膨胀、开运算和闭运算等。

通过实验,我学会了如何使用形态学操作来改变图像的形状和结构,进一步改善图像的质量。

6. 实验六:图像的边缘检测实验六主要是学习图像的边缘检测技术,包括Sobel算子、Laplacian算子和Canny算子等。

通过实验,我了解了不同边缘检测方法的原理和应用,并学会了如何使用边缘检测来提取图像的轮廓和特征。

7. 实验七:图像的分割与聚类本次实验主要是学习图像的分割与聚类技术,包括阈值分割、区域生长和K均值聚类等。

通过实验,我掌握了不同分割与聚类方法的原理和应用,并学会了如何使用分割与聚类来识别和分析图像中的目标和区域。

8. 实验八:图像的特征提取与描述子实验八主要是学习图像的特征提取和描述子技术,包括尺度不变特征变换(SIFT)和方向梯度直方图(HOG)等。

图像处理报告

图像处理报告
一、直方图均衡化
1.原理
直方图均衡化是图像处理领域中利用图像直方图对比度进行图像增强的方法。这种方法通常用来增加许多图像的局部对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。(代码见附件1)
b.中值滤波器
中值滤波是一种最常用的非线性平滑滤波器,其滤波原理是把邻域中的图像的像素按灰度级进行排序,然后选择该组的中间值作为输出像素值。
1.原理
其基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值来替换,其主要功能是让周围像素灰度值差别比较大的像素改取与周围的像素值接近的值,从而可以消除孤立的噪声点,所以中值滤波对于滤除图像的椒盐噪声非常有效。常规中值滤波器对长拖尾概率分布的噪声能起到良好的平滑效果。不仅如此,它在消除噪声的同时还具有保护边界信息的优点,对图像中的某些细节起到保护作用,因而在图像去噪处理中得到了比较广泛的应用。但是常规中值滤波去脉冲噪声的性能受滤波窗口尺寸的影响较大,而且它在抑制图像噪声和保护细节两方面存在一定的矛盾:取的滤波窗口越小,就可较好地保护图像中某些细节,但滤除噪声的能力会受到限制;反之,取的滤波窗口越大就可加强噪声抑制能力,但对细节的保护能力会减弱。(代码见附件3)
另外,拉普拉斯算子还可以表示成模板的形式,如图3-1所示。图3-1(a)表示离散拉普拉斯算子的模板,图3-1(b)表示其扩展模板,从模板形式容易看出,如果在图像中一个较暗的区域中出现了一个亮点,那么用拉普拉斯运算就会使这个亮点变得更亮。因为图像中的边缘就是那些灰度发生跳变的区域,所以拉普拉斯锐化模板在边缘检测中很有用。(代码见附件4)

图像的直方图统计实验报告

图像的直方图统计实验报告

华侨大学数字图像处理与图像通信实验报告实验题目:图像的直方图统计专业、班级:通信3班学生姓名:学号:分数:2014 年 6 月 4 日一、实验目的:掌握直方图统计的算法原理和程序设计,了解各种图像的直方图统计的意义及其用途。

二、实验设备:计算机、matlab 7.0软件三、实验原理灰度直方图是灰度值的函数,描述的是图像中具有该灰度值的像素的个数,其横坐标表示像素的灰度级别,纵坐标是该灰度出现的频率(像素个数与图像像素总数之比)。

直方图的作法如下: a )将图像的灰度级归一化若图像的灰度级为:0,1,,1,L -则令,0,1,,110 1.k k kr k L L r ==--≤≤则在灰度级中,0k r =代表黑,1k r =代表白。

对于一幅给定的图像来说,每一个像素取得[0,1]区间内的灰度级是随机的,也就是说k r 是一个随机变量。

b)计算各灰度级的像素概率()()k k k r k k r k n r n n p r n n k p r =设为灰度级为的像素的个数,为总的像素个数,令是像素值为的像素的频数,为其出现的概率 c)作图建立直角坐标系,横轴表示r k 的取值,纵轴表示p r (r k )的取值,作p r (r k )的函数图。

四、实验内容:实现对一幅灰度图像的像素的统计,并绘制直方图。

程序编码:I=imread('C:\MATLAB7\work\2.png'); figure(1)subplot(1,2,1) imshow(I); title('原图') add=[];tab1=zeros(1,256) for n=0:255 X=I==n;add=[add;sum(sum(X))]; end;[a b]=size(I); final=add/(a*b); subplot(1,2,2); bar(0:255,final,'g'); title('灰度级图象')原图-100010*******00.0050.010.0150.020.0250.030.035灰度级图象。

(精品)数字图像处理实验报告--直方图规定化

(精品)数字图像处理实验报告--直方图规定化

数字图像处理实验报告直方图匹配规定化直方图均衡化能够自动增强整个图像的对比度,但它的具体增强效果不容易控制,处理的结果总是得到全局均匀化的直方图。

实际上有时需要变换直方图,使之成为某个特定的形状,从而有选择地增强某个灰度值范围内的对比度。

这时可以采用比较灵活的直方图规定化。

一般来说正确地选择规定化的函数可以获得比直方图均衡化更好的效果。

所谓直方图规定化,就是通过一个灰度映像函数,将原灰度直方图改造成所希望的直方图。

所以,直方图修正的关键就是灰度映像函数。

直方图匹配方法主要有3个步骤(这里设M和N分别为原始图和规定图中的灰度级数,且只考虑N≤M的情况):(1) 如同均衡化方法中,对原始图的直方图进行灰度均衡化:(2) 规定需要的直方图,并计算能使规定的直方图均衡化的变换:(3) 将第1个步骤得到的变换反转过来,即将原始直方图对应映射到规定的直方图,也就是将所有pf(fi)对应到pu(uj)去。

一、A图直方图规定B图Matlab程序:%直方图规定化clear allA=imread('C:\Users\hp\Desktop\A.tif'); %读入A图像imshow(A) %显示出来title('输入的A图像')%绘制直方图[m,n]=size(A); %测量图像尺寸B=zeros(1,256); %预创建存放灰度出现概率的向量for k=0:255B(k+1)=length(find(A==k))/(m*n); %计算每级灰度出现的概率,将其存入B中相应位置endfigure,bar(0:255,B,'g'); %绘制直方图title('A图像直方图')xlabel('灰度值')ylabel('出现概率')axis([0,260,0,0.015])C=imread('C:\Users\hp\Desktop\B.tif');%读入B图像imshow(C) %显示出来title('输入的B图像')%绘制直方图[m,n]=size(C); %测量图像尺寸D=zeros(1,256); %预创建存放灰度出现概率的向量for k=0:255D(k+1)=length(find(C==k))/(m*n); %计算每级灰度出现的概率,将其存入D中相应位置endfigure,bar(0:255,D,'g'); %绘制直方图title('B图像直方图')xlabel('灰度值')ylabel('出现概率')axis([0,260,0,0.015])S1=zeros(1,256);for i=1:256for j=1:iS1(i)=D(j)+S1(i); %计算B灰度图累计直方图endendcounts=Bfigure,bar(0:255,counts,'r')title('A图像直方图 ')S2=zeros(1,256);for i=1:256for j=1:iS2(i)=counts(j)+S2(i);endend; %"累计"规定化直方图%对比直方图,找到相差最小的灰度级for i=1:256for j=1:255if S1(j)<=S2(i)&S1(j+1)>=S2(i)if abs(S1(j)-S2(i))<=abs(S1(j+1)-S2(i)) T(i)=j;else T(i)=j+1;endendendend%确定变换关系,重组直方图H=zeros(1,256);H(1)=S2(1);for i=2:255if T(i-1)>0for k=(T(i-1)+1):T(i)H(i)=H(i)+D(k);endelse H(i)=0;endendfigure,bar(0:255,H,'g') %显示规定化后的直方图title('A规定B后的直方图')xlabel('灰度值')ylabel('出现概率')axis([0,260,0,0.6])%显示规定图PA=C; %将各个像素归一化后的灰度值赋给这个像素for i=1:mfor j=1:nfor k=2:255if T(k-1)<=C(i,j)&C(i,j)<=T(k)PA(i,j)=k;break;endendendendfigure,imshow(PA) %显示规定化后的图像title('A规定B后图像')imwrite(PA,'guidinghua.bmp');二、用已知直方图规定A图规定灰度为[zeros(1,49),0.3,zeros(1,49),0.1,zeros(1,49),0.2,zeros(1,49),0.1,zeros(1,49 ),0.2,zeros(1,49),0.1]Matlab程序:clear allA=imread('C:\Users\hp\Desktop\B.tif'); %读入A图像imshow(A) %显示出来title('输入的A图像')%绘制直方图[m,n]=size(A); %测量图像尺寸B=zeros(1,256); %预创建存放灰度出现概率的向量for k=0:255B(k+1)=length(find(A==k))/(m*n); %计算每级灰度出现的概率,将其存入B中相应位置endfigure,bar(0:255,B,'g'); %绘制直方图title('A图像直方图')xlabel('灰度值')ylabel('出现概率')axis([0,260,0,0.015])S1=zeros(1,256);for i=1:256for j=1:iS1(i)=B(j)+S1(i); %计算原灰度图累计直方图endendcounts=[zeros(1,49),0.3,zeros(1,49),0.1,zeros(1,49),0.2,zeros(1,49),0.1,zer os(1,49),0.2,zeros(1,49),0.1];%规定化直方图figure,bar(1:300,counts,'r')title('规定化直方图')S2=zeros(1,256);for i=1:256for j=1:iS2(i)=counts(j)+S2(i);endend; %"累计"规定化直方图%对比直方图,找到相差最小的灰度级for i=1:256for j=1:256if S1(j)<=S2(i)&S1(j+1)>=S2(i)if abs(S1(j)-S2(i))<=abs(S1(j+1)-S2(i)) T(i)=j;else T(i)=j+1;endendendend%确定变换关系,重组直方图H=zeros(1,256);H(1)=S2(1);for i=2:256if T(i-1)>0for k=(T(i-1)+1):T(i)H(i)=H(i)+B(k);endelse H(i)=0;endendfigure,bar(0:255,H,'g') %显示规定化后的直方图title('规定化后的直方图')xlabel('灰度值')ylabel('出现概率')axis([0,260,0,0.6])%显示规定图PA=A; %将各个像素归一化后的灰度值赋给这个像素for i=1:mfor j=1:nfor k=2:256if T(k-1)<=A(i,j)&A(i,j)<=T(k)PA(i,j)=k;break;endendendendfigure,imshow(PA) %显示规定化后的图像title('规定化后图像')imwrite(PA,'guidinghua.bmp');。

数字图像处理-直方图-实验报告

数字图像处理-直方图-实验报告

实验三直方图一、实验目的掌握基本的图象增强方法,观察图象增强的效果,加深对灰度直方图及直方图均衡化的理解,掌握直方图均衡化方法。

二、实验内容将一张彩色图片转换成灰色图片,画灰度直方图和均衡化后的直方图,并将灰度图和均衡化后的图片对比。

三、实验原理灰度直方图是将数字图像中的所有像素,按照灰度值的大小,统计其所出现的频度。

通常,灰度直方图的横坐标表示灰度值,纵坐标为像素个数,也可以采用某一灰度值的像素数占全图像素数的百分比作为纵坐标。

直方图均衡方法的基本原理是:对在图像中像素个数多的灰度值(即对画面起主要作用的灰度值)进行展宽,而对像素个数少的灰度值(即对画面不起主要作用的灰度值)进行归并。

从而达到清晰图像的目的。

四、实验程序1.函数功能,画出图像的直方图,并对图像进行直方图均衡2.直接读图像football.jpg,读到I中3.graydis是原始直方图各灰度级像素个数4.原始直方图graydispro,利用原始直方图计算原始累计直方图graydispro5.t[]计算和原始灰度对应的新的灰度t[],建立映射关系,t坐标代表原始的灰度,t[]代表对应原始坐标的新坐标6.new_graydis是统计新直方图各灰度级像素个数7.计算新的灰度直方图new_graydispro,利用新的直方图计算新的累计直方图new_graydispro8.计算直方图均衡后的新图new_J程序如下:I=imread('football.jpg'); %读入图片J=rgb2gray(I); %将彩色图片转换为灰度图Imshow(J);graydis=zeros(1,256); %设置矩阵大小graydispro=zeros(1,256);new_graydis=zeros(1,256);new_graydispro=zeros(1,256);[h w]=size(J);new_J=zeros(h,w);%计算原始直方图各灰度级像素个数graydisfor x=1:hfor y=1:wgraydis(1,J(x,y))=graydis(1,J(x,y))+1;endend%计算原始直方图graydisprograydispro=graydis./sum(graydis);subplot(1,2,1);plot(graydispro);title('灰度直方图');xlabel('灰度值');ylabel('像素的概率密度');%计算原始累计直方图for i=2:256graydispro(1,i)=graydispro(1,i)+graydispro(1,i-1);end%计算和原始灰度对应的新的灰度t[],建立映射关系for i=1:256t(1,i)=floor(254*graydispro(1,i)+0.5);end%统计新直方图各灰度级像素个数new_graydisfor i=1:256new_graydis(1,t(1,i)+1)=new_graydis(1,t(1,i)+1)+graydis(1,i); end%计算新的灰度直方图new_graydispronew_graydispro=new_graydis./sum(new_graydis);subplot(1,2,2);plot(new_graydispro);title('均衡化后的灰度直方图');xlabel('灰度值');ylabel('像素的概率密度');%计算直方图均衡后的新图new_J for x=1:hfor y=1:wnew_J(x,y)=t(1,J(x,y));endendfigure,imshow(J,[]);title('原图');figure,imshow(new_J,[]);title('直方图均衡化后的图');。

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

数字图像处理实验 实验一 直方图处理
实验目的
● 理解图像直方图的概念,掌握图像直方图的绘制方法
● 掌握直方图均衡化的原理,并会用直方图均衡化对图像进行处理。

实验要求
1.读入图像,可使用imread 。

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

3.绘制图像pout.tif 的归一化的直方图,可使用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 1
1
)()(
式中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\lena.bmp');
%将读入的彩色图像转化为灰度图像
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\lena.bmp');
%将读入的彩色图像转化为灰度图像
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)均衡化后的图像及其归一化直方图。

相关文档
最新文档