我有一张图像,我将高斯模糊应用于cv2.GaussianBlurskimage.gaussian_filter库,但是得到的结果却截然不同。我很好奇为什么,如何使skimage看起来更像cv2。我知道skimage.gaussian_filterscipy.scipy.ndimage.filters.gaussian_filter的包装。为了清楚地说明问题,为什么这两个功能不同?如何使它们更相似?
这是我的测试图像:
python - 为什么高斯滤波器在cv2和skimage之间有所不同?-LMLPHP
这是cv2版本(显示为模糊):
python - 为什么高斯滤波器在cv2和skimage之间有所不同?-LMLPHP
这是skimage/scipy版本(显示得更清晰):
python - 为什么高斯滤波器在cv2和skimage之间有所不同?-LMLPHP
细节: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/

10-08 22:39