Đề 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