Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Xói mòn (Erosion) và Giãn nở (Dilation) ảnh với OpenCV trong Python

Trong bài toán này, chúng ta sẽ thấy cách Python thực hiện một số phép toán Hình thái học (Morphological Operations) như Xói mòn (Erosion) và Giãn nở (Dilation) sử dụng module OpenCV. Thư viện OpenCV chủ yếu được thiết kế cho thị giác máy tính (computer vision). Nó là mã nguồn mở. Ban đầu được thiết kế bởi Intel. Miễn phí sử dụng dưới giấy phép BSD mã nguồn mở.

Để sử dụng chức năng OpenCV, cần tải xuống bằng pip:

sudo pip3 install opencv-python

Ảnh Xói mòn (Erosion) là gì và cách hoạt động?

Trong phép Xói mòn, nó bào mòn ranh giới của các đối tượng tiền cảnh (foreground). Nó được dùng để loại bỏ các nhiễu trắng nhỏ (small white noises) khỏi hình ảnh. Xói mòn cũng có thể dùng để tách hai hình ảnh liên kết.

  • Một kernel (hạt nhân) được hình thành từ một hình ảnh. Kernel là một ma trận, cấp là số lẻ, như 3, 5, 7.
  • Một pixel của hình ảnh được chọn. Pixel này sẽ được chọn là 1 chỉ khi tất cả các pixel dưới kernel đều là 1. Ngược lại nó sẽ bị xói mòn.
  • Vì vậy, tất cả các pixel gần ranh giới sẽ bị loại bỏ.
  • Độ dày của đối tượng tiền cảnh giảm xuống.

Ảnh Giãn nở (Dilation) là gì và cách hoạt động?

Trong phép Giãn nở, nó làm tăng diện tích đối tượng. Xói mòn có thể loại bỏ nhiễu trắng, nhưng cũng làm co lại hình ảnh. Do đó, sau khi Xói mòn, nếu thực hiện Giãn nở, ta có kết quả loại bỏ nhiễu tốt hơn. Giãn nở cũng có thể dùng để nối các phần vỡ của một đối tượng.

  • Một kernel được hình thành từ hình ảnh. Kernel là ma trận cấp lẻ (3, 5, 7).
  • Một pixel được chọn. Pixel này sẽ là 1 nếu ít nhất một pixel dưới kernel là 1 (khác với erosion yêu cầu tất cả là 1).
  • Làm tăng vùng trắng hoặc kích thước đối tượng tiền cảnh của hình ảnh.

Mã ví dụ

import cv2
import numpy as np

input_image = cv2.imread('TP_logo.jpg', cv2.IMREAD_COLOR)
kernel = np.ones((3,3), np.uint8)  # kernel ma trận 3x3 từ numpy

# Tạo ảnh xói mòn và giãn nở từ ảnh gốc
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)  # chờ phím để thoát

Kết quả

Xói mòn (Erosion) và Giãn nở (Dilation) ảnh với OpenCV trong Python