ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:932.89KB ,
资源ID:10119131      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-10119131.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数字图像处理课程设计报告.docx)为本站会员(b****0)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

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

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

6、); delete p; 逆时针旋转90BYTE *p=new 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列的象素的

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

9、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(lenght%4!=0)lenght

10、+; 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; tempB=255-te

11、mpB; 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;/一个扫描行所占的字节数 in

12、t 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)(

13、0.272*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,均衡化每个像素的灰度级的数组g double 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+)

15、 tk=tk-1+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); /左

16、上角坐标 pDC-LineTo(400,nh+200);/左下角坐标 pDC-LineTo(690,nh+200);/右下角坐标 / 写X轴刻度值/在(x,y)处写字符串str str.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

17、(200); pDC-TextOut(600, 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;iMoveT

18、o(400-4,nh+20+20+j); pDC-LineTo(400+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

19、+20); pDC-LineTo(405,nh+20+5); /写标题 str.Format(原始直方图); 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单文本框的应用。同时,数字图像处理理论知识的实践,激发了我对图像处理领域的兴趣,希望能通过此次图像处理的练习,在暑假实现视频的压缩处理,运用到高清数字电视领域。参考文献:数字图像处理 电子工业出版社vc+数字图像处理实验指导书 曹老师、何家峰主编VC+图像处理设计 (第二版) 杨淑莹主编Visual C+项目开发实用案例 刘瑞、吴跃进、王宗跃主编风格化的一些算法(PPT) 耿蕊 2007年12月23日

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2