Professional Documents
Culture Documents
Bài 1. Morphology
Gọi I là ảnh “circles.png” (Matlab).
Yêu cầu: lấp khoảng trống giữa các hình tròn trong ảnh I, mà không ảnh
hưởng đến các đường biên bên ngoài, như hình dưới đây (bên trái là ảnh
gốc I, bên phải là ảnh mong đợi sau khi xử lý).
subplot(1,2,1);
imshow(I)
title('Original Image');
subplot(1,2,2);
out=imfill(I,'holes');
imshow(out)
title('Result Image');
Phương pháp giải thứ hai được thực hiện bằng morphology (xử lí hình
thái học). Phương pháp thực hiện phép đóng ảnh trước và mở ảnh sau vì
các phương pháp này tác động trực tiếp giống như phép co ảnh và giãn
ảnh nhưng chúng sẽ không thay đổi quá nhiều kích thước cũng như các
đặc trưng của đối tượng. Sau khi dùng phép đóng mở ảnh thì các điểm
màu đen đã bị xóa sau đó dùng phép co ảnh để đối tượng sau khi biến
đổi nhỏ hơn đối tượng đầu. Cộng hai lớp trước và sau với nhau thì các
điểm đen của đối tượng đầu bị đối tượng sau lấp đi. Sử dụng cấu trúc
mặt nạ là dạng hình đĩa do các đối tượng có đặc trưng là hình tròn.
Code Matlab:
I=imread('circles.png');
se=strel('disk',12);
I1=imclose(I,se);
I2=imopen(I1,se);
I3=imerode(I2,se);
im = I + I3;
subplot(2,3,1);
imshow(I);
title('Original Image');
subplot(2,3,2);
imshow(I1);
title('Close Image');
subplot(2,3,3);
imshow(I2);
title('Open Image');
subplot(2,3,4);
imshow(I3);
title('Erode Image');
subplot(2,3,5);
imshow(im);
title('Result Image');
cform=makecform('srgb2lab');
lab_img=applycform(I,cform);
ab=double(lab_img(:,:,2:3));
nrows=size(ab,1);
ncols=size(ab,2);
ncolors=5;
ab=reshape(ab,nrows*ncols,2);
[cluster_idx,cluster_center]=kmeans(ab,ncolors,'distance','s
qEuclidean','Replicates',3);
pixel_labels=reshape(cluster_idx,nrows,ncols);
segmented=cell(1,3);
rbg=repmat(pixel_labels,[1,1,3]);
for k=1:ncolors
color=I;
color(rbg~=k)=0;
segmented{k}=color;
end
subplot(3,2,2);
imshow(segmented{1}), title('objects in cluster 1');
subplot(3,2,3);
imshow(segmented{2}), title('objects in cluster 2');
subplot(3,2,4);
imshow(segmented{3}), title('objects in cluster 3');
subplot(3,2,5);
imshow(segmented{4}), title('objects in cluster 4');
subplot(3,2,6);
imshow(segmented{5}), title('objects in cluster 5');
Bài 3. PCA
Bài tập này sử dụng ảnh tập ảnh “New” (đã biết ở lớp).
a) Tìm các thành phần chính từ tập ảnh trên. Hiển thị một vài thành phần
quan trọng nhất (ví dụ 5). Giải thích cách làm.
b) Chọn và hiển thị hai thành phần quan trọng nhất. Chiếu các ảnh trong tập
“New” lên hai thành phần này. Hiển thị kết quả chiếu và nhận xét.
Chú ý: có thể giảm kích thước ảnh (dùng lệnh imresize) nếu cần thiết.
Bài làm
Code:
clc;
clear all;
close all;
images = [];
image = 'new/';
imagefiles = dir('new\*.jpg');
nfiles = length(imagefiles);
for i=1:nfiles
currentfilename = strcat( image,imagefiles(i).name);
I = imread(currentfilename);
I = rgb2gray(I);
I = imresize(I, [64 (size(I,2)*64)/size(I,1)]);
I = reshape(I, [1,size(I,1)*size(I,2)]);
images = [images;I];
end
images = double(images);
N = size(images,1);
x = images(1,:);
for i = 2:N
x = x + images(i,:);
end
x = x/N;
for i = 1:N
X(i,:) = images(i,:) - x;
end
S = X'*X/N;
[v,d] = eig(S);
%a)
figure,subplot(121), imshow(reshape(images(1,:),[64, size(images(1,:),2)/64]),[]);
title('original')
K = 15;
m = v(:,end-K+1:end);
j = X*m;
A = j*m';
A = A(1,:) + x;
subplot(122), imshow(reshape(A,[64, size(A,2)/64]),[]);
title(strcat('K = ',int2str(K)))
%b)
figure;
K = 2;
m = v(:,end-K+1:end);
j = X*m;
A)
Giải thích cách làm :
1. Tính vector kì vọng của toàn bộ dữ liệu
4. Tính các trị riêng và vector riêng có norm bằng 1 của ma trận này, sắp xếp chúng theo thứ
tự giảm dần của trị riêng
5. Chọn K vector riêng ứng với K trị riêng lớn nhất để xây dựng ma trận UK có các cột tạo
thành một hệ trực giao. K vectors này, còn được gọi là các thành phần chính, tạo thành
một không gian con gần với phân bố của dữ liệu ban đầu đã chuẩn hoá.
Kết quả :
B)
Kết quả:
Nhận xét : kết quá chiếu các ảnh trong tập new phân bố rời rạc, không đồng đều về mặt vị trí.