재 샘플링 된 정사 사진 개요의 데이터 영역을 흰색으로 설정합니까?


9

데이터가 완전히 채워진 정사 사진 이미지 세트가 있지만 함께 배치하면 적용 범위가 사각형이 아니므로 데이터 영역이 없습니다.

MapGuide에서는 이러한 nodata 영역을 흰색으로 표시하여 사용자가 인쇄 할 때 검정 잉크를 낭비하지 않아도되도록해야합니다.

원래 전체 해상도 이미지를 직접 표시하는 대규모에서는 아무런 문제가 없습니다. 지도의 배경색을 흰색으로 설정하고 정사 사진이없는 영역에 배경이 표시됩니다.

성능을 위해이 모든 소스 이미지를 다시 샘플링 된 합성 개요 이미지로 병합하여 더 많은 정사 영상을 한 번에 볼 수있는 소규모로 표시 할 수 있어야합니다.

GDAL을 사용하여 개요를 병합하고 다시 샘플링하려고 시도했지만 기본적으로 nodata 영역에 검은 색으로 리샘플링 된 복합 GeoTIFF 타일을 만드는 것으로 보이며 MapGuide를 사용하면 색상 래스터에서 검은 색을 투명하게 설정할 수 없습니다.

내가 원하는 것을 효율적으로 얻을 수있는 방법이 있습니까?

나는 GDAL을 사용하여 얻은 대답을 제공했지만 오픈 소스 및 독점적 인 다른 이미지 처리 유틸리티 및 GIS 응용 프로그램을 사용하는 솔루션을보고 싶습니다.

답변:


15

이 문제를 해결하는 가장 쉬운 방법은 GDAL 가상 형식 을 사용하는 것 입니다. 이 형식을 사용하면 전체 이미지 세트를 단일 이미지 오브젝트로 취급하고 비교적 간단한 3 단계로 변환 할 수있었습니다.

가상 데이터 세트 생성

GDAL ( Tamas Szekeres의 GISInternals Windows 바이너리 및 최신 버전의 OSGeo4W 포함)에는 초기 가상 데이터 세트를 빌드하는 데 사용할 수있는 gdalbuildvrt 유틸리티가 포함되어 있습니다.

이를 사용하는 간단한 방법 중 하나는 모든 이미지를 텍스트 파일에 추가 한 다음 해당 텍스트 파일을 gdalbuildvrt의 입력으로 사용하는 것입니다. 다음은 예입니다 (두 번째 명령을 한 줄로 다시 입력해야 함).

dir /b *.tif > my_images.txt
gdalbuildvrt 
  -hidenodata 
  -vrtnodata "255 255 255" 
  -resolution highest 
  -input_file_list my_images.txt 
  my_image.vrt

그러면 모든 GDAL 작업에서 단일 이미지로 취급 할 수있는 XML 파일이 남게됩니다. 또한 내부적으로 nodata를 흰색으로 표시하지만 읽은 도구에서 nodata 정의를 숨 깁니다.

리샘플링 개요 생성

다음으로 개요 이미지의 리샘플링 및 출력을 수행합니다. gdal_translate 또는 gdalwarp 로이를 수행 할 수 있습니다 . 이들 중 하나에 대해 결과 크기는 width * height * 3(8 비트 밴드 수) 바이트입니다. 이 크기가 4GB보다 크면 BigTIFF를 출력으로 지정하는 구문에 대한 GeoTIFF 옵션 을 확인하려고합니다 (-co "BIGTIFF = YES").

gdal_translate의 경우, 편리한 gdalinfo 명령을 사용하여 가상 이미지의 크기를 결정해야합니다 . 이러한 치수를 사용하여 파일의 출력 너비와 높이를 픽셀 단위로 결정하기 위해 각각 일정한 비율로 나눕니다.

명령은 다음과 같습니다 (한 줄에).

gdal_translate
  -outsize 53120 14000
  -co "TILED=YES"
  -co "PROFILE=GEOTIFF"
  -co "BLOCKXSIZE=256"
  -co "BLOCKYSIZE=256"
  my_image.vrt
  my_image.tif

gdalwarp의 경우 결과 픽셀 화를 알아야합니다. 이 경우 0.5m를 사용하고 있습니다. 리샘플링 방법을 호출 할 수도 있습니다. 나는 정사 사진 개요에 입방 스플라인을 선호합니다. 더 부드럽지만 전체 해상도까지 사용하지 않을 것이며 내 경험상 JPEG 또는 ECW와 같은 것을 사용하는 경우 더 압축 가능한 이미지를 만듭니다.

gdalwarp 
  -r cubicspline 
  -of GTiff 
  -dstnodata "255 255 255" 
  -tr 0.5 0.5 
  -co "PROFILE=GEOTIFF" 
  -co "BIGTIFF=YES" 
  -co "TILED=YES" 
  -co "BLOCKXSIZE=256"
  -co "BLOCKYSIZE=256"
  my_image.vrt 
  my_image.tif

이러한 리샘플링 된 GeoTIFF 개요에 JPEG 압축 옵션을 사용할 수도 있습니다. ( Frank에 따르면 ) 약간의 성능 저하만으로 출력 파일을 상당히 축소합니다 .

  -co "COMPRESS=JPEG" 
  -co "JPEG_QUALITY=80" 
  -co "PHOTOMETRIC=YCBCR"

개요

또한 결과 이미지에 대해 편리한 gdaladdo 명령 을 실행하여 내부 "피라미드"를 작성하여 전체 이미지 크기보다 낮은 해상도에 대한 요청을 일부 데이터로 처리 할 수 ​​있습니다. 성능 향상은 대부분의 경우 디스크 공간보다 가치가 있습니다. 여기서 사용하는 레벨로 놀아보고 싶을 것입니다. 매우 큰 이미지의 경우 일부를 떨어 뜨릴 수 있습니다. gdaladdo 명령은 다음과 같습니다.

gdaladdo 
  -r average 
  my_image.tif 
  2 4 8 16 32 64 128 256

최적의 성능을 위해 이러한 수준을 실험 해 보는 것이 좋습니다. 응용 프로그램에 대해 다른 리샘플링 간격이 더 좋거나 이미지 크기에 따라 더 높은 숫자 중 일부를 떨어 뜨릴 수 있거나 더 많이 필요하다는 것을 알 수 있습니다

또한 -ro 옵션을 사용하여 외부 개요를 생성하는 경우 JPEG 압축 구성 라인 추가를 고려하십시오.

  --config COMPRESS_OVERVIEW JPEG 
  --config PHOTOMETRIC_OVERVIEW YCBCR 
  --config INTERLEAVE_OVERVIEW BAND 

(이것은 임베디드 개요를 위해 상위 GeoTIFF에서 상속되었다고 생각합니다)

노트

이 문제에 직면했을 때, 나는 freenode.irc.net의 #gdal 채널을 물었습니다. 이것은 놀라운 자료이며,이 문제를 해결 해준 Howard Butler, Frank Warmerdam 및 심지어 Rouault에게 철저한 빚을지고 있습니다.


시간을내어 완성 해 주셔서 감사합니다. 질문에 답변 한 특정 비트뿐만 아니라 전체 워크 플로를 처리 할 때가되었습니다.
매트 윌키

1
gdalsetnull.py 가 VRT에서 작동하는지 확인하면 "텍스트 편집기에서 VRT 파일을 편집하여 <NoDataValue /> 엔티티를 추가"하는 것은 불필요합니다.
매트 윌키

1
@ matt wilkie, 그것은이 사이트에 대한 약간의 작업 재 작성 및 형식화 였지만, 이전에 내 블로그에서 더 큰 워크 플로우의 일부로 이것을 다루었습니다 : jasonbirch.com/nodes/2009/08/11/290/fwtools- ftw-gdal 그 제안은 반드시 시도해 볼 가치가 있습니다!
JasonBirch

일반 Windows cmd 참고 : ^실행될 때 결합 될 줄 바꿈에는 캐럿 을 사용하십시오 (예 : ^가독성과 실행 가능성을 모두 유지하려면 위의 각 코드 줄 예제 끝에 추가 ). 중요주의 : 결코 당신이 원하는 않는 호출가 캐럿의 파일 또는 명령 행을 종료하지 모든 메모리 소비
매트 윌키

3

예, 그러나 시행 착오를 통해 -vrtnodata 255는 맵이 아닌 흰색의 모든 것을 노 데이터 로 표시하는 효과가 있음을 알 수있었습니다 .gdal2tiles 는 -a 플래그에 따라 알파 투명도로 처리합니다.

따라서 소스 이미지 중 일부는 투명하게 설정됩니다. 필자의 경우 점선 도로의 흰색 부분입니다. 이 터미널은 아니지만 vrt에 원래의 공백이 있거나 워프의 결과로 "src 이미지 없음"색상을 gdal2tiles에 지정할 수 있으면 좋을 것입니다. 내 세트의 경우 옅은 파란색의 그늘이 그저 일 것입니다.

더 많은 시행 착오 끝에 hidenodata가 핵심입니다. 이 도구가 왜 그렇게 문서화되어 있는지 잘 모르겠습니다. 여기 나를 위해 일하는 것이 있습니다, gdal 1.8.

gdalbuildvrt test.vrt -vrtnodata "209 231 245" -hidenodata BX*.tif BY*.tif
gdal2tiles -p raster -s nztm.prj test.vrt out

또한 gdal nearblack 유틸리티 gdal.org/programs/nearblack.html을 참조하십시오. 이미지 가장자리 주변의 픽셀 만 처리하고 중간은 무시합니다.
matt wilkie

0

GDAL에 익숙하지 않지만 특정 값의 픽셀을 다른 값으로 설정할 수있는 방법이나 명령을 사용할 수 있다고 생각합니다.

그것과는 관련이 없지만 일반 SQL에서는 (설명하기 위해-더 많은 의사 코드입니다) :

업데이트 래스터 SET 픽셀 = 255 어디에서 픽셀 = NoData;

답을 알고 싶습니다!


GDAL에는 의사 코드와 유사한 방식으로 처리 중에 색상을 다른 색상으로 바꾸는 몇 가지 방법과 압축 아티팩트가 포함 된 이미지 가장자리를 정리하고 원하는 경우 흰색으로 바꿀 수있는 nearblack이라는 독립형 유틸리티가 포함되어 있습니다. 이 중 어느 것도 내가 당시 작업하고 있던 데이터 양과 잘 맞지 않았습니다.
JasonBirch
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.