我正在开发一个应用程序,它检测图像中最突出的矩形,然后试图旋转它,使矩形的左下角位于原点,类似于 IUPR 的OSCAR系统的工作方式。但是,一旦检测到最突出的矩形,我不确定如何考虑深度分量或 z 轴,因为矩形并不总是“正面”。任何能加深我理解的例子都将不胜感激。下面是 IUPR 的 OSCAR 系统的一个示例。
替代文字 http://quito.informatik.uni-kl.de/oscar/oscar.php?serverimage=img_0324.jpg&montage=use
我正在开发一个应用程序,它检测图像中最突出的矩形,然后试图旋转它,使矩形的左下角位于原点,类似于 IUPR 的OSCAR系统的工作方式。但是,一旦检测到最突出的矩形,我不确定如何考虑深度分量或 z 轴,因为矩形并不总是“正面”。任何能加深我理解的例子都将不胜感激。下面是 IUPR 的 OSCAR 系统的一个示例。
替代文字 http://quito.informatik.uni-kl.de/oscar/oscar.php?serverimage=img_0324.jpg&montage=use
在这种情况下,您实际上不需要处理 3D 信息,它只是一个映射函数,从一组坐标到另一组坐标。
看看仿射变换,它们能够纠正简单的倾斜和透视效果。您应该能够在某处找到代码,该代码将根据矩形角的 4 个点计算变换。
差点忘了——如果“快速”真的很重要,您可以简化系统以仅组合使用简单的剪切变换,尽管这会对高度倾斜的对象的图像质量产生不良影响。
实际上,我认为您可以使用比Mark 的方法简单得多的方法。
在倾斜图像上获得 2D 坐标后,将这些坐标重新用作纹理坐标。
在渲染器中,绘制一个简单的矩形,其中每个角的顶点都被纹理映射到倾斜的 2D 图像上的顶点(归一化并以其他方式转换为渲染系统的纹理坐标平面)。
现在您可以依靠硬件(使用 OpenGL 或类似工具)为您进行校正,或者您可以编写自己的纹理映射器:
由于我们正在处理实际的 3D 信息,因此需要猜测纵横比。但是,您只需获取倾斜矩形的最大宽度和最大高度即可。