Detecção de textura e propriedades de região em uma imagem


9

Eu tenho um problema interessante que estou tentando resolver. Por exemplo, se tivermos uma imagem em preto e branco contendo duas texturas (A e B), estou interessado em conhecer os valores de pixel dos limites que cobririam completamente as texturas individuais.

Pensei em usar correlação cruzada, o que me daria um conjunto de posições, do modelo (legendas) na imagem, mas existe uma maneira de usar isso para obter os valores de pixel dos limites (normalmente são irregulares)? Além disso, existe outra maneira melhor de fazer isso?

Um exemplo real disso seria detectar as regiões de precipitação em um mapa mostrando três níveis de precipitação em um ano. A cada nível é atribuída uma textura presente na legenda, que é usada para a correspondência de texturas na mesma imagem.


4
Seria útil se você realmente exemplos compartilhada e talvez algumas soluções preliminares você já tentou
Ivo Flipse

3
Definitivamente, envie alguns exemplos de imagens para entendermos o que você está fazendo. Como algumas regiões são preenchidas com sólidos e outras são hachuradas? nps.gov/sagu/naturescience/images/...
endolith

Caso você tenha o matlab, você pode usar a caixa de ferramentas de processamento de imagem. Caso contrário, o site ainda oferece uma boa visão geral dos algoritmos padrão que você deseja usar, por exemplo, a função bwconncomp .
Mr. White

Respostas:


1

Aqui está um processo simples:

  1. Atribua medições de textura a cada região da imagem.
  2. Use um algoritmo de rotulagem / conectividade de região (ou algoritmo de crescimento de região) para unir regiões adjacentes com a mesma medida de textura.
  3. Implemente um algoritmo simples de acompanhamento de arestas para rastrear o contorno de cada região.

As Medidas de textura de Law são uma técnica mais antiga, mas ainda útil, para determinar a textura em uma imagem e podem ser suficientes para você distinguir a textura A da textura B em toda a imagem. Veja a seção "Leis sobre medidas de energia de textura" no artigo da Wikipedia:

http://en.wikipedia.org/wiki/Image_texture

Como primeiro passo, calcule todas as medidas de textura e determine qual medida específica (por exemplo, Borda ou Ponto) permite distinguir uma textura da outra com mais facilidade. (Se você publicar algumas fotos, eu poderia ajudá-lo a identificar uma medida de textura.)

Se você tiver apenas duas texturas, A e B, poderá tratá-las como primeiro plano e plano de fundo, e um algoritmo de rotulagem de região padrão funcionará. Para facilitar a visualização do que está acontecendo no processamento, você pode gerar uma nova imagem atribuindo texels A (elementos de textura, pequenos pedaços de textura) à cor branca e texels B à cor preta. A rotulagem de região e / ou algoritmos de seguimento de contorno encontrariam as regiões branca e preta conectadas. A função findContours () no OpenCV funcionará bem.

http://en.wikipedia.org/wiki/Connected-component_labeling

O mesmo artigo da Wikipedia inclui o algoritmo multipass tradicional e também o algoritmo de passagem única. Não implementei o algoritmo de passagem única descrito lá, mas trabalhei com o algoritmo de passagem única descrito no artigo "Algoritmo de rotulagem de componentes usando a técnica de rastreamento de contorno" de Chen e Chang. O artigo de Chen e Chang também descreve um algoritmo padrão de acompanhamento de contornos que pode ser implementado rapidamente.

Se você tiver mais de duas texturas, poderá usar um algoritmo de mudança de bacia ou média para agrupar regiões depois de remapear as texturas para cores. Embora esse remapeamento da textura para a cor não seja necessário, ele facilita o processo de depuração e compreensão.

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.