VC++实现图像处理_第1页
VC++实现图像处理_第2页
VC++实现图像处理_第3页
VC++实现图像处理_第4页
VC++实现图像处理_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、对于一个图像处理系统来说,可以将流程分为三个阶段,在获取原始图像后,首先是图像预处理阶段、 第二是待征抽取阶段、第三是识别分析阶段。图像预处理阶段尤为重要,如果这阶段处理不好,后面的工 作根本无法展开。 在实际应用中,我们的系统获取的原始图像不是完美的,例如对于系统获取的原始图像,由于噪声、 光照等原因,图像的质量不高,所以需要进行预处理,以有利于提取我们感兴趣的信息。图像的预处理包 括图像增强、平滑滤波、锐化等容。图像的预处理既可以在空问域实现,也可以在频域实现,我们主要介 绍在空问域对图像进行点运算,它是一种既简单又重要的图像处理技术,它能让卿户改变图像上像素点的 灰度值,这样通过点运算处

2、理将产生一幅新图像。下面我们开始介绍与图像点运算的相关知识。 一、图嫁的直方图 图像克方图是图像处理中一种十分重要的图像分析工具,它描述了一幅图像的灰度级容,任何一幅图 像的直方图都包含了丰富的信息,它主要用在图象分割,图像灰度交换等处理过程中。从数学上来说图像 直方图是图像各灰度值统计特性与图像灰度值的函数,它统计一幅图像中各个灰度级出现的次数或概率: 从图形上来说,它是一个二维图,横坐标表示图像中各个像素点的灰度级,纵坐标为各个灰度级上图像各 个像素点出现的次数或低率。如果不特别说明,本讲座中的直方图的纵坐标都对应着该灰度级在图像中出 现的低率。我们的例子是在一个对话框中显示一个图像的直方

3、图,为实现该目的,我们定义了一个名为UFT” 的对话框类用来显示图像的直方图,具体实现代码和效果图如下(关于代码实现部分可以参考笔者2001年 在天极网上发表的一篇VC实現数字图像处理的文章): /直方图对话框构造函数; ZFT:ZFT(CWnd* pParent /*=NULL*/) :CDialog(ZFT:IDD. pParent)/ZFT为定义的用来显示直方图的对话框类; Width-Heights;/对话框初始化阶段设置图像的宽和高为”0J /对话框重画函数: void ZFT:0nPaint0 CRect rect;/矩形区域对象: CWnd *pWnd;/得到图片框的窗口指针:

4、pWnd-GetD1 g11em(IDC.Graphic) ; /得到 ZFT 对话框的rrame*控件的指针; f i le:/ ( IDC_Graphic为放置在对话框上的一个Picture*控件;并讲类型设置为eFramew) pWnd-GetCl ientRect (fcrect);/得到 eFramew控件窗 口的视区域; int i; CPaintDC de(pWnd);/得到”Frame”控件的设备上下文; file:/画直方图的x、y轴; de. MoveTo(0,rect. Height(); de. LineTo(rect. WidthO rect. Height ();

5、de. MoveTo(0.rect. HeightO); de.LineTo(0,0); file:/画直方图,mim是”ZFT”的部数组变量,存放的是图像各个灰度级出现的概率:该数组的各个分 量在显示具体图像的直方图时设置; for(i-0;iGetWindowRect ( BITMAPINFOHEADER *lpDIBHdr; /位图信息头结构指针; BYTE lpDIBBits;/指向位图像素灰度值的指针: 1 pDIBHdr= ( BITMAPINFOHEADER jGlobalLockChdib) ;/得到图像的位图头信息 lpDIBBits-(BYTE*)lpDIBHdr+size

6、of(BITMAPINFOHEADER)+256*sizeof(RGBQUAD); file:/获取图像像素值 ZFT dialog;/直方图对话框模板对象: int i.j; int wImgWidth-lpDIBHdr-biWidth; int wlmgHeight-1pD1BHdr-biHeight; file:/a数组用来存放各个灰度级出现的低率: float a256; for(i-0;i256; i卄)/初始化数组: ai二0; file:/统计各个灰度级出现的次数: for(i=0;i for(j=0;j a*(lpDIBBits+WIDTHBYTES(wlmgWidth*8)*

7、i+j)+; file:/统计各个灰度级出现的概率: for(i=0;i256;i+) a i =a i / (wlmgHe igh twImgWi dth) ; /得到每个灰度级的出现抚率; memepy(dialog, num.a.256*sizeof(float); dialog. DoModal ();/显示直方图对话框: return; (a) LENA 图像 (b)直方图 上图为LENA的原始图像利其对应的直方图,在(b)图中的135表示当前鼠标在直方图中所指的位置 对应的灰度级为1350从该直方图可以看出,LENA图像的灰度主要分布在中高灰度级上,在低灰度级上图 像的像素数几乎为

8、零。 二、图仗增强 彩响系统图像清晰程度的因素很多,例如室外光照度不够均匀就会遗成图像灰度过于集中:由CCD (摄 像头)获得的图像经过A/D (数/模转换,该功能在图像系统中由数字釆集卡来实现)無换、线路传送都会 产生噪声污染等等。因此图像质量不可避免的降低了,轻者表现为图像不干净,难于看清细节:重者表现 为图像模糊不清,连槪貌也看不出来。因此,在对图像进行分析之前,必须要对图像质量进行改善,一般 情况下改善的方法有两类:图像増强和图像复原。图像増强不考虑图像质量下降的原因,只将图像中感兴 趣的特征有选择的突出,而衰减不需要的待征它的目的主要是提高图像的可懂度。图像增强的方法分为 空域法和蘋

9、域法两类,空域法主要是对图像中的各个像素点进行操作:而频域法是在图像的某个变换域, 对图像进行操作.修改变换后的系数,例如付立叶变换、DCT变换等的系数,然后再进行及变换得到处理 后的图像。图像复原技术与增强技术不同,它需要了解图像质量下降的原因,首先要建立”降质模型”,再 利用该模型,恢复原始图像。本期讲座我们主要介绍各种増强技术在图象处理系统中的实际应用。 1. 灰度变换 简单的说,灰度变换就是指对图像上各个像素点的灰度值X按某个函数TO变换到y例如为了提高 图像的清晰度,需要将图像的灰度级整个围或其中某一段(A, B扩展或压缩到(A, B*):曙要显示出 图像的细节部分等都要求釆用灰度变

10、换方法。灰度变涣有时又被称为图像的对比度增强或对比度拉伸。假 定输入图像中的一个像素的灰度绞为Z,经过T(Z)函數变换后输出图像对应的灰度级为乙,其中要求Z 和乙梆要在图像的灰度国之。根据T()形式.可以将灰度变换分为线性变换和非线性变换。具体应用中 釆用何种T(),需要根据变涣的要求而定。 对于图像的灰度变换,我们这里介绍一种梢徹复杂一点的方法,既直方图均衡化。直方图均衡化是灰 度变换的一个重要应用,广泛应用在图像增强处理中,它是以累计分布函数变换为基础的直方图修正法, 可以产生一幅灰度级分布具有均匀概率密度的图像,扩展了像素的取值动态围。若像素点的原灰度为R, 变涣后的灰度为S,需要注意的

11、是R、S是归一化后的灰度值,其灰度变换函数T()为: 比七 - T(R) - V(/? ) - V ST (R): 0 GetHDIB(); BITMAPINFOHEADER *lpDIBHdr; /位图信息头结构指针: BYTE lpDIBBits;/指向位图像素灰度值的指针: 1 pDIBHdr= ( BITMAPINFOHEADER )GlobalLock(hdib) ;/得到图像的位图头信息 lpDIBBits二(BYTE*)lpDIBHdr+sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD): file:/获取图像像素值 float p256,p

12、l256,num256; int i.j,k; for(i=0;ibiHeight; int Width=lpDIBHdr-biWidth; for (i=0;i for(j=30;j num*(lpDIBBits+WIDTHBYTES(Width*8)*i+j)+; file:/p存放图像各个灰度级的出现概率; for(i=0;i256;i+) pi=numi/(Wi dth*Hei ght); file:/pl存放各个灰度级之前的概率和,用于直方图变换; for(i=0;i256;i+) for(k-0;kbiWidth,lpDlBHdr-biHeight.0.0. 1PDIBHdr-b

13、i W i d th J pDIBHd r-b i He i gh t, lpDIBBits. (LPBlTMAPINFO)lpDIBIIdr. DIB_RGB_COLORS. SRCCOPY);/显示图像; (a) LENA 原图 GetHDIB(); BeginWai tCursor(): lpBi=(LPB I TMAP INFOHEADER) Global Lock (IIGLOBAL) hdib); hData-(unsigned char*)FindDIBBits(LPSTR)lpBi); pDoc-SetModifiedFlag仃RUE); datalhandle-GlobalA

14、lloc(GMEM_SHARE.WIDTHBYTES(lpBi-biWidth*8)*lpBi-biHeight); data-(unsigned char*)G1 oba 1 Lock(IIGI-OB.AL)data 1 hand 1 e); AfxGetApp()-Bcgi nWaitCursor(); int i.j.s.t.ms=l; int sum-0sumw-0; int mask33=(lj J.(L2J. (l.l.D);/ 定义的 3x3 加权平滑模板: for(i=0; ibiHeight; i+) for(j=0; jbiWidth; j-H-) sumw-0; sum-

15、0; for(s=(-ms); s=ms; s+) for(t=(-ms) ; t=O)/获取当前设备上下文的句柄: SetStretchBltMode(hDC.COLORONCOLOR); CDibDoc *pDoc二GetDocument(); HDIB hdib; hdib二pDoc-GetHDIB(); BITMAPINFOHEADER lpDIBHdr;/位图信息头结构指针: BYTE lpDIBBits;/指向位图像素灰度值的指针; lpDIBHdr= ( B1 TMAPINFOHEADER *)GlobalLock(hdib);/得到图像的位图头信息 lpDIBBits= (BY

16、TE*) 1 pDIBHdr+sizeof (BITMAPINFOHEADER) +256羽izeof (RGBQUAD);/获取图像像素值 BYTE* pDatal; static int a33 = l4.1.4-204.l4l;/拉普拉斯算子模板; int m.n.ijsum; int Width=lpDIBHdr-biWidth; int Height=lpDIBHdr-billeight; pDatal-(BYTE*)new charW 1DTHBYTES(Widths)Height; file:/进行拉普拉斯滤波运算: for(i=l;i for(j=l;j sum-O; for(

17、m=-l;m2;m+) for(n=-l;n 1+n; i f(sum255) sum-255; *(pDatal+WI DTHBYTES (Widths) *i +j) =sum ; file:/原始图像pData减去拉普拉斯滤波处理后的图像pDatal for(i=0;i for(j=0;j sum-(int) (lpDIBBits+WIDTHBYTES(Width*8)*i+j)-4*(*(pDatal+WIDTHBYTES(Width*8)*i+j); i f(sum255) sum-255; (lpDIBBits+WIDTHBYTES(Width*8)*i+j)=sum; StretchDI

温馨提示

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

评论

0/150

提交评论