分享

多视角几何1-投影变换及其层次关系[Code]

 SLAM之路 2022-04-24

1、通过简单例子-点进行演示;

clc;clear;%%%1-等距变换示例-3自由度:旋转fai0、平移tx0/ty0% 4个平面上的点的齐次坐标,列向量形式;a=[1 2 2 1 1;   1 1 2 2 1;   1 1 1 1 1];%旋转角度fai;fai0=3.14/4;%平移向量[tx,tx]tx0=0;ty0=0;%m表示方向,m=1:保留方向并且是欧式变换,m=-1:方向m=1;Trans_Euc=[m*cos(fai0) -sin(fai0)   tx0;           m*sin(fai0) cos(fai0)    ty0;           0          0             1];%等距变换,变换后点集,a_trans_euca_trans_euc=Trans_Euc*a;%作图plot(a(1,:),a(2,:))xlim([-6 6.00]);ylim([-6 6.0]);hold on;plot(a_trans_euc(1,:),a_trans_euc(2,:));legend('Original','Eucli');

%%%2-相似变换示例-四自由度:缩放系数s、旋转fai、平移tx/ty% 4个平面上的点的齐次坐标,列向量形式;%旋转角度fai;fai=3.14/4;%平移向量[tx,tx]tx=0;ty=0;%各向均匀缩放系数s=1;Trans_sim=[s*cos(fai) -1*s*sin(fai) tx;           s*sin(fai) s*cos(fai)    ty;           0          0             1];      %相似变换,变换后点集,a_trans_sima_trans_sim=Trans_sim*a;%作图hold on;plot(a_trans_sim(1,:),a_trans_sim(2,:));legend('Original','Eucli','Similar');

%%%3-仿射变换示例-六自由度:各向异性缩放系数lamda1和lamda2、旋转fai1和theta1、平移tx/tyfai1   =  3.14/3;theta1 =  3.14/6;lamda1 =  3;lamda2 =  3;tx1    =  0;ty1    =  0;nul=[0,0];% 3x3平面仿射变换矩阵=[A  t;%                     0' 1 ];% A是2x2矩阵,t是2x1列向量,0'是1x2零向量(nul);% A=R(theta1)R(-fai1)DR(fai1);表示先旋转fai1角度、然后缩放lamda1和lamda2、然后往回旋转fai1角度、最后旋转theta1% D是以lamda1和lamda2为对角元素的矩阵;R_theta1 =  [ cos(theta1) sin(theta1);             sin(theta1) cos(theta1)];R_fai1   =  [ cos(fai1) sin(fai1);             sin(fai1) cos(fai1)];R__fai1  =  [ cos(-1*fai1) sin(-1*fai1);             sin(-1*fai1) cos(-1*fai1)];D        =  [ lamda1    0;             0   lamda2];A        =  R_theta1*R__fai1*D*R_fai1;t=[tx1;ty1];Trans_Aff=  [ A   t;              nul 1];         %仿射变换,变换后点集,a_trans_affa_trans_aff=Trans_Aff*a;%作图hold onplot(a_trans_aff(1,:),a_trans_aff(2,:));legend('Original','Eucli','Similar','Affine');

%%%4-投影变换示例-8自由度:% 3x3平面仿射变换矩阵=[A  t;%                     v' v ];% A是2x2矩阵,t是2x1列向量,v'是1x2向量(vv);A=[2 3;   1 3]/3;t=[0;0];vv=[1 0];v=3;Trans_Pro=[A  t;           vv v];      %投影变换,变换后点集,a_trans_proa_trans_pro=Trans_Pro*a;%作图hold onplot(a_trans_pro(1,:),a_trans_pro(2,:));legend('Original','Eucli','Similar','Affine','Projection');

2、通过复杂例子-图片进行演示;

clc;clear;%%%1-等距变换示例-3自由度:旋转fai0、平移tx0/ty0% 图像路径:pathpath='D:\Program Files\Polyspace\R2019b\bin\ab.jpg';img=imread(path);   %读取图像imshow(img)         %显示图像

%旋转角度fai;fai0=3.14/4;%平移向量[tx,tx]tx0=0;ty0=0;%m表示方向,m=1:保留方向并且是欧式变换,m=-1:方向m=1;Trans_Euc=[m*cos(fai0) -sin(fai0)   tx0;           m*sin(fai0) cos(fai0)    ty0;           0          0             1];%等距变换tform=projective2d(Trans_Euc);  %生成投影变换矩阵out=imwarp(img(:,:,2),tform);   %投影变换矩阵作用于图像imshow(out)                     %显示变换后图像

%%%2-相似变换示例-四自由度:缩放系数s、旋转fai、平移tx/ty% 4个平面上的点的齐次坐标,列向量形式;%旋转角度fai;fai=3.14/4;%平移向量[tx,tx]tx=0;ty=0;%各向均匀缩放系数s=2;Trans_sim=[s*cos(fai) -1*s*sin(fai) tx;           s*sin(fai) s*cos(fai)    ty;           0          0             1];       %相似变换tform=projective2d(Trans_sim);out=imwarp(img(:,:,2),tform);imshow(out)

%%%3-仿射变换示例-六自由度:各向异性缩放系数lamda1和lamda2、旋转fai1和theta1、平移tx/tyfai1   =  3.14/3;theta1 =  3.14/6;lamda1 =  3;lamda2 =  3;tx1    =  0;ty1    =  0;nul=[0,0];% 3x3平面仿射变换矩阵=[A  t;%                     0' 1 ];% A是2x2矩阵,t是2x1列向量,0'是1x2零向量(nul);% A=R(theta1)R(-fai1)DR(fai1);表示先旋转fai1角度、然后缩放lamda1和lamda2、然后往回旋转fai1角度、最后旋转theta1% D是以lamda1和lamda2为对角元素的矩阵;R_theta1 =  [ cos(theta1) sin(theta1);              sin(theta1) cos(theta1)];R_fai1   =  [ cos(fai1) sin(fai1);              sin(fai1) cos(fai1)];R__fai1  =  [ cos(-1*fai1) sin(-1*fai1);              sin(-1*fai1) cos(-1*fai1)];D        =  [ lamda1    0;             0   lamda2];A        =  R_theta1*R__fai1*D*R_fai1;t=[tx1;ty1];Trans_Aff=  [ A   t;              nul 1];          %仿射变换tform=projective2d(Trans_Aff);out=imwarp(img(:,:,2),tform);imshow(out)

%%%4-投影变换示例-8自由度:% 3x3平面仿射变换矩阵=[A  t;%                     v' v ];% A是2x2矩阵,t是2x1列向量,v'是1x2向量(vv);A=[2 3;   1 3]/3;t=[0;0];vv=[1 0];v=3;Trans_Pro=[A  t;           vv v];       %投影变换tform=projective2d(Trans_Pro);out=imwarp(img(:,:,2),tform);imshow(out)

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多