python-3.x - 如何获得图像的一阶和二阶导数矩阵

标签 python-3.x opencv gaussian

我正在尝试计算图像的梯度方向,在第一部分中,我需要计算图像的一阶导数(水平和垂直方向),所以我在 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 作为序列传递。

x-direction with sigma = (11, 0)

以上是使用 sigma=(11,0) 在 x 方向拍摄的图像的一阶导数。下图是使用 sigma=(0, 11)

在 y 方向上取得的导数

y-direction with sigma = (0, 11) 您可以相应地选择 sigma 的值。为了计算二阶导数,可以使用拉普拉斯算子。

image_sec_derivative = laplace(image)

关于python-3.x - 如何获得图像的一阶和二阶导数矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58770274/

相关文章:

c++ - 如何获取 OpenCV getGaussianKernel 返回的 Mat 的实际核值?

python-3.x - 高斯NB : Could not convert string to float: 'Thu Apr 16 23:58:58 2015'

python - 在条件下在python中选择数组

python - 将具有透明背景的图像与普通图像(非透明背景)混合后如何调整 alpha 值?

python - HoughCircles无法检测到该圆圈

mysql - 如何使用mysql用户定义函数生成高斯分布

python - "executes"是一个 f-string 的内部函数的名称是什么?

Python SHA256 哈希计算

linux命令在python子进程中不起作用

c++ - OpenCV 2.1 托管 C++ (CLI/C++) 中的 cvSetMouseCallback