Morphology Transformations
Morphology Transformations เป็นตัวดำเนินการพื้นฐานที่ใช้ในการเปลี่ยนแปลงลักษณะรูปร่างหรือโครงสร้างของภาพ โดยใช้องค์ประกอบโครงสร้าง (Structuring Element) เป็นตัวกำหนดรูปร่าง มีตัวดำเนินการพื้นฐานของ Morphology Transformations จะมีสองตัว คือ การกัดเซาะ (Erosion) และการขยาย (Dilation) จากนั้นจะมีรูปแบบที่หลากหลายที่พัฒนามาจากตัวดำเนินการพื้นฐานอย่างเช่น การเปิด (Opening) การปิด (Closing) การไล่ระดับ (Gradient) และอื่น ๆ ให้เลือกใช้
Structuring Element
องค์ประกอบโครงสร้าง (Structuring Element) คือ เมทริกซ์ย่อยที่ถูกกำหนดขึ้นเพื่อใช้ดำเนินการกับรูปภาพ สามารถเรียกได้อีกชื่อหนึ่ง คือ เคอร์เนล (Kernels) ขนาดขององค์ประกอบโครงสร้างนั้นส่วนใหญ่แล้วจะเป็นจำนวนคี่ เช่น 3*3 หรือ 5*5 เป็นต้น
Erosion
การกัดเซาะ (Erosion) มีแนวคิดคล้ายกับการพังทลายของหน้าดิน หรือก็คือตัวดำเนินการนี้จะทำการกัดเซาะขอบเขตของวัตถุในรูปภาพ ถ้าหากใช้กับภาพไบนารี่จะเป็นการเปลี่ยนค่าของตำแหน่งของขอบเขตของวัตถุที่ไม่ถูกปิดล้อมโดยสมบูรณ์ที่มีค่าพิกเซลเท่ากับ 1 ให้มีค่าเป็น 0 (ลดสีขาว ขยายสีดำ )มักถูกนำมาใช้ในการลบสัญญาณรบกวนขนาดเล็กในภาพและใช้กับการแยกวัตถุที่เชื่อมต่อกัน

$ cv2.erode(image,kernel,iterations)
Parameters:
image => ภาพไบนารี่หรือภาพ grayscale ที่ต้องการนำมาใช้
kernel => องค์ประกอบโครงสร้างที่ใช้สำหรับการ erosion
iterations => จำนวนครั้งที่ใช้ในการ erosion
Example:
import cv2
import numpy as np
image = cv2.imread("path/your/image.png")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow("Original", image)
kernel = np.ones((5,5),np.uint8)
erosion = cv2.erode(gray,kernel,iterations=5)
cv2.imshow("erode ", erosion)
cv2.waitKey(0)

Dilation
การขยาย (Dilation) มีแนวคิดตรงข้ามกับการกัดเซาะ คือตัวดำเนินการนี้จะทำการยายขอบเขตของวัตถุในรูปภาพ เพื่อเปลี่ยนแปลงรูปร่างให้เป็นไปตามองค์ประกอบโครงสร้าง ถ้าหากใช้กับภาพไบนารี่จะเป็นการเปลี่ยนค่าของตำแหน่งพิกเซลที่อยู่ใกล้ขอบเขตของวัตถุที่ไม่ถูกปิดล้อมโดยสมบูรณ์ที่มีค่าพิกเซลเท่ากับ 0 ให้มีค่าเป็น 1 (ขยายสีขาว ลดสีดำ) มักถูกนำมาใช้ในการขยายขอบเขตของวัตถุที่อยู่ใกล้กันให้กลายเป็นวัตถุชิ้นเดียวกัน

$ cv2.dilate(image,kernel,iterations)
Parameters:
image => ภาพไบนารี่หรือภาพ grayscale ที่ต้องการนำมาใช้
kernel => องค์ประกอบโครงสร้างที่ใช้สำหรับการ dilation
iterations => จำนวนครั้งที่ใช้ในการ dilation
Example:
import cv2
import numpy as np
image = cv2.imread("path/your/image.png")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow("Original", image)
kernel = np.ones((5,5),np.uint8)
dilation = cv2.dilate(gray,kernel,iterations=5)
cv2.imshow("Dilated ", dilation)
cv2.waitKey(0)

Closing
การปิด (Closing) เป็นตัวดำเนินการที่มาจากการทำงานคู่กันของตัวดำเนินพื้นฐาน คือ การกัดเซาะและการขยาย มีหลักการทำงานที่เริ่มจากขยายขอบเขตตามด้วยการกัดเซาะเพิ่มเติมโดยใช้องค์ประกอบโครงสร้าง ถ้าหากใช้กับภาพไบนารี่จะเป็นการเปลี่ยนค่าของตำแหน่งที่อยู่ใกล้ขอบเขตของวัตถุที่มีค่าเท่ากับ 0 ให้มีค่าเป็น 1 จากนั้นจึงจะเป็นการเปลี่ยนค่าของตำแหน่งขอบเขตของวัตถุที่เหลืออยู่ที่มีค่าพิกเซลเท่ากับ 1 ให้มีค่าเป็น 0 มักถูกนำมาใช้ในการปิดช่องว่างขนาดเล็กของภาพไบนารี่ให้สมบูรณ์

$ cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)
Parameters:
image => ภาพไบนารี่หรือภาพ grayscale ที่ต้องการนำมาใช้
cv2.MORPH_CLOSE => ตัวดำเนินการของ Closing
kernel => องค์ประกอบโครงสร้างที่ใช้สำหรับการ Closing
Example:
import cv2
import numpy as np
image = cv2.imread("path/your/image.png")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow("Original", image)
kernel = np.ones((13,13),np.uint8)
closing = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)
cv2.imshow("closing", closing)
cv2.waitKey(0)

Opening
การเปิด (Opening) เป็นตัวดำเนินการที่มาจากการทำงานคู่กันของตัวดำเนินการพื้นฐานคือ การกัดเซาะและการขยาเช่นเดียวกับการปิดย แต่มีลำดับการดำเนินงานที่สลับกัน เริ่มจากการกัดเซาะตามด้วยการขยายโดยการใช้องค์ประกอบโครงสร้าง ถ้าหากใช้กับภาพไบนารี่จะเป็นการเปลี่ยนค่าของตำแหน่งที่อยู่ใกล้ขอบเขตของวัตถุที่มีค่าเท่ากับ 1 ให้มีค่าเป็น 0 จากนั้นจึงจะเป็นการเปลี่ยนค่าของตำแหน่งขอบเขตของวัตถุที่เหลืออยู่ที่มีค่าพิกเซลเท่ากับ 0 ให้มีค่าเป็น 1 มักถูกนำมาใช้ในการหารูปทรงที่มีลักษณะเฉพาะของภาพไบนารี่

$ cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)
Parameters:
image => ภาพไบนารี่หรือภาพ grayscale ที่ต้องการนำมาใช้
cv2.MORPH_OPEN => ตัวดำเนินการของ Opening
kernel => องค์ประกอบโครงสร้างที่ใช้สำหรับการ Opening
Example:
import cv2
import numpy as np
image = cv2.imread("/path/your/image.png")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow("Original", image)
kernel = np.ones((15,15),np.uint8)
opening = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)
cv2.imshow("opening", opening)
cv2.waitKey(0)

Last updated
Was this helpful?