2013-06-29 130 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