opencv - 纹理对象的实时姿态估计

标签 opencv 3d-reconstruction

我正在开发一个AR应用程序,其中标记是一个具有复杂形状的3d对象,因此,我试图作为一个基于cad的识别系统。

据我发现,从一组图像构建3d模型的主要步骤是:
1-遍历图像并提取其特征。
2执行成对匹配
3计算每个图像的3d点及其对应的描述符和相机参数。

现在,我的第一个问题是,我应该如何确定每个3d点的描述符,因为我们知道3d点是从一组相似的2d特征中提取的,这意味着有许多相似的描述符,每个描述符都对应一个2d点,那么我们应该选择哪些描述符?它们并不完全相同,而是彼此略有不同。

我的另一个问题是:
基于OpenCV提供的Real Time pose estimation of a textured object 教程,要求模型为.yaml格式,网格为.ply格式。
我需要知道如何将3d结构存储到这些类型的文件中吗?
是否有任何步骤或工具可以帮助您做到这一点?

提前致谢

最佳答案

快速解答,这是您需要的:

  • 具有带纹理的对象
  • 的CAD模型
  • “学习”要点:
  • 用于每个“训练”图像,检测并保留在图像
  • 上检测到的关键点
    对于每个2D关键点
  • ,使用3D CAD网格计算相应的3D对象坐标,并提取相应的描述符
  • 将3D对象坐标列表和相应的描述符列表
  • 保存在文件中
  • 检测对象:
  • 检测所需图像中的关键点
  • 将当前的关键点与保存的
  • 匹配
  • 使用带有solvePnPRansac()的鲁棒方法(RANSAC)估计对象姿态:3D对象点是训练步骤中保存的3D对象坐标,2D图像点是当前检测到并与
  • 匹配的关键点的2D图像坐标。

    本教程应该或多或少地执行类似的操作。

    “棘手的”部分应该是针对给定的2D图像点和相机姿势计算对象3D点的坐标:
  • ,您可以在OpenCV教程中了解here的工作方式。纹理对象的实时姿态估计

  • 对于2D图像点(例如,一个关键点位置),我会做些什么(可能与教程代码有所不同):
  • 使用本征矩阵将2D图像点转换为归一化的相机帧(z=1),请参见 undistortPoints()
  • 测试当前2D图像点是否属于对象:图像射线与当前相机姿势处的图像射线与三角形网格之间的交点(您需要对每个三角形进行测试)
  • 如果当前2D图像点属于对象,则对应的3D对象点(对象框架中的)可以是形成三角形的3个点中的最接近点,或者可以计算图像射线与对象之间的交点。三角
  • 关于opencv - 纹理对象的实时姿态估计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44719630/

    相关文章:

    opencv - cvReprojectImageTo3D 和 CV_32FC3 的问题

    c++ - "NULL pointer is passed"用于检测轮廓

    具有 double YAML 的 Opencv Read Mat

    python - 在 Opencv python 中使用 MSER 从图像中提取文本

    java - 从 android 路径获取 opencv 矩或轮廓

    iphone - 使用 iPhone 相机的点云

    Python OpenCV 模板匹配和特征检测无法正常工作

    c++ - 使用PCL(point cloud library)获取一个物体信息数组

    c++ - 如何通过删除 "free faces"从非流形中提取底层 2-流形?

    java - 连接点组成三角形