为什么要引入齐次坐标

图像处理与OpenCV 专栏收录该内容
32 篇文章 72 订阅

前面我们提到了图像的缩放变换和旋转变换,可以用矩阵乘法的形式来表达变换后的像素位置映射关系。

那么,对于平移变换呢?平移变换表示的是位置变化的概念。如下图所示,一个图像矩形从中心点[x1,y1]平移到了中心点[x2,y2]处,整体大小和角度都没有变化。在x方向和y方向上分别平移了tx和ty大小。
这里写图片描述
显然:

x2=x1+tx x 2 = x 1 + t x
y2=x2+ty y 2 = x 2 + t y

这对于图像中的每一个点都是成立的。写成矩阵的形式就是:
[x2y2]=[x1y1]+[txty](78) (78) [ x 2 y 2 ] = [ x 1 y 1 ] + [ t x t y ]

我们再把前面的缩放变换和旋转变换的矩阵形式写出来:
缩放变换:

[x2y2]=[kx00ky][x1y1](79) (79) [ x 2 y 2 ] = [ k x 0 0 k y ] [ x 1 y 1 ]

旋转变换:

[x2y2]=[cosθsinθsinθcosθ][x1y1](370) (370) [ x 2 y 2 ] = [ c o s θ − s i n θ s i n θ c o s θ ] [ x 1 y 1 ]

我们注意到,缩放变换和旋转变换都可以表示成矩阵乘法的形式。实际上,图像的几何变换通常不是单一的,也就是说经常性的缩放、旋转、平移一起变换。例如先放大2倍,然后旋转45度,然后再缩小0.5倍。那么就可以表示成矩阵乘法串接的形式:
[x2y2]=[0.5000.5][cos45sin45sin45cos45][2002][x1y1](371) (371) [ x 2 y 2 ] = [ 0.5 0 0 0.5 ] [ c o s 45 − s i n 45 s i n 45 c o s 45 ] [ 2 0 0 2 ] [ x 1 y 1 ]

这样,不管有多少次变换,都可以用矩阵乘法来实现。但是平移变换呢?从前面看到,平移变换并不是矩阵乘法的形式,而是矩阵加法的形式!

那能不能把缩放变换、旋转变换、平移变换统一成矩阵乘法的形式呢,这样不管进行多少次变换,都可以表示成矩阵连乘的形式,将极大的方便计算和降低运算量。

这种方法就是“升维”,引入“齐次坐标”,将图像从平面2D坐标变成3D坐标。我们看看平移变换的矩阵形式:

[x2y2]=[x1y1]+[txty](372) (372) [ x 2 y 2 ] = [ x 1 y 1 ] + [ t x t y ]

将其升维,变成3维,上式就可以表示成:
x2y21=100010txty1x1y11(373) (373) [ x 2 y 2 1 ] = [ 1 0 t x 0 1 t y 0 0 1 ] [ x 1 y 1 1 ]

这是个非常优美的地方,学习过矩阵乘法的同学可以算一下右边的式子,是否最终结果与前面是一样的。

这样,平移变换通过升维后的齐次坐标,也变成了矩阵乘法的形式。当然缩放变换和旋转变换的矩阵形式也得改一改,统一变成3维的形式。
缩放变换:

x2y21=kx000ky0001x1y11(374) (374) [ x 2 y 2 1 ] = [ k x 0 0 0 k y 0 0 0 1 ] [ x 1 y 1 1 ]

旋转变换:
x2y21=cosθsinθ0sinθcosθ0001x1y11(375) (375) [ x 2 y 2 1 ] = [ c o s θ − s i n θ 0 s i n θ c o s θ 0 0 0 1 ] [ x 1 y 1 1 ]

终于统一了。以后所有的变换,不管怎样变换,变换多少次,都可以表示成一连串的矩阵相乘了,这是多么的方便。这就是引入齐次坐标的作用,把各种变换都统一了起来。

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值