Tìm đường viền

Xử lý ảnh bằng Python

Rebeca Gonzalez

Data Engineer

Tìm đường viền

  • Đo kích thước
  • Phân loại hình dạng
  • Xác định số lượng đối tượng

Tổng số chấm trên quân domino: 29.

Xử lý ảnh bằng Python

Ảnh nhị phân

Ta có thể tạo ảnh nhị phân bằng cách áp dụng ngưỡng (thresholding) hoặc dùng phát hiện biên (edge detection)

Xử lý ảnh bằng Python

Tìm đường viền với scikit-image

Chuẩn bị ảnh

Chuyển ảnh sang thang xám 2D.

# Make the image grayscale
image = color.rgb2gray(image)

Xử lý ảnh bằng Python

Tìm đường viền với scikit-image

Chuẩn bị ảnh

Nhị phân hóa ảnh

# Obtain the thresh value
thresh = threshold_otsu(image)

# Apply thresholding
thresholded_image = image > thresh

Xử lý ảnh bằng Python

Tìm đường viền với scikit-image

Sau đó dùng find_contours().

# Import the measure module
from skimage import measure

# Find contours at a constant value of 0.8
contours = measure.find_contours(thresholded_image, 0.8)

Xử lý ảnh bằng Python

Giá trị mức cố định

Xử lý ảnh bằng Python

Các bước tìm đường viền

from skimage import measure
from skimage.filters import threshold_otsu

# Make the image grayscale
image = color.rgb2gray(image)

# Obtain the optimal thresh value of the image thresh = threshold_otsu(image) # Apply thresholding and obtain binary image thresholded_image = image > thresh
# Find contours at a constant value of 0.8 contours = measure.find_contours(thresholded_image, 0.8)
Xử lý ảnh bằng Python

Các bước tìm đường viền

Kết quả

Xử lý ảnh bằng Python

Kích thước đường viền

Đường viền: danh sách ndarray (n, 2).

for contour in contours:
    print(contour.shape)
(433, 2)
(433, 2)
(401, 2)
(401, 2) 
(123, 2)
(123, 2) 
(59, 2)
(59, 2)
(59, 2)
(57, 2)
(57, 2)
(59, 2)
(59, 2)

Xử lý ảnh bằng Python

Kích thước đường viền

for contour in contours:
    print(contour.shape)
(433, 2)
(433, 2) --> Viền ngoài
(401, 2)
(401, 2)
(123, 2)
(123, 2)
(59, 2)
(59, 2)
(59, 2)
(57, 2)
(57, 2)
(59, 2)
(59, 2) 

Xử lý ảnh bằng Python

Kích thước đường viền

for contour in contours:
    print(contour.shape)
(433, 2)
(433, 2) --> Viền ngoài
(401, 2)
(401, 2) --> Viền trong
(123, 2)
(123, 2) 
(59, 2)
(59, 2)
(59, 2)
(57, 2)
(57, 2)
(59, 2)
(59, 2) 

Xử lý ảnh bằng Python

Kích thước đường viền

for contour in contours:
    print(contour.shape)
(433, 2)
(433, 2) --> Viền ngoài
(401, 2)
(401, 2) --> Viền trong
(123, 2)
(123, 2) --> Vạch chia quân
(59, 2)
(59, 2)
(59, 2)
(57, 2)
(57, 2)
(59, 2)
(59, 2) 

Xử lý ảnh bằng Python

Kích thước đường viền

for contour in contours:
    print(contour.shape)
(433, 2)
(433, 2) --> Viền ngoài
(401, 2)
(401, 2) --> Viền trong
(123, 2)
(123, 2) --> Vạch chia quân
(59, 2)
(59, 2)
(59, 2)
(57, 2)
(57, 2)
(59, 2)
(59, 2) --> Chấm 

Số chấm: 7.

Xử lý ảnh bằng Python

Vamos praticar!

Xử lý ảnh bằng Python

Preparing Video For Download...