我写我自己的高斯滤波器,但它实在是太慢了。

OpenCV中的高斯算法快很多,比我高斯滤波器的20倍。 我想重写的OpenCV的高斯算法在我的项目,我不希望在自己的项目的OpenCV。

然而,

  

谁能给我的算法描述,OpenCV的源代码   看起来很难理解吗?

有帮助吗?

解决方案

高斯滤波器具有,使得它很容易加速的属性:所述过滤器可以在两个维度上独立地应用。您定义垂直运行的一维过滤器,而另一个水平运行,并应用它们两者;这产生如在两个维度施加单个滤波器相同的效果。

除此之外,你可能需要看看 SIMD指令例如 SSE3为您的处理器使用

其他提示

要回答您的问题的第二部分,高斯模糊是简单地应用于作为卷积核在图像上的3-d高斯表面。 维基百科对算法本身有很大的参考,但基本上,你把高斯的值曲线,并转换其成方形矩阵,并乘以由每一个像素中的图像,例如:

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]

(注意,这只是一个样本的内核,也有很具体的数学式其中,根据您的高斯变量,你会得到不同的结果)

要回答你的问题的表现部分,该算法的整体速度将取决于几件事情,假设恒定大小的图像。比方说,图像是N×M个像素,卷积核是PXP像素。你将不得不做P P 的N * M个操作。大P,你会更多的操作有一个给定的图像做。你可以巧妙运用你在这里使用,做的非常具体的行或柱状基于数学的算法。

实施也是非常重要的。如果你想成为非常有效的,你可能会想使用你的架构提供了最先进的指令。如果您使用的是英特尔的x86芯片,你可能会想看看让英特尔性能原件许可证(IPP),并直接调用这些指令。 IIRC,OpenCV中确实使用IPP时其可用...

您还可以做一些非常聪明,并与所有比例整数的工作,如果你的既定体系浮点性能较差。这可能会加快速度了一点,但我想看看其他的选择首先要沿着这条道路前。

尝试检查此处。要提前计算出离散的高斯矩阵,则与图像卷积它。

如果您的卷积核较大,要实现直接卷积,性能差异可能是因为OpenCV的是使用快速傅立叶变换(FFT)实现卷积。

我讨厌被迂腐,但你所要求的一种算法,即,以完成任务所需的步骤的精确顺序。你已经有高斯算法。所以你的问题的关键是,当你想要什么东西的更快的,这是不一样的要求的算法。

要回答的更快的问题 - 你想知道如何OpenCV的优化其代码,这是一个高度技术和广泛的主题。我会说,它使用汇编语言和GPU专用功能妄自揣测。我想通过学习组装,和研究CUDA包把你的GPU的优势开始。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top