So passen Sie eine Ellipse an 2D-Daten an


7

Ich möchte die "beste" Anpassung einer Ellipse an zusammenhängende, möglicherweise konkave Formen finden, wie:

Geben Sie hier die Bildbeschreibung ein

Was habe ich versucht?

Ich dachte, man könnte die Richtung der Haupt- und Nebenachse zuweisen a,bder Ellipse durch Abbildung der Pixelwerte auf Koordinaten, Mittelwert subtrahieren und Speichern der beiden größten Eigenvektoren von einer PCA. Das scheint ziemlich gut zu funktionieren, um die Richtung zu finden:

Geben Sie hier die Bildbeschreibung ein

Mein Problem ist die Bestimmung der Länge dieser beiden Vektoren. Im Moment habe ich verwendetλ1 λ2aus den Eigenwerten der PCA. Dies scheint die Länge zu unterschätzen. Wie kann ich feststellen|a|, und |b| oder alternativ am besten eine Ellipse an diese Formen anpassen?


Soweit ich weiß, messen die Eigenwerte die "Leistung" des Spektralradius dieses bestimmten Eigenvektors. Ich habe nicht die Nummern, die Sie verwenden, aber nichtλ1 und λ2mehr im Einklang mit den tatsächlichen Längen?
Spacey

Sie haben Recht mit der Beziehung von λzur Stärke der Eigenvektorprojektion - aber mir fiel nichts anderes ein, das ich verwenden könnte. Verwenden vonλ im Gegensatz zu λskaliert die Vektoren des Diagramms um mehrere Größenordnungen. Ich habe einfach das gewähltals erste Vermutung.
Hooked

Da es nur zweidimensional ist, geben Sie bitte die gefundenen Eigenvektoren und ihre entsprechenden Eigenwerte an. Außerdem zeigen die Max / Min-Punkte an beiden Kanten der Zeichnung.
Spacey

Antworten:


6

Weiterverfolgung meiner gelöschten Antwort ... Wenn Sie eine gefüllte Ellipse nehmen und alle Punkte auf die projizieren xAchse werden mehr Punkte in der Nähe des Ursprungs als auf den Extremen in einer kreisförmigen Verteilung projiziert. Keine Gaußsche Verteilung und nicht die gleichmäßige Verteilung, die ich in meiner gelöschten Antwort in der 1-D-Analogie erwähnt habe. Die resultierende Distribution hat tatsächlich PDFp(x)=(1(xr)2)und von dort aus können Sie berechnen, dass die Standardabweichung ist r2.

Wenn also Daten im Inneren einer Radienellipse gleichmäßig verteilt sind a,b (deren Achsen sind die x und y Achsen), die Standardabweichung der x Koordinate ist a2 und von der y Koordinate ist b2. Der zu verwendende Korrekturfaktor ist also einfach 2.

Hier ist ein Beispiel in Python, das das Zentrum (Translationsmatrix), die Rotationsmatrix und die Radien einer Ellipse aus Punkten wiederherstellt, die zufällig aus ihrem Inneren entnommen wurden:

import numpy

# Generate some points distributed uniformely along an ellipse
x = 2 * (numpy.random.rand(10000, 1) - 0.5)
y = 2 * (numpy.random.rand(10000, 1) - 0.5)
d = (x / 0.5) ** 2 + (y / 0.25) ** 2
inside = numpy.where(d < 1)[0]
x = x[inside]
y = y[inside]
data = numpy.hstack((x, y)).T

# Now rotate by 0.5 rad and translate it to (4, -8)
angle = 0.5
rotation = numpy.array([
    [numpy.cos(0.4), -numpy.sin(0.4)],
    [numpy.sin(0.4), numpy.cos(0.4)]])

data = numpy.dot(rotation, data)
data[0, :] += 4
data[1, :] -= 8

# Step 1: center the data to get the translation vector.
print 'Translation', data.mean(axis=1)
data -= numpy.reshape(data.mean(axis=1), (2, 1))

# Step 2: perform PCA to find rotation matrix.
scatter = numpy.dot(data, data.T)
eigenvalues, transform = numpy.linalg.eig(scatter)
print 'Rotation matrix', transform

# Step 3: Rotate back the data and compute radii.
# You can also get the radii from smaller to bigger
# with 2 / numpy.sqrt(eigenvalues)
rotated = numpy.dot(numpy.linalg.inv(transform), data)
print 'Radii', 2 * rotated.std(axis=1)

1
+1 Würde es Ihnen etwas ausmachen, zu erweitern, wie genau Sie das PDF abgeleitet haben? p(x)=1(xr)2? Es geht um den Kern der Sache. Vielen Dank.
Spacey

Das Standardverfahren zum Ableiten einer 1-D-Randverteilung entlang einer Achse aus einer 2-D-Verteilung (Sie integrieren entlang der anderen Achse). Das Integral ist dann die Länge eines Abschnitts der Ellipse, orthogonal zu der Achse, auf die Sie projizieren.
Pichenettes

3

Überprüfen Sie die Anpassung der Ellipsen durch die kleinsten Quadrate von Fitzgibbon et al. Es ist ein einfaches Eigenwertproblem, dessen Größe nicht proportional zur Anzahl der Pixel in Ihrer Stichprobe ist! Der einzige Schritt, der von der Anzahl der Pixel abhängt, die Sie darauf werfen, ist die Berechnung einer Streumatrix, die noch vorhanden istO(n).


Vielen Dank für die Referenz @pichenettes, aber das Papier sieht nicht so aus, wie ich es zu lösen versuche (bitte korrigieren Sie mich, wenn ich falsch liege). In der Arbeit wird versucht, den Abstand der kleinsten Quadrate einer Reihe von Punkten zur Kurve einer Ellipse zu minimieren . In meinem Fall habe ich einen Bereich , den ich mit einer Ellipse bestmöglich approximieren möchte.
Hooked

Ah, ich
verstehe

Es ist trotzdem ein nützlicher Link, aber ich habe ähnliche Artikel gefunden, als ich eine Google-Suche nach einer am besten passenden Ellipse durchgeführt habe. Anscheinend ist dieses Problem gut definiert!
Hooked

Aber konnten Sie nicht die Kontur des Bereichs ableiten und @pichenettes-Papier darauf auftragen?
Jean-Yves

Ich denke, es gibt Eckfälle (seltsame Formen?), In denen eine Ellipse, die gut zur Kontur passt, nicht gut zur Oberfläche passt.
Pichenettes
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.