2013-06-29 78 views
0

我有一点问题。我想在C#中实现高斯卷积,但它具有(出于某种目的)具有与EmguCV的高斯模糊相同的结果(这也意味着与OpenCV相同)。内核值的计算在高斯卷积中应该总是相同的,我唯一需要知道的是,OpenCV实现如何计算内核大小。我仔细看过OpenCV的源代码,但是我在C++方面只有很少的经验,这就是为什么我没有找到这个。 也许任何人都可以帮助我。 OpenCV实现还有其他更改吗?高斯模糊C#实现(类似于OpenCV)

+0

问题应该加以澄清。你是问1.标准偏差是如何从模糊函数参数(我假设它是相同的)或2.给出了标准偏差是从什么内核大小中选择的? (我认为最小的不会影响结果) –

回答

1

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

所以对于卷积的步骤是:

make Gaussian kernel 
convolve image 

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

的步骤是:

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) 

如果你想只是基本版看看: GaussianBlur.cs类AForge.NET库 (第一次尝试使用类地看到,适合您的需要) DOC:

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