Preciso reduzir a extensão do processamento da minha varredura por algum tipo de procedimento automático em python. Atualmente, as bordas do conjunto de dados que tenho usado têm anomalias (devido à classificação das linhas de varredura do landsat).
Gostaria de reduzir a extensão do processamento de varredura para que, quando recupero as informações acima por uma função SetNull, as bordas não sejam processadas. Algo como
Agora, isso pode ser feito facilmente com uma função de extração por máscara (por exemplo, figura 2), embora isso exija a seleção manual da região de máscara. Existe um método que eu possa utilizar para calcular a região de extensão (ignorando os valores nodata) menos a largura da borda nas direções xey de cada linha / coluna e, em seguida, utilizar o arcpy.env.extent
em Python?
fonte
Respostas:
Esse fluxo de trabalho lida primeiro com o lixo flutuando pelas bordas e depois resolve o problema.
Crie um indicador binário da área "borda", que tomo para incluir todas as células NoData ao redor. É conveniente usar qualquer valor para indicar a borda e o NoData para o restante, como em
SetNull(Not(IsNull('X')), 1)
:Agrupe o resultado na região e selecione o componente de borda. (Geralmente, isso pode ser automatizado, selecione o componente com o maior valor de [Count].) A imagem terá a mesma aparência; apenas alguns pixels dispersos no centro são excluídos aqui - mas devem ser excluídos para a próxima etapa funcionar.
(Uma abordagem alternativa é usar operações morfológicas primeiro para reduzir a borda e depois expandi-la novamente: isso apaga os bits isolados no meio.)
Calcule a grade de distância euclidiana para o componente de borda.
Mascarar todas as pequenas distâncias na imagem original, como em
SetNull(([Distance to Border component] < 30),
X)
:(A imagem final mostra a borda original em verde sobreposta, para referência, no resultado.)
fonte