【问题标题】:imgradient matlab equivalent in PythonPython中的imgradient matlab等价物
【发布时间】:2018-05-29 19:53:32
【问题描述】:

我正在寻找 Python 中的 imgradient MATLAB 等效项。我知道cv2.Sobel()cv2.Laplacian() 但它不像imgradient 在MATLAB 中工作。如果我能得到imgradient.m函数的源代码,那也将是一个很大的帮助。

另外,我知道cv2.Scharr() 也可以使用,但我不确定我应该在参数中输入什么值才能在MATLAB 中获得与imgradient 等效的结果?

【问题讨论】:

  • 我相信我的编辑对您帖子的内容有所帮助。我已经突出显示了代码语法中的函数。它使阅读更容易。 cv::Scharr 也是 C++ 定义的一部分,但您使用的是 Python。这就是我将其转换为cv2.Scharr() 的原因。请考虑保留我的编辑。

标签: python matlab opencv image-processing


【解决方案1】:

由于版权原因,我们不允许发布您必须在 MATLAB 中获得许可的任何工具箱中的任何代码。相反,我能做的是提供执行等效操作的代码。 imgradient 只返回边缘图的大小和角度。您只需在xy 方向分别应用cv2.Sobel,然后自己计算大小和角度。您可以使用标准公式执行此操作:

magnitude = sqrt(Gx.^2 + Gy.^2);
angle = atan2(Gy, Gx);

GxGy分别是xy方向的导数,或者cv2.Sobel对于每个方向的输出。请注意,atan2 会给你以弧度表示的角度。 MATLAB 以度为单位报告角度,因此您必须另外乘以 180 / pi

假设您的图像存储在img。然后,您将在此图像上运行 cv2.Sobel 两次,确保每次调用都指定要查找的导数的方向。之后,您自己计算大小和角度。因此:

import cv2
import numpy as np

img = cv2.imread('....') # Read in the image
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0) # Find x and y gradients
sobely = cv2.Sobel(img,cv2.CV_64F,0,1)

# Find magnitude and angle
magnitude = np.sqrt(sobelx**2.0 + sobely**2.0)
angle = np.arctan2(sobely, sobelx) * (180 / np.pi)

【讨论】:

  • 感谢@rayryeng 这个有用的回答。我只想添加一个小补充,而不是自己调用两次cv2.Sobel,还可以使用cv2.spatialGradient 函数来执行此操作,另请参见docs
  • @MuadDev 非常酷。谢谢!
猜你喜欢
  • 2021-11-02
  • 2016-09-18
  • 2020-02-13
  • 2015-07-17
  • 2020-01-29
  • 1970-01-01
  • 1970-01-01
  • 2021-03-13
  • 2019-11-30
相关资源
最近更新 更多