相机标定(一) —— 深入理解齐次坐标及其作用

一、什么是齐次坐标和齐次坐标系

齐次坐标

齐次坐标是一个相机标定问题的关键理论之一,所以就此问题分析一下。
单从定义上来讲,齐次坐标(投影坐标)就是用N+1维来代表N维坐标(点和向量),也可说用齐次坐标来表示笛卡尔坐标,具体的数学表达式可以这样写:
在直角坐标系点坐标(x,y)末尾加上一个额外的变量w,一个点(X,Y)在齐次坐标里面变成了(x,y,w),并且有
X = x/w
Y = y/w
这也就解决了笛卡尔坐标系无法表示无穷远点的问题,按照人的视觉,两条平行线在无穷远处会相交,采用直角坐标系无法对这一现象进行描述,而当w趋近于0时,(X,Y)趋向无穷大,其齐次坐标就可表示为(x,y,0),解决了这一问题。
在这里插入图片描述

于此同时衍生了另外一个问题,笛卡尔坐标和齐次坐标转换的问题:
(1) 笛卡尔坐标转换成齐次坐标,需要考虑坐标是点还是向量的问题,如果(x,y)是个点,就可变为(x,y,1);而如果(x,y)是个向量,则变为(x,y,0)
(2) 齐次坐标转换成笛卡尔坐标,如果是(x,y,2),则其笛卡尔坐标为(x/2,y/2);
如果是(x,y,0),其笛卡尔坐标仍为(x,y)。
齐次坐标(针对二维)因此有如下定义:

  1. 投影平面上的任何点都可以表示成 (X, Y, Z),称之为该点的’齐次坐标或投影坐标,其中 X、Y 及 Z 不全为 0。
  2. 以齐次坐标表表示的点,若该坐标内的数值全乘上一相同非零实数,仍会表示该点。
  3. 相反地,两个齐次坐标表示同一点,当且仅当其中一个齐次坐标可由另一个齐次坐标乘上一相同非零常数得取得。
  4. 当 Z 不为 0,则该点表示欧氏平面上的 (X/Z, Y/Z)。
  5. 当 Z 为 0,则该点表示一无穷远点。
  6. 三元组 (0, 0, 0) 不表示任何点。原点表示为 (0, 0, 1)。

齐次坐标系

那怎么从空间上去理解齐次坐标系呢?
有个说法挺有意思,我们想象在宇宙中有一个绝对坐标系,对于我们现在使用的笛卡尔坐标系,其原点位于(0,0)点,当然同时也就还有无数的相同的坐标系,只不过它们的原点不同,对于笛卡尔坐标系中的点(x,y),它对于所有的笛卡尔坐标系都是相同的,有点多维宇宙的感觉,其中一个坐标系就是一个宇宙。

二、齐次坐标的作用

看了不少文章,基本都有这么一句话来概况其作用:齐次坐标表示是计算机图形学的重要手段之一,它既能够用来明确区分向量和点,同时也更易用于进行仿射(线性)几何变换。
齐次坐标在计算机图形学中有重要应用,可以用来区分向量和点,上面已经解释了点和向量的区别问题,其仿射变换主要应用如下:

2.1 "平移矩阵"扩展为3维

在图像处理时,经常会对图像进行平移操作,就会采用矩阵的形式进行计算。通过对坐标点进行齐次变换,可以将平移矩阵用3维方式进行表达,可以。
平移可表示为:
[x2y2]\begin{bmatrix} x2\\ y2\end{bmatrix}[x2y2]=[x1y1]\begin{bmatrix} x1\\ y1\end{bmatrix}[x1y1]+[x0y0]\begin{bmatrix} x0\\ y0\end{bmatrix}[x0y0]
齐次变换后:
[x2y21]\begin{bmatrix} x2\\ y2\\1\end{bmatrix}x2y21=[10x001y0001]\begin{bmatrix} 1&0&x0\\ 0&1&y0\\0&0&1\end{bmatrix}100010x0y01*[x1y11]\begin{bmatrix} x1\\ y1\\1\end{bmatrix}x1y11

2.2 旋转,缩放

旋转
对一个点绕原点逆时针旋转一个角度,用矩阵的形式表达为:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
缩放
在这里插入图片描述
在这里插入图片描述

参考文章:
关于齐次坐标系的理解
齐次坐标的理解
齐次坐标变换

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习——图解SVM中gamma和c参数的作用

参数c和gamma的作用 我们通过下图详解参数c的作用,首先我们以一个简单的线性分类器为例,上一个博客中我们知道影响分类器的主要因素是支持向量,即虚线上的样本,如下图可知: 但当正负样本的分布在如下情况时&#xff0…

面试题(十四)

唐巧前辈说这些都是 iOS 的基础问题,应该对此深入的了解。当初看到时,大部分回答不上来,因为平时没有好好思考整理过。这里大部分的概念大多会在学习 OC 的过程中遇到过,但还是得经过写代码才能有更深的理解。反正我当初看那些设计…

工业相机基础知识详述 —— 焦平面,像平面,弥散圆,光圈,分辨率,景深,接口,靶面尺寸

一、焦平面 想到焦平面,很多人不由自主就想到不就是焦点所在的垂直于光轴的平面吗?其实其背后隐藏这更多的东西。 1)焦点不止一个 对于一般拍摄场景来说,光通过一个凸透镜,汇聚不到一个点,越靠近中轴线的…

相机标定(二)深入理解四大坐标系与其变换关系

一、前言 视觉系统一共有四个坐标系:像素平面坐标系(u,v)、图像坐标系(x,y)、相机坐标系(Xc,Yc,Zc)和世界坐标系(Xw,Yw,Zw),如下图所示。每种坐标系之间均存…

相机标定(三) —— 畸变校正

一、前言 根据针孔模型,物体和成像之间参数会满足相似三角形的关系。但现实中会存在装配误差和透视失真等原因,导致这种关系无法成立,使理想成像与实际成像存在误差,这种误差即称为畸变。 畸变分为径向畸变,切向畸变和…

SVG技术入门:线条动画实现原理

相信大家都见到过这样神奇的技术:一副线条构成的画能自动画出自己。非常的酷。Jake Archibald是这种SVG技术的首创者,并且写了一篇非常好的文章来描述它是如何实现的。Brian Suda也在24 Ways网站上讨论过它。 Polygon使用它在一篇设计方面的文章里创造出…

机器学习——人工神经网络之BP算法编程(python二分类数据集:马疝病数据集)

目录 一、理论知识回顾 1、神经网络模型 2、明确任务以及参数 1)待估参数: 2)超参数: 3)任务 3、神经网络数学模型定义 1)激活函数 ​ 2)各层权重、阈值定义 3)各层输入输…

Halcon例程(基于多个标定图的单目相机标定)详解—— Camera_calibration_multi_image.hdev

一、前言 在我的工业相机专栏里已经将相机标定涉及到的理论部分讲解完毕,为什么要标定以及标定要求出什么参数呢,用一个Halcon 例程来帮助理解。 这个例程是比较经典的标定程序,基本将标定过程讲的比较清楚,用的标定图像是系统自…

SkipList 跳表

为什么选择跳表 目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。 想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树…

机器学习——深度学习之卷积神经网络(CNN)——LeNet卷积神经网络结构

目录 一、卷积神经网络 1、卷积神经的作用 2、LeNet 1)数据库准备——minst 2)模型 二、关于卷积神经网络结构的一些术语定义 1、特征图(Feature map) 2、height(长度)、width(宽度&…

工业相机(3D)主要参数详述

一、前言 准确的完成相机选型是一个视觉工程师必备的技能,而选型前必须对其内部参数了如指掌。工业相机是一种比较复杂的产品,其参数很多,每个参数可能会有不同的标准,下面对主要的参数会做比较详细的阐述。 二、参数详述 2.1 …

JAVA8永久代

在Java虚拟机(以下简称JVM)中,类包含其对应的元数据,比如类的层级信息,方法数据和方法信息(如字节码,栈和变量大小),运行时常量池,已确定的符号引用和虚方法表…

Struts 2初体验

Struts2简介: Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。 Struts 2 目录结构:     apps目录:Struts2示例…

机器学习——深度学习之数据库和自编码器

目录 一、数据库——数据获取 1、Mnist 2、ImageNet 二、自编码器(Auto-encoder)——参数初始化 1、功能 2、基本思想 1)训练第一层 2)训练第二层及以后的神经网络 ​ 3)利用BP对整个神经网络的参数初始值进…

Halcon例程详解 (深度图转换为3D图像)—— xyz_attrib_to_object_model_3d

一、前言 深度图向点云图进行转换是进行3D检测项目时会遇到的问题,halcon里也有针对此问题的相关例程,下面对此例程进行分析。通过学习此例程,我们可以掌握如何将一张深度图像和一张正常二维图像转换为3D点云。 二、分析 * 初始化界面 dev…

动态代理之Cglib浅析

什么是Cglib Cglib是一个强大的,高性能,高质量的代码生成类库。它可以在运行期扩展JAVA类与实现JAVA接口。其底层实现是通过ASM字节码处理框架来转换字节码并生成新的类。大部分功能实际上是ASM所提供的,Cglib只是封装了ASM,简化了…

机器学习——深度学习之卷积神经网络(CNN)——AlexNet卷积神经网络结构

目录 一、AlexNet卷积神经网络结构模型 1、数据库ImageNet 2、AlexNet第一层卷积层 二、AlexNet卷积神经网络的改进 1、非线性变化函数的改变——ReLU 2、最大池化(Max Pooling)概念的提出——卷积神经网络通用 1)池化层 2&#xff0…

C#委托——基础2

在上一篇随笔中,简要说明了怎样定义委托,定义事件,订阅事件,最后也实现了效果,就是当员工类的某个对象,执行某个事件时,委托事件被触发,后面也得到了结果,但是想象一下实…

机器学习——深度学习之编程工具、流行网络结构、卷积神经网络结构的应用

目录 一、编程工具 caffe实现LENET-5 二、流行的网络结构 1、VGGNET 2、Googlenet ​ 3、ResNet​ ​ 三、卷积神经网络的应用 1、人脸识别 ​ 2、人脸验证 3、人脸特征点检测 4、卷积神经网络压缩 一、编程工具 caffe的优点:模型标准化,源代码…

Halcon例程详解(激光三角系统标定)—— calibrate_sheet_of_light_calplate.hdev

前言 1 激光三角测距 激光三角测距法原理很简单,是通过一束激光以一定的入射角度照射被测目标,激光在目标表面会产生漫反射,在另一角度利用透镜对反射激光汇聚成像,光斑成像在CCD(Charge-coupled Device,感光耦合组件)位置传感器上。当被测物体沿激光方向发生移动时,…