Preenchendo lacunas NoData em raster usando o ArcGIS Desktop?

9

Eu tenho uma varredura com lacunas. Quero preenchê-los com médias de células circundantes usando o ArcGIS 10.2 for Desktop.

Eu tentei "Estatísticas Focais", mas calcula a média de CADA célula e não apenas as lacunas.

Eu tentei [Mosaic] .IsNull.Con ([Average], [Mosaic]) encontrado aqui Patching, mas não sei como implementá-lo / ele não funcionará para mim

Eu tentei o Map ALgebra, mas acho que eles estavam usando versões anteriores à 10.2.

O que eu quero. Faça uma varredura falsa com as lacunas preenchidas. Use a varredura falsa para preencher as lacunas da varredura real sem substituir os pontos pelos dados reais.

Steven Crisp
fonte
Sintaxe incorreta, use ([mosaic] .isnull) .Con ([average], [mosaic])
FelixIP 19/02/15
1
Apenas observe que o link 'Patching' parece ter 15 anos (de 2000 a 2001).
Phloem
2
Muita coisa mudou com os rasters recentemente; portanto, muitos exemplos mais antigos têm a intenção correta, mas apresentam uma sintaxe incorreta para ser usada na versão atual. @crmackey tem a tradução correta, embora eu usasse um círculo e não um retângulo; para dimensões menores, há pouca diferença, mas para áreas (relativamente) grandes da vizinhança, há uma diferença significativa entre círculo e retângulo.
Michael Stimson
1
Mesmo com 15 anos, ainda é muito relevante. Huber conhecia e conhece o assunto extremamente bem.
FelixIP
1
Exatamente. A operação é a mesma, apenas a sintaxe foi alterada.
Michael Stimson

Respostas:

9

Isso funciona:

filled = arcpy.sa.Con(arcpy.sa.IsNull(in_raster),arcpy.sa.FocalStatistics(in_raster,
                        arcpy.sa.NbrRectangle(w, h),'MEAN'), in_raster)

Onde "w" e "h" são o raio da pesquisa.

Isso faz apenas estatísticas focais nas áreas NoData. Eu verifiquei apagando dados de um DEM e depois encontrando a diferença. Você só precisa garantir que o raio da pesquisa seja adequado.

crmackey
fonte
Acabei de adicionar tudo isso à calculadora raster e alterar o "in_raster" ew eh? Por alguma razão, não consigo fazê-lo funcionar, embora o fluxo faça sentido, pois pula a criação manual da varredura focal e o faz em tempo real.
Steven Crisp
Tenho que trabalhar! Muito obrigado! foi apenas adicionando "é onde eu não era; t suposto Obrigado.!
Steven Crisp
1
Sem problemas. Um aviso, como apontou @ MichaelMiles-Stimson, usar NbrCircle () seria melhor.
21415 Cracker:
O wh está nas unidades de células do mapa?
Se você não sabe- apenas GIS
Você seria melhor usando o local arcpy.sa.NbrCircle(radius, units)onde as unidades podem estar 'MAP'ou 'CELL'.
crmackey
3

Use a função de estatísticas focais, conforme descrito para calcular a média de todas as células da varredura. Em seguida, use as funções Con e IsNull na calculadora raster para substituir apenas as células que são nulas.

Con(IsNull(<inputRaster>), <focalRaster>, <inputRaster>)

Uma desvantagem possível com esta solução é que você pode ver alguns valores médios adicionais indesejados de células em torno do perímetro da sua varredura de saída

Ben Gosack
fonte
Não consigo votar devido à reputação ou não, mas esse método funciona se eu fizer uma varredura de estatísticas focais primeiro e depois aplicar o código acima. Eu gostaria de poder fazer tudo em uma linha, como no comentário acima, para economizar tempo. Eu tenho um par de centenas destas coisas ...
Steven Crisp
Depende apenas se você deseja manter suas estatísticas focais rasterizadas ou interpretar on-the-fly ... ambos os métodos são essencialmente os mesmos (+1 para ambos).
Michael Stimson
3

Você deve usar a Calculadora de varredura e há uma linha de código útil e relevante na página de suporte da ESRI : Como: Remover e substituir nenhum valor de dados dentro de uma varredura usando informações estatísticas dos valores de dados circundantes . Da sua pergunta, parece que isso faria exatamente o que você está tentando fazer, mas deixe-me saber se estou errado. Aqui está minha captura de tela da Calculadora Raster usando uma instrução condicional para calcular um valor médio para células sem dados das células circundantes: insira a descrição da imagem aqui

Se você tiver centenas delas, recomendo usar o Raster Iterator no Model Builder, que alimentará todas as suas rasters na Raster Calculator Tool, desta forma:

insira a descrição da imagem aqui

Leo
fonte
2

Tentei o método da Calculadora de varredura que LeonB usou, mas ocorreu um erro de falta de memória, o que é surpreendente, considerando as especificações do meu sistema. Escreveu um pequeno script python independente - modificado daqui - no IDLE que funcionou para mim ...

import arcpy
from arcpy import env
from arcpy.sa import *

env.workspace="D:/Watershed/"

inRaster="D:/Watershed/tamtr14_1m"

arcpy.CheckOutExtension ("Spatial")

outCon=Con(IsNull(inRaster), FocalStatistics (inRaster, NbrRectangle (5,5, "CELL"), "MEAN"), inRaster)

outCon.save ("D:/Watershed/outCon")
wiebe712
fonte