使用python对图像应用高斯模糊

使用python对图像应用高斯模糊,python,matplotlib,Python,Matplotlib,我正在尝试使用高斯滤波器(来自期刊的图像)对图像进行以下平滑处理: 在论文中说,为了从左图像到右图像,我必须应用一个高斯滤波器,其值为x,y=1,…,100和sigma=14,以获得“最佳结果” 我用python开发了以下程序,试图实现这种平滑: import scipy.ndimage as ndimage import matplotlib.pyplot as plt img = ndimage.imread('left2.png') img = ndimage.gaussian_fil

我正在尝试使用高斯滤波器(来自期刊的图像)对图像进行以下平滑处理:

在论文中说,为了从左图像到右图像,我必须应用一个高斯滤波器,其值为x,y=1,…,100和sigma=14,以获得“最佳结果”

我用python开发了以下程序,试图实现这种平滑:

import scipy.ndimage as ndimage
import matplotlib.pyplot as plt

img = ndimage.imread('left2.png')
img = ndimage.gaussian_filter(img, sigma=(14), order=0)
plt.imshow(img)
plt.show()
由于某些原因,得到的结果与右图不相似。 有人能指出我需要在程序中修改什么才能从左图像到右图像吗


谢谢。

我在这里猜一猜:

因为他们提到他们的x和y值在0-100之间,所以他们可能应用了“sigma=14单位模糊”而不是“sigma=14像素模糊”

scipy.ndimage.gaussian_filter
中的
sigma
参数以像素为单位。如果我对作者意图的理解是正确的,那么您需要调整传入的sigma参数

如果作者指定
x
y
的范围为0-100,则x和y方向上的sigma将不同,因为输入数据的行数与列数不同(即,它不是完全方形的图像)

也许可以试试类似的东西

nrows, ncols = img.shape
sigma = (14 * nrows / 100.0, 14 * ncols / 100.0)
img = ndimage.gaussian_filter(img, sigma=sigma)

右侧图像看起来不像左侧的sig=14pix模糊。也许作者描述的方法不准确。是的,这可能是正确的,但无论如何,我想知道他们做了什么来获得正确的图像。嗨,乔,谢谢你的回答。根据您的代码,14*nrows/100(x轴)和14*ncols/100.0(y轴)的西格玛值只有两个。如何根据您的代码更改这些值(从1更改为100)?我运行了以下代码
img=ndimage.imread('left2.png')print img.shape nrows=img.shape[0]print nrows ncols=img.shape[1]print ncols sigma=(14*nrows/100.0,14*ncols/100.0)img=ndimage.gaussian_filter(img,sigma=sigma)plt.imshow(img)plt.show()
在执行我获得的上一个代码时,您可以在中找到该图像。问题如下:RuntimeError:sequence参数的长度必须等于输入秩