数字图像处理论文.docx
- 文档编号:8199768
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:12
- 大小:508.63KB
数字图像处理论文.docx
《数字图像处理论文.docx》由会员分享,可在线阅读,更多相关《数字图像处理论文.docx(12页珍藏版)》请在冰豆网上搜索。
数字图像处理论文
数字图像处理
实验报告
班级:
学号:
姓名:
序号:
图像的几何变换
一、实验目的
1、 掌握图像几何变换的基本原理
2、 掌握如何利用VC++对图像进行几何变换(图像缩小、放大、旋转、裁剪等)
3、 学会自己编写简单几何变换的程序
二、实验内容
1、 对所选图像进行平移操作
2、 对所选图像进行缩放操作
3、 对所选图像进行旋转操作
三、图像的相关几何变换
<一>图像平移
1.理论基础
图像平移(Translation)是将图像中所有的点都按照指定的平移量,进行水平、垂直移动。
设初始坐标为(x0,y0)的点
经过平移(tx,ty)后
坐标变为(x1,y1)。
显然(x0,y0)和(x1,y1)的关系如下:
X1=x0+tx
Y1=y0+ty
2.流程设计
(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;
inti0,j0;
//计算该象素在新DIB中的坐标
i0=i+mfor(i=0;i {for(intj=0;j {//计算该象素在源DIB中的坐标 lpSrc=_Xmove; j0=j+m_Ymove; if((i0>=0)&&(i0 {lpDst=(LPBYTE)temp+lLineBytes*(height-1-j0)+i0; *lpDst=*lpSrc;//复制象素 } else { *((unsignedchar*)lpDst)=255;//对于源图中没有的象素,直接赋值为255 } } } 4.实验结果对比 <二>图像的镜像变换 1.理论基础 图像的镜像变换分为两种: 一种是水平镜像,另一种是垂直镜像。 图像的水平镜像操作是以原图像的垂直中轴线为中心,将图像分为左右两部分进行对称变换; 图像的垂直镜像操作是以原图像的水平中轴线为中心,将图像分为上下两部分进行对称变换。 镜像变换后图的高和宽都不变 设图像高度为Height,宽度为Width, 原图中的(x0,y0)经过水平镜像后, 坐标将变成(Width-x0,y0)。 即: x1=Width-x0 y1=y0 2.流程设计 (1)取得原图的数据区指针。 (2)开辟一个同样大小的缓冲区。 (3)每个像素依次循环。 在水平镜像中,将原图中的像素点的水平坐标变成镜像后的坐标(用图像的宽度减去坐标值)在显示到图像上。 垂直镜像中,则对垂直坐标做相应的处理。 3.编程实现----水平镜像 for(j=0;j for(i=0;i { lpSrc=(LPBYTE)p_data+wide*j+i; lpDst=(LPBYTE)temp+wide*j+wide-i; *lpDst=*lpSrc; } for(i=0;i for(j=0;j { lpSrc=(LPBYTE)p_data+wide*j+i; lpDst=(LPBYTE)temp+wide*(height-j-1)+i; *lpDst=*lpSrc; } 4.实验结果对比 (a)原图(b)水平镜像处理效果图(c)垂直镜像处理效果图 <三>图像的缩放 1.理论基础 假设图像X轴方向缩放比率是kx,Y轴方向缩放比率是ky,那么原图中点(x0,y0)对应与新图中的点(x1,y1)为: x1=x0*kx y1=y0*ky 当kx>1且ky>1时,原图像被放大。 放大图像时,产生了新的像素,可通过插值算法来近似处理。 例如: 当kx=ky=2时,图像放大2倍, 原图中的某一个像素,对应新图的4个像素。 ●● ●●● (a)原图中的某一个像素(b)对应新图的4个像素 当kx<1且ky<1时,原图像被缩小。 例如,当kx=ky=0.5时,图像被缩到一半大小,原图中4个像素对应新图中的一个像素。 此时缩小后的图像中的(0,0)像素对应于原图中的(0,0)、(0,1)、(1,0)、(1,1)像素一个; 以此类推。 在原图基础上,每行隔一个像素取一点,每割一行进行操作。 如下图3-4所示。 ●●● ●● (a)原图中的某4个像素(b)对应新图的1个像素 2.流程设计 (1)取得原图的数据区指针。 (2)通过对话框获得放大整数比例: kx,ky。 更改图象的宽度和高度。 (3)每个像素依次循环。 计算该象素在原图象中的坐标,将原图的象素值赋给目标象素相应位置kx*ky个值。 3.编程实现----放大图像 //针对图像每行进行操作 for(j=0;j {//针对图像每列进行操作 for(i=0;i {//指向源DIB第i0行,第j0个象素的指针 lpSrc=(LPBYTE)p_data+wide*j+i; //复制象素 for(intn=0;n for(intm=0;m { lpDst=(LPBYTE)temp+newwide*(j*k1+n)+i*k2+m; *lpDst=*lpSrc; } } } for(j=0;j {//针对图像每列进行操作 for(i=0;i {//指向新DIB第i行,第j个象素的指针,注意此处宽度和高度是新DIB的宽度和高度 lpDst=(LPBYTE)hDIB+newwide*j+i; //计算该象素在源DIB中的坐标 j0=(LONG)(j/yzoom+0.5); i0=(LONG)(i/xzoom+0.5); if((i0>=0)&&(i0 {//指向源DIB第i0行,第j0个象素的指针 lpSrc=(LPBYTE)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(β)cos(α)-γ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;y1 { for(x1=0;x1 {//x0,y0为对应的原图上的坐标 x0=(DWORD)(x1*cosa+y1*sina+num1); y0=(DWORD)(-1.0f*x1*sina+y1*cosa+num2); if((x0>=0)&&(x0 { lpPtr=lpSrc+y0*Wold+x0; lpTempPtr=lpTemp+y1*Wnew+x1; *lpTempPtr=*lpPtr;//进行象素的复制 } } } 4.实验结果对比 四、实验结论 在本实验中,我学到了很多东西,如在图像的平移中,我知道了经典的图像平移有两种算法,一种不会改变图像大小,另一种可以相应扩大图像。 本程序采用了第一种算法。 为了使图像能按照用户指定的水平平移量和垂直平移量移动,首先定义了一个参数设定窗,并在图像平移菜单的事件处理函数中对此对话框进行定义,获取平移量。 然后调用图像平移函数,从而实现将图像中所有的点(像素)都按照指定的平移量水平、垂直移动,平移后的图像上的每一点都可以在原图像中找到对应的点;在图像的缩放中,程序将图像按用户设定的X轴方向的缩放比率和Y轴方向的缩放比率进行缩放。 此操作产生的图像中的像素可能在原图中找不到相应的像素点,因此必须进行近似处理。 此处理有多种方法,可以采用最邻近插值算法,也可以采用别的插值算法。 后者处理效果要好一些,但是运算量也相应增加很多,因此本程序采用前者,即最邻近插值算法。 最后,由于缩放改变了图像的高度和宽度,因此还需要对DIB头文件的高度和宽度信息进行更新;在图像的旋转中,程序将图像以图像中心为原点,按照用户设定的旋转角度进行旋转。 和图像的平移一样,可以采用不同的算法,既可以把转出显示区域的部分图像截去,也可以扩大图像范围以显示所有图像,在本程序中采用后者。 同时为了减小运算量,将图像以图像中心为坐标系原点进行旋转,而不是用户指定的任意一点。 该程序比较简单,还有许多不足: 作为图像处理的一个重要的组成部分,支持任意格式图像的读写操作,是不可缺少的部分。 但本程序考虑到灰度图使用比较方便,故只实现了BMP格式的读写,对其他格式,例如GIF,JPEG,PCX格式的图像则未做处理。 要实现这一部分,必须了解每种格式的存储结构,对不同的格式定义不同的数据结构和函数库….. 通过该程序,我对计算机图像处理的基础理论和操作有了初步认识,对VisualC++开发应用程序的流程、消息映射机制、应用程序执行过程等有了进一步的理解,深刻体会到了C++高效和简洁的特点,为以后的学习打下了一定的基础。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字图像 处理 论文
![提示](https://static.bdocx.com/images/bang_tan.gif)