图像的等距变换相似变换仿射变换射影变换及其matlab实现.docx
- 文档编号:28373200
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:8
- 大小:16.94KB
图像的等距变换相似变换仿射变换射影变换及其matlab实现.docx
《图像的等距变换相似变换仿射变换射影变换及其matlab实现.docx》由会员分享,可在线阅读,更多相关《图像的等距变换相似变换仿射变换射影变换及其matlab实现.docx(8页珍藏版)》请在冰豆网上搜索。
图像的等距变换相似变换仿射变换射影变换及其matlab实现
图像的等距变换,相似变换,仿射变换,射影变换及其matlab实现
第二次写CSDN文档,上一篇的排版实在太烂了,于是决定认真学习一下markdown的语法。
好了,废话不多说,今天,我们学习一下图像(2维平面)到图像(2维平面)的四种变换,等距变换,相似变换,仿射变换,投影变换首先介绍它的原理,最后介绍matlab的实现
1.数学基础
射影变换矩阵H属于射影群PL(n)中的一个,仿射群是由PL(3)中最后一行为(0,0,1)的矩阵组成的子群,包括仿射群,欧式群,其中欧式群是仿射群的子群,其左上角的矩阵是正交的,当它的行列式为1是称为定向欧式群,距离是欧式群的不变量,但不是相似群的不变量,而夹角是这两个群的不变量。
听了这么多群,不变量的数学概念,可能有点晕,下面我用最直观的语言解释。
线性空间中的线性变换可以用矩阵来描述,因此我们用矩阵来刻画这四种变换。
我们以数学系的经典代数入门教材北大版的《高等代数》为例,研究这些变换是如何进行的2.等距变换
等距变换(isometrictransform),保持欧式距离不变,当图像中的点用齐次坐标表示时,变换矩阵如下所示:
?
?
?
x′y′1?
?
?
=?
?
?
εcos(θ)εsin(θ)0?
εsin(θ)?
εcos(θ)0txty1?
?
?
?
?
?
xy1?
?
?
当ε=1是保向的,ε=?
1是逆向的,等距变换可以更简单的写成
x′=HEx=(R0t1)x
其中R是旋转矩阵。
t是平移矢量,有3个自由度(1旋转角θ+两个平移tx,ty),需要2组点4个方程求解,等距变换的不变量是:
长度,角度,面积。
用matlab实现等距变换如下:
clear;closeall;clc
I=imread('book1.jpg');
figure,imshow(I);
[w,h]=size(I);
theta=pi/4;
t=[100,100];
s=0.5;
%testEucludiantransform
H_e=projective2d([cos(theta)-sin(theta)t
(1);
sin(theta)cos(theta)t
(2);
001]');
newimg=imwarp(I,H_e);
figure,imshow(newimg);
12345678910111213141234567891011121314
可以看出,等距变换就是对图像的旋转+平移
3.相似变换
相似变换(similaritytransform):
等距变换+均匀缩放,当图像中的点用齐次坐标表示时,变换矩阵如下所示:
?
?
?
x′y′1?
?
?
=?
?
?
scos(θ)ssin(θ)0?
ssin(θ)?
scos(θ)0txty1?
?
?
?
?
?
xy1?
?
?
当s=1是保向的,s=?
1是逆向的,相似变换可以更简单的写成
x′=HSx=(sR0t1)x
其中R是旋转矩阵。
t是平移矢量,s是缩放尺度,有4个自由度(1旋转角θ+2个平移tx,ty+1个缩放尺度),需要2组点4个方程求解,相似变换的不变量是:
角度,长度的比例,面积的比例。
用matlab实现相似变换如下:
clear;closeall;clc
I=imread('book1.jpg');
figure,imshow(I);
[w,h]=size(I);
theta=pi/4;
t=[100,100];
s=0.5;
%%testsimilartransform
H_s=projective2d([s*cos(theta)-s*sin(theta)t
(1);
s*sin(theta)s*cos(theta)t
(2);
001]');
newimg=imwarp(I,H_s);
figure,imshow(newimg);
123456789101112131415123456789101112131415
可以看出,等距变换就是对图像的旋转+平移+缩放,这个图相对原图是变小了一些。
4.仿射变换
仿射变换(affinetransform):
非奇异变换+均匀缩放,当图像中的点用齐次坐标表示时,变换矩阵如下所示:
?
?
?
x′y′1?
?
?
=?
?
?
a11a210a12a220txty1?
?
?
?
?
?
xy1?
?
?
仿射变换可以更简单的写成
x′=HAX=(A0t1)x
其中A是仿射矩阵。
t是平移矢量,s是缩放尺度,有6个自由度(4个仿射矩阵的元素+2个平移tx,ty),需要2组点4个方程求解。
这里多说一句,仿射变换的A矩阵是可以做SVD分解的,即:
A=R(θ)R(?
?
)DR(?
)
D=diag(λ1,λ2)仿射变换A可以看作是一个旋转?
+x,y方向按照比例因子λ1,λ2的缩放+回转?
?
+旋转θ的复合变换,
仿射变换的不变量是:
平行线,平行线的长度的比例,面积的比例。
用matlab实现仿射变换如下:
clear;closeall;clc
I=imread('book1.jpg');
figure,imshow(I);
[w,h]=size(I);
theta=pi/4;
t=[100,100];
s=0.5;
%%testaffinetransform
H_a=projective2d([10.5t
(1);
00.5t
(2);
001]');
newimg=imwarp(I,H_a);
figure,imshow(newimg);
123456789101112131415123456789101112131415
可以看出,仿射变换就是对图像的旋转+平移+缩放+切变(shear),相比前两种变换图像的形状发生了改变,但是原图中的平行线仍然保持平行。
5.射影变换
射影变换(projectiontransform):
当图像中的点的齐次坐标的一般非奇异线性变换。
有些文献中把射影变换矩阵称为单应性矩阵变换矩阵如下所示:
?
?
?
x′y′1?
?
?
=?
?
?
h11h21h31h12h22h32h13h231?
?
?
?
?
?
xy1?
?
?
仿射变换可以更简单的写成
x′=HAX=(AvTtv)x
其中A是旋转矩阵。
t是平移矢量,s是缩放尺度,有8个自由度(矩阵中的8个h),需要4组点8个方程求解。
同样的,射影变换的A矩阵是可以做分解的,QR分解,SVD分解都有各自不同的含义。
我们常说的矩阵内外参数矩阵就是QR分解中的一种(QR分解不唯一),即把单应性矩阵分解成=内参矩阵×外参矩阵。
给定世界坐标系中的二维平面,用相机对二维平面拍照,通过对应点求拍摄照片的单应性矩阵(射影矩阵)的过程就称为相机标定,直接用代数的方法求解参数会有一定的误差,在张正友的标定方法中,讲的就是如何通过迭代使得误差最小。
具体可以见我写的第一篇文章张正友相机标定法。
对一般的两张照片也可以求单应性矩阵,具体的应用就是把其中的一张变换到另一张上,进一步可以做图像融合。
射影变换的不变量是:
长度的交比。
用matlab实现射影变换如下:
clear;closeall;clc
I=imread('book1.jpg');
figure,imshow(I);
[w,h]=size(I);
theta=pi/4;
t=[100,100];
s=0.5;
%%testprojectivetransform
H_P=projective2d([0.765,-0.122,-0.0002;
-0.174,0.916,9.050e-05;
105.018,123.780,1]);
newimg=imwarp(I,H_P);
figure,imshow(newimg);
123456789101112131415123456789101112131415
可以看出,射影变换就是对图像的旋转+平移+缩放+切变+射影,相比前三种变换图像的形变更为自由,原图中的平行线经过变换之后已经不在平行,而可能相交于一点,射影变换就是把理想点(平行直线在无穷远处相交)变换到图像上。
6应用
说了这么多,下边举一个简单的小应用,就是把通过求两幅对应点的单应性矩阵(射影矩阵),把一种图片变换成另一张的形状。
如图:
选择两幅图像对应的四个点
第一幅第二幅变换的结果
这样就成功把第二幅图片变成第一副图片的角度
下面附上代码
%%Initial
clear;
clc;
img_num=2;%thenumberofimage
compress_scale=0.4;%defineimagecompressscale
points_p=[00;10;21;20];%definecordinateof2Dplainin3Dspace
%%defineacellthatloadimage
Image=cell(1,img_num);
%%readtheimage
Image{1,1}=imread('book1.jpg');
Image{1,2}=imread('book2.jpg');
%%imagecompression,transformrgbtogray,andselectfeaturepoints
feature=[];
fori=1:
img_num
Image{1,i}=imresize(Image{1,i},compress_scale);
I{:
:
i}=Image{1,i};
Image{1,i}=rgb2gray(Image{1,i});
imshow(Image{1,i});
holdon;
forj=1:
4
[x,y]=ginput
(1);%selectthecorner
x=round(x);
y=round(y);
plot(x,y,'ro');
feature(j,2*i-1)=x;%featureisamatrixcontainingcornercordination
feature(j,2*i)=y;
end
closeall;
end
%%calculatehomegraphymatrixforeachmatrix
featurep1=feature(:
1:
2);
featurep2=feature(:
3:
4);
h=calc_homography(featurep2,featurep1);
Im=I{:
:
2};
[a,b]=size(I);
tform=projective2d(h);
J=imwarp(Im,tform);%matlab自带的处理图像变换的函数
figure,imshow(I{:
:
1});
figure,imshow(I{:
:
2});
figure,imshow(J)12345678910111213141516171819202122232425262728293031323334353637383940414243444546471234567891011121314151617181920212223242526272829303132333435363738394041424344454647
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图像 等距 变换 相似 射影 及其 matlab 实现