Raw Sentinel 2 jp2-RGB 지오텍


11

Sentinel 2 jp2 밴드 파일 ( B02, B03, B04 ) 을 병합 하고 RGB 색상을 수정 하는 방법을 찾고 있습니다. 모두 bash 또는 python 스크립트로 수행해야합니다. 내 예제를 위해 나는 이 이미지들을 다루고있다 . 이상적으로 솔루션은 튜토리얼에 가깝습니다 .

이 명령으로 밴드를 병합 할 수 있습니다

gdal_merge.py -separate -co PHOTOMETRIC=RGB -o merged.tif B04.jp2 B03.jp2 B02.jp2

그러나 어떤 이유로 든 imagemagic 명령으로 RGB 색상을 수정할 수 없습니다. 출력은 ~ 700MB의 검은 색 이미지입니다.

convert -channel B -gamma 1.05 -channel RGB -sigmoidal-contrast 20,20% -modulate 100,150 merged.tif merged-cc.tif

결국 나는 maptiff에 파일을 업로드하기 위해 geotiff 파일을 갖고 싶습니다. convert매개 변수 를 선택하는 방법에 대한 설명을 환영합니다.

위성 이미지의 어느 부분이 농지인지 추측 해야하는 응용 프로그램을 개발 중입니다. 장면 이미지는 더 작은 패치 (64x64)로 잘리고 CNN ( 자르기 또는 자르지 않음) 으로 분류됩니다 . 데이터 세트를 사용 하여 Inception-v3 모델을 교육합니다. 데이터 세트에는 10m 공간 해상도의 64x64 RGB 이미지가 포함되어 있습니다.


merged.tif에 대한 추가 정보

Band 1 Block=10980x1 Type=UInt16, ColorInterp=Red
  Metadata:
    STATISTICS_MAXIMUM=4818
    STATISTICS_MEAN=320.61101402206
    STATISTICS_MINIMUM=0
    STATISTICS_STDDEV=536.76609312554
Band 2 Block=10980x1 Type=UInt16, ColorInterp=Green
  Metadata:
    STATISTICS_MAXIMUM=4206
    STATISTICS_MEAN=350.98505344194
    STATISTICS_MINIMUM=0
    STATISTICS_STDDEV=534.43264268631
Band 3 Block=10980x1 Type=UInt16, ColorInterp=Blue
  Metadata:
    STATISTICS_MAXIMUM=3801
    STATISTICS_MEAN=364.44611471973
    STATISTICS_MINIMUM=0
    STATISTICS_STDDEV=544.55509661709

@ben의 솔루션 적용 전후에 merge.tif가 병합되었습니다. 전에 후


1
히스토그램에서 merged.tif와 min, average 및 max의 비트 심도는 얼마입니까? 다음으로 확인gdalinfo -hist merged.tif
user30184

@ user30184 요청한 정보를 질문에 추가했습니다
gkiko

나는 geotiff에 JP2로 변환 한 후 색상 보정을 적용하지만, 난 여전히 검은 이미지를 얻을 시도
gkiko

왜 기본적으로 동일한 TCI.jp2 이미지를 사용하지 -scale 0 4096 0 255않습니까?
pLumo

1
작물 / 비 작물에 대한, 어쩌면 당신이 사용할 수있는 esa-sen2agri.org/resources/software을 대신 처음부터 자신의 응용 프로그램 만들기
radouxju

답변:


8

문제의 두 부분이 있습니다. 첫 번째는 16 비트에서 8 비트로 변환하고 이전 답변에서 언급했듯이 gdal_translate의 -scale 옵션이 수행한다는 것입니다.

 -scale minOriginal maxOriginal minOutput maxOutput  

두 번째 문제는 대비 향상 문제입니다. 배율을 조정할 때 관심있는 픽셀에 대해 고 대비를 원합니다. 경고 : 배율을 조정할 때 일반적으로 일부 정보를 잃기 때문에 "마법"대비가 없습니다 . 데이터의 시각화를 향상시키기 위해 수행되며, 전문 소프트웨어는 새 파일을 작성하지 않고 즉시이를 수행합니다. 데이터를 추가로 처리하려면 "black"geotiff에 jp2와 동일한 정보가 포함되어 처리 할 수 ​​있습니다. 예를 들어 식생 지수를 계산하는 경우, 이것은 스케일링 된 값이 아닌 "원래"반사율 값으로 수행해야합니다. 즉, 시각적으로 향상된 8 비트 이미지를 만드는 단계가 있습니다.

@ben은 반사율을 0-1 (이 제품에 10000을 곱한 값)에서 0-255로 재조정하는 일반적인 방법을 제공했습니다. 이것은 안전하지만 (제외되지 않음) 구름과 일부 맨토 만 반사율이 매우 높기 때문에 육지 (맨토 제외)는 많이 보지 않고 물에는 아무것도 보이지 않습니다. 따라서 이미지에 일반적으로 적용되는 대비 향상은 전체 범위의 하위 집합 만 차지합니다. 안전한면에서는 일반적인 지구 표면 재료의 최대 반사율이 일반적으로 0.5 / 0.6 미만이라는 지식을 사용할 수 있습니다 ( 여기 참조) .일부 예). 물론 이것은 이미지가 대기압으로 보정되었다고 가정합니다 (L2A 이미지). 그러나 반사 범위는 스펙트럼 대역마다 다르며 관심 영역에서 항상 가장 밝은 지구 표면을 갖는 것은 아닙니다. 다음은 "안전한"방법의 모습입니다 (@RoVo가 제안한 4096과 같이 최대 반사율 0.4)

여기에 이미지 설명을 입력하십시오

반면, 대비는 각 대역에 맞게 최적화 될 수 있습니다. 이 범위를 수동으로 정의 할 수 있습니다 (예 : 물 색상에 관심이 있고 물의 최대 예상 반사율 값을 알고 있음) 또는 이미지 통계를 기반으로합니다. 일반적으로 사용되는 방법은 값의 약 95 %를 유지하고 나머지를 "삭제"(너무 어둡게-> 0 또는 너무 밝게-> 255)로 구성되며, 평균값 +/- 1.96 *에 따라 범위를 정의하는 것과 유사합니다. 표준 편차. 물론 이것은 정규 분포를 가정하기 때문에 근사치에 불과하지만 실제로는 구름이 너무 많거나 통계가 일부 NoData 값을 사용하는 경우를 제외하고는 상당히 잘 작동합니다.

첫 번째 밴드를 예로 들어 보겠습니다.

평균 = 320

표준 = 536

95 % 신뢰 구간 = [-731 : 1372]

물론 반사율은 항상 0보다 크므로 최소값을 0으로 설정해야합니다.

gdal_translate -scale 0 1372 0 255 -ot Byte  B01.jp2 B01-scaled.tif  

그리고 최신 버전의 gdal이있는 경우 -scale_ {band #} (0 255가 기본 출력이므로 반복하지 않음)을 사용하여 단일 밴드를 분할 할 필요가 없습니다. 또한 tif 대신 vrt를 중간 파일로 사용했습니다 (전체 이미지를 작성할 필요가 없습니다 : 가상 이미지로 충분합니다)

gdalbuildvrt -separate stack.vrt B04.jp2 B03.jp2 B02.jp2
gdal_translate -scale_1 0 1372 -scale_2 0 1397 -scale_3 0 1430 -ot Byte  stack.vrt im_rescaled.tif

통계는 구름 및 NoData와 같은 "아티팩트"의 영향을 많이받습니다. 한편으로 극단 값을 가지면 분산이 과대 평가됩니다. 반면에, "제로"값이 많으면 (예와 같이 자동으로 대조되는 이미지를 너무 밝게 할 때) 평균이 과소 평가되고 구름이 많으면 과대 평가됩니다. 이미지가 너무 어둡습니다). 따라서이 단계에서는 결과가 가장 좋을 수 없습니다.

여기에 이미지 설명을 입력하십시오

자동화 솔루션은 "NODATA"로 설정 배경 및 클라우드 값으로하고합니다 (NODATA없이 통계를 계산 볼 것 이 게시물 NODATA없이 통계를 계산에 대한 자세한 내용은, 그리고 이 하나 NODATA 4000보다 큰 설정 값에 대한 예를 들어뿐만 아니라 ). 단일 이미지의 경우 일반적으로 가장 큰 클라우드 프리 하위 집합에 대한 통계를 계산합니다. "NoData"(이미지 왼쪽 상단)가없는 하위 집합의 통계를 사용하면 최종 결과가 나타납니다. 범위가 "안전한"범위의 약 절반임을 알 수 있습니다. 즉, 대비가 두 배나 높습니다.

gdal_translate -scale_1 38 2225 -scale_2 553 1858 -scale_3 714 1745 -ot Byte  stack.vrt im_rescaled.tif

여기에 이미지 설명을 입력하십시오

마지막으로 gdal_constrast_stretch 는 좋아 보이지만 테스트하지 않았습니다.


이것에 대한 문제는 모든 과립이 다른 밝기를 가질 것이라는 점입니다. 그가 달성하고자하는 것에 따라 고정 규모를 사용하는 것이 좋습니다. -scale 0 4096 0 255구름 텍스쳐가 필요하지 않으면 꽤 좋은 결과물을 만들어냅니다 ...
pLumo

@RoVo 나는 이것이 거친 값을 산출하고 모래와 같은 밝은 표면에서 대비를 잃을 수 있음에 동의하지만 OP에 의해 병합 된 이미지 의 통계를 기반으로합니다 . 과립에 대한 대비가 다릅니다. 일반적으로 빨강, 녹색 및 파랑의 범위는 NIR의 범위보다 훨씬 작기 때문에 각 대역마다 다른 대비를 사용하는 것이 좋습니다.
radouxju

7

TCI.jp2파일에 포함 된 파일을 간단히 사용할 수 있습니다 SAFE.zip. 이 파일은 2016 년 10 월 이전의 S2 파일에서 사용할 수 없습니다.

또는 GDAL을 사용하여 밴드를 변환 할 수 있습니다.

# Merge bands
gdalbuildvrt -separate TCI.vrt B04.jp2 B03.jp2 B02.jp2

# Convert to uncompressed GeoTiff
gdal_translate -ot Byte -co TILED=YES -scale 0 4096 0 255 TCI.vrt TCI.tif

# _OR_ Convert to JPEG - compressed GeoTiff
gdal_translate -ot Byte -co TILED=YES -co COMPRESS=JPEG -co PHOTOMETRIC=YCBCR -scale 0 4096 0 255 TCI.vrt TCI.tif

-scale 0 4096Sentinel-2 장면에 적합한 값이며 TCI.jp2 이미지에도 사용됩니다. 더 밝은 결과를 받으려면 4096을 낮추십시오.


5

질문에서 링크 한 솔루션으로 솔루션을 찾고 있다면 튜토리얼에서 다운로드 할 수있는 Landsat 8 처리 쉘 skript 을 따르고 조정해야합니다 .

특히, 여기에서 수행되는 것처럼 먼저 단일 밴드의 크기를 조정 (예 : 다음과 같이) 할 수 있습니다.

gdal_translate -ot Byte -scale 0 10000 0 255 B04.jp2 B04-scaled.tif 
gdal_translate -ot Byte -scale 0 10000 0 255 B03.jp2 B03-scaled.tif
gdal_translate -ot Byte -scale 0 10000 0 255 B02.jp2 B02-scaled.tif

이미지의 히스토그램은 이미지의 표면이 매우 어둡다는 것을 제안하지만 (이 경우입니까?) 일반적으로 센티넬 -2 이미지는 일반적으로 값이 0 사이 인 대기권 또는 표면 반사율입니다. 10000-이미지에 구름이있는 경우와 같이 더 높은 값을 사용할 수없는 경우

그런 다음 밴드를 병합하고 이미지 모양을 미세 조정할 수 있습니다.

gdal_merge.py -v -ot Byte -separate -of GTiff -co PHOTOMETRIC=RGB -o RGB-scaled.tif B04-scaled.tif B03-scaled.tif B02-scaled.tif
convert -channel B -gamma 1.05 -channel RGB -sigmoidal-contrast 20,40% -modulate 100,150 RGB-scaled.tif RGB-scaled-cc.tif

이것이 내 이미지에 발생하는 일입니다.

여기에 이미지 설명을 입력하십시오


1
내 질문을 업데이트했습니다. geoTIFF를 색상 보정 할 때 사용할 매개 변수를 어떻게 결정해야합니까?
gkiko

입력에서 출력 이미지로 값을 스케일링 할 때는 항상 입력 이미지에서 최대 값과 최소값을 확인하십시오. 예를 들어, 첫 번째 대역의 경우 스케일 매개 변수는 -scale 0 4818 0 255와 같아야합니다.
Milos Miletic
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.