Como ajustar uma elipse aos dados 2D


7

Gostaria de encontrar o "melhor" ajuste de uma elipse para formas contíguas e possivelmente côncavas, como:

insira a descrição da imagem aqui

O que eu tentei?

Eu pensei que alguém poderia atribuir a direção dos eixos maiores e menores a,bda elipse, mapeando os valores de pixel para coordenadas, subtraindo significa e salvando os dois maiores vetores próprios de um PCA. O parece funcionar bastante bem em encontrar a direção:

insira a descrição da imagem aqui

Meu problema é determinar o comprimento desses dois vetores. Por enquanto, eu useiλ1 λ2, a partir dos valores próprios do PCA. Isso parece subestimar o comprimento. Como posso determinar|a|e |b| ou, alternativamente, melhor encaixar uma elipse nessas formas?


Pelo que entendi, os valores próprios medem a "potência" do raio espectral desse vetor próprio. Eu não tenho os números que você está usando, mas não sãoλ1 e λ2mais de acordo com os comprimentos reais?
Spacey

Você está certo sobre a relação de λà força da projeção de autovetores - mas não consegui pensar em mais nada para usar. Usandoλ em oposição a λdimensiona os vetores do gráfico em várias ordens de magnitude. Eu simplesmente escolhi ocomo um palpite inicial.
Hooked

Como é apenas bidimensional, por favor, poste os vetores próprios que você encontrou e seus valores próprios correspondentes. Além disso, os pontos max / min em qualquer borda do desenho.
Spacey

Respostas:


6

Seguindo minha resposta excluída ... Se você fizer uma elipse preenchida e projetar todos os pontos no xNo eixo, mais pontos serão projetados perto da origem do que nos extremos, em uma distribuição em forma circular. Não é uma distribuição gaussiana, nem a distribuição uniforme que mencionei na analogia 1-D na minha resposta excluída. A distribuição resultante na verdade tem pdfp(x)=(1(xr)2)e a partir daí você pode calcular que o desvio padrão é r2.

Assim, se os dados são distribuídos uniformemente no interior de uma elipse de raios a,b (cujos eixos são os x e y eixos), o desvio padrão da x coordenada é a2 e do y coordenada é b2. Portanto, o fator de correção que você precisa usar é simplesmente 2.

Aqui está um exemplo trabalhado em python recuperando o centro (matriz de translação), matriz de rotação e raios de uma elipse a partir de pontos amostrados aleatoriamente em seu interior:

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)

11
+1 Você se importaria em expandir exatamente como você derivou o PDF p(x)=1(xr)2? Isso vai ao cerne da questão. Obrigado.
Spacey

O procedimento padrão para derivar uma distribuição marginal 1-D ao longo de um eixo de uma distribuição 2-D (você integra ao longo do outro eixo). A integral é então o comprimento de uma seção da elipse, ortogonal ao eixo no qual você projeta.
Pichenettes

3

Verifique o encaixe direto das reticências dos mínimos quadrados por Fitzgibbon et al. É um problema simples de autovalor, cujo tamanho não é proporcional ao número de pixels em sua amostra! O único passo dependente do número de pixels que você lança é o cálculo de uma matriz de dispersão, que ainda éO(n).


Obrigado pela referência @ pichenettes, mas esse documento não se parece com o que estou tentando resolver (corrija-me se estiver errado). No artigo, eles estão tentando minimizar a distância mínima de quadrados de um conjunto de pontos até a curva de uma elipse. No meu caso, tenho uma área que gostaria de aproximar com uma elipse da melhor maneira possível.
Hooked

Ah eu vejo ... desculpe
pichenettes

No entanto, é um link útil, mas criei artigos semelhantes quando fiz uma pesquisa no Google para obter uma elipse mais adequada. Aparentemente, esse problema está bem definido!
Hooked

Mas você não conseguiu derivar o contorno da área e aplicar papel @pichenettes nela?
Jean-Yves

Acho que existem casos de canto (formas estranhas?) Em que uma elipse que é uma boa combinação para o contorno não seria uma boa combinação para a superfície.
pichenettes
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.