Morphological Operations สองตัวสำคัญใน Computer Vision: Erosion (การกัด蚀) และ Dilation (การขยาย) ใช้โมดูล OpenCV
ติดตั้ง: pip install opencv-python
Erosion (การกัด蚀)
กัดขอบวัตถุ foreground (สีขาว) ใช้เพื่อ:
- กำจัด White Noise เล็กๆ
- แยกวัตถุที่ติดกัน
- ลดความหนาของวัตถุ
หลักการทำงาน
- สร้าง Kernel (Matrix ขนาดคี่: 3x3, 5x5, 7x7)
- เลื่อน Kernel ทับทุก Pixel
- Pixel จะเป็น 1 (ขาว) ก็ต่อเมื่อ ทุก Pixel ใต้ Kernel เป็น 1
- Pixel ใกล้ขอบจะถูกกำจัด -> วัตถุเล็กลง
Dilation (การขยาย)
ขยายพื้นที่วัตถุ foreground ใช้เพื่อ:
- ต่อให้ส่วนที่ขาดหายของวัตถุ
- คืนขนาดหลัง Erosion (Opening = Erode -> Dilate)
- ขยาย White Region
หลักการทำงาน
- สร้าง Kernel เหมือนกัน
- Pixel จะเป็น 1 ก็ต่อเมื่อ มี Pixel อย่างน้อย 1 ตัว ใต้ Kernel เป็น 1
- พื้นที่ขาวขยายออกไป
โค้ดตัวอย่าง
import cv2
import numpy as np
# อ่านรูป
input_image = cv2.imread('TP_logo.jpg', cv2.IMREAD_COLOR)
# Kernel 3x3
kernel = np.ones((3, 3), np.uint8)
# Erosion และ Dilation
erosion_image = cv2.erode(input_image, kernel, iterations=1)
dilation_image = cv2.dilate(input_image, kernel, iterations=1)
# แสดงผล
cv2.imshow('Input', input_image)
cv2.imshow('Erosion', erosion_image)
cv2.imshow('Dilation', dilation_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
การประยุกต์ใช้ร่วมกัน
| Operation | ลำดับ | 用途 |
|---|---|---|
| Opening | Erode -> Dilate | กำจัด Noise, แยกวัตถุ |
| Closing | Dilate -> Erode | เติมรู, ต่อวัตถุที่แตก |
| Morphological Gradient | Dilate - Erode | หาขอบวัตถุ |
| Top Hat | Input - Opening | หาส่วนสว่างเล็กๆ |
| Black Hat | Closing - Input | หาส่วนมืดเล็กๆ |
# Opening opening = cv2.morphologyEx(input_image, cv2.MORPH_OPEN, kernel) # Closing closing = cv2.morphologyEx(input_image, cv2.MORPH_CLOSE, kernel)