ios - ARKit 透视校正

标签 ios opengl-es 3d perspectivecamera arkit

我正在使用 ARKit 进行一个项目,我正在尝试对 ARFrame.capturedImage 进行透视校正,以将一张纸放在检测到的平面,因此我可以将其输入 CoreML 模型,该模型期望从正上方拍摄图像。

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

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

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

我已经尝试使用 GLKMatrix4Rotate 和 roll/pitch/yaw 创建我自己的矩阵,但是没有用。我什至不能让它与单个旋转轴一起工作。

我发现 GLKMatrix4MakePerspectiveGLKMatrix4MakeOrthoGLKMatrix4MakeFrustum 似乎可以进行透视变换,但我不知道如何获取这些信息我将其转换为这些函数的输入,以进行适当的透视转换。

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

enter image description here

最佳答案

我最终使用了 iOS11 Vision的矩形检测然后送入Core Image's CIPerspectiveCorrection filter .

关于ios - ARKit 透视校正,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45494586/

相关文章:

ios - 如何使用 AirPrint 在半页或 A5 上打印?

ios - 如何将自定义搜索范围过滤到 Xcode (8) 中的特定工作区?

c# - glBufferData 总是因 GL_INVALID_ENUM 而失败,即使它不应该

c# - WPF 或 .NET 4.0 中是否有网格构建帮助程序类?

ios - 在 XCode 模拟器上使用 Frida

opengl - glBufferData 中的提示标志实际上有什么作用吗?

iphone - iOS : UIScrollView and OpenGL

3d - 四元数旋转导致场景拉伸(stretch)

python - 如何在 matplotlib 中绘制由二次方程定义的椭球体的 3D 绘图?

ios - tableview 添加自定义 tableview 单元格超过 500 然后工作缓慢?