纹理对象的实时姿态估计
Real Time pose estimation of a textured object
我正在开发一个 AR 应用程序,其中标记是一个具有复杂形状的 3d 对象,因此我正在尝试制作一个基于 cad 的识别系统作为第一步。
据我所知,从一组图像构建 3d 模型的主要步骤是:
1-循环遍历图像并提取它们的特征。
2-执行成对匹配
3-计算每个图像的 3d 点及其相应的描述符和相机参数。
现在我的第一个问题是我应该如何确定每个 3d 点的描述符,因为我们知道 3d 点是从一组相似的 2d 特征中提取的,这意味着有有许多相似的描述符,每个描述符都对应一个二维点,那么我们应该选择哪些描述符呢?它们并不完全相同,而是彼此略有不同。
我的另一个问题是:
根据OpenCV提供的教程Real Time pose estimation of a textured object ,要求模型为.yaml格式,网格为.ply格式。
我需要知道如何将我的 3d 结构存储到这些类型的文件中?
是否有任何步骤或工具可以帮助这样做?
提前致谢
快速回答,这些是你应该需要的:
- 有纹理对象的 CAD 模型
- "learn" 重点:
- 对于每个 "training" 图像,检测并保留在图像上检测到的关键点
- 对于每个 2D 关键点,使用 3D CAD 网格计算相应的 3D 对象坐标并提取相应的描述符
- 在文件中保存 3D 对象坐标列表和相应的描述符列表
- 检测对象:
- 检测所需图像中的关键点
- 将当前关键点与保存的关键点相匹配
- 使用具有
solvePnPRansac()
的鲁棒方法(RANSAC)估计物体姿态:3D物体点是在训练步骤中保存的3D物体坐标,2D图像点是关键点的2D图像坐标当前检测到并匹配
本教程或多或少应该做类似的事情。
"tricky"部分应该是针对给定的2D图像点和相机位姿计算物体3D点的坐标:
- 您可以在 OpenCV 教程中看到here它是如何完成的纹理对象的实时姿态估计
对于 2D 图像点(例如一个关键点位置),我会做什么(可能与教程代码略有不同):
- 使用内在矩阵将 2D 图像点转换为归一化相机帧 (
z=1
),参见 undistortPoints()
- 测试当前2D图像点是否属于物体:当前相机位姿处图像光线与三角网格的交点(需要测试对于每个三角形)
- 如果当前2D图像点属于物体,则对应的3D物体点(在物体框架中)可以是形成三角形的3个点中最近的点或你可以计算图像光线和三角形之间的交点
我正在开发一个 AR 应用程序,其中标记是一个具有复杂形状的 3d 对象,因此我正在尝试制作一个基于 cad 的识别系统作为第一步。
据我所知,从一组图像构建 3d 模型的主要步骤是: 1-循环遍历图像并提取它们的特征。 2-执行成对匹配 3-计算每个图像的 3d 点及其相应的描述符和相机参数。
现在我的第一个问题是我应该如何确定每个 3d 点的描述符,因为我们知道 3d 点是从一组相似的 2d 特征中提取的,这意味着有有许多相似的描述符,每个描述符都对应一个二维点,那么我们应该选择哪些描述符呢?它们并不完全相同,而是彼此略有不同。
我的另一个问题是: 根据OpenCV提供的教程Real Time pose estimation of a textured object ,要求模型为.yaml格式,网格为.ply格式。 我需要知道如何将我的 3d 结构存储到这些类型的文件中? 是否有任何步骤或工具可以帮助这样做?
提前致谢
快速回答,这些是你应该需要的:
- 有纹理对象的 CAD 模型
- "learn" 重点:
- 对于每个 "training" 图像,检测并保留在图像上检测到的关键点
- 对于每个 2D 关键点,使用 3D CAD 网格计算相应的 3D 对象坐标并提取相应的描述符
- 在文件中保存 3D 对象坐标列表和相应的描述符列表
- 检测对象:
- 检测所需图像中的关键点
- 将当前关键点与保存的关键点相匹配
- 使用具有
solvePnPRansac()
的鲁棒方法(RANSAC)估计物体姿态:3D物体点是在训练步骤中保存的3D物体坐标,2D图像点是关键点的2D图像坐标当前检测到并匹配
本教程或多或少应该做类似的事情。
"tricky"部分应该是针对给定的2D图像点和相机位姿计算物体3D点的坐标:
- 您可以在 OpenCV 教程中看到here它是如何完成的纹理对象的实时姿态估计
对于 2D 图像点(例如一个关键点位置),我会做什么(可能与教程代码略有不同):
- 使用内在矩阵将 2D 图像点转换为归一化相机帧 (
z=1
),参见undistortPoints()
- 测试当前2D图像点是否属于物体:当前相机位姿处图像光线与三角网格的交点(需要测试对于每个三角形)
- 如果当前2D图像点属于物体,则对应的3D物体点(在物体框架中)可以是形成三角形的3个点中最近的点或你可以计算图像光线和三角形之间的交点