图像位置变换
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图像位置变换
图像的位置变换是指图像的大小和形状不发生变换,只是将图像进行平移,镜像和旋转的变换等,主要用于图像目标识别的目标配准。
一、图像旋转变换
旋转。一般图像的旋转是以图像的中心为原点,旋转一定的角度,也就是将图像上的所有像素都旋转一个相同的角度。旋转后图像的的大小一般会改变,即可以把转出显示区域的图像截去,或者扩大图像范围来显示所有的图像。图像的旋转变换也可以用矩阵变换来表示。设点),(000y x P 逆时针旋转θ角后的对应点为
),(y x P 。那么,旋转前后点),(000y x P 、),(y x P 的坐标分别是:
⎩⎨
⎧==α
α
cos cos 00r y r x ⎩
⎨
⎧+=+=+=-=-=+=θθθαθαθαθθθαθαθαcos sin sin cos cos sin )sin(sin cos sin sin cos cos )cos(
0000y x r r r y y x r r r x 写成矩阵表达式为
⎥⎥⎥⎦
⎤
⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡110
00cos sin 0sin cos 100y x y x θθθθ 其逆运算为
⎥⎥⎥⎦
⎤
⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡110
0cos sin 0sin cos 100y x y x θθθθ
(3-9) 利用上述方法进行图像旋转时需要注意如下两点:
(1)图像旋转之前,为了避免信息的丢失,一定要有坐标平移。
(2)图像旋转之后,会出现许多空洞点。对这些空洞点必须进行填充处理,否则画面效果不好,一般也称这种操作为插值处理。
以上所讨论的旋转是绕坐标轴原点(0,0)进行的。如果图像旋转是绕一个指定点(a,b)旋转,则先要将坐标系平移到该点,再进行旋转,然后将旋转后的图象平移回原来的坐标原点,这实际上是图像的复合变换。如将一幅图像绕点(a,b)逆时针旋转θ度,首先将原点平移到(a,b),即
⎥⎥
⎥⎦⎤
⎢⎢⎢⎣⎡--=1001001b a A 然后旋转
⎥⎥⎥⎦
⎤
⎢⎢⎢⎣⎡-=00
0cos sin 0sin cos θθ
θθB 然后再平移回来
⎥⎥
⎥⎦⎤
⎢⎢⎢⎣⎡=1001001b a C 综上所述,变换矩阵为A B C T ⋅⋅=。
在旋转变换的Callback 函数下添加代码如下:
function xuanzhuanbianhuan_Callback(hObject, eventdata, handles) % hObject handle to xuanzhuanbianhuan (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); 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(img_1,y,'nearest'); imshow(uint8(img_2));
二、图像平移变换
平移变换是几何变换中最简单的一种变换,是将一幅图像上的所有点都按照给定的偏移量在水平方向沿x 轴、在垂直方向沿y 轴移动。设图像中点P 0(x 0,y 0)进行平移后已到P(x,y),其中x 方向的平移量为Δx,y 方向的平移量为Δy 。那么,点P(x,y)的坐标为:
x=x 0+Δx
y=y 0+Δy
利用齐次坐标系,变换前后图像上的点P 0(x0,y0)和P(x,y)之间的关系可以用如下的矩阵变换表示为:
⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡1x y =⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡∆∆10010x 01y ×⎥⎥⎥⎦
⎤⎢⎢⎢⎣⎡1x 00y 利用坐标变换原理我们进行编程。首先要设计一个GUI 界面方便我们进行图像处理。
首先读入图片,并将其显示在第一个坐标轴上,处理后的图像显示在第二个坐标轴上,形成对比。Matlab 中读入函数imread,打开对话框函数为uigetfile 。
在打开菜单的Callback函数下添加函数激活打开命令。
function dakai_Callback(hObject, eventdata, handles)
[]=uigetfile(...
{'*.bmp;*.png;*.jpeg;*.jpg','Image Files(*.bmp,*.jpg,*.png,*.jpeg)';...
'*.*', 'All Files(*.*)'},...
'Pick an image');
if isequal()||isequal(pathname,0)
return;
end
fpath=[pathname ];
img_1=imread(fpath);
imshow(img_1);
title(' ');
setappdata(handles.figure_by_me,'img_1',img_1);
获得图片后,接下来就是对其进行处理,以实现图像几何变换菜单下的平移变换。在平移变换的Callback函数下添加如下代码:
function pingyibianhuan_Callback(hObject, eventdata, handles)
% 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='pingyibianhuan'
defaults={'0','0'};
xy_cells=str2num(char(inputdlg(prompt,title,1,defaults)));
if isempty(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');