2012-01-26 40 views
3

私はopencvの新生児です。私は、2Dローパスガウスフィルタの使用を含むプロジェクトの操作を実行する必要があります。私が使用するOpenCVは2.2であり、内部にfilter2d()とGaussianBlur()という2つの関数があります。filter2d()とガウスカーネルとGaussianBlur()との違い

同じ作業を実行しますか? filter2d()でGaussianカーネルのgetGaussiankernelを()で作成し、フィルタを適用してGaussianBlur()で直接実行すると、同じ結果が得られますか? 2つのカーネル関数に同じ値を採用することは明らかです。あなたが見ることになるかもしれない

+0

試してみてください。両方の操作を実行し、2つの異なるファイルに保存して、ファイルが同一であるかどうかを確認してください。 –

+0

同じ結果は得られません。したがって、この時点では、サイズ5のフィルタを備えた2Dガウスフィルタを得るためにgaussianblur(src、dst、cvSixe(5.5)、1,1)を適用するのは間違っていますか?またはgaussianblur(src、dst、cvSixe(5.5)、1)とgaussianblur(dst、dst2、cvSixe(5.5)、NULL、1)の後には一度適用されますか? –

+0

私はOpenCVの仕組みに精通していないので、さらなるご質問にお答えすることはできません。ごめんなさい。 –

答えて

2

GaussianBlur()は同じカーネル値を持つより複雑なツーセットアップfilter2d()への単なるショートカットです。それは、同じスピードで、同じコア機能を呼び出す同じことを実行します。

+0

ありがとうございますが、filter2D()を適用するとGaussianblur()は同じ結果を返しません。多くの、しかし低い差がある。 –

0

違いはfilter2Dではなく畳み込み演算の相互相関を実行していることです。 X相関と畳み込みは、擬似カーネル/フィルタを使用した場合と同じ結果になります。カーネルを使用して畳み込みを実行するには、それを反転して、アンカーポイントをカーネルの中央に設定する必要があります。ドキュメントを参照してください:http://opencv.willowgarage.com/documentation/cpp/image_filtering.html#cv-filter2d

私はそこから発生するのかどうかはわかりませんが、私のアプリケーションでは畳み込みを使用する必要があり、それを実装し、期待どおりに機能しました。

+0

2次元フィルタを適用するには上記のようにGaussianBlurを2回適用する必要がありますか? –

+0

OpenCVにはGaussianBlurの独自の実装があります。なぜそれを使用しないのですか? :)この1:http://opencv.willowgarage.com/documentation/cpp/image_filtering.html#cv-gaussianblur – greven

+0

私はこの方法でそれを適用することは私に正しい結果が得られていることを確認しないんだけど...私はちょうど適用GaussianBlur –

関連する問題