基于直方图处理的图像的增强方法研究.docx_第1页
基于直方图处理的图像的增强方法研究.docx_第2页
基于直方图处理的图像的增强方法研究.docx_第3页
基于直方图处理的图像的增强方法研究.docx_第4页
基于直方图处理的图像的增强方法研究.docx_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于直方图处理的图像的增强方法研究 中文摘要通过直方图均衡算法,使输出图像直方图近似服从均匀分布,在此算法基础上利用小波变换,对图像进行二维小波分解,突出图像中的有用信息,消减图像中的无用信息,使图像中特定信息得倒增强,并提高图像的对比度,提高图像质量。直方图规定化是基于自适应直方图规定化函数引导的动态分层图像增强算法,在对比指纹图像的灰度直方图增强的技术的基础上,针对均衡化算法的不足和现有直方图规定化算法中映射规则计算量大的情形,提出一种改进的规定化算法。直方图规定化可以将图像的直方图转化为需要的形状,有目的地增加某个灰度区间的图像,使用户获得感兴趣的信息。关键词:图像增强,直方图均衡化,小波变换,直方图规定化Abstract Through the histogram equalization algorithm, make the output image histogram approximation obey uniform distribution. Based on the algorithm,using the imagine of the two dimensional wavelet decomposition, highlight the useful information and cut the useless information in the imagine. The imagine of a specific information will be enhanced, and the contrast of imagine will be improved , then the imagine quality will be improved.Key words: imagine enhancement; histogram equalization; wavelet transform一:引言图像变换是数字图像处理中的一种综合变换,如直方图变换。使用C语言对位图文件的头信息进行读取,从而对图像进行直方图均衡化处理和灰度变换。大多数原始的遥感图像由于其灰度分布集中在较窄的范围内,使图像的细节不够清晰,对比度较低。为了使图像的灰度范围拉开或使灰度均匀分布,从而增大反差,使图像细节清晰,以达到增强的目的,通常采用直方图均衡化及直方图规定化两种变换。二:原理与方法直方图均衡化(Histogram Equalization)又称直方图平坦化,实质上是对图像进行非线性拉伸,重新分配图像象元值,使一定灰度范围内象元值的数量大致相等。这样,原来直方图中间的峰顶部分对比度得到增强,而两侧的谷底部分对比度降低,输出图像的直方图是一个较平的分段直方图:如果输出数据分段值较小的话,会产生粗略分类的视觉效果。直方图均衡化理论假设灰度级为归一化至范围0,1内的连续量,并令Pr (r)表示某给定图像中的灰度级的概率密度函数(PDF),其下标用来区分输入图像和输出图像的PDF。假设我们对输入灰度级执行如下变换,得到(处理后的)输出灰度级s:S=T(r)=0r Pr(w)dw式中w 是积分的哑变量。可以看出,输出灰度级的概率密度函数是均匀的,即a.当0s1 时,Ps(s)=1b.当s 为其他时,Ps(s)=0换言之,前述变换生成一幅图像,该图像的灰度级较为均衡化,且覆盖了整个范围0,1。灰度级均衡化处理的最终结果是一幅扩展了动态范围的图像,它具有较高的对比度。该变换函数只不过是一个累积分布函数(CDF)。直方图均衡化算法直方图均衡化算法将原图像的直方图改变为在整个灰度范围内基本均匀地分布的形式,由此扩大了像素灰度的动态范围,从而增强了图像的对比度。直方图均衡化算法步骤为:1) 给出原始图像的所有灰度级(k=0,1,L-1)。2) 统计原始图像各灰度级的像素数。3) 根据原图像,计算灰度直方图: (k=0,1,L-1) 式中,为总像素数,为灰度级的像素数。4) 计算原始图像的累积直方图: (,k=0,1,L-1) 5) 取整计算: 6) 确定映射关系: 7) 统计新直方图各灰度级的像素数目。8) 计算新的直方图:可以用概率密度函数来表示一幅图象的灰度分布。其中,r为灰度值,的值为概率密度。实验要将原始图象R通过转换函数转换为具有规定概率密度函数最终增强图象G。设原图象的概率密度函数为。变换后的图象的概率密度函数=规定的概率密度函数。由随机变量函数的概率密度公式可以得到:设 , 则有 所求得的就是从原始图象到最终增强图象的转换函数。上述推导得到的的表达式适用于在灰度级和空间上都连续的图象。为达到数字图象处理的目的,必须对上述表达式进行近似,这种离散形式的近似可以导致图象灰度级的丢失。设图象有256灰度级,该近似方法如下:, 其中,为灰度值为r的像素总数,n为总像素数。r=1,2,255。的计算方法相同。在附录所给出的源代码中,转换函数由数组SG256实现。PSNR值,即峰值信噪比,可以作为衡量输出图象的客观保真度的标准。设图象有256灰度级,则它的计算公式如下:g(x,y)和f(x,y)分别代表处理后的图象和原始图象。显然,PSNR值越大,图象的保真度越高。整个过程的处理框图:读入原始图象计算原始图象的直方图存入H256并将数据输出计算原始图象的均衡直方图存入S256并将数据输出生成并保存均衡图象计算原始图象至均衡图象的PSNR值计算规定的直方图存入G256 计算规定的直方图的均衡直方图存入GS256并将数据输出计算从原始图象到最终增强图象的转换函数生成并保存最终增强图象计算最终增强图象的直方图GR256并将数据输出计算原始图象至最终增强图象的PSNR值三:仿真实验1 直方图均衡化实验过程及结果5、主要代码void CImageView:OnDraw(CDC* pDC)CImageDoc* 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 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;imax)max=m_yuantui;for(i=0;iMoveTo(10+i,nh+200);pDC-LineTo(10+i,nh+200-(m_yuantui*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 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;imax)max=m_histi;for(i=0;iMoveTo(415+i,nh+200);pDC-LineTo(415+i,nh+200-(m_histi*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 n256=0;float p256=0.0,c256=0.0;BYTE* pdata=m_dib.m_pdata;for(i=0;i256;i+) /初始化直方图数组m_yuantui=0;if(1)/m_dib.m_nImType=24)for(j=0;jnh;j+)for(i=0;inw;i+)BYTE temp=pdataj*nw+i;m_yuantutemp+;m_bHist=true;/直方图归一化计算for(i=0;inh;i+) for(j=0;jnw;j+) nm_dib.m_pdatai*nw+j+; for(i=0;i256;i+) (float)pi=(float)ni/(float)(nw*nh); /归一化后累计计算for(i=0;i256;i+) for(j=0;j=i;j+) ci+=pj; /找到灰度值最大值最小值int max=m_dib.m_pdata0,min=m_dib.m_pdata0; for(i=0;inh;i+) for(j=0;jnw;j+) if(maxm_dib.m_pdatai*nw+j) min=m_dib.m_pdatai*nw+j; /套公式直方图均衡化计算赋值给arr一维数组for(i=0;inh;i+) for(j=0;jnw;j+) arri*nw+j=int(cm_dib.m_pdatai*nw+j*(max-min)+min+0.5); /一维数组arr赋值给新图像for( j=0;jnh;j+)for(i=0;inw;i+)m_dib.m_pdataj*nw+i=arrj*nw+i;/将修改的m_pdata的数据赋值给m_pDIBData,以显示修改的结果m_dib.UpdateData();/刷新屏幕Invalidate();for(i=0;i256;i+) /初始化直方图数组m_histi=0;if(1)/m_dib.m_nImType=24)for(j=0;jnh;j+)for(i=0;inw;i+)BYTE temp=pdataj*nw+i;m_histtemp+;m_bHist=true;/ TODO: Add your command handler code here2 直方图规定化实验过程及结果原图象直方图H:直方图H的均衡直方图S:原始图象R均衡图象S PSNR=10.954935目标直方图G目标直方图G的均衡直方图最终增强图象G PSNR=11.947287最终增强图象直方图附录:源程序#include #include / MFC core and standard components#include / MFC extensions#include #ifndef HXLBMPFILE#define HXLBMPFILEclass BMPFILEpublic: RGBQUAD palette256; BITMAPFILEHEADER imagefh; BITMAPINFOHEADER imageih; int imagew,imageh; UCHAR *imagedata; UCHAR *GetByteatH(int height); BOOL AllocateMem(); BOOL bIsOk; void LoadBMPFILE(char *fname); void SaveBMPFILE(char *fname); BMPFILE();BMPFILE();#endifvoid main()BMPFILE bmpfile;bmpfile.LoadBMPFILE (实验图象1.bmp);if(!bmpfile.bIsOk) printf(Error loading image.n);return;/ do other processing with the imagedataint H256; /原始图象直方图memset(H,0,sizeof(H);int S256; /变换映射-均衡直方图Sdouble psnr; /峰值信噪比int i;int f;for(i=0;ibmpfile.imageh*bmpfile.imagew;i+)H*(bmpfile.imagedata+i)+;S0=H0;for(i=1;i256;i+)Si=Si-1+Hi;for(i=0;i256;i+)Si=Si*255/(bmpfile.imageh*bmpfile.imagew);for(i=0;ibmpfile.imageh*bmpfile.imagew;i+)*(bmpfile.imagedata+i)=S*(bmpfile.imagedata+i);/原图象的直方图Hprintf(H: );for(i=1;i256;i+)printf(%d ,Hi);printf(n);/原图象(直方图H)的均衡直方图printf(S: );for(i=1;i256;i+)printf(%d ,Si);printf(n);/均衡图象bmpfile.SaveBMPFILE (实验图象1-均衡图象.bmp);/PSNR值psnr=0;for(i=0;i255;i+)psnr+=(Si-i)*(Si-i)*Hi;psnr=10*log10(double(bmpfile.imageh)*bmpfile.imagew*255*255/psnr);printf(PSNR: %fn,psnr);/目标直方图G的均衡直方图int G256; /规定直方图int GS256; /规定直方图的均衡直方图for(i=0;i=127;i+)Gi=i;for(i=128;i=255;i+)Gi=(255-i);GS0=G0;for(i=1;i256;i+)GSi=GSi-1+Gi;f=GS255/255+1;for(i=0;i256;i+)GSi/=f;printf(GS: );for(i=1;i256;i+)printf(%d ,GSi);printf(n);/最终增强图象int i2;int minNumber;int SG256; /从原图象的均衡图

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论