数字图像处理实验报告--直方图规定化 0528
数字图像处理实验报告直方图均衡化

数字图像处理实验报告实验名称:直方图均衡化姓名:班级:学号:专业:电子信息工程(2+2)指导教师:陈华华实验日期:2012年5月24日直方图均衡化图像对比度增强的方法可以分成两类:一类是直接对比度增强方法;另一类是间接对比度增强方法。
直方图均衡化是最常见的间接对比度增强方法。
直方图均衡化则通过使用累积函数对灰度值进行“调整”以实现对比度的增强。
直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。
直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。
直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布。
缺点:1)变换后图像的灰度级减少,某些细节消失;2)某些图像,如直方图有高峰,经处理后对比度不自然的过分增强。
直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法。
这种方法通常用来增加许多图像的局部对比度,尤其是当图像的有用数据的对比度相当接近的时候。
通过这种方法,亮度可以更好地在直方图上分布。
这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。
直方图均衡化的基本思想是把原始图的直方图变换为均匀分布的形式,这样就增加了象素灰度值的动态范围从而可达到增强图像整体对比度的效果。
设原始图像在(x,y)处的灰度为f,而改变后的图像为g,则对图像增强的方法可表述为将在(x,y)处的灰度f映射为g。
在灰度直方图均衡化处理中对图像的映射函数可定义为:g = EQ (f),这个映射函数EQ(f)必须满足两个条件(其中L为图像的灰度级数):(1)EQ(f)在0≤f≤L-1范围内是一个单值单增函数。
这是为了保证增强处理没有打乱原始图像的灰度排列次序,原图各灰度级在变换后仍保持从黑到白(或从白到黑)的排列。
(2)对于0≤f≤L-1有0≤g≤L-1,这个条件保证了变换前后灰度值动态范围的一致性。
《数字图像处理》实验报告

《数字图像处理》实验报告数字图像处理是一门将图像进行数字化处理的学科,它通过计算机算法和技术手段对图像进行分析、增强、压缩和重建等操作。
在本次实验中,我们学习了数字图像处理的基本概念和常用算法,并通过实验来探索其应用和效果。
首先,我们进行了图像的读取和显示实验。
通过使用Python中的OpenCV库,我们能够轻松地读取图像文件,并将其显示在屏幕上。
这为我们后续的实验奠定了基础。
同时,我们还学习了图像的像素表示方法,了解了图像由像素点组成的原理。
这使我们能够更好地理解后续实验中的算法和操作。
接下来,我们进行了图像的灰度化实验。
灰度化是将彩色图像转换为灰度图像的过程。
在实验中,我们使用了不同的算法来实现灰度化操作,包括平均值法、最大值法和加权平均法等。
通过比较不同算法得到的灰度图像,我们发现不同算法对图像的处理效果有所差异,这使我们深入理解了灰度化的原理和应用。
随后,我们进行了图像的直方图均衡化实验。
直方图均衡化是一种用于增强图像对比度的方法。
在实验中,我们使用了直方图均衡化算法来对图像进行处理,并观察了处理前后的效果变化。
通过实验,我们发现直方图均衡化能够显著提高图像的对比度,使图像更加清晰和鲜明。
在进一步探索图像处理技术的过程中,我们进行了图像的滤波实验。
滤波是一种常用的图像处理操作,它通过对图像进行卷积操作来实现。
在实验中,我们学习了不同类型的滤波器,包括均值滤波器、高斯滤波器和中值滤波器等。
通过比较不同滤波器对图像的处理效果,我们发现每种滤波器都有其适用的场景和效果。
此外,我们还进行了图像的边缘检测实验。
边缘检测是一种用于提取图像边缘信息的方法。
在实验中,我们学习了不同的边缘检测算法,包括Sobel算子、Canny算子和Laplacian算子等。
通过比较不同算法对图像的处理效果,我们发现每种算法都有其独特的特点和应用。
最后,我们进行了图像的压缩实验。
图像压缩是一种将图像数据进行压缩以减小文件大小的方法。
南理工数字图象处理报告

数字图像处理实验报告姓名:学号:班级:指导老师: 王欢实验一1.实验目的对一幅图像的直方图进行均衡化,即产生一幅灰度级分布具有均匀概率密度的图像,扩展像素取值的动态范围,达到了图象增强的目的2.实验原理(1).直方图的理论基础:a.直方图概念:灰度直方图表示图像中每种灰度出现的频率。
b.直方图的作用:反映一幅图像的灰度分布特性c.直方图的计算:(2).直方图的优点直方图具有很多的优点,直方图能反映图像的概貌,比如图像中有几类目标,目标和背景的分布如何;通过直方图可以直接计算图像中的最大亮度、最小亮度、平均亮度、对比度以及中间亮度等。
使用直方图可以完成图像分割、目标检索等。
因为不同的目标具有不同的颜色分布。
使用归一化直方图作目标匹配,还不易受到目标翻转和目标大小变化的影响。
在图像查询的系统中,直方图有很大的应用,用它存储目标的特征占有空间小,且执行速度快。
(3).均衡化原理∑==ki ik nn r P 0)(根据熵理论可知当H[0],H[1]…,H[n-1]相等时,图像信息量Hi 都相等,即把原始图的直方图变换为均匀分布的形式,这样就增加了象素值的范围,增强了图像的对比效果。
令A0是图像面积,N 是有效亮度级的个数,对于一个完全平坦的直方图来说,应该在每一个亮度级上A0/N 个象素。
设g 是原来的灰度级,G 是变换后的灰度级,则可描述为:G=F(g)。
实际应用中,有两种情况需要考虑:(1)多个至一个:若有连续n 个灰级的频数之和级等于A/N, 则必导致它们合并成一个灰度级。
(2)一个到多个:若有某个灰级的频数是A0 /N 的R 倍,则必须将其分为R 个不同的灰阶级,每一个上都是A0 /N 。
情况(1)导致的灰度级的合并是简单的(是多到一的映射关系),但情况(2)时的分解是不容易的(是一到多的关系) ,因为确实难以判定g 在图像的不同位置,到底如何分解才是最好。
假设灰度级g 要映射到[GL, GR]中,有3种规则可以遵循: (1)规则1:总是将g 映射为(GL+GR)/2。
数字图像的直方图规定化处理实验

XX 大学实验报告
(一) 掌握数字图像的直方图规定化处理的算法和方法。
(二) 熟悉数字图像的直方图规定化处理的算法原理。
按照实验内容及参考程序,独立完成此次实验,记下不懂的知识点,查阅资料或者向老 师咨询。
直方图规定化是用于产生处理后有特殊直方图的图像方法。
学院:
专业: 班级: 姓名 实验时间 实验项目名称
实验二:数字图像的直方图规定化处理
令
p r (r )和Pz (z )分别为原始图像和期望图像的灰度概率密度函数。
和期望图像均作直方图均衡化处理,应有:
r
s T (r ) 0 p r (r )dr ,V G (Z )
对原始图像
z 0
P z
(z )dz ,z
G
1
(V)
由于都是作直方图均衡化处理,所以处理后的原图像的灰度概率密度函数
p S (s )及理
想图像的灰度概率密度函数 P V (V )是相等的。
因此,可以用变换后的原始图像灰度级
S
代替上式中的V, 即Z G 1[T (r )]。
利用此式可以从原始图像得到希望的图像灰度级。
对离散图像,有
P Z (ZJ
虹,V i G (乙)^P z (Z i ), Z i
G 1(S i ) G 1[T(r i )]
n
i 0
综上所述,数字图像的直方图规定化就是将直方图均衡化后的结果映射到期望的理想直 方图上,使图像按人的意愿去变换。
数字图像的直方图规定的算法如下:
(一)将原始图像作直方图均衡化处理, 求出原图像中每一个灰度级 r i 所对应的变
学号 指导教师
实验组 成绩。
(精品)数字图像处理实验报告--直方图规定化

数字图像处理实验报告直方图匹配规定化直方图均衡化能够自动增强整个图像的对比度,但它的具体增强效果不容易控制,处理的结果总是得到全局均匀化的直方图。
实际上有时需要变换直方图,使之成为某个特定的形状,从而有选择地增强某个灰度值范围内的对比度。
这时可以采用比较灵活的直方图规定化。
一般来说正确地选择规定化的函数可以获得比直方图均衡化更好的效果。
所谓直方图规定化,就是通过一个灰度映像函数,将原灰度直方图改造成所希望的直方图。
所以,直方图修正的关键就是灰度映像函数。
直方图匹配方法主要有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('直方图均衡化后的图');。
数字图像处理实验报告 直方图均衡化

课程设计课程名称数字图像处理题目名称直方图均衡化学生学院信息工程学院专业班级 10级电信2班学号学生姓名指导教师曹江中2013年 1 月日设计题目:直方图均衡化1、直方图的理论基础:(1)直方图概念:灰度直方图表示图像中每种灰度出现的频率。
(2)直方图的作用: 反映一幅图像的灰度分布特性(3)直方图的计算: 式中:n k 为图像中出现r k 级灰度的像素数,n 是图像像素总数,而n k /n 即为频数。
2、设计目的: 产生一幅灰度级分布具有均匀概率密度的图像,扩展像素取值的动态范围,达到了图象增强的目的。
3、直方图均衡化的效果 :1)变换后直方图趋向平坦,灰级减少,灰度合并。
2)原始象含有象素数多的几个灰级间隔被拉大了,压缩的只是象素数少的几个灰度级,实际视觉能够接收的信息量大大地增强了,增加了图象的反差。
同时,也增加了图象的可视粒度。
4、离散情况下的直方图均衡化的算法:A 、列出原始图像的灰度级B 、统计各灰度级的像素数目C 、计算原始图像直方图各灰度级的频数D 、计算累积分布函数F 、应用以下公式计算映射后的输出图像的灰度级,P 为输出图像灰度级的个数,其中INT 为取整符号:G 、用的映射关系修改原始图像的灰度级,从而获得直方图近似为均匀分布的输出图像。
5、主要代码///////////////////////////////////////////////////////////////////画两个直方图坐标轴/////////////////////////////////////////////////////////////////// void CImageView::OnDraw(CDC* pDC){1,,1,0,-=L j f j 1,,1,0,-=L j n j 1,,1,0,/)(-==L j n n f P j j f 1,,,1,0,)()(0-==∑=L k j f P f C k j j f ]5.0)()[(min min max ++-=g f C g g INT g i nn r p k k =)(1,,2,1,010-=≤≤l k r kCImageDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereif(m_dib.m_bLoaded==true) //判断是否加载图像{//获取图像宽和高int nw=m_dib.GetDIBWidth();int nh=m_dib.GetDIBHeight(); ASSERT_VALID(pDoc);// TODO: add draw code for native data hereif(m_dib.m_bLoaded==true){int nw=m_dib.GetDIBWidth();int nh=m_dib.GetDIBHeight();m_dib.ShowDIB(pDC,10,10,nw,nh,m_dib.m_pDIBData,m_dib.m_pBMI);m_dib.ShowDIB(pDC,400,10,nw,nh,m_dib.m_pDumpDIBData,m_dib.m_pBMI) ;}if(m_bHist==true){//绘画直方图CString str;int nh=m_dib.GetDIBHeight();int i;// 绘制坐标轴pDC->MoveTo(10,nh+20); //(10,nh+20 )是直方图的左上角坐标// 垂直轴pDC->LineTo(10,nh+200);//(10,nh+200 )是直方图的左下角坐标// 水平轴pDC->LineTo(310,nh+200);//(310,nh+200 )是直方图的右下角坐标// 写X轴刻度值str.Format("0");pDC->TextOut(10, nh+200+10, str);str.Format("50");pDC->TextOut(60, nh+200+10, str);str.Format("100");pDC->TextOut(110, nh+200+10, str);str.Format("150");pDC->TextOut(160, nh+200+10, str);str.Format("200");pDC->TextOut(210, nh+200+10, str);str.Format("255");pDC->TextOut(265, nh+200+10, str);str.Format("原图直方图归一化");pDC->TextOut(100, nh+230+10, str);// 绘制X轴刻度for ( i = 0; i < 256; i += 25){if ((i & 1) == 0){// 10的倍数pDC->MoveTo(i + 10, nh+200-2);pDC->LineTo(i + 10, nh+200+2);}else{// 10的倍数pDC->MoveTo(i + 10, nh+200-2);pDC->LineTo(i + 10, nh+200+2);}}// 绘制X轴箭头pDC->MoveTo(305,nh+200-5);pDC->LineTo(310,nh+200);pDC->LineTo(305,nh+200+5);// 绘制y轴箭头pDC->MoveTo(10,nh+20);pDC->LineTo(5,nh+20+5);pDC->MoveTo(10,nh+20);pDC->LineTo(15,nh+20+5);int max=0;for(i=0;i<256;i++)if(m_yuantu[i]>max)max=m_yuantu[i];for(i=0;i<256;i++){pDC->MoveTo(10+i,nh+200);pDC->LineTo(10+i,nh+200-(m_yuantu[i]*160/max));}}/******************///TEST 第二个直方图if(m_bHist==true){//绘画直方图CString str;int nh=m_dib.GetDIBHeight();int i;// 绘制坐标轴pDC->MoveTo(160+nw,nh+20); //(10,nh+20 )是直方图的左上角坐标// 垂直轴pDC->LineTo(160+nw,nh+200);//(10,nh+200 )是直方图的左下角坐标// 水平轴pDC->LineTo(460+nw,nh+200);//(310,nh+200 )是直方图的右下角坐标// 写X轴刻度值str.Format("0");pDC->TextOut(415, nh+200+10, str);str.Format("50");pDC->TextOut(465, nh+200+10, str);str.Format("100");pDC->TextOut(515, nh+200+10, str);str.Format("150");pDC->TextOut(565, nh+200+10, str);str.Format("200");pDC->TextOut(615, nh+200+10, str);str.Format("255");pDC->TextOut(670, nh+200+10, str);str.Format("直方图均衡化后归一化");pDC->TextOut(505, nh+230+10, str);// 绘制X轴刻度for ( i = 0; i < 256; i += 25){if ((i & 1) == 0){// 10的倍数pDC->MoveTo(i + 420, nh+200-2);pDC->LineTo(i + 415, nh+200+2);}else{// 10的倍数pDC->MoveTo(i + 420, nh+200-2);pDC->LineTo(i + 420, nh+200+2);}}// 绘制X轴箭头pDC->MoveTo(710,nh+200-5);pDC->LineTo(715,nh+200);pDC->LineTo(710,nh+200+5);// 绘制y轴箭头pDC->MoveTo(415,nh+20);pDC->LineTo(410,nh+20+5);pDC->MoveTo(415,nh+20);pDC->LineTo(420,nh+20+5);int max=0;for(i=0;i<256;i++)if(m_hist[i]>max)max=m_hist[i];for(i=0;i<256;i++){pDC->MoveTo(415+i,nh+200);pDC->LineTo(415+i,nh+200-(m_hist[i]*160/max));}}/*************/// 显示图像(具体的参数见CDIB类的该函数说明)m_dib.ShowDIB(pDC,10,10,nw,nh,m_dib.m_pDIBData,m_dib.m_pBMI);m_dib.ShowDIB(pDC,400,10,nw,nh,m_dib.m_pDumpDIBData,m_dib.m_pBMI);}}/////////////////////////////////////////////////////////////////////直方图均衡化及直方图归一化坐标轴赋值程序///////////////////////////////////////////////////////////////////// void CImageView::OnZhifangtu(){//判断图像是否打开,没打开,则弹出提示框并退出函数if(!m_dib.m_bLoaded){AfxMessageBox("图像还打开,请先打开图像!");return;}//获取图像宽和高及定义成员变量int nw=m_dib.GetDIBWidth();int nh=m_dib.GetDIBHeight();int i,j;int *arr=new int [nw*nh];int n[256]={0};float p[256]={0.0},c[256]={0.0};BYTE* pdata=m_dib.m_pdata;for(i=0;i<256;i++) //初始化直方图数组m_yuantu[i]=0;if(1)//m_dib.m_nImType==24){for(j=0;j<nh;j++)for(i=0;i<nw;i++){BYTE temp=pdata[j*nw+i];m_yuantu[temp]++;}}m_bHist=true;//直方图归一化计算for(i=0;i<nh;i++){for(j=0;j<nw;j++){n[m_dib.m_pdata[i*nw+j]]++;}}for(i=0;i<256;i++){(float)p[i]=(float)n[i]/(float)(nw*nh); }//归一化后累计计算for(i=0;i<256;i++){for(j=0;j<=i;j++){c[i]+=p[j];}}//找到灰度值最大值最小值int max=m_dib.m_pdata[0],min=m_dib.m_pdata[0]; for(i=0;i<nh;i++){for(j=0;j<nw;j++){if(max<m_dib.m_pdata[i*nw+j]){max=m_dib.m_pdata[i*nw+j];}else if(min>m_dib.m_pdata[i*nw+j]){min=m_dib.m_pdata[i*nw+j];}}}//套公式直方图均衡化计算赋值给arr[]一维数组for(i=0;i<nh;i++){for(j=0;j<nw;j++){arr[i*nw+j]=int(c[m_dib.m_pdata[i*nw+j]]*(max-min)+min+0.5); }}//一维数组arr[]赋值给新图像for( j=0;j<nh;j++){for(i=0;i<nw;i++){m_dib.m_pdata[j*nw+i]=arr[j*nw+i];}}//将修改的m_pdata的数据赋值给m_pDIBData,以显示修改的结果m_dib.UpdateData();//刷新屏幕Invalidate();for(i=0;i<256;i++) //初始化直方图数组m_hist[i]=0;if(1)//m_dib.m_nImType==24){for(j=0;j<nh;j++)for(i=0;i<nw;i++){BYTE temp=pdata[j*nw+i];m_hist[temp]++;}}m_bHist=true;// TODO: Add your command handler code here}6、实验结果。
数字图像处置实验报告直方图规定化

数字图像处置实验报告实验名称:直方图规定化姓名:班级:学号:专业:电子信息工程(2+2)指导教师:陈华华实验日期:2021年5月24日直方图匹配(规定化)能够自动增强整个图像的对照度,但它的具体增强成效不容易操纵,处置的结果老是取得全局均匀化的直方图。
事实上有时需要变换直方图,使之成为某个特定的形状,从而有选择地增强某个灰度值范围内的对照度。
这时能够采纳比较灵活的直方图规定化。
一样来讲正确地选择规定化的函数能够取得比直方图均衡化更好的成效。
所谓直方图规定化,确实是通过一个灰度映像函数,将原灰度直方图改造成所希望的直方图。
因此,直方图修正的关键确实是灰度映像函数。
直方图匹配方式要紧有3个步骤(那个地址设M和N别离为原始图和规定图中的灰度级数,且只考虑N≤M的情形):(1) 犹如均衡化方式中,对原始图的直方图进行灰度均衡化:(2) 规定需要的直方图,并计算能使规定的直方图均衡化的变换:(3) 将第1个步骤取得的变换反转过来,即将原始直方图对应映射到规定的直方图,也确实是将所有pf(fi)对应到pu(uj)去。
一、A图直方图规定B图Matlab程序:%直方图规定化clear allA=imread('C:\Users\hp\Desktop\'); %读入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,])C=imread('C:\Users\hp\Desktop\');%读入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,])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,])%显示规定图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,'');二、用已知直方图规定A图规定灰度为[zeros(1,49),,zeros(1,49),,zeros(1,49),,zeros(1,49),,zeros(1,49),,zeros(1,4 9),]Matlab程序:clear allA=imread('C:\Users\hp\Desktop\'); %读入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,])S1=zeros(1,256);for i=1:256for j=1:iS1(i)=B(j)+S1(i); %计算原灰度图累计直方图endend counts=[zeros(1,49),,zeros(1,49),,zeros(1,49),,zeros(1,49),,zeros(1,49),,zeros(1,49),];%规定化直方图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,])%显示规定图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,'');。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字图像处理实验报告--直方图规定化
数字图像处理实验报告
实验名称:直方图规定化
姓名:
班级:
学号:
专业:电子信息工程(2+2)
指导教师:陈华华
实验日期:2012年5月24日
直方图匹配(规定化)
直方图均衡化能够自动增强整个图像的对比度,但它的具体增强效果不容易控制,处理的结果总是得到全局均匀化的直方图。
实际上有时需要变换直方图,使之成为某个特定的形状,从而有选择地增强某个灰度值范围内的对比度。
这时可以采用比较灵活的直方图规定化。
一般来说正确地选择规定化的函数可以获得比直方图均衡化更好的效果。
所谓直方图规定化,就是通过一个灰度映像函数,将原灰度直方图改造成所希望的直方图。
所以,直方图修正的关键就是灰度映像函数。
直方图匹配方法主要有3个步骤(这里设M和N分别为原始图和规定图中的灰度级数,且只考虑N≤M的情况):
(1) 如同均衡化方法中,对原始图的直方图进行灰度均衡化:
(2) 规定需要的直方图,并计算能使规定的直方图均衡化的变换:
(3) 将第1个步骤得到的变换反转过来,即将原始直方图对应映射到规定的直方图,也就是将所有pf(fi)对应到pu(uj)去。
一、A图直方图规定B图
Matlab程序:
%直方图规定化
clear all
A=imread('C:\Users\hp\Desktop\A.tif');
%读入A图像
imshow(A)
%显示出来
title('输入的A图像')
%绘制直方图
[m,n]=size(A);
%测量图像尺寸
B=zeros(1,256);
%预创建存放灰度出现概率的向量
for k=0:255
算每级灰度出现的概率,将其存入B中相应位置end
figure,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:255
算每级灰度出现的概率,将其存入D中相应位置
end
figure,bar(0:255,D,'g'); %绘制直方图
title('B图像直方图')
xlabel('灰度值')
ylabel('出现概率')
axis([0,260,0,0.015])
S1=zeros(1,256);
for i=1:256
for j=1:i
S1(i)=D(j)+S1(i); %计算B灰度图累计直方图
end
end
counts=B
figure,bar(0:255,counts,'r')
title('A图像直方图')
S2=zeros(1,256);
for i=1:256
for j=1:i
S2(i)=counts(j)+S2(i);
end
end;
%"累计"规定化直方图
%对比直方图,找到相差最小的灰度级
for i=1:256
for j=1:255
if 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;
end
end
end
end
%确定变换关系,重组直方图
H=zeros(1,256);
H(1)=S2(1);
for i=2:255
if T(i-1)>0
for k=(T(i-1)+1):T(i)
H(i)=H(i)+D(k);
end
else H(i)=0;
end
end
figure,bar(0:255,H,'g') %显示规定化后的直方图
title('A规定B后的直方图')
xlabel('灰度值')
ylabel('出现概率')
axis([0,260,0,0.6])
%显示规定图
PA=C; %将各个像素归一化后的灰度值赋给这个像素
for i=1:m
for j=1:n
for k=2:255
if T(k-1)<=C(i,j)&C(i,j)<=T(k)
PA(i,j)=k;
break;
end
end
end
end
figure,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,4 9),0.2,zeros(1,49),0.1]
Matlab程序:
clear all
A=imread('C:\Users\hp\Desktop\B.tif');
%读入A图像
imshow(A)
%显示出来
title('输入的A图像')
%绘制直方图
[m,n]=size(A);
%测量图像尺寸
B=zeros(1,256);
%预创建存放灰度出现概率的向量
for k=0:255
B(k+1)=length(find(A==k))/(m*n); %计算每级灰度出现的概率,将其存入B中相应位置end
figure,bar(0:255,B,'g'); %绘制直方图
title('A图像直方图')
xlabel('灰度值')
ylabel('出现概率')
axis([0,260,0,0.015])
S1=zeros(1,256);
for i=1:256
for j=1:i
S1(i)=B(j)+S1(i); %计算原灰度图累计直方图
end
end
counts=[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];%规定化直方图
figure,bar(1:300,counts,'r')
title('规定化直方图')
S2=zeros(1,256);
for i=1:256
for j=1:i
S2(i)=counts(j)+S2(i);
end
end;
%"累计"规定化直方图
%对比直方图,找到相差最小的灰度级
for i=1:256
for j=1:256
if 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;
end
end
end
end
%确定变换关系,重组直方图
H=zeros(1,256);
H(1)=S2(1);
for i=2:256
if T(i-1)>0
for k=(T(i-1)+1):T(i)
H(i)=H(i)+B(k);
end
else H(i)=0;
end
end
figure,bar(0:255,H,'g') %显示规定化后的直方图
title('规定化后的直方图')
xlabel('灰度值')
ylabel('出现概率')
axis([0,260,0,0.6])
%显示规定图
PA=A; %将各个像素归一化后的灰度值赋给这个像素
for i=1:m
for j=1:n
for k=2:256
if T(k-1)<=A(i,j)&A(i,j)<=T(k)
PA(i,j)=k;
break;
end
end
end
end
figure,imshow(PA)
%显示规定化后的图像
title('规定化后图像')
imwrite(PA,'guidinghua.bmp');。