ฉันมีภาพแรสเตอร์เช่นนี้
ฉันต้องการลบจุดรบกวนที่แยกได้และทำให้ขอบเรียบ (พูดจุดเดียวสีขาวและฉันต้องการให้ขอบของเอนทิตีดูราบรื่น) ฉันจะทำสิ่งนี้ใน ArcGIS หรือใน R ได้อย่างไร
ขนาดเซลล์คือ 30 * 30
ฉันมีภาพแรสเตอร์เช่นนี้
ฉันต้องการลบจุดรบกวนที่แยกได้และทำให้ขอบเรียบ (พูดจุดเดียวสีขาวและฉันต้องการให้ขอบของเอนทิตีดูราบรื่น) ฉันจะทำสิ่งนี้ใน ArcGIS หรือใน R ได้อย่างไร
ขนาดเซลล์คือ 30 * 30
คำตอบ:
การดำเนินการทางสัณฐานวิทยาExpandและShrinkถูกสร้างขึ้นสำหรับการประมวลผลประเภทนี้ ใช้ ArcGIS (หรือ GRASS หรือMathematica ) เพราะR
ห้องสมุด "แรสเตอร์" ช้าเกินไป
บ่อยครั้งที่มันช่วยในการทดสอบพารามิเตอร์เล็กน้อย: คุณต้องตัดสินใจว่าต้องขยายและย่อขนาดเท่าไรเพื่อล้างรูปภาพ และโดยปกติคุณต้องการทำน้อยที่สุดเท่าที่จะเป็นไปได้เพราะการดำเนินการแต่ละอย่างมีแนวโน้มที่จะทำให้รายละเอียดที่คมชัดบางอย่างราบรื่น นี่คือลำดับที่ใช้งานได้ดีในการกำจัด "เสียง" ที่เห็นได้ชัดในขณะที่ยังคงรักษารายละเอียดส่วนใหญ่ไว้ใน "เอนทิตี" "Expand" และ "shrink" ทั้งคู่มีการอ้างอิงไปยังเซลล์สีขาวดังนั้นการขยายตัวทำให้เกิดการขยายตัวออกไปด้านนอกและการหดตัวทำให้เซลล์สีดำรุกล้ำเข้าไปในบริเวณสีขาว
คอลัมน์ "แตกต่าง" ใช้สีเพื่อเน้นความแตกต่างระหว่างภาพเริ่มต้นและสิ้นสุดในแต่ละขั้นตอน: สีน้ำเงินสำหรับสีดำที่เปลี่ยนเป็นสีขาวและสีส้มสำหรับสีขาวที่เปลี่ยนเป็นสีดำ
หากจำเป็นต้องลบชิ้นส่วนที่เหลือที่มีขนาดใหญ่กว่านั่นอาจทำได้ด้วยRegionGroupเพื่อระบุชิ้นส่วนเหล่านั้นหลังจากนั้นสามารถกำจัดได้ด้วยการจัดประเภทใหม่ นี่เป็นตัวเลือกในตอนแรก แต่การทำความสะอาดเบื้องต้นเริ่มต้นด้วยExpand
และShrink
ลดการทำงานและให้การปรับให้เรียบตามต้องการ
บังเอิญฉันเลือกที่จะสร้างภาพแปดภาพในภาพประกอบนี้ด้วยคำสั่งMathematicaเพราะมันง่ายง่ายและรวดเร็วในการรัน:
i = Import["http://i.stack.imgur.com/umDg7.png"];
l = Dilation[k = Erosion[j = Dilation[i, 2], 3], 1]; (* This does all the work *)
delta = ColorCombine /@ {{i, j}, {j, k}, {k, l}, {i, l}}; (* Compares images *)
เวิร์กโฟลว์ใน ArcGIS เหมือนกัน แต่ไวยากรณ์จะยาวขึ้น หากคุณต้องการใช้จริงๆให้R
โหลดไลบรารี่ "raster" และหาประโยชน์focalFilter
เพื่อสร้างฟังก์ชั่นเพื่อทำการขยายและย่อขนาด จากนั้นรอประมาณหนึ่งนาทีเพื่อดำเนินการ ...
ด้วยการใช้ Spatial Analyst Extension คุณสามารถใช้เครื่องมือทั่วไปบางอย่าง บางคนทำงานคล้ายกันดังนั้นคุณอาจต้องเล่นกับคนอื่นเพื่อให้ได้ผลลัพธ์ตามที่คุณต้องการ แต่ฉันจะมีลักษณะที่เป็นตัวกรองส่วนใหญ่เครื่องมือและเขตแดนสะอาดเครื่องมือ
นี่คือหน้าเกี่ยวกับแนวคิดของเครื่องมือทั้งสองนี้
ฉันไม่แน่ใจว่าจะทำงานเหล่านี้ได้อย่างไรใน R แต่นี่คือโพสต์เกี่ยวกับวิธีดำเนินการตัวกรองส่วนใหญ่โดยใช้ GRASS GIS
นี่เป็นตัวแปรที่แตกต่างจากคำตอบของ @ whuber และใช้ Euclidian Distance เพื่อขยายและลดขอบเขตของแรสเตอร์เพื่อให้มุมที่คมชัดของแรสเตอร์นั้นเรียบโดยใช้กระบวนการขยาย - หดซึ่งใช้จำนวนเซลล์เพื่อการเติบโต / การบุกรุก ถึงแม้ว่า Euclidian Distance เลียนแบบ Expand แต่ก็ไม่สามารถที่จะแนะนำค่าเชิงลบให้กับการรุกล้ำ / หด เคล็ดลับคือการพัฒนากระบวนการซ้ำเพื่อลบเชิงลบของแรสเตอร์ยูคาลิเดียนระยะทางและเติบโต ด้านล่างนี้เป็นขั้นตอนสำหรับภาพตัวอย่างที่กำหนดและภาพรวมเพื่อการชี้แจง
จัดประเภทแรสเตอร์ใหม่เพื่อให้มีเพียง 1 วินาที (เซลล์สีขาว)
ใช้ระยะ euclidian สำหรับระยะห่างสองเซลล์ (60 เมตรในกรณีนี้) กับ raster ที่จัดประเภทใหม่
นำค่าลบของแรสเตอร์ที่ขยายออกโดยใช้การจัดประเภทใหม่ (เซลล์ที่มีค่าจะได้รับ NODATA และ NODATA จะเปลี่ยนเป็น 1) หรือตัวดำเนินการ Con และ IsNull ของ Raster Calculator
ใช้ Euclidian Distance อีกครั้งกับ raster เชิงลบนี้ด้วยระยะทางเดียวกัน (60 เมตร)
ใช้ค่าลบของสิ่งนี้โดยทำตามกระบวนการเดียวกันที่ให้ไว้ข้างต้น
ใช้เครื่องคำนวณแรสเตอร์หรือจัดประเภทใหม่เพื่อกำหนดเซลล์ NODATA ให้เป็น 0 ในแรสเตอร์นี้เพื่อกลับสู่ค่าดั้งเดิมของแรสเตอร์ตัวอย่าง
ขยายการหดตัว กับ ระยะทางแบบยุคลิด
หมายเหตุ: สีเขียวแสดงเซลล์ที่ถูกประมวลผล (เซลล์สีขาวในคำถาม)
ข้อได้เปรียบของ Euclidian Distance ก็คือมันต้องใช้ระยะทางที่เหมาะสมจากแต่ละเซลล์ผ่านส่วนขยายด้านตรงข้ามมุมฉากซึ่งทำให้ขอบคมเป็นอย่างอื่น จำนวนพารามิเตอร์เซลล์ของเครื่องมือขยายและย่อขนาดจะประมวลผลจำนวนเซลล์เท่ากันทุกทิศทางซึ่งให้ค่าขอบเขตกล่องเหมือนขอบดังนั้นจึงทำให้ขอบเขต / มุมกว้างเกินไป
แม้ว่าปัญหาหลักจะไม่สามารถขจัดเสียงรบกวนได้สำเร็จเหมือนขยาย / ย่อขนาดและยาวกว่าคำตอบเล็กน้อย