You are on page 1of 7

ĐẠI HỌC ĐÀ NẴNG

TRƯỜNG ĐẠI HỌC BÁCH KHOA


KHOA ĐIỆN TỬ - VIỄN THÔNG


BÀI TẬP K-MEAN


HỆ THỐNG THÔNG MINH

ĐỀ TÀI: Bài tập K-mean

Người hướng dẫn: TS. HOÀNG LÊ UYÊN THỤC

Nhóm 2: LƯƠNG THỊ KIM LỘC

HỒ TIẾN QUỐC

Lớp: K40.KĐT

Đà Nẵng, tháng 03/2021


Hệ thống thông minh

Đề bài: Color-Based Segmentation Using K-Means Clustering

Hình 3: Photo3.png

Bài làm:

1. Các bước thực hiện:


- Bước 1: Đọc ảnh
Đọc bức ảnh photo3.png, đó là hình ảnh một đóa hoa hồng và có lá hoa hồng.
Code matlab :
cd('F:\K40\he thong thong minh')
he = imread('photo3.png');
imshow(he), title('H&E image');
text(size(he,2),size(he,1)+15,...
'Image courtesy of Alan Partin, Johns Hopkins University', ...
'FontSize',7,'HorizontalAlignment','right');

Kết quả :

2
Hệ thống thông minh

- Bước 2: Chuyển đổi hình ảnh từ Không gian màu RGB sang Không gian màu L* a *
b *.
Trong hình ảnh có ba màu: đen, đỏ, xanh nếu bỏ qua các biến thể về độ sáng. Có thể dễ dàng
phân biệt các màu này với nhau bằng mắt thườn. Không gian màu L * a * b * (còn được gọi là
CIELAB hoặc CIE L * a * b *) cho phép định lượng những khác biệt trực quan này.
Không gian màu L * a * b * được lấy từ các giá trị kích thích tristimulus CIE XYZ. Không
gian L * a * b * bao gồm lớp độ sáng 'L *', lớp màu 'a *' cho biết vị trí màu rơi dọc theo trục đỏ-xanh
lục và lớp màu 'b *' cho biết vị trí màu rơi xuống trục màu xanh-vàng. Tất cả thông tin màu đều nằm
trong các lớp 'a *' và 'b *'. Bạn có thể đo sự khác biệt giữa hai màu bằng cách sử dụng số liệu khoảng
cách Euclide.
Chuyển đổi hình ảnh sang không gian màu L * a * b * bằng cách sử dụng makecform và
applycform.
Code matlab :
cform = makecform('srgb2lab');
lab_he = applycform(he,cform);
Kết quả :

- Bước 3: Phân loại màu sắc trong không gian 'a * b *' bằng cách sử dụng K-Means
Clustering.
Clustering là một cách để tách các nhóm đối tượng. K-means clustering coi mỗi đối tượng có
một vị trí trong không gian. Nó tìm thấy các phân vùng sao cho các đối tượng trong mỗi cụm càng
gần nhau càng tốt và càng xa các đối tượng trong các cụm khác càng tốt. K-means clustering yêu cầu
chỉ định số lượng cụm được phân vùng và số liệu khoảng cách để xác định mức độ gần nhau của hai
đối tượng.
Vì thông tin màu tồn tại trong không gian màu 'a * b *', các đối tượng là các pixel có giá trị 'a
*' và 'b *'. Chuyển đổi dữ liệu sang kiểu dữ liệu duy nhất để sử dụng với imsegkmeans. Sử dụng
imsegkmeans để phân cụm các đối tượng thành ba cụm.
Code matlab :

3
Hệ thống thông minh

ab = lab_he(:,:,2:3);
ab = im2single(ab);
nColors = 3;
% repeat the clustering 3 times to avoid local minima
pixel_labels = imsegkmeans(ab,nColors,'NumAttempts',3);
Kết quả :

- Bước 4: Gắn nhãn cho mọi pixel trong ảnh bằng cách sử dụng kết quả từ KMEANS
Đối với mọi đối tượng trong đầu vào của bạn, kmeans trả về một chỉ mục tương ứng với một
cụm. Đầu ra cluster_center từ kmeans sẽ được sử dụng ở phần sau trong ví dụ. Gắn nhãn mọi pixel
trong hình ảnh bằng cluster_index của nó.
Code matlab :
pixel_labels = reshape(cluster_idx,nrows,ncols);
imshow(pixel_labels,[]), title('image labeled by cluster index');
Kết quả :

4
Hệ thống thông minh

- Bước 5: Tạo Hình ảnh Phân đoạn Hình ảnh H&E theo Màu sắc.
Sử dụng pixel_labels, bạn có thể phân tách các đối tượng trong hestain.png theo màu sắc, điều
này sẽ dẫn đến ba hình ảnh.
Code matlab:
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;
end

imshow(segmented_images{1}), title('objects in cluster 1');

imshow(segmented_images{2}), title('objects in cluster 2');

imshow(segmented_images{2}), title('objects in cluster 3');


Kết quả :

- Bước 6: Phân đoạn hạt nhân thành một hình ảnh riêng biệt
Chú ý rằng có các đối tượng màu xanh lam đậm và nhạt ở một trong các cụm. Có thể tách
màu xanh lam đậm khỏi xanh lam nhạt bằng cách sử dụng lớp 'L *' trong không gian màu L * a * b *.
Nhân tế bào có màu xanh lam đậm.
Nhớ lại rằng lớp 'L *' chứa các giá trị độ sáng của mỗi màu. Tìm cụm có chứa các đối tượng
màu xanh lam. Trích xuất các giá trị độ sáng của các pixel trong cụm này và phân ngưỡng chúng
bằng cách sử dụng im2bw.
Phải xác định theo chương trình chỉ mục của cụm chứa các đối tượng màu xanh lam vì
kmeans sẽ không trả về cùng một giá trị cluster_idx mọi lúc. Bằng cách sử dụng giá trị cluster_center,
chứa giá trị 'a *' và 'b *' trung bình cho mỗi cụm. Cụm màu xanh lam có giá trị cluster_center nhỏ
nhất (được xác định bằng thực nghiệm).
Code matlab:
L = lab_he(:,:,1);
5
Hệ thống thông minh

blue_idx = find(pixel_labels == blue_cluster_num);


L_blue = L(blue_idx);
is_light_blue = im2bw(L_blue,graythresh(L_blue));
Kết quả :

Sử dụng mặt nạ is_light_blue để gắn nhãn các pixel nào thuộc về các hạt nhân màu xanh lam.
Sau đó, hiển thị các hạt nhân màu xanh lam trong một hình ảnh riêng biệt.
Code matlab:
nuclei_labels = repmat(uint8(0),[nrows ncols]);
nuclei_labels(blue_idx(is_light_blue==false)) = 1;
nuclei_labels = repmat(nuclei_labels,[1 1 3]);
blue_nuclei = he;
blue_nuclei(nuclei_labels ~= 1) = 0;
imshow(blue_nuclei), title('blue nuclei');

6
Hệ thống thông minh

2. Kết quả mô phỏng theo đề bài :


Ảnh gốc Ảnh đã tách

3. Kết luận
Việc sử dụng K-Means Clustering để phân đoạn hình ảnh dựa trên màu sắc, nó có thể làm
giảm được chi phí tính toán và tránh được tính toán đặc trưng cho từng pixel trong hình ảnh. Mặc
dù, màu sắc không thường xuyên được sử dụng cho phân đoạn ảnh. Nó cho thấy được sự phân
biệt rõ ràng của các vùng đại diện trong ảnh. Loại phân đoạn ảnh này có thể được dùng để lập bản
đồ về sự thay đổi độ che phủ của đất qua các thời kỳ, phát triển một hình ảnh chính xác và đáng
tin cậy hơn mà có thể được sử dụng trong xác định vị trí khối u, nhận dạng khuôn mặt, nhận dạng
vân tay và trong việc định vị một đối tượng rõ ràng từ một hình ảnh vệ tinh. Ưu điểm của thuật
toán K-means là đơn giản và khá hiệu quả. Nó hoạt động tốt khi các cụm không phân biệt được
một cách rõ ràng chẳng hạn như hình ảnh trên website...

You might also like