Como posso eficiente segmento imagens 2D em regiões / bolhas de valores semelhantes?

votos
2

Como uma imagem 2D em bolhas de valores semelhantes de forma eficiente fazer segmento de I? A entrada de dados é um número inteiro de matriz, que inclui matiz para pixels não cinzento e o brilho dos pixels cinzentos.

Estou escrevendo um robô móvel virtual usando Java, e eu estou usando segmentação para analisar o mapa e também a imagem da câmera. Este é um problema bem conhecido na Computer Vision , mas quando se está em um desempenho robô faz questão que eu queria algumas entradas. Algoritmo é o que importa, então você pode postar o código em qualquer idioma.

Publicado 10/12/2008 em 09:13
fonte usuário
Em outras línguas...                            


5 respostas

votos
3

Eu downsample, em colourspace e em número de pixels, use um método de visão (provavelmente meanshift) e upscale o resultado.

Isso é bom porque downsampling também aumenta a robustez ao ruído, e torna mais provável que você obtenha segmentos significativos.

Você poderia usar floodfill para suavizar as bordas mais tarde se precisar suavidade.

Alguns pensamentos mais (em resposta ao seu comentário).

1) Será que quis misturar como você downsampled? y [i] = (x [2i] + x [2i + 1]) / 2 Este deve eliminar o ruído.

2) Qual a velocidade que você quer que seja?

3) Você já tentou meanshift dinâmico? (Também google para dinâmico x para todos os algoritmos x)

Respondeu 10/12/2008 em 09:53
fonte usuário

votos
2

Não tenho certeza se é muito eficiente, mas você pode tentar usar uma rede neural de Kohonen (ou, auto-organizar mapa; SOM) para agrupar os valores semelhantes, onde cada pixel contém a cor original e posição e só a cor é usada para a agrupamento Kohohen.

Você deve ler-se antes de implementar isso, porém, como o meu conhecimento da rede de Kohonen vai tão longe como que ele é usado para agrupar dados - então eu não sei o que as opções de desempenho / viabilidade são para o seu cenário.

Há também Hopfield Networks . Eles podem ser mutilado no agrupamento do que eu li.

Respondeu 10/12/2008 em 11:33
fonte usuário

votos
0

Uma alternativa a inundação-fill é a -componentes connnected algoritmo. Assim,

  1. Barato classificar seus pixels. por exemplo, dividir pixels no espaço de cor.
  2. Execute o cc para encontrar as bolhas
  3. Reter as bolhas de tamanho significativo

Esta abordagem é amplamente utilizado em abordagens visão inicial. Por exemplo, no papel seminal " Blobworld: um sistema de indexação Imagem Region-base e Recuperação ".

Respondeu 18/02/2009 em 10:52
fonte usuário

votos
0

Confira Eyepatch (eyepatch.stanford.edu). Deve ajudá-lo durante a fase de investigação, fornecendo uma variedade de possíveis filtros para segmentação.

Respondeu 14/12/2008 em 18:29
fonte usuário

votos
0

O que eu tenho agora:

  1. Fazer um tampão do mesmo tamanho que a imagem de entrada, inicializado para UNSEGMENTED.
  2. Para cada pixel na imagem em que o valor do padrão correspondente não é UNSEGMENTED, inundar o tampão usando o valor de pixel.

    uma. A verificação fronteira da inundação é feito verificando se os pixels está dentro EPSILON(definido como 10) do valor do pixel de origem.

    b. Inundar o preenchimento algoritmo .

Possível problema:

verificação de fronteira do 2.a. é chamado muitas vezes no algoritmo de inundação enchimento. Eu poderia transformá-lo em uma pesquisa se eu poderia precalculate a fronteira usando detecção de bordas, mas que pode adicionar mais tempo do que verificação atual.

private boolean isValuesCloseEnough(int a_lhs, int a_rhs) {
    return Math.abs(a_lhs - a_rhs) <= EPSILON;
}

Possível Enhancement:

Em vez de verificar cada pixel para UNSEGMENTED, eu poderia escolher aleatoriamente alguns pontos. Se você está esperando cerca de 10 gotas, escolhendo pontos aleatórios nessa ordem pode ser suficiente. Desvantagem é que você pode perder uma gota útil, mas pequena.

Respondeu 10/12/2008 em 09:29
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more