数字图象处理课程设计.doc

上传人:小飞机 文档编号:2773886 上传时间:2023-02-24 格式:DOC 页数:10 大小:1.01MB
返回 下载 相关 举报
数字图象处理课程设计.doc_第1页
第1页 / 共10页
数字图象处理课程设计.doc_第2页
第2页 / 共10页
数字图象处理课程设计.doc_第3页
第3页 / 共10页
数字图象处理课程设计.doc_第4页
第4页 / 共10页
数字图象处理课程设计.doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《数字图象处理课程设计.doc》由会员分享,可在线阅读,更多相关《数字图象处理课程设计.doc(10页珍藏版)》请在三一办公上搜索。

1、精选优质文档-倾情为你奉上课 程 设 计 课程名称_ 数字图像处理课程设计_ 题目名称 一个简单的“photoshop”软件 学生学院 信息工程学院 专业班级 电子信息工程 学 号 学生姓名 指导老师 2014年 1 月 3 日一、课程设计题目 设计内容及要求:1、独立设计方案,实现对图像的3种处理。2、利用VC实现软件框架:有操作菜单、能显示某项操作前后的图像。3、查找相关算法,至少实现3种功能,比如:灰度增强、直方图显示、浮雕等等(底片化、二值化及平滑等实验内容不计算在内)。4、将实验结果与其他软件实现的效果进行比较、分析。总结设计过程所遇到的问题。二、课程设计目的 数字图像处理,就是用数

2、字计算机及其他有关数字技术,对图像进行处理,以达到预期的目的。随着计算机的发展,图像处理技术在许多领域得到了广泛应用,数字图像处理已成为电子信息、通信、计算机、自动化、信号处理等专业的重要课程。数字图像处理课程设计是在完成数字图像处理的相关理论的学习后,进行的综合性训练课程,其目的主要包括:1、使学生进一步巩固数字图像处理的基本概念、理论、分析方法和实现方法;2、增强学生应用VC编写数字图像处理的应用程序及分析、解决实际问题的能力;3、尝试将所学的内容解决实际工程问题,培养学生的工程实践能力,提高工科学生的就业能力。三、设计内容1、直方图显示 直方图显示就是统计图像某一灰度级出现的次数,保存到

3、一个数组中。然后在一个直方图上画图显示出来。2、直方图均衡化直方图就是某一灰度级的象素个数占整幅图像的象素比 h=nj/N,其中nj是灰度级在j的象素数,N是总象素数,扫描整幅图像得出的h的离散序列就是图像的直方图,h求和必然1,所以直方图可以看成是象素对于灰度的概率分布函数。直方图均衡化算法分为三个步骤,第一步是统计直方图每个灰度级出现的次数,第二步是累计归一化的直方图,第三步是计算新的像素值。对于彩色的图片来说,直方图均衡化一般不能直接对R、G、B三个分量分别进行上述的操作,而要将RGB转换成HSV来对V分量进行直方图均衡化的操作。3、浮雕效果浮雕效果就是将图像的变化部分突出显示,颜色相同

4、部分淡化处理,使图像出现浮雕效果。实现图像浮雕效果的一般原理是,将图像上每个像素点与其对角线的像素点形成差值,使相似颜色值淡化,不同颜色值突出,从而产生纵深感,达到浮雕的效果,具体的做法是用处于对角线的2个像素值相减,再加上一个背景常数,一般为128而成。这样颜色变化大的地方色彩就明显,颜色变化小的地方因为差值几乎为零则成黑色。4、均值滤波 图像平滑主要是为了消除噪声。噪声并不限于人眼所能看的见的失真和变形,有些噪声只有在进行图像处理时才可以发现。图像的常见噪声主要有加性噪声、乘性噪声和量化噪声等。图像中的噪声往往和信号交织在一起,尤其是乘性噪声,如果平滑不当,就会使图像本身的细节如边界轮廓、

5、线条等变的模糊不清,如何既平滑掉噪声有尽量保持图像细节,是图像平滑主要研究的任务。这次实验采用的均值滤波,原理是采用一个3*3的模板通过这个模板的移动,进行均值滤波。图像平滑主要是为了消除噪声。噪声并不限于人眼所能看的见的失真和变形,有些噪声只有在进行图像处理时才可以发现。图像的常见噪声主要有加性噪声、乘性噪声和量化噪声等。图像中的噪声往往和信号交织在一起,尤其是乘性噪声,如果平滑不当,就会使图像本身的细节如边界轮廓、线条等变的模糊不清,如何既平滑掉噪声有尽量保持图像细节,是图像平滑主要研究的任务。一般来说,图像的能量主要集中在其低频部分,噪声所在的频段主要在高频段,同时系统中所要提取的汽车边

6、缘信息也主要集中在其高频部分,因此,如何去掉高频干扰又同时保持边缘信息,是我们研究的内容。为了去除噪声,有必要对图像进行平滑,可以采用低通滤波的方法去除高频干扰。四、实验主要代码1、变量说明 CDIB m_dib; /CDIB类 bool m_bHist; /表示是否进行直方图统计int m_hist256; /直方图数组 BYTE *m_pdata; /位图的灰度信息bool m_bLoaded; /表示是否加载了位图 BITMAPINFO * m_pBMI; /位图信息头BYTE* m_pDIBData; /位图象素数据指针 BYTE* m_pDumpDIBData; /位图象素数据指针B

7、ITMAPFILEHEADER bfh; /位图信息头BITMAPINFOHEADER bih; / 位图文件头2、函数说明2.1加载位图 bool CDIB:LoadFromFile(LPCTSTR lpszFileName)参数:lpszFileName表示加载的位图路径和名称。如:d:test123.bmp返回值:成功读取后,返回true,否则为false2.2 获取图像宽度高度int CDIB: GetDIBWidth() 和int CDIB:GetDIBHeight()2.3显示位图void CDIB:ShowDIB(CDC *pDC, int nLeft, int nTop, in

8、t nRight, int nBottom, BYTE *pDIBData,BITMAPINFO* pBMI)参数:pDC /DC的句柄nLeft, /目标矩形左上角的X坐标nTop, /目标矩形左上角的Y坐标nRight, /目标矩形的宽度nBottom, /目标矩形的高度0, /源矩形左上角的X坐标0, /源矩形左上角的Y坐标GetDIBWidth(), /源矩形的宽度GetDIBHeight(), /源矩形的高度pDIBData, /位图图象数据的地址 pBMI, /位图信息结构地址2.4 刷新显示InvalidateData()功能:将m_pdata 的信息赋值给m_pDIBData,

9、便于显示m_pdata的信息。3、图像操作主要代码及分析3.1直方图显示void CImageProView:OnHistogram() /直方图显示if(m_dib.m_bLoaded!=true)AfxMessageBox(要处理的图像文件没打开);return;int i,j;BYTE* pdata=m_dib.m_pdata;int nh=m_dib.GetDIBHeight();int nw=m_dib.GetDIBWidth();for(i=0;i256;i+) /初始化直方图数组m_histi=0;if( m_dib.m_nImType=24)for(j=0;jnh;j+)for

10、(i=0;inw;i+) /统计直方图每个灰度级出现的次数BYTE temp=pdataj*nw+i;m_histtemp+;m_bHist=true; /画图Invalidate(1);实验效果截图如下:3.2直方图均衡化void CImageProView:OnEqualization() /直方图均衡化int i,j,k,max=0,min=0; int nw=m_dib.GetDIBWidth();int nh=m_dib.GetDIBHeight();int n256=0;/ni灰度值为i的像素的个数float p256=0.0;/pi灰度为i的像素个数的归一化float c256=

11、0.0;/ci灰度为i的像素个数的累积归一化for(i=0;inh;i+)/统计直方图每个灰度级出现的次数for(j=0;jnw;j+)k=m_dib.m_pdatai*nw+j;nk+;for(i=0;i256;i+)/归一化直方图pi=(float)ni/(nw*nh);for(i=0;i256;i+)/累积归一化直方图for(j=0;j=i;j+)ci+=pj; for(i=0;inh;i+)/找出像素的最大值和最小值for(j=0;jnw;j+)if(max=m_dib.m_pdatai*nw+j)min=m_dib.m_pdatai*nw+j;for(i=0;inh;i+)/直方图均

12、衡化for(j=0;jnw;j+)m_dib.m_pdatai*nw+j=cm_dib.m_pdatai*nw+j*(max-min)+min+0.5;m_dib.UpdateData();/将修改的m_pdata的数据赋值给m_pDIBData,显示修改的结果Invalidate();/刷新屏幕实验效果截图如下:左图是处理过后的图像,右图是原图3.3浮雕效果 void CImageProView:OnRelievo() /浮雕效果 int i,j; int nw=m_dib.GetDIBWidth(); int nh=m_dib.GetDIBHeight(); if (!m_dib.m_bL

13、oaded) MessageBox(_T(你还没有打开一个要保存的图像文件!); return; for(i=0;i=0;j-) m_dib.m_pdatai*nw+j-=m_dib.m_pdata(i+1)*nw+j-1+128; m_dib.UpdateData();/将修改的m_pdata的数据赋值给m_pDIBData,显示修改的结果Invalidate();/刷新屏幕实验效果截图如下:左图是处理过后的图像,右图是原图 3.4均值滤波void CImageProView:OnSmoth() /均值滤波;if(m_dib.m_bLoaded!=true)AfxMessageBox(要处理

14、的图像文件没打开);return;int i,j;BYTE* pdata=m_dib.m_pdata;int nh=m_dib.GetDIBHeight();int nw=m_dib.GetDIBWidth();if( m_dib.m_nImType=24) /目前仅仅对24位bmp图进行Mask dlg;int ret=dlg.DoModal();if(ret=IDOK) /从对话框中获取相关的模板运算的信息int* mask=dlg.mask; /模板指针int mask_width=dlg.m_width; / 模板大小float mask_coef=dlg.m_coef; /模板的系数

15、int wid=(mask_width-1)/2; /计算运算的边界BYTE* temp=new BYTEnh*nw; /开辟临时内存memcpy(temp,m_dib.m_pdata,nh*nw);for(j=wid;jnh-wid;j+) /rowfor(i=wid;inw-wid;i+) /colint amount=0;for(int k=-wid;k=wid;k+)for(int l=-wid;l=wid;l+)amount+=temp(j+k)*nw+i+l*mask(k+wid)*mask_width+l+wid;amount=int(amount*mask_coef);if(a

16、mount255)amount=255;pdataj*nw+i=BYTE(amount);m_dib.InvalidateData();delete temp;Invalidate(1);实验效果截图如下:右图是处理过后的图像,左图是原图五、设计心得体会通过这次数字图像处理课程设计,本人在多方面都有所提高。通过这次课程设计,综合运用本专业所学课程的理论。在图像处理过程中,使用相对应的方法去获得自己需要的效果,在这次设计过程中,体现出自己的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。首先加深了我对于数字图像处理这门课

17、程的认识,通过对相关知识的进一步了解和掌握,清楚的认识到这门课程在实际应用的广泛性。同时也感到图像处理这门技术的深奥和奥妙,但是自己理论知识极其缺乏,要想自己想算法就不可能了,所以这方面有待努力加强学习。这次课程设计不仅将光电图像处理课程的知识进行了实际运用,对MFC编程进一步的了解和熟悉,还对C+语言的应用起了促进作用,通过C+编程的过程之中,进一步掌握了C+的使用。让我感觉到使用知识和学习知识都是非常快乐的事。另外,我希望通过对C+语言编程进步,来促进数字图像处理的应用,使我的程序能够是想更多的数字图像处理的功能,同时也是程序的界面更接近于我们所希望的形式。也明白了这个软件作为许多应用方向工具的强大之处,通过对一些小错误的改造还认识到了以往自己没有注意到的一些小的细节问题。六、参考文献数字图像处理第三版-阮秋琦鸡啄米的VS2010/MFC编程入门教程VC+数字图像处理博客专心-专注-专业

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号