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:

Trong đó:  

 là tần suất xuất hiện mức xám .

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

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:

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).

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

Tương tự tính m2:

  • 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 tính:

Trong đó

 là phương sai hai lớp C1 và C2. Ta có:

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

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

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

  • Nếu có nhiều giá trị
     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)

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

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

Chủ đề