Realizando redução de ruído de varredura e suavização de borda?

22

Eu tenho uma imagem rasterizada como estaRasterizar imagem

Quero excluir o ponto de ruído isolado e suavizar a borda (digamos os pontos únicos brancos e quero que as bordas da entidade pareçam suaves). Como posso fazer isso no ArcGIS ou no R?

O tamanho da célula é 30 * 30.

Visto
fonte

Respostas:

15

As operações morfológicas Expand e Shrink foram criadas para esse tipo de processamento. Use ArcGIS (ou GRASS ou Mathematica ) porque Ra biblioteca "raster" é muito lenta.


Freqüentemente, ajuda a experimentar um pouco os parâmetros: você precisa decidir quanto de expansão e encolhimento é necessário para limpar uma imagem; e geralmente você deseja fazer o mínimo possível, porque cada operação tende a suavizar alguns detalhes nítidos. Aqui está uma sequência que funciona bem para eliminar grande parte do "ruído" aparente, mantendo a maioria dos detalhes nas "entidades". "Expandir" e "encolher" são ambos referentes às células brancas , de modo que a expansão faz com que elas cresçam para fora e o encolhimento faz com que as células pretas invadam as regiões brancas.

Tabela de imagens

A coluna "diferença" usa cores para destacar as diferenças entre a imagem inicial e final em cada etapa: azul para preto que virou branco e laranja para branco que virou preto.

Se as peças restantes maiores precisarem ser removidas, é melhor fazê-lo com o RegionGroup para identificá-las, após o que elas podem ser obliteradas por reclassificação. Esta era uma opção desde o início, mas um pouco de limpeza inicial com Expande Shrinkreduz o trabalho e fornece a suavização desejada.


Aliás, eu escolhi fazer as oito imagens nesta ilustração com os comandos do Mathematica porque são muito simples, fáceis e rápidas de executar:

i = Import["http://i.stack.imgur.com/umDg7.png"];
l = Dilation[k = Erosion[j = Dilation[i, 2], 3], 1];      (* This does all the work *)
delta = ColorCombine /@ {{i, j}, {j, k}, {k, l}, {i, l}}; (* Compares images *)

O fluxo de trabalho no ArcGIS é o mesmo, mas a sintaxe será mais longa. Se você realmente deseja usar R, carregue a biblioteca "raster" e explore focalFilterpara criar funções para expandir e diminuir. Espere cerca de um minuto cada para executar as operações ....

whuber
fonte
Olá! Se você não se importa, poderia me enviar suas informações de contato? Gostaria de agradecer a você em minha pesquisa. Obrigado! @whuber
Visto
Você conhece os comandos equivalentes no GRASS?
Richard
1
@ Richard Tenho certeza de que existem muitas maneiras criativas de executar essas operações no GRASS, mas os vizinhos parecem adequados para a tarefa.
whuber
12

Usando a extensão Spatial Analyst, você pode usar algumas das ferramentas Generalização . Alguns deles executam tarefas semelhantes; portanto, você pode precisar brincar com alguns para obter os resultados da maneira que deseja. Mas, eu daria uma olhada na ferramenta Filtro de maioria e na ferramenta Limite de limite .

Aqui está uma página sobre os conceitos dessas duas ferramentas.

Não tenho certeza de como executar essas tarefas no R, mas aqui está um post sobre como executar um filtro de maioria usando GRASS GIS.

Fezter
fonte
2

Essa é basicamente uma variante da resposta do @ whuber e usa a Distância Euclidiana para expandir e reduzir os limites da varredura para suavizar os cantos afiados da varredura que é exagerada pelo processo de expansão-contração que utiliza o número de células para crescer / invadir. Embora a distância euclidiana imite a expansão, não é possível introduzir valor negativo para invadir / encolher. O truque é desenvolver um processo iterativo para pegar o negativo do raster Euclidian Distance e aumentá-lo. Abaixo estão as etapas para as imagens de amostra fornecidas e os instantâneos para esclarecimentos.

  1. Reclassifique a varredura para manter apenas 1s (glóbulos brancos)

  2. Aplique a distância euclidiana para a distância de duas células (60 metros neste caso) à varredura reclassificada

  3. Pegue o negativo da varredura expandida usando Reclassify (as células com o valor receberão NODATA e NODATA serão giradas para 1) ou os operadores Con e IsNull da Calculadora de varredura

  4. Aplique a Distância Euclidiana mais uma vez a esta varredura negativa com a mesma distância (60 m)

  5. Tome o negativo disso, seguindo o mesmo processo dado acima

  6. Use a Calculadora de varredura ou Reclassificar para atribuir células NODATA a 0 nesta varredura para retornar aos valores originais da varredura de amostra

Expandir o Shrink vs. Euclidian Distância

Expandir e encolherDistância euclidiana

Nota: Verde mostra as células processadas (células brancas nas perguntas)

A vantagem da Distância Euclidiana é que ela leva a distância adequada de cada célula através das extensões de hipotenusa, que suavizam as bordas afiadas. O número de parâmetros de célula das ferramentas de expansão e contração, por outro lado, processa o mesmo número de células em todas as direções, o que produz bordas semelhantes a caixas delimitadoras, portanto generaliza demais as bordas / cantos.

A questão principal, no entanto, não remove o ruído com tanto sucesso quanto a expansão / redução e é um pouco mais longa que a resposta.

fatih_dur
fonte
Para qualquer pessoa fazendo isso e usando GRAMA / QGIS - você pode usar r.grow e crescer por uma distância euclidiana positivo, seguido de um negativo distância euclidiana
srha