Phép Biến đổi Hình thái trong OpenCV

Giới thiệu về Biến đổi Hình thái

Biến đổi hình thái là các thao tác xử lý ảnh dựa trên hình dạng, thường áp dụng cho ảnh nhị phân. Các phép biến đổi này sử dụng hai đầu vào: ảnh gốc và kernel (phần tử cấu trúc), tạo ra ảnh kết quả sau khi xử lý. Hai thao tác cơ bản là bào mòn và giãn nở.

Kernel (Phần tử Cấu trúc)

Kernel là vùng không gian nhỏ thường có kích thước 3×3, 5×5 hoặc 7×7 với các hình dạng khác nhau như chữ nhật, elip hoặc chữ thập. Cấu trúc kernel quyết định đặc tính xử lý của phép biến đổi.

Bào mòn (Erosion)

Phép bào mòn di chuyển kernel trên ảnh nhị phân từ trái sang phải, từ trên xuống dưới. Tại mỗi vị trí, nó tính giá trị pixel mới bằng cách lấy giá trị nhỏ nhất trong vùng kernel phủ lên:

import cv2
import numpy as np

matrix = np.zeros((8, 8), dtype=np.uint8)
matrix[2:6, 2:6] = 255
print("Ảnh gốc:\n", matrix)

element = np.ones((3, 3), dtype=np.uint8)
result_erode = cv2.erode(matrix, kernel=element)
print("\nSau bào mòn:\n", result_erode)

Ứng dụng: Loại bỏ nhiễu trắng, thu nhỏ đối tượng.

Giãn nở (Dilation)

Phép giãn nở ngược lại với bào mòn, sử dụng giá trị lớn nhất trong vùng kernel:

matrix[1, 1] = 100
matrix[1, 3] = 150
print("Ảnh gốc:\n", matrix)

result_dilate = cv2.dilate(matrix, kernel=element)
print("\nSau giãn nở:\n", result_dilate)

Ứng dụng: Loại bỏ nhiễu đen, mở rộng đối tượng.

Mở ảnh (Opening)

Kết hợp bào mòn rồi giãn nở: cv2.MORPH_OPEN

img = cv2.imread('noise_image.png', cv2.IMREAD_GRAYSCALE)
opened = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel=element)

Tác dụng: Khử nhiễu trắng, tách đối tượng.

Đóng ảnh (Closing)

Kết hợp giãn nở rồi bào mòn: cv2.MORPH_CLOSE

closed = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel=element)

Tác dụng: Lấp đầy lỗ hổng trong đối tượng.

Nón Trắng (Top Hat)

Hiệu giữa ảnh gốc và ảnh đã mở: cv2.MORPH_TOPHAT

tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel=element)

Ứng dụng: Tách nhiễu sáng từ nền.

Nón Đen (Black Hat)

Hiệu giữa ảnh đóng và ảnh gốc: cv2.MORPH_BLACKHAT

blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel=element)

Ứng dụng: Nhận diện vùng tối đặc biệt.

Gradient Hình thái

Chênh lệch giữa giãn nở và bào mòn: cv2.MORPH_GRADIENT

gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel=element)

Tác dụng: Làm nổi bật biên đối tượng

Thẻ: opencv xử lý ảnh biến đổi hình thái thao tác hình thái Kernel

Đăng vào ngày 14 tháng 7 lúc 02:43