KHÔNG GIAN L*a*b* VÀ THUẬT TOÁN K-MEAN

Một phần của tài liệu Tìm hiểu phương pháp phân đoạn ảnh màu và ứng dụng (Trang 77 - 81)

ỨNG DỤNG PHÂN ĐOẠN ẢNH MÀU

3.2 KHÔNG GIAN L*a*b* VÀ THUẬT TOÁN K-MEAN

3.2.1 Phân tích chương trình Bước 1: Đọc ảnh

Trước hết ảnh đầu vào được chuyển sang ma trận, mỗi phần tử của ma trận mang giá trị của một pixel. Ma trận ở đây là he: he = imread('bando.png');

Bước 2: Chuyển đổi từ không gian màu RGB sang không gian màu L*a*b*

Chuyển đổi hình ảnh sang không gian màu L*a*b* bằng cách sử dụng hàm makecformapplycform.

cform = makecform('srgb2lab');

lab_he = applycform(he,cform);

Bước 3: Phân lớp không gian a*b* bằng cách sử dụng K-means clustering

Gom nhóm là thực hiện việc gom các pixel vào các nhóm khác nhau, mỗi nhóm có một màu khác nhau tương ứng với mỗi vùng ảnh sau khi phân đoạn xong.

việc phân đoạn mà làm sao cho mỗi pixel trong một nhóm càng gần nhau càng tốt và càng xa các đối tượng trong nhóm khác càng tốt. K-means clustering đòi hỏi phải chỉ rõ số lượng nhóm để phân đoạn và khoảng cách để xác định hai pixel trong nhóm khác nhau.

Xuất phát từ các trục tọa độ biểu thị không gian a*b*, mỗi Pixel tương ứng với các giá trị a* và b*. Sử dụng K-means để phân nhóm các đối tượng ra thành các nhóm bằng việc sử dụng khoảng cách hình học Ơclit. Thuật toán được thể hiện trong hàm kmeans:

ab = double(lab_he(:,:,2:3));

nrows = size(ab,1); % Số hàng của ma trận ab ncols = size(ab,2); % Số cột của ma trận ab

ab = reshape(ab,nrows*ncols,2); %Chuyển ab sang nrows*ncols và 2 cột nColors = 3; % số màu (số đoạn) cần tách.

[cluster_idx cluster_center] =

kmeans(ab,nColors,'distance','sqEuclidean', ...

'Replicates',3);

Bước 4: Gán nhãn cho mỗi Pixel trong ảnh từ kết quả của kmeans

Kết quả đầu ra của thuật toán thông qua hàm kmeans là hai ma trận cluster_idxcluster_center. Ma trận Cluster_center chính là tâm của 3 vùng màu khác nhau, đây là các giá trị trung bình theo Ơclit của a* và b* với mỗi vùng.

Chúng sẽ được sử dụng trong bước 6. Ma trận cluster_idx chứa nhãn của mỗi Pixel trong ảnh. Với đầu vào là một ảnh cụ thể như trên, Cluster_center có giá trị như sau: a* b*

3 2 1 121.3532

31.3185 150.8760 124.7976

183.5812 86.6252 nter

Cluster_ce

Vung VungVung





=

Chuyển ma trận cluster_idx về kích thước ban đầu và được lưu vào ma trận pixel_labels:

pixel_labels = reshape(cluster_idx,nrows,ncols);

Hiển thị hình ảnh sau khi đã gán nhãn, kết quả xem ở hình 3.2 b : figure; imshow(pixel_labels,[]), title(‘Ảnh đã gán nhãn’);

Bước 5: Tạo ra các ảnh tương ứng vơi các vùng màu khác nhau

Ta sử dụng ma trận hình ảnh đã được gán nhãn ở trên (pixel_labels), và có thể phân chia các đối tượng trong hình ảnh trên bằng màu sắc khác nhau. Ở đây cho 3 kết quả với 3 hình có vùng màu khác nhau.

Tạo ra 3 ma trận segmented_images rỗng để chứa kết quả của 3 vùng:

segmented_images = cell(1,3);

rgb_label = repmat(pixel_labels,[1 1 3]);

for k = 1:nColors color = he;

color(rgb_label ~= k) = 0;

segmented_images{k} = color;

imshow(segmented_images{k}), title(‘’); % Hiển thị kết quả end

rgb_label là ma trận ảnh có các giá trị trong khoảng [0..3]. color là ma trận ảnh ban đầu. Với mỗi thứ tự màu k (vùng), xét từng pixel trong Color, nếu với vị trí tương ứng mà pixel này trong rgb_label có giá trị tương đương (~= ) với giá trị k thì pixel trong Color được gán bằng 0, pixel ở vị trí tương ứng trong segmented_images{k} cũng nhận giá trị là 0. Ngược lại giá trị của pixel tương ứng trong Color không thay đổi và pixel tương ứng trong segmented_images{k} sẽ nhận giá trị của Color.

Như vậy, sau 3 vòng lặp ở trên sẽ tạo ra 3 ma trận ảnh (3 vùng ảnh) với từng màu tương ứng; các điểm ảnh của màu còn lại sẽ nhận giá trị 0. Và như vậy khi hiển thị ảnh của từng vùng sẽ nổi lên màu của vùng đó, và các màu còn lại sẽ thay bằng màu đen.

3.2.2 Kết quả phân đoạn

Dưới đây (Hình 3.2) là kết quả của của thuật toán khi áp dụng số vùng màu cần phân chia là 2:

a) Ảnh ban đầu b) Sau khi gán nhãn

c) Vùng màu thứ nhất d) Vùng màu thứ hai Hình 3.2 Kết quả phân đoạn bằng thuật toán K-mean với vùng chia là 2

Dưới đây (Hình 3.3) là kết quả khi áp dụng số vùng màu cần phân chia là 3:

a) Ảnh ban đầu b) Sau khi gán nhãn

c) Vùng màu thứ nhất d) Vùng màu thứ hai

e) Vùng màu thứ ba

Hình 3.3 Kết quả phân đoạn bằng thuật toán K-mean với vùng chia là 3

Giữa vùng bằng 2 và 3 đã có sự khác biệt. Để ý thầy vùng 3.2d đã được tách ra thành vùng 3.3d và 3.3e.

Để làm rõ hơn nữa ta chọn số vùng cần phân chia là 4, kết quả thể hiện qua Hình 3.4 dưới đây.

a) Ảnh ban đầu b) Sau khi gán nhãn

c) Vùng màu thứ nhất d) Vùng màu thứ hai

e) Vùng màu thứ ba f) Vùng màu thứ tư

Hình 3.4 Kết quả phân đoạn bằng thuật toán K-mean với vùng chia là 4

Qua việc chọn số vùng phân chia khác nhau là 3 và 4, ta thấy ngay kết quả phân vùng cũng khác nhau. Trường hợp chọn số vùng là 4 thì kết quả có thêm như ở hình 3.4f. Nếu để ý kĩ, ta thấy vùng f này được tách thêm ra từ vùng 3.3e và 3.3d.

Sự khác biệt được thể hiện rõ nhất trong vùng f, e, f.

Một phần của tài liệu Tìm hiểu phương pháp phân đoạn ảnh màu và ứng dụng (Trang 77 - 81)

Tải bản đầy đủ (DOC)

(88 trang)
w