สร้างร่มเงาที่โปร่งใสหรือไม่


34

ฉันได้รับ hillshades โปร่งใสสง่างามผ่านการรวมกันและgdal convertเมื่อเปรียบเทียบกับเนินเขาที่เป็นสีเทาที่ใช้กันทั่วไปฮิลล์เชดจ์แบบใสนั้นยอดเยี่ยมมากเพราะสามารถวางไว้ระหว่างพื้นหลังแผนที่และเลเยอร์ด้านบนอื่น ๆ (ถนนการสร้าง) เพื่อให้ 3D รู้สึกถึงสิ่งที่ประเภทและสีของพื้นหลัง

มันทำงานอย่างไร

เคล็ดลับ:เริ่มจากเนินเขาระดับสีเทาที่สร้างขึ้นโดยgdal hillshadeเคล็ดลับคือการนำค่าของช่องสีเทากลับค่าแต่ละค่าและไหลผลลัพธ์นี้ไปสู่ช่องทางทึบใหม่ พิกเซลสีดำ [0,0,0] กลายเป็น [0,0,0,255] (ความทึบ = 255), พิกเซลสีเทา [120,120,120] ลดลงกลายเป็น [120,120,120,135] (ความทึบ = 135, aka 255-120), พิกเซลสีขาว [255,255,255] โปร่งใส [255,255,255,0] (opacity = 0, aka 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 ดูที่การเพิ่ม Shaded Relief ใน Photoshop (16 นาที)

คำถาม

สละ Etopo หรือ SRTM มาสีเทาตาม hillshade ( gdaldem hillshade crop_xl.tmp.tif shadedrelief.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges, ไฟล์สามารถดาวน์โหลดได้ที่นี่ ) เช่นการป้อนข้อมูล ...

... วิธีการทำเคล็ดลับที่อ้างถึงบนผ่าน gdal หรือวิธีอื่นที่ไม่ใช่ GIS-destructive ในไฟล์. tif เช่นนั้น?

โปรดทราบว่าฉันต้องการรักษาคุณสมบัติ GIS (การระบุตำแหน่งทางภูมิศาสตร์)

ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่


1
ทั้งนี้ขึ้นอยู่กับวิธีการจัดเก็บข้อมูลอ้างอิงใน TIFF อาจเป็นเรื่องง่ายเหมือนการเปลี่ยนชื่อไฟล์โลกที่เกี่ยวข้องกับ TIFF
Steve

@ Steve: สำหรับไฟล์. tif ที่สร้างจากแรสเตอร์เช่น SRTM หรือ ETOPO หลังจากgdaldem hillshade etopo_crop.tif shadedrelief.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges
Hugolpz

ฉันคิดว่าgdal_tranlateด้วยการรวมกันของวง -b , -mask band , - ขยายสีเทา | rgb | rgbaพร้อมกับสูตรopacity=-(px_grey_value)+255อาจเป็นวิธีที่จะไป แต่ฉันไม่เคยแตะต้องวงดนตรี
Hugolpz


คุณลอง gdal_edit.py เพื่อเขียนพิกัดขนาดเซลล์และระบบอ้างอิงใหม่อีกครั้งหรือไม่
radouxju

คำตอบ:


42

สรุป

ชุดของ 3 ภาพด้านล่างแต่ละคนควรจะอ่านเช่น"สีเทา (วงดนตรี) + ความทึบแสง (วงดนตรี) = ผลโปร่งใส" คุณสามารถทดสอบกระบวนการเหล่านี้ภายในไม่กี่นาทีผ่านที่เกี่ยวข้องGitHub เจ้าภาพ Makefile กระบวนการ# 3คือสิ่งที่ฉันแนะนำโดยมีขีด จำกัด ระหว่าง 170 (รักษาเงาที่แข็งแกร่ง) และ 220 (รักษาเงาทั้งหมด) กระบวนการ 3 ให้เงาที่แข็งแกร่งที่สุดและหลีกเลี่ยงเอฟเฟกต์สีเทา - ขาว ปรับความทึบแสงโดยรวมของชั้นผลลัพธ์ตามต้องการ สมการในอาจจะดีขึ้นตามความจำเป็นเช่นกันโดยใช้--calc="<equation>"gdal_calc

สำหรับวิดีโอที่วางไว้บนวิธีการนี้อธิบายโดยนักออกแบบ Photoshop ดูที่การเพิ่ม Shaded Relief ใน Photoshop (16 นาที)

พื้นหลัง

gdaldem hillshadeสร้างไฟล์สเกลสีเทาแบนด์หนึ่งช่วงค่าพิกเซล = [1-255], aka จากเงาที่มืดที่สุดไปจนถึงพิกเซลที่ให้ความกระจ่างมากที่สุด สำหรับพื้นที่ราบ 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) มันจะต้องเป็นช่วงที่ต่อเนื่องของ opacities เช่น px = [1-255] อื่น ๆ ซึ่งไม่มีความสง่างาม

gdal_calcสามารถใช้เพื่อทำคณิตศาสตร์กับพิกเซลจากไฟล์อินพุต A, B, C ... และตรวจสอบค่าบูลีนเช่นA<220ซึ่งจะส่งกลับ 1 (จริง) หรือ 0 (เท็จ) อนุญาตให้มีเงื่อนไขแคลคูลัส หากเงื่อนไขเป็นเท็จส่วนที่เกี่ยวข้องของสมการจะถูกลบล้าง

1. เนินเขาสีเทาโปร่งใส

ต่อไปนี้ให้ผลลัพธ์สองวงที่ดีมากด้วยgdal hillshadeสีเทามาตรฐานและพื้นที่สีขาวที่ทำให้โปร่งใสมากขึ้น:

# 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, opacity.tif # 1, Final.tif

2. การเพิ่มประสิทธิภาพผ่านทางหลอกพืช (-b 1 & -b 2)

2/3 ของพิกเซลบน-b 1(เฉดสีเทา) จะมองไม่เห็นด้วยตาเปล่าเมื่อ-b 2เพิ่มความทึบแต่พิกเซลเหล่านี้ยังคงความขาว-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พิกเซลทั้งพิกเซลสีขาว = 255 ผ่าน255*(A>220)หรือพิกเซลสีดำ = 1 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% เงาที่มืดที่สุดและความสว่างของพื้นที่สว่าง

การปรับให้เรียบ:อินพุตฮิลล์เชดอาจถูกทำให้ราบเรียบล่วงหน้าเพื่อให้ได้ผลลัพธ์ที่ดีขึ้นดูที่การปรับDEM โดยใช้ GRASS?

คอมโพสิตฮิลล์เชด ( วิธีสร้างฮิลล์คอมโพสิต? )

กระแทกบนเนินเขาที่น่าสนใจเช่นกัน ( คำอธิบาย )

หมายเหตุ

  • เกณฑ์พื้นที่ราบในgdal hillshadeการส่งออกเป็นพิกเซล = 221 (#DDDDDD = [221221221]), การทำเครื่องหมายพื้นที่ราบ นอกจากนี้ px = 221 ของ hillshade ยังแบ่งภาพระหว่างความลาดชันในเงา (A <221) และความลาดชันในแสง (A> 221) พิกเซล
  • เกณฑ์การประมวลผลที่ px = [170-220] เช่นการพิสูจน์ที่ดีจะช่วยให้ใกล้ 100% ของเงาตาที่เห็นได้ชัดซึ่งตัวเองแทบจะไม่ยืนสำหรับ 15-35% ของพื้นที่โล่งอก
  • ขนาดไฟล์> การบีบอัด: final.tif จาก # 1, # 2, # 3 คือ ~ 1.3MB โดยไม่มีการบีบอัดจากนั้น ~ 0.3-0.16MB หลังจากการบีบอัดประหยัด 80%!
  • ขนาดไฟล์> การครอบตัด:จาก. 326KB ใน # 1, ครอบตัดสี & ความทึบ (# 2) ไปที่ 310kb, กลายเป็นสีดำ (# 3) ถึง 160kb ผลการปลูกพืชบนขนาดไฟล์อยู่ระหว่างการลดลง 5 ~ 50% ด้วยขีด จำกัด ที่ px = 220 และอินพุตของฉัน

2
สนับสนุนการต้อนรับ +1
Hugolpz

2
การสอนเสร็จสิ้น ภาษาอังกฤษของฉันอาจจะเสียรู้สึกฟรีเพื่อปรับปรุง
Hugolpz

3
ในขณะที่คุณไม่ต้องตอบคำถามตัวเองนี้เป็นบทเรียนที่ยอดเยี่ยมเกี่ยวกับคำถามมากมายเกี่ยวกับการขึ้นเขา ทำได้ดี!
Kersten

บทช่วยสอนของคุณใช้งานได้ การทำงานที่ดี. คุณช่วยลองตอบคำถามของฉัน => ที่นี่ได้ไหม? เป็นไปได้หรือไม่ที่จะสร้าง. osr สำหรับ GeoTIFF ชนิดนี้ซึ่งเป็นแถบสีเทาที่มีแถบอัลฟา
sandthorn

1
สวัสดี @sandthorn แม้ว่าฉันจะรักมันฉันไม่ได้อยู่ในสาขานี้อีกต่อไป ค่าใช้จ่ายในการค้นหาคำตอบน่าจะสูงกว่าสำหรับฉัน -20178 สำหรับคุณ -2551 หวังว่าสิ่งของของฉันจะชี้ไปในทิศทางที่ถูกต้องสำหรับปัญหาของคุณ!
Hugolpz

7

อีกวิธีในการรับผลลัพธ์เดียวกันของผืนผ้าใบที่ไม่ใช่สีเทาเหมาะสำหรับการรวมกับเลเยอร์อื่นคือตัวเลือก 'รวม' ใน gdaldem

มันทำการลาดและเนินเขาและรวมสองในการดำเนินการ พื้นที่ 0 ความลาดชันเป็นสีขาว พื้นที่ที่มีความลาดเอียง 90 องศาเป็นสีดำสำหรับที่ร่มที่มีความลาดชันโดยมีการเพิ่มความสว่างด้วยชั้นของเนินเขา

gdaldem hillshade -combined -compute_edges infile outfile.tif

จากนั้นใช้โหมดการผสมเลเยอร์ทวีคูณเพื่อ 'ประดับ' สิ่งนี้เหนือเลเยอร์อื่น ๆ

แบบมาตรฐาน / รวม Hillshading

Hillshading มาตรฐาน

การแรเงาแบบรวมถูกคูณกับชั้นฐาน 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.