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 0
entanto, 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.
image-processing
edge-detection
Hooked
fonte
fonte
Respostas:
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:
Após repetir para cada segmento e posicionar etiquetas onde as distâncias individuais são máximas:
fonte
Eu afirmo que o local ideal para colocar o rótulo deve atender a dois objetivos:
Portanto, podemos determinar o ponto ideal minimizando uma métrica holística comol × dα ou l + α d , Onde α é o parâmetro de troca.
determinandod é simples. eu pode 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.
fonte