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

Erosion และ Dilation รูปภาพด้วย OpenCV ใน Python

Morphological Operations สองตัวสำคัญใน Computer Vision: Erosion (การกัด蚀) และ Dilation (การขยาย) ใช้โมดูล OpenCV

ติดตั้ง: pip install opencv-python


Erosion (การกัด蚀)

กัดขอบวัตถุ foreground (สีขาว) ใช้เพื่อ:

  • กำจัด White Noise เล็กๆ
  • แยกวัตถุที่ติดกัน
  • ลดความหนาของวัตถุ

หลักการทำงาน

  1. สร้าง Kernel (Matrix ขนาดคี่: 3x3, 5x5, 7x7)
  2. เลื่อน Kernel ทับทุก Pixel
  3. Pixel จะเป็น 1 (ขาว) ก็ต่อเมื่อ ทุก Pixel ใต้ Kernel เป็น 1
  4. Pixel ใกล้ขอบจะถูกกำจัด -> วัตถุเล็กลง

Dilation (การขยาย)

ขยายพื้นที่วัตถุ foreground ใช้เพื่อ:

  • ต่อให้ส่วนที่ขาดหายของวัตถุ
  • คืนขนาดหลัง Erosion (Opening = Erode -> Dilate)
  • ขยาย White Region

หลักการทำงาน

  1. สร้าง Kernel เหมือนกัน
  2. Pixel จะเป็น 1 ก็ต่อเมื่อ มี Pixel อย่างน้อย 1 ตัว ใต้ Kernel เป็น 1
  3. พื้นที่ขาวขยายออกไป

โค้ดตัวอย่าง

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ลำดับ用途
OpeningErode -> Dilateกำจัด Noise, แยกวัตถุ
ClosingDilate -> Erodeเติมรู, ต่อวัตถุที่แตก
Morphological GradientDilate - Erodeหาขอบวัตถุ
Top HatInput - Openingหาส่วนสว่างเล็กๆ
Black HatClosing - Inputหาส่วนมืดเล็กๆ
# Opening
opening = cv2.morphologyEx(input_image, cv2.MORPH_OPEN, kernel)

# Closing
closing = cv2.morphologyEx(input_image, cv2.MORPH_CLOSE, kernel)