Medida estatística para se uma imagem consiste em regiões separadas espacialmente conectadas


14

Considere estas duas imagens em escala de cinza:

rio aleatória

A primeira imagem mostra um padrão sinuoso de rio. A segunda imagem mostra ruído aleatório.

Estou procurando uma medida estatística que possa ser usada para determinar se é provável que uma imagem mostre um padrão de rio.

A imagem do rio tem duas áreas: rio = alto valor e em qualquer outro lugar = baixo valor.

O resultado é que o histograma é bimodal:

insira a descrição da imagem aqui

Portanto, uma imagem com um padrão de rio deve ter uma alta variação.

No entanto, o mesmo acontece com a imagem aleatória acima:

River_var = 0.0269, Random_var = 0.0310

Por outro lado, a imagem aleatória tem baixa continuidade espacial, enquanto a imagem do rio tem alta continuidade espacial, o que é claramente mostrado no variograma experimental: insira a descrição da imagem aqui

Da mesma maneira que a variância "resume" o histograma em um número, estou procurando uma medida de continuidade espacial que "resume" o variograma experimental.

Eu quero que essa medida "castigue" a alta semivariância em pequenas defasagens com mais força do que em grandes defasagens, por isso propus:

 svumar=h=1nγ(h)/h2

Se somar apenas de lag = 1 a 15, recebo:

River_svar = 0.0228, Random_svar = 0.0488

Eu acho que uma imagem de rio deve ter alta variação, mas baixa variação espacial, então eu introduzo uma taxa de variação:

 rumatEuo=vumar/svumar

O resultado é:

River_ratio = 1.1816, Random_ratio = 0.6337

Minha idéia é usar essa proporção como critério de decisão para se uma imagem é uma imagem do rio ou não; proporção alta (por exemplo,> 1) = rio.

Alguma idéia de como posso melhorar as coisas?

Agradecemos antecipadamente por qualquer resposta!

EDIT: Seguindo o conselho de whuber e Gschneider, aqui estão os Morans I das duas imagens calculadas com uma matriz de peso de distância inversa 15x15 usando a função Matlab de Felix Hebeler :

River_M Random_M

Preciso resumir os resultados em um número para cada imagem. De acordo com a wikipedia: "Os valores variam de -1 (indicando dispersão perfeita) a +1 (correlação perfeita). Um valor zero indica um padrão espacial aleatório". Se eu somar o quadrado dos Morans para todos os pixels, recebo:

River_sumSqM = 654.9283, Random_sumSqM = 50.0785 

Há uma enorme diferença aqui, então Morans parece ser uma medida muito boa de continuidade espacial :-).

E aqui está um histograma desse valor para 20.000 permutações da imagem do rio: histograma de permutações

Claramente, o valor River_sumSqM (654.9283) é improvável e, portanto, a imagem do River não é espacialmente aleatória.


4
Pergunta interessante. Um conselho que vem à mente imediatamente é o foco na parte de curto alcance do variograma: essa é a parte crucial e fará o melhor trabalho possível ao distinguir pares de imagens como essas. (Estatísticas intimamente relacionadas são I de Moran e C. de Geary .) É difícil dar conselhos específicos, a menos que você possa caracterizar com mais clareza os tipos de imagens que espera processar.
whuber

2
+1 whuber, Moran's I parece ser um bom começo neste caso. Então talvez considere um teste de permutação para ver quão "extrema" é sua imagem.
Gschneider

@Gschneider O teste de permutação é uma boa ideia, principalmente porque nenhuma permutação precisa ser realizada! É simples calcular a distribuição do variograma (I de Moran, C de Geary ou qualquer outra coisa) sob permutações dos valores na imagem: há tantos valores que o CLT aplica. (Por exemplo, o variograma se parecerá com os pontos verdes; duas vezes a altura constante é a variação dos valores da imagem.) O problema se torna mais desafiador quando um padrão de "rio" precisa ser diferenciado de outros padrões, como um "lago" ou "rios" podem ter larguras muito variadas.
whuber

Desculpe, mas não tenho certeza de que sigo: você está me dizendo para permutar a imagem que está sendo testada pixel por pixel de alguma maneira aleatória e depois comparar o valor I de Moran da imagem permutada com o valor da imagem que está sendo testada?
Andy

O que eu tinha em mente era primeiro definir algum tipo de estrutura de vizinhança (provavelmente simples) e calcular o I. de Moran. Depois, você pode calcular K, digamos 200.000, permutações possíveis dos pixels, calculando o I de Moran para cada permutação. Depois de obter esses 200.000 I de Moran, veja onde está a estatística observada. Mas, o método whuber parece mais fácil :).
Gschneider

Respostas:


1

Eu estava pensando que um borrão gaussiano atua como um filtro passa-baixo, deixando a estrutura em larga escala para trás e removendo os componentes com alto número de ondas.

Você também pode observar a escala de wavelets necessárias para gerar a imagem. Se toda a informação está vivendo nas ondas de pequena escala, provavelmente não é o rio.

Você pode considerar algum tipo de correlação automática de uma linha do rio consigo mesma. Portanto, se você capturasse uma linha de pixels do rio, mesmo com ruído, e encontrasse a função de correlação cruzada com a próxima linha, seria possível encontrar a localização e o valor do pico. Esse valor será muito maior do que o que você obterá com o ruído aleatório. Uma coluna de pixels não produzirá muito sinal, a menos que você escolha algo da região onde o rio está.

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

http://en.wikipedia.org/wiki/Cross-correlation


1
Algumas idéias interessantes aqui! Posso convencê-lo a elaborar essa resposta aplicando uma ou mais de suas abordagens às imagens de exemplo para (1) mostrar como seus métodos funcionam e (2) avaliar o desempenho deles?
whuber

1
É da minha tese. (Engenharia Mecânica) Coloquei um borrão gaussiano na posição de um pêndulo não linear e, em seguida, usei o método de convolução para retroceder a posição de uma imagem e compará-la com a analítica. Eu tentei com vários níveis de ruído. Desde que o ruído estivesse abaixo de um limiar relacionado ao tamanho do gaussiano, houve uma reconstrução muito boa. link A Figura 11 foi o gráfico relevante para a reconstrução. A Figura 6 e a equação 2 indicam resposta ao ruído.
EngrStudent - Reinstala Monica 27/03

Obrigado! Portanto, parece que você está em uma ótima posição para elaborar essa resposta e demonstrar como ela é realmente eficaz. :-)
whuber

Desculpe pelo comentário duplo. Eu acho que é "inteligente" usar parte de um objeto como uma pseudo "mãe-wavelet" para si mesma. Parece auto-referencial, mas também poético. Auto-Adjunto.
EngrStudent - Reinstala Monica 27/03

1

É um pouco tarde, mas não posso resistir a uma sugestão e uma observação.

Primeiro, acredito que uma abordagem mais "de processamento de imagem" pode ser mais adequada do que a análise histograma / variograma. Eu diria que a sugestão de "suavização" do EngrStudent está no caminho certo, mas a parte "desfocada" é contraproducente. O que é necessário é uma preservação mais suave da borda , como um filtro bilateral ou um filtro mediano . Eles são mais sofisticados do que os filtros médios móveis, pois são necessariamente não-lineares .

Aqui está uma demonstração do que quero dizer. Abaixo estão duas imagens aproximando seus dois cenários, juntamente com seus histogramas. (As imagens são cada 100 por 100, com intensidades normalizadas).

Imagens Raw imagens cruas

Para cada uma dessas imagens, aplico um filtro mediano de 5 por 5, 15 vezes *, que suaviza os padrões enquanto preserva as bordas . Os resultados são mostrados abaixo.

Imagens suavizadas imagens suavizadas

(* O uso de um filtro maior ainda manteria o contraste nítido nas bordas, mas suavizaria sua posição.)

Observe como a imagem "rio" ainda possui um histograma bimodal, mas agora está bem separada em 2 componentes *. Enquanto isso, a imagem "ruído branco" ainda possui um histograma unimodal de um componente. (* Limite fácil via, por exemplo, o método de Otsu , para fazer uma máscara e finalizar a segmentação.)


xf[y]

(Desculpe pelo discurso retórico ... meu treinamento foi como geomorfólogo, originalmente)


Em uma nota lateral, geralmente é uma boa idéia ter muito cuidado ao aplicar "métodos de variograma" a imagens naturais, que normalmente não são estacionárias. Isso é abordado na minha resposta aqui .
GeoMatt22

0

Uma sugestão que pode ser uma vitória rápida (ou pode não funcionar de todo, mas pode ser facilmente eliminada) - você já tentou observar a razão entre a média e a variação dos histogramas de intensidade da imagem?

Tire a imagem de ruído aleatório. Supondo que seja gerado por fótons emitidos aleatoriamente (ou similares) atingindo uma câmera, e é provável que cada pixel seja atingido e que você tenha as leituras brutas (ou seja, os valores não são redimensionados ou são redimensionados de uma maneira conhecida que você pode desfazer) , então o número de leituras em cada pixel deve ser distribuído por poisson; você está contando o número de eventos (fótons atingindo um pixel) que ocorrem em um período de tempo fixo (tempo de exposição) várias vezes (em todos os pixels).

No caso em que há um rio com dois valores de intensidade diferentes, você tem uma mistura de duas distribuições de poisson.

Uma maneira realmente rápida de testar uma imagem pode ser observar a razão entre a média e a variação das intensidades. Para uma distribuição de poisson, a média será aproximadamente igual à variância. Para uma mistura de duas distribuições de poisson, a variação será maior que a média. Você precisará testar a proporção dos dois em relação a um limite predefinido.

É muito bruto. Mas, se funcionar, você poderá calcular as estatísticas suficientes necessárias com apenas uma passagem por cada pixel da sua imagem :)

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.