图像位置变换_第1页
图像位置变换_第2页
图像位置变换_第3页
图像位置变换_第4页
图像位置变换_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、图像位置变换图像的位置变换是指图像的大小和形状不发生变换,只是将图像进行平移, 镜像和旋转的变换等,主要用于图像目标识别的目标配准。一、图像旋转变换旋转。 一般图像的旋转是以图像的中心为原点, 旋转一定的角度, 也就是将图像上的所有像素都旋转一个相同的角度。 旋转后图像的的大小一般会改变, 即可以把转出显示区域的图像截去, 或者扩大图像范围来显示所有的图像。 图像的旋转变换也可以用矩阵变换来表示。设点P)(Xo,yo)逆时针旋转角后的对应点为P(x,y) 。那么,旋转前后点P0(x0, y0)、 P(x, y) 的坐标分别是:X0 r cosy0 r cosX r cos( y r sin()

2、 rcos cos) rsin cosrsin sinrcos sinX0 cosy0 sinX0 siny0 cos写成矩阵表达式为Xcossin0 X0ysincos0 y010011其逆运算为X cos sin 0 X0ysincos0 y010011(3-9)利用上述方法进行图像旋转时需要注意如下两点:( 1)图像旋转之前,为了避免信息的丢失,一定要有坐标平移。( 2) 图像旋转之后, 会出现许多空洞点。 对这些空洞点必须进行填充处理,否则画面效果不好,一般也称这种操作为插值处理。以上所讨论的旋转是绕坐标轴原点 (0,0) 进行的。如果图像旋转是绕一个指定点 (a,b) 旋转,则先要将

3、坐标系平移到该点,再进行旋转,然后将旋转后的图象平移回原来的坐标原点, 这实际上是图像的复合变换。 如将一幅图像绕点 (a,b)逆时针旋转度,首先将原点平移到 (a,b) ,即10 aA 01 b001然后旋转cos sin0B sincos0000然后再平移回来10aC 01b001综上所述,变换矩阵为 T C B A。在旋转变换的 Callback 函数下添加代码如下:function xuanzhuanbianhuan_Callback(hObject, eventdata, handles)% hObject handle to xuanzhuanbianhuan (see GCBO)

4、% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA) axes(handles.axes_2);prompt=Input Angle;title=Input Angle;def=0;x=inputdlg(prompt,title,2,def);y=str2num(char(x);img_1=getappdata(handles.figure_by_me,img_1);img_2=imrotate(

5、img_1,y,nearest);imshow(uint8(img_2);又住艮嗪M眦理件始付信、图像平移变换平移变换是几何变换中最简单的一种变换,是将一幅图像上的所有点都按照 给定的偏移量在水平方向沿x轴、在垂直方向沿y轴移动。设图像中点Po(x 0,y o) 进行平移后已到P(x,y),其中x方向的平移量为A x,y方向的平移量为A y。那 么,点P(x,y)的坐标为:x=x o+A xy=y o+Ay利用齐次坐标系,变换前后图像上的点R(x0,y0)和P(x,y)之间的关系可以用如下的矩阵变换表示为:x1 0 x xoy = 0 1 y X yo 10 0 11利用坐标变换原理我们进行编

6、程。首先要设计一个GUI界面方便我们进行图 像处理。首先读入图片,并将其显示在第一个坐标轴上,处理后的图像显示在第二个坐标轴上,形成对比。Matlab中读入函数imread,打开对话框函数为uigefile 。 在打开菜单的 Callback 函数下添加函数激活打开命令。function dakai_Callback(hObject, eventdata, handles)filename,pathname=uigetfile(.*.bmp;*.png;*.jpeg;*.jpg,ImageFiles(*.bmp,*.jpg,*.png,*.jpeg);.*.*, All Files(*.*),

7、.Pick an image);if isequal(filename,0)|isequal(pathname,0)return;endfpath=pathname filename;img_1=imread(fpath);imshow(img_1);title( );setappdata(handles.figure_by_me,img_1,img_1);获得图片后, 接下来就是对其进行处理, 以实现图像几何变换菜单下的平移变换。在平移变换的 Callback 函数下添加如下代码:function pingyibianhuan_Callback(hObject, eventdata, han

8、dles)% hObject handle to pingyibianhuan (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)prompt=X(0-166),Y(0-166);title=pingyibianhuandefaults=0,0;xy_cells=str2num(char(inputdlg(prompt,title,1,defaults);if isempty

9、(xy_cells)msgbox( 为您执行平移操作, 提示 ,help);elsex=xy_cells(1);y=xy_cells(2);axes(handles.axes_2);img_1=getappdata(handles.figure_by_me,img_1);img_2=double(img_1);img_2_M=zeros(size(img_2);H=size(img_2);move_x=x;move_y=y;if(size(img_2,3)=1)img_2_M(round(move_x)+1:round(H(1),round(move_y)+1:round(H(2),1:rou

10、 nd(H(3)=img_2(1:round(H(1)-round(move_x),1:round(H(2)-round(move_ y),1:round(H(3);如匕处利用矩阵直接进行图像平移操作,其中move_x为在x方向平移尺度大 小,move_y为在y轴方向平移的尺度大小H (1)为图像的行数,H (2)为图像 的列数, H( 3)为图像维数,函数round 为取整操作。elseimg_2_M(round(move_x)+1:round(H(1),round(move_y)+1:round(H(2)= img_2(1:round(H(1)-round(move_x),1:round(

11、H(2)-round(move_y);% 此处 为利用矩阵直接进行灰度图像的平移的操作,其中move_x为在x方向平移尺度的大小,move_y为在y轴方向平移的尺度大小,H (1)为图像的行数,H (2) 为图像的列数,函数round 为取整操作。endimshow(uint8(img_2_M);end;当选择“平移变换”菜单时,则弹出如图所示对画框。设定水平平移30个像素,垂直平移65个像素,单击OK处理结果如下:三、图像镜像变换1、图像水平镜像图像的水平镜像操作是将图像的左半部分和又半部分以图像垂直中线为中 心进行镜像对换。设点R(x,y )进行镜像后的对应点为P(x,y),图像高度为 宽

12、度为f叫原图像中Po(x,y )经过水平镜像后坐标将变为(fw-xo,yo),其代数表 达式为:x=f wx 0y=y矩阵表达式为:x-10fwxoy=010Xyo10011在水平镜像的Callback函数下添加如下代码:function shuipingjingxiang_Callback(hObject, eventdata, handles)% hObject handle to shuipingjingxiang (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles s

13、tructure with handles and user data (see GUIDATA)axes(handles.axes_2);img_1=getappdata(handles.figure_by_me,img_1);img_1=double(img_1);H=size(img_1);img_2(1:H(1,1),1:H(1,2)=img_1(1:H(1,1),H(1,2):-1:1);imshow(uint8(img_2);点击菜单栏中图像几何处理中的平移变换,结果如下图所示:2、图像垂直镜像图像的垂直镜像操作是将图像上半部分和下半部分以图像水平中轴线为中心进行的镜像变换。设点

14、R(x0,y0)进行镜像后的对应点为P(x,y),图像高度为3,宽度为f四,原图像中Po(x o,y )经过垂直镜像后坐标将变为(x, fH-y。),其 代数表达式为:x=x0 dy=f H-y 0矩阵表达式为:x 100 x0y = 0 -1 fH x y0 10 011在图像垂直镜像的Callback函数下添加代码如下:function chuizhijingxaing_Callback(hObject, eventdata, handles)% hObject handle to Untitled_3 (see GCBO)% eventdata reserved - to be defi

15、ned in a future version of MATLAB% handles structure with handles and user data (see GUIDATA) axes(handles.axes_2);img_1=getappdata(handles.figure_by_me,img_1);img_1=double(img_1);H=size(img_1);img_2(1:H(1,1),1:H(1,2)=img_1(H(1,1):-1:1,1:H(1,2);imshow(uint8(img_2);点击菜单栏图像几何处理中的垂直镜像,结果如下图所示:3、图像对角镜像图

16、像对角镜像是将图像以图像水平中轴线和垂直中轴线的交点为中心进行镜像对换。相当于将图像先后进行水平镜像和垂直镜像。 设点Po(x o,y 0)进行镜像 变换后的对应点为P(x,y),图像高度为fH,宽度为fw,原图像中R(x0,y。经过对 角镜像后坐标将变成(fW-x0,fH-y0),其代数表达式为:X=f w-x 0y=f H-y 0矩阵表达式为:x 1 0 fwX0y 0 -1 fH X y0 10011在图像对角镜像的Callback函数下添加代码如下:function duijiaojingxiang_Callback(hObject, eventdata, handles)% hObject handle to duijiaojingxiang (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)axes(handles.axes_2);img_1=getappdata(handles.figure_by_me,img_1);img_1=double(img_1);H=size(img_1);img_2(1:H(1),1:H(2)=img_1(H(1):

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论