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

相关文章

网页解析 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测

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~ 🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!! 环境说明:Windows 10

springboot实战学习(1)(开发模式与环境)

目录 一、实战学习的引言 (1)前后端的大致学习模块 (2)后端 (3)前端 二、开发模式 一、实战学习的引言 (1)前后端的大致学习模块 (2)后端 Validation:做参数校验Mybatis:做数据库的操作Redis:做缓存Junit:单元测试项目部署:springboot项目部署相关的知识 (3)前端 Vite:Vue项目的脚手架Router:路由Pina:状态管理Eleme

Verybot之OpenCV应用一:安装与图像采集测试

在Verybot上安装OpenCV是很简单的,只需要执行:         sudo apt-get update         sudo apt-get install libopencv-dev         sudo apt-get install python-opencv         下面就对安装好的OpenCV进行一下测试,编写一个通过USB摄像头采

深度学习实战:如何利用CNN实现人脸识别考勤系统

1. 何为CNN及其在人脸识别中的应用 卷积神经网络(CNN)是深度学习中的核心技术之一,擅长处理图像数据。CNN通过卷积层提取图像的局部特征,在人脸识别领域尤其适用。CNN的多个层次可以逐步提取面部的特征,最终实现精确的身份识别。对于考勤系统而言,CNN可以自动从摄像头捕捉的视频流中检测并识别出员工的面部。 我们在该项目中采用了 RetinaFace 模型,它基于CNN的结构实现高效、精准的

项目实战系列三: 家居购项目 第四部分

购物车 🌳购物车🍆显示购物车🍆更改商品数量🍆清空购物车&&删除商品 🌳生成订单 🌳购物车 需求分析 1.会员登陆后, 可以添加家居到购物车 2.完成购物车的设计和实现 3.每添加一个家居,购物车的数量+1, 并显示 程序框架图 1.新建src/com/zzw/furns/entity/CartItem.java, CartItem-家居项模型 /***