图像位置变换.docx
- 文档编号:11965986
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:14
- 大小:1.31MB
图像位置变换.docx
《图像位置变换.docx》由会员分享,可在线阅读,更多相关《图像位置变换.docx(14页珍藏版)》请在冰豆网上搜索。
图像位置变换
图像位置变换
图像的位置变换是指图像的大小和形状不发生变换,只是将图像进展平移,镜像和旋转的变换等,主要用于图像目标识别的目标配准。
一、图像旋转变换
旋转。
一般图像的旋转是以图像的中心为原点,旋转一定的角度,也就是将图像上的所有像素都旋转一个一样的角度。
旋转后图像的的大小一般会改变,即可以把转出显示区域的图像截去,或者扩大图像X围来显示所有的图像。
图像的旋转变换也可以用矩阵变换来表示。
设点
逆时针旋转
角后的对应点为
。
那么,旋转前后点
、
的坐标分别是:
写成矩阵表达式为
其逆运算为
(3-9)
利用上述方法进展图像旋转时需要注意如下两点:
〔1〕图像旋转之前,为了防止信息的丧失,一定要有坐标平移。
〔2〕图像旋转之后,会出现许多空洞点。
对这些空洞点必须进展填充处理,否那么画面效果不好,一般也称这种操作为插值处理。
以上所讨论的旋转是绕坐标轴原点(0,0)进展的。
如果图像旋转是绕一个指定点(a,b)旋转,那么先要将坐标系平移到该点,再进展旋转,然后将旋转后的图象平移回原来的坐标原点,这实际上是图像的复合变换。
如将一幅图像绕点(a,b)逆时针旋转
度,首先将原点平移到(a,b),即
然后旋转
然后再平移回来
综上所述,变换矩阵为
。
在旋转变换的Callback函数下添加代码如下:
functionxuanzhuanbianhuan_Callback(hObject,eventdata,handles)
%hObjecthandletoxuanzhuanbianhuan(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
axes(handles.axes_2);
prompt={'InputAngle'};
title='InputAngle';
def={'0'};
x=inputdlg(prompt,title,2,def);
y=str2num(char(x));
img_1=getappdata(handles.figure_by_me,'img_1');
img_2=imrotate(img_1,y,'nearest');
imshow(uint8(img_2));
二、图像平移变换
平移变换是几何变换中最简单的一种变换,是将一幅图像上的所有点都按照给定的偏移量在水平方向沿x轴、在垂直方向沿y轴移动。
设图像中点P0(x0,y0)进展平移后已到P(x,y),其中x方向的平移量为Δx,y方向的平移量为Δy。
那么,点P(x,y)的坐标为:
x=x0+Δx
y=y0+Δy
利用齐次坐标系,变换前后图像上的点P0(x0,y0)和P(x,y)之间的关系可以用如下的矩阵变换表示为:
=
×
利用坐标变换原理我们进展编程。
首先要设计一个GUI界面方便我们进展图像处理。
首先读入图片,并将其显示在第一个坐标轴上,处理后的图像显示在第二个坐标轴上,形成比照。
Matlab中读入函数imread,翻开对话框函数为uigetfile。
在翻开菜单的Callback函数下添加函数激活翻开命令。
functiondakai_Callback(hObject,eventdata,handles)
[filename,pathname]=uigetfile(...
{'*.bmp;*.png;*.jpeg;*.jpg','ImageFiles(*.bmp,*.jpg,*.png,*.jpeg)';...
'*.*','AllFiles(*.*)'},...
'Pickanimage');
ifisequal(filename,0)||isequal(pathname,0)
return;
end
fpath=[pathnamefilename];
img_1=imread(fpath);
imshow(img_1);
title('');
setappdata(handles.figure_by_me,'img_1',img_1);
获得图片后,接下来就是对其进展处理,以实现图像几何变换菜单下的平移变换。
在平移变换的Callback函数下添加如下代码:
functionpingyibianhuan_Callback(hObject,eventdata,handles)
%hObjecthandletopingyibianhuan(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
prompt={'X(0-166)','Y(0-166)'};
title='pingyibianhuan'
defaults={'0','0'};
xy_cells=str2num(char(inputdlg(prompt,title,1,defaults)));
ifisempty(xy_cells)
msgbox('为您执行平移操作,'提示,'help');
else
x=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:
round(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为取整操作。
else
img_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(H
(2))-round(move_y));%此处为利用矩阵直接进展灰度图像的平移的操作,其中move_x为在x方向平移尺度的大小,move_y为在y轴方向平移的尺度大小,H〔1〕为图像的行数,H〔2〕为图像的列数,函数round为取整操作。
end
imshow(uint8(img_2_M));
end;
中选择“平移变换〞菜单时,那么弹出如下图对画框。
设定水平平移30个像素,垂直平移65个像素,单击OK,处理结果如下:
三、图像镜像变换
1、图像水平镜像
图像的水平镜像操作是将图像的左半局部和又半局部以图像垂直中线为中心进展镜像对换。
设点P0(x0,y0)进展镜像后的对应点为P(x,y),图像高度为fH,宽度为fW,原图像中P0(x0,y0)经过水平镜像后坐标将变为〔fW-x0,y0〕,其代数表达式为:
x=fW-x0
y=y0
矩阵表达式为:
=
×
在水平镜像的Callback函数下添加如下代码:
functionshuipingjingxiang_Callback(hObject,eventdata,handles)
%hObjecthandletoshuipingjingxiang(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
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、图像垂直镜像
图像的垂直镜像操作是将图像上半局部和下半局部以图像水平中轴线为中心进展的镜像变换。
设点P0(x0,y0)进展镜像后的对应点为P(x,y),图像高度为fH,宽度为fW,,原图像中P0(x0,y0)经过垂直镜像后坐标将变为〔x0,fH-y0〕,其代数表达式为:
x=x0
y=fH-y0
矩阵表达式为:
=
×
在图像垂直镜像的Callback函数下添加代码如下:
functionchuizhijingxaing_Callback(hObject,eventdata,handles)
%hObjecthandletoUntitled_3(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
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、图像对角镜像
图像对角镜像是将图像以图像水平中轴线和垂直中轴线的交点为中心进展镜像对换。
相当于将图像先后进展水平镜像和垂直镜像。
设点P0(x0,y0)进展镜像变换后的对应点为P(x,y),图像高度为fH,宽度为fW,原图像中P0(x0,y0)经过对角镜像后坐标将变成(fW-x0,fH-y0),其代数表达式为:
x=fW-x0
y=fH-y0
矩阵表达式为:
×
在图像对角镜像的Callback函数下添加代码如下:
functionduijiaojingxiang_Callback(hObject,eventdata,handles)
%hObjecthandletoduijiaojingxiang(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
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:
1,H
(2):
-1:
1);
imshow(uint8(img_2));
点击菜单栏中图像几何处理中的镜像变换,结果如下列图所示:
四、总结
几何变换是最常见的图像处理手段,通过对变形的图像进展几何校正,可以得出准确的图像。
常用的几何变换功能包括图像的平移、图像的镜像变换、图像的转置、图像的缩放、图像的旋转等等。
目前数字图像处理的应用越来越广泛,已经渗透到工业、航空航天、军事等各个领域,在国民经济中发挥越来越大的作用。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图像 位置 变换