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

相关文章

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例

《PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例》词嵌入解决NLP维度灾难,捕捉语义关系,PyTorch的nn.Embedding模块提供灵活实现,支持参数配置、预训练及变长... 目录一、词嵌入(Word Embedding)简介为什么需要词嵌入?二、PyTorch中的nn.Em

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

Spring Boot3.0新特性全面解析与应用实战

《SpringBoot3.0新特性全面解析与应用实战》SpringBoot3.0作为Spring生态系统的一个重要里程碑,带来了众多令人兴奋的新特性和改进,本文将深入解析SpringBoot3.0的... 目录核心变化概览Java版本要求提升迁移至Jakarta EE重要新特性详解1. Native Ima

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

SpringBoot集成MyBatis实现SQL拦截器的实战指南

《SpringBoot集成MyBatis实现SQL拦截器的实战指南》这篇文章主要为大家详细介绍了SpringBoot集成MyBatis实现SQL拦截器的相关知识,文中的示例代码讲解详细,有需要的小伙伴... 目录一、为什么需要SQL拦截器?二、MyBATis拦截器基础2.1 核心接口:Interceptor

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习

Java docx4j高效处理Word文档的实战指南

《Javadocx4j高效处理Word文档的实战指南》对于需要在Java应用程序中生成、修改或处理Word文档的开发者来说,docx4j是一个强大而专业的选择,下面我们就来看看docx4j的具体使用... 目录引言一、环境准备与基础配置1.1 Maven依赖配置1.2 初始化测试类二、增强版文档操作示例2.