我在Python中搜索imgradient
MATLAB等价物。我知道cv2.Sobel()
和cv2.Laplacian()
,但它不起作用,因为imgradient
适用于MATLAB。如果我能获得imgradient.m
函数的源代码,这也将是一个很好的帮助。
另外,我知道也可以使用cv2.Scharr()
但是我不确定在参数中应该放什么值来获得与MATLAB中的imgradient
相等的结果?
答案 0 :(得分:7)
由于版权问题,我们不允许发布您必须在MATLAB中获得许可的任何工具箱中的任何代码。相反,我能做的是提供执行等效操作的代码。 imgradient
只返回边缘地图的大小和角度。您需要做的就是分别在cv2.Sobel
和x
方向应用y
,然后自己计算幅度和角度。您可以使用标准公式执行此操作:
magnitude = sqrt(Gx.^2 + Gy.^2);
angle = atan2(Gy, Gx);
Gx
和Gy
分别是x
和y
方向的导数,或每个方向的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)