我有点问题。我想在C#中实现高斯卷积,但它(出于某些目的)具有与EmguCV的高斯模糊相同的结果(这也意味着与OpenCV相同)。在高斯卷积中核值的计算应始终相同,我唯一需要知道的是,OpenCV实现如何计算内核大小。我已经仔细研究过OpenCV源代码了,但是我对C ++的经验很少,这就是为什么我没有找到它。 也许其他任何人都可以帮助我。 OpenCV实现对“原始”有什么其他变化吗?
答案 0 :(得分: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类 (首先尝试使用该类来查看符合您需求的类) DOC:
http://www.aforgenet.com/framework/docs/html/f074e0dd-865c-fd5f-ba0a-80e336a0eaea.htm