En raison des droits d'auteur, nous ne sommes pas autorisés à publier le code de l'une des boîtes à outils pour lesquelles vous devez obtenir une licence dans MATLAB. À la place, je peux fournir le code qui effectue les opérations équivalentes. imgradient
renvoie simplement la magnitude et l'angle de la carte de bord. Tout ce que vous avez à faire est d'appliquer cv2.Sobel
dans le x
y y
séparément, puis calculez vous-même la magnitude et l'angle. Vous pouvez le faire en utilisant les formules standard :
magnitude = sqrt(Gx.^2 + Gy.^2);
angle = atan2(Gy, Gx);
Gx
y Gy
sont les dérivées dans le x
y y
respectivement, ou la sortie de cv2.Sobel
pour chaque direction. Veuillez noter que atan2
vous donnera les angles en radians. MATLAB donne l'angle en degrés, il faut donc multiplier par 180 / pi
.
Supposons que votre image soit stockée dans img
. Vous courriez alors cv2.Sobel
deux fois sur cette image, en vous assurant qu'à chaque invocation, vous spécifiez la direction de la dérivée que vous voulez trouver. Après cela, vous calculez vous-même la magnitude et l'angle. Par conséquent :
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)