Đề tài Viết chương trình xử lý ảnh để tính tiền trong máy bán hàng tự động
Để xác định đồng xu nào có giá trị tương ứng với 100,200,1000,2000,5000 ta
phải xác định bán kính của từng hình tròn. Ta sẽ dùng biến đổi Euclidean, sau đó giá trị lớn
nhất của mảng chứa biến đổi trên chính là bán kính của hình tròn. Dựa vào bán kính ta sẽ
biết dc giá trị, sau đó xuất ra màn hình.
Đề tài 6 :
Viết chương trình xử lý ảnh
để tính tiền trong máy bán
hàng tự động
Nhóm 1 :
Trần Đăng Khoa
Trần Minh Khuê
Trần Đăng Hưng
Mạch Y Vinh
Mai Thế Anh
Giải Thuật :
Bước 1 : Chuyển hình ảnh các đồng xu trong ảnh RGB sang ảnh các mức xám (ảnh nhị
phân)
Bước 2 : Ta sẽ tách đường biên của ảnh, là các điểm ảnh có độ chói thay đổi đột ngột. Do
hình ảnh khá dư sáng nên khi tách ra ta vẫn dc các đốm đen trong đồng xu.
Bước 3: Nhiệm vụ của ta bây giờ là tách lọc bỏ hoàn toàn các đốm đen bên trong đồng xu
và dùng hàm strel để các đồng xu là 1 hình tròn nguyên vẹn.
Bước 4 : Để tách được hình tròn trong hình trên, ta phải đánh số thứ tự các vùng ảnh lân
cận nhau bằng hàm Label và lưu giữ từng hình tròn trong 1 ma trận.
Sau đây là hình ảnh tách ra của từng đồng xu :
Bước 6 : Để xác định đồng xu nào có giá trị tương ứng với 100,200,1000,2000,5000 ta
phải xác định bán kính của từng hình tròn. Ta sẽ dùng biến đổi Euclidean, sau đó giá trị lớn
nhất của mảng chứa biến đổi trên chính là bán kính của hình tròn. Dựa vào bán kính ta sẽ
biết dc giá trị, sau đó xuất ra màn hình.
Code chương trình xử lý ảnh và cho biết giá trị của đồng xu
close all;
clear all;
clc;
fprintf('Bai tap Xu ly am thanh hinh anh \n Nhom 1 : \n Tran Dang Khoa \n Mach Y Vinh \n
Tran Dang Hung \n Tran Minh Khue\n Mai The Anh \n')
fprintf('\n De bai : Nhan dien gia tri cac dong xu tu hinh anh bang Matlab \n')
% Huong dan su dung : Nhap ten duong dan file vao Matlab hoac dung hinh anh
% co san theo vi du sau
% vd : | Xin moi nhap vao ten file anh(dinh dang *.jpeg) :tien_xù.jpg|
file = input('\n Xin moi nhap vao ten file anh(dinh dang *.jpeg) :','s'); %Xuat ra man hinh
chuoi ki tu va dua du lieu vao
I = imread(file);% Nhap hinh anh de xu ly
I=rgb2gray(I);% Chuyen hinh anh RGB thanh anh xam
figure;imshow(I);%Hien thi anh sau khi chuyen sang cac muc xam
c = edge(I, 'canny',0.3); % Tach bien cua anh, voi nguong la 0.3
figure; imshow(c);
se = strel('disk',2); %Tao cau truc ma tran loc hinh tron
I2 = imdilate(c,se); %Gian no anh theo cau truc cua ham strel vua tao ra
imshow(I2);
d2 = imfill(I2, 'holes'); % To vung trong moi dong tien
figure, imshow(d2);
Label=bwlabel(d2,4); %Gan nhan cho cac thanh phan co trong anh
%Tao ma tran kich thuoc tuong ung voi moi dong xu
a1=(Label==1);
a2=(Label==2);
a3=(Label==3);
a4=(Label==4);
a5=(Label==5);
T=[5000 1000 200 500 2000];
string='Hinh %d co gia tri %d VND \n';
notstring='Day khong phai la dong xu co gia tri VND \n';
disp('Theo thu tu cac hinh hien thi o Figure, cac dong xu co gia tri la : ')
for n = 4:8
if (n==4) m=a1;
elseif (n==5) m=a2;
elseif (n==6) m=a3;
elseif (n==7) m=a4;
else m=a5;
end
k= bwdist(~m); % Tinh khoang cach Euclidean toi pixel khac 0 gan nhat
figure, imshow(k,[]), % Hien thi anh D1 voi cac muc xam, theo nguong min max cua ma
tran dua vao
rad=max(max(k)); % Gia tri lon nhat cua array chinh la ban kinh duong dong xu
% Ham xac dinh dong xu theo ban kinh
if (rad>95)&(rad<96)
fprintf(string,n,T(1))
elseif (65<rad) & (rad<66)
fprintf(string,n,T(2))
elseif (75<rad) & (rad<76)
fprintf(string,n,T(3))
elseif (82<rad) & (rad<83)
fprintf(string,n,T(4))
elseif (86<rad) & (rad<88)
fprintf(string,n,T(5))
else
fprintf(notstring)
end
end
Các hàm dùng trong chương trình :
close : xóa 1 cửa sổ xác định
close all : xóa toàn bộ cửa sổ đang thực thi hoặc ẩn
clear: xóa không gian làm việc
clear all: xóa toàn bộ hàm , giá trị , m flie khỏi không gian làm việc
clc : xóa cửa sổ lệnh
fprintf : ghi dữ liệu vào file text
fprintf(‘A \n,B \n ... ‘) : xuất A,B ra thành từng dòng trên màn hình
input : yêu cầu nhập dữ liệu vào và trả về dữ liệu dc nhập
user_entry = input('prompt', 's') : giá trị đưa vào là một chuỗi kí tự chứ ko phải tên biến
hoặc giá trị số
imread: đọc các file ảnh
[...] = imread(filename) : đọc file ảnh có tên filename
rgb2gray: chuyển đổi ảnh màu RGB thành ảnh xám
edge: tách biên của ảnh
[g , t ] = edge(f, canny, T, sigma): Trong đó T là một vectơ, là 2 ngưỡng được giải thích
trong bước 3 của thủ tục trước và sigma là độ lệch chuẩn của bộ lọc làm trơn. Nếu t gộp
vào thông số ngõ ra, nó là vectơ 2 phần tử chứa 2 giá trị ngưỡng được dùng bởi thuật
toán. Cú pháp đơn giản được giải thích như các phương pháp khác, bao gồm việc tự động
tính toán T nếu nó không được cung cấp. Giá trị mặc định của sigma là 1
figure : tạo 1 cửa sổ mới
imshow : hiển thị ảnh
imshow(c ): hiển thị ảnh xám
File đính kèm:
de_tai_viet_chuong_trinh_xu_ly_anh_de_tinh_tien_trong_may_ba.pdf

