7

cv2.GaussianBlurとライブラリの両方を使用してガウスぼかしを適用した画像がありskimage.gaussian_filterますが、結果は大きく異なります。skimageその理由と、のように見せるために何ができるかについて興味がありますcv2skimage.gaussian_filterのラッパーであることは知っていますscipy.scipy.ndimage.filters.gaussian_filter。質問を明確に述べると、なぜ 2 つの機能が異なるのか、また、それらをより似たものにするために何ができるのでしょうか?

ここに私のテスト画像があります:

元の画像

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

cv2画像

skimage/scipyバージョンは次のとおりです (より鮮明に表示されます)。

スカイイメージ版

詳細:

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

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

したがって、sigma=2 であり、フィルターのサイズは十分に大きいため、違いはありません。Imagemagickcovnert -gaussian-blur 0x2は と視覚的に一致しcv2ます。

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

4

4 に答える 4

4

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 用の小さなカーネルで作業する必要があります。

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

于 2016-03-28T18:08:52.793 に答える
0

によると[Scipy0.15.1 API][1]

scipy.ndimage.filters(img, sigma=sigma, truncate = 4.0)

切り捨て * シグマのカーネル サイズでガウス フィルターを設定します。この理解では、次の 2 つの機能はグレースケール画像で同じ結果をもたらします。

trunc_val = 3
sigma_val = 3
k_size = int(sigma_val * trunc_val)
gau_img1 = cv2.GaussianBlur(img, (k_size,k_size), sigma_val)
gau_img2 = gaussian_filter(img, sigma = sigma_val, truncate = trunc_val) 

cv2.imshow("cv2 res", gau_img1)
cv2.imshow("scipy res", gau_img2)
cv2.waitKey(-1)

一部のテスト結果: trunc_val = 3; シグマ値 = 3 ここに画像の説明を入力

trunc_val = 3; シグマ値 = 1 ここに画像の説明を入力

trunc_val = 3; シグマ値 = 9 ここに画像の説明を入力

于 2021-04-06T09:28:13.433 に答える