Identifique o local correto para colocar um rótulo

12

Na imagem mostrada abaixo, eu tenho um conjunto de dados 2D onde identifiquei quatro clusters rotulados [0,1,2,3]. Estou procurando um algoritmo para colocar os rótulos de maneira natural * para cada forma. Meu primeiro palpite foi colocá-los no "centro de massa" do cluster, que é mostrado abaixo. Para clusters contíguos, isso funciona bem. No 0entanto, para clusters que assumem uma forma como no cluster , a abordagem falha. Sem usar uma legenda, qual seria o melhor método para colocar os rótulos nesta imagem?

* natural aqui é subjetivo até certo ponto, mas o objetivo dos rótulos é ajudar o espectador a associar uma determinada região no plano xy a um número.

insira a descrição da imagem aqui

Hooked
fonte
1
Bem-vindo ao DSP.SE. Esta é uma grande pergunta! =)
Phonon
@Hooked Se os clusters forem modelados como gaussianos bidimensionais de uma matriz de covariância média e 2x2, então eu pensaria que a colocação natural seria simplesmente a média dos gaussianos. Você já determinou a média dos seus clusters?
Spacey

Respostas:

11

Que tal colocar a etiqueta no ponto mais interno do segmento? Vamos definir o mais interno pelo máximo da transformação de distância da máscara do segmento.

Com sistemas de software como o Mathematica e o tipo, é fácil de alcançar.

A máscara para um segmento e sua distância transformam: insira a descrição da imagem aqui

Após repetir para cada segmento e posicionar etiquetas onde as distâncias individuais são máximas:

insira a descrição da imagem aqui

Matthias Odisio
fonte
1
Você se importa em elaborar um pouco o que significa "mais íntimo"? Não tenho acesso ao Mathematica (usando python), mas devo poder codificar qualquer solução apresentada.
Hooked
@Hooked Veja a edição. Se você tiver acesso a uma função que calcula a transformação de distância, está tudo pronto.
Matthias Odisio
2
Parece ótimo e não acho que seja difícil me implementar. Só para esclarecer, a transformação que você aplicou é a "... a transformação de distância da imagem, na qual o valor de cada pixel é substituído pela distância do pixel de fundo mais próximo".
Hooked
Sim, é isso. Não será difícil implementar esta solução, desde que você não precise codificar uma função de transformação à distância (implementações rápidas são mais
difíceis de
8

Eu afirmo que o local ideal para colocar o rótulo deve atender a dois objetivos:

  • proximidade ao centro, digamos d.
  • legibilidade, digamos eu.

Portanto, podemos determinar o ponto ideal minimizando uma métrica holística como eu×dα ou eu+αd, Onde α é o parâmetro de troca.

determinando d é simples. eupode ser definido como a variação total (ou alguma outra medida do nível de detalhe) na área ocupada pelo rótulo. Você pode definir isso como um número alto em regiões fora do segmento para evitar o problema no seu exemplo.

O resto é otimização numérica.

Emre
fonte
1
Parece uma boa abordagem e robusta o suficiente para uma imagem com mais detalhes. É a sua proximidade com o centro,d, o que estou chamando de "centro de massa" ou o que @MatthiasOdisio chama de "ponto mais interno"?
Hooked