史蒂夫与MATLAB图像处理

图像处理的概念、算法和MATLAB

新的几何变换矩阵在R2022b公约

R2022b版本中,图像处理工具箱包括一些新的几何变换对象,如 rigidtform2d , affinetform3d 等,使用 自左乘 矩阵的惯例,而不是 自右乘 公约。其他几个相关工具箱函数,如 imregtform ,现在优先使用这些新的对象。有功能的计算机视觉工具箱和激光雷达的工具箱,现在使用自左乘公约和新对象。这些变化也与机器人系统改进设计一致性工具箱和导航工具。
文档中的关键信息,请参阅:
在今天的文章中,我将解释如何以及为什么这一切都是为用户和差异。

仿射变换矩阵

问题定义仿射矩阵和投影转换,包括翻译、旋转,刚性,相似变换。我将重点在以下讨论仿射变换,但相同的概念适用于射影变换。
对于两个维度,一个是一个仿射变换矩阵 3 \乘以3美元 矩阵映射二维点, (u, v)美元 ,使用矩阵乘法,像这样:
[xy1]=[abcdef001]×[uv1]=A×[uv1]" style="vertical-align:-26px"> ( x y 1 ] = ( 一个 b c d e f 0 0 1 ] × ( u v 1 ] = 一个 × ( u v 1 ]
仿射变换时上面写成的,第三行 一个 总是 [001]" style="vertical-align:-5px"> ( 0 0 1 ] 。因为矩阵出现在向量相乘,我称之为 自左乘公约
有另一种方式写这个操作。你可以转置一切,像这样:
[xy1]=[uv1]×[ad0be0cf1]=[uv1]×B" style="vertical-align:-26px"> ( x y 1 ] = ( u v 1 ] × ( 一个 d 0 b e 0 c f 1 ] = ( u v 1 ] × B
这种形式的矩阵向量后出现,所以我称之为 自右乘公约 。请注意, 一个 B 相关矩阵转换: $ A = B ^ {T} $ , $ B = ^ {T} $

竞争的约定

第一个图像处理工具箱版本,包括通用的几何图像转换功能是发达国家从1999年到2001年。当时,许多最有用的出版物讨论图像的几何变换是计算机图形学中文学。两个矩阵的约定,自左乘自右乘,都在使用。约定你学会了依靠你读的书籍和论文,或您使用的图形软件框架,如OpenGL或者举。
我当时的影响的书 数字图像扭曲 乔治·Wolberg,自右乘约定使用。我也认为自右乘公约与通常的MATLAB大会代表工作 P 二维点作为 P \ * 2美元 矩阵。
digital-image-warping.jpg 仿射转换- 3 - 3. - png
由于这些影响,最初的工具箱函数, maketform imtransform ,以及下一代的功能, imwarp affine2 d和其他人来说,使用了自右乘公约。
在几年之内,很明显,这个设计的选择是令人困惑的人。我提到我的困惑 07年2月- 2006篇博客文章仿射几何转换

决定改变公约

自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"> ( 0 0 1 ]
= (1.5 0 10;0.1 - 2 15;0 0 1]
一个= 3×3
1.0000 1.5000 10.0000 0.1000 2.0000 15.0000 0 0
tform = affinetform2d (A)
tform =
affinetform2d属性:维数:2:(3×3双)
tform.A
ans = 3×3
1.0000 1.5000 10.0000 0.1000 2.0000 15.0000 0 0
为了缓解过渡,新类型的目的是进行互操作,尽可能为旧类型编写的代码。例如,让我们看一看旧的功能, affine2d :
T =“
T = 3×3
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
ans = 3×3
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
ans = 3×3
1.0000 1.5000 100.0000 0.1000 2.0000 15.0000 0 0
tform.T
ans = 3×3
0 0 0 2.0000 100.0000 15.0000 1.0000 1.5000 - 0.1000
这个隐藏属性,所以,如果你有得到或设置的代码 T 属性在旧类型,您将能够使用新的类型不改变代码。设置或获取的 T 属性将自动设置或获得相应的 一个 财产。
tform.T (3,1) = 100;
tform.T
ans = 3×3
0 0 0 2.0000 100.0000 15.0000 1.0000 1.5000 - 0.1000
tform.A
ans = 3×3
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
ans = 2×2
0.7071 -0.7071 0.7071 0.7071
r_tform.A
ans = 3×3
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美元 子矩阵,这样不是一个旋转矩阵,你会得到一个错误:
rigid-tform-error.png

转变点和图像

转变点和图像作品以同样的方式与旧的对象。
(x, y) = transformPointsForward (r_tform、2、3)
x = -0.4571
y = 3.8355
(u, v) = transformPointsInverse (r_tform, x, y)
u = 2
v = 3
下面的代码生成100对随机点,变换使用 r_tform 从上面,然后情节线段从原始分转化的。
xy =兰德(100 2)- 0.5;
紫外线= transformPointsForward (r_tform, xy);
clf
持有
k = 1:尺寸(xy, 1)
情节([xy (k, 1)紫外线(k, 1)]、[xy (k, 2)紫外线(k, 2)))
结束
持有
平等的
imwarp 解释新的转换类型使用相同的语法。
一个= imread (“peppers.png”);
B = imwarp (r_tform);
imshow (B)

相关的工具箱

这些几何变换对象广泛应用于几个MathWorks工具箱。目前 20左右不同的文档示例,使用rigidtform3d 。这些产品的例子是:下载188bet金宝搏
  • 图像处理工具箱
  • 计算机视觉的工具箱
  • 自动驾驶的工具箱
  • 激光雷达的工具箱
这里有一个抽样:
monocular-vision-example.png
build-map-lidar.png
ground-truth-and-estimated-maps.png
register-3d-images.png

学分

花了一个大集团的努力,今年早些时候,图像处理工具箱中的所有变化,计算机视觉工具箱,工具箱自动驾驶,激光雷达的工具箱。图像处理工具箱的设计和实现,我在工作,是相对简单的,但计算机视觉工具箱的变化是广泛的和非常复杂。要感谢科里,Paola,实现和设计工作。(科里,很抱歉,这个项目吞噬整个实习!我很高兴你现在已经正式加入开发团队。)Witek跳在帮助修改计算机视觉工具箱的设计将过去几年的经验教训。(Witek合著者即将到来的2023年版的 机器人、视觉和控制:基本算法在MATLAB 使用自左乘公约)。从激光雷达工具箱团队,Kritika帮助设计和实现,Hrishikesh更新一些例子。
亚历克斯,感谢我的图像处理工具箱设计伙伴;你的经验是无价的。Vignesh,谢谢你通知我关于代码生成。阿施施,谢谢你在最后一分钟拯救我关键的实现有所帮助。杰西卡是一个很棒的工作丰富的文档和示例更新所有四个产品。下载188bet金宝搏和Abhi帮助阶段和资格最后multiproduct集成在一个严格的最后期限。
感谢所有!
|
  • 打印
  • 发送电子邮件

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。