相似、仿射、射影变换区别

刚性变换:只有物体的位置(平移变换)和朝向(旋转变换)发生改变,而形状不变,得到的变换称为刚性变换。

下面分别从等距变换,相似变换,仿射变换,射影变换几个部分分别介绍:

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("射影变换");


猜你喜欢

转载自blog.csdn.net/try_again_later/article/details/81281688