Eu tenho uma pasta de dados GIS que consiste principalmente em arquivos GeoTIFF. Todo o conjunto pesa cerca de 1.2 GB
. Percebi que se eu empacotar o conteúdo em um tarball, ele se esmaga 82 MB
. Gostaria de verificar o conjunto em um sistema de controle de revisão para que ele possa ser trabalhado por outras pessoas e parece que há algum espaço que pode ser espremido.
A página do driver GDAL GeoTIFF lista muitas opções que podem ser usadas para criar arquivos GeoTIFF compactados. Também existem muitas opções que afetam a maneira como cada algoritmo funciona.
A página de ajuda faz um bom trabalho na descrição das opções, mas não detalha como selecionar um algoritmo ou as trocas associadas ao nível variável de compactação. Isso leva às seguintes perguntas:
Os profissionais do uso de compactação são uma economia drástica no espaço. Quais são os contras? As informações são perdidas quando a imagem é compactada?
Como se deve escolher um algoritmo e um nível de compactação. Alguns tipos de imagens se prestam a um determinado algoritmo?
fonte
O uso de
lzw
edeflate
compressão-co predictor=2
pode ajudar com imagens que variam suavemente à medida que comprime as diferenças de pixel para pixel em vez dos valores absolutos, e elas tendem a ser pequenas e ter mais padrões ( ref ). O Predictor é útil apenas comlzw
edeflate
compressão, a opção não tem efeito com outros métodos.A economia de previsão pode ser dramática. Acabei de compactar novamente um diretório de modelos de elevação geotiff de 16 bits usando 17 GB com as configurações padrão de LZW em apenas 5 GB com preditor = 2.
Há informações conflitantes sobre as diferenças entre os preditores 2 e 3 e quando cada um é melhor aplicado ( ref1 , ref2 ). Talvez combustível para outra pergunta.
Outra opção fácil para economizar é
-co tiled=yes
. Existem alguns softwares que não conseguem ler imagens lado a lado, mas elas estão se tornando mais raras e principalmente fora do GIS (agora não conheço nenhum software GIS de fluxo principal que não as leia).Para aproveitar a resposta da @ alfonx de usar visões gerais compactadas : Isso permite que a imagem base seja armazenada sem perdas, para integridade dos dados, e as pirâmides com perdas, para velocidade e economia de espaço. É quase o melhor dos dois mundos. Para as menores visões gerais possíveis com
gdaladdo
imagens RGB: use compactação jpeg, reamostragem média ou gaussiana em vez do vizinho mais próximo padrão (torna as visões mais suaves) e visão geral fotométrica YCBCR. Veja a página de referência do gdaladdo para obter mais informações sobre essas opções (embora não diga muito sobre o que é fotométrica).Isso faz parte de um arquivo em lotes do Windows que eu uso para aplicar visões gerais de JPEG externas a todos os tiffs em um diretório:
Notas
O GDAL 1.6.0 introduziu a
gauss
reamostragem que pode levar a melhores resultadosaverage
no caso de bordas afiadas com alto contraste ou padrões de ruído. Poderes de 2 níveis (2 4 8 ...) devem ser usados para que um núcleo Gaussiano de reamostragem 3x3 seja selecionado.JPEG_QUALITY_OVERVIEW 85
- se não especificado, o padrão de 75% é usado, o que gera um arquivo menor, mas considero 85% um comprometimento melhor na troca de tamanho versus qualidade.Atualização, 2015: GDAL 1.8 e 2.0 introduziram muitas novas opções não abordadas aqui e que não tive tempo de digerir. Leia a página oficial do formato gtiff , tenho certeza de que há configurações úteis adicionais detalhadas.
fonte
Para grandes empresas, o GeoTiff oferece a possibilidade de armazenar visões gerais (pré-) reduzidas como imagens extras no arquivo GeoTiff. Isso pode ser feito com gdaladdo (= Visão geral do GDAL ADD). Ao criar essas visões gerais, você pode dizer manualmente ao gdal para compactá-las também:
Acelera a visualização de seus dados sem adicionar muito tamanho. Nota: Aplicativos Geotools como Geoserver, uDig, AtlasStyler, Geopublisher podem usar esse recurso e lucrar com as visões gerais.
fonte
Para ativar a descompactação parcial da imagem, basta usar TILED = YES.
Peter
fonte
Por fim, você provavelmente precisará experimentar as diferentes opções e ver o que atende às suas necessidades.
Eu uso cada vez mais GeoTIFFs compactados em JPEG sobre formatos baseados em wavelet. Meus resultados foram muito bons. O uso do GDAL para isso resultou em taxas de compactação comparáveis aos formatos baseados em wavelet sem muita perda de dados. O impacto no desempenho que acompanha a descompressão foi aceitável.
O que eu mais gosto nessa abordagem é que o suporte ao GeoTIFF é quase universal, enquanto o suporte a formatos baseados em wavelet nem sempre é garantido e às vezes está sujeito a problemas de licenciamento espinhosos.
fonte
Minha experiência comparando a compactação ECW ( Enhanced Compressed Wavelet ) do GeoTIFF vs. Earth Resource Mapping é que o ECW tem ordens de magnitude melhores ao compactar fotos aéreas de alta resolução. Outra vantagem importante da compactação baseada em wavelet é que, diferentemente dos formatos mais antigos como GeoTIFF, JPEG - não JPEG 2000 -, apenas uma parte da imagem pode ser descompactada [ref. 1] A importância dessa vantagem não deve ser subestimada, especialmente quando se trabalha com "maior que cerca da metade do tamanho da memória do computador".
Parece - nunca tive a chance de testá-lo - que o MrSID , outro formato de arquivo proprietário, baseado em wavelet, também exibe taxas de compactação mais altas do que os formatos "mais antigos" e descompactação seletiva.
ref. 1: http://www.ifp.uni-stuttgart.de/publications/phowo01/Ueffing.pdf
fonte
As respostas de @dodobas e @ matt-wilkie cobrem quase tudo relacionado aos atos de compactação e desfoque com o GDAL para reduzir o tamanho da imagem.
Eu gostaria de adicionar duas coisas:
-co
), especificamente:COMPRESS
NUM_THREADS
PREDICTOR
ZLEVEL
Por exemplo, o GeoServer não recomenda a compactação de GeoTIFFs :
Isso é especialmente verdadeiro se você já estiver usando visões gerais, lado a lado e mídia de armazenamento de alto desempenho (disco de nível corporativo ou SSD).
fonte
Para aqueles que usam versões mais recentes do GDAL, há também as opções de compactação sem perdas do ZStandard ( ZSTD ) (GDAL> = 2.3) e com compactação com perdas limitadas por compressão de varredura de erros ( LERC ) (GDAL> = 2.4).
De um modo geral, porém,
ZSTD
oferece velocidades de leitura de dados mais rápidas que ambasLZW
eDEFLATE
com taxas de compactação semelhantes, embora possa ser um pouco mais lento ao gravar o arquivo (dependendo das configurações usadas).Se você não se preocupa tanto com a precisão dos dados (por exemplo, apenas visualizando e não analisando),
LERC
pode ser uma boa opção. Há umaMAX_Z_ERROR
configuração que permite ajustar a precisão que você está disposto a sacrificar. Por exemplo, aMAX_Z_ERROR=0.001
ou 1 mm proporcionou uma economia de espaço de 50% em uma referência (consulte ref ).A melhor parte é que você também pode combinar
LERC
com oZSTD
usoCOMPRESS=LERC_ZSTD
! Ou se você preferir usarDEFLATE
, pode fazerCOMPRESS=LERC_DEFLATE
. Veja também a lista completa de combinações / configurações nos documentos oficiais do GDAL GeoTIFF https://gdal.org/drivers/raster/gtiff.html#creation-optionsMais detalhes e comparações completas de benchmarks podem ser encontrados nesta referência valiosa:
fonte