我有一个图像,我应用高斯模糊使用cv2.GaussianBlur
和skimage.gaussian_filter
库,但我得到明显不同的结果。我很好奇为什么,以及可以做些什么来使skimage
看起来更像cv2
。我知道skimage.gaussian_filter
是围绕scipy.scipy.ndimage.filters.gaussian_filter
的包装。为了清楚地说明这个问题,为什么这两个功能不同,可以采取哪些措施使它们更相似?为什么高斯滤波器在cv2和skimage之间有所不同?
这里是我的测试图像:
这里是cv2
版本(出现模糊):
这里是skimage
/scipy
版本(显示更清晰):
详情:
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
平滑量由西格玛控制,而不是大小。像素不是直的平均值,而是用高斯内核对它们进行加权平均。大小只是截断计算和skimage计算的大小是4 *西格玛。版本不应该是问题。这是旧的和基本的功能。 – waldol1
据我可以在这里阅读,你正在使用不推荐的函数gaussian_filter http://scikit-image.org/docs/dev/api/skimage.filters.html#skimage.filters.gaussian_filter,但你是正确的,这是基本功能。你也是正确的,西格玛与内核大小相关。但是,我不明白为什么你在scikit中使用的siga 2应该等于OpenCV中的33的内核大小。 – tfv
我不是数学家,但我阅读https://en.wikipedia.org/wiki/Gaussian_filter,[quote]“高斯内核需要6个{\ sigma} -1值,例如{\ sigma} 3它需要一个长度为17的内核“。这意味着你的sima = 2相当于一个大小为6 * 2-1 = 11的内核。对不起,我不是这方面的专家,但你可能想要查看你的尺寸设定。 – tfv