相机小孔成像模型与透视变换

embedded/2025/1/14 14:28:16/

0 背景

本文用于记录小孔相机成像的数学模型推导,并讨论特定条件下两个相机之间看到图像的变换关系。

1 小孔成像模型

在这里插入图片描述

小孔成像模型如上图所示。物理世界发光点P,经过小孔O投影到物理成像平面,形成像点I’
简易起见,构造虚拟成像平面,虚拟成像平面与物理成像平面关于O原点对称。
像点I’在虚拟成像平面对应的点为I。
为虚拟像平面建立坐标系u-v
相机坐标系z轴垂直指向虚拟相平面,x轴与u轴同向,y轴与v轴同向。

PI之间满足关系 O I ⃗ = λ ⋅ O P ⃗ \vec{OI} = \lambda \cdot \vec{OP} OI =λOP 。再设I的x,y坐标与u,v坐标满足关系:
[ I x I y I z ] = [ s u 0 δ u 0 s v δ v 0 0 I z ] ⋅ [ I u I v 1 ] \begin{bmatrix} I_{x} \\ I_{y} \\ I_{z} \end{bmatrix} = \begin{bmatrix} s_{u} & 0 & \delta u \\ 0 & s_{v} & \delta v \\ 0 & 0 & I_{z} \end{bmatrix} \cdot \begin{bmatrix} I_{u} \\ I_{v} \\ 1 \end{bmatrix} IxIyIz = su000sv0δuδvIz IuIv1
I点像坐标表示 O I ⃗ \vec{OI} OI ,带入 O I ⃗ = λ ⋅ O P ⃗ \vec{OI} = \lambda \cdot \vec{OP} OI =λOP ,基于第三维求得 λ \lambda λ,等式两边同时除以常量 I z I_{z} Iz,得到小孔成像模型的数学表达。
[ f u 0 b u 0 f v b v 0 0 1 ] ⋅ [ I u I v 1 ] = 1 I z ⋅ [ I x I y I z ] = 1 P z ⋅ [ P x P y P z ] \begin{bmatrix} f_{u} & 0 & b_{u} \\ 0 & f_{v} & b_{v} \\ 0 & 0 & 1 \end{bmatrix} \cdot \begin{bmatrix} I_{u} \\ I_{v} \\ 1 \end{bmatrix} = \frac{1}{I_{z}} \cdot \begin{bmatrix} I_{x} \\ I_{y} \\ I_{z} \end{bmatrix} = \frac{1}{P_{z}} \cdot \begin{bmatrix} P_{x} \\ P_{y} \\ P_{z} \end{bmatrix} fu000fv0bubv1 IuIv1 =Iz1 IxIyIz =Pz1 PxPyPz
简记为下式。其中 M M M 为包含 f u , b u , f v , b v f_{u}, b_{u}, f_{v}, b_{v} fu,bu,fv,bv 3 × 3 3 \times 3 3×3 矩阵。 I ⃗ \vec{I} I 为点 I I I 在虚拟成像平面上的齐次坐标向量。
M ⋅ I ⃗ = P ⃗ / P z M \cdot \vec{I} = \vec{P} / P_{z} MI =P /Pz
再引入世界坐标系与相机坐标系的相对关系,设相机坐标系在世界坐标系下的旋转矩阵与平移向量为 R R R, T T T,则小孔成像模型变形为
M ⋅ I ⃗ = ( R ⋅ P ⃗ + T ) / P z c M \cdot \vec{I} = (R \cdot \vec{P} + T) / P^{c}_{z} MI =(RP +T)/Pzc
其中, P z c P^{c}_{z} Pzc 仍为 P P P点在相机坐标系下在z轴分量。
相应的,当已知像点坐标,对应物点坐标满足方程
P ⃗ = P z c ⋅ R T M I ⃗ − R T T , P z c > 0 \vec{P} = P^{c}_{z} \cdot R^{T} M \vec{I} - R^{T}T, P^{c}_{z} > 0 P =PzcRTMI RTT,Pzc>0
可见,已知像点坐标,可行物点坐标构成了以相机坐标系原点为起始点,与 O I ⃗ \vec{OI} OI 同向的射线。

2 物点在已知平面条件下的像点物点关系讨论

当已知物点在特定平面下,不是一般性地,假设物点在世界坐标系XOY平面中,即物点Z分量为0。此时,特化的小孔成像模型写为
M ⋅ I ⃗ = 1 P z c ⋅ [ r 1 r 2 T ] ⋅ [ X Y 1 ] = 1 P z c ⋅ G ⋅ [ X Y 1 ] M \cdot \vec{I} = \frac{1}{P^{c}_{z}} \cdot \begin{bmatrix} r_{1} & r_{2} & T \end{bmatrix} \cdot \begin{bmatrix} X \\ Y \\ 1 \end{bmatrix} = \frac{1}{P^{c}_{z}} \cdot G \cdot \begin{bmatrix} X \\ Y \\ 1 \end{bmatrix} MI =Pzc1[r1r2T] XY1 =Pzc1G XY1
其中, r 1 r_{1} r1 r 2 r_{2} r2分别为矩阵 R R R的第1,2列。此时根据像点坐标求解物点坐标方法为
[ X Y 1 ] = P z c ⋅ G − 1 M I ⃗ \begin{bmatrix} X \\ Y \\ 1 \end{bmatrix} = P^{c}_{z} \cdot G^{-1} M \vec{I} XY1 =PzcG1MI
这种特殊条件下,如果考虑两个相机模型,对同一物点P,两个像点坐标之间存在关系
[ I u 2 I v 2 1 ] = P z c 1 P z c 2 ⋅ M 2 − 1 G 2 G 1 − 1 M 1 ⋅ [ I u 1 I v 1 1 ] \begin{bmatrix} I^{2}_{u} \\ I^{2}_{v} \\ 1 \end{bmatrix} = \frac{P^{c1}_{z}}{P^{c2}_{z}} \cdot M^{-1}_{2} G_{2} G^{-1}_{1} M_{1} \cdot \begin{bmatrix} I^{1}_{u} \\ I^{1}_{v} \\ 1 \end{bmatrix} Iu2Iv21 =Pzc2Pzc1M21G2G11M1 Iu1Iv11
简记为
[ I u 2 I v 2 1 ] = P z c 1 P z c 2 ⋅ H ⋅ [ I u 1 I v 1 1 ] \begin{bmatrix} I^{2}_{u} \\ I^{2}_{v} \\ 1 \end{bmatrix} = \frac{P^{c1}_{z}}{P^{c2}_{z}} \cdot H \cdot \begin{bmatrix} I^{1}_{u} \\ I^{1}_{v} \\ 1 \end{bmatrix} Iu2Iv21 =Pzc2Pzc1H Iu1Iv11
考虑第三维分量,可以求得系数项 P z c 1 / P z c 2 P^{c1}_{z}/P^{c2}_{z} Pzc1/Pzc2,整理为以下公式
[ t 1 t 2 t 3 ] = H ⋅ [ I u 1 I v 1 1 ] [ I u 2 I v 2 1 ] = 1 t 3 ⋅ [ t 1 t 2 t 3 ] \begin{bmatrix} t_{1} \\ t_{2} \\ t_{3} \end{bmatrix} = H \cdot \begin{bmatrix} I^{1}_{u} \\ I^{1}_{v} \\ 1 \end{bmatrix} \\ \begin{bmatrix} I^{2}_{u} \\ I^{2}_{v} \\ 1 \end{bmatrix} = \frac{1}{t_{3}} \cdot \begin{bmatrix} t_{1} \\ t_{2} \\ t_{3} \end{bmatrix} t1t2t3 =H Iu1Iv11 Iu2Iv21 =t31 t1t2t3
综上所述,当已知物点P在世界坐标系XOY平面上时,两个相机下物点P的像点坐标之间满足透视变换关系,这个关系由透视变换矩阵 H H H唯一确定。

3 H H H矩阵的标定

本节讨论2描述的特殊条件下, H H H矩阵的求解问题。将 H H H写作
H = [ h 11 h 12 h 13 h 21 h 22 h 23 h 31 h 32 h 33 ] H = \begin{bmatrix} h_{11} & h_{12} & h_{13} \\ h_{21} & h_{22} & h_{23} \\ h_{31} & h_{32} & h_{33} \end{bmatrix} H= h11h21h31h12h22h32h13h23h33
给定一组 { ( I u 1 , I v 1 ) , ( I u 2 , I v 2 ) } \{(I^{1}_{u}, I^{1}_{v}),(I^{2}_{u},I^{2}_{v})\} {(Iu1,Iv1),(Iu2,Iv2)}坐标对,则对任一对坐标对,求解的 H H H应满足约束
[ I u 2 I v 2 1 ] = 1 h 31 I u 1 + h 32 I v 1 + h 33 ⋅ H ⋅ [ I u 1 I v 1 1 ] \begin{bmatrix} I^{2}_{u} \\ I^{2}_{v} \\ 1 \end{bmatrix} = \frac{1}{h_{31}I^{1}_{u}+h_{32}I^{1}_{v}+h_{33}} \cdot H \cdot \begin{bmatrix} I^{1}_{u} \\ I^{1}_{v} \\ 1 \end{bmatrix} Iu2Iv21 =h31Iu1+h32Iv1+h331H Iu1Iv11
H 0 H_{0} H0满足上述约束,容易验证,任意 H = s ⋅ H 0 , s ≠ 0 H = s \cdot H_{0}, s \neq 0 H=sH0,s=0均满足上述约束。
即满足约束的 H H H有无穷多个,它们之间只差一个缩放系数。而我们只需要求解一个即可。
简单起见,取 h 33 = 1 h_{33}=1 h33=1。则对于一个点对,我们有方程
[ I u 1 I v 1 1 0 0 0 − I u 2 I u 1 − I u 2 I v 1 − I u 2 0 0 0 I u 1 I v 1 1 − I v 2 I u 1 − I v 2 I v 1 − I u v ] ⋅ [ h 11 h 12 h 13 h 21 h 22 h 23 h 31 h 32 1 ] = 0 ⃗ \begin{bmatrix} I^{1}_{u} & I^{1}_{v} & 1 & 0 & 0 & 0 & -I^{2}_{u}I^{1}_{u} & -I^{2}_{u}I^{1}_{v} & -I^{2}_{u} \\ 0 & 0 & 0 & I^{1}_{u} & I^{1}_{v} & 1 & -I^{2}_{v}I^{1}_{u} & -I^{2}_{v}I^{1}_{v} & -I^{v}_{u} \end{bmatrix} \cdot \begin{bmatrix} h_{11} \\ h_{12} \\ h_{13} \\ h_{21} \\ h_{22} \\ h_{23} \\ h_{31} \\ h_{32} \\ 1 \\ \end{bmatrix} = \vec{0} [Iu10Iv10100Iu10Iv101Iu2Iu1Iv2Iu1Iu2Iv1Iv2Iv1Iu2Iuv] h11h12h13h21h22h23h31h321 =0
可见一个点对提供了关于 H H H元素的两个线性方程。
最少4个点对,即可求解得到 H H H


http://www.ppmy.cn/embedded/153858.html

相关文章

leetcode39.组合总和

给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates 中的 同一个 数字可以 无限制重复被选取 。如果…

Debian之Maven安装

本地压缩包安装(推荐) 下载地址:https://maven.apache.org/download.cgi # 将安装包移动到当前目录 cd /usr/local # && mkdir maven && cd maven # 在线下载(https://dlcdn.apache.org/maven/) wg…

【pycharm】远程部署失败,查看日志

pycharm 远程部署失败,查看日志 远程一直失败,gateway超时会还知道拉取一份日志: 在./root 下 发现了崩溃日志,启动崩溃了,导致backend一直无法启动。win11就是一直在connect到ubuntu的后端pycharm。。gateway 拉取的日志 我上传的linux版本的pycharm暂时存在dist目录下,…

【Git】分支管理

git 分支管理 在 Git 中,分支合并是一个常见的操作,用于将一个分支的更改集成到另一个分支中。合并后会生成一个新的提交记录,这个过程可以通过多种方式实现。下面详细介绍几种常用的合并方法及其命令。 1. 快进合并 (Fast-Forward Merge) …

麦田物语学习笔记:实现根据物品详情显示

基本流程 1.代码思路 (1)新建ItemTooltip.cs用于控制ItemTooltip(这个是在Hierarchy里的)中的文本内容 回顾一下:对于物品描述(ItemTooltip)的UI有三个部分,第一部分是名字和类型,第二部分是物品详解,第三部分是金币图标以及价值的文本 (2)获取UI中的所有部分,因为item分为可出…

在 Alpine Linux 下通过 Docker 部署 PostgreSQL 服务器

简要介绍 Docker 是一个开源的容器化平台,它使得开发者能够轻松创建、部署和运行应用程序。通过使用 Docker,程序员可以把应用及其所有依赖打包在一个轻量级的容器中,这样可以确保在不同环境中的一致性。PostgreSQL(简称 psql&am…

MySQL:内置函数

1.时间函数 获取当前日期 年月日 获取当前的时间 时分秒 获取当前时间戳 自动转化为年月日时分秒 从时间戳截取日期部分 1990-10-1 10天 1990-10-1 - 10分钟 2025-1-11 - 1949-10-1相差多少天 现在的日期和时间 ‘ 案例 创建一个留言表 插入两条数据 查询一下 显示所有留言…

ThreadLocal 的使用场景

在现代电商平台中,ThreadLocal 常用于以下场景,特别是与线程隔离相关的业务中,以提高性能和简化上下文传递。 1. 用户上下文信息管理 场景:在用户发起的每次请求中,需要携带用户 ID、角色、权限等信息,而这…