我正在尝试计算图像的梯度方向,在第一部分中,我需要计算图像的一阶导数(水平和垂直方向),所以我在 scipy 模块中应用了高斯滤波器为了得到它,但我得到一个错误“AttributeError:‘int’对象没有属性‘shape’”
我使用的python版本是3.7.0,opencv版本是3.4.2。
函数文档在这里:scipy.ndimage.filters.gaussian_filter
g_x = np.zeros(image_new.shape)
ndimage.filters.gaussian_filter(image_new, 2*np.sqrt(2), (0,1), 1 ,g_x )
这是正确的吗?或如何计算图像的一阶导数(和二阶导数)。
最佳答案
要获得图像的一阶导数,您可以在 scipy 中应用高斯滤波器,如下所示。
from scipy.ndimage import gaussian_filter, laplace
image_first_derivative = gaussian_filer(image, sigma=3)
如果sigma是单个数,那么会在所有方向上计算导数。要指定方向,请将 sigma 作为序列传递。
以上是使用 sigma=(11,0)
在 x 方向拍摄的图像的一阶导数。下图是使用 sigma=(0, 11)
您可以相应地选择 sigma 的值。为了计算二阶导数,可以使用拉普拉斯算子。
image_sec_derivative = laplace(image)
关于python-3.x - 如何获得图像的一阶和二阶导数矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58770274/