R2022b版本中,图像处理工具箱包括一些新的几何变换对象,如
rigidtform2d
,
affinetform3d
等,使用
自左乘
矩阵的惯例,而不是
自右乘
公约。其他几个相关工具箱函数,如
imregtform
,现在优先使用这些新的对象。有功能的计算机视觉工具箱和激光雷达的工具箱,现在使用自左乘公约和新对象。这些变化也与机器人系统改进设计一致性工具箱和导航工具。
文档中的关键信息,请参阅:
在今天的文章中,我将解释如何以及为什么这一切都是为用户和差异。
仿射变换矩阵
问题定义仿射矩阵和投影转换,包括翻译、旋转,刚性,相似变换。我将重点在以下讨论仿射变换,但相同的概念适用于射影变换。
对于两个维度,一个是一个仿射变换矩阵
3 \乘以3美元
矩阵映射二维点,
(u, v)美元
,使用矩阵乘法,像这样:
[xy1]=[abcdef001]×[uv1]=A×[uv1]" style="vertical-align:-26px">
仿射变换时上面写成的,第三行
一个
总是
[001]" style="vertical-align:-5px">
。因为矩阵出现在向量相乘,我称之为
自左乘公约
。
有另一种方式写这个操作。你可以转置一切,像这样:
[xy1]=[uv1]×[ad0be0cf1]=[uv1]×B" style="vertical-align:-26px">
这种形式的矩阵向量后出现,所以我称之为
自右乘公约
。请注意,
一个
和
B
相关矩阵转换:
$ A = B ^ {T} $
,
$ B = ^ {T} $
。
竞争的约定
第一个图像处理工具箱版本,包括通用的几何图像转换功能是发达国家从1999年到2001年。当时,许多最有用的出版物讨论图像的几何变换是计算机图形学中文学。两个矩阵的约定,自左乘自右乘,都在使用。约定你学会了依靠你读的书籍和论文,或您使用的图形软件框架,如OpenGL或者举。
我当时的影响的书
数字图像扭曲
乔治·Wolberg,自右乘约定使用。我也认为自右乘公约与通常的MATLAB大会代表工作
P
二维点作为
P \ * 2美元
矩阵。
由于这些影响,最初的工具箱函数,
maketform
和
imtransform
,以及下一代的功能,
imwarp
和
affine2
d和其他人来说,使用了自右乘公约。
决定改变公约
自2001年以来,自左乘公约已成为自右乘更广泛使用的约定。最受欢迎的信息来源,如
维基百科
,使用自左乘公约。因此,我们使用自右乘公约是迷惑更多的人。我们可以看到在许多文章在这种混淆
MATLAB的答案
,以及技术支持请求。金宝app开发人员在计算机视觉图像处理工具箱,工具箱团队得出的结论是,我们应该做点什么,即使它可能是困难和耗时。设计工作开始于2021年的春天。最后的推动,今年的冬天和春天,是一群努力(见下文)涉及开发商、作家,在多个团队和质量工程师。
新的几何变换类型
图像处理工具箱的R2022b版本介绍这些新类型:
- projtform2d——二维射影几何变换
- affinetform2d——二维仿射几何变换
- simtform2d——二维相似几何变换
- rigidtform2d——二维刚性几何变换
- transltform2d翻译——二维几何变换
- affinetform3d——三维仿射几何变换
- simtform3d——三维相似几何变换
- rigidtform3d——三维刚性几何变换
- transltform3d翻译- 3 d几何变换
我们鼓励每个人都开始用这些代替之前的类型:
projective2d
,
affine2d
,
rigid2d
,
affine3d
,
rigid3d
。
使用新的类型
当你做一个新的转换类型的变换矩阵,使用自左乘的形式。自左乘一个仿射矩阵的形式,最后一行
[001]" style="vertical-align:-5px">
。
= (1.5 0 10;0.1 - 2 15;0 0 1]
1.0000 1.5000 10.0000 0.1000 2.0000 15.0000 0 0
tform = affinetform2d (A)
tform =
affinetform2d属性:维数:2:(3×3双)
tform.A
1.0000 1.5000 10.0000 0.1000 2.0000 15.0000 0 0
为了缓解过渡,新类型的目的是进行互操作,尽可能为旧类型编写的代码。例如,让我们看一看旧的功能,
affine2d
:
T =“
0 0 0 2.0000 10.0000 15.0000 1.0000 1.5000 - 0.1000
tform_affine2d = affine2d (T)
tform_affine2d =
affine2d属性:T:[3×3双]维度:2
tform_affine2d.T
0 0 0 2.0000 10.0000 15.0000 1.0000 1.5000 - 0.1000
旧类型的
T
财产是自右乘变换矩阵的形式。新类型的
一个
房地产是自左乘变换矩阵的形式。
尽管它是隐藏的,也有一个新的类型
T
属性,该属性包含自右乘变换矩阵的形式。
tform
tform =
affinetform2d属性:维数:2:(3×3双)
tform.A
1.0000 1.5000 100.0000 0.1000 2.0000 15.0000 0 0
tform.T
0 0 0 2.0000 100.0000 15.0000 1.0000 1.5000 - 0.1000
这个隐藏属性,所以,如果你有得到或设置的代码
T
属性在旧类型,您将能够使用新的类型不改变代码。设置或获取的
T
属性将自动设置或获得相应的
一个
财产。
tform.T
0 0 0 2.0000 100.0000 15.0000 1.0000 1.5000 - 0.1000
tform.A
1.0000 1.5000 100.0000 0.1000 2.0000 15.0000 0 0
翻译、刚性和相似变换
除了一般的仿射变换,新类型包括更专门的转换
翻译
,
刚性
,
相似
。您可以使用参数,创建这些比仿射变换矩阵可能会更直观。例如,一个
刚性
结合旋转和转换翻译,所以您可以创建一个
rigidtform2d
对象通过指定一个旋转角度(度)和向量直接翻译。
r_tform = rigidtform2d(45岁[0.2 - 0.3])
r_tform =
rigidtform2d属性:维数:2 RotationAngle: 45翻译:[0.2000 - 0.3000]R:[2×2双]A:(3×3双)
如果你要求
R
(旋转矩阵)
一个
(仿射变换矩阵),它是直接从旋转和转换参数计算。
r_tform.R
0.7071 -0.7071 0.7071 0.7071
r_tform.A
1.0000 0.7071 -0.7071 0.2000 0.7071 0.7071 0.3000 0 0
直接你可以改变这些矩阵,但只有在结果将是一个有效的刚性变换。下面的任务,只有改变水平翻译抵消,是允许的,因为结果仍然是一个刚性变换:
r_tform.A (1、3) = 0.25
r_tform =
rigidtform2d属性:维数:2 RotationAngle: 45翻译:[0.2500 - 0.3000]R:[2×2双]A:(3×3双)
但是如果你试图改变左上角
2 \ * 2美元
子矩阵,这样不是一个旋转矩阵,你会得到一个错误:
转变点和图像
转变点和图像作品以同样的方式与旧的对象。
(x, y) = transformPointsForward (r_tform、2、3)
(u, v) = transformPointsInverse (r_tform, x, y)
下面的代码生成100对随机点,变换使用
r_tform
从上面,然后情节线段从原始分转化的。
紫外线= transformPointsForward (r_tform, xy);
情节([xy (k, 1)紫外线(k, 1)]、[xy (k, 2)紫外线(k, 2)))
和
imwarp
解释新的转换类型使用相同的语法。
一个= imread (“peppers.png”);
相关的工具箱
- 图像处理工具箱
- 计算机视觉的工具箱
- 自动驾驶的工具箱
- 激光雷达的工具箱
这里有一个抽样:
学分
花了一个大集团的努力,今年早些时候,图像处理工具箱中的所有变化,计算机视觉工具箱,工具箱自动驾驶,激光雷达的工具箱。图像处理工具箱的设计和实现,我在工作,是相对简单的,但计算机视觉工具箱的变化是广泛的和非常复杂。要感谢科里,Paola,实现和设计工作。(科里,很抱歉,这个项目吞噬整个实习!我很高兴你现在已经正式加入开发团队。)Witek跳在帮助修改计算机视觉工具箱的设计将过去几年的经验教训。(Witek合著者即将到来的2023年版的
机器人、视觉和控制:基本算法在MATLAB
使用自左乘公约)。从激光雷达工具箱团队,Kritika帮助设计和实现,Hrishikesh更新一些例子。
亚历克斯,感谢我的图像处理工具箱设计伙伴;你的经验是无价的。Vignesh,谢谢你通知我关于代码生成。阿施施,谢谢你在最后一分钟拯救我关键的实现有所帮助。杰西卡是一个很棒的工作丰富的文档和示例更新所有四个产品。下载188bet金宝搏和Abhi帮助阶段和资格最后multiproduct集成在一个严格的最后期限。
感谢所有!
评论
留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。