Python中的imgradient matlab等价物

Lav*_*ena 5 python matlab opencv image-processing

我正在寻找imgradientPython中的MATLAB等价物.我知道的 cv2.Sobel()cv2.Laplacian(),但它并没有工作imgradient在MATLAB的作品.如果我能获得imgradient.m功能的源代码,那也将是一个很大的帮助.

另外,我知道cv2.Scharr()也可以使用,但我不确定我应该在参数中放入什么值来获得与imgradientMATLAB 相同的结果?

ray*_*ica 8

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

magnitude = sqrt(Gx.^2 + Gy.^2);
angle = atan2(Gy, Gx);
Run Code Online (Sandbox Code Playgroud)

Gx并且Gy分别是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)
Run Code Online (Sandbox Code Playgroud)