2016-03-28 21 views
1

cv2.GaussianBlurskimage.gaussian_filterの両方のライブラリを使用してガウスぼかしを適用したイメージがありますが、結果は大きく異なります。なぜ私は好奇心が強いですし、skimageの外観はcv2のようになります。私はskimage.gaussian_filterscipy.scipy.ndimage.filters.gaussian_filterのラッパーであることを知っています。その質問をはっきりと述べるために、なぜ2つの機能が異なっているのか、それをより似通ったものにするために何ができるのでしょうか?ここでなぜガウスフィルタはcv2とskimageで異なるのですか?

は私のテスト画像は、次のとおりです。ここで

Original Image

cv2バージョン(ぼやけ表示されます)です。ここで

cv2 image

skimage/scipyバージョン(シャープに表示されます)されます。

skimage version

詳細:

skimage_response = skimage.filters.gaussian_filter(im, 2, multichannel=True, mode='reflect')

cv2_response = cv2.GaussianBlur(im, (33, 33), 2)

だから、シグマ= 2とフィルタのサイズは、それが違いを作るべきではないと十分な大きさです。 Imagemagick covnert -gaussian-blur 0x2は視覚的にcv2に同意します。

バージョン:cv2 = 2.4.10、skimage = 0.11.3、scipy = 0.13.3

答えて

1

GaussianBlurのために、あなたは、平滑化の多くの原因ではなく、大きなカーネル(サイズ= 33)を、使用しています。スムージングは​​、あなたのカーネルサイズに大きく依存します。それぞれの新しいピクセル値は、33 * 33ピクセルの「ウィンドウ」内で「平均化」されます。

cv2.GaussianBlurの定義は対照的に、ここで http://docs.opencv.org/3.1.0/d4/d13/tutorial_py_filtering.html#gsc.tab=0

見つけることができ、skimage.filters.gaussianは小さなカーネル上で動作するようです。 skimageでは、「サイズ」は、ここで説明するようにサイズをカーネルに関連しているシグマによって定義されます:https://en.wikipedia.org/wiki/Gaussian_filter

定義はここで見つけることができます:http://scikit-image.org/docs/dev/api/skimage.filters.html#skimage.filters.gaussian

対応する結果を得るために、あなたは仕事をしなければならないと思いますOpenCVのためのより小さなカーネルで。

さらに、両方のライブラリについて、最新のライブラリバージョンを使用することを強くお勧めします。

+0

平滑化の量は、サイズではなくシグマによって制御されます。ピクセルは直線的に平均化されず、ガウスカーネルによって重み付けされます。サイズは計算を切り捨て、skimageは4 *シグマのサイズを計算します。バージョンは問題ではありません。これは古くて基本的な機能です。 – waldol1

+0

私がここで読むことができる限り、非難されたfuntion gaussian_filter http://scikit-image.org/docs/dev/api/skimage.filters.html#skimage.filters.gaussian_filterを使用していますが、これは正しいことです基本的な機能です。シグマはカーネルのサイズに相関しています。しかし、私はあなたがscikitで使用している2のsigaがOpenCVのカーネルサイズ33に相当するはずである理由を理解していません。 – tfv

+0

私は数学者ではありませんが、https://en.wikipedia.org/wiki/Gaussian_filter、[quote] "ガウシアンカーネルには{\ sigma} -1の値が6つ必要です3それは長さ17 "のカーネルが必要です。これは、あなたのsima = 2がサイズ6 * 2-1 = 11のカーネルと同等であることを意味します。申し訳ありませんが、私はこれに関する専門家ではありませんが、サイズの仮定を確認することができます。 – tfv

0

skimage.gaussian_filter()をMatlabのimgaussfilt()とマッチさせる方法が不思議なら(この質問が見つかった理由)、skimage.gaussian_filter()にパラメータ 'truncate = 2'を渡してください。 skimageとMatlabは両方ともシグマの関数としてカーネルサイズを計算します。 Matlabのデフォルトは2です。Skimageのデフォルトは4で、デフォルトではカーネルが大幅に大きくなります。

+0

知っておいてくださいが、これは本当に答えではありません。時には私は、テキストがコメントに合わないか、コメントにコードが含まれていて、コメントシステムがコードの断片をうまく扱えないため、コメントを投稿するサイトを悪用することもありますが、あなたのテキストはコメントに合っていると思います。 –

関連する問題