Ale*_*ier 6 opencv arm computer-vision augmented-reality
轮廓检测占用了我计算机视觉中的大部分时间,而且需要更快.我已经通过NEON指令和矢量化优化了其他所有内容,实际上,轮廓检测在配置文件中占主导地位.不幸的是,对我来说如何优化这一点并不明显.
我正在进行经典的矩形检测过程以找到基准标记,即cvFindContours(),然后从轮廓中逼近正方形.在许多标记可见的情况下(或灾难性的,当可以看到非标记的密集矩形网格时),单独调用cvFindContours()在iPhone上可能需要> 30ms.
我已经用cvFindContours()替换了非常昂贵的C++ cv :: FindContours().特别是如果传递了一个vector>,那么C++版本花费的分配和填充向量比其内部cvFindContours()花费的时间更长!
现在,我完全被cvFindContours中的时间束缚,或者更具体地说是cvFindNextContour().cvFindNextContour中的代码是分支密集的,并且显然不容易向量化.它还实现了一个复杂的算法,我不相信自己不会在任何优化尝试中出错.
我已经查看了cvBlobLib(用于歧义,我的意思是这个:http://code.google.com/p/cvblob/),看它是否提供了可以更快地做同样事情的替代算法.源的基本下载非常慢,因为它将轮廓记录到std :: list()中,并且几乎所有时间都花在内存分配上.使用预先调整为256个元素的std :: vector替换该列表以消除push_back()上的初始副本仍会使您的函数比cvFindContours()长3倍,其中66%直接在cvb :: cvLabel中( ).所以走这条路似乎不太可行.
有没有人对如何优化多个矩形的检测有任何想法.我模糊的handwaving包括:
有没有相当于cvFindContour()的快速实现,理想情况下作为源代码,因为我是多平台,在那里?
大多数轮廓不是必需的,只有"成功"的矩形才有用.特别是,它们的内部轮廓无用.理论上,我根本不能调用cvFindContours,而是调用cvStartFindContours/cvFindNextContour,测试找到的每个轮廓,如果找到一个我正在寻找的矩形,则不会递归,因为子矩形会被保证无用吗?
我可以使用经典的FindContours()/ ApproxPoly()方法使用完全不同的矩形检测算法吗?
有没有办法用有用的感兴趣区域"引导"cvFindContours?例如,即使具有非常激进的阈值,快速角点检测几乎总是返回我的基准标记角.有没有办法使用该点集来限制检测?(不幸的是,我不确定这有多大帮助,在许多标记的情况下,或者与标记无关的密集网格线,这在我的应用程序中经常发生.)
与上面相同,由于Blob检测可以(如果我理解正确)实现为递归泛洪填充,是否有任何快速矢量化实现,然后可以用于某种方式拉出有趣的Blob矩形,并种子轮廓检测从那里?
任何想法都会受到欢迎!
| 归档时间: |
|
| 查看次数: |
4013 次 |
| 最近记录: |