투명한 언덕을 만드시겠습니까?


34

나는 조합을 통해 고급 투명 hillshades을 얻을 gdal하고 convert. 일반적으로 사용되는 회색 기반 언덕 차양과 비교할 때, 이러한 투명한 언덕 차양은 배경의 종류와 색상에 관계없이 3D 느낌을주기 위해지도 배경과 다른 상위 레이어 (도로, 부이 딩) 사이에 배치 할 수 있기 때문에 매우 시원합니다.

작동 원리

요령 :에 의해 생성 된 그레이 스케일 힐 셰이드부터 시작하여 gdal hillshade, 트릭은 그레이 채널의 값을 가져 와서 각 값을 반전 시키고이 결과를 새로운 불투명 채널로 흐르게하는 것입니다. 검은 색 픽셀 [0,0,0]은 [0,0,0,255] (불투명도 = 255)가되고, 회색 픽셀 [120,120,120]은 [120,120,120,135] (불투명도 = 135, 일명 255-120), 흰색 픽셀 [255,255,255]이 됨 투명하게 [255,255,255,0] (불투명도 = 0, 일명 255-255) 등이됩니다. 언덕의 그늘은 불투명하고 검은 색 이며 평원은 점차 흰색 (투명) 합니다. 개념적으로 픽셀의 밴드 방정식은 다음과 같습니다.

alpha_value([0])    = 255-0 = 255;   // black pixels get full opacity
alpha_value([Grey]) = 255-Grey;
// grey pixels get 255-GreyValue opacity.
alpha_value([255])  = 255-255 = 0  // white pixels get null opacity !

Photoshop 디자이너가 설명한이 방법에 대한 느긋한 비디오는 Photoshop 에서 음영 처리 추가 (16 분)를 참조하십시오 .

의문

ETOPO 또는 SRTM 파생 회색 기반 언덕 모양 ( gdaldem hillshade crop_xl.tmp.tif shadedrelief.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges, 여기에서 다운로드 가능한 파일 )을 입력으로 사용하는 중 ...

... 그러한 .tif 파일에서 gdal 또는 다른 비 GIS- 파괴적인 방법을 통해 위의 트릭을 인용하는 방법은 무엇입니까?

GIS 속성 (지리 화)을 유지하고 싶습니다.

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


1
참조 데이터가 tiff에 저장되는 방법에 따라 tiff와 ​​연관된 월드 파일의 이름을 바꾸는 것만 큼 쉬울 수 있습니다.
Steve

@Steve : SRTM 또는 ETOPO와 같은 래스터에서 생성 된 .tif 파일 용gdaldem hillshade etopo_crop.tif shadedrelief.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges
Hugolpz

나는 공식과 함께 -b band , -mask band , -expand gray | rgb | rgbagdal_tranlate 의 조합으로 갈 길이라고 생각 하지만 밴드를 만지지 않았으며 여전히 우둔합니다. opacity=-(px_grey_value)+255
Hugolpz


좌표, 셀 크기 및 참조 시스템을 다시 작성하기 위해 gdal_edit.py를 사용해 보셨습니까?
radouxju

답변:


42

간단히 말해서

"회색 (대역) + 불투명도 (대역) = 투명 결과" 와 같이 아래 3 개의 이미지 세트를 읽어야 합니다. 관련된 github 호스트 makefile을 통해 몇 분 안에 이러한 프로세스를 테스트 할 수 있습니다 . 프로세스 # 3 은 170 (강한 그림자 유지)과 220 (모든 그림자 유지) 사이의 임계 값을 사용하는 것이 좋습니다. 프로세스 3은 가장 강한 그림자를 제공하고 회색 미백 효과를 합니다. 필요에 따라 결과 레이어의 전체 불투명도를 조정합니다. 를 --calc="<equation>"사용하여 방정식 을 필요에 따라 향상시킬 수도 있습니다 gdal_calc.

Photoshop 디자이너가 설명한이 방법에 대한 느긋한 비디오는 Photoshop 에서 음영 처리 추가 (16 분)를 참조하십시오 .

배경

gdaldem hillshade가장 어두운 그림자에서 가장 밝은 픽셀에 이르기까지 픽셀 값 범위가 [1-255] 인 1 밴드 그레이 스케일 파일을 생성합니다. 평평한 영역의 경우 px = 221 (#DDDDDD). NoDataValue픽셀은 기본 nodatavalue를 얻습니다 0. 또한 입력 및 출력에서 ​​가장 어두운 검은 색은입니다 1. 불투명 밴드가 정의되지 않은 경우 불투명도는 100 % 입니다.

gdaldem hillshade input.tif hillshade.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges

hillshade.tmp.tif

우리는 두 번째 불투명 밴드를 정의하고 제어하고 싶습니다!

목표

우리는 하나의 그레이 스케일 밴드를 -b 1 원합니다. gdal 외부에서, px = [1-255]와 같은 연속 범위를 가진 회색 밴드입니다. 관련이없는 영역을 잘라내거나 (# 2) px = 1로 어둡게하고 불투명도 밴드 (# 3)에 의존 할 수 있습니다.

우리는 하나의 불투명 밴드 -b 2 , 일반적으로 언덕 그늘의 반전 또는 관련 기능을 원합니다. 관련이없는 영역을 잘라낼 수 있습니다 (# 2). 우아함이없는 반면 px = [1-255]와 같은 연속적인 범위의 불투명도 여야합니다.

gdal_calc입력 파일 A, B, C ...의 픽셀에 대해 수학 연산을 수행하고 부울 값 (예 : A<2201 (true) 또는 0 (false))을 확인하는 데 사용할 수 있습니다. 조건부 미적분을 허용합니다. 조건이 거짓이면 방정식의 관련 부분이 무효화됩니다.

1. 투명한 회색 언덕

다음은 표준 gdal hillshade회색과 흰색 영역이 점점 투명 해지 면서 매우 우수한 2 대역 결과를 제공합니다 .

# hillshade px=A, opacity is its invert: px=255-A
gdal_calc.py -A ./hillshade.tmp.tif  --outfile=./opacity.tif --calc="255-A"
# assigns to relevant bands -b 1 and -b 2
gdalbuildvrt -separate ./final.vrt ./hillshade.tmp.tif ./opacity.tif

hillshade.tmp.tif # 1, 불투명도 .tif # 1, final.tif

2. 의사 작물을 통한 최적화 (-b 1 & -b 2)

-b 1불투명도 -b 2를 추가 하면 2/3의 픽셀 (회색조)이 맨 눈에 보이지 않게 되지만이 픽셀은 다양한 흰색 -b 1과 낮은 불투명도 -b 2값을 유지 합니다. 모든 흰색 투명 [255,1]픽셀 로 만들 수 있으므로 압축률이 향상됩니다.

# filter the color band, keep greyness of relevant shadows below limit
gdal_calc.py -A ./hillshade.tmp.tif  --outfile=./color_crop.tmp.tif \
    --calc="255*(A>220) +      A*(A<=220)"
# filter the opacity band, keep opacity of relevant shadows below limit
gdal_calc.py -A ./hillshade.tmp.tif  --outfile=./opacity_crop.tmp.tif \
    --calc="  1*(A>220) +(256-A)*(A<=220)"
# gdalbuildvrt -separate ./final.vrt ./color_crop.tmp.tif ./opacity_crop.tmp.tif
# gdal_translate -co COMPRESS=LZW -co ALPHA=YES ./final.vrt ./final_crop.tif

# 2, color.tif (자른) # 2, opacity.tif (자른) # 2, final_crop.tif

3. 추가 -b 1 최적화 (자르기 + 검게)

우리는 -b 2신뢰할 수있는 불투명도 대역 을 가지고 있기 때문에 -b 1픽셀을 흰색 px = 255 via 255*(A>220)또는 검은 색 px = 1 via로 만들 수 1*(A>220)있습니다.

gdal_calc.py -A ./hillshade.tmp.tif  --outfile=./color.tmp.tif \
   --calc="255*(A>220) + 1*(A<=220)"
# gdal_calc.py -A ./hillshade.tmp.tif  --outfile=./opacity_crop.tmp.tif \
#  --calc="  1*(A>220) +(256-A)*(A<=220)".
# gdalbuildvrt -separate ./final.vrt ./color.tmp.tif ./opacity_crop.tif
# gdal_translate -co COMPRESS=LZW -co ALPHA=YES ./final.vrt ./final.tif

# 3, color.tif # 2, opacity.tif (자른) # 3, final.tif

이 결과는 더 강한 그림자를 보여줍니다 .

결과

투명한 언덕 모양을 만들어 평야의 이전 회색 영역과 관련 원치 않는 유비쿼터스 그레이 잉 페이딩 효과를 제거 할 수 있습니다. 원하는 부산물은 최종 비주얼 제품에 대한 제어력이 향상됩니다. 설명 된 프로세스는 대부분의 회색 및 모든 흰색 픽셀을 제거합니다. 컬러 풀 한 배경의 일반 이미지는 투명-검정색 언덕 음영으로 오버레이 될 때 선택한 색상을 유지하며 그림자가있는 영역 어둡게됩니다. 아래의 프로세스 # 2 (왼쪽)와 # 3 (오른쪽)의 비교.

개요 :

프로세스 # 2 (왼쪽)와 # 3 (오른쪽), 일반보기 비교

확대 / 축소, 그림자 (전후)를 확인하십시오.

프로세스 # 2 (왼쪽)와 # 3 (오른쪽)의 비교, 세부 사항보기.

추가 최적화

흰색 영역 : 3D 느낌을 높이기 위해 가장 밝은 영역을 유지하고자 할 수도 있습니다. 문자 그대로 임계 값이 약간 변경되고 gdal_calc를 통해 두 출력이 병합되는이 현재 접근 방식의 대칭입니다. 일반은 100 % 투명하고 가장 어두운 그림자와 가장 밝은 영역은 불투명합니다.

스무딩 : 더 나은 최종 결과를 얻기 위해 입력 힐 셰이드가 미리 스무딩 될 수 있습니다. GRASS를 사용하여 DEM 스무딩을 참조하십시오 .

합성 산양 ( 합성 산양 을 만드는 방법? ).

울퉁불퉁 한 언덕 도 흥미 롭습니다 ( 설명 )

노트

  • 평면 영역 임계 값gdal hillshade출력은 평탄 영역을 표시, PX = 221 (#DDDDDD = 221,221,221])이다. 또한, 언덕 음영의 px = 221은 이미지를 그림자 내 경사 (A <221)와 빛 내 경사 (A> 221) 픽셀로 나눕니다.
  • px = [170-220] 의 처리 임계 값이 양호하다는 것이 눈으로 알아볼 수있는 그림자의 거의 100 %를 유지하며, 이는 거의 릴리프 영역의 15-35 %를 나타냅니다.
  • 파일 크기> 압축 : # 1, # 2, # 3 중 final.tif는 압축이없는 경우 ~ 1.3MB이고 압축 후 ~ 0.3-0.16MB이며 80 % 절약됩니다!
  • 파일 크기> 자르기 : # 1의 .326KB에서 자르기 색상 및 불투명도 (# 2)는 310kb, 검은 색 (# 3)은 160kb입니다. 파일 크기에 대한 자르기 효과는 px = 220에서 임계 값으로 5 ~ 50 % 감소한 값입니다.

2
+1 환영합니다.
Hugolpz

2
튜토리얼이 완료되었습니다. 내 영어가 깨져서 자유롭게 향상시킬 수 있습니다.
Hugolpz

3
당신이 스스로 대답해야했지만이 글은 언덕 음영에 관한 많은 질문을 다루는 훌륭한 튜토리얼입니다. 잘 했어!
Kersten

당신의 튜토리얼은 작동합니다. 훌륭한 일. 내 질문에 대답 해 주 시겠습니까? => 여기 ? 알파 밴드가있는 이러한 종류의 GeoTIFF, 회색조에 대해 .ovr을 생성 할 수 있습니까?
모래 가시

1
@sandthorn 님, 안녕하세요. 저는이 분야에 더 이상 사랑하지 않습니다. 답을 찾는 데 드는 비용은 2018 년보다 2018 년보다 더 높을 것입니다. 내 물건이 귀하의 문제에 올바른 방향을 가리 키기를 바랍니다!
Hugolpz

7

다른 레이어와 결합하기에 더 적합한 회색이 아닌 캔버스의 동일한 결과를 얻는 또 다른 방법은 gdaldem의 'combined'옵션입니다.

경사와 언덕 그늘을 수행하고 두 작업을 한 번에 결합합니다. 기울기가 0 인 영역은 흰색입니다. 경사도가 90 도인 경사면은 검은 색이며, 언덕 그늘 층에 의해 일부 조명이 추가됩니다.

gdaldem hillshade -combined -compute_edges infile outfile.tif

그런 다음 다중 레이어 합성 모드를 사용하여이를 다른 레이어보다 '드레이핑'하십시오.

표준 / 결합 언덕 음영

표준 힐 셰이딩

OSM 기본 레이어와 곱한 음영 처리 (불투명도 약 50 %) OSM 기본 레이어와 곱한 결합 된 음영


2

gdal+ convert기반 워크 플로우

좋은 시각적 결과를 제공 하는 gdal+ convert솔루션이 있습니다. 이 솔루션의 문제점은 사용자가 복원해야하는 convert지리 정보파괴 한다는 것 입니다. 실행할 조치 수가 증가합니다.

# Basic crop
gdal_translate -projwin 67 35.92 99 5 ../data/noaa/ETOPO1_Ice_g_geotiff.tif crop_xl.tmp.tif
# Grey-based hillshade
gdaldem hillshade crop_xl.tmp.tif shadedrelief.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges
# create a transparent hillshade:
convert shadedrelief.tmp.tif -fuzz 7% -fill "#FFFFFF" -opaque "#DDDDDD"  whited.jpg # makes all grey values white to lighten the filesize
convert whited.jpg -alpha copy -channel alpha -negate +channel trans.png # <=== TRICK HERE.
# Restore georeferencing & reproject            
gdal_translate -a_ullr 67 35.92 99 5 trans.png trans.tmp.gis.tif
gdalwarp -s_srs EPSG:4326 -t_srs ESPG:3857 ./trans.tmp.gis.tif ./trans_reproj.tmp.gis.tif
# Compress from 11MB to 2MB:
gdal_translate -co COMPRESS=LZW -co ALPHA=YES ./trans_reproj.tmp.gis.tif ./trans.gis.tif

명령 4에 대한 설명은 https://stackoverflow.com/a/23018544/1974961을 참조하십시오.

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