ผู้ดำเนินการ 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 เพียงเพราะเรามีน้ำหนักมากกว่าในหน้ากาก