Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Convolution (การคอนฟลูชัน) ใน Python สำหรับการประมวลผลภาพ

การจดจำภาพในอดีตใช้วิธีง่ายๆ เช่น Linear Regression และเปรียบเทียบความคล้ายคลึง ผลลัพธ์ไม่ดี แม้งานง่ายๆ เช่น อ่านตัวอักษรมือเขียนก็ยาก Convolutional Neural Networks (CNNs) จำลองการทำงานของสมองมนุษย์ในการมองเห็นภาพ ได้ผลดีกว่ามาก

ภาพรวม CNN

คอมพิวเตอร์มองภาพเป็นอาร์เรย์ 2 มิติของตัวเลข (pixels) ใช้ CNN ซึ่งเป็นประเภทหนึ่งของ Neural Network สำคัญที่สุดคือการดำเนินการ Convolution

ใน CNN แต่ละเลเยอร์จัดระเบียบเป็น Width, Height, Depth Convolution รวมสองฟังก์ชันสร้างฟังก์ชันที่สาม (ผสานข้อมูลสองชุด) คูณเมทริกซ์แบบ element-wise แล้วบวกกัน

ขั้นตอน Convolution ในประมวลผลภาพ

  1. รับภาพ Input
  2. Kernel/Filter matrix ที่จะนำไปคอนฟลูชันกับภาพ
  3. ภาพ 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