Detectando rios sinuosos em imagens


14

Eu tenho superfícies: com um atributo medido (variável) em cada superfície: . A maioria das superfícies terá uma distribuição aleatória do atributo pela superfície, mas algumas superfícies (as interessantes) mostrarão um padrão sinuoso de rio:nzi(x,y)ai(x,y)

insira a descrição da imagem aqui

Preciso da sua ajuda para elaborar uma medida que nos diga qual das superfícies tem maior probabilidade de ter esse padrão.n

Existem muitos mapas possíveis com o mesmo histograma, como mostrado abaixo; portanto, a medida precisa "recompensar" a continuidade espacial. Para ilustrar isso, criei uma imagem aleatória com quase o mesmo histograma da imagem do rio: insira a descrição da imagem aqui

Portanto, as estatísticas da imagem e a entropia podem ser apenas parte da solução.

Aqui está um exemplo de uma imagem sem um padrão de rio sinuoso: insira a descrição da imagem aqui

Minhas imagens são sintéticas (feitas em Matlab). Na vida real, a imagem sem o padrão pode ter continuidade um pouco mais espacial na forma de pequenas bolhas de valor semelhante.

Aqui estão as imagens em escala de cinza:

insira a descrição da imagem aqui insira a descrição da imagem aqui


1
Você pode postar imagens reais (sem eixo, paleta, histograma, para que possamos tentar algoritmos diferentes?). Além disso: o "rio sinuoso" é na verdade um seno ou pode ter alguma forma?
Niki Estner

1
Oi Nikie. No meu exemplo (dados sintéticos feitos em Matlab), o rio é um seno. Na vida real, é "senoidal"; às vezes vai além da linha central, às vezes não.
Andy

Respostas:


13

Uma medida muito simples seria comparar cada linha da imagem com a linha acima dela, permitindo alguma mudança horizontal.

Eu hackeei esse algoritmo simples no Mathematica:

Mean[MapThread[
  Function[{line1, line2},
   Min[Table[Norm[line1 - RotateLeft[line2, shift]], {shift, -5, 5}]]
   ], {s[[2 ;;]], s[[;; -2]]}]]

Simplesmente pega cada par de linhas adjacentes, gira uma das linhas por -5..5 pixels e ocupa a menor distância euclidiana. Isso gera uma distância euclidiana para cada par de linhas. Simplesmente tomo a média (mas, dependendo dos dados reais, uma média ou mediana truncada pode ser mais robusta).

Estes são os resultados que recebo para amostras geradas artificialmente (Fórmula: Normalizar (ruído aleatório * (1 fator) + sinal * fator))

insira a descrição da imagem aqui

Se eu plotar o resultado contra a força do sinal, o algoritmo parece medir muito bem a "força do sinal do rio sinuoso":

insira a descrição da imagem aqui

EDIT : Eu esqueci de normalizar as amostras de entrada. Corrigido que uma nova imagem de resultado carregada


Boa resposta. No entanto, acho que sua medida pode ser enganada por outras curvas contínuas, como a linha reta. Eu melhoraria um pouco alterando o último passo para ajustar um seno aos pontos (x, y) que você encontrou, com alguma amplitude, fase e frequência. Então, a amplitude pode servir como medida para a "força do rio".
Andrey Rubshtein

4

Você parece estar no caminho certo com esse histograma. Se esta é uma imagem representativa da sua amostra, o histograma mostra que as imagens em que o padrão de meandro está presente podem ser detectadas apenas examinando se elas contêm valores acima de um determinado limite.

Fora isso, você pode tentar obter a entropia de cada imagem. Isso fornecerá um número por imagem que caracteriza sua aleatoriedade. Depois disso, você pode obter um histograma das entropias de suas imagens. Se você tiver certeza de que as imagens são claramente divididas em "totalmente aleatório" e "aleatório com meandro" (ou seja, menos aleatório), o histograma das entropias será bimodal. O modo esquerdo corresponderá a imagens com menor entropia e, portanto, menos aleatoriedade (com maior probabilidade de conter um padrão sinuoso) e vice-versa para o modo correto.

(O BTW MATLAB inclui uma função relevante )

EDIT: Como resposta aos comentários do OP e ao subsequente carregamento de mais informações sobre o problema, aqui está um ponto adicional a esta resposta:

A entropia ainda funcionaria, mas não o caso simples, sem memória, descrito pela fórmula de Shannon (onde cada amostra de uma série temporal é considerada independente das anteriores).

Como alternativa mais simples, você pode tentar examinar os recursos da autocorrelação da imagem .


Oi A_A. Acho que a estatística da imagem faz parte da solução, mas é preciso ponderar nos pixels vizinhos de alguma forma para recompensar a continuidade espacial (veja o Mapa do atributo aleatório acima).
Andy

Olá, concordo e aumentei a resposta.
A_A 01/06/12
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.