압축 된 GeoTIFF 파일을 생성하도록 GDAL을 설정해야합니까? 어떤 알고리즘을 사용해야합니까?


50

주로 GeoTIFF 파일로 구성된 GIS 데이터 폴더가 있습니다. 전체 세트의 무게는 약 1.2 GB입니다. 내용물을 타르볼 (tarball)에 담 으면 약으로 떨어집니다 82 MB. 다른 사람들이 작업 할 수있는 수정 제어 시스템으로 세트를 확인하고 싶습니다. 누를 수있는 공간이있는 것처럼 보입니다.

GDAL GeoTIFF 드라이버 페이지 에는 압축 된 GeoTIFF 파일을 작성하는 데 사용할 수있는 많은 옵션이 나열되어 있습니다. 각 알고리즘의 작동 방식에 영향을주는 옵션도 많이 있습니다.

도움말 페이지는 옵션을 잘 설명하지만 다양한 압축 수준과 관련된 알고리즘 또는 트레이드 오프를 선택하는 방법에 대해서는 자세히 설명하지 않습니다. 이것은 다음과 같은 질문으로 이어집니다.

  • 압축 사용의 장점은 공간을 크게 절약합니다. 단점은 무엇입니까? 이미지를 압축하면 정보가 손실됩니까?

  • 알고리즘과 압축 수준을 선택하는 방법은 무엇입니까? 일부 유형의 이미지는 특정 알고리즘에 적합합니까?

답변:


84

압축 방법을 선택하려면 다음과 같은 명령을 사용해야합니다.

gdal_translate -co "COMPRESS=method" src_dataset dst_dataset

압축을 사용할 때 가장 큰 단점은 이미지를 압축 해제하는 데 필요한 추가 처리 시간이며 압축 해제 후에도 여전히 동일한 양의 메모리를 사용합니다. 정보 손실에 대한 두 가지 기본 압축 유형이 있습니다 .

  • 무손실-원래 데이터 값을 유지
  • 손실-더 많은 공간을 절약하기 위해 데이터를 저하시킵니다

DEM 또는 래스터 기능과 같이 원본 데이터 값을 유지해야하는 경우에는 손실없는 알고리즘이 필요합니다. PACKBITS , DEFLATELZW 와 같은 알고리즘 은 손실이 없으며 압축 비율에 따라 주문할 수 있습니다.

  1. LZW-최고 압축률, 최고 처리 성능
  2. 꺾다
  3. PACKBITS-최저 압축률, 최저 처리 성능

데이터가 유사한 값을 많이 가지고 있다면 압축비는 여전히 데이터에 의존합니다. PACKBITS는 좋은 결과를냅니다.

무손실과는 달리 JPEG 와 같은 손실 알고리즘을 사용하면 정확한 값을 반환 할 필요가없는 래스터를 압축 할 수 있습니다. 예를 들어, 손실 사진 알고리즘을 사용하여 정사 사진 또는 위성 이미지를 압축 할 수 있습니다.


5
좋은 답변 +1. PACKBITS는 런-길이 인코딩 ( en.wikipedia.org/wiki/Run-length_encoding ) 의 형태로 , 인접한 동일한 값이 많은 데이터 (예 : NULL 또는 분류 된 래스터가 많은 경우)에 적합합니다. LZW는 더 많은 종류의 데이터에 효과적인보다 강력한 알고리즘입니다. 일반적으로 언급 된 것처럼 공간과 속도 사이의 균형은 적절하므로 사용 및 데이터에 따라 다릅니다. 또한 일부 소프트웨어는 특정 종류의 GeoTiff 압축을 지원하지 않습니다.
scw

3
이것은 좋은 관련 게시물 linfiniti.com/2011/05/…
oeon

1
좋은 대답은 옵션을 잘 요약 한 것입니다. 각 압축 방법에는 설정할 수있는 매개 변수가 있으며 결과에 상당한 영향을 미칩니다. @ j03lar50n, 내 블로그 기사가 유용하다는 것을 알게되어 기쁘다.
R Thiede

아름다운 답변! 너무 간단하고 정확하게 요점.
sys49152

@scw 특정 유형의 압축을 지원하지 않는 소프트웨어에 대해 더 구체적으로 말할 수 있습니까? 특히 lzw 또는 packbit를 지원하지 않는 소프트웨어가 있습니까? 아니면 일반적으로 덜 일반적인 알고리즘을 언급하고 있습니까?
David LeBauer

28

with lzwdeflatecompression using -co predictor=2은 절대 값 대신 픽셀 간 차이를 압축하므로 이미지가 매끄럽게 변하는 이미지를 만드는 데 도움이 될 수 있습니다. 이러한 값은 작고 더 많은 패턴 ( ref )을 갖습니다 . 예측자는 압축 lzwdeflate압축 에만 유용하며이 옵션은 다른 방법에는 영향을 미치지 않습니다.

gdal_translate -co compress=lzw -co predictor=2 ...

예측 변수 절감 효과가 극적으로 클 수 있습니다. 방금 기본 LZW 설정으로 최대 17GB를 사용하고 예측 변수 = 2 인 경우 5GB로 16 비트 지오메트리 표고 모델 디렉토리를 다시 압축했습니다.

예측 변수 2와 3 사이의 차이점과 각각 가장 잘 적용되는 시점 ( ref1 , ref2 ) 에 대한 정보가 상충됩니다 . 아마도 다른 질문에 대한 연료가 될 것입니다.

저축을위한 또 다른 쉬운 옵션은 -co tiled=yes입니다. 바둑판 식 이미지를 읽을 수없는 일부 소프트웨어가 있지만, 점점 희귀 해지고 대부분 GIS 외부에 있습니다 (현재는 GIS 소프트웨어를 읽지 않는 주류 GIS 소프트웨어에 대해서는 잘 모릅니다).

압축 개요 사용에 대한 @alfonx의 답변을 바탕으로 : 데이터 무결성을 위해 기본 이미지를 무손실로 저장하고 속도와 공간을 절약하기 위해 피라미드를 손실 할 수 있습니다. 거의 두 세계에서 가장 좋습니다. gdaladdoRGB 이미지에서 가능한 가장 작은 개요 : 기본 가장 가까운 이웃 대신 jpeg 압축, 평균 또는 가우스 리샘플링을 사용하고 (개요를 매끄럽게 만듭니다) YCBCR 광도 개요를 사용하십시오. 이러한 옵션에 대한 자세한 내용은 gdaladdo 참조 페이지참조하십시오 (광도계가 무엇인지에 대해 많이 말하지는 않지만).

이것은 디렉토리의 모든 tiff에 외부 jpeg 개요를 적용하는 데 사용하는 Windows 배치 파일의 일부입니다.

set _opts= -r gauss --config PHOTOMETRIC_OVERVIEW YCBCR ^
--config COMPRESS_OVERVIEW JPEG --config JPEG_QUALITY_OVERVIEW 85

for %%a in (*.tif) do gdaladdo -ro %_opts% %%a 2 4 8 16 32 64

노트

GDAL 1.6.0에는 gauss리샘플링이 도입 average되어 대비가 높거나 노이즈가 많은 패턴의 날카로운 모서리에서 더 나은 결과를 얻을 수 있습니다 . 3x3 리샘플링 가우스 커널이 선택되도록 2 레벨 (2 4 8 ...)의 거듭 제곱을 사용해야합니다.

JPEG_QUALITY_OVERVIEW 85 -지정하지 않으면 기본값 75 %가 사용되어 파일 크기가 작아 지지만 크기 대 품질 균형에있어 85 %가 더 좋습니다.

2015 년 업데이트 : GDAL 1.8 및 2.0에는 여기에서 다루지 않았으며 소화 할 시간이없는 많은 새로운 옵션이 도입되었습니다. 공식 gtiff 형식 페이지를 읽으십시오 . 추가 유용한 설정이 자세히 설명되어 있습니다.


10

큰 래스터의 경우 GeoTiff는 축소 된 개요를 GeoTiff 파일에 추가 이미지로 저장할 수 있습니다. gdaladdo (= GDAL ADD 개요)로 수행 할 수 있습니다. 이 개요를 만들 때 gdal에게 수동으로 압축하도록 지시 할 수도 있습니다.

gdaladdo --config COMPRESS_OVERVIEW JPEG 

너무 큰 크기를 추가하지 않고도 데이터를 빠르게 볼 수 있습니다. 참고 : Geoserver, uDig, AtlasStyler, Geopublisher 와 같은 Geotools 애플리케이션은 모두이 기능을 사용하고 개요에서 이익을 얻을 수 있습니다.



4

궁극적으로 다른 옵션을 실험하고 자신의 요구를 충족시키는 것을 확인해야 할 것입니다.

웨이블릿 기반 형식보다 JPEG 압축 GeoTIFF를 많이 사용하고 있습니다. 내 결과는 꽤 좋았습니다. 이를 위해 GDAL을 사용하면 너무 많은 데이터 손실없이 웨이블릿 기반 형식과 비슷한 압축 비율을 얻을 수 있습니다. 압축 해제와 함께 제공되는 성능 저하가 허용되었습니다.

이 접근 방식에서 가장 마음에 드는 점은 GeoTIFF 지원이 거의 보편적 인 반면 웨이블릿 기반 형식에 대한 지원이 항상 보장되는 것은 아니며 때로는 라이센스 문제가 심각하다는 것입니다.


3

GeoTIFF와 Earth Resource Mapping의 ECW ( Enhanced Compressed Wavelet ) 압축을 비교 한 경험 은 고해상도 항공 사진을 압축 할 때 ECW가 훨씬 더 우수하다는 것입니다. 웨이블릿 기반 압축의 또 다른 중요한 장점은 JPEG 2000이 아닌 JPEG 형식의 GeoTIFF와 같은 이전 형식과 달리 이미지의 일부만 압축 해제 할 수 있다는 것입니다. 1]. 특히 "컴퓨터 메모리 크기의 절반 이상"으로 작업 할 때이 이점의 중요성을 과소 평가해서는 안됩니다.

보인다 - 것을 - 나는 그것을 테스트하는 기회를 가진 적이 MrSID , 다른 propietary는, 웨이블릿 기반의 파일 형식은 또한 "나이"형식과 선택적 압축 해제보다 높은 압축 비율을 전시합니다.

심판. 1 : http://www.ifp.uni-stuttgart.de/publications/phowo01/Ueffing.pdf


1
dariapra는 GeoTIFF-Packbits 또는 GeoTIFF-LZW는 손실이없는 압축이고 ECW 및 JPEG는 손실이 있음을 기억하십시오. 무손실 또는 손실 압축은 향후 데이터 사용에 따라 신중하게 선택해야합니다.
markusN

1
느슨한 압축 형식이 항상 유효한 저장소 형식이라고 주장하지는 않습니다. 내가 의미하는 바는 ECW와 같은 형식을 사용하는 것이 일부 프로덕션 환경에 적합하다는 것입니다. 예를 들어 WMS를 통해 ortophoto 레이어를 제공하는 MapServer 인스턴스가있는 경우 ECW는 GeoTIFF보다 더 적합한 형식입니다. 무손실 압축을 사용하여 사진을 저장하는 것을 금지하는 것은 없습니다.
dariapra

3

@dodobas@ matt-wilkie 의 답변은 이미지 크기를 줄이기 위해 GDAL을 사용하여 압축 및 흐리게 처리하는 것과 관련된 모든 것을 다룹 니다.

두 가지를 추가하고 싶습니다.

  • GDAL의 파일 형식 설명서 : http://www.gdal.org/frmt_gtiff.html ;
    • 다음과 같은 생성 옵션 ( -co)을 참조하십시오 .
      • COMPRESS
      • NUM_THREADS
      • PREDICTOR
      • ZLEVEL
  • GeoTIFF를 사용할 소프트웨어가 다음과 같은지 확인해야합니다.
    • 원하는 압축 방법을 지원합니다.
    • 압축 사용을 권장합니다.

예를 들어 GeoServer는 GeoTIFF 압축을 권장 하지 않습니다 .

마지막으로 Geotiff는 다양한 종류의 압축을 지원하지만 사용하지 않는 것이 좋습니다. 훨씬 작은 파일을 허용하지만 압축 해제 프로세스는 비용이 많이 들고 각 데이터 액세스에 대해 수행되므로 렌더링 속도가 크게 느려집니다. 경험상 압축 해제 시간은 순수한 디스크 데이터 읽기보다 높습니다.

이미 개요, 타일링 및 고성능 스토리지 미디어 (기업 등급 디스크 또는 SSD)를 사용하는 경우 특히 그렇습니다.


gdalin Python으로 래스터를 배열로 변환 할 수 없으므로 jpeg 이미지를 압축해야합니다. 메모리 오류가 표시되고 때로는 메모리가 부족합니다. 누구나 파이썬 에서이 줄 (gdal_translate -co "COMPRESS = method"src_dataset dst_dataset)을 어떻게 구현할 수 있는지 알 수 있습니까? 나는 gdal을 처음 사용합니다. 그래서 때로는 구조를 이해하기가 어렵습니다.
Shiuli Pervin

1
@ShiuliPervin, 첫째, JPEG는 이미 압축 (손실) 형식입니다. 둘째, 압축이 아닌 청크 문제가있는 것처럼 들립니다. 타일, 스트립 또는 청크로 파일을 한꺼번에 읽지 말고 읽습니다. 파일이 압축 된 경우에도 파일을 사용할 때 압축을 풀어야합니다 (예 : 압축시 디스크에서 4GB 파일이 2GB를 사용하는 경우 처리를 위해 모두로드 될 때 4GB의 RAM을 차지함). 공간 절약 대안으로 GeoTIFF의 희소 형식을 살펴볼 수 있습니다.
Kevin

1
@ShiuliPervin, 그러나, 나는 당신의 질문을 오해하고있을 수 있습니다. 압축 자체는 종종 많은 메모리를 사용하지만 라이브러리에 버그가 없거나 잘못된 인수가 제공되지 않는 한 시스템을 오버플로해서는 안됩니다. GeoTIFF의 압축 유형으로 JPEG에 문제가있는 경우 LZMA 또는 DEFLATE를 사용해보십시오.
케빈

0

최신 GDAL 버전을 사용하는 경우 무손실 Z 표준 ( ZSTD ) 압축 (GDAL> = 2.3) 및 무손실 제한 오류 래스터 압축 ( LERC ) 압축 (GDAL> = 2.4) 옵션도 있습니다.

하지만 일반적으로 말해서, ZSTD빠른 데이터 양보다 읽기 속도를 제공 LZW하고 DEFLATE파일을 작성할 때이 다소 느려질 수 있지만 (당신이 사용하는 어떤 설정에 따라), 비슷한 압축 비율로.

데이터 정밀도에 대해 불만이없는 경우 (예 : 분석 대신 시각화 만 수행) LERC좋은 옵션이 될 수 있습니다. MAX_Z_ERROR희생하고자하는 정밀도를 조정할 수 있는 설정이 있습니다. 예를 들어 a MAX_Z_ERROR=0.001또는 1mm는 하나의 벤치 마크에서 50 %의 공간 절약을 제공했습니다 (참고 자료 참조 ).

가장 좋은 점은 ! LERCZSTD사용하여 결합 할 수도 있다는 것입니다 COMPRESS=LERC_ZSTD. 또는을 선호한다면 할 DEFLATE수 있습니다 COMPRESS=LERC_DEFLATE. 공식 GDAL GeoTIFF 문서 https://gdal.org/drivers/raster/gtiff.html#creation-options 에서 전체 조합 / 설정 목록을 참조하십시오.

자세한 내용과 전체 벤치 마크 비교는 다음과 같은 귀중한 참고 자료에서 확인할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.