《自-数字图像处理课程设计报告》由会员分享,可在线阅读,更多相关《自-数字图像处理课程设计报告(10页珍藏版)》请在金锄头文库上搜索。
1、一 课程题目:Photsp + 直方图均衡化二 设计目的:数字图像处理课程设计是在完成数字图像处理的相关理论的学习后,进行的综合性训练课程,其目的主要包括:1、使学生进一步巩固数字图像处理的基本概念、理论、分析方法和实现方法;2、增强学生应用C编写数字图像处理的应用程序及分析、解决实际问题的能力;3、尝试将所学的内容解决实际工程问题,培养学生的工程实践能力,提高工科学生的就业能力三 设计内容:( 备注:该课程设计是基于之前数字图像处理实验,其中新加入的功能涉及到之前的基础,需要调用其处理函数,故保留其实验功能并进行扩展。设计中涉及的一些知识已经在实验时介绍过,此处只对新加入功能进行分析)打开图
2、像打开一幅BMP格式的图像,若打开的不是该格式,提示错误。代码略;图像平滑主要用来修饰边缘过于清晰,或者对比度过于强烈的图像,通过取平均值减少相邻像素间的差异,从而产生平滑的过渡效果。作用:削弱相邻像素间颜色的差异,达到柔化图像的效果。代码略; 图像锐化主要用来通过增强相邻像素间的对比度,使图像具有明显的轮廓,并变得更加清晰。效果与“图像平滑”的效果正好相反。代码略;底片化-底片上的颜色与色彩鲜艳的照片的颜色是正好相反的,即反色。代码略;二值化主要是用来将整幅图像呈现出明显的黑白效果。代码略;垂直翻转垂直翻转是指把定义好的图像区域上下翻转地显示在屏幕上。器方法是保持每行像素信息不变,改变行的顺
3、序,将第一行的像素与倒数第一行的像素进行互换,第二行的与倒数第二行的互换依次类推,从而实现图像的垂直翻转。具体算法如下:r(i=;i)for(=;jw;+)tep_dimdatai*nh+j;m_ib_data*nj=mdib.mdataj+(n-i1)*nw;m_di.m_pdataj(nh-i-)*nwep;垂直翻转的效果图如下:水平镜像水平翻转是指将图像左右翻转地显示在屏幕上。其方法是保持行的顺序不变,改变列的顺序,将第一列的像素与倒数第一列的像素互换,第二列的像素与倒数第二列的像素互换依次类推,从而实现图像的水平翻转。其具体算法如下:fr(j=0;nh;j+)o(i=;inw/2;i+
4、)temp=m_ibm_dataj*nw+i;m_i._pdataj*wi=m_dib.m_pdataj*n+(nw-i-);_dibmpdaa*+(n-i-1)=mp;水平镜像的效果图如下:旋转90旋转90是指把图像绕位把位图中心点以顺、逆时针方向旋转90。其方法是计算旋转后像素的宽和高,生成新的位图像素缓冲区。基于旋转方向和旋转前像素的坐标,计算旋转后像素的坐标,将旋转前得像素复制到新的像素缓冲去的对应旋转后线索坐标的地方,依次类推,逐点交换,从而实现位图的旋转。其具体算法如下:顺时针旋转9in nw=m_ibGetDIBWidt();in nh=m_dib.GeDBig();iti,j;
5、 BYT *p=ew BYTnwn;mecpy(p,m_dib._pdta,*h); /像素距阵的转置实现图像的顺时针旋转(图像像素的x、y坐标互换)fo(j;jnh;j+)(i0;inw;i+)p(nh-j)*nwi-1=_di.dat(nh-1-)*+j; mcp(dib.m_data,,nw*nh);deet p;逆时针旋转90TE*=new BYTn*n;ecpy(p,_db.m_pdt,nw*nh);/像素距阵的转置实现图像的逆时针旋转for(j=0;jh;j+)for(;iw;+) jnw+=_db.m_pta(n-1)n+j;mecp(m_dib_pdat,p,n*nh);dee
6、t ;顺旋转9效果图素描风格化素描风格化是指模拟铅笔作画,手工速写等艺术效果,实现素描效果的关键是轮廓的勾勒,轮廓也就是灰度的一个跳变。其方式是:将彩色图像转换成灰度图像,然后求当前像素与周围像素的灰度的差值(与当前像素点右下角的像素进行比较),如果差值大于指定的阈值(此处假设为10),则颜色跳变严重,可以判断出该点是轮廓。这时就用黑点把它描绘出来,否则将它置为白色(用底片化进行处理)。其具体算法如下:for(j0;jnh;j+)for(i=;inw;i+)int ;/当前像素点与右下角像素点的差值kmdi.m_pdataj*nw+i-mib.m_pata(j1)*nw+1; i(k0)m_d
7、ib.m_pdaaj*n+=0;/对每一个象素进行底片化处理r(j0;nh;j+)for(i0;i;+)/对图像的第j行、第i列的象素的灰度信息进行判断,修改int gray=md_pataj*n+;mdib.m_pdataj*nw+i=255-ray; 素描风格化的效果图如左边所示。浮雕效果浮雕效果是指通过勾画图象轮廓和降低周围像素色值,从而生成具有凹凸感的浮雕效果。其方法是生成一缓冲区,计算当前像素的左上角与右下角的像素值之差,再加上一个补值。将其存储到缓冲区。再将缓冲区的数据逐点替换到图像中并显示出来。其具体算法如下:inti,j,w=3;w为模板宽度 BYTE*p=newBYTnw*n
8、h;mmpy(,m_ib.m_pdata,*nh); for(jw/;jh-w/2;j+) for(= w/2;iw-w/2;i+)j*nwi=m_dib.m_pdata(j1)*nw+i-*()+m_dibm_dat(+1)*n+i+1*(-1)+120; mecpy(m_dib.m_pata,p,w*n);delet p; 浮雕效果 彩图反转效果补光灯补光灯是为了提高图像的亮度。实现方法是将图像中每个像素点的值加上一个常数。具体算法省略。彩图反转彩图反转与底片化很相似,不同之处在于彩图反转是对每个像素中的R、G、B三个字节的值进行操作。具体算法如下:inenght=*nw;hile(leg
9、ht4!=0)nght+;lngtlenght-3*;/一个扫描行所占的字节数 it i,;int emp0,tempG0,tepB=0;/定义三个临时颜色变量or(i=0;nh;i+)fr(j=0;j+)tempR=m_db.DIBai*(3*weg)+j*3;emp=mib.mpDIDatai*(3*nw+lenht)+j*3;temp=m_ib._DIBatai(3*nw+leht)+3+; emp=2-teR;/真彩反色tmG=255-temp;em=255temp; m_dib.mDIBata*(*nw+enght)*3=temR;m_db.m_pDIatai(3*+legh)j*3
10、+;mdbm_pDIBDti*(3*w+enght)+*3+2=tempB; 老照片一般用在一些相片处理上,使整张相片呈棕褐色,好像已经保存了很久。实现方法是对图像中的每一个像素点,按特定的颜色变换公式求出新的颜色值并替换到图像中。具体算法如下:int leng=3nw;while(engh%4!=0)lengh+;lenhtleng3*nw;/一个扫描行所占的字节数 int ,j;tR1=,G1=0,1=0,R2,2,2;/定义三个临时颜色变量fo(i=0;in;i+)for(=0;w;j+)R1=m_dib._pDIDati*(3*nw+enht)j*3; G=_dibm_pDIDtai*
11、(3*lenght)+3+1;1=_dibpDIBatai*(3*nwent)*3+2;R=(in)(*R1+0.*G1+0189*B1); /R、B的替换公式G2=(nt)(049*R1+0.66*G1+06*1);B2=(in)(07*1+.534*1+0.31*1); m_dib.m_Data(3*nwle)j3=R2;mbm_DIBDatai*(3*nw+lengt)+1=2;_di.m_pDIBDta*(*w+lnght)+j*+=B2; 特殊功能直方图均衡化直方图均衡化处理的关键就是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布。本次的设计思想主要是来自何家峰老师的数字图像处理理论教学,具体方法是:程序算法(主要代码):in n25,g2; /定义频数数组n,均衡化每个像素的灰度级的数组doulf6,t26; /定义频率数组,累加的频率数组tit g_a,gmi=255; fr(j=0;jh;+) /统计灰度级的频数n fo(=0;nw;i+) it z=m_dib.mpdatj*n+i; n+; for(0;=255;k+) /统计每个灰度级出现的频率k=nk/(w