




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、图像处理-Visual C+实现数字图像增强处理Visual C+实现数字图像增强处理、八 刖言后面的工作根本无法展开。对于一个图像处理系统来说,可以将流程分为三个阶段,在获取原始图像后,首先是图像预处理阶段、第二是 特征抽取阶段、第三是识别分析阶段。 图像预处理阶段尤为重要,如果这阶段处理不好,在实际应用中,我们的系统获取的原始图像不是完美的,例如对于系统获取的原始图像,由于噪声、光照等原 因,图像的质量不高,所以需要进行预处理,以有利于提取我们感兴趣的信息。图像的预处理包括图像增强、平滑 滤波、锐化等内容。图像的预处理既可以在空间域实现,也可以在频域内实现,我们主要介绍在空间域内对图像进
2、行点运算,它是一种既简单又重要的图像处理技术,它能让用户改变图像上像素点的灰度值,这样通过点运算处理 将产生一幅新图像。下面我们开始介绍与图像点运算的相关知识。、图像的直方图图像直方图是图像处理中一种十分重要的图像分析工具,它描述了一幅图像的灰度级内容,任何一幅图像的直 方图都包含了丰富的信息,它主要用在图象分割,图像灰度变换等处理过程中。从数学上来说图像直方图是图像各 灰度值统计特性与图像灰度值的函数,它统计一幅图像中各个灰度级出现的次数或概率;从图形上来说,它是一个 二维图,横坐标表示图像中各个像素点的灰度级,纵坐标为各个灰度级上图像各个像素点出现的次数或概率。如果 不特别说明,本讲座中的
3、直方图的纵坐标都对应着该灰度级在图像中出现的概率。我们的例子是在一个对话框中显 示一个图像的直方图,为实现该目的,我们定义了一个名为ZFT的对话框类用来显示图像的直方图,具体实现代码和效果图如下(关于代码实现部分可以参考笔者2001年在天极网上发表的一篇 VC实现数字图像处理的文章)/ 直方图对话框构造函数;ZFT:ZFT(CWnd* pParent /*=NULL*/):CDialog(ZFT:IDD, pP are nt)/ZFT为定义的用来显示直方图的对话框类;Width=Height=O;/对话框初始化阶段设置图像的宽和高为0;/ 对话框重画函数;void ZFT:O nP ai nt
4、()CRect rect;/矩形区域对象;CWnd *pWnd;/得到图片框的窗口指针;pWnd=GetDlgltem(IDC_Graphic);/ 得到 ZFT 对话框内的Frame控件的指针;file:/ (IDC_Graphic为放置在对话框上的一个Picture控件,并讲类型设置为Frame)。PWnd-GetClientRect(&rect);/ 得到Frame控件窗口的”视区域;int i;CPaintDC dc(pWnd);/得到Frame控件的设备上下文;file:/画直方图的 x、y轴;dc.MoveTo(0,rect.Height();dc.Li neTo(rect.Wid
5、th(),rect.Height();dc.MoveTo(0,rect.Height();dc.Li neTo(0,0);file:/画直方图,num是ZFT的内部数组变量,存放的是图像各个灰度级出现的概率;该数组的各个分量在 显示具体图像的直方图时设置;for(i=0;iGetWindowRect(&rect);/ 获取 pWnd 窗口对象窗口区域位置;file:/屏幕坐标转换为客户区坐标;Scree nToClie nt(&rect);file:/判断当前鼠标是否指在直方图内;if(rect. PtI nRect (poi nt)int x=p oi nt1.x-rect .left;fi
6、le:/当前鼠标位置减去区域的起始位置恰好为当前鼠标所指位置所表示的灰度级;stri ng.Format(%d,x);file:/显示当前位置对应的图像的灰度级;P WndText-SetWi ndowText(L PCTSTR)stri ng);CDialog:O nM ouseMove( nFlags, point);/void CDibView:O nl magehorgm()file:/在程序的视类对象内处理显示图像直方图的函数;CDibDoc *p Doc=GetDocume nt();HDIB hdib;hdib=pDoc-GetHDIB();BITMA PINF OHEADER
7、*lp DIBHdr;/位图信息头结构指针;BYTE *lp DIBBits;/指向位图像素灰度值的指针;Ip DIBHdr=( BITMA PINF OHEADER *)GlobalLock(hdib);/得到图像的位图头信息Ip DIBBits=(BYTE*)l pDIBHdr+sizeof(BITMA PINF OHEADER)+256*sizeof(RGBQUAD); file:/获取图像像素值ZFT dialog;/直方图对话框模板对象;int i,j;int wlmgWidth=l pDIBHdr-biWidth;int wImgHeight=l pDIBHdr-biHeight;
8、file:/a数组用来存放各个灰度级出现的概率;float a256;for(i=0;i256;i+)/ 初始化数组;ai=0;file:/统计各个灰度级出现的次数;for(i=0;i for(j=0;j a*(l pDIBBits+WIDTHBYTES(wlmgWidth*8)*i+j)+;file:/统计各个灰度级出现的概率;for(i=0;iGetHDIB();BITMA PINF OHEADER *lp DIBHdr;/位图信息头结构指针;BYTE *lp DIBBits;/指向位图像素灰度值的指针;lp DIBHdr=( BITMA PINF OHEADER *)GlobalLock
9、(hdib);/得到图像的位图头信息lp DIBBits=(BYTE*)l pDIBHdr+sizeof(BITMA PINFOHEADER)+256*sizeof(RGBQUAD); file:/获取图像像素值float p256, p1256, nu m256;int i,j,k;for(i=0;ibiHeight;int Width=l pDIBHdr-biWidth;for(i=0;i for(j=30;j nu m*(l pDIBBits+WIDTHBYTES(Width*8)*i+j)+;file:/p存放图像各个灰度级的出现概率;for(i=0;i256;i+)pi=numi/(
10、Width*Height);file:/p1存放各个灰度级之前的概率和,用于直方图变换;for(i=0;i256;i+)for(k=0;kbiWidth,l pDIBHdr-biHeight,0,0,lp DIBHdr-biWidth,l pDIBHdr-biHeight,lp DIBBits,(L PBITMA PINFO)I pDIBHdr,DIB_RGB_COLORS,SRCCOPY);/显示图像;4 :1|(a)LENA 原图*(b)直方图均衡化后的效果图It(c)原始图象的直方图(d)均衡化后的直方他图LENA的图像从上述效果图可以看出,经过直方图均衡化处理后,图像变的清晰了,从直方
11、图来看,处理后的 直方图分布更均匀了,在每个灰度级上图像都有像素点。但是直方图均衡化存在着两个缺点:1)变换后图像的灰度级减少,某些细节消失;2)某些图像,如直方图有高峰,经处理后对比度不自然的过分增强。为此M.Kamel和Lian Guan等人从图像相邻像素一般高度相关这一事实出发,将灰度概率分布和空间相关性联系在一起,提出了用二维条件概率密度函数取代一维概率密度函数作为均衡化条件,很好的解决了这个问题,有兴 趣的朋友可以参阅一些图像处理书籍和资料。2 .图像平滑图像平滑主要是为了消除噪声。噪声并不限于人眼所能看的见的失真和变形,有些噪声只有在进行图像处理时 才可以发现。图像的常见噪声主要有
12、加性噪声、乘性噪声和量化噪声等。图像中的噪声往往和信号交织在一起,尤 其是乘性噪声,如果平滑不当,就会使图像本身的细节如边界轮廓、线条等变的模糊不清,如何既平滑掉噪声有尽 量保持图像细节,是图像平滑主要研究的任务。一般来说,图像的能量主要集中在其低频部分,噪声所在的频段主要在高频段,同时系统中所要提取的汽车边 缘信息也主要集中在其高频部分,因此,如何去掉高频干扰又同时保持边缘信息,是我们研究的内容。为了去除噪 声,有必要对图像进行平滑,可以采用低通滤波的方法去除高频干扰。图像平滑包括空域法和频域法两大类,在空域法中,图像平滑的常用方法是采用均值滤波或中值滤波,对于均值滤波,它是用一个有奇数点的
13、滑动窗口在图像 上滑动,将窗口中心点对应的图像像素点的灰度值用窗口内的各个点的灰度值的平均值代替,如果滑动窗口规定了 在取均值过程中窗口各个像素点所占的权重,也就是各个像素点的系数,这时候就称为加权均值滤波;对于中值滤 波,对应的像素点的灰度值用窗口内的中间值代替。实现均值或中值滤波时, 为了简便编程工作,可以定义一个n*n的模板数组。另外,读者需要注意一点,在用窗口扫描图像过程中,对于图像的四个边缘的像素点,可以不处理; 也可以用灰度值为0的像素点扩展图像的边缘。下面给出了采用加权均值滤波的图像平滑函数代码和效果图:void CDibView:O nimage Ph()CClie ntDC
14、p DC(this);HDC hDC=pDC.GetSafeHdcO;/获取当前设备上下文的句柄;SetStretchBltMode(hDC,COLORONCOLOR);HANDLE data1ha ndle;LP BITMA PINF OHEADER lp Bi;CDibDoc *p Doc=GetDocume nt();HDIB hdib;un sig ned char *hData;un sig ned char *data;hdib=pDoc-GetHDIB();Begi nWaitCursor();lp Bi=(L PBITMA PINFOHEADER)GlobalLock(HGLO
15、BAL)hdib);hData=(u nsig ned char*)Fi ndDIBBits(L PSTR)I pBi);p Doc-SetModifiedFlag(TRUE);data1ha ndle=GlobalAlloc(GMEM_SHARE,WIDTHBYTES(l pBi-biWidth*8)*l pBi-biHeight);data=(u nsig ned char*)GlobalLock(HGLOBAL)data1ha ndle);AfxGetA pp( )-Begi nWaitCursor();int i,j,s,t,ms=1;int sum=0,sumw=0;int mask
16、33=1,1,1,1,2,1,1,1,1;/ 定义的 3x3 加权平滑模板;for(i=0; ibiHeight; i+)for(j=0; jbiWidth; j+)sumw=0; sum=0;for(s=(-ms); s=0)&(j+t)=0)&(i+s)biHeight)&(j+t)biWidth)for(t=(-ms); tbiWidth*8)+(j+t)*mask1+s1+t;if(sumw=0) sumw=1;sum/=sumw;if(sum255)sum=255;if(sumbiWidth*8)+j)=sum;for( j=0; jbiHeight; j+)for(i=0;ibiW
17、idth;i+)*(hData+i*WIDTHBYTES(l pBi-biWidth*8)+j)=*(data+i*WIDTHBYTES(l pBi-biWidth*8)+j); StretchDIBits (hDC,0,0,l pBi-biWidth,l pBi-biHeight,0,0,lp Bi-biWidth,l pBi-biHeight,hData,(L PBITMA PINFO)I pBi,DIB_RGB_COLORS,SRCCOPY);/显示图像;(b)平滑后的效果图(a)LENA 原图图三它虽然去除了一定的噪声,但同时使图像中的边缘变的模糊, 其算法如图四所示:中值或均值平滑有
18、时处理图像的效果并不是很好, -? 1 -J 1h(b)I(a)(c)这主要和所选取的窗口大小有关,为此下面介绍了一种既能保持边缘清晰又能消除噪声的方法,图像平滑模板上图的含义是在图像中取5*5的区域,包含点(i,j)的五边形和六边形各四个,3*3的区域一个,计算这九个区域的标准差和灰度的平均值,取标准差最小区域的灰度平均值作为点(i,j)的灰度。由于该算法的实现代码和上述代码大同小异,所以代码部分就不再赘述。3 .图像锐化图像平滑往往使图像中的边界、轮廓变的模糊,为了减少这类不利效果的影响,这就需要利用图像鋭化技术, 使图像的边缘变的清晰。图像銳化处理的目的是为了使图像的边缘、轮廓线以及图像
19、的细节变的清晰,经过平滑的 图像变得模糊的根本原因是因为图像受到了平均或积分运算,因此可以对其进行逆运算(如微分运算)就可以使图像变的清晰。从频率域来考虑,图像模糊的实质是因为其高频分量被衰减,因此可以用高通滤波器来使图像清晰。为了要把图像中间任何方向伸展的的边缘和轮廓线变得清晰,我们希望对图像的某种运算是各向同性的。可以 证明偏导平方和的运算是各向同性的,既:涂 如 OA dy式中()是图像旋转前的坐标,(盂,)是图像旋转后的坐标。梯度运算就是在这个式子的基础上开方得 到的。图像(x,y)点的梯度值:为了突出物体的边缘, 常常采用梯度值的改进算法, 将图像各个点的梯度值与某一阈值作比较,如果
20、大于阈值,该像素点的灰度用梯度值表示,否则用一个固定的灰度值表示。我们在对图像增强的过程中,采用的是一种简单的高频滤波增强方法:區“)叫(劈 + (野 d -I /() -n 1妙 +1 /(兀 7)-Mm + 9 I式中f,g分别为锐化前后的图像,是与扩散效应有关的系数。V7表示对图像f进行二次微分的拉普拉可以用下面的汪选取2-8之间往斯算子。这表明不模糊的图像可以由模糊的图像减去乘上系数的模糊图像拉普拉斯算子来得到。模板H=1,4,1,4,-20,4,1,4,1来近似。在具体实现时,上述模板H中的各个系数可以改变,民弋 这 个系数的选择也很重要,太大了会使图像的轮廓过冲,太小了则图像锐化不
21、明显。实验表明,往可以达到比较满意的效果。下面给出等于4的情况下的实现代码和效果图:void CDibView:O nMen uitem32785()CClie ntDC p DC(this);HDC hDC=pDC.GetSafeHdcO;/获取当前设备上下文的句柄;SetStretchBltMode(hDC,COLORONCOLOR);CDibDoc *p Doc=GetDocume nt();HDIB hdib;hdib=pDoc-GetHDIB();BITMA PINF OHEADER *lp DIBHdr;/位图信息头结构指针;BYTE *lp DIBBits;/指向位图像素灰度值的
22、指针;Ip DIBHdr=(BITMA PINF OHEADER*)GlobalLock(hdib);/ 得 到 图 像 的 位 图 头Ip DIBBits=(BYTE*)l pDIBHdr+sizeof(BITMA PINFOHEADER)+256*sizeof(RGBQUAD);/获取图像像素值BYTE* p Data1;static int a33=1,4,1,4,-20,4,1,4,1;/拉普拉斯算子模板;int m,n, i,j,sum;int Width=l pDIBHdr-biWidth;int Height=l pDIBHdr-biHeight;p Data1=(BYTE* )
23、n ew charWIDTHBYTES(Width*8)*Height;file:/进行拉普拉斯滤波运算;for(i=1;i for(j=1;j sum=0;for(m=-1;m2;m+)for(n=-1; n2;n+) sum+=* (Ip DIBBits+WIDTHBYTES(Width*8)*(i+m)+j+n)*a1+m1+ n;if(sum255) sum=255;*(p Data1+WIDTHBYTES(Width*8)*i+j)=sum;file:/原始图像pData减去拉普拉斯滤波处理后的图像pData1for(j=0;jfor(i=0;i sum=(i nt)(* (Ip D
24、IBBits+WIDTHBYTES(Width*8)*i+j)-4*(*( pData1+WIDTHBYTES(Width*8)*i+j);if(sum255) sum=255;*(l pDIBBits+WIDTHBYTES(Width*8)*i+j)=sum;StretchDIBits (hDC,0,0,l pDIBHdr-biWidth,l pDIBHdr-biHeight,O,O,lp DIBHdr-biWidth,l pDIBHdr-biHeight,lp DIBBits,(L PBITMA PINFO)I pDIBHdr,DIB_RGB_COLORS,SRCC OPY);L(a) L
25、ENA 原图(b)拉普拉斯锐化图本文主要讲解了图像直方图的基本概念和图像点处理运算中的增强、平滑、锐化概念和实现算法,并给处理实 现代码和处理效果图和广大读者朋友们交流,希望达到抛砖引玉的作用。VC+实现对退化图像的恢复摘要:本文以VC+ 6.0为编程工具,讲述了采取逆滤波和维纳滤波两种图像恢复算法对退化图像的恢复实现过程。引言图像恢复技术是图像处理领域一类重要的处理技术,与图像增强等其他基本图像处理技术类似,该技术也是以 获取视觉质量得到某种程度改善为目的的,所不同的是图像恢复过程需要根据指定的图像退化模型来完成,根据这 个退化模型对在某种情况下退化或恶化了的退化图像进行恢复,以获取到原始的
26、、未经过退化的原始图像。换句话 说,图像恢复的处理过程实际是对退化图像品质的提升,并通过图像品质的提升来达到图像在视觉上的改善。本文 以VC+作为开发工具,讲述了对退化图像进行逆滤波和维纳滤波处理算法。逆滤波处理对图像进行恢复处理通常需要根据一定的图像退化模型来进行,一个简单的通用图像退化模型可将图像的退化过程模型化为一个作用在原始图像f(x,y)上的退化系统H,作用结果与一个加性噪声n(x,y)的联合作用导致产生出了退化图像g(x,y),表现为数学形式为g(x,y)=Hf(x,y)+n(x,y)。根据上述退化系统H可以从给定的退化图像g(x,y)得到原始图像f(x,y)的一个近似结果。逆滤波
27、处理就是其中一种无约束恢复的图像恢复技术,其恢复过程的数学形式可表示为 F (u,v)=G(u,v)/H(u,v) (u,v=0,1,-!)/)其中 F(u,v)和 G(u,v)分别为图像 f(x,y)和 g(x,y)的频域变换,H(u,v)可看作是一个滤波函数。由于图像在退化过程中存在噪声的干扰,因此通常情况下的滤波器往往不是正好的1/H(u,v),而是关于U和v的某个非线形的恢复转移函数M(u,v)。经过以上的分析,图像的退化和恢复过程(模型)大致可用下图来表示:1/H(u,v),否则为1。这样处理H(u,v)的值作为判据,如不二维的傅立叶变换较2次运用一维离散快速傅立叶变换的方法来实现,
28、即先沿f(x,y)的每一然后再将得到的F(x,v)沿f(x,v)的每一个v对x求变换即可一种简便的恢复方法是在选取恢复转移函数M(u,v)时,如果U2+V2W w2则取值虽然简单,但是恢复后的图像往往存在较明显的振铃现象,通常为了消除振铃现象,以 大于d(0由于恢复过程需要在频域进行,因此需要通过二维傅立叶变换将图像由空域变换到频域。 一维傅立叶变换要复杂的多,一般采取连续 个x对y求变换再乘以N得到F(x,v),完成第一步变换。 得到f(x,y)的最终变换F(u,v),这两步的数学表达式如下:yF(x,v)=N*(1/N)* H f(x,y)exp-j2 n vy/N (v=0,1,-1)
29、,NVF(u,v)=(1/N)* 芒 F(x,v)exp-j2 n ux/N (u,v=0,1,-1)- ,NVF(x,v)=二类似也可以得出二维离散傅立叶变换逆变换用一维变换计算的表达式:F(u,v)expj2n ux/N (x,y=0,1,-1),NV(x,y)=(1/N)* 肓 F(x,v)expj2 n vy/N (y=0,1,-1),N在分布进行一维傅立叶变换时,多采用”蝴蝶图”的快速算法(详见信号处理方面资料),其核心算法如下:int N=(int)pow(2,M); file:/N:序列长度(2 的整数次幕)ReverseOrder(A,N); file:/对空间序列进行倒序fo
30、r(i nt i=1;i=M;i+)int b=(i nt)po w(2,(i-1);for(i nt j=0;j=(b-1);j+) float p=(float)( pow(2,(M-i)*j*2.0* PI/(float)N);for(i nt k=j;k=(N-1);)float tr=(float)(Ak+b.Re*cos(p)+Ak+b.lm*sin(p); file:/计算复数运算 A*Ufloat ti=(float)(Ak+b.Im*cos( p)-Ak+b.Re*si n(p);Ak+b.Re=Ak.Re-tr; file:/复数运算 A-trAk+b.Im=Ak.Im-t
31、i;Ak.Re+=tr; file:/ 复数运算 A+trAk.Im+=ti;k+=b*2;傅立叶逆变换的同傅立叶变换比较相似,只是在计算expj2 n vy/N时同正变换有符号的区别,以及在计算完成后逆变换需要将值除以N,因此不难写出一维傅立叶逆变换的实现代码。在进行二维傅立叶变换将图像由空域变换到频域之前,首先需要通过补0的手段将点数非2的整数次幕的非正方型网格采样构造为一个长宽均为2的整数次幕的正方型网格:int WM=(int)(log(W)/log(2)+1.0f); file:/ 计算图像宽应为 2 的多少次幕 int HM=(int)(log(H)/log(2)+1.0f); f
32、ile:/ 计算图像高应为 2 的多少次幕WM=HM=max(WM,HM); file:/ int WN=(i nt)po w(2,WM); file:/ int HN=(i nt)po w(2,HM); file:/ fori nt i=0;i;for(i nt j=O;jUi*WN*3+j.lm=0.0f;else file:/ 缺位补 0 Ui*WN*3+j.Re=Ui*WN*3+j.lm=0.0f;取二者大值构造网格宽度构造网格高度if(iUi*WN*3+j.Re=Di*W*3+j; file:/D为图像序列预处理完毕后,可对构造网格的每一列分别进行一维快速傅立叶变换,并将结果存放在原
33、位置,结果乘以 完成第一步的转换,求得 F(x,v):for(i=0;ifor(i nt j=0;jUHj.Re=Uj*WN*3+i.Re;UHj.Im=Uj*WN*3+i.Im;DFT_FFT(UH,HM); file:/ 对UH进行快速离散傅立叶变换 for(j=0;j Uj*WN*3+i.Re=HN*UHj.Re; file:/N=HN Uj*WN*3+i.Im=HN*UHj.Im;随即对构造网格的每一行进行傅立叶变换,得到最终的变换结果F(u,v):for(i=0;ifor(int k=0;k0.45f) file:/ 阀值 d 取 0.45Ui*3*WN+j.Re/=H; file:/在频域与 M(u,v)相乘Ui*3*WN+j.lm/=H;elseUi*3*WN+j.Re*=0.6f; file:/如未超过阀值则 M(u,v)取常数 k=0.6Ui*3*WN+j.lm*=0.6f;ds p.DFT_2D_IFFT(m_cpBuffer+54,m_ nWidth,m_nHeight,U); file:/进行傅立叶逆变换这里的逆滤波处理算法采用的是经过改进的恢复转移函数M(u,v),因此恢复后的图像不会出现振铃现象。以标准检测图像Lina为处理对象应用以上恢复处理算法,效果如下图所示。其中间图像为未经过改进的简单算法,在胳膊和脸部存在较明显
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 专利代理人资格考试前瞻性题目与答案
- 图书管理员考试相关法律法规试题及答案
- 工程概预算试题及答案
- 了解考试大纲的2024年专利代理人试题及答案
- 消防安全试题培训及答案
- 母猪健康评价标准与实践应用试题及答案
- 2025年公共卫生医师考试的重点领域试题及答案
- 2024年文化产业管理证书预测题
- 专利标的与权利范围的确定方法试题及答案
- 2024年卫生管理证书申请流程试题及答案
- PDCA降低I类切口感染发生率
- 幼儿园《开关门要小心》
- 《运营管理》第2版题库与参考答案
- 基于PLC的自动配料系统毕业设计论文
- 企业事业单位突发环境事件应急预案备案表范本
- 烟花爆竹工程设计安全规范
- 回旋加速器的五个有关问题
- 四川省中学生学籍卡片
- 夕阳箫鼓-钢琴谱(共11页)
- 地面沉降监测技术要求
- 基本建设项目建设成本管理规定解读
评论
0/150
提交评论