我写了我自己的高斯滤波器,但它真的很慢。
OpenCV的高斯算法要快得多,是我高斯滤波器的20倍。我想在我的项目中重写opencv的高斯算法,我不想在我的项目中包括opencv。
然而,
谁能给我算法描述,opencv的源代码似乎太难理解?
发布于 2009-06-01 05:09:12
高斯滤波器具有一个非常容易加速的特性:该滤波器可以独立地应用于两个维度。您定义了一个垂直操作的一维过滤器,另一个横向操作的过滤器,并将两者同时应用;这与应用在两个维度中的单个过滤器产生的效果相同。
除此之外,您可能还需要查看处理器可用的SIMD指令 (例如,SSE3 )。
发布于 2009-06-01 04:46:49
为了回答你问题的第二部分,高斯模糊只是一个三维高斯曲面,作为图像上的卷积核。维基百科对算法本身有很大的参考价值,但基本上,您可以将高斯曲线的值转换为平方矩阵,并将其乘以图像中的每个像素,例如:
Kernel:
[0 1 2 0 0
1 4 6 4 1 X Iterate over every single pixel in the image
2 6 10 6 2
1 4 6 4 1
0 1 2 1 0](请注意,这只是一个示例内核,有非常具体的eqns,取决于您的高斯变量,您将得到不同的结果)
要回答问题的性能部分,这个算法的总体速度将取决于一些事情,假设图像大小是恒定的。假设图像是NxM像素,卷积核是PxP像素。您将不得不执行P_P_N*M操作。P越大,对给定图像的操作就越多。您可以巧妙地使用这里使用的算法,进行非常具体的基于行或列的数学计算。
执行工作也非常重要。如果您想要非常高效,您可能希望使用您的架构提供的最高级的指令。如果您使用的是Intel x86芯片,您可能需要查看获得英特尔性能原语(IPP)的许可证,并直接调用这些指令。OpenCV在其可用时确实使用了IPP .
如果给定体系结构上的浮点性能较差,您也可以做一些非常聪明的事情,并处理所有缩放的整数。这可能会加快一些速度,但我会先考虑其他选择,然后再走这条路。
发布于 2009-06-01 04:47:52
试着检查这里。你想要提前计算出离散高斯矩阵,然后将它与图像相转换。
https://stackoverflow.com/questions/933540
复制相似问题