ĐẠI HỌC QUỐC GIA TP HCM
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
KHOA TOÁN TIN
PHÂN TÍCH XỬ LÝ ẢNH
BÁO CÁO BÀI TẬP THỰC HÀNH
NHẬN DẠNG ĐƯỜNG CẤM Ô TÔ
Giáo viên hướng dẫn : Th.S Phạm Thế Bảo
Nhóm thực hiện : Nguyễn Việt Hùng 0511123
Nguyễn Đức Thành 0511214
Cao Quốc Toản 0511233
Yêu cầu bài toán
Xác định đường cấm ô tô thông qua việc nhận dạng
biển báo cấm ô tô ?
Tìm các đối tượng màu đỏ
a.Lấy thông tin 3 lớp màu
b.Chuyển về ảnh nhị phân
function kq = tach_doi_tuong_do(a)
b1=a(:,:,1);
b2=a(:,:,2);
b3=a(:,:,3);
s=size(a);
for i=1:s(1)
for j=1:s(2)
Y(i,j)=0.2989*b1(i,j)+0.5866*b2(i,j)+0.1145*b3(i,j);
Cr(i,j)=(b1(i,j)-Y(i,j))/(2-2*0.2989);
end
end
for i=1:s(1)
for j=1:s(2)
if Cr(i,j)>=25 & Cr(i,j)<=127
c1(i,j)=1;
else
c1(i,j)=0;
end
end
end
kq = c1;
Lấp ‘lổ’ trong các đối tượng
function kq = search_adjust_red_object(a)
b = tach_doi_tuong_do(a);
b = imfill(b,'holes');
se =strel('square',35);
b = imopen(b,se);
kq = b;
• Loại bỏ các đối tượng có kích thước nhỏ
• Tách những đối tượng có dạng hình tròn
• Tìm biên của các đối tượng
• Kiểm tra biên có dạng hình tròn -> tách ra và lưu
vào ma trận có cùng kích thước
Vị trí là biên -> gán 1 cho ma trận mới
Ngược lại -> gán 0
Áp ma trận vừa tìm dc lên ma trận ban đầu
Những pixel nằm trong mặt nạ này -> giữ nguyên
Nằm ngoài -> gán = 255
function kq = cut_circle(a,anh_mau)
% nhap : bien doi tuong va anh ban dau
% xuat : la hinh tron duoc giu nguyen phan ben ngoai mau trang
minx = min(a(:,1));
maxx = max(a(:,1));
miny = min(a(:,2));
maxy = max(a(:,2));
x0 = (minx+maxx)/2;
y0 = (miny+maxy)/2;
r = max(maxx-minx,maxy-miny)/2;
%tang them ban kinh cua vong tron vi bi giam nho dung strel
r = r+r/20;
for i = 1:size(anh_mau,1)
for j = 1:size(anh_mau,2)
if sqrt((i-x0)^2+(j-y0)^2)>r
anh_mau(i,j,:)=255;
end
end
end
%cat hinh tron tu anh ban dau
l = r;
tam = imcrop(anh_mau,[y0-l x0-l 2*l 2*l]);
kq = tam;
Kiểm tra có phải là biển báo cấm ôtô
• Tính tỉ lệ pixel màu trắng so với tổng số pixel
trong khoảng bán kính 3R/4
• So sánh với ngưỡng khảo sát -> rút ra kết luận
function kq=la_bien_bao_oto(bien,a)
kq = 1;
b=cut_circle(bien,a);
if ~has_while_background(b)
kq = 0;
return;
end
Kết quả