2

我在安卓设备上同时使用 OpenCV 和 FastCV 来执行一些图像处理操作。在对帧进行阈值处理后,我得到了一张二值图像,在感兴趣区域附近存在适量的黑白噪声。

执行腐蚀,然后对图像进行膨胀,可以为我提供一个几乎无噪声的图像,可用于进一步处理,但是上述两个库都有其缺点。

开放式CV

Mat element = getStructuringElement(MORPH_RECT, Size(2 * erosionSize + 1, 2 * erosionSize + 1), Point(erosionSize, erosionSize));
erode(in, in, element);
element.release();

原谅我的神奇数字,但我对 OpenCV 侵蚀/扩张的简单调用看起来像上面那样。然后我可以修改它的erosionSize/dilationSize 参数,以调整该函数在消除噪音方面的积极程度。问题?性能是这里的重中之重,这个函数的运行速度比我想要的要慢。

快速简历

fcvFilterErode3x3u8_v2 (const uint8_t *__restrict src, unsigned int srcWidth, unsigned int srcHeight, unsigned int srcStride, uint8_t *__restrict dst, unsigned int dstStride)

上面的 prototpye 是针对 FastCV 的 erode 实现的,这里没有参数来调整腐蚀的大小。鉴于 FastCV 已针对移动架构进行了优化,并且我怀疑它实际上利用了我用于测试的 Galaxy Nexus 中的 GPU,因此此功能比上述功能要快得多。但是,我需要在同一帧上多次循环和运行它以达到相同的侵蚀水平,从而牺牲了过程中的任何性能优势。

有没有人知道:

  • 我可能在任一 API 中遗漏的任何方法都将快速执行并使用可调大小参数
  • 包含符合这两个要求并具有相当宽松许可证的功能的任何其他库。
4

1 回答 1

3

如果您的意图是连续系统地执行这两种操作(腐蚀和膨胀),并且如果您可以对两者使用相同的参数大小,那么您可能想尝试使用 opencv 的专用函数应用一个开口:

http://docs.opencv.org/doc/tutorials/imgproc/opening_closing_hats/opening_closing_hats.html

从数学上讲,这相当于先执行腐蚀然后再膨胀,但是有优化的开环实现可以比连续应用这两个操作更快。

免责声明:我还没有检查 opencv 对这些操作的实现,但你会想试一试——当然,如果你还没有做过。

于 2012-08-16T08:11:59.707 回答