Sie sind hier: JD Web Pages > Themen > mindrobots > Winkel aus Gradient
Hallo Gast, Sie sind nicht angemeldet.
Programmierung 16.10.201021:51 Uhr

Winkel aus Gradient

Da ich keine Funktion gefunden habe, die zu numpys gradient-Funktion die zugehörigen Winkel von 0 bis 2*pi zurückgibt, hier mal meine Implementierung. Man kann entweder direkt die Rückgabe von gradient übergeben, oder ein beliebiges Array mit allen y-Werten in der ersten und allen x-Werten in der zweiten Spalte (so wie es bei numpy üblich ist).

from numpy import pi, array, arctan, abs

def get_gradient_angle(gradients):
    slope = abs(gradients[0]/ \
                gradients[1].astype('float'))
    angle = arctan(slope)
    positive_y = gradients[0] >= 0
    positive_x = gradients[1] >= 0
    angle[(positive_y*(1-positive_x))
        .nonzero()] = \
        pi - angle[(positive_y*(1-positive_x))
        .nonzero()]
    angle[((1-positive_y)*(1-positive_x))
        .nonzero()] += pi
    angle[((1-positive_y)*positive_x)
        .nonzero()] = \
        2*pi - angle[((1-positive_y)*positive_x)
        .nonzero()]
    return angle

gradient_vectors = [(0, 1), (1, 1), (1, 0), \
    (1, -1), (0, -1), (-1, -1), (-1, 0), \
    (-1, 1), ]
gradient_data = array(zip(*gradient_vectors))
gradient_angle = get_gradient_angle(
    gradient_data)
print gradient_angle * 180/pi

>>  python gradient_angles.py
[   0.   45.   90135180225270315.]
  •  
  • Kommentar schreiben
  •  
Ich möchte über jeden weiteren Kommentar in diesem Post benachrichtigt werden.

Zurück