您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 数字图象处理课程设计
课程设计课程名称___数字图像处理课程设计__题目名称一个简单的“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、变量说明CDIBm_dib;//CDIB类boolm_bHist;//表示是否进行直方图统计intm_hist[256];//直方图数组BYTE*m_pdata;//位图的灰度信息boolm_bLoaded;//表示是否加载了位图BITMAPINFO*m_pBMI;//位图信息头BYTE*m_pDIBData;//位图象素数据指针BYTE*m_pDumpDIBData;//位图象素数据指针BITMAPFILEHEADERbfh;//位图信息头BITMAPINFOHEADERbih;//位图文件头2、函数说明2.1加载位图boolCDIB::LoadFromFile(LPCTSTRlpszFileName)参数:lpszFileName表示加载的位图路径和名称。如:d:\test\123.bmp返回值:成功读取后,返回true,否则为false2.2获取图像宽度高度intCDIB::GetDIBWidth()和intCDIB::GetDIBHeight()2.3显示位图voidCDIB::ShowDIB(CDC*pDC,intnLeft,intnTop,intnRight,intnBottom,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、图像操作主要代码及分析3.1直方图显示voidCImageProView::OnHistogram(){//直方图显示if(m_dib.m_bLoaded!=true){AfxMessageBox(要处理的图像文件没打开);return;}inti,j;BYTE*pdata=m_dib.m_pdata;intnh=m_dib.GetDIBHeight();intnw=m_dib.GetDIBWidth();for(i=0;i256;i++)//初始化直方图数组m_hist[i]=0;if(m_dib.m_nImType==24){for(j=0;jnh;j++)for(i=0;inw;i++){//统计直方图每个灰度级出现的次数BYTEtemp=pdata[j*nw+i];m_hist[temp]++;}}m_bHist=true;//画图Invalidate(1);}实验效果截图如下:3.2直方图均衡化voidCImageProView::OnEqualization()//直方图均衡化{inti,j,k,max=0,min=0;intnw=m_dib.GetDIBWidth();intnh=m_dib.GetDIBHeight();intn[256]={0};//n[i]灰度值为i的像素的个数floatp[256]={0.0};//p[i]灰度为i的像素个数的归一化floatc[256]={0.0};//c[i]灰度为i的像素个数的累积归一化for(i=0;inh;i++)//统计直方图每个灰度级出现的次数{for(j=0;jnw;j++){k=m_dib.m_pdata[i*nw+j];n[k]++;}}for(i=0;i256;i++)//归一化直方图{p[i]=(float)n[i]/(nw*nh);}for(i=0;i256;i++)//累积归一化直方图for(j=0;j=i;j++){c[i]+=p[j];}for(i=0;inh;i++)//找出像素的最大值和最小值{for(j=0;jnw;j++){if(max=m_dib.m_pdata[i*nw+j])max=m_dib.m_pdata[i*nw+j];if(min=m_dib.m_pdata[i*nw+j])min=m_dib.m_pdata[i*nw+j];}}for(i=0;inh;i++)//直方图均衡化{for(j=0;jnw;j++){m_dib.m_pdata[i*nw+j]=c[m_dib.m_pdata[i*nw+j]]*(max-min)+min+0.5;}}m_dib.UpdateData();//将修改的m_pdata的数据赋值给m_pDIBData,显示修改的结果Invalidate();//刷新屏幕}实验效果截图如下:左图是处理过后的图像,右图是原图3.3浮雕效果voidCImageProView::OnRelievo()//浮雕效果{inti,j;intnw=m_dib.GetDIBWidth();intnh=m_dib.GetDIBHeight();if(!m_dib.m_bLoaded){MessageBox(_T(你还没有打开一个要保存的图像文件!));return;}for(i=0;inh;i++)for(j=(nw-1);j=0;j--){m_dib.m_pdata[i*nw+j]-=m_dib.m_pdata[(i+1)*nw+j-1]+128;}m_dib.UpdateData();//将修改的m_pdata的数据赋值给m_pDIBData,显示修改的结果Invalidate();//刷新屏幕}实验效果截图如下:左图是处理过后的图像,右图是原图3.4均值滤波voidCImageProView::OnSmoth(){//均值滤波;if(m_dib.m_bLoaded!=true){AfxMessageBox(要处理的图像文件没打开);return;}inti,j;BYTE*pdata=m_dib.m_pdata;intnh=m_dib.GetDIBHeight();intnw=m_dib.GetDIBWidth();if(m_dib.m_nImType==24)//目前仅仅对24位bmp图进行{Maskdlg;intret=dlg.DoModal();if(ret==IDOK){//从对话框中获取相关的模板运算的信息int*mask=dlg.mask;//模板指针intmask_width=dlg.m_width;//模板大小floatmask_coef=dlg.m_coef;//模板的系数intwid=(mask_width-1)/2;//计算运算的边界BYTE*temp=newBYTE[nh*nw];//开辟临时内存memcpy(temp,m_dib.m_pdata,nh*nw);for(j=wid;jnh-wid;j++)//rowfor(i=wid;inw-wid;i++)//col{intamount=0;for(intk=-wid;k=wid;k++)for(intl=-wid;l=wid;l++)amount+=temp[(j+k)*nw+i+l]*mask[(k+wid)*mask_width+l+wid];amount=int(amount*mask_coef);if(amount0)amount=0;if(amount255)amount=255;pdata[j*nw+i]=BYTE(amount);}m_dib.InvalidateData();deletetemp;Invalidate(1);}}}实验效果截图如下:右图是处理过后的图像,左图是原图五、设计心得体会通过这次数字图像处理课程设计,本人在多方面都有所提高。通过这次课程设计,综合运用本专业所学课程的理论。在图像处理过程中,使用相对应的方法去获得自己需要的效果,在这次设计过程中,体现出自己的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。首先加深了我对于数字图像处理这门课程的认识,通过对相关知识的进一步了解和掌握,清楚的认识到这门课程在实际应用的广泛性。同时也感到图像处理这门技术的深
本文标题:数字图象处理课程设计
链接地址:https://www.777doc.com/doc-7371888 .html