首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高斯滤波算法在OpenCV中是如何工作的

高斯滤波算法在OpenCV中是如何工作的
EN

Stack Overflow用户
提问于 2009-06-01 04:13:23
回答 5查看 13.9K关注 0票数 5

我写了我自己的高斯滤波器,但它真的很慢。

OpenCV的高斯算法要快得多,是我高斯滤波器的20倍。我想在我的项目中重写opencv的高斯算法,我不想在我的项目中包括opencv。

然而,

谁能给我算法描述,opencv的源代码似乎太难理解?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-06-01 05:09:12

高斯滤波器具有一个非常容易加速的特性:该滤波器可以独立地应用于两个维度。您定义了一个垂直操作的一维过滤器,另一个横向操作的过滤器,并将两者同时应用;这与应用在两个维度中的单个过滤器产生的效果相同。

除此之外,您可能还需要查看处理器可用的SIMD指令 (例如,SSE3 )。

票数 13
EN

Stack Overflow用户

发布于 2009-06-01 04:46:49

为了回答你问题的第二部分,高斯模糊只是一个三维高斯曲面,作为图像上的卷积核。维基百科对算法本身有很大的参考价值,但基本上,您可以将高斯曲线的值转换为平方矩阵,并将其乘以图像中的每个像素,例如:

代码语言:javascript
复制
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 .

如果给定体系结构上的浮点性能较差,您也可以做一些非常聪明的事情,并处理所有缩放的整数。这可能会加快一些速度,但我会先考虑其他选择,然后再走这条路。

票数 4
EN

Stack Overflow用户

发布于 2009-06-01 04:47:52

试着检查这里。你想要提前计算出离散高斯矩阵,然后将它与图像相转换。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/933540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档