Canny Edge Detection
จาก Morange Wiki
เนื้อหา
Canny Edge Detection
วัตถุประสงค์
- ใบบทนี้จะเรียนรู้เกี่ยวกับ
- แนวคิดของ Canny Edge Detection
- ใน OpenCV จะมีฟังก์ชั่นชื่อว่า : cv2.Canny()
ทฤษฏี
- Canny Edge Detection คือ อัลกอริทึมสำหรับตรวจจับมุมของภาพ คิดค้นโดย John F. Canny ที่คิดค้นนั้นคือ
- เป็นเพียง อัลกอริทึม หนึ่ง ที่จะข้ามไปทีละ สเตจ เพื่อทำงานร่วมกับสเตจอื่นๆ
Noise Reduction
- เป็นการลดภาพแตกหรือภาพรบกวน (Noises) โดยก่อนหน้านี้จะได้รู้คคร่าวๆแล้ว
Finding Intensity Gradient of the Image
- รูปภาพที่มีความ Smooth นั้น จะต้อง กรองภาพด้วยฟัง์ชั่นต่างๆแต่ใน Sobel kernel จะทำอยู่ในรูปแบบของแนวจั้งและแนวนอน จากจุดหนึ่งไปยังอีกจุด โดยการหาจุด ในแนวนอน (Gx) และในแนวตั้ง (Gy) จากทั้งสองนั้นเราจะสามารถหาค่าของทิศทางได้แต่ละ Pixel สูตรต่อไปนี้
- ทิศทางการไล่โทนสีจะยังอยู่เสมอโดยตั้งฉากกับขอบ มันจะถูกปัดเศษให้เป็นหนึ่งในสี่มุมคิดเป็นแนวตั้งแนวนอนและสองทิศทางในแนวทแยง
Non-maximum Suppression
- หลังจากที่ไล่ระดับสีและขนาดและทิศทางแล้ว คือขั้นตอนที่จะสแกนแบบเต็มรูปแบบโดยลบและล้างสิ่งที่ไม่ต้องการในแต่ละ Pixel ในหลักการนี้จะเป็นการค้นหาทุกๆ Pixel ตรวจสอบว่า เพื่อหาทิศทางของการไล่ระดับ
- ดูรูปต่างอย่างด้านล่าง
- หลังจากที่ไล่ระดับสีและขนาดและทิศทางแล้ว คือขั้นตอนที่จะสแกนแบบเต็มรูปแบบโดยลบและล้างสิ่งที่ไม่ต้องการในแต่ละ Pixel ในหลักการนี้จะเป็นการค้นหาทุกๆ Pixel ตรวจสอบว่า เพื่อหาทิศทางของการไล่ระดับ
มีข้อผิดพลาดในการสร้างรูปย่อ: ไฟล์สูญหาย
- จุด A อยู่บน ขอบ (ในทิศทางแนวตั้ง) ทิศทางการไล่โทนสีเป็นเรื่องปกติไปที่ขอบ จุด B และ C อยู่ในทิศทางการไล่ระดับสี ดังนั้นจุด A มีการตรวจสอบที่มีจุด B และ C เพื่อดูว่ารูปแบบสูงสุด ถ้าเป็นเช่นนั้นก็ถือว่าสำหรับขั้นตอนต่อไปมิฉะนั้นจะถูกระงับ (นำไปศูนย์)
ในระยะสั้นผลที่คุณได้รับเป็นภาพไบนารีด้วย "put to zero"
- ในระยะสั้นนี้ ผลลัพธ์ ที่จะได้จะเป็นรูปภาพแบบ ไบนารี (Thin edges)
Hysteresis Thresholding
- ขั้นตอนนี้ตัดสินใจที่ Edge ทั้งหมดของขอบ สำหรับเรื่องนี้ จจำเป็นต้องมีค่าสองค่าคือเกณฑ์ minVal และ maxVal โดยทุกๆขอบ ที่มีความคมชัดเข้มมากกว่าการไล่ระดับสี แบบ maxVal โดยจะแน่ใจว่าจะเป็นขอบด้านล่าง แน่ใจว่าจะเป็นขอบที่ไม่ใช่เพื่อทิ้ง หากจะเชื่อมต่อกับ "sure-edge" พิกเซล, พวกเขาจะถือว่าเป็นส่วนหนึ่งของขอบ มิฉะนั้นจะถูกลบ ดูภาพด้านล่าง:
มีข้อผิดพลาดในการสร้างรูปย่อ: ไฟล์สูญหาย
Canny Edge Detection ใน OpenCV
- ใน OpenCV จะมีการนำทุกๆ แนวคิด ทุกทฤษฏีของ Canny มาไว้ในฟังก์ชั่นเดียว โดยคำสั่งคือ cv2.Canny() ดูตัวอย่างโค๊ดข้างล่าง:
ตัวอย่าง Code Canny Edge
import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread('messi5.jpg',0) edges = cv2.Canny(img,100,200) plt.subplot(121),plt.imshow(img,cmap = 'gray') plt.title('Original Image'), plt.xticks([]), plt.yticks([]) plt.subplot(122),plt.imshow(edges,cmap = 'gray') plt.title('Edge Image'), plt.xticks([]), plt.yticks([]) plt.show()
ผลลัพธ์
มีข้อผิดพลาดในการสร้างรูปย่อ: ไฟล์สูญหาย