第一章 图像的几何变换.docx
- 文档编号:30080597
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:15
- 大小:173.88KB
第一章 图像的几何变换.docx
《第一章 图像的几何变换.docx》由会员分享,可在线阅读,更多相关《第一章 图像的几何变换.docx(15页珍藏版)》请在冰豆网上搜索。
第一章图像的几何变换
第一章图像的几何变换
实验一平移运算
一、实验目的
1、掌握平移运算的原理。
2、学习在DSP上实现平移运算的方法。
二、实验仪器
1、硬件平台:
C6000数字图像处理实验箱(型号ZY13DSP23BB)、摄像头、USB连接线。
2、软件平台:
Windows98/2000/XP操作系统、CodeComposerStudio2.0ForC6000、ImageRECV2.0forZY13DSP23BB。
三、实验内容
1、平移运算原理
平移(translation)变换是几何变换中最简单的一种。
如图2-1所示,初始坐标为(x0,y0)的点经过平移(tx,ty)(以向右,向下为正方向)后,坐标变为(x1,y1)。
这两点之间的关系是x1=x0+tx,y1=y0+ty,即平移后(x1,y1)点的颜色值等于(x0,y0)点的颜色值。
图1-1 平移的示意图
如下图1-2为原图,图1-3为移动后的图,图像进行平移后,图像的一部分会移出显示区域,比较典型的处理方法是保持图像的大小,将移出的部分截断,由于移动而空出的区域填充为白色[RGB(255,255,255)]。
图1-2 移动前的图
图1-3 移动后的图
2、算法实现代码
voidTranslation(char*inbuf,char*outbuf,intwidth,intheight,intxoff,intyoff)
{
unsignedinti,j;
char*ptr;
//将图像输出区全部填充为白色
memset(outbuf,255,width*height);
ptr=inbuf;
for(i=yoff;i { for(j=xoff;j outbuf[i*width+j]=*ptr++; //输入缓冲区指针指向下一行 ptr+=xoff; } } 四、实验步骤 1、将光盘上的“examples\translation”目录复制到计算机硬盘,去掉目录中所有文件的只读属性去掉; 2、通过USB连接线,将C6000数字图像处理实验箱与PC的USB口相连接,如果PC提示找到新硬件,则表示连接成功; 3、启动CodeComposerStudio2.0ForC6000; 4、启动ImageRECV2.0forZY13DSP23BB; 5、打开“Project”菜单,选择“Open…”菜单项,找到并打开硬盘上目录“examples\translation”,选择translation.pjt工程文件; 6、打开“Project”菜单,选择“Rebuildall…”菜单项,编译程序,生成translation.out文件; 7、打开“File”菜单,选择“Loadprogram…”菜单项,选择“examples\translation\Debug\translation.out”,程序将加载到DSP上; 8、运行: 按快捷键“F5”或选择“Debug”菜单中的“Run”项; 9、点击PC上的应用程序ImageRECV2.0.exe中的“打开USB设备”,再出现“USB口打开成功”后点击“启动接收”,可以在程序界面中将接收到的图像数据实时的显示出来,按键A1为处理前的图像,A2为处理后的结果,用户可以在ImageRECV2.0.exe程序界面中观测到运行结果并进行比较。 实验二镜像运算 一、实验目的 1、掌握镜像运算的原理。 2、学习在DSP上实现镜像运算的方法。 二、实验仪器 1、硬件平台: C6000数字图像处理实验箱(型号ZY13DSP23BB)、摄像头、USB连接线。 2、软件平台: Windows98/2000/XP操作系统、CodeComposerStudio2.0ForC6000、ImageRECV2.0forZY13DSP23BB。 三、实验内容 1、镜像运算原理 镜象(mirror)分水平镜象和垂直镜象两种。 如下图,图2-1所示水平镜象结果,图2-2所示为垂直镜象结果。 图2-1水平镜象 图2-2垂直镜象 镜象的变换矩阵很简单。 设原图宽为w,高为h,变换后,图的宽和高不变。 水平镜象的变换矩阵为: 垂直镜象的变换矩阵为: 2、算法实现代码 //direct=1: 水平镜象;direct=0: 垂直镜象 voidMirror(intdirect,unsignedchar*ibuf,intwidth,intheight) { unsignedinti,j; inttp1,tp2; if(direct) {//水平镜象 for(i=0;i { for(j=0;j { tp1=width-1-j; tp2=ibuf[i*width+j]; ibuf[i*width+j]=ibuf[i*width+tp1]; ibuf[i*width+tp1]=tp2; } } } else {//垂直镜象 for(i=0;i { for(j=0;j { tp1=height-1-i; tp2=ibuf[i*width+j]; ibuf[i*width+j]=ibuf[tp1*width+j]; ibuf[tp1*width+j]=tp2; } } } } 四、实验步骤 1、将光盘上的“examples\mirror”目录复制到计算机硬盘,去掉目录中所有文件的只读属性; 2、通过USB连接线,将C6000数字图像处理实验箱与PC的USB口相连接,如果PC提示找到新硬件,则表示连接成功; 3、启动CodeComposerStudio2.0ForC6000; 4、启动ImageRECV2.0forZY13DSP23BB; 5、打开“Project”菜单,选择“Open…”菜单项,找到并打开硬盘上目录“examples\mirror”,选择mirror.pjt工程文件; 6、打开“Project”菜单,选择“Rebuildall…”菜单项,编译程序,生成mirror.out文件; 7、打开“File”菜单,选择“Loadprogram…”菜单项,选择“examples\mirror\Debug\mirror.out”,程序将加载到DSP上; 8、运行: 按快捷键“F5”或选择“Debug”菜单中的“Run”项; 9、点击PC上的应用程序ImageRECV2.0.exe中的“打开USB设备”,再出现“USB口打开成功”后点击“启动接收”,可以在程序界面中将接收到的图像数据实时的显示出来,按键A1为处理前的图像,A2为处理后的结果,用户可以在ImageRECV2.0.exe程序界面中观测到运行结果并进行比较。 实验三转置运算 一、实验目的 1、掌握转置运算的原理。 2、学习在DSP上实现转置运算的方法。 二、实验仪器 1、硬件平台: C6000数字图像处理实验箱(型号ZY13DSP23BB)、摄像头、USB连接线。 2、软件平台: Windows98/2000/XP操作系统、CodeComposerStudio2.0ForC6000、ImageRECV2.0forZY13DSP23BB。 三、实验内容 1、转置运算原理 转置(transpose)是指将x,y坐标对换,如图3-1是对图1-1进行转置后的结果。 值得注意的是,转置和旋转900是有区别的。 图3-1图1-1转置后的结果 转置的变换矩阵很简单: 2、算法实现代码 voidTranspose(unsignedchar*ibuf,intwidth,intheight) { unsignedinti,j; unsignedchar*tp,*tp1=yc; for(i=0;i { tp=tp1++; for(j=0;j { *tp=*ibuf++; tp+=height; } } } 四、实验步骤 1、将光盘上的“examples\transpose”目录复制到计算机硬盘,去掉目录中所有文件的只读属性; 2、通过USB连接线,将C6000数字图像处理实验箱与PC的USB口相连接,PC提示找到新硬件,则表示连接成功; 3、启动CodeComposerStudio2.0ForC6000; 4、启动ImageRECV2.0forZY13DSP23BB; 5、打开“Project”菜单,选择“Open…”菜单项,找到并打开硬盘上目录“examples\transpose”,选择transpose.pjt工程文件; 6、打开“Project”菜单,选择“Rebuildall…”菜单项,编译程序,生成transpose.out文件; 7、打开“File”菜单,选择“Loadprogram…”菜单项,选择“examples\transpose\Debug\transpose.out”,程序将加载到DSP上; 8、运行: 按快捷键“F5”或选择“Debug”菜单中的“Run”项; 9、点击PC上的应用程序ImageRECV2.0.exe中的“打开USB设备”,再出现“USB口打开成功”后点击“启动接收”,可以在程序界面中将接收到的图像数据实时的显示出来,按键A1为处理前的图像,A2为处理后的结果,用户可以在ImageRECV2.0.exe程序界面中观测到运行结果并进行比较。 实验四缩放运算 一、实验目的 1、掌握缩放运算的原理。 2、学习在DSP上实现缩放运算的方法。 二、实验仪器 1、硬件平台: C6000数字图像处理实验箱(型号ZY13DSP23BB)、摄像头、USB连接线。 2、软件平台: Windows98/2000/XP操作系统、CodeComposerStudio2.0ForC6000、ImageRECV2.0forZY13DSP23BB。 三、实验内容 1、缩放运算原理 假设放大因子为ratio,缩放(zoom)的变换矩阵很简单: 0 一般情况下,为了避免新图过大或过小,在程序中限制0.25≤ratio≤4。 对于图像缩小的处理比较简单,根据因子ratio,每1/ratio个象素取一个象素,组成新的图像即可,例如ratio=0.5时,每2个象素取一个即可。 对于图像放大的情况,由于放大时产生了新的象素,以及浮点数的操作,得到的坐标可能并不是整数,一般采用的做法是找与之最临近的点。 而实际上,更精确的做法是采用插值(interpolation),即利用邻域的象素来估计新的象素值。 关于插值,有兴趣的读者可以参考“数值分析”方面的书籍。 如下图4-1所示,对图1-2进行0.5倍缩放效果: 图4-1ratio=0.5 2、算法实现代码 voidZoom(unsignedchar*ibuf,intwidth,intheight,floatZoomRatio) { intnum,Wnew,Hnew,x0,y0,x1,y1; num=(float)(1.0/ZoomRatio); //新图宽度和高度 Wnew=width*ZoomRatio+0.5; Hnew=height*ZoomRatio+0.5; for(y1=0;y1 for(x1=0;x1 { x0=x1*num; y0=y1*num; if((x0>=0)&&(x0 yc++=ibuf[y0*width+x0]; } } 四、实验步骤 1、将光盘上的“examples\zoom”目录复制到计算机硬盘,去掉目录中所有文件的只读属性; 2、通过USB连接线,将C6000数字图像处理实验箱与PC的USB口相连接,如果PC提示找到新硬件,则表示连接成功; 3、启动CodeComposerStudio2.0ForC6000; 4、启动ImageRECV2.0forZY13DSP23BB; 5、打开“Project”菜单,选择“Open…”菜单项,找到并打开硬盘上目录“examples\zoom”,选择zoom.pjt工程文件; 6、打开“Project”菜单,选择“Rebuildall…”菜单项,编译程序,生成zoom.out文件; 7、打开“File”菜单,选择“Loadprogram…”菜单项,选择“examples\zoom\Debug\zoom.out”,程序将加载到DSP上; 8、运行: 按快捷键“F5”或选择“Debug”菜单中的“Run”项; 9、点击PC上的应用程序ImageRECV2.0.exe中的“打开USB设备”,再出现“USB口打开成功”后点击“启动接收”,可以在程序界面中将接收到的图像数据实时的显示出来,按键A1为处理前的图像,A2为处理后的结果,用户可以在ImageRECV2.0.exe程序界面中观测到运行结果并进行比较。 实验五旋转运算 一、实验目的 1、掌握旋转运算的原理。 2、学习在DSP上实现旋转运算的方法。 二、实验仪器 1、硬件平台: C6000数字图像处理实验箱(型号ZY13DSP23BB)、摄像头、USB连接线。 2、软件平台: Windows98/2000/XP操作系统、CodeComposerStudio2.0ForC6000、ImageRECV2.0forZY13DSP23BB。 三、实验内容 1、旋转运算原理 旋转(rotation)就是将图像以某一点为圆心,转动一定的角度。 通常的做法是以图像的中心为圆心旋转,如图5-1旋转30度(顺时针方向)后如图5-2所示。 可以看出,旋转后图像变大了。 图5-1 旋转前的图 图5-2 旋转后的图 在坐标系中,将一个点顺时针旋转a角后的坐标变换公式如图5-3所示,r为该点到原点的距离,在旋转过程中,r保持不变;b为r与x轴之间的夹角。 图5-3 旋转示意图 旋转前: x0=rcosb;y0=rsinb 旋转a角度后: x1=rcos(b-a)=rcosbcosa+rsinbsina=x0cosa+y0sina; y1=rsin(b-a)=rsinbcosa-rcosbsina=-x0sina+y0cosa; 上面的公式中,坐标系xoy是以图像的中心为原点,向右为x轴正方向,向上为y轴正方向。 它和以图像左上角点为原点o`,向右为x`轴正方向,向下为y`轴正方向的坐标系x`o`y`之间的转换关系如图5-4所示。 图5-4 两种坐标系间的转换关系 设图象的宽为w,高为h,容易得到: 逆变换为: 有了上面的公式,可以把变换分成三步: (1)将坐标系o’变成o; (2)将该点顺时针旋转a角; (3)将坐标系o变回o’。 要注意的是,由于有浮点运算,计算出来点的坐标可能不是整数,采用取整处理,即找最接近的点,这样会带来一些误差(图像可能会出现锯齿)。 2、算法实现代码 为了使程序便于理解,在例程中主要采用了顺时针45度的旋转。 //旋转Rotation,将图像进行45度旋转 voidRotation(unsignedchar*indata,unsignedchar*outdata,intWidth,intHeight,int*nWidth,int*nHeight) { intx1,y1,x0,y0; floatcosa=0.7071,sina=0.7071; intWnew=cosa*(Width+Height);//旋转后新图的宽 intHnew=cosa*(Width+Height);//旋转后新图的高 intnum1=(Width>>1); intnum2=(Height>>1); num1=num1-cosa*cosa*(Width+Height); for(y1=0;y1 { for(x1=0;x1 { x0=(x1*cosa+y1*sina+num1); y0=(-x1*sina+y1*cosa+num2); if((x0>=0)&&(x0 outdata[y1*Wnew+x1]=indata[y0*Width+x0]; } } *nWidth=Wnew; *nHeight=Hnew; } 四、实验步骤 1、将光盘上的“examples\Rotation”目录复制到计算机硬盘,去掉目录中所有文件的只读属性; 2、通过USB连接线,将C6000数字图像处理实验箱与PC的USB口相连接,如果PC提示找到新硬件,则表示连接成功; 3、启动CodeComposerStudio2.0ForC6000; 4、启动ImageRECV2.0forZY13DSP23BB; 5、打开“Project”菜单,选择“Open…”菜单项,找到并打开硬盘上目录“examples\Rotation”,选择Rotation.pjt工程文件; 6、打开“Project”菜单,选择“Rebuildall…”菜单项,编译程序,生成Rotation.out文件; 7、打开“File”菜单,选择“Loadprogram…”菜单项,选择“examples\Rotation\Debug\Rotation.out”,程序将加载到DSP上; 8、运行: 按快捷键“F5”或选择“Debug”菜单中的“Run”项; 9、点击PC上的应用程序ImageRECV2.0.exe中的“打开USB设备”,再出现“USB口打开成功”后点击“启动接收”,可以在程序界面中将接收到的图像数据实时的显示出来,按键A1为处理前的图像,A2为处理后的结果,用户可以在ImageRECV2.0.exe程序界面中观测到运行结果并进行比较。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第一章 图像的几何变换 图像 几何 变换