文档

创建一个转换图像的画廊

这个例子通过对棋盘图像应用不同的变换,展示了几何变换的许多属性。

概述

二维几何变换是将欧几里得平面上的每个点与欧几里得平面上的另一个点相关联的映射。在这些例子中,几何变换是由一个规则定义的,该规则告诉我们如何将具有笛卡尔坐标(x,y)的点映射到具有笛卡尔坐标(u,v)的点。棋盘图案有助于可视化输入图像平面上的坐标网格和每次变换引入的失真类型。

图1:创建棋盘

棋盘生成一个具有矩形瓦片和四个独特角的图像,这使得很容易看到棋盘图像是如何因几何变换而扭曲的。

运行此示例一次之后,尝试更改映像到一个更大的棋盘,或者到你最喜欢的图像。

I = checkerboard(10,2);imshow (I)标题(“原始”

图2:将非反射相似性应用于棋盘

非反射性相似转换可能包括旋转、缩放和平移。形状和角度被保留。平行线保持平行。直线保持直线。

对于非反射相似性,

T是一个3乘3矩阵,它取决于4个参数。

尝试改变这4个参数。量表= 1.2;比例因子角度= 40*pi/180;%旋转角Tx = 0;% x转换Ty = 0;% y平移Sc =刻度*cos(角度);Ss =刻度*sin(角度);T = [sc -ss 0;Ss sc 0;Tx ty 1];

由于非反射相似性是仿射转换的子集,因此创建一个affine2d对象使用:

t_nonsim = affine2d(T);(I,t_nonsim,“FillValues”3);图中,imshow (I_nonreflective_similarity);标题(“无反射相似”

关于翻译:如果你改变tx到非零值时,您将注意到它对输出图像没有影响。如果你想看到对应于变换的坐标,包括平移,试试这个:

[I_nonreflective_similarity,RI] = imwarp(I,t_nonsim,“FillValues”3);图,imshow(I_nonreflective_similarity,RI)轴标题(“无反射相似”

注意,传递输出空间引用对象国际扶轮从imwarp揭示翻译。属性中的'OutputView'名称-值对可以指定要查看输出图像的哪个部分imwarp函数。

图3:将相似度应用于棋盘

在相似变换中,相似三角形映射到相似三角形。非反射性相似变换是相似变换的子集。

对于相似度,公式与非反射相似度相同:

T是一个3 × 3矩阵,它依赖于4个参数加上一个可选的反射。

尝试改变这些参数。规模= 1.5;比例因子角度= 10*pi/180;%旋转角Tx = 0;% x转换Ty = 0;% y平移A = -1;% -1 ->反射,1 ->无反射Sc =刻度*cos(角度);Ss =刻度*sin(角度);T = [sc -ss 0;A *ss A *sc 0;Tx ty 1];

因为相似性是仿射变换的子集,所以创建一个affine2d对象使用:

t_sim = affine2d(T);与上面的翻译示例一样,检索输出空间从|的imwarp|函数中引用|RI|,并将|RI|传递给imshow|显示反射。[I_similarity,RI] = imwarp(I,t_sim,“FillValues”3);图,imshow(I_similarity,RI)轴标题(“相似”

图4:对棋盘应用仿射变换

在仿射变换中,x和y维度可以独立缩放或剪切,并且可能存在平移、反射和/或旋转。平行线保持平行。直线保持直线。相似点是仿射变换的一个子集。

对于仿射变换,方程与相似度和非反射相似度相同:

T是3 × 3矩阵,其中第一列和第二列的所有6个元素都可以不同。第三列必须是[0;0;1]。

试着改变T的定义。T = [1 0.3 0;11 10;0 0 1];t_aff = affine2d(T);I_affine = imwarp(I,t_aff,“FillValues”3);imshow(I_affine) title(仿射的

图5:对棋盘应用投影变换

在射影变换中,四边形映射到四边形。直线保持直线。仿射变换是射影变换的一个子集。

对于射影变换:

T是一个3 × 3矩阵,其中所有9个元素可以是不同的。

上述矩阵方程等价于以下两个表达式:

尝试改变九种元素中的任何一种T

T = [1 0 0.008;1 1 0.01;0 0 1];t_proj = projective2d(T);I_projective = imwarp(I,t_proj,“FillValues”3);imshow(I_projective) title(“射影”

图6:将多项式变换应用于Checkerboard

在多项式变换中,x和y中的多项式定义了映射。

对于二阶多项式变换:

u和v都是x和y的二阶多项式,每个二阶多项式有六项。

fixedPoints =重塑(randn(12,1),6,2);movingPoints = fixedPoints;t_poly = fitgeotrans(move points,fixedPoints,多项式的2);I_polynomial = imwarp(I,t_poly,“FillValues”3);imshow(i_多项式)多项式的

图7:对棋盘进行分段线性变换

在分段线性变换中,仿射变换分别应用于图像的三角形区域。在这个例子中,图像左上方的三角形区域保持不变,而图像右下方的三角形区域被拉伸。

movingPoints = [10 10;10 30;30 30;30 10];fixedPoints = [10 10;10 30;40 35;30 10];t_piecewise_linear = fitgeotrans(move points,fixedPoints,“pwl”);I_piecewise_linear = imwarp(I,t_piecewise_linear);imshow(I_piecewise_linear)分段线性的

图8:对棋盘应用正弦变换

这个示例和下面两个示例展示了如何创建显式映射tmap_b将规则网格(xi,yi)中的每个点与不同的点(u,v)关联起来。这个映射tmap_btformarray变换图像。

%随正弦局部变化[nrows,ncols] = size(I);[xi,yi] = meshgrid(1:ncols,1:nrows);A1 = 5;尝试改变正弦波的振幅。A2 = 3;imid = round(size(I,2)/2);查找中间元素的索引U = xi + a1*sin(pi*xi/imid);V = yi - a2*sin(pi*yi/imid);tmap_B = cat(3,u,v);重新采样= makeresampler(“线性”“填满”);I_sinusoid = tformarray (resamp我,[],[2 1],[1 - 2],[],tmap_B,。3);imshow(I_sinusoid)正弦曲线的

图9:对棋盘应用桶形变换

桶形失真使图像从中心向外放射。离中心越远,扭曲越大,导致凸边。

径向筒形失真百分比Xt = xi(:) - imid;Yt = yi(:) - imid;[theta,r] = cart2pol(xt,yt);A = .001;试着改变三次项的振幅。S = r + a*r.^3;[ut,vt] = pol2cart(theta,s);U =重塑(ut,size(xi)) + imid;V =重塑(vt,大小(yi)) + imid;tmap_B = cat(3,u,v);I_barrel = tformarray (resamp我,[],[2 1],[1 - 2],[],tmap_B,。3);imshow(I_barrel)“桶”

图10:应用针垫转换棋盘

针垫畸变是筒形畸变的逆,因为立方项具有负振幅。离中心越远,扭曲就越大,但它会导致凹面。

%径向销垫失真Xt = xi(:) - imid;Yt = yi(:) - imid;[theta,r] = cart2pol(xt,yt);A = -.0005;试着改变三次项的振幅。S = r + a*r.^3;[ut,vt] = pol2cart(theta,s);U =重塑(ut,size(xi)) + imid;V =重塑(vt,大小(yi)) + imid;tmap_B = cat(3,u,v);I_pin = tformarray (resamp我,[],[2 1],[1 - 2],[],tmap_B,。3);imshow(I_pin) title(插针的

摘要:显示棋盘的所有几何变换

图次要情节(5、2、1),imshow (I)、标题(“原始”)次要情节(5、2、2),imshow (I_nonreflective_similarity)、标题(“无反射相似”)次要情节(5、2、3),imshow (I_similarity)、标题(“相似”)次要情节(5、2、4),imshow (I_affine)、标题(仿射的)次要情节(5、2、5),imshow (I_projective)、标题(“射影”)次要情节(5、2、6),imshow (I_polynomial)、标题(多项式的次要情节(5、2、7),imshow (I_piecewise_linear)、标题(分段线性的)次要情节(5、2、8),imshow (I_sinusoid)、标题(正弦曲线的)次要情节(5、2、9),imshow (I_barrel)、标题(“桶”)次要情节(5、2、10),imshow (I_pin)、标题(插针的

请注意,次要情节更改正在显示的图像的比例。

这个话题有用吗?