《图像位置变换》由会员分享,可在线阅读,更多相关《图像位置变换(9页珍藏版)》请在金锄头文库上搜索。
1、-图像位置变换图像的位置变换是指图像的大小和形状不发生变换,只是将图像进行平移,镜像和旋转的变换等,主要用于图像目标识别的目标配准。一、 图像旋转变换旋转。一般图像的旋转是以图像的中心为原点,旋转一定的角度,也就是将图像上的所有像素都旋转一个相同的角度。旋转后图像的的大小一般会改变,即可以把转出显示区域的图像截去,或者扩大图像范围来显示所有的图像。图像的旋转变换也可以用矩阵变换来表示。设点逆时针旋转角后的对应点为。则,旋转前后点、的坐标分别是:写成矩阵表达式为其逆运算为 (3-9)利用上述方法进行图像旋转时需要注意如下两点:(1)图像旋转之前,为了避免信息的丢失,一定要有坐标平移。(2)图像旋
2、转之后,会出现许多空洞点。对这些空洞点必须进行填充处理,否则画面效果不好,一般也称这种操作为插值处理。以上所讨论的旋转是绕坐标轴原点(0,0)进行的。如果图像旋转是绕一个指定点(a,b)旋转,则先要将坐标系平移到该点,再进行旋转,然后将旋转后的图象平移回原来的坐标原点,这实际上是图像的复合变换。如将一幅图像绕点(a,b)逆时针旋转度,首先将原点平移到(a,b),即然后旋转然后再平移回来综上所述,变换矩阵为。在旋转变换的Callback函数下添加代码如下:function *uanzhuanbianhuan_Callback(hObject, eventdata, handles)% hObje
3、ct handle to *uanzhuanbianhuan (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA) a*es(handles.a*es_2); prompt=Input Angle; title=Input Angle; def=0; *=inputdlg(prompt,title,2,def); y=str2num(char(*); img_1=getappd
4、ata(handles.figure_by_me,img_1); img_2=imrotate(img_1,y,nearest); imshow(uint8(img_2);二、图像平移变换平移变换是几何变换中最简单的一种变换,是将一幅图像上的所有点都按照给定的偏移量在水平方向沿*轴、在垂直方向沿y轴移动。设图像中点P0(*0,y0)进行平移后已到P(*,y),其中*方向的平移量为*,y方向的平移量为y。则,点P(*,y)的坐标为: *=*0+* y=y0+y 利用齐次坐标系,变换前后图像上的点P0(*0,y0)和P(*,y)之间的关系可以用如下的矩阵变换表示为:=利用坐标变换原理我们进行编程。
5、首先要设计一个GUI界面方便我们进行图像处理。首先读入图片,并将其显示在第一个坐标轴上,处理后的图像显示在第二个坐标轴上,形成对比。Matlab中读入函数imread,打开对话框函数为uigetfile。在打开菜单的Callback函数下添加函数激活打开命令。function dakai_Callback(hObject, eventdata, handles)filename,pathname=uigetfile(. *.bmp;*.png;*.jpeg;*.jpg,Image Files(*.bmp,*.jpg,*.png,*.jpeg);. *.*, All Files(*.*),. P
6、ick 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, handles)%
7、 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=*(0-166),Y(0-166);title=pingyibianhuandefaults=0,0;*y_cells=str2num(char(inputdlg(prompt,title,1,defaults);if isempty(*y_ce
8、lls) msgbo*(为您执行平移操作,提示,help);else *=*y_cells(1);y=*y_cells(2); a*es(handles.a*es_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_*=*; move_y=y; if(size(img_2,3)=1) img_2_M(round(move_*)+1:round(H(1),round(move_y)+1:round(H(2),1:r
9、ound(H(3)=img_2(1:round(H(1)-round(move_*),1:round(H(2)-round(move_y),1:round(H(3);%此处利用矩阵直接进行图像平移操作,其中move_*为在*方向平移尺度大小,move_y为在y轴方向平移的尺度大小H(1)为图像的行数,H(2)为图像的列数,H(3)为图像维数,函数round为取整操作。elseimg_2_M(round(move_*)+1:round(H(1),round(move_y)+1:round(H(2)=img_2(1:round(H(1)-round(move_*),1:round(H(2)-rou
10、nd(move_y);%此处为利用矩阵直接进行灰度图像的平移的操作,其中move_*为在*方向平移尺度的大小,move_y为在y轴方向平移的尺度大小,H(1)为图像的行数,H(2)为图像的列数,函数round为取整操作。 end imshow(uint8(img_2_M);end;当选择“平移变换”菜单时,则弹出如图所示对画框。设定水平平移30个像素,垂直平移65个像素,单击OK,处理结果如下:三、图像镜像变换1、 图像水平镜像图像的水平镜像操作是将图像的左半部分和又半部分以图像垂直中线为中心进行镜像对换。设点P0(*0,y0)进行镜像后的对应点为P(*,y),图像高度为fH,宽度为fW,原图
11、像中P0(*0,y0)经过水平镜像后坐标将变为(fW-*0,y0),其代数表达式为:*=fW-*0y=y0矩阵表达式为:=在水平镜像的Callback函数下添加如下代码:function shuipingjing*iang_Callback(hObject, eventdata, handles)% hObject handle to shuipingjing*iang (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and
12、user data (see GUIDATA)a*es(handles.a*es_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、 图像垂直镜像图像的垂直镜像操作是将图像上半部分和下半部分以图像水平中轴线为中心进行的镜像变换。设点P0(*0,y0)进行镜像后的对应点为P(*,y),
13、图像高度为fH,宽度为fW,原图像中P0(*0,y0)经过垂直镜像后坐标将变为(*0,fH-y0),其代数表达式为:*=*0y=fH-y0矩阵表达式为:= 在图像垂直镜像的Callback函数下添加代码如下:function chuizhijing*aing_Callback(hObject, eventdata, handles)% hObject handle to Untitled_3 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with h
14、andles and user data (see GUIDATA)a*es(handles.a*es_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、图像对角镜像图像对角镜像是将图像以图像水平中轴线和垂直中轴线的交点为中心进行镜像对换。相当于将图像先后进行水平镜像和垂直镜像。设点P0
15、(*0,y0)进行镜像变换后的对应点为P(*,y),图像高度为fH,宽度为fW,原图像中P0(*0,y0)经过对角镜像后坐标将变成(fW-*0,fH-y0),其代数表达式为:*=fW-*0 y=fH-y0矩阵表达式为:在图像对角镜像的Callback函数下添加代码如下:function duijiaojing*iang_Callback(hObject, eventdata, handles)% hObject handle to duijiaojing*iang (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB