【问题标题】:How to get first and second derivative matrix of an image如何获得图像的一阶和二阶导数矩阵
【发布时间】:2020-03-05 07:20:05
【问题描述】:

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

这是正确的吗?或者如何计算图像的一阶导数(和二阶导数)。

【问题讨论】:

  • 您将其链接到旧 Wiki 内容的档案转储 --- 请参阅 scipy.org 以获取当前材料。您可以编辑您的问题以包含您正在使用的 python 版本和 opencv 吗?
  • 我刚刚编辑了我的问题!谢谢
  • 关于 x 导数的 sobel_h 和 y 导数的 sobel_v,请参见 scikit-image.org/docs/dev/api/skimage.filters.html

标签: python-3.x opencv gaussian


【解决方案1】:

要获得图像的一阶导数,可以在 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)

【讨论】:

  • 感谢您的回答,但是如何计算水平或垂直方向的一阶导数?
猜你喜欢
  • 2021-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多