2012-01-26 43 views
3

我是opencv的初學者。我應該爲涉及使用2D低通高斯濾波器的項目執行操作。我使用的OpenCV是2.2,裏面有兩個函數:filter2d()和GaussianBlur()。差異beetwen filter2d()用高斯核函數和GaussianBlur()

執行相同的工作?讓我解釋一下,如果filter2d()步驟使用()創建的高斯內核getGaussiankernel並應用過濾器並直接使用GaussianBlur()運行它,我會得到相同的結果嗎? 很明顯,我將採用兩個內核函數的相同值。

+0

試試看看 - 執行兩個操作並保存到兩個不同的文件,看看文件是否相同。 –

+0

不,不會給出相同的結果。因此,在這一點上應用Gaussianblur(src,dst,cvSixe(5.5),1,1)導致帶有大小爲5的濾波器的2D高斯濾波器是錯誤的? (src,dst,cvSixe(5.5),1)和gaussianblur(dst,dst2,cvSixe(5.5),NULL,1)之後是否相同? –

+0

恐怕我不熟悉OpenCV的工作原理,因此我無法回答您的其他問題,對不起。 –

回答

2

GaussianBlur()只是一個更復雜的設置filter2d()具有相同的內核值的捷徑。它以相同的速度執行相同的操作,調用相同的核心功能。

+0

非常感謝,但是在應用filter2D()和Gaussianblur()時不會返回相同的結果。有很多但差異很小。 –

0

您可能會看到的差異是filter2D執行互相關而不是卷積操作。當使用simetrical內核/過濾器時,X相關和卷積給出相同的結果。爲了使用內核執行卷積,您需要翻轉它並將錨點設置到內核的中間。請參閱文檔:http://opencv.willowgarage.com/documentation/cpp/image_filtering.html#cv-filter2d

我不確定在那裏出現的差異,但我需要在我的應用程序中使用卷積,這就是我如何實現它,它按預期工作。

+0

應用2D濾鏡我應該如上所述使用GaussianBlur的雙重應用程序? –

+0

OpenCV有自己的GaussianBlur實現,爲什麼你不使用它? :)這一個:http://opencv.willowgarage.com/documentation/cpp/image_filtering.html#cv-gaussianblur – greven

+0

我不確定以這種方式應用它給了我正確的結果......我只是應用GaussianBlur –