gdal로 이미지를 모자이크 처리 할 때 페이딩 알파 레이어를 유지할 수 있습니까?


12

나는 gdal로 일부 이미지를 모자이크 처리하고 모자이크 중간의 날카로운 가장자리를 제거하기 위해 각 이미지의 가장자리쪽으로 페이딩 / 점진적 알파 레이어를 사용하여 최종 결과를 개선하고 싶습니다. 내가 겪고있는 문제는 점진적 알파 레이어가있는 각 개별 이미지의 일부가 아래 표시된 것처럼 반투명하지 않고 최종 모자이크에서 이미지 아래에 이미지를 숨기고 있다는 것입니다.

점진적 알파 레이어 마스킹 이미지가있는 모자이크

이상적 으로이 점진적 투명성을 사용하여 하나의 이미지가 다음 이미지로 페이드 인되도록하고 싶습니다.

모자이크를 생성하기 위해 수행하는 단계는 다음과 같습니다.

원래 이미지에 gcp를 추가하여 위치를 파악하고 방향을 바꿉니다 (각 이미지에 차례로 수행).

gdal_translate -of GTiff -a_srs EPSG:4326 -a_srs EPSG:4326 -gcp 1616 0 -88.2728612066 40.5175787437 -gcp <etc., etc.> <original_image_with_gradual_alpha>.tif <image_with_gradual_alpha_and_gcps>.tif

이미지가 올바른 방향으로 지정된 새 지오메트리로 뒤 틀립니다 (각 이미지에 차례로 수행됨).

gdalwarp -s_srs EPSG:4326 -t_srs EPSG:4326 -dstnodata 0 <image_with_gradual_alpha_and_gcps>.tif <warped_geotiff_with_alpha>.tif

뒤틀린 이미지를 모두 하나의 모자이크로 결합하십시오.

gdalbuildvrt -srcnodata 0 mosaic.vrt <warped_geotiff_with_alpha_root>*.tif
gdal_translate mosaic.vrt mosaic.tif

내가 연결 한 이미지는 mosaic.tif입니다.

샘플 입력 파일에 대한 gdalinfo :

Driver: GTiff/GeoTIFF
Files: dsc00562.tif
Size is 1616, 1080
Coordinate System is `'
Metadata:
  TIFFTAG_RESOLUTIONUNIT=2 (pixels/inch)
  TIFFTAG_XRESOLUTION=350
  TIFFTAG_YRESOLUTION=350
Image Structure Metadata:
  INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left  (    0.0,    0.0)
Lower Left  (    0.0, 1080.0)
Upper Right ( 1616.0,    0.0)
Lower Right ( 1616.0, 1080.0)
Center      (  808.0,  540.0)
Band 1 Block=1616x1 Type=Byte, ColorInterp=Red
  Mask Flags: PER_DATASET ALPHA 
Band 2 Block=1616x1 Type=Byte, ColorInterp=Green
  Mask Flags: PER_DATASET ALPHA 
Band 3 Block=1616x1 Type=Byte, ColorInterp=Blue
  Mask Flags: PER_DATASET ALPHA 
Band 4 Block=1616x1 Type=Byte, ColorInterp=Alpha

점진적 알파 레이어가있는 뒤틀린 지오텍에 대한 gdalinfo :

Driver: GTiff/GeoTIFF
Files: geo_dsc00603.tif
Size is 1944, 1356
Coordinate System is:
GEOGCS["WGS 84",
    DATUM["WGS_1984",
        SPHEROID["WGS 84",6378137,298.257223563,
            AUTHORITY["EPSG","7030"]],
        AUTHORITY["EPSG","6326"]],
    PRIMEM["Greenwich",0],
    UNIT["degree",0.0174532925199433],
    AUTHORITY["EPSG","4326"]]
Origin = (-88.275727919349990,40.518829195724997)
Pixel Size = (0.000001599004942,-0.000001599004942)
Metadata:
  AREA_OR_POINT=Area
  TIFFTAG_RESOLUTIONUNIT=2 (pixels/inch)
  TIFFTAG_XRESOLUTION=350
  TIFFTAG_YRESOLUTION=350
Image Structure Metadata:
  INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left  ( -88.2757279,  40.5188292) ( 88d16'32.62"W, 40d31' 7.79"N)
Lower Left  ( -88.2757279,  40.5166609) ( 88d16'32.62"W, 40d30'59.98"N)
Upper Right ( -88.2726195,  40.5188292) ( 88d16'21.43"W, 40d31' 7.79"N)
Lower Right ( -88.2726195,  40.5166609) ( 88d16'21.43"W, 40d30'59.98"N)
Center      ( -88.2741737,  40.5177451) ( 88d16'27.03"W, 40d31' 3.88"N)
Band 1 Block=1944x1 Type=Byte, ColorInterp=Red
  NoData Value=0
Band 2 Block=1944x1 Type=Byte, ColorInterp=Green
  NoData Value=0
Band 3 Block=1944x1 Type=Byte, ColorInterp=Blue
  NoData Value=0
Band 4 Block=1944x1 Type=Byte, ColorInterp=Alpha
  NoData Value=0

최종 모자이크를위한 gdalinfo :

Driver: GTiff/GeoTIFF
Files: mosaic.tif
Size is 5702, 6846
Coordinate System is:
GEOGCS["WGS 84",
    DATUM["WGS_1984",
        SPHEROID["WGS 84",6378137,298.257223563,
            AUTHORITY["EPSG","7030"]],
        AUTHORITY["EPSG","6326"]],
    PRIMEM["Greenwich",0],
    UNIT["degree",0.0174532925199433],
    AUTHORITY["EPSG","4326"]]
Origin = (-88.278946072799997,40.524561377550008)
Pixel Size = (0.000001509761581,-0.000001509761581)
Metadata:
  AREA_OR_POINT=Area
Image Structure Metadata:
  INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left  ( -88.2789461,  40.5245614) ( 88d16'44.21"W, 40d31'28.42"N)
Lower Left  ( -88.2789461,  40.5142255) ( 88d16'44.21"W, 40d30'51.21"N)
Upper Right ( -88.2703374,  40.5245614) ( 88d16'13.21"W, 40d31'28.42"N)
Lower Right ( -88.2703374,  40.5142255) ( 88d16'13.21"W, 40d30'51.21"N)
Center      ( -88.2746417,  40.5193935) ( 88d16'28.71"W, 40d31' 9.82"N)
Band 1 Block=5702x1 Type=Byte, ColorInterp=Red
  NoData Value=0
Band 2 Block=5702x1 Type=Byte, ColorInterp=Green
  NoData Value=0
Band 3 Block=5702x1 Type=Byte, ColorInterp=Blue
  NoData Value=0
Band 4 Block=5702x1 Type=Byte, ColorInterp=Alpha
  NoData Value=0

프로세스의 각 단계 후에 샘플 이미지를 포함 시켰으며 여기에 드롭 박스 링크에 최종 모자이크가 포함되어 있습니다. 필요한 경우 전체 이미지 세트를 제공 할 수 있습니다.


2
gdal_warp에 알파 채널 관련 알려진 버그가 있습니다. 개별적으로 각 래스터의 알파 밴드를 휘게 시도하고 (참조 나중에 재결합 gis.stackexchange.com/questions/49706/...를 )
마이클 스팀슨

빠른 답변 감사합니다! gdalwarp을 수행하기 전에 RGB 레이어에서 알파 레이어를 분리 한 다음 다시 결합한다는 의미입니까?
jeremyeastwood 2016 년

그게 다야. gdal_warp에는 알파 변형 문제가 있으므로 RGBA가 아닌 RGB로 처리하십시오. gTI_translate -of GTIFF -b 1 -b 2 -b 3을 분리하려면 (RGBA에서 RGB 이미지를 만듭니다).
Michael Stimson 2016 년

좋아, 그럼 당신의 링크에 따라 VRT를 통해 다시 결합? gdalbuildvrt -separate를 사용하여 재조합 할 때 첫 번째 이미지에서 3 개의 밴드를 가져오고 두 번째 이미지에서 1 개의 밴드를 가져 오는 방법이 있습니까, 아니면 gdalbuildvrt 옵션을 사용하여 결합해야합니까?
jeremyeastwood

1
아니요, 어떤 명령 줄 도구도 알파 블렌딩을 할 수 있다고 생각하지 않습니다. QGIS (또는 ArcGis)에는 워프 후에이 기능을 수행 할 수있는 래스터 계산기가 있습니다. VRT에 넣는 것만 큼 쉽지는 않을 것입니다 ... VRT는 알파 블렌드가 아닌 기본 픽셀을 완전히 덮어 씁니다. 아마도 이는 개선 요청으로 개발자에게 제공 될 수있는 것입니다.
Michael Stimson 2016 년

답변:


1

워크 플로의 문제는 알파 레이어에 연결되지 않지만 vrt를 만들 때 마지막 이미지 만 사용됩니다.

gdalmerge doc

겹치는 영역에서는 마지막 이미지가 이전 이미지 위에 복사됩니다.

gdalbuildvrt 문서 :

파일간에 공간이 다소 중복되는 경우 소스 법적 사안 목록에 파일 순서가 표시됩니다. 마지막에 나열된 파일은 컨텐츠를 가져 오는 파일입니다. 우선 순위가 낮은 데이터 세트에서 데이터를 가져올 가능성이있는 데이터는 고려되지 않지만 현재 알파 채널은 알파 합성을 수행하기 위해 고려되지 않습니다 (따라서 알파가 0 인 소스는 다른 소스보다 우선 함) . 이후 버전에서 변경 될 수 있습니다.

실제로 투명 영역은 단순히 투명하며 그 아래에는 볼 것이 없습니다.

블렌딩을 사용하려면 gdalwarp를 사용해야합니다. 알파 밴드를 처리하고 주어진 거리를 픽셀 단위로 블렌딩합니다 (-cblend distance)

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