【问题标题】:ARKit Perspective CorrectionARKit 透视校正
【发布时间】:2018-01-11 16:06:36
【问题描述】:

我正在与ARKit 合作开展一个项目,我正在尝试对ARFrame.capturedImage 进行透视校正,以将一张纸定位在检测到的平面上,以便将其输入CoreML期望从头顶直接获取图像的模型。

ARKit 为我提供了相对于平面的设备方向(ARCamera.transformARCamera.eulerAnglesARCamera.projectionMatrix 看起来很有希望)。

所以我有相机的方向(我知道平面是水平的,因为这就是 ARKit 现在检测到的全部).. 但我不太清楚如何创建一个 GLKMatrix4 来执行正确的透视校正。

最初我认为它就像通过 ARCamera.projectionMatrix 的倒数进行转换一样简单,但这似乎根本不起作用;我不完全确定该矩阵描述的是什么。它似乎并没有根据设备方向发生太大变化。

我尝试使用GLKMatrix4Rotate 和滚动/俯仰/偏航创建我自己的矩阵,但没有成功。我什至无法使用单个旋转轴。

我发现 GLKMatrix4MakePerspectiveGLKMatrix4MakeOrthoGLKMatrix4MakeFrustum 似乎在进行透视变换,但我不知道如何获取我拥有的信息并将其转换为这些函数的输入以使正确透视变换。

编辑: 作为一个更好地解释我想要做什么的例子,我使用了 Photoshop 中的Perspective Warp 工具来转换示例图像;我想知道的是如何根据我掌握的有关场景的信息提出一个执行类似变换的矩阵。

【问题讨论】:

    标签: ios opengl-es 3d perspectivecamera arkit


    【解决方案1】:

    我最终使用了iOS11 Vision 的矩形检测,然后将其输入Core Image's CIPerspectiveCorrection filter

    【讨论】:

    • 您是否能够使用CIPerspectiveCorrection 进行无裁剪转换?你介意分享你的代码吗?
    【解决方案2】:

    我使用 OpenCV 透视变换解决了。 (https://docs.opencv.org/trunk/da/d6e/tutorial_py_geometric_transformations.html,https://docs.opencv.org/2.4/modules/imgproc/doc/geometric_transformations.html#getperspectivetransform)

    如果您能够在场景中获得纸张的角(例如使用ARReferenceImage 并将它们投影为 2D),请使用它们。否则,您可以尝试通过 OpenCV 直接从 UIImage 中检测角点(参见 https://stackoverflow.com/a/12636153/9298773),该 sceneView.snapshot()sceneView 类型为 ARSceneView。在最后一种情况下,我建议您先进行二值化,然后将上面链接中 sn-p 中的 MAX_CORNERS 变量更改为 4(论文的 4 个角)。

    然后创建一个新的cv::Mat,宽度和高度由您选择尊重纸张宽度和高度的比例并进行透视变换。有关最后一段的指导,请查看此链接中的“使用 Homography 进行透视校正”部分:https://www.learnopencv.com/homography-examples-using-opencv-python-c/#download简而言之:您要求 opencv 找到一个合适的变换,将您的预期论文点投影到一个完美的矩形平面(您的新 cv::Mat

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      • 2014-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多