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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数字图像处理论文.docx

1、数字图像处理论文数字图像处理实验报告班级: 学号: 姓名: 序号: 图像的几何变换一、实验目的1、 掌握图像几何变换的基本原理2、 掌握如何利用VC+对图像进行几何变换(图像缩小、放大、旋转、裁剪等)3、 学会自己编写简单几何变换的程序二、实验内容1、 对所选图像进行平移操作2、 对所选图像进行缩放操作3、 对所选图像进行旋转操作三、图像的相关几何变换 图像平移1. 理论基础 图像平移(Translation)是将图像中所有的点都按照指定的平移量,进行水平、垂直移动。 设初始坐标为(x0,y0)的点 经过平移(tx,ty)后 坐标变为(x1,y1)。 显然(x0,y0)和(x1,y1)的关系如

2、下: X1=x0+tx Y1=y0+ty2. 流程设计(1) 取得原图的数据区指针。 (2) 通过对话框输入偏移量tx,ty。 (3) 开辟一个同样大小的缓冲区。 (4) 对原图依次循环每个像素,每读入一个像素点(x0,y0),根据它的坐标,找到目标图像的位置(x1=x0-tx,y1=y0-ty),将像素(x0,y0)处的颜色值赋给新图中的(x1,y1)。 3. 编程实现(LPBYTE)p_data + lLineBytes * (height - 1 - j) + i;int i0,j0;/ 计算该象素在新DIB中的坐标i0 = i+mfor( i = 0; i wide; i+) for(

3、int j = 0; j = 0) & (i0 = 0) & (j0 height) / 判断是否在新图范围内 lpDst = (LPBYTE)temp + lLineBytes *(height - 1 - j0) + i0; *lpDst = *lpSrc; / 复制象素else* (unsigned char*)lpDst) = 255; / 对于源图中没有的象素,直接赋值为2554.实验结果对比 图像的镜像变换1 理论基础 图像的镜像变换分为两种:一种是水平镜像,另一种是垂直镜像。 图像的水平镜像操作是以原图像的垂直中轴线为中心,将图像分为左右两部分进行对称变换; 图像的垂直镜像操作是

4、以原图像的水平中轴线为中心,将图像分为上下两部分进行对称变换。 镜像变换后图的高和宽都不变设图像高度为Height,宽度为Width, 原图中的(x0,y0)经过水平镜像后, 坐标将变成(Width-x0,y0)。即: x1=Width-x0 y1=y02.流程设计(1) 取得原图的数据区指针。 (2) 开辟一个同样大小的缓冲区。 (3) 每个像素依次循环。 在水平镜像中,将原图中的像素点的水平坐标变成镜像后的坐标(用图像的宽度减去坐标值)在显示到图像上。 垂直镜像中,则对垂直坐标做相应的处理。 3.编程实现-水平镜像for(j = 0; j height; j+) for(i = 0; i

5、wide;i+) lpSrc = (LPBYTE)p_data +wide *j + i; lpDst = (LPBYTE)temp + wide* j+ wide - i; *lpDst = *lpSrc; for(i = 0; i wide;i+) for(j = 0; j height; j+) lpSrc = (LPBYTE)p_data + wide * j+i; lpDst = (LPBYTE)temp + wide * (height - j - 1)+i; *lpDst = *lpSrc; 4.实验结果对比 (a)原图 (b)水平镜像处理效果图 (c)垂直镜像处理效果图 图像的

6、缩放 1 理论基础 假设图像X轴方向缩放比率是kx,Y轴方向缩放比率是ky,那么原图中点(x0,y0)对应与新图中的点(x1,y1)为: x1=x0*kx y1=y0*ky 当kx1且ky1时,原图像被放大。 放大图像时,产生了新的像素,可通过插值算法来近似处理。 例如:当kx=ky=2时,图像放大2倍, 原图中的某一个像素,对应新图的4个像素。 (a)原图中的某一个像素 (b)对应新图的4个像素 当kx1且ky1时,原图像被缩小。 例如,当kx=ky=0.5时,图像被缩到一半大小,原图中4个像素对应新图中的一个像素。此时缩小后的图像中的(0,0)像素对应于原图中的(0,0)、(0,1)、(1

7、,0)、(1,1)像素一个; 以此类推。在原图基础上,每行隔一个像素取一点,每割一行进行操作。如下图3-4所示。 (a)原图中的某4个像素 (b)对应新图的1个像素 2.流程设计(1) 取得原图的数据区指针。 (2) 通过对话框获得放大整数比例:kx,ky。 更改图象的宽度和高度。 (3) 每个像素依次循环。计算该象素在原图象中的坐标,将原图的象素值赋给目标象素相应位置kx*ky个值。 3.编程实现-放大图像/ 针对图像每行进行操作 for(j = 0; j height-1; j+) / 针对图像每列进行操作 for(i = 0; i wide-1; i+) / 指向源DIB第i0行,第j0

8、个象素的指针 lpSrc = (LPBYTE)p_data + wide * j + i; / 复制象素 for(int n=0;nk1;n+) for(int m=0;mk2;m+) lpDst = (LPBYTE)temp + newwide *(j*k1+ n) + i*k2+m; *lpDst = *lpSrc; for(j = 0; j newheight-1; j+) / 针对图像每列进行操作 for(i = 0; i = 0) & (i0 = 0) & (j0 height) / 判断是否在源图范围内 / 指向源DIB第i0行,第j0个象素的指针 lpSrc = (LPBYTE)

9、p_data + wide * j0 + i0; *lpDst = *lpSrc; / 复制象素 else *lpDst = 255; / 对于源图中没有的象素,直接赋值为255 4.实验结果对比 (a)原图 (b)长宽缩小0.5倍的效果图 (c)长宽各放大2倍的效果图 图像的旋转 1. 理论基础 图像的旋转必须指明图像绕着什么旋转。 一般以图像的中心为原点,旋转一定的角度。 旋转后,图像的大小一般会改变。在旋转前: x0=cos() y0=sin() 旋转后: x1=cos(-)=cos()cos()+sin()sin() =x0cos()+y0sin() y1=sin(-)=sin()co

10、s()-cos()sin() =-x0sin()+y0cos()2.流程设计(1) 以图像的中心为原点,旋转一定的角度。根据下图,将坐标系变成坐(2)根据旋转公式,将该点顺时针旋转角;(3)将坐标系变成坐标系。3.编程实现num1=(double)( -0.5*Wnew*cosa-0.5*Hnew*sina+0.5*Wold);num2=(double)(0.5*Wnew*sina-0.5*Hnew*cosa+0.5*Hold); for(y1=0;y1Hnew;y1+) for(x1=0;x1=0) & (x0=0) & (y0Hold) /在原图范围内 lpPtr=lpSrc+y0*Wol

11、d+x0; lpTempPtr=lpTemp+y1*Wnew+x1; *lpTempPtr=*lpPtr; /进行象素的复制 4.实验结果对比 四、 实验结论在本实验中,我学到了很多东西,如在图像的平移中,我知道了经典的图像平移有两种算法,一种不会改变图像大小,另一种可以相应扩大图像。本程序采用了第一种算法。为了使图像能按照用户指定的水平平移量和垂直平移量移动,首先定义了一个参数设定窗,并在图像平移菜单的事件处理函数中对此对话框进行定义,获取平移量。然后调用图像平移函数,从而实现将图像中所有的点(像素)都按照指定的平移量水平、垂直移动,平移后的图像上的每一点都可以在原图像中找到对应的点;在图像

12、的缩放中,程序将图像按用户设定的X轴方向的缩放比率和Y轴方向的缩放比率进行缩放。此操作产生的图像中的像素可能在原图中找不到相应的像素点,因此必须进行近似处理。此处理有多种方法,可以采用最邻近插值算法,也可以采用别的插值算法。后者处理效果要好一些,但是运算量也相应增加很多,因此本程序采用前者,即最邻近插值算法。最后,由于缩放改变了图像的高度和宽度,因此还需要对DIB头文件的高度和宽度信息进行更新;在图像的旋转中,程序将图像以图像中心为原点,按照用户设定的旋转角度进行旋转。和图像的平移一样,可以采用不同的算法,既可以把转出显示区域的部分图像截去,也可以扩大图像范围以显示所有图像,在本程序中采用后者

13、。同时为了减小运算量,将图像以图像中心为坐标系原点进行旋转,而不是用户指定的任意一点。 该程序比较简单,还有许多不足:作为图像处理的一个重要的组成部分,支持任意格式图像的读写操作,是不可缺少的部分。但本程序考虑到灰度图使用比较方便,故只实现了BMP格式的读写,对其他格式,例如GIF,JPEG,PCX格式的图像则未做处理。要实现这一部分,必须了解每种格式的存储结构,对不同的格式定义不同的数据结构和函数库.通过该程序,我对计算机图像处理的基础理论和操作有了初步认识,对Visual C+开发应用程序的流程、消息映射机制、应用程序执行过程等有了进一步的理解,深刻体会到了C+高效和简洁的特点,为以后的学习打下了一定的基础。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1