Estimativa do centro e raio de uma esfera a partir de pontos na superfície

9

Se assumirmos que nossos pontos de dados foram amostrados da superfície de uma esfera (com alguma perturbação), como podemos recuperar o centro dessa esfera?

Na minha pesquisa, encontrei artigos sobre algo rotulado como "regressão esférica", mas não parecia exatamente o que estava fazendo a mesma coisa. Talvez eu simplesmente não tenha entendido.

Existe uma fórmula simples, semelhante à regressão linear, que encontre um ponto central e raio da esfera que minimize a distância ao quadrado da soma de um conjunto de pontos de dados da superfície da esfera?


Editar 1:

Podemos supor que o ruído seja 2 ou 3 ordens de magnitude menor que o raio da esfera e uniformemente esférico gaussiano. No entanto, as próprias amostras definitivamente não serão coletadas uniformemente da superfície da esfera, mas provavelmente serão agrupadas em algumas manchas na superfície, provavelmente todas dentro de um hemisfério. Uma solução que funciona para dados em é boa, mas uma solução geral para dimensionalidade arbitrária também é ótima.R3


Edição 2:

Quais são as chances de que eu possa obter uma resposta sensata se usar regressão linear, , no espaço tridimensional, fingindo que os componentes ao quadrado são independentes dos outros parâmetros:y=Xβ+ϵ

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

Na melhor das hipóteses, suponho que minha métrica de erro seja um pouco maluca. Na pior das hipóteses, a solução nem será consistente.
... ou isso é bobagem, porque com quatro colunas idênticas, obtemos uma matriz singular quando tentamos fazer regressão.


Edição 3:

Então, parece que estas são as minhas opções:

  1. Otimização numérica não linear usando alguma função de custo:f(x0,y0,z0,r|X)=12i=1n(r(xix0)2+(yiy0)2+(ziz0)2)2
  2. Hough-transform: discretize o espaço plausível ou os possíveis centros e raios em torno dos pontos de dados. Cada ponto vota nos centros em potencial dos quais ele poderia fazer parte em cada discretização de raio específico. A maioria dos votos vence. Isso pode ser bom se houver um número potencialmente desconhecido de esferas, mas com apenas uma é uma solução confusa.
  3. Selecione aleatoriamente (ou sistematicamente) grupos de 4 pontos e calcule analiticamente o centro . Rejeite a amostragem se estiver mal condicionada (os pontos são quase co-planares). Rejeite valores discrepantes e encontre o centro médio. A partir disso, podemos encontrar o raio médio.

Alguém tem um método melhor?

JCooper
fonte
Observe que as duas formas de sua pergunta não são equivalentes: não é necessariamente o caso de minimizar a soma dos quadrados das distâncias da superfície fornecer as melhores estimativas, a menos que seja feita uma forte suposição sobre a natureza das perturbações. Portanto, ajudaria a saber mais sobre como as perturbações ocorrem (e quão grandes elas podem ser comparadas ao tamanho da esfera). Além disso: em quantas dimensões está sua esfera?
whuber
@whuber pretendia definir o melhor ajuste como o que minimiza a distância ao quadrado da soma dos dados do ponto mais próximo na superfície da esfera. Não pensei muito nas suposições que isso implica. Espero erros proporcionalmente pequenos; portanto, talvez a métrica exata não importe muito, embora eu queira saber o que a função está minimizando. Adicionei mais informações sobre o ruído à pergunta.
JCooper
@ Max eu vi isso. Mas é um site para um produto comercial de caixa preta. É a fórmula real na qual eu estava interessado. Está começando a parecer que não há solução fechada e terei que usar uma abordagem numérica (que é o que eu assumo que o software nlReg também esteja fazendo).
JCooper
parece que isso pode ser um problema de minimização direto com uma função objetivo não linear (a que você mencionou acima). se os erros forem considerados gaussianos, você só precisará calcular os parâmetros distributivos dos erros depois de encontrar o centro da esfera, minimizando a função objetivo. editar: deixei a página aberta por muito tempo e não vi seu comentário. nós temos a mesma ideia.
precisa saber é o seguinte
2
re Editar 3: Dado , é fácil de encontrar. Para obter , o Método de Newton deve convergir rapidamente de algum valor inicial razoável obtido como em (3). (x0,y0,z0)r(x0,y0,z0)
whuber

Respostas:

3

Aqui está um Rcódigo que mostra uma abordagem usando menos quadrados:

# 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

Se você não usar R, ainda poderá seguir a lógica e traduzi-la para outro idioma.

Tecnicamente, o parâmetro radius deve ser delimitado por 0, mas se a variabilidade for pequena em relação ao raio verdadeiro, o método ilimitado deve funcionar bem ou o optim tem opções para fazer a otimização delimitada (ou você pode simplesmente fazer o valor absoluto de raio na função para minimizar).

Greg Snow
fonte
+1 Isso é muito legal. Por razões puramente egoístas, eu adoraria ver uma edição que (1) explique por que o centróide dos pontos de amostra é uma estimativa tendenciosa do verdadeiro centro da esfera e (2) um comentário ou dois adicionados ao código que explicam a lógica do função de minimização, como uma solução para evitar o viés do uso do centróide.
Alexis