การจดจำภาพในอดีตใช้วิธีง่ายๆ เช่น Linear Regression และเปรียบเทียบความคล้ายคลึง ผลลัพธ์ไม่ดี แม้งานง่ายๆ เช่น อ่านตัวอักษรมือเขียนก็ยาก Convolutional Neural Networks (CNNs) จำลองการทำงานของสมองมนุษย์ในการมองเห็นภาพ ได้ผลดีกว่ามาก
ภาพรวม CNN
คอมพิวเตอร์มองภาพเป็นอาร์เรย์ 2 มิติของตัวเลข (pixels) ใช้ CNN ซึ่งเป็นประเภทหนึ่งของ Neural Network สำคัญที่สุดคือการดำเนินการ Convolution
ใน CNN แต่ละเลเยอร์จัดระเบียบเป็น Width, Height, Depth Convolution รวมสองฟังก์ชันสร้างฟังก์ชันที่สาม (ผสานข้อมูลสองชุด) คูณเมทริกซ์แบบ element-wise แล้วบวกกัน
ขั้นตอน Convolution ในประมวลผลภาพ
- รับภาพ Input
- Kernel/Filter matrix ที่จะนำไปคอนฟลูชันกับภาพ
- ภาพ Output ที่ได้จากการคอนฟลูชัน
ตัวอย่าง: Sobel Filter สำหรับตรวจจับขอบ (Edge Detection)
import cv2
import numpy as np
# อ่านภาพและแปลงเป็น grayscale float
img = cv2.imread('beach.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY).astype(float)
# Sobel filter แนว X และ Y
edge_x = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)
edge_y = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)
# รวมขอบทั้งสองทิศทาง (Magnitude)
edge = np.sqrt(edge_x ** 2 + edge_y ** 2)
# ปรับค่าให้อยู่ในช่วง 0-255 และบันทึก
cv2.imwrite('beach_convol.jpg', edge)
Kernel ของ Sobel Filter
Sobel X (ตรวจจับขอบแนวตั้ง):
[[-1, 0, 1],
[-2, 0, 2],
[-1, 0, 1]]
Sobel Y (ตรวจจับขอบแนวนอน):
[[-1, -2, -1],
[ 0, 0, 0],
[ 1, 2, 1]]
ภาพตัวอย่าง
- Input: ภาพชายหาดธรรมดา
- Output: ภาพแสดงเฉพาะขอบ (Edge map) เน้นรายละเอียดขอบวัตถุ
ประยุกต์ใช้
- Edge detection ก่อนเข้าสู่ CNN
- Feature extraction แบบดั้งเดิม
- Image sharpening, blurring, embossing
- Preprocessing สำหรับ Computer Vision tasks
Convolution เป็นหัวใจของ CNN และการประมวลผลภาพสมัยใหม่ ทำให้เข้าใจได้ดีกว่าว่าทำไม Deep Learning จึงประสบความสำเร็จใน Computer Vision