GDAL(http://www.gdal.org/)에는 gdal과 관련된 많은 유틸리티 툴이 있다. 이 툴들은 다른 라이브러리들과 종속성이 있어 GDAL을 포함하고 있는 FWTools(http://fwtools.maptools.org/)를 설치하는 것을 권장한다. FWTools를 설치한 후 FWTools shell을 실행한다. 도스 커맨드 창이 열리게 되는데 여기에 http://gdal.org/gdal_utilities.html에 있는 유틸리티 이름과 유틸리티의 인자 값들을 넣어 실행시키면 된다. 기본 폴더는 FWTools가 설치된 경로이다.

내가 설치한 경로는 C:\Program Files\FWTools2.4.7 이고, 이 폴더 안에 데이터들을 넣고 실행하면 된다. 이 폴더 안에 데이터를 넣지 않고 실행할 경우 데이터 파일들에 대한 경로를 지정해야 한다. 파일명으로만 인자 값들을 전달하고 싶을 때는 FWTools shell을 실행한 후 데이터 파일로 찾아간 후("cd [디렉토리 명]"을 입력) 파일명만 입력하는 방법도 있다.

 

이번 글에서는 Tiff 이미지에서 특정한 색의 영역을 투명처리하고 싶을 때 어떻게 처리하는 가에 대한 방법을 설명하고자 한다. 사용될 GDAL의 유틸리티는 gdalwarp이다. 이 gdalwarp 유틸리에는 –srcnodata, -dstnodata, -dstalpha와 같은 옵션을 투명처리를 하기 위해 지원한다. 투명처리를 위해서는 –dstalpha 옵션을 통해 생성될 이미지에 알파채널을 생성하게 한다. 그냥 쓰고 싶으면 아래와 같은 최종 결과 command만 넣어주면 된다.

최종 결과 command

gdalwarp -dstalpha -srcnodata 0 -dstnodata 0 input.tif output_alpha.tif

gdalwarp의 인자 값 설명

-srcnodata value [value...]:

Input band들에 대한 nodata masking value설정(밴드 별로 각각 다른 값을 설정 있음. 예를 들어 -srcnodata "125 125 150"). 만약 1 이상의 값이 주어진다면 따옴표 안에 공백으로 분리하여 지정해 준다. 마스크 값들은 컬러 값을 보간 사용되지 않는다. None 이라는 값을 넣으면 원본 데이터 세트의 nodata 세팅 값을 무시하게 한다.

예제:

gdalwarp -srcnodata "125 125 150" -dstnodata "125 125 150" orig-ignore-grey.tif grey-nodata.tif

 

-dstnodata value [value...]:

output band 대한 nodata (밴드 별로 각각 다른 값을 설정 있음. 예를 들어 -dstnodata "125 125 150"). 만약 1 이상의 값이 주어진다면 따옴표 안에 공백으로 분리하여 지정해 준다. 새로운 파일은 설정된 값으로 초기화 것이고, 만약 가능하다면 출력 파일에 nodata 값이 기록될 것이다. New files will be initialized to this value and if possible the nodata value will be recorded in the output file.

-dstalpha:

nodata(unset/transparent) 픽셀을 구별 하기 위해 출력 파일에 alpha 밴드를 생성한다.

 

 

nodata 예제들

GDALWARP WITH TRANSPARENCY : http://schwehr.org/blog/archives/2008-02.html

gdalwarp -dstalpha -srcnodata 255 -dstnodata 0 -s_srs EPSG:32619 -t_srs EPSG:4326 input-32619.tif output-4326.tif

 

만약 geotiff 파일의 헤더에 nodata 태그가 설정되어 있다면, 우리가 아무런 작업을 필요 없이 gdalwarp 유틸리티는 자동으로  nodata 태그를 사용할 것이다. 하지만-srcnodata 인자 값은 nodata 태그 값을 덮어 쓰기 있다. 만약 우리가 여러 장의 영상과 영상 별로 다른 값들을 nodata  다루어야 한다면, 각각의 영상 별로 무시해야 nodata 값들을 정해주어 프로세싱하고, 각각의 파일마다 nodata flag 달아 주어야 한다. 만약 우리가 원래 값을 보존해야 한다고 하면 예제는 아래와 같다:

# for this image we want to ignore black (0)

gdalwarp -srcnodata 0 -dstnodata 0 orig-ignore-black.tif black-nodata.tif

 

# and now we want to ignore white (0)

gdalwarp -srcnodata 255 -dstnodata 255 orig-ignore-white.tif white-nodata.tif

 

# and finally ignore a particular blue-grey (RGB 125 125 150)

gdalwarp -srcnodata "125 125 150" -dstnodata "125 125 150" orig-ignore-grey.tif grey-nodata.tif

 

# now we can mosaic them all and not worry about nodata parameters

gdalwarp -dstnodata 0 black-nodata.tif grey-nodata.tif white-nodata.tif final-mosaic.tif

 

http://osgeo-org.1803224.n2.nabble.com/transparent-Geotiff-td2022648.html

위 링크에 질문한 사람은 하얀색 부분을 투명 처리 하고 싶다고 하였다.

gdalwarp -dstalpha -srcnodata 255 -dstnodata 0 de_poel.tif de_poel2.tif 

 

 

http://trac.osgeo.org/gdal/wiki/UserDocs/RasterProcTutorial

d) gdalwarp can also be cause to treat particular values as nodata and to 

   produce alpha values in the output.  In this example we cause oceans to

   be treated as transparent, and generate alpha in the output. 

 

   gdalwarp -wo SOURCE_EXTRA=125 -srcnodata "11 10 50" -dstalpha

             -t_srs '+proj=ortho +datum=WGS84' 

             geoworld.tif ortho.tif

 

   Hmm, it seems the water isn't quite as uniformly blue as I hoped.  It

   must have lived as a lossily compressed image at one point!

 

삽질

아래와 같이 실행한 결과 배경이 검정색으로 나타났다. 왜 그런지 정확히 모르겠지만 아마 –dstnodata를 지정하지 않아서 인 것 같다.

gdalwarp -srcnodata 0 -dstalpha input.tif output.tif

 

Reference

GDALWARP WITH TRANSPARENCY : http://schwehr.org/blog/archives/2008-02.html

OSGEO Q&A : http://osgeo-org.1803224.n2.nabble.com/transparent-Geotiff-td2022648.html

RasterProcTutorial : http://trac.osgeo.org/gdal/wiki/UserDocs/RasterProcTutorial

 

Posted by 강부자아들
,