PnP and Perspective Projection and Pose Computation

这篇具有很好参考价值的文章主要介绍了PnP and Perspective Projection and Pose Computation。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

PnP and Perspective Projection and Pose Computation

Review PnP problem from a computer graphics rendering view

首先从一个 StackExchange
问题出发,下面是本人的回答摘录。

Intrinsic Matrix vs. Projection Matrix

What is the difference between Intrinsic Matrix( K ) and Perspective Projection
Matrix(call it P Matrix later)?

  • For K Matrix it transform 3D points to 2D pixels in image space.
    And during this procedure only x and y value are concerned.
  • For P Matrix it transform 3D points to NDC space.

Take a look at two matrices:

\[K = \begin{bmatrix}f_x& 0& c_x\\ 0& f_y& c_y\\ 0 & 0 & 1\\\end{bmatrix}\]
\[P = \begin{bmatrix} \frac{1}{t*a}& 0& 0& 0\\0& \frac{1}{t}& 0& 0\\ 0 & 0 & A& B&\\ 0 & 0 & -1& 0\\ \end{bmatrix}\]
\[t=tan(\frac{fovy}{2}) \]
\[a=\frac{width}{height} \]

Let's add perspective divide and show the result of the above two matrices:

Intrinsic case: $$x_{2d} = \frac{x_0}{z_0 * \frac{1}{f_x}} + c_x$$

Perspective case: $$x_{2d} = \frac{x_0}{-z_0(t*a)}$$

Similar with some difference.

The image space: Origin from left-top corner
so should add Cx Cy as the offset from center to left-top corner.
And in NDC space we assume Z-axis direct out of screen so P(3,2) = -1.

从该问题引申,继续思考: PnP 问题中的投影过程如何体现?

Dig into solvePnP

我们看一下 PnP 问题的描述,下面这个公式来自 OpenCV 文档

\[\begin{align*} \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} &= \bf{A} \hspace{0.1em} \Pi \hspace{0.2em} ^{c}\bf{T}_w \begin{bmatrix} X_{w} \\ Y_{w} \\ Z_{w} \\ 1 \end{bmatrix} \\ \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} &= \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\ r_{21} & r_{22} & r_{23} & t_y \\ r_{31} & r_{32} & r_{33} & t_z \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} X_{w} \\ Y_{w} \\ Z_{w} \\ 1 \end{bmatrix} \end{align*} \]

看一下 solvePnP 的 DLT 办法的原理,参考这个文章

直接假设一个带有12个未知数的 3x4 的矩阵作为未知数,并忽略其中的Rt含义,
然后将上式化简,建立一个关于未知3x4矩阵的方程,下面方程中用 a1~a12 表示。

\[\lambda {\text{ = }}\left[ {\begin{array}{*{20}{c}} u \\ v \\ 1 \end{array}} \right] = \left[ {\begin{array}{*{20}{c}} {{f_x}}&{}&{{c_x}} \\ {}&{{f_y}}&{{c_y}} \\ {}&{}&1 \end{array}} \right]\left[ {\begin{array}{*{20}{c}} {{a_1}}&{{a_2}}&{{a_3}}&{{a_4}} \\ {{a_5}}&{{a_6}}&{{a_7}}&{{a_8}} \\ {{a_9}}&{{a_{10}}}&{{a_{11}}}&{{a_{12}}} \end{array}} \right]\left[ {\begin{array}{*{20}{c}} x \\ y \\ z \\ 1 \end{array}} \right] \ \\ \]
\[\left\{ {\begin{array}{*{20}{l}} {\lambda u = x{f_x}{a_1} + x{c_x}{a_9} + y{f_x}{a_2} + y{c_x}{a_{10}} + z{f_x}{a_3} + z{c_x}{a_{11}} + {f_x}{a_4} + {c_x}{a_{12}}} \\ {\lambda v = x{f_y}{a_5} + x{c_y}{a_9} + y{f_y}{a_6} + y{c_y}{a_{10}} + z{f_y}{a_7} + z{c_y}{a_{11}} + {f_y}{a_8} + {c_y}{a_{12}}} \\ {\lambda = x{a_9} + y{a_{10}} + z{a_{11}} + {a_{12}}} \end{array}} \right. \ \\ \]

λ 可以表示乘上投影矩阵以后的 z. 那么除以 λ 后得到的 uv 就是 2D 图像空间的数值了。
要是能取到6个点的数据,组成12行,就可以直接进行求解。具体求解过程中的 SVD 分解求最小二乘解的过程不赘述。

注意,这里有个 cv 常用的坐标系与 GL 常用的坐标系的区别,Z轴方向相反。上文提到在求解时会限制 z > 0.
所以要用 pnp 方法来求解的话,需要先把 3d 点做一个 z 轴镜像的变换,然后再构建 K 矩阵

\[K=\begin{bmatrix} \frac{1}{t*a} & &0 \\ & \frac{1}{t} &0 \\ & & 1 \end{bmatrix} \]

同时,2d点不是图像空间的点,而是 NDC 空间的点,如此进行计算得到的RT数据可以大致对齐。

How to compute object pose with Perspective Projection

我们考虑一个图形学常见的透视投影,投影矩阵 P 见第一部分的定义,并加入透视除法。

如果问题简化一下,假设 3D 物体和 2D 投影的朝向已经对齐,亦即旋转部分 R
已经完成。那么剩下需要计算的就只剩下了平移,这里因为是透视投影,所以在 Z 轴的平移
会直接影响最终成像的大小,这是之前 PnP 方法里面所没有涉及的。

如果旋转没有对齐,那么该怎么计算旋转呢?可以利用 SVD 分解得到旋转矩阵,暂先略过……

回到投影计算,投影的方程如下,其中 \(\Delta\) 是未知的平移变换。

\[\begin{align*} \begin{bmatrix} x' \\ y' \\ z' \\ w' \end{bmatrix} &= \bf{P} * (\begin{bmatrix} X_{w} \\ Y_{w} \\ Z_{w} \\ 1 \end{bmatrix} + \begin{bmatrix} \Delta_x \\ \Delta_y \\ \Delta_z \\ 0 \end{bmatrix} ) \\ \begin{bmatrix} X_{2d} \\ Y_{2d} \end{bmatrix} &= \begin{bmatrix} \frac{x'}{w'} \\ \frac{y'}{w'} \end{bmatrix} \end{align*}\]

将 P 用具体数值代入可得:

\[ \begin{align*} X_2d &= -\frac{X_w + \Delta_x}{t*a*(Z_w + \Delta_z)} \\ Y_2d &= -\frac{Y_w + \Delta_y}{t*(Z_w + \Delta_z)} \end{align*} \]

定义优化目标:

\[\Delta = arg \, \min\limits_{\Delta} 0.5(X_2d+\frac{X_w + \Delta_x}{t*a*(Z_w + \Delta_z)} + Y_2d + \frac{Y_w + \Delta_y}{t*(Z_w + \Delta_z)})^2 \]

使用高斯牛顿法迭代求解,并结合透视投影渲染,整体 3D 与 2D 的对齐效果好。文章来源地址https://www.toymoban.com/news/detail-647081.html

到了这里,关于PnP and Perspective Projection and Pose Computation的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Hand Avatar: Free-Pose Hand Animation and Rendering from Monocular Video

    Github: https://seanchenxy.github.io/HandAvatarWeb MANO-HD模型:作为高分辨率网络拓扑来拟合个性化手部形状 将手部几何结构分解为每个骨骼的刚性部分,再重新组合成对的几何编码,得到一个跨部分的一致占用场 纹理建模:在MANO-HD表面设计了可驱动的anchor,记录反照率;定向软占用

    2024年02月07日
    浏览(35)
  • GeoNet: Unsupervised Learning of Dense Depth, Optical Flow and Camera Pose 论文阅读

    题目 :GeoNet: Unsupervised Learning of Dense Depth, Optical Flow and Camera Pose 作者 :Zhichao Yin and Jianping Shi 来源 :CVPR 时间 :2018 我们提出了 GeoNet,这是一种联合无监督学习框架,用于视频中的单目深度、光流和自我运动估计。 这三个组件通过 3D 场景几何的性质耦合在一起,由我们的框

    2024年02月09日
    浏览(31)
  • 论文阅读:FoundationPose: Unified 6D Pose Estimation and Tracking of Novel Objects-6DoF位姿估计

    CVPR2024满分文章,英伟达团队工作。 文章地址:https://arxiv.org/pdf/2312.08344.pdf 代码地址:https://github.com/NVlabs/FoundationPose 提出FoundationPose,能用于6D位姿估计与跟踪,无论模型是否可用都支持。只需要CAD模型或少量参考图像就能进行zero-shot测试,泛化能力依靠大规模训练, LLM 和

    2024年04月29日
    浏览(41)
  • 浅谈 ByteHouse Projection 优化实践

    预聚合是 OLAP 系统中常用的一种优化手段,在通过在加载数据时就进行部分聚合计算,生成聚合后的中间表或视图,从而在查询时直接使用这些预先计算好的聚合结果,提高查询性能,实现这种预聚合方法大多都使用物化视图来实现。 Clickhouse 社区实现的 Projection 功能类似于

    2024年02月08日
    浏览(24)
  • 探索ClickHouse——使用Projection加速查询

    在测试Projection之前,我们需要先创建一张表,并导入大量数据。 我们可以直接使用指令,从URL指向的文件中获取内容并导入表。但是担心网络不稳定,我们先将文件下载下来。 28497127 pp-complete.csv -rw-rw-r-- 1 fangliang fangliang 4982107267 Aug 29 05:13 pp-complete.csv 即这个文件约有2850万行

    2024年02月07日
    浏览(30)
  • 随手笔记——3D−2D:PnP

    PnP(Perspective-n-Point)是求解3D到2D点对运动的方法。它描述了当知道n个3D空间点及其投影位置时,如何估计相机的位姿。 特征点的3D位置可以由三角化或者RGB-D相机的深度图确定。因此,在双目或RGB-D的视觉里程计中,可以直接使用PnP估计相机运动。而在单目视觉里程计中,必

    2024年02月15日
    浏览(24)
  • PnP解算及SolvePnp用法

    PnP问题:Perspective-n-Point问题。 参考下图, 给定n个3D空间参考点,以及各点在相机图像上对应的成像点,求参考点所在坐标系与相机的空间关系。 即: 已知条件1:给定匹配点对:世界坐标系(图中OwXwYwZw)下的n个3D点坐标及其对应在图像坐标系(图中ouv)下的2D点坐标。 已

    2024年02月03日
    浏览(24)
  • pnp单目相机标定测距

    参考:opencv 单目相机pnp测距(Cpp)-CSDN博客

    2024年02月08日
    浏览(31)
  • 【沐风老师】3DMAX几何投影插件Geometry Projection使用详解

         【几何投影插件】 描述 3DMAX几何投影插件Geometry Projection,将一个或多个对象或它的顶点选择沿全局或局部 x、y 或 z 轴投影到另一个对象上。 适用版本 3dMax2013或更高版本 安装设置 插件的安装非常简单,解压后把插件脚本 “geometry_projection_setup-zh_CN.mzp”直接拖放到 3

    2024年01月20日
    浏览(32)
  • 论文阅读 - Understanding Diffusion Models: A Unified Perspective

    假设给定了一个数据集 { x 1 , x 2 , x 3 , . . . , x N } {x_1, x_2, x_3, ..., x_N} { x 1 ​ , x 2 ​ , x 3 ​ , ... , x N ​ } ,在图像生成任务中,每个 x i x_i x i ​ 就是一张图片,每个点都是独立采样于真实数据分布 p ( x ) p(x) p ( x ) 的。 生成模型 的目的就是通过有限的数据集 { x i } {x_i}

    2024年02月12日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包