我有一张图像,我将高斯模糊应用于同时使用 cv2.GaussianBlur
和 skimage.gaussian_filter
库,但我得到的结果截然不同。我很好奇为什么,以及如何使 skimage
看起来更像 cv2
。我知道 skimage.gaussian_filter
是 scipy.scipy.ndimage.filters.gaussian_filter
的包装器。为了清楚地陈述问题,为什么这两个功能不同以及如何使它们更相似?
这是我的测试图片:
这是 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 并且过滤器的大小足够大,应该不会有什么不同。 Imagemagick covnert -gaussian-blur 0x2
在视觉上与 cv2
一致。
版本:cv2
=2.4.10,skimage
=0.11.3,scipy
=0.13.3
最佳答案
如果有人对如何使 skimage.gaussian_filter() 与 Matlab 的等效 imgaussfilt() 相匹配(我发现这个问题的原因)感到好奇,请将参数“truncate=2”传递给 skimage.gaussian_filter()。 skimage 和 Matlab 都将内核大小计算为 sigma 的函数。 Matlab 的默认值是 2。Skimage 的默认值是 4,导致默认情况下内核大得多。
关于python - 为什么高斯滤波器在 cv2 和 skimage 之间不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36263738/