如何获得图像的一阶和二阶导数矩阵

How to get first and second derivative matrix of an image

我正在尝试计算图像的梯度方向,在第一部分中,我需要计算图像的一阶导数(水平和垂直方向),所以我在 scipy 模块为了得到它,但是我得到了一个错误 "AttributeError: 'int' object has no attribute '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)

在 y 方向上取的导数

您可以相应地选择 sigma 的值。为了计算二阶导数,可以使用拉普拉斯算子。

image_sec_derivative = laplace(image)