数字图象处理课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计
课程名称___ 数字图像处理课程设计__
题目名称一个简单的“photoshop”软件
学生学院信息工程学院
专业班级电子信息工程
学号
学生姓名
指导老师
2014年 1 月 3 日
一、课程设计题目
设计内容及要求:
1、独立设计方案,实现对图像的3种处理。
2、利用VC++实现软件框架:有操作菜单、能显示某项操作前后的图像。
3、查找相关算法,至少实现3种功能,比如:灰度增强、直方图显示、浮雕等等(底片化、二值化及平滑等实验内容不计算在内)。
4、将实验结果与其他软件实现的效果进行比较、分析。总结设计过程所遇到的问题。
二、课程设计目的
数字图像处理,就是用数字计算机及其他有关数字技术,对图像进行处理,以达到预期的目的。随着计算机的发展,图像处理技术在许多领域得到了广泛应用,数字图像处理已成为电子信息、通信、计算机、自动化、信号处理等专业的重要课程。
数字图像处理课程设计是在完成数字图像处理的相关理论的学习后,进行的综合性训练课程,其目的主要包括:
1、使学生进一步巩固数字图像处理的基本概念、理论、分析方法和实现方法;
2、增强学生应用VC++编写数字图像处理的应用程序及分析、解决实际问题的能力;
3、尝试将所学的内容解决实际工程问题,培养学生的工程实践能力,提高工科学生的就业能力。
三、设计内容
1、直方图显示
直方图显示就是统计图像某一灰度级出现的次数,保存到一个数组中。然后在一个直方图上画图显示出来。
2、直方图均衡化
直方图就是某一灰度级的象素个数占整幅图像的象素比h=nj/N,其中nj是灰度级在j的象素数,N是总象素数,扫描整幅图像得出的h的离散序列就是图像的直方图,h求和必然=1,所以直方图可以看成是象素对于灰度的概率分布函数。直方图均衡化算法分为三个步骤,第一步是统计直方图每个灰度级出现的次数,第二步是累计归一化的直方图,第三步是计算新的像素值。对于彩色的图片来说,直方图均衡化一般不能直接对R、G、B三个分量分别进行上述的操作,而要将RGB转换成HSV来对V分量进行直方图均衡化的操作。3、浮雕效果
浮雕效果就是将图像的变化部分突出显示,颜色相同部分淡化处理,使图像出现浮雕效果。实现图像浮雕效果的一般原理是,将图像上每个像素点与其对角线的像素点形成差值,使相似颜色值淡化,不同颜色值突出,从而产生纵深感,达到浮雕的效果,具体的做法是用处于对角线的2个像素值相减,再加上一个背景常数,一般为128而成。这样颜色变化大的地方色彩就明显,颜色变化小的地方因为差值几乎为零则成黑色。
4、均值滤波
图像平滑主要是为了消除噪声。噪声并不限于人眼所能看的见的失真和变形,有些噪声只有在进行图像处理时才可以发现。图像的常见噪声主要有加性噪声、乘性噪声和量化噪声等。图像中的噪声往往和信号交织在一起,尤其是乘性噪声,如果平滑不当,就会使图像本身的细节如边界轮廓、线条等变的模糊不清,如何既平滑掉噪声有尽量保持图像细节,是图像平滑主要研究的任务。
这次实验采用的均值滤波,原理是采用一个3*3的模板
通过这个模板的移动,进行均值滤波。图像平滑主要是为了消除噪声。噪声并不限于人眼所能看的见的失真和变形,有些噪声只有在进行图像处理时才可以发现。图像的常见噪声主要有加性噪声、乘性噪声和量化噪声等。图像中的噪声往往和信号交织在一起,尤其是乘性噪声,如果平滑不当,就会使图像本身的细节如边界轮廓、线条等变的模糊不清,如何既平滑掉噪声有尽量保持图像细节,是图像平滑主要研究的任务。
一般来说,图像的能量主要集中在其低频部分,噪声所在的频段主要在高频段,同时系统中所要提取的汽车边缘信息也主要集中在其高频部分,因此,如何去掉高频干扰又同时保持边缘信息,是我们研究的内容。为了去除噪声,有必要对图像进行平滑,可以采用低通滤波的方法去除高频干扰。
四、实验主要代码
1、变量说明
CDIB m_dib; //CDIB类bool m_bHist; //表示是否进行直方图统计int m_hist[256]; //直方图数组BYTE *m_pdata; //位图的灰度信息
bool m_bLoaded; //表示是否加载了位图BITMAPINFO * m_pBMI; //位图信息头
BYTE* m_pDIBData; //位图象素数据指针
BYTE* m_pDumpDIBData; //位图象素数据指针
BITMAPFILEHEADER bfh; //位图信息头
BITMAPINFOHEADER bih; // 位图文件头
2、函数说明
2.1加载位图
bool CDIB::LoadFromFile(LPCTSTR lpszFileName)
参数:lpszFileName表示加载的位图路径和名称。如:d:\test\123.bmp
返回值:成功读取后,返回true,否则为false
2.2 获取图像宽度高度
int CDIB:: GetDIBWidth() 和int CDIB::GetDIBHeight()
2.3显示位图
void CDIB::ShowDIB(CDC *pDC, int nLeft, int nTop, int 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,便于显示m_pdata的信息。
3、图像操作主要代码及分析