Schätzen Sie den Mittelpunkt und den Radius einer Kugel anhand von Punkten auf der Oberfläche

9

Wenn wir annehmen, dass unsere Datenpunkte von der Oberfläche einer Kugel abgetastet wurden (mit einer gewissen Störung), wie können wir dann den Mittelpunkt dieser Kugel wiederherstellen?

Bei meiner Suche fand ich Artikel über etwas, das als "sphärische Regression" bezeichnet wurde, aber es schien nicht ganz so, als würde das das Gleiche tun. Vielleicht habe ich es einfach nicht verstanden.

Gibt es eine einfache Formel, ähnlich der linearen Regression, die einen Kugelmittelpunkt und einen Radius findet, die den quadratischen Abstand eines Satzes von Datenpunkten von der Oberfläche der Kugel minimieren?


Bearbeiten 1:

Wir können davon ausgehen, dass das Rauschen 2 oder 3 Größenordnungen kleiner als der Radius der Kugel und gleichmäßig sphärisch Gaußsch ist. Die Proben selbst werden jedoch definitiv nicht gleichmäßig von der Kugeloberfläche gezogen, sondern werden wahrscheinlich in einigen Flecken auf der Oberfläche gebündelt, wahrscheinlich alle innerhalb einer Halbkugel. Eine Lösung, die für Daten in funktioniert, ist in Ordnung, aber eine allgemeine Lösung für beliebige Dimensionalität ist auch großartig.R3


Bearbeiten 2:

Wie hoch sind die Chancen, dass ich eine vernünftige Antwort bekomme, wenn ich die lineare Regression im 7-dimensionalen Raum verwende und so tue, als wären die quadratischen Komponenten unabhängig von den anderen Parametern:y=Xβ+ϵ

X=[2x2y2z1111]β=[x0y0z0x02y02z02r2]y=x2+y2+z2

Bestenfalls nehme ich an, dass meine Fehlermetrik etwas verrückt sein wird. Im schlimmsten Fall wird die Lösung nicht annähernd konsistent sein.
... oder das ist albern, weil wir mit vier identischen Spalten eine singuläre Matrix erhalten, wenn wir versuchen, eine Regression durchzuführen.


Edit 3:

Es sieht also so aus, als wären dies meine Optionen:

  1. Nichtlineare numerische Optimierung unter Verwendung einer Kostenfunktion:f(x0,y0,z0,r|X)=12i=1n(r(xix0)2+(yiy0)2+(ziz0)2)2
  2. Hough-Transformation: Diskretisieren Sie den plausiblen Raum oder mögliche Zentren und Radien um die Datenpunkte. Jeder Punkt gibt eine Stimme für die potenziellen Zentren ab, zu denen er bei jeder spezifischen Radiusdiskretisierung gehören könnte. Die meisten Stimmen gewinnen. Dies mag in Ordnung sein, wenn es möglicherweise eine unbekannte Anzahl von Kugeln gibt, aber mit nur einer ist es eine unordentliche Lösung.
  3. Wählen Sie zufällig (oder systematisch) Gruppen mit 4 Punkten aus und berechnen Sie das Zentrum analytisch . Lehnen Sie die Probenahme ab, wenn Sie schlecht konditioniert sind (Punkte sind nahezu koplanar). Ausreißer ablehnen und das mittlere Zentrum finden. Daraus können wir den mittleren Radius ermitteln.

Hat jemand eine bessere Methode?

JCooper
quelle
Beachten Sie, dass die beiden Formen Ihrer Frage nicht gleichwertig sind: Es ist nicht unbedingt so, dass die Minimierung der Summe der Quadrate der Abstände von der Oberfläche die besten Schätzungen liefert, es sei denn, es wird eine starke Annahme über die Art der Störungen getroffen. Es wäre daher hilfreich, mehr darüber zu wissen, wie die Störungen auftreten (und wie groß sie im Vergleich zur Kugelgröße sein können). Außerdem: In wie vielen Dimensionen befindet sich Ihre Kugel?
whuber
@whuber Ich wollte die beste Anpassung als diejenige definieren, die den quadratischen Abstand der Daten vom nächsten Punkt auf der Kugeloberfläche minimiert. Ich habe nicht viel über die damit verbundenen Annahmen nachgedacht. Ich erwarte proportional kleine Fehler; Vielleicht spielt die genaue Metrik keine große Rolle, obwohl ich gerne wissen möchte, was die Funktion minimiert. Ich habe der Frage weitere Informationen zum Rauschen hinzugefügt.
JCooper
@ Max das habe ich gesehen. Aber es ist eine Seite für ein kommerzielles Black-Box-Produkt. Es ist die eigentliche Formel, an der ich interessiert war. Es sieht so aus, als gäbe es keine geschlossene Lösung, und ich muss stattdessen einen numerischen Ansatz verwenden (was meiner Meinung nach auch die nlReg-Software tut).
JCooper
Es scheint, dass dies ein direktes Minimierungsproblem mit einer nichtlinearen Zielfunktion (der oben erwähnten) sein könnte. Wenn angenommen wird, dass die Fehler Gauß'sch sind, müssen Sie die Verteilungsparameter der Fehler erst berechnen, wenn Sie den Mittelpunkt der Kugel gefunden haben, wodurch die Zielfunktion minimiert wird. edit: ich habe die seite zu lange offen gelassen und deinen kommentar nicht gesehen. Wir haben die gleiche Idee.
normal
2
(x0,y0,z0)r(x0,y0,z0)

Antworten:

3

Hier ist ein RCode, der einen Ansatz mit den kleinsten Quadraten zeigt:

# set parameters

mu.x <- 8
mu.y <- 13
mu.z <- 20
mu.r <- 5
sigma <- 0.5

# create data
tmp <- matrix(rnorm(300), ncol=3)
tmp <- tmp/apply(tmp,1,function(x) sqrt(sum(x^2)))

r <- rnorm(100, mu.r, sigma)

tmp2 <- tmp*r

x <- tmp2[,1] + mu.x
y <- tmp2[,2] + mu.y
z <- tmp2[,3] + mu.z


# function to minimize
tmpfun <- function(pars) {
    x.center <- pars[1]
    y.center <- pars[2]
    z.center <- pars[3]
    rhat <- pars[4]

    r <- sqrt( (x-x.center)^2 + (y-y.center)^2 + (z-z.center)^2 )
    sum( (r-rhat)^2 )
}

# run optim
out <- optim( c(mean(x),mean(y),mean(z),diff(range(x))/2), tmpfun )
out


# now try a hemisphere (harder problem)

tmp <- matrix(rnorm(300), ncol=3)
tmp[,1] <- abs(tmp[,1])
tmp <- tmp/apply(tmp,1,function(x) sqrt(sum(x^2)))

r <- rnorm(100, mu.r, sigma)

tmp2 <- tmp*r

x <- tmp2[,1] + mu.x
y <- tmp2[,2] + mu.y
z <- tmp2[,3] + mu.z

out <- optim( c(mean(x),mean(y),mean(z),diff(range(y))/2), tmpfun )
out

Wenn Sie nicht verwenden R, sollten Sie dennoch in der Lage sein, der Logik zu folgen und sie in eine andere Sprache zu übersetzen.

Technisch gesehen sollte der Radiusparameter durch 0 begrenzt sein. Wenn die Variabilität jedoch im Verhältnis zum tatsächlichen Radius gering ist, sollte die unbegrenzte Methode einwandfrei funktionieren, oder optim verfügt über Optionen zum Durchführen der begrenzten Optimierung (oder Sie können einfach den absoluten Wert von ausführen Radius in der Funktion zu minimieren).

Greg Snow
quelle
+1 Das ist wirklich cool. Aus rein egoistischen Gründen würde ich gerne eine Bearbeitung sehen, die (1) erklärt, warum der Schwerpunkt der Stichprobenpunkte eine voreingenommene Schätzung des wahren Zentrums der Kugel ist, und (2) ein oder zwei Kommentare, die dem Code hinzugefügt wurden, um die Logik der zu erklären Minimierungsfunktion als Lösung zur Vermeidung der Verzerrung bei der Verwendung des Schwerpunkts.
Alexis