Top Ad unit 728 × 90

Latest news

recent

Phân vùng ảnh và Otsu

Trong những bài viết trước đây, Bioz đã trực tiếp hoặc gián tiếp đề cập tới vấn đề phân vùng ảnh (Image Segmentation). Đó là quá trình xử lý nhằm chia nhỏ một bức ảnh ra thành các vùng riêng biệt  (Region of Interest ROI) tùy theo yêu cầu dựa vào các đặc tính (Features) khác nhau. Đây là một chủ đề lớn, nó bao hàm nhiều nhóm các thuật toán khác nhau và có ứng dụng rộng rãi trong xử lý ảnh cũng như các phân tích cao cấp thuộc về thị giác máy tinh (Computer Vision).
Nếu mục tiêu của bạn là phân hoạch một bức ảnh ra làm 2 phần, một là phần bao gồm các pixel không phải đường viền và hai là tập hợp các pixel thể hiện viền (Edge) thì bạn sẽ có thuật toán xử lý tìm viền trong ảnh (Edge Detection). Khi đó đặc tính giá trị (Intensity) của từng pixel sẽ được dùng để tính toán cùng các bộ lọc tần số cao (high pass filter) cho phép giữ lại những pixel thuộc về viền và loại bỏ những pixel không thuộc về tập viền.

Nếu mục tiêu của bạn là phân hoạch một bức ảnh ra làm 2 phần, một phần chứa các đối tượng (object hay foreground) trong bức ảnh và phần kia chứa nền ảnh thì bạn có thể dùng thuật toán phân hoạch dựa vào giá trị điểm ảnh (pixel) và ngưỡng hay còn gọi là phân hoạch ngưỡng (Thresholding Segmentation) (vui lòng đọc thêm bài viết về Ngưỡng để hiểu rõ hơn). Trong trường hợp bạn sử dụng đơn ngưỡng trong phân hoạch thì thuật toán tuân theo luật như sau:

g(x, y) = 1 when f(x, y) > T and = 0 when f(x, y) ≤ T

Trong đó g(x, y) là giá trị kết quả tại điểm ảnh có tọa độ (x, y); f(x, y) là giá trị điểm ảnh (x, y) của hình cần xử lý; T là ngưỡng.  Nếu bạn sử dụng một T duy nhất cho toàn bộ bức ảnh, có nghĩa là công thức trên áp dụng cho toàn ảnh trong quá trình phân hoạch thì ta gọi đó là cách dùng ngưỡng toàn cục (Global Thresholding), ngược lại bạn sử dụng ngưỡng khác nhau tùy theo từng vùng (Region) trong ảnh, T biến thiên theo từng vị trí khác nhau và được tính toán lại tại từng vùng ảnh, có nghĩa là công thức trên áp dụng cho từng vùng cục bộ của ảnh với T thay đổi thì đó gọi là phương pháp dùng ngưỡng cục bộ (Local Thresholding).

Như vậy với giải pháp phân hoạch ngưỡng trên ảnh, T là một nhân tố vô cùng quan trọng mang tính quyết định sự thành bại của thuật toán. Trong bài viết này Bioz giới thiệu Otsu, một thuật toán đơn giản để tính T phục vụ cho phân hoạch ảnh toàn cục.

Otsu là tên một nhà nghiên cứu người Nhật đã nghĩ ra ý tưởng cho việc tính ngưỡng T một cách tự động (adaptive) dựa vào giá trị điểm ảnh của ảnh đầu vào nhằm thay thế cho việc sử dụng ngưỡng cố định (fixed hay const). Phương pháp này cho kết quả là mỗi ảnh khác nhau có một ngưỡng tương ứng khác nhau bằng các bước xử lý như sau:
  1. Chọn một giá trị khởi tạo cho T (nên chọn giá trị mang tính công thức, ví dụ T = (min + max) / 2, T = giá trị trung bình, ... tránh dùng các giá trị mang tính định lượng thiết lập cứng).
  2. Phân hoạch ảnh sử dụng T. kết quả của bước này sẽ tạo ra 2 nhóm điểm ảnh: G1 chứa tất cả các điểm ảnh với giá trị (intensity) > T và G2 chứa các điểm ảnh với giá trị (intensity) <= T.
  3. Tính trung bình (Average hay Mean) m1 và m2 của các điểm ảnh thuộc G1 và G2.
  4. Tính lại T dựa vào m1 và m2: T = (m1 + m2) / 2
  5. Lặp lại bước 2 đến 4 cho tới khi nào giá trị chênh lệch giữa T củ và T mới là không đáng kể (nhỏ hơn một giá trị cho trước deltaT). deltaT thường được sử dụng là sai số từ các phép tính toán trong quá trình xử lý. Trong trường hợp này T được tính ở 4 sẽ có phép sai số là 1 / 2 * (giá trị đơn vị của điểm ảnh).   

Mã nguồn (được trích trong VnSLib) dưới đây sẽ giúp các bạn dễ dàng hơn trong việc hiểu vấn đề và có kinh nghiệm hơn trong triển khai thuật toán.

Các hàm tính toán hỗ trợ
Otsu

Ảnh nàng Lena:

và kết quả của phân hoạch ngưỡng dùng Otsu:


Binh Nguyen - Bioz    
Phân vùng ảnh và Otsu Reviewed by Bioz Nguyen on 12:33:00 PM Rating: 5
All Rights Reserved by IEEV © 2009 - 2016
Powered By Blogger, Designed by Sweetheme

Contact Form

Name

Email *

Message *

Powered by Blogger.