刚性变换:只有物体的位置(平移变换)和朝向(旋转变换)发生改变,而形状不变,得到的变换称为刚性变换。
下面分别从等距变换,相似变换,仿射变换,射影变换几个部分分别介绍:
1、等距变换
它相当于是平移变换(t)和旋转变换(R)的复合,等距变换前后长度,面积,线线之间的角度都不变。
自由度 6 (3+3)
2、相似变换
等距变换和均匀缩放(S)的一个复合,类似相似三角形,体积比不变。
自由度 7 (6+1)
3、仿射变换(正交投影)
一个平移变换(t)和一个非均匀变换(A)的复合,A是可逆矩阵,并不要求是正交矩阵。
仿射变换的不变量是:平行线,平行线的长度的比例,面积的比例
自由度12 (9+3)
可以看出,仿射变换就是对图像的旋转+平移+缩放+切变(shear),相比前两种变换图像的形状发生了改变,但是原图中的平行线仍然保持平行。
4、射影变换(透视变换)
当图像中的点的齐次坐标的一般非奇异线性变换
射影变换的不变量是:重合关系、长度的交比
自由度 15 (整个矩阵除以v右下角为1)
最后一行为0 0 0 1时就是仿射变换
可以看出,射影变换就是对图像的旋转+平移+缩放+切变+射影,相比前三种变换图像的形变更为自由,原图中的平行线经过变换之后已经不在平行,而可能相交于一点,射影变换就是把理想点(平行直线在无穷远处相交)变换到图像上。
总结:仿射变换位于射影变换和相似变换之间,仿射变换推广相似变换使得夹角不再保持不变,造成物体形状在变换后产生歪斜,他在变换中,直线只与方向有关,与位置无关,不会像射影变换那样,越远越小。。。。。。
仿真代码
clear;close all;clc
I=imread('1.png');
figure(1),subplot(1,5,1);imshow(I);title("原图");
[w,h]=size(I);
theta=pi/4;
t=[100,100];
s=0.2;
% 等距变换
H_e=projective2d([cos(theta) -sin(theta) t(1);
sin(theta) cos(theta) t(2);
0 0 1]');
newimg=imwarp(I,H_e);
subplot(1,5,2);imshow(newimg);title("等距变换");
% 相似变换
H_s=projective2d([s*cos(theta) -s*sin(theta) t(1);
s*sin(theta) s*cos(theta) t(2);
0 0 1]');
newimg=imwarp(I,H_s);
subplot(1,5,3);imshow(newimg);title("相似变换");
% 仿射变换
H_a=projective2d([1 0.5 t(1);
0 0.5 t(2);
0 0 1]');
newimg=imwarp(I,H_a);
subplot(1,5,4);imshow(newimg);title("仿射变换");
% 射影变换
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);
subplot(1,5,5);imshow(newimg);title("射影变换");