python - 如何将质心从像素转换为真实世界坐标
问题描述
我正在开发一个应用程序,使用 IFM 3D 相机在机器人拾取之前识别零件。目前,我能够使用深度图像中的轮廓找到这些对象的质心,并从那里计算这些对象在像素空间中的中心点。
我的下一个任务是将 2D 质心坐标转换为“真实”空间中的 3D 点。我能够训练机器人,使其坐标系位于图像的中心或图像的传统 (0,0) 点(左上角)。
我使用的 3D 相机提供了内在和外在矩阵。我知道我需要使用这些矩阵的某种组合将我的质心投影到三个空间中,但仍然存在以下问题:
我目前对谷歌搜索的理解是内在矩阵用于修复镜头失真(桶形和针孔翘曲等),而外在矩阵用于将点投影到现实世界中。这个简化的假设是否正确?
相机如何提供单个外在矩阵?我知道传统上这些矩阵是使用棋盘角方法找到的,但这些矩阵不依赖于相机的高度吗?
解决方案是否像采用 3x4 外在矩阵并将其乘以 3x1 矩阵 [x, y, 1] 一样简单,如果是,则返回值将相对于相机中心或传统的 (0,0) 点图片。
提前感谢您的任何见解!另外,如果有什么安慰的话,我正在用 python 和 openCV 做所有事情。
解决方案
不,我建议您阅读 Hartley 和 Zisserman 的多视图几何中的基础知识,可在网络上免费获得。根据相机型号,内在函数包含不同的参数。对于针孔相机模型,这些是焦距和主点。
您可以直接将 2D 质心转换为 3D 的唯一原因是您使用 3D 相机。阅读相机手册,应该解释如何为您的特定型号提供 2D 和 3D 坐标之间的关系。如果您只有图像数据,则只能从至少两个视图计算 3D 点。
不,当然不是。请不要偷懒,开始阅读有关相机投影的基础知识,而不是要求其他人解释网络和文献中随处可见的常见基础知识。
推荐阅读
- ios - SwiftUI:点击 TabView 的选项卡时崩溃
- apache-nifi - 从 Git 恢复 Nifi 注册表
- android - 如何实现一个具有多个变量的接口?
- javascript - 如何根据数据量更轻松地列出数据库中的多个变量
- python - 使用 pathlib 获取文件名和最后 x 个目录名称是否有更好的方法
- python - 如何根据下拉菜单中的值打印文本
- mysql - 不同的列值连接(mysql)
- bash - bash 是否可以通过 stdin/stdout 在读取和写入子进程之间“交互地”交替?
- android - @Parcelize 和超类,由于构造函数要求而使数据翻倍
- postgresql - liquibase 返回 DiffChangeLog 的误报结果