ผู้ดำเนินการ Sobel
ตัวดำเนินการ sobel นั้นคล้ายกับตัวดำเนินการ Prewitt มาก นอกจากนี้ยังเป็นมาสก์อนุพันธ์และใช้สำหรับการตรวจจับขอบ เช่นเดียวกับตัวดำเนินการ Prewitt ตัวดำเนินการ sobel ยังใช้เพื่อตรวจจับขอบสองประเภทในภาพ:
- ทิศทางแนวตั้ง
- ทิศทางแนวนอน
ความแตกต่างกับ Prewitt Operator
ความแตกต่างที่สำคัญคือในตัวดำเนินการ sobel ค่าสัมประสิทธิ์ของมาสก์จะไม่คงที่และสามารถปรับเปลี่ยนได้ตามความต้องการของเราเว้นแต่จะไม่ละเมิดคุณสมบัติใด ๆ ของมาสก์อนุพันธ์
ต่อไปนี้เป็น Mask แนวตั้งของ Sobel Operator:
-1 | 0 | 1 |
-2 | 0 | 2 |
-1 | 0 | 1 |
มาสก์นี้ทำงานเหมือนกับมาสก์แนวตั้งของตัวดำเนินการ Prewitt ทุกประการ มีความแตกต่างเพียงประการเดียวคือมีค่า“ 2” และ“ -2” อยู่ตรงกลางของคอลัมน์ที่หนึ่งและสาม เมื่อนำไปใช้กับรูปภาพมาสก์นี้จะเน้นที่ขอบแนวตั้ง
มันทำงานอย่างไร
เมื่อเราใช้มาสก์นี้กับรูปภาพจะมีขอบแนวตั้งที่เด่นชัด มันทำงานเหมือนเป็นอนุพันธ์ลำดับแรกและคำนวณความแตกต่างของความเข้มของพิกเซลในพื้นที่ขอบ
เนื่องจากคอลัมน์กลางเป็นศูนย์จึงไม่รวมค่าดั้งเดิมของรูปภาพ แต่จะคำนวณความแตกต่างของค่าพิกเซลด้านขวาและด้านซ้ายรอบขอบนั้น นอกจากนี้ค่ากลางของทั้งคอลัมน์แรกและคอลัมน์ที่สามคือ 2 และ -2 ตามลำดับ
สิ่งนี้ให้น้ำหนักกับค่าพิกเซลรอบขอบมากขึ้น สิ่งนี้จะเพิ่มความเข้มของขอบและเพิ่มขึ้นเมื่อเทียบกับภาพต้นฉบับ
ต่อไปนี้คือ Mask แนวนอนของ Sobel Operator
-1 | -2 | -1 |
0 | 0 | 0 |
1 | 2 | 1 |
หน้ากากด้านบนจะพบขอบในแนวนอนและเป็นเพราะคอลัมน์ศูนย์นั้นอยู่ในแนวนอน เมื่อคุณจะปรับมาสก์นี้เข้ากับรูปภาพมันจะมีขอบแนวนอนที่เด่นชัดในภาพ ข้อแตกต่างเพียงอย่างเดียวคือมี 2 และ -2 เป็นองค์ประกอบกึ่งกลางของแถวแรกและแถวที่สาม
มันทำงานอย่างไร
มาสก์นี้จะทำให้ขอบแนวนอนเด่นชัดในรูปภาพ นอกจากนี้ยังทำงานบนหลักการของมาสก์ด้านบนและคำนวณความแตกต่างระหว่างความเข้มของพิกเซลของขอบเฉพาะ เนื่องจากแถวกลางของมาสก์ประกอบด้วยเลขศูนย์จึงไม่รวมค่าดั้งเดิมของขอบในภาพ แต่จะคำนวณความแตกต่างของความเข้มพิกเซลด้านบนและด้านล่างของขอบเฉพาะ จึงเพิ่มการเปลี่ยนแปลงอย่างฉับพลันของความรุนแรงและทำให้มองเห็นขอบได้ชัดเจนขึ้น
ตอนนี้ได้เวลาดูการใช้งานมาสก์เหล่านี้แล้ว:
ภาพตัวอย่าง
ต่อไปนี้เป็นภาพตัวอย่างที่เราจะใช้สองหน้ากากข้างบนพร้อมกัน
หลังจากใช้ Vertical Mask
หลังจากใช้มาสก์แนวตั้งกับภาพตัวอย่างด้านบนแล้วจะได้ภาพต่อไปนี้
หลังจากใช้ Horizontal Mask
หลังจากใช้มาสก์แนวนอนกับภาพตัวอย่างด้านบนแล้วจะได้ภาพต่อไปนี้
การเปรียบเทียบ
ดังที่คุณเห็นว่าในภาพแรกที่เราใช้มาสก์แนวตั้งขอบแนวตั้งทั้งหมดจะมองเห็นได้ชัดเจนกว่าภาพต้นฉบับ ในภาพที่สองเราได้ใช้มาสก์แนวนอนและทำให้มองเห็นขอบแนวนอนทั้งหมด
ด้วยวิธีนี้คุณจะเห็นว่าเราสามารถตรวจจับขอบทั้งแนวนอนและแนวตั้งจากรูปภาพได้ นอกจากนี้หากคุณเปรียบเทียบผลลัพธ์ของตัวดำเนินการ sobel กับตัวดำเนินการ Prewitt คุณจะพบว่าตัวดำเนินการ sobel พบขอบมากขึ้นหรือทำให้ขอบมองเห็นได้ชัดเจนขึ้นเมื่อเทียบกับ Prewitt Operator
เนื่องจากในตัวดำเนินการ sobel เราได้จัดสรรน้ำหนักให้กับความเข้มของพิกเซลรอบ ๆ ขอบมากขึ้น
ใช้น้ำหนักมากขึ้นในการมาส์ก
ตอนนี้เรายังสามารถเห็นได้ว่าถ้าเราใช้น้ำหนักมากขึ้นกับมาสก์ก็จะยิ่งได้ขอบมากขึ้นสำหรับเรา ตามที่กล่าวไว้ในตอนต้นของบทช่วยสอนว่าไม่มีสัมประสิทธิ์คงที่ในตัวดำเนินการ sobel ดังนั้นนี่คือตัวดำเนินการแบบถ่วงน้ำหนักอื่น
-1 | 0 | 1 |
-5 | 0 | 5 |
-1 | 0 | 1 |
หากคุณสามารถเปรียบเทียบผลลัพธ์ของมาสก์นี้กับมาสก์แนวตั้งของ Prewitt เป็นที่ชัดเจนว่ามาสก์นี้จะให้ขอบมากกว่าเมื่อเทียบกับ Prewitt เพียงเพราะเรามีน้ำหนักมากกว่าในหน้ากาก