齐次坐标的理解(2)

news/2024/9/20 5:16:04

接上篇文章齐次坐标的理解(1):https://blog.csdn.net/m0_37957160/article/details/119549709

“齐次坐标表示是计算机图形学的重要手段之一,它既能够用来明确区分向量和点,同时也更易用于进行仿射(线性)几何变换。”—— F.S. Hill, JR。

1、齐次变换的两种解读

所以由上边我们可以基于两种理解:

(1)齐次坐标可以将n维空间中不明确的概念给明确出来。这句话如何理解呢?

比如在二维空间中(x,y)不只可以表示一个坐标,还可以表示一个向量(向量就是有确定的长度哈确定的方向,他的位置是不固定的,在二维坐标系中它可以任意移动,只要他的长度和方向是固定的就行)。所以如果在二维形式下你写作(x,y)是存在歧义的,其一表示向量,其二表示坐标。所以引入齐次坐标这种记法,表示向量写作(x,y,0);表示坐标的话写作(x,y,1);我们把n维变成n+1维,表示向量在后边添加0;表示坐标在后边添加1,表示n维的那个坐标。
           这样,(1, 4, 7)如果写成(1,4,7,0),它就是个向量;如果是(1,4,7,1),它就是个点。下面是如何在普通坐标(Ordinary Coordinate)和齐次坐标(Homogeneous Coordinate)之间进行转换:

(1)从普通坐标转换成齐次坐标时:

   如果(x,y,z)是个点,则变为(x,y,z,1);

   如果(x,y,z)是个向量,则变为(x,y,z,0);

(2)从齐次坐标转换成普通坐标时 :  

   如果是(x,y,z,1),则知道它是个点,变成(x,y,z);

   如果是(x,y,z,0),则知道它是个向量,仍然变成(x,y,z);

以上是通过齐次坐标来区分向量和点的方式。从中可以思考得知,对于平移T、旋转R、缩放S3个最常见的仿射变换,平移变换只对于点才有意义,因为普通向量没有位置概念,只有大小和方向。而旋转和缩放对于向量和点都有意义。

 此外,对于一个普通三维坐标的点 P=(Px, Py, Pz) ,有对应的一族齐次坐标 (wPx, wPy, wPz, w) ,其中 w 不等于零 。比如, P(1, 4, 7) 的齐次坐 标有 (1, 4, 7, 1) 、( 2, 8, 14, 2 )、( -0.1, -0.4, -0.7, -0.1 )等等 。 因此,如果把一个点从普通坐标变成齐次坐标,给 x,y,z 乘上同一个非零数 w ,然后增加第 4 个分量 w ;如果把一个齐 次坐标转换成普通坐标,把 前三个坐标同时除以第 4 个坐标,然后去掉第 4 个分量。

 由于齐次坐标使用了 4 个分量来表达 3D 概念,使得平移变换可以使用矩阵进行,从而如 F.S. Hill, JR 所说,仿射(线性)变换的进行 更加方便。由于图形硬件已经普遍地支持齐次坐标与矩阵乘法,因此更加促进了齐次坐标使用,使得它似乎成为图形学中的一个标准。

-----所以很明显的区分向量和坐标。

(2)引入齐次坐标,可以非常方便的进行仿射(线性)几何变换。(简而言之就是很方便进行矩阵运算)

具体解释我们以二维图像的几何变换矩阵推导为例来进行解释:

2、二维图像的几何变换矩阵推导

常用到的二维图像的几何变换有三种:

  • (1)平移
  • (2)缩放
  • (3)旋转

对二维图像做几何变换实际上就是把(x,y)坐标变换为一个新的坐标(X,Y)。所以想进行变换就需要找到(x,y)变换到(X,Y)之间的一个关系。

针对于三种变换我们会给出变换的公式形式以及变换的矩阵形式,使用变换的矩阵形式(矩阵形式的运算容易被计算机所理解和计算,并且效率很高C++中的Eigen运算)坐标。

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

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

这里写图片描述

显然: 

                                                          x2=x1+tx

平移变换:                                        y2=y1+ty

这对于图像中的每一个点都是成立的。写成矩阵的形式就是:

  平移矩阵形式:                               

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

 缩放矩阵形式:                              

旋转变换形式:                                

 我们注意到,缩放变换和旋转变换都可以表示成矩阵乘法的形式。实际上,图像的几何变换通常不是单一的,也就是说经常性的缩放、旋转、平移一起变换。例如先放大2倍,然后旋转45度,然后再缩小0.5倍。那么就可以表示成矩阵乘法串接的形式:

                        

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

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

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

                                              


将其升维,变成3维,上式就可以表示成:

                                      

 升维之后才满足矩阵的乘法法则:3行3列乘以3行1列=3行1列;否则没有办法写成矩阵乘法的形式。

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

缩放变换:

旋转变换: 

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

PS:齐次坐标就是将一个原本是n维的向量用一个n+1维向量来表示。
        许多图形应用涉及到几何变换,主要包括平移、旋转、缩放。以矩阵表达式来计算这些变换时,平移是矩阵相加,旋转和缩放则是矩阵相乘,综合起来可以表示为 x=R∗X+t(注:因为习惯的原因,实际使用时一般使用变化矩阵左乘向量)(R 旋转缩放矩阵,t 为平移矩阵,X为原向量,x 为变换后的向量)。

具体的旋转变换见链接:https://blog.csdn.net/m0_37957160/article/details/111167036

https://wenku.baidu.com/view/7962a10376232f60ddccda38376baf1ffc4fe30c.html


参考链接:https://www.cnblogs.com/csyisong/archive/2008/12/09/1351372.html

https://blog.csdn.net/zhuiqiuzhuoyue583/article/details/95230246

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pgtn.cn/news/17823.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

OpenCV中的二进制鲁棒独立基本特征——BRIEF

OpenCV中的二进制鲁棒独立基本特征——BRIEF 1. 效果图2. 源码参考这篇博客将介绍OpenCV中的二进制鲁棒独立基本特征。BRIEF是一种更快的特征描述符计算和匹配方法。它还提供了较高的识别率,除非存在较大的面内旋转。 BRIEF Binary Robust Independent Elementary Features 二…

相机标定:(1)相机模型

之前在进行标定时只是简单的会使用,调用OpenCV里边的函数,完成标定即可。并没有做过多深入的理解,今天趁着course学习把标定详细的记录一下,以下完全是个人理解如果有不对的地方欢迎批评指正。 公式推导见标定2(2&…

.NET 4.0 Interop新特性ICustomQueryInterface (转载)

.NET 4.0 Interop新特性ICustomQueryInterface 在.NET Framework v4.0发布的新功能中,在名字空间System.Runtime.InteropServices新增加了一个叫做ICustomQueryInterface的Interface, 顾名思义,这个Interface的功能就是使得用户可以自己控制QueryInterf…

相机标定(1)

理解相机标定就要想明白相机模型,成像原理(小孔成像)。 相机标定一共分为两个部分: (1)在进行精度较高的测量时,需要校正畸变即图像的畸变矫正 !(是自身的) (2)相机和机器人之间标定 =手眼标定!

相机标定:(2)内\外参矩阵和畸变矩阵

由(1)我们知道相机模型:相机标定:(1)相机模型_Upupup6的博客-CSDN博客 标定一共分为两个部分: (1)在进行精度较高的测量时,需要校正畸变即图像的畸变矫正,需要进行相机标定 !(是自身的) (2)相机和机器人之间标定 =手眼标定! 0、标定的意义 无论是在图像测…

OpenCV中的立体图像创建深度图

OpenCV中的立体图像创建深度图 1. 效果图2. 源码参考这篇博客将介绍如何从立体图像创建深度图。 1. 效果图 原图 VS 视差图效果如下: 可以看到结果受到高度噪音的污染。通过调整 numDisparities 和 blockSize 的值,可以获得更好的结果。 2. 源码 # 立体图像匹配和点云生…

OpenCV中的特征匹配+单应性以查找对象

OpenCV中的特征匹配+单应性以查找对象 1. 效果图2. 源码参考这篇博客将混合calib3d模块中的特征匹配和单应性,在复杂图像中查找已知对象。 1. 效果图 特征匹配 & 单应性查找对象效果图如下: 2. 源码 # 在图像中找到SIFT特征并应用比率测试来找到最佳匹配。import cv…

数字图像处理:边缘检测(Edge detection)

转载自:https://zhuanlan.zhihu.com/p/59640437 觉得写得通俗易懂,要是每个人的博客都这么人性化。。。。 写在前面: 本文篇幅较长,用了大量图与公式帮助大家深入理解各种边缘检测算子,希望大家能看完哈&#xff0c…