4 votes

imgradient matlab équivalent en Python

Je suis à la recherche d'un imgradient équivalent MATLAB en Python. J'ai connaissance de cv2.Sobel() y cv2.Laplacian() mais cela ne fonctionne pas comme imgradient fonctionne dans MATLAB. Si je pouvais obtenir le code source de imgradient.m qui serait également d'une grande aide.

Aussi, je sais cv2.Scharr() peut également être utilisé mais je ne suis pas sûr des valeurs que je dois mettre dans le paramètre pour obtenir des résultats équivalents à imgradient dans MATLAB ?

8voto

rayryeng Points 81283

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)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X