图像位置变换.docx

上传人:b****8 文档编号:9429348 上传时间:2023-05-19 格式:DOCX 页数:14 大小:1.33MB
下载 相关 举报
图像位置变换.docx_第1页
第1页 / 共14页
图像位置变换.docx_第2页
第2页 / 共14页
图像位置变换.docx_第3页
第3页 / 共14页
图像位置变换.docx_第4页
第4页 / 共14页
图像位置变换.docx_第5页
第5页 / 共14页
图像位置变换.docx_第6页
第6页 / 共14页
图像位置变换.docx_第7页
第7页 / 共14页
图像位置变换.docx_第8页
第8页 / 共14页
图像位置变换.docx_第9页
第9页 / 共14页
图像位置变换.docx_第10页
第10页 / 共14页
图像位置变换.docx_第11页
第11页 / 共14页
图像位置变换.docx_第12页
第12页 / 共14页
图像位置变换.docx_第13页
第13页 / 共14页
图像位置变换.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

图像位置变换.docx

《图像位置变换.docx》由会员分享,可在线阅读,更多相关《图像位置变换.docx(14页珍藏版)》请在冰点文库上搜索。

图像位置变换.docx

图像位置变换

图像位置变换

图像的位置变换是指图像的大小和形状不发生变换,只是将图像进行平移,镜像和旋转的变换等,主要用于图像目标识别的目标配准。

1、图像旋转变换

旋转。

一般图像的旋转是以图像的中心为原点,旋转一定的角度,也就是将图像上的所有像素都旋转一个相同的角度。

旋转后图像的的大小一般会改变,即可以把转出显示区域的图像截去,或者扩大图像范围来显示所有的图像。

图像的旋转变换也可以用矩阵变换来表示。

设点

逆时针旋转

角后的对应点为

那么,旋转前后点

的坐标分别是:

写成矩阵表达式为

其逆运算为

(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模板 > 其它模板

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2