วันอาทิตย์ที่ 28 สิงหาคม พ.ศ. 2554

Image Processing การหาขอบภาพ (Edge detection)

การหาขอบภาพคือการตรวจสอบว่าเส้นขอบลากผ่านหรือใกล้เคียงกับจุดใด โดยวัดจากการเปลี่ยนแปลงของความเข้มในตำแหน่งที่ใกล้เคียงกับจุดดังกล่าว ซึ่งวิธีการหาขอบนั้นมีด้วยกันหลายวิธี แต่อย่างไรก็ตามสามารถแบ่งได้เป็น 2 กลุ่มหลัก คือ Gradient method และ Laplacian method โดยในแต่ละวิธีมีรายละเอียดดังต่อไปนี้ (Castleman, Kenneth R. 1996 : 465-466 ; Fisher, Robert et al. 2004)

1. Gradient method
วิธี นี้จะหาขอบโดยการหาจุดต่ำสุดและจุดสูงสุดในรูปของอนุพันธ์อันดับหนึ่งของภาพ โดยจุดที่เป็นขอบจะอยู่ในส่วนที่เหนือค่า threshold (ภาพที่ 6 ในรูปที่ 2) จึงอาจทำให้เส้นขอบที่ได้มีลักษณะหนา ตัวอย่างวิธีการหาขอบของกลุ่มนี้ เช่น Roberts, Prewitt, Sobel และ Canny เป็นต้น
2. Laplacian method
จะ หาขอบโดยใช้อนุพันธ์อันดับ 2 โดยใช้จุดที่ค่า y เป็น 0 (Zerocrossing) ซึ่งวิธีนี้จะใช้เวลาในการคำนวณมากกว่า Gradient method ตัวอย่างวิธีการหาขอบของกลุ่มนี้ เช่น Laplacian of Gaussian และ Marrs-Hildreth เป็นต้น


กราฟ แสดงการหาขอบด้วยวิธี Gradient method (รูปที่ 2) และ Laplacian method (รูปที่ 3) โดยรูปที่ 1 แสดงถึงความแตกต่างของระดับความเข้มของสี (GIMP 2004)

โปรแกรม Matlab สามารถช่วยในการหาขอบภาพ ซึ่งมีคำสั่งที่ใช้ในการหาขอบทั้งหมด 6 วิธี คือ Roberts, Sobel, Canny, Laplacian of Gaussian, zero cross และ Prewitt งานวิจัยตัวอย่างนี้ได้เลือกวิธี Canny ในการหาขอบภาพ เนื่องจากวิธีดังกล่าวมีการใช้ Gaussian filter ก่อนการหาขอบจึงสามารถควบคุมระดับความละเอียดของขอบที่ต้องการและสามารถลด สัญญาณรบกวนได้อีกด้วย ทำให้สามารถตัดขั้นตอนการประมวลผลภาพเบื้องต้น(preprocessing) ตัวอย่างภาพที่ผ่านการหาขอบทั้ง 6 วิธีโดยใช้โปรแกรม Matlab เป็นดังแสดงในภาพที่ด้านล่าง ซึ่งจากรูปตัวอย่างจะพบว่าการหาขอบภาพ ด้วยวิธี Canny จะให้รายละเอียดภายในวัตถุได้ดีที่สุดและใช้ได้ในกรณีที่ความแตกต่างของสีมี น้อยเมื่อเทียบกับวิธีอื่นๆ



3. Canny Edge Detection Algorithm
ขั้นตอนการหาขอบโดยวิธีของ Canny ประกอบด้วย 4 ขั้นตอน ดังภาพข้างล่าง



การ ทำงานของ Canny edge detection นั้นเริ่มต้นจากการปรับภาพให้เรียบ (Smoothing) ด้วยตัวกรองเกาเซียน (Gaussian filter) เพื่อกำจัดสัญญาณรบกวน หลังจากนั้น คำนวณค่าขนาด (magnitude) และทิศทาง (orientation) ของ gradient โดยใช้การหาอนุพันธ์อันดับหนึ่ง ในถัดมาจึงใช้ nonmaxima suppression กับ gradient magnitude เพื่อทำให้ได้ขอบที่บางลง และในขั้นตอนสุดท้ายใช้ double thresholding algorithm เพื่อระบุพิกเซลที่เป็นขอบและช่วยเชื่อมต่อขอบ (Green, Bill 2002 ; ION528 - Image processing algorithms 2005 ; Canny Operator Links 2005 ; Rubino, Matthew 2005) โดยในแต่ขั้นตอนมีรายละเอียดดังต่อไปนี้

3.1 Smoothing
ใน ขั้นตอนแรกของการหาขอบโดยอัลกอริทึมนี้จะต้องกำจัดสัญญาณรบกวนออกก่อนโดยใช้ Gaussian filter ซึ่งสามารถคำนวณได้จากการใช้กรอบ (mask) ขนาดเล็ก ขนาดของ Gaussian mask นี้หากมีขนาดกว้างจะมีผลทำให้ลดสัญญาณรบกวนได้มาก แต่ถ้ากว้างมากเกินไปจะมีผลทำให้ขอบย่อยๆ ที่เป็นส่วนรายละเอียดนั้นหายไป สำหรับการคำนวณหาภาพที่ได้จากการใช้ Gaussian filter เป็นดังสมการที่ 3.18



3.2 Gradient Calculation
ในขั้นแรกนำ smoothing image S[i, j] มาสร้าง x, y partial derivatives P[i, j] และ Q[i, j] ตามลำดับ ดังสมการที่ 3.19 และ 3.20

P [i , j] ≈ (S[i, j+1] - S[i, j] + S[i+1, j+1] - S[i+1, j]) / 2 (3.19)
Q [i , j] ≈ (S[i, j] - S[i+1, j] + S[i, j+1] - S[i+1, j+1]) / 2 (3.20)

หลัง จากนั้นนำค่า x , y partial derivatives มาคำนวณด้วยสูตรมาตรฐานสำหรับการแปลงรูปแบบจาก rectangular ไปเป็น polar (rectangular-to-polar conversion) เพื่อหาขนาดและทิศทางของ gradient ตามสมการที่ 3.21



3.3 Nonmaxima Suppression
สำหรับ การหาขอบโดย Canny method จุดที่ถือเป็นเส้นขอบได้นั้นต้องเป็นจุดที่ให้ค่าสูงสุดเฉพาะที่และเป็นทิศ ทางเดียวกับ gradient ด้วย ซึ่งด้วยวิธีดังกล่าวนี้ทำให้ได้ขอบที่บางเพียง 1 พิกเซล ภาพที่ได้หลังการทำ Nonmaxima Suppression จะให้ค่าเป็นศูนย์ในทุกจุดยกเว้นจุดที่เป็น local maxima points ซึ่งจะยังคงค่าเดิมไว้

3.4 Thresholding
แม้ว่า ภาพจะผ่านการ smoothing ในขั้นตอนแรกแล้วก็ตาม ภาพที่ได้อาจยังมีเส้นขอบที่ไม่ใช่ขอบที่แท้จริงปรากฏอยู่อันเนื่องจาก สัญญาณรบกวนหรือลักษณะของวัตถุในภาพเป็นพื้นผิวที่มีลวดลายหรือมีรายละเอียด ภายในมาก ดังนั้นเพื่อลดปัญหาดังกล่าวจึงได้มีการกำหนดค่า threshold ขึ้นมา 2 ค่า คือ high threshold (T1) และ low threshold (T2) โดยพิกเซลที่มีค่ามากกว่า T1 จะถูกปรับเป็น 1 (เป็นพิกเซลที่เป็นขอบ) แต่ถ้าน้อยกว่า T2 จะถูกปรับเป็น 0 ส่วนค่าที่อยู่ระหว่างค่า threshold ทั้งสอง การปรับเป็นค่า 0 หรือ 1 นั้นขึ้นอยู่กับพิกเซลที่อยู่รอบข้าง หากพบว่าพิกเซลที่อยู่รอบข้างของพิกเซลที่เป็นขอบ (ค่า >T1) มีค่ามากกว่า T2 แล้ว จะปรับค่าพิกเซลดังกล่าวให้มีค่าเป็น 1 และถือเป็นสมาชิกหนึ่งในภาพขอบด้วยเช่นกัน

ที่มา http://www.boarddev.com/forum/index.php?topic=4081.0