Zur Zeit wird gefiltert nach: Programmierung
Filter zurücksetzen
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).
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. 90. 135. 180. 225. 270. 315.]
Funktionen überladen mit Python
Python unterstützt kein function overloading, aber dafür keyword arguments. Dies ist eigentlich kein Nachteil, dennoch gibt es Fälle, in denen nur bestimmte Kombinationen von Übergabeparametern erlaubt sein dürfen. In diesem Beitrag geht es um eine allgemeine Lösung des Problems.
Sehr komfortabel bei Python ist die Möglichkeit, Funktionsparametern einen Standardwert zuzuweisen, der verwendet wird, wenn im Funktionsaufruf eben dieser Parameter nicht angegeben wird (keyword arguments).
print 'hello', name
>> print_name('Alice')
hello Alice
>> print_name()
hello stranger
Einleitung in Self Organizing Maps
Nachdem in den vorigen Artikeln beschrieben wurde, wie die Aktionsklassifizierung über Event Tables funktionieren soll, geht es nun um das zugehörige Learning-Problem.
Eine verbreitete Learning-Methode sind Neuronale Netze (NN). Im Folgenden geht es um eine besondere Form von NN, nämlich um Self Organizing Maps (SOM).
SOMs bilden mathematisch gesehen einen hochdimensionalen Vektorraum in einen niedrigdimensionalen (in der Regel zweidimensionalen) Raum ab. Man kann beispielsweise ein SOM konstruieren, das Farben (bestehend aus den drei Komponenten Rot, Grün, Blau) auf einer Fläche anordnet. Die besondere Eigenschaft hierbei ist, das Nachbarschaftsbeziehungen erhalten bleiben.
Scene Graphs und Event Tables
Das hier vorgestellte Verfahren zur Aktionsklassifizierung basiert auf der Clusterung von mit einer Kamera aufgenommenen Bildsequenz. Dieses Vorgehen ist zunächst sehr verwandt mit dem menschlichen Sehen: Auch das Gehirn interpretiert Farbflächen als Einheit. Im Unterschied zum Menschen findet bei unserem Ansatz jedoch erstmal keine Objekterkennung statt - das gesamte Verfahren betrachtet nur die "rohen" Bildsegmente.
Perspective-independent Action Analysis
Grundlage für die nächsten Blog-Einträge (es wurde ja mal wieder Zeit) wird der Vortrag über meine bisherigen "Anstrengungen" im Rahmen meiner Diplomarbeit sein, den ich vor kurzem zu halten hatte.
Überthema ist Aktionsklassifizierung - nun, was ist das? Es geht dabei um das Vorhaben, Robotern die Möglichkeit zu geben, zwischen verschiedenen beobachteten Vorgängen (Aktionen) zu unterscheiden bzw. ähnliche Aktionen als solche wiederzuerkennen.
Die nächste Abbildung zeigt, dass dieser Vorgang aus mehreren Modulen besteht, die innerhalb unserer Arbeitsgruppe auch von verschiedenen Leuten entwickelt werden.

