3

我目前正在构建一个相机应用程序原型,它应该能够识别桌子上的纸张。关于这个的线索是它应该实时识别,所以我捕获了相机的视频流,在iOS 5中可以很容易地用AV基础完成。我看着这里这里

他们在那里做一些基本的物体识别。

我发现在这个实时环境中使用 OpenCV 库不能以高效的方式工作。

所以我需要的是一种算法来确定没有 OpenCV 的图像的边缘。

有没有人有一些示例代码片段来说明如何做到这一点或指出我正确的方向。

任何帮助,将不胜感激。

4

2 回答 2

10

你将无法在 iOS 中使用当前的 Core Image 实现来做到这一点,因为角点检测需要一些 Core Image 尚不支持的操作。但是,我一直在开发一个名为GPUImage的开源框架,它确实具有所需的功能。

为了找到对象的角点,您可以使用我刚刚开始工作的 Harris 角点检测算法的 GPU 加速实现。您可能需要调整阈值、灵敏度和输入图像大小以适用于您的特定应用程序,但它能够返回在场景中找到的纸片的角落:

哈里斯角球

它还会找到该场景中的其他角,因此您可能需要使用二进制阈值操作或稍后的一些处理来识别哪些角属于一张矩形纸,哪些属于其他对象。

如果您有兴趣,我会在 Signal Processing中描述它的工作过程,但要在您的应用程序中使用它,您只需从 GitHub 获取最新版本的 GPUImage 并将 GPUImageHarrisCornerDetectionFilter 设置为 GPUImageVideoCamera 实例的目标。然后,您只需添加一个回调来处理从此过滤器返回给您的角数组。

在 iPhone 4 上,边角检测过程本身在 640x480 视频上以 ~15-20 FPS 的速度运行,但我当前的 CPU 绑定边角制表例程将其减慢到 ~10 FPS。我正在努力用一个应该更快的基于 GPU 的例程来替换它。iPhone 4S 目前以 20-25 FPS 的速度处理一切,但我应该能够再次显着提高那里的速度。希望这对您的应用程序来说足够接近实时。

于 2012-05-16T17:25:25.357 回答
2

我使用 Brad 的库 GPUImage 来做到这一点,结果是完美的,但足够好。

在检测到的哈里斯角中,我的想法是选择:

  • 工作表左上角的最左上角
  • 工作表右上角的最右上角
  • 等等

@Mirco - 你找到更好的解决方案了吗?

@Brad-在您的屏幕截图中,您使用哪些 Harris 过滤器参数来检测到 5 个角?我还有很多...

于 2012-06-21T10:33:02.763 回答