0

我有一个小问题。我想在 C# 中实现高斯卷积,但它(出于某些目的)具有与 EmguCV 的高斯模糊相同的结果(这也意味着与 OpenCV 相同)。在高斯卷积中,内核值的计算应该始终相同,我唯一需要知道的是,OpenCV 实现如何计算内核大小。我仔细查看了 OpenCV 源代码,但我对 C++ 的经验很少,这就是我没有找到这个的原因。也许其他人可以帮助我解决这个问题。OpenCV 实现对“原版”还有其他变化吗?

4

1 回答 1

2

高斯模糊是具有特定大小的高斯核的卷积(它是一个参数)。

所以卷积的步骤是:

make Gaussian kernel
convolve image

据我所知,如果内核大小大于预定义的阈值(我认为是 7),OpenCV 会使用一些优化。那么卷积不是在空间域中而是在频域中执行的。

步骤是:

calculate result image size (needs to be power of 2 -> look at FFT)
transform image to frequency domain (e.g. FFT)
transform kernel to frequency domain (e.g. FFT)
multiply those matrices (element by element)
transform result matrix in spatial domain (e.g. inverse FFT)
clip matrix (convolution in frequency domain is cyclic convolution)

如果您只想要基本版本,请查看:AForge.NET 库中的 GaussianBlur.cs 类 (首先尝试使用该类以查看是否适合您的需求)文档:

http://www.aforgenet.com/framework/docs/html/f074e0dd-865c-fd5f-ba0a-80e336a0eaea.htm

于 2013-06-30T10:55:25.413 回答