Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ FastCV侵蚀/扩张参数_C++_Image Processing_Opencv_Android Ndk - Fatal编程技术网

C++ FastCV侵蚀/扩张参数

C++ FastCV侵蚀/扩张参数,c++,image-processing,opencv,android-ndk,C++,Image Processing,Opencv,Android Ndk,我在android设备上同时使用OpenCV和FastCV来执行一些图像处理操作。在对一帧进行阈值化后,我得到的是一幅二值图像,在感兴趣的区域附近存在适量的黑白噪声 在图像上执行腐蚀,然后对图像进行膨胀,可以得到一个几乎没有噪声的图像,可以用于进一步的处理,但是上述两个库都有它们的缺点 OpenCV Mat element = getStructuringElement(MORPH_RECT, Size(2 * erosionSize + 1, 2 * erosionSize + 1), Poi

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

在图像上执行腐蚀,然后对图像进行膨胀,可以得到一个几乎没有噪声的图像,可以用于进一步的处理,但是上述两个库都有它们的缺点

OpenCV

Mat element = getStructuringElement(MORPH_RECT, Size(2 * erosionSize + 1, 2 * erosionSize + 1), Point(erosionSize, erosionSize));
erode(in, in, element);
element.release();
fcvFilterErode3x3u8_v2 (const uint8_t *__restrict src, unsigned int srcWidth, unsigned int srcHeight, unsigned int srcStride, uint8_t *__restrict dst, unsigned int dstStride)
请原谅我的神奇数字,但我对OpenCV的侵蚀/扩张的简单调用如上所示。然后,我可以修改该函数的腐蚀大小/膨胀大小参数,以调整该函数在消除噪声方面的攻击性。问题出在哪里?在这里,性能是最重要的,这个函数的运行速度比我希望的要慢

FastCV

Mat element = getStructuringElement(MORPH_RECT, Size(2 * erosionSize + 1, 2 * erosionSize + 1), Point(erosionSize, erosionSize));
erode(in, in, element);
element.release();
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的腐蚀实现,其中没有参数来调整腐蚀的大小。考虑到FastCV已经针对移动架构进行了优化,并且我怀疑它实际上利用了我正在测试的Galaxy Nexus中的GPU,因此该功能比上述功能快得多。但是,我需要在同一帧上循环运行多次,以达到相同的腐蚀级别,从而牺牲过程中的任何性能优势

是否有人知道:

  • 我可能在API中遗漏的任何方法,这些方法将使用可调大小参数快速执行
  • 包含符合这两个要求且具有相当许可证的函数的任何其他库

如果您的目的是系统地依次执行这两个操作(侵蚀和扩张),并且如果您同意对这两个操作使用相同的参数大小,那么您可能希望尝试使用opencv的专用功能应用一个开口:

从数学上讲,这相当于执行和侵蚀,然后是扩张,但是有一些优化的开放实现,可以通过连续应用这两个操作来更快地完成


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

FastCV在Galaxy Nexus上不使用GPU,至少是因为它是TI芯片。我试过这个,我面临的问题是,为了填充阈值区域中的白噪声空洞,膨胀需要大于侵蚀。谢谢你的建议!但时间增益又如何呢?实际上,如果时间增益足够大,你可以应用闭合(这是填充白洞的典型操作,但也可能是过多的处理超出了你的限制)或小尺寸的放大:因为开口相当于我可以执行打开,然后是较小的放大,正如你所说,这在数学上相当于一个小的侵蚀,然后是一个大的扩张。然而,我无法想象开放+扩张会比侵蚀+扩张表现得更快。不管怎样,我还是要试着分析一下。我可能会感到惊讶。在最终分析这一点之后,开放+扩张和侵蚀+扩张之间的速度似乎没有明显差异。