Các lệnh xử lý ảnh trong matlab otsu

1.1.      Mục tiêu

Giúp người đọc hiểu được thuật toán Otsu, từ đó vận dụng vào công việc tìm ngưỡng cho ảnh trong xử lí ảnh.

1.2.      Phân ngưỡng ảnh và thuật toán Otsu

1.2.1.          Khái niệm phân ngưỡng

Phân ngưỡng ảnh là tách hình ảnh của một một vùng ảnh ra khỏi ảnh nền.

1.2.2.          Lược đồ xám (Histogram)

Là một đồ thị dạng thanh biểu diễn tần suất xuất hiện các mức xám của ảnh. Trong đó trục hoành biểu diễn giá trị mức xám của ảnh có giá trị từ 0 đến 255, trục tung biểu diễn tần suất xuất hiện mức xám của ảnh.

Công thức tổng quát:

Các lệnh xử lý ảnh trong matlab otsu

Trong đó:  

Các lệnh xử lý ảnh trong matlab otsu
 là tần suất xuất hiện mức xám .

nk : giá trị điểm ảnh tại vị trí k.

Các lệnh xử lý ảnh trong matlab otsu

Hình 1: Lược đồ xám của ảnh

1.2.3.          Thuật toán Otsu

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 một cách tự động 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.

  • Đầu tiên sử dụng lược đồ Histogram biểu diễn tần suất xuất hiện mức xám:

Các lệnh xử lý ảnh trong matlab otsu

Trong đó: ni là số lượng điểm ảnh của giá trị i.

                   L : 1,2,3,…256.

po + p1 + p2 +…+ pL-1 = 1

  • Chọn một ngưỡng Tk = k, (0<k<L-1) để phân ảnh đầu vào thành 2 lớp C1 (tập hợp các điểm ảnh có giá trị ≤k) và C2 (tập hợp các điểm ảnh có giá trị lớn hơn k). Tỉ lệ lớp C1 với số lượng điểm ảnh k với tổng số lượng điểm ảnh được ký hiệu P1(k), tương tự C2 ký hiệu là P2(k).

Các lệnh xử lý ảnh trong matlab otsu

Sau đó ta tính giá trị trung bình m1 của lớp C1:

Các lệnh xử lý ảnh trong matlab otsu

Tương tự tính m2:

Các lệnh xử lý ảnh trong matlab otsu

  • Theo Otsu, ta sẽ tính ngưỡng k* mà giá trị tại đó sự chênh lệch giữa hai đoạn (màu nền và màu ký tự) đạt giá trị cực đại, ký hiệu
    Các lệnh xử lý ảnh trong matlab otsu
    , được tính:

Các lệnh xử lý ảnh trong matlab otsu

Trong đó

Các lệnh xử lý ảnh trong matlab otsu
 là phương sai hai lớp C1 và C2. Ta có:

Các lệnh xử lý ảnh trong matlab otsu

Từ công thức trên ta suy ra:

Các lệnh xử lý ảnh trong matlab otsu

Trong đó: mG là giá trị trung bình của ảnh. 

Các lệnh xử lý ảnh trong matlab otsu

mk là giá trị trung bình đến ngưỡng k. Với

Các lệnh xử lý ảnh trong matlab otsu

  • Nếu có nhiều giá trị
    Các lệnh xử lý ảnh trong matlab otsu
     lớn nhất bằng nhau, ta sẽ chọn k có giá trị lớn nhất làm ngưỡng k*, sau đó ta thực hiện nhị phân biển số theo theo ngưỡng.

g(x,y)=1 if f(x,y)<  và g(x,y)=0 if f(x,y) .

Trong đó: g(x,y) là ảnh đầu ra.

f(x,y) là ảnh đầu vào.

x=0,1,2,…,N-1.

y=0,1,2,…,M-1.

1.2.2.          Mô phỏng Matlab

Trong Matlab có hàm Graythresh() cho giá trị ngưỡng theo phương pháp Otsu.

Code:

I = imread('coins.png');
imshow(I)
level = graythresh(I);
BW = im2bw(I,level);
figure, imshow(BW)

Các lệnh xử lý ảnh trong matlab otsu

Hình 2: Ảnh xám đầu vào

Các lệnh xử lý ảnh trong matlab otsu

Hình 3: Ảnh sau khi dùng thuật toán Otsu