14.图像透视——距离的测验,齐次坐标(Homogeneous Coordinate),透视投影(Perspective Projection),投影实战_2

本文主要是介绍14.图像透视——距离的测验,齐次坐标(Homogeneous Coordinate),透视投影(Perspective Projection),投影实战_2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

距离的测验

齐次坐标(Homogeneous Coordinate)

透视投影(Perspective Projection)

投影实战


学前概念

透视投影法(perspective projection method)一种投影法。所谓透视,即穿过透明体观察物体。在人与物体之间,设立一个透明的平面,称作画面(即投影面),人眼的位置称视点(即投影中心COP),由视点至物体上各个点连线,称视线(即投影线),各视线与画面(即投影面)的交点,即为物体上各点的透视投影,连结各点的投影,即得物体的透视。

距离的测验

是时候来个小测验了。当物体非常非常远的时候,真正的X,也就是离中心有多远,可能很大,因为真正的Z,可能是英里。如果我移动相机,移动原点,这些数字几乎不变。世界上真正的 x 布局的位置,世界上关于这一点的真实布局,距离它还有几英里远。如果我移动几英寸,实际上没有什么变化。这就解释了下面哪一个?

a.为什么月亮跟着你? 我希望月亮真的跟着你,也跟着我,也许我很特别;

b.为什么北极星总是偏北;

c.为什么无论你在哪里,你都能从太阳上知道时间。

d.所有这些。

答案显然是d,原因是,基本上当我移动相机的时候,因为本质上是X,大写X,大写Z不变,all right? 在图像上,月球的点落在我的图像平面上,它也不会改变。当然,如果我转身,它就会改变,当然,我们只是在讨论转身。现在,很快我就会从视频中转出去,梅根会不开心,因为我要回到这里继续录制视频。但如果你一直在开车,你看到了月亮,就像在跟踪你一样,okay? 这是因为 X 和 Z,如果我这样走,Z就不会改变,但 X 变化的速度可能已经是数英里,okay? 但月亮在什么呢,就像200英里远?我不知道,它距离我们很远很远。

有人查一下,我想是25万英里(事实是38万英里),大概是这样。总之,比这里和罗斯威尔(外星人)之间的距离要短得多。所以,当我从这里到罗斯威尔,X几乎不变,Z也几乎不变,所以它出现在图像上的地方没有改变。基本上,这就是为什么非常遥远的事情不会随着我移动而移动。唯一重要的是角度,太阳或北极星或这些东西都是如此,这是因为这个透视投影(Perspective  Projection)。

齐次坐标(Homogeneous Coordinate)

现在,我们来看看丑陋的东西。齐次坐标(Homogeneous Coordinate)。它不是丑陋的,它是美丽的,对于一些扭曲的美学概念来说。

这个运算是 x / z 和 y / z,这是一个线性变换吗? 答案是否定的。之前我们说过除法是一个线性运算,是的,除以某个常数,除以a, 1 / a,乘以1 / a,这些是线性运算,但是这里我取x ,y 和 z ,okay? 实际上我需要把 z 提出来然后把 x 和 y 除以它。如果有另一个点(x1, y1, z1)除以z,所以这不是一个线性运算。我必须彻底改变正在发生的事情。

我们要做一个技巧。关键是,我们要再加一个坐标,all right? 我们可以在二维或三维中做这个。在二维空间中,xy变成了xy1。在三维空间中,x,y,z变成了xyz1。下面这个坐标(如图),现在w写成1,之后我们会取w为其他的值,这是齐次版本,齐次坐标(Homogeneous Coordinate)。

有时它被称为比例因子(Scale Factor)但我认为这是不恰当,它应该被看作是齐次坐标,或者是向量的齐次分量。从常规坐标转换为齐次坐标并再次返回常规坐标是非常简单的,right?

如果我有齐次坐标(x,y,w),我得到的是非齐次(nonhomogeneous)坐标就是除以w,所以2维空间的x,y 和 3维空间的 x,y,z,每一个除以w(如图),现在你们明白了为什么把xy1变成非齐次的了,就像之前一样我,还是得到了x和y。但如果最后一个齐次坐标不是1的话,我就会得到一个不同的值。顺便说一下,这使得齐次坐标在尺度下不变性。如果我把整个齐次坐标乘以某个常数,比如说a,我有ax ay aw。当我再做一次换算除法时,a约掉了。

透视投影(Perspective Projection)

这样做的真正酷之处在于,现在我们可以采用透视投影(Perspective Projection),在齐次坐标系下进行线性矩阵运算,我们不用担心非齐次部分直到最后。所以看起来像这样,这里有一个3×4矩阵,你会注意到它是 1 1 1 / f,我把它乘以齐次三维坐标 xyz1,就得到了这个三行齐次坐标,这是二维齐次坐标(如图),okay?

我可以把它作为齐次坐标一直保持下去直到我需要在图像中使用它。当我把它用作图像时,我把上面的元素除以齐次元素,得到f (x / z)和f (y / z)。顺便提一下,有时也称为u,v(如图)。 这些是通过焦距为 f 的投影,投影到的世界中某些点x,y,z的图像中的坐标。

所以我们的投影运算就是这种线性矩阵乘法,正如我们所知,我们都喜欢线性矩阵乘法,因为我们知道如何做很多。 并颠倒它们和所有其他类型的东西。 它确实是投影几何的基础,以及投影数学,我们将会在这门课的一部分中使用。 顺便说一句,从现在开始,f 是焦距(focal length)。 在我们谈论距离 D 之前,这里我们的焦距 f 是从投影中心到图像平面的距离,并且它不是我们上次谈论的光圈的 f 。 我可能不应该提醒你,因为可能是几个月前你看过那个讲座。但是这里的 f 总是焦距,也就是从中心投影到像平面的距离。

那么缩放投影矩阵是如何改变变换的呢? 这里我做的是把投影矩阵乘以 f (如图1)。我可以通过别的东西来缩放它,但我会用 f 来缩放它。现在,不是沿着对角线1 1 1/f,而是乘以 f 然后得到f f 1(如图2),乘以三维齐次坐标向量它有四个维度(如图3),现在我得到fx, fy, z(如图4)。然后当我做除法的时候,我得到了什么,和之前一样的东西,okay? 所以它是不变(invariant)的。

1 2

3 4

投影实战

试着写一些代码来将一个点从3D投影到2D。 确保使用刚刚描述的矩阵运算。 假设您给出了点 p 和焦距 f 的坐标。 编写一个函数,返回2D图像平面上投影点的位置。 这是你的函数应该是什么样子(如图)。

您可以通过传入 p 和 f 的值来测试代码(如图1)。 假设单位是毫米,您可以使用disp显示结果(如图2),尝试不同的坐标和焦距。 请注意,当您点击提交时,我们将根据已知的输入集测试您的函数。

1

2

首先要做的是定义投影矩阵。注意它的大小是3×4,这是三行四列(如图1)。接下来,我们把p变换成齐次坐标,然后转置,结果大小应该是4×1,这是一个有四行1列的向量。将元素附加到任何向量都很容易,向量转置后的一个单引号(如图2)。

 1 2

最后,我们可以应用投影变换,最后得到一个简单的矩阵乘法。注意,我们使用的是星号(*),而不是点星号(.*),因为我们没有做元素乘法(如图1)。当返回值时,记住要转换回非齐次坐标。u = x/z, v = y/z,就是这样(如图2)。

1

2

这里有一个快速检查(如图1),看看函数的返回值是否有意义。假设我们保持焦距为50毫米。然后我们知道在50毫米处的任何一点都应该在x y坐标上投影。我们来运行一下(如图2)。无论坐标是什么,这都是正确的。

1

2

我们试试别的吧(如图1,如图2),

2

同样地,应该把焦距的两倍缩小到一半。看,透视投影还不错。

2


——学会编写自己的代码,才能练出真功夫。 

这篇关于14.图像透视——距离的测验,齐次坐标(Homogeneous Coordinate),透视投影(Perspective Projection),投影实战_2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/757952

相关文章

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

基于WinForm+Halcon实现图像缩放与交互功能

《基于WinForm+Halcon实现图像缩放与交互功能》本文主要讲述在WinForm中结合Halcon实现图像缩放、平移及实时显示灰度值等交互功能,包括初始化窗口的不同方式,以及通过特定事件添加相应... 目录前言初始化窗口添加图像缩放功能添加图像平移功能添加实时显示灰度值功能示例代码总结最后前言本文将

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

Golang使用minio替代文件系统的实战教程

《Golang使用minio替代文件系统的实战教程》本文讨论项目开发中直接文件系统的限制或不足,接着介绍Minio对象存储的优势,同时给出Golang的实际示例代码,包括初始化客户端、读取minio对... 目录文件系统 vs Minio文件系统不足:对象存储:miniogolang连接Minio配置Min

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测