数字图像处理课程设计报告.doc

上传人:牧羊曲112 文档编号:3901482 上传时间:2023-03-26 格式:DOC 页数:11 大小:980KB
返回 下载 相关 举报
数字图像处理课程设计报告.doc_第1页
第1页 / 共11页
数字图像处理课程设计报告.doc_第2页
第2页 / 共11页
数字图像处理课程设计报告.doc_第3页
第3页 / 共11页
数字图像处理课程设计报告.doc_第4页
第4页 / 共11页
数字图像处理课程设计报告.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

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

1、一 课程题目:Photoshop + 直方图均衡化二 设计目的:数字图像处理课程设计是在完成数字图像处理的相关理论的学习后,进行的综合性训练课程,其目的主要包括:1、使学生进一步巩固数字图像处理的基本概念、理论、分析方法和实现方法;2、增强学生应用VC编写数字图像处理的应用程序及分析、解决实际问题的能力;3、尝试将所学的内容解决实际工程问题,培养学生的工程实践能力,提高工科学生的就业能力三 设计内容:( 备注:该课程设计是基于之前数字图像处理实验,其中新加入的功能涉及到之前的基础,需要调用其处理函数,故保留其实验功能并进行扩展。设计中涉及的一些知识已经在实验时介绍过,此处只对新加入功能进行分析

2、 )打开图像打开一幅BMP格式的图像,若打开的不是该格式,提示错误。代码略;图像平滑主要用来修饰边缘过于清晰,或者对比度过于强烈的图像,通过取平均值减少相邻像素间的差异,从而产生平滑的过渡效果。作用:削弱相邻像素间颜色的差异,达到柔化图像的效果。代码略; 图像锐化主要用来通过增强相邻像素间的对比度,使图像具有明显的轮廓,并变得更加清晰。效果与“图像平滑”的效果正好相反。代码略;底片化-底片上的颜色与色彩鲜艳的照片的颜色是正好相反的,即反色。代码略;二值化主要是用来将整幅图像呈现出明显的黑白效果。代码略;垂直翻转垂直翻转是指把定义好的图像区域上下翻转地显示在屏幕上。器方法是保持每行像素信息不变,

3、改变行的顺序,将第一行的像素与倒数第一行的像素进行互换,第二行的与倒数第二行的互换依次类推,从而实现图像的垂直翻转。具体算法如下:for(i=0;inh/2;i+)for(j=0;jnw;j+)temp=m_dib.m_pdatai*nh+j;m_dib.m_pdatai*nh+j=m_dib.m_pdataj+(nh-i-1)*nw;m_dib.m_pdataj+(nh-i-1)*nw=temp;垂直翻转的效果图如下:水平镜像水平翻转是指将图像左右翻转地显示在屏幕上。其方法是保持行的顺序不变,改变列的顺序,将第一列的像素与倒数第一列的像素互换,第二列的像素与倒数第二列的像素互换依次类推,从而

4、实现图像的水平翻转。其具体算法如下:for(j=0;jnh;j+)for(i=0;inw/2;i+)temp=m_dib.m_pdataj*nw+i;m_dib.m_pdataj*nw+i=m_dib.m_pdataj*nw+(nw-i-1);m_dib.m_pdataj*nw+(nw-i-1)=temp;水平镜像的效果图如下:旋转90旋转90是指把图像绕位把位图中心点以顺、逆时针方向旋转90。其方法是计算旋转后像素的宽和高,生成新的位图像素缓冲区。基于旋转方向和旋转前像素的坐标,计算旋转后像素的坐标,将旋转前得像素复制到新的像素缓冲去的对应旋转后线索坐标的地方,依次类推,逐点交换,从而实现位

5、图的旋转。其具体算法如下:顺时针旋转90int nw=m_dib.GetDIBWidth();int nh=m_dib.GetDIBHeight();int i,j; BYTE *p=new BYTEnw*nh;memcpy(p,m_dib.m_pdata,nw*nh); /像素距阵的转置实现图像的顺时针旋转(图像像素的x、y坐标互换)for(j=0;jnh;j+)for(i=0;inw;i+)p(nh-j)*nw-i-1=m_dib.m_pdata(nh-1-i)*nw+j; memcpy(m_dib.m_pdata,p,nw*nh);delete p;逆时针旋转90BYTE *p=new

6、BYTEnw*nh;memcpy(p,m_dib.m_pdata,nw*nh);/像素距阵的转置实现图像的逆时针旋转for(j=0;jnh;j+)for(i=0;inw;i+) pj*nw+i=m_dib.m_pdata(nh-1-i)*nw+j;memcpy(m_dib.m_pdata,p,nw*nh);delete p;顺旋转90效果图素描风格化素描风格化是指模拟铅笔作画,手工速写等艺术效果,实现素描效果的关键是轮廓的勾勒,轮廓也就是灰度的一个跳变。其方式是:将彩色图像转换成灰度图像,然后.求当前像素与周围像素的灰度的差值(与当前像素点右下角的像素进行比较),如果差值大于指定的阈值(此处假

7、设为10),则颜色跳变严重,可以判断出该点是轮廓。这时就用黑点把它描绘出来,否则将它置为白色(用底片化进行处理)。其具体算法如下:for(j=0;jnh;j+)for(i=0;inw;i+)int k; /当前像素点与右下角像素点的差值k=m_dib.m_pdataj*nw+i-m_dib.m_pdata(j+1)*nw+i+1; if(k10)m_dib.m_pdataj*nw+i=0;/对每一个象素进行底片化处理for(j=0;jnh;j+)for(i=0;inw;i+)/对图像的第j行、第i列的象素的灰度信息进行判断,修改int gray=m_dib.m_pdataj*nw+i;m_di

8、b.m_pdataj*nw+i=255-gray; 素描风格化的效果图如左边所示。浮雕效果浮雕效果是指通过勾画图象轮廓和降低周围像素色值,从而生成具有凹凸感的浮雕效果。其方法是生成一缓冲区,计算当前像素的左上角与右下角的像素值之差,再加上一个补值。将其存储到缓冲区。再将缓冲区的数据逐点替换到图像中并显示出来。其具体算法如下:int i,j,w=3;/w为模板宽度 BYTE *p=new BYTEnw*nh;For personal use only in study and research; not for commercial usememcpy(p,m_dib.m_pdata,nw*nh

9、); for(j=w/2;jnh-w/2;j+) for(i= w/2;inw-w/2;i+) pj*nw+i=m_dib.m_pdata(j-1)*nw+i-1*(1)+m_dib.m_pdata(j+1)*nw+i+1*(-1)+120; memcpy(m_dib.m_pdata,p,nw*nh);delete p; 浮雕效果 彩图反转效果补光灯补光灯是为了提高图像的亮度。实现方法是将图像中每个像素点的值加上一个常数。具体算法省略。彩图反转彩图反转与底片化很相似,不同之处在于彩图反转是对每个像素中的R、G、B三个字节的值进行操作。具体算法如下:int lenght=3*nw;while(l

10、enght%4!=0)lenght+;lenght=lenght-3*nw;/一个扫描行所占的字节数 int i,j;int tempR=0,tempG=0,tempB=0;/定义三个临时颜色变量for(i=0;inh;i+)for(j=0;jnw;j+)tempR=m_dib.m_pDIBDatai*(3*nw+lenght)+j*3;tempG=m_dib.m_pDIBDatai*(3*nw+lenght)+j*3+1;tempB=m_dib.m_pDIBDatai*(3*nw+lenght)+j*3+2; tempR=255-tempR;/真彩反色tempG=255-tempG;temp

11、B=255-tempB; m_dib.m_pDIBDatai*(3*nw+lenght)+j*3=tempR;m_dib.m_pDIBDatai*(3*nw+lenght)+j*3+1=tempG;m_dib.m_pDIBDatai*(3*nw+lenght)+j*3+2=tempB; 老照片一般用在一些相片处理上,使整张相片呈棕褐色,好像已经保存了很久。实现方法是对图像中的每一个像素点,按特定的颜色变换公式求出新的颜色值并替换到图像中。具体算法如下:int lenght=3*nw;while(lenght%4!=0)lenght+;lenght=lenght-3*nw;/一个扫描行所占的字节

12、数 int i,j;int R1=0,G1=0,B1=0,R2,G2,B2;/定义三个临时颜色变量for(i=0;inh;i+)for(j=0;jnw;j+)R1=m_dib.m_pDIBDatai*(3*nw+lenght)+j*3; G1=m_dib.m_pDIBDatai*(3*nw+lenght)+j*3+1;B1=m_dib.m_pDIBDatai*(3*nw+lenght)+j*3+2;R2=(int)(0.393*R1+0.769*G1+0.189*B1); /R、G、B的替换公式G2=(int)(0.349*R1+0.686*G1+0.168*B1);B2=(int)(0.27

13、2*R1+0.534*G1+0.131*B1); m_dib.m_pDIBDatai*(3*nw+lenght)+j*3=R2;m_dib.m_pDIBDatai*(3*nw+lenght)+j*3+1=G2;m_dib.m_pDIBDatai*(3*nw+lenght)+j*3+2=B2; 特殊功能直方图均衡化直方图均衡化处理的关键就是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布。本次的设计思想主要是

14、来自何家峰老师的数字图像处理理论教学,具体方法是:程序算法(主要代码):int n256,g256; /定义频数数组n,均衡化每个像素的灰度级的数组gdouble f256,t256; /定义频率数组f,累加的频率数组tint g_max=0,g_mim=255; for(j=0;jnh;j+) /统计灰度级的频数n for(i=0;inw;i+) int z=m_dib.m_pdataj*nw+i; nz+; for(k=0;k=255;k+) /统计每个灰度级出现的频率fk=nk/(nw*nh*1.0); /累计灰度级的频率 t0=f0;for(k=1;k=255;k+) tk=tk-1+

15、fk; for(j=0;jnh;j+) for(i=0;ig_max?w:g_max; /得到最大值g_mim=wg_mim?w:g_mim;/得到最小值 for(k=0;k=255;k+) /利用公式求每个像素均衡化后的灰度级gk=(int)(g_max-g_mim)*tk+g_mim+0.5); for(j=0;jnh;j+) /逐个替换 for(i=0;inw;i+) m_dib.m_pdataj*nw+i=gm_dib.m_pdataj*nw+i; for(j=0;jnh;j+) /计算均衡化的直方图 for(i=0;iMoveTo(400,nh+20); /左上角坐标 pDC-Lin

16、eTo(400,nh+200);/左下角坐标 pDC-LineTo(690,nh+200);/右下角坐标 / 写X轴刻度值/在(x,y)处写字符串strstr.Format(0);pDC-TextOut(400, nh+200+10, str);str.Format(50);pDC-TextOut(450, nh+200+10, str);str.Format(100);pDC-TextOut(500, nh+200+10, str);str.Format(150);pDC-TextOut(550, nh+200+10, str);str.Format(200);pDC-TextOut(600

17、, nh+200+10, str);str.Format(255);pDC-TextOut(650, nh+200+10, str);/ 绘制X轴刻度for ( i = 0; i MoveTo(i+9,nh+200-4);pDC-LineTo(i+9,nh+200+4);pDC-MoveTo(i+10,nh+200-4);pDC-LineTo(i+10,nh+200+4);pDC-MoveTo(i+11,nh+200-4);pDC-LineTo(i+11,nh+200+4);/ 绘制Y轴刻度for (i=0,j=0;iMoveTo(400-4,nh+20+20+j);pDC-LineTo(40

18、0+4,nh+20+20+j);/标志y轴坐标str.Format(1); pDC-TextOut(400-20, nh+20+20, str);str.Format(0.5);pDC-TextOut(400-20, nh+20+100, str);/ 绘制X轴箭头pDC-MoveTo(685,nh+200-5);pDC-LineTo(690,nh+200);pDC-LineTo(685,nh+200+5);/ 绘制y轴箭头pDC-MoveTo(395,nh+20+5);pDC-LineTo(400,nh+20);pDC-LineTo(405,nh+20+5); /写标题str.Format(

19、原始直方图); pDC-TextOut(480, nh+20, str);int max=0;for(i=0;imax?m_sourcei:max;for(i=0;iMoveTo(400+i,nh+200);pDC-LineTo(400+i,nh+200-(m_sourcei*160/max);/除以max是归一化,*160是因为我y轴范围是180,方便观看四 设计心得体会:该课程设计是在之前的数字图像处理实验的基础上进行深入学习,我一开始选择的是数字水印题目,经过2天的研究,虽然对数字水印的实现原理和算法有了一定的了解,网上也有相关的关键算法代码,然而看似简单,自己做起来确实很艰难,加上时间

20、紧迫,最终放弃数字水印课题。我选择了较为简单的PHOTOSHOP课题,通过查找相关算法(主要是耿蕊的PPT报告-风格化的一些算法),最终实现了一个个功能:浮雕、老照片、镜像处理、旋转处理、素描风格、彩图反转,但是耿蕊的PPT中有关的连环画、油画算法,我始终不能实现,这也是很遗憾。整个PHOTOSHOP工具花了5天时间,最后剩下的一周我决定再做一个课题直方图均衡化。直方图均衡化是我认为比较容易实现的,因为在数字图像处理理论课中,何老师很详细地讲解了其算法的实现,并且给出了相应的框图例子,只要一步步按照何老师讲诉的算法,并且用程序替换,就可实现。直方图均衡化课题中的难点是“画坐标图”。通过上网查找

21、知道涉及的相关函数MoveTo()、LineTo()、Format()、TextOut(),虽知道其函数效果,也看过相关例子,但将其实际应用到自己的显示屏幕确实出现诸多问题,首先坐标的原点位置只能不断试验以找到合适位置。箭头、坐标刻度、刻度值等相关算法的程序实现更是难上加难。因为绘制新直方图的坐标图时没考虑到刻度值的问题,在后面的标刻度时没空间,只能中断Y轴以显示刻度值,结果看图。整个直方图均衡化,2/3的时间花在绘制坐标图。 通过对以上两个课题的设计和实现,我深入理解了photoshop部分工具的实现原理和实现方法,增加了对VC+ MFC单文本框的应用。同时,数字图像处理理论知识的实践,激发

22、了我对图像处理领域的兴趣,希望能通过此次图像处理的练习,在暑假实现视频的压缩处理,运用到高清数字电视领域。参考文献:数字图像处理 电子工业出版社vc+数字图像处理实验指导书 曹老师、何家峰主编VC+图像处理设计 (第二版) 杨淑莹主编Visual C+项目开发实用案例 刘瑞、吴跃进、王宗跃主编风格化的一些算法(PPT) 耿蕊 2007年12月23日 仅供个人用于学习、研究;不得用于商业用途。For personal use only in study and research; not for commercial use.Nur fr den persnlichen fr Studien, Forschung, zu kommerziellen Zwecken verwendet werden.Pour l tude et la recherche uniquement des fins personnelles; pas des fins commerciales. , , . 以下无正文

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号