创建一个转换图片的画廊
这个例子展示了许多几何变换的性质采用不同的棋盘图像转换。
一个二维几何变换是一个映射,将每一个点在欧几里德平面与另一个点在欧几里德平面。在这些示例中,定义的几何变换是一个规则,告诉如何映射点与笛卡尔坐标(x, y)到另一个点与笛卡尔坐标(u, v)。一个棋盘模式有助于可视化输入图像的坐标网格在平面上和每个转换引入的失真类型。
创建一个示例使用棋盘图像棋盘
函数。图像有长方形瓷砖和四个独特的角落,这使得它容易看到棋盘图像被几何扭曲的转换。当你运行这个例子,试着改变图像我
你最喜欢的形象。
sqsize = 60;我=棋盘(sqsize 4 4);imshow (I)标题(“原始”)
得到图像的大小,并指定一个填充背景值。
nrows =大小(我,1);ncols =大小(我,2);填补= 0.3;
相似变换
相似变换包括旋转、各向同性的缩放和翻译,但不反映。形状和角度都保存了下来。平行线保持平行和直线保持笔直。
指定旋转角、比例因子和翻译的x和y的方向。然后创建一个相似的几何变换对象。
规模= 1.2;角= 40;tx = 0;泰= 0;t_sim = simtform2d(规模、角、[tx泰]);
应用相似的几何变换的图像和显示结果。
I_similarity = imwarp(我t_sim FillValues =填写);imshow (I_similarity);标题(“相似”)
如果你改变tx
或泰
一个非零值,您将注意到它没有对输出图像的影响。如果你想看到对应的坐标变换,包括翻译,包括空间参考信息:
[I_similarity, RI] = imwarp(我t_sim FillValues =填写);imshow (I_similarity RI)轴在标题(“相似(空间引用)”)
注意,通过输出空间引用对象国际扶轮
从imwarp
揭示了翻译。指定输出图像的一部分,你想看到的东西,使用OutputView
名称-值参数的imwarp
函数。
反光的相似变换
反光的相似变换,相似三角形映射到相似三角形。
指定旋转角、比例因子和翻译的x和y方向,反射系数。指定反射系数r
1执行反射,否则和1。创建一个3×3表示转换矩阵。
规模= 1.5;角= 10;tx = 0;泰= 0;r = 1;sc =规模* cosd(角);党卫军=规模*信德(角);= (sc r * ss tx;- s r * sc泰;0 0 1);
因为反光的相似之处是仿射变换的一个子集,创建一个仿射几何变换对象的几何变换矩阵。
t_reflective = affinetform2d(一个);
应用反射相似变换的图像和显示结果输出空间参考信息。
[I_reflective, RI] = imwarp(我t_reflective FillValues =填写);imshow (I_reflective RI)轴在标题(“反射相似”)
仿射变换
在一个仿射变换,x和y独立维度可以扩展或剪切,可以有翻译、反射、旋转。平行线保持平行。直线保持笔直。
指定一个一般的仿射变换矩阵。所有六个第一和第二列的元素可以是不同的,和第三行必须(0 0 1)。创建一个仿射几何变换对象的几何变换矩阵。
一个= [1 1 0;0.3 - 2 0;0 0 1);t_aff = affinetform2d(一个);
一般仿射变换应用到图像和显示结果输出空间参考信息。
I_affine = imwarp(我t_aff FillValues =填写);imshow (I_affine)标题(“仿射”)
射影变换
地图投影变换,四边形的四边形。直线保持直但平行线不一定保持平行。
指定一个射影变换矩阵。所有九个矩阵的元素可以是不同的,没有限制的最后一行。创建一个射影几何变换对象的几何变换矩阵。
一个= [1 1 0;0 1 0;0.002 - 0.0002 1);t_proj = projtform2d(一个);
应用图像的投影变换和显示结果输出空间参考信息。
I_projective = imwarp(我t_proj FillValues =填写);imshow (I_projective)标题(“射影”)
分段线性变换
在一个分段线性变换,仿射变换分别应用地区的形象。在这个例子中,左上角,右上的棋盘的左下侧点保持不变,但在右下角的三角区域图像的拉伸,转换后的图像的右下角是50%进一步向右和20%低于原来的坐标。
movingPoints = [0 0;0 nrows;ncols 0;ncols nrows;];定点= [0 0;0 nrows;ncols 0;nrows ncols * 1.5 * 1.2);t_piecewise_linear = fitgeotform2d (movingPoints定点,“pwl”);I_piecewise_linear = imwarp(我t_piecewise_linear FillValues =填写);imshow (I_piecewise_linear)标题(“分段线性”)
正弦变换
这个例子和下面的两个例子展示了如何创建一个显式的映射将每个点在一个常规电网(xi, yi)有不同的点(ui、vi)。这种映射是存储在一个geometricTransform2d
对象,该对象使用的imwarp
将图像。
在这个正弦变换,每个像素的坐标不变。每一行像素的坐标是向上或向下转移后正弦模式。
= ncols / 12;%尝试不同的正弦信号的振幅ifcn = @ (xy) [xy (: 1), xy(:, 2) +一个*罪(2 *π* xy (: 1) / nrows)];tform = geometricTransform2d (ifcn);I_sinusoid = imwarp(我tform FillValues =填写);imshow (I_sinusoid);标题(“正弦信号”)
桶转换
从它的中心呈放射状向外桶形失真扰乱一个图像。变形大于远离中心,导致凸边。
首先,定义一个函数,像素指数映射到中心的距离。使用meshgrid
函数来创建数组的每个像素的x坐标和y坐标原点在左上角的图像。
[xi, yi] = meshgrid (1: ncols, 1: nrows);
原点转向中心的形象。然后,笛卡尔x - y坐标转换为圆柱形角(θ
)和半径(r
)坐标使用cart2pol
函数。r
从中心像素距离增加呈线性变化。
xt = xi - ncols / 2;欧美= yi - nrows / 2;[θ,r] = cart2pol (xt,欧美);
定义的振幅,一个
立方的术语。这个参数可调。然后,添加一个立方项r
这r
非线性与中心像素的距离变化。
= 1;%试着变换的振幅立方项。征求= max (r (:));s1 = r + r。^ 3 *(/做。^ 2);
转换回笛卡尔坐标系统。改变原点回到图像的右上角。
(ut, vt) = pol2cart(θ,s1);ui = ut + ncols / 2;vi = vt + nrows / 2;
存储之间的映射(习
,易
)和(用户界面
,六世
)geometricTransform2d
对象。使用imwarp
根据像素映射变换图像。
ifcn = @ (c) (ui (:) vi (:));tform = geometricTransform2d (ifcn);I_barrel = imwarp(我tform FillValues =填写);imshow (I_barrel)标题(“桶”)
插针的转换
插针变形是桶形失真的倒数,因为立方项负振幅。畸变更大更远的中心,但失真表现为凹形。
你可以从相同的开始θ
和r
至于桶转换值。定义一个不同的振幅,b,立方的术语。这个参数可调。然后,减去一个立方项r
这r
非线性与中心像素的距离变化。
b = 0.4;%试着变换的振幅立方项。s = r - r。^ 3 * (b /做。^ 2);
转换回笛卡尔坐标系统。改变原点回到图像的右上角。
(ut, vt) = pol2cart(θ,年代);ui = ut + ncols / 2;vi = vt + nrows / 2;
存储之间的映射(习
,易
)和(用户界面
,六世
)geometricTransform2d
对象。使用imwarp
根据像素映射变换图像。
ifcn = @ (c) (ui (:) vi (:));tform = geometricTransform2d (ifcn);I_pin = imwarp(我tform FillValues =填写);imshow (I_pin)标题(“插针”)
摘要:显示所有棋盘的几何转换
图次要情节(3,- 3,- 1),imshow (I)、标题(“原始”)次要情节(3、3、2),imshow (I_similarity)、标题(“相似”)次要情节(3、3、3),imshow (I_reflective)、标题(“反射相似”)次要情节(3、3、4),imshow (I_affine)、标题(“仿射”)次要情节(3、3、5),imshow (I_projective)、标题(“射影”)次要情节(3、3、6),imshow (I_piecewise_linear)、标题(“分段线性”)次要情节(3、3、7)imshow (I_sinusoid)、标题(“正弦信号”)次要情节(3、3、8),imshow (I_barrel)、标题(“桶”)次要情节(3、3、9),imshow (I_pin)、标题(“插针”)
请注意,次要情节
图片显示的规模变化。
另请参阅
功能
对象
affinetform2d
|projtform2d
|PiecewiseLinearTransformation2D
|PolynomialTransformation2D
|LocalWeightedMeanTransformation2D