python - 为什么高斯滤波器在 cv2 和 skimage 之间不同?

标签 python image opencv scikit-image gaussianblur

我有一张图像,我将高斯模糊应用于同时使用 cv2.GaussianBlurskimage.gaussian_filter 库,但我得到的结果截然不同。我很好奇为什么,以及如何使 skimage 看起来更像 cv2。我知道 skimage.gaussian_filterscipy.scipy.ndimage.filters.gaussian_filter 的包装器。为了清楚地陈述问题,为什么这两个功能不同以及如何使它们更相似?

这是我的测试图片:

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)

所以 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/

相关文章:

c++ - 如何在 Visual Studio 2010 中实现 Tesseract 与项目一起运行

c++ - 如何用opencv读取电表指针?

c++ - 不规则点分布的质心

python - 如何从 sklearn 中的 TF*IDF 值获取字数

python - 获取与组内最小和最大日期相关的值的差异 - Python

javascript - 保留选定的图像而不是用新图像替换

javascript - jQuery 图像 src 淡出淡入效果

python - struct.pack() 因 int > 127 失败

python - Snakemake 使用脚本进行 shell I/O 重定向和访问 Snakemake 变量

r - 图像无法出现在 .Rpres 中