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

相关文章

Pandas使用SQLite3实战

《Pandas使用SQLite3实战》本文主要介绍了Pandas使用SQLite3实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1 环境准备2 从 SQLite3VlfrWQzgt 读取数据到 DataFrame基础用法:读

Python实战之屏幕录制功能的实现

《Python实战之屏幕录制功能的实现》屏幕录制,即屏幕捕获,是指将计算机屏幕上的活动记录下来,生成视频文件,本文主要为大家介绍了如何使用Python实现这一功能,希望对大家有所帮助... 目录屏幕录制原理图像捕获音频捕获编码压缩输出保存完整的屏幕录制工具高级功能实时预览增加水印多平台支持屏幕录制原理屏幕

最新Spring Security实战教程之Spring Security安全框架指南

《最新SpringSecurity实战教程之SpringSecurity安全框架指南》SpringSecurity是Spring生态系统中的核心组件,提供认证、授权和防护机制,以保护应用免受各种安... 目录前言什么是Spring Security?同类框架对比Spring Security典型应用场景传统

最新Spring Security实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)

《最新SpringSecurity实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)》本章节介绍了如何通过SpringSecurity实现从配置自定义登录页面、表单登录处理逻辑的配置,并简单模拟... 目录前言改造准备开始登录页改造自定义用户名密码登陆成功失败跳转问题自定义登出前后端分离适配方案结语前言

OpenManus本地部署实战亲测有效完全免费(最新推荐)

《OpenManus本地部署实战亲测有效完全免费(最新推荐)》文章介绍了如何在本地部署OpenManus大语言模型,包括环境搭建、LLM编程接口配置和测试步骤,本文给大家讲解的非常详细,感兴趣的朋友一... 目录1.概况2.环境搭建2.1安装miniconda或者anaconda2.2 LLM编程接口配置2

基于Canvas的Html5多时区动态时钟实战代码

《基于Canvas的Html5多时区动态时钟实战代码》:本文主要介绍了如何使用Canvas在HTML5上实现一个多时区动态时钟的web展示,通过Canvas的API,可以绘制出6个不同城市的时钟,并且这些时钟可以动态转动,每个时钟上都会标注出对应的24小时制时间,详细内容请阅读本文,希望能对你有所帮助...

使用Python开发一个图像标注与OCR识别工具

《使用Python开发一个图像标注与OCR识别工具》:本文主要介绍一个使用Python开发的工具,允许用户在图像上进行矩形标注,使用OCR对标注区域进行文本识别,并将结果保存为Excel文件,感兴... 目录项目简介1. 图像加载与显示2. 矩形标注3. OCR识别4. 标注的保存与加载5. 裁剪与重置图像

Spring AI与DeepSeek实战一之快速打造智能对话应用

《SpringAI与DeepSeek实战一之快速打造智能对话应用》本文详细介绍了如何通过SpringAI框架集成DeepSeek大模型,实现普通对话和流式对话功能,步骤包括申请API-KEY、项目搭... 目录一、概述二、申请DeepSeek的API-KEY三、项目搭建3.1. 开发环境要求3.2. mav

基于Python实现多语言朗读与单词选择测验

《基于Python实现多语言朗读与单词选择测验》在数字化教育日益普及的今天,开发一款能够支持多语言朗读和单词选择测验的程序,对于语言学习者来说无疑是一个巨大的福音,下面我们就来用Python实现一个这... 目录一、项目概述二、环境准备三、实现朗读功能四、实现单词选择测验五、创建图形用户界面六、运行程序七、

Python与DeepSeek的深度融合实战

《Python与DeepSeek的深度融合实战》Python作为最受欢迎的编程语言之一,以其简洁易读的语法、丰富的库和广泛的应用场景,成为了无数开发者的首选,而DeepSeek,作为人工智能领域的新星... 目录一、python与DeepSeek的结合优势二、模型训练1. 数据准备2. 模型架构与参数设置3