图像位置变换

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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');

相关文档
最新文档