วิธีการสร้างคอมโพสิตฮิลล์


10

แนวคิดของคอมโพสิตฮิลล์เชดคือการรวมหลายฮิลส์เชดกับการวางแนวแสงแดดที่แตกต่างกันเพื่อหลีกเลี่ยงจุดบอด มันต้องรวมภาพฮิลส์ 3 ภาพด้วย315⁰ (แสงแดด NW, เลเยอร์เริ่มต้น), + 355⁰เลเยอร์, ​​+ 275⁰แสงตะวันตามลำดับ นี้รายละเอียดเพิ่มขึ้นและความสง่างามเต็มรูปแบบที่ไม่ใช่ GIS ดังแสดง below.A คำอธิบายอยู่ที่นี่

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

การใช้ไฟล์ srtm ใด ๆ ฮิลล์เชดเริ่มต้น 3 ตัวสามารถทำได้ผ่าน:

gdaldem hillshade input.tif hillshades_A.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges
gdaldem hillshade input.tif hillshades_B.tmp.tif -s 111120 -z 5 -az 355 -alt 60 -compute_edges
gdaldem hillshade input.tif hillshades_C.tmp.tif -s 111120 -z 5 -az 275 -alt 60 -compute_edges

คำตอบ:


9

กล่าวถึงแหล่งที่มาของการเชื่อมโยง"เปลี่ยนโหมดฟิวชั่นที่จะ <คูณ>"เพื่อให้การดำเนินงานที่จะทำไม่ได้เป็นค่าเฉลี่ยที่เรียบง่ายของการป้อนข้อมูล hillshades (นี้ยังเห็นวิธีการ gdal_hillshades เฉลี่ย? ) มันเป็นอย่างอื่น ยังมาสร้างเนินเขา 3 แบบที่แตกต่างกันกับแสงแดด:

gdaldem hillshade input.tif hillshades_A.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges
gdaldem hillshade input.tif hillshades_B.tmp.tif -s 111120 -z 5 -az 355 -alt 60 -compute_edges
gdaldem hillshade input.tif hillshades_C.tmp.tif -s 111120 -z 5 -az 275 -alt 60 -compute_edges

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

รักษาค่าต่ำสุดของ A, B, C

อัลกอริทึมแรกที่ฉันคิดเกี่ยวกับการกรองและรักษาพิกเซลที่มืดที่สุดหรือที่รู้จักว่าพิกเซลที่มีค่าต่ำกว่าระหว่างอินพุต A, B, CA บูลีนสามารถทำได้ดังนี้:

gdal_calc.py -A hillshades_A.tmp.tif  -B hillshades_B.tmp.tif -C hillshades_C.tmp.tif --outfile=./hillshades_xl.tmp.tif \
   --calc="(A*(A<=B)*(A<=C)+ B*(B<A)*(B<=C)+ C*(C<A)*(C<B))"

ตอนนี้พื้นที่ที่ถูกครอบงำด้วยเงาสร้างขึ้นมากกว่าด้านตรงข้ามของศูนย์กลางหนึ่งอันมันเพิ่มขึ้น40⁰ในแต่ละด้าน ไม่ใช่ลิงก์ที่ให้ไว้อัลกอริทึมปัจจุบันนี้ดูเหมือนว่าจะสูญเสียพื้นที่การรู้แจ้งมากเกินไป

Angle of 315±30⁰(ความแปรปรวนของมุมที่เล็กกว่า) แทนที่จะกระแส315±40⁰นั้นจะดีกว่า

แผนภาพด้านล่างเป็นพื้นฐานของสมการ มันแสดงแหล่งกำเนิดแสง A, B, C และ Boolean เปรียบเทียบค่าพิกเซล A, B, C ในแต่ละส่วน เส้นความเท่าเทียมกันจำเป็นต้องได้รับความสนใจเป็นพิเศษเพื่อรวมไว้ในบูลีน เส้นค่ามัธยฐานมีค่า221สำหรับแหล่งกำเนิดแสงที่ตั้งฉาก ลองคิดถึงพื้นที่ที่มีอิทธิพลแหล่งกำเนิดแสงที่ใกล้ที่สุดคืออิทธิพลหลักและอิทธิพลที่อ่อนแอที่สุด

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

รักษาค่าสุดขั้วสำหรับ A, B, C

อัลกอริธึมบูลีนอื่นอาจรักษาค่าที่สูงที่สุดได้ทั้งพิกเซลที่มืดและขาว แผนภาพต่อไปนี้ช่วยเกี่ยวกับสูตรบูลีน ที่หกของวงกลมแต่ละจะระบุค่าที่จะเก็บจาก A, B, C และบูลีนในการเลือกพื้นที่สามเหลี่ยมรวมกับวงเงินตามเข็มนาฬิกาเสมอภาคและเพียงแค่นั้น มันให้ (จากด้านบนและตามเข็มนาฬิกา):

--calc="A*(A>B)*(A>=C) + C*(C>A)*(A>=221) + B*(C>A)*(C>=221) + A*(A<B)*(B<=221) + C*(B>A)*(A<=221) + B*(B>A)*(C<=221)"

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

หากการแปรผันของมุมนั้นไม่สำคัญเกินไปก็อาจให้ผลลัพธ์ที่ดีได้

Booleans อื่น ๆ

คุณสามารถสร้างบูลีนที่ซับซ้อนมากขึ้นเพื่อให้ครอบคลุมทั้งวงกลมโดยใช้การรวมกันของส่วนขอบ สิ่งสำคัญคือต้องเก็บค่าหนึ่งค่าจาก A, B, C ไว้สำหรับหนึ่งส่วน

คูณ

ฉันทำพยายามหลาย failledเพื่อmultiplyค่าพิกเซลโดยไม่ต้องมีการพิสูจน์แล้วว่ามิได้สูตรความสำเร็จขั้นสุดท้าย @Radouxju ชี้ให้เห็นว่า(a*b*c)^(1/3)(GEOMETRIC เฉลี่ย) แทนค่าเฉลี่ยของ(a*b*c)/(255*255)การทำงานของเดือนพฤษภาคม ค่าเฉลี่ยทางเรขาคณิตต่ำกว่าหรือเท่ากับค่าเฉลี่ยเลขคณิตซึ่งเน้นความมืดของพื้นที่สีเทา ฉันยังไม่ได้ทดสอบ


ฉันพยายามสรุปการเรียนรู้เชิงความคิดเกี่ยวกับคอมโพสิตและวิธีที่บางคนสามารถกำหนดเองได้ สูตรที่แท้จริงสำหรับ "ทวีคูณ" ยังไม่เป็นที่รู้จักสำหรับฉัน
Hugolpz

ทำไมไม่เพียงแค่คูณค่าและ rescale ผลลัพธ์?
whuber

ยังไม่ได้ลอง! ซึ่งสูตรจะทำมัน(A*B*C)/(255*255)?
Hugolpz

1
นั่นจะเป็นการเริ่มต้นที่ดี :-)
whuber

1
ไม่ใช่ "ทวีคูณ" โดยใช้ค่าเฉลี่ย GEOMETRIC แทนที่จะเป็นค่าเฉลี่ยของ ARITHMETIC (a b c) ^ (1/3) ค่าเฉลี่ยทางเรขาคณิตต่ำกว่าหรือเท่ากับค่าเฉลี่ยเลขคณิตซึ่งเน้นความมืดของพื้นที่สีเทา
radouxju

0

เครื่องมือที่สามารถทำสิ่งนี้ (ในหมู่อื่น ๆ ) คือการสร้างภาพข้อมูลจาก Sky-View Factor ( http://iaps.zrc-sazu.si/en/svf#v ) คำนวณพารามิเตอร์หลายอย่างของภูมิประเทศ เป็นสิ่งที่ดีจริงๆ


-1

ก้อนของGdal_calcดูเหมือนจะมีตัวดำเนินการมากกว่า :

+ addition 
- subtraction 
/ division 
* multiplication 
= equals to 
< less than 
> larger than 
! not equal to 
? if clause 
M maximum of two values 
m minimum of two values 
B bit level operator

ฉันไม่พบตัวอย่างที่ชัดเจนและเหมาะสมสำหรับวิธีการใช้งานตัวดำเนินการที่แปลกใหม่ หากคุณมีบางอย่างคุณสามารถแบ่งปันได้ฟรี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.