SỬ DỤNG PHẦN MỀM MATLAB ĐỂ XỬ LÝ ẢNH TỪ BỨC ẢNH BIỂN SỐ BÌNH THƯỜNG SANG DẠNG KÝ TỰ. CHƯƠNG TRÌNH SỬ DỤNG NHẬN DẠNG QUANG HỌC ORC ĐỂ NHẬN DẠNG KÝ TỰ. NGOÀI RA TÀI LIỆU CÒN CÓ HƯỚNG DẪN CÁCH XỬ LÝ ẢNH SỐ CƠ BẢN NHƯ CẮT XÉN, LÀM XÁM , NHỊ PHÂN ẢNH.
Trang 1Trường Đại Học Giao Thông Vận Tải
Trang 2Chương 1: GIỚI THIỆU VỀ ĐỀ TÀI 4
1.1.Lý do chọn đề tài 5
1.2.Nội dung đề tài 5
1.3.Giới hạn đề tài 6
1.4 Mục tiêu 7
Chương 2: CÁC DẠNG ẢNH CƠ BẢN 8
2.1.Ảnh Index
8
2.2.Ảnh grayscale
9
2.3.Ảnh nhị phân
9
2.4.Ảnh RGB
10
Chương 3: XỬ LÝ ẢNH BIỂN SỐ XE 11
3.1.Tổng quan về tải ảnh lên để xử lý
Trang 33.2.Tổng quan về tách biển số
12 3.3.Tổng quan về nhận dạng ký tự và số
13 Chương 4: THỰC HIỆN ĐỀ TÀI TRÊN MATLAB
18 4.1 Giới thiệu giao diện gui
18 4.2 Tạo giao diện gui
18 4.3 Code của chương trình matlab
20 NHẬN XÉT CỦA GIẢNG VIÊN
Trang 4
TP.HCM , Ngày……Tháng……Năm 2019.
Chữ ký giảng viên
Lời mở đầu
Trang 5Nó đã được ứng dụng vào nhiều lĩnh vực như:
Trong y học, cải thiện ảnh X-quang và nhận dạng đường biên mạch máu từ ảnh chụp bằng tia X , ứng dụng vào các xét nghiệm lâm sang như phát hiện và nhận dạng u não, nội soi cắt lớp…
Trong thiên văn học, hệ thống chụp hình gắn trên tàu vũ trụ hạn chế về kích thước và trọng lượng, do đó chất lượng hình ảnh nhận được
bị giảm chất lượng như bị mờ, méo hình học và nhiễu nền Các hình ảnh đó được xử lý bằng máy tính.
Trong các lĩnh vực công nghiệp, người máy ngày càng đóng vai trò quan trọng Chúng thực hiện các công việc nguy hiểm, đòi hỏi có tốc
độ và độ chính xác cao vượt quá khả năng con người Người máy sẽ trở nên tinh vi hơn và thị giác máy tính đóng vai trò quan trọng hơn Người ta sẽ không chỉ đòi hỏi người máy phát hiện và nhận dạng các bộ phận công nghiệp
mà còn phải “ hiểu ” được những gì chúng “ thấy ” và đưa ra hành động phù hợp Xử lý ảnh sẽ tác động đến thị giác của máy tính.
Ngoài ra, xử lý và nhận dạng còn được ứng dụng trong lĩnh vực khác ít được nói đến hơn Công an giao thông thường hay chụp ảnh trong môi trường không thuận lợi, ảnh thường bị nhòe nên cần được xử lý và nhận dạng để có thể nhìn thấy biển số xe.
Trong báo cáo này nhóm em xin trình bày một ứng dụng của xử lý và
nhận dạng số là XỬ LÝ ẢNH BIỂN SỐ XE.
Chương 1: GIỚI THIỆU VỀ ĐỀ TÀI
Trang 61.1.Lý do chọn đề tài:
Cùng với sự phát triển khoa học kỹ thuật, nhu cầu đi lại của con người ngày càng tăng, lưu lượng giao thông ngày càng lớn Với số lượng phương tiện giao thông ngày càng lớn và còn không ngừng tăng thì việc quản lý các phương tiện giao thông gặp rất nhiều khó khăn do đó cần có một hệ thống tự động Một trong những hệ thống đó là hệ thống nhận dạng biển số xe Đó là một hệ thống có khả năng “đọc” và “hiểu”các biển số xe một cách tự động.
Trong đồ án này, nhóm đã xây dựng hệ thống để quản lý bãi giữ xe bởi
vì các bãi giữ xe hiện nay còn có vấn đề bất cập như:
Tốn nhiều nhân công.
An toàn chưa cao, vẫn còn xảy ra hiện tượng mất xe.
Vé xe bằng giấy, dễ bị mất hay nhàu nát.
1.2 Nội dung đề tài
BẮT ĐẦU
Trang 7Sơ đồ quá trình nhận dạng
Thu nhập ảnh: ảnh được tải lên từ máy tính
Khi ảnh được tải lên Có 2 trường hợp xảy ra đó là :
+ Ảnh toàn bộ là biển số xe Ở trường hợp nay ta xử lý trực tiếp.
+ Ảnh full gồm xe, biển số xe, ngoại cảnh v.v Ở trường hợp này ta phải qua bước cắt ảnh để loại bỏ bớt các yếu tố dẫn đến sai lệch ở quá trình nhận dạng.
Trang 8 Cắt ảnh: ảnh full sẽ được sử lý ở bước này nhằm loại bỏ các yếu tố làm sai lệch cho quá trình nhận dạng Để bức ảnh ở trạng thái tốt nhất cho quá trình xử lý.
Làm xám ảnh: đưa bức ảnh màu về dạng ảnh xám.
Nhị phân ảnh: Sau khi xám ảnh ta lấy loại bỏ các phần mờ không rõ ràng bằng cách lấy nhị phân ảnh Việc xử lý này giúp nhận dạng ký tự một cách chuẩn xác hơn.
Nhận dạng kí tự : nhận dạng các kí tự của biển số bằng phương pháp nhận dạng kí tự quang học (OCR).
Kết quả nhận dạng: đưa ra kết quả nhận dạng biển số.
1.3.Giới hạn đề tài :
Việc có nhiều biển số xe với định dạng và độ sáng khác nhau gây khó khăn cho việc nhận dạng Do quá trình nhận dạng dựa vào phương pháp xử lý ảnh và trích xuất biển số từ ảnh chụp nên độ sáng khác nhau làm tăng độ phức tạp trong quá trình nhận dạng.
Do thời gian thực hiện đề tài không cho phép nên nhóm giới hạn các biển số và điều kiện như sau:
Biển số có chữ đen, nền trắng, có 2 hàng.
Biển số phải còn nguyên vẹn, không bị tróc sơn hay rỉ sét, không bị che khuất.
Góc nghiêng của biển số không quá 450 so với phương ngang.
Hình chụp biển số không bị mờ, ký tự biển số còn phân biệt, nhận dạng được bằng trực quan.
Không bị nhiễu bởi ánh sáng làm ảnh chụp bị chói.
Trang 9Chương 2: CÁC DẠNG ẢNH CƠ BẢN
2.1 Ảnh Index
Ảnh được biểu diễn bởi hai ma trận, một ma trận dữ liệu ảnh X và một
ma trận màu (còn gọi là bản đồ màu) map Ma trận dữ liệu có thể thuộc kiểu uint8, uint16 hoặc double Ma trận màu là một ma trận kich thước m x 3 gồm các thành phần thuộc kiểu double có giá trị trong khoảng [0 1] Mỗi hàng của
ma trận xác định thành phần red, green, blue của một màu trong tổng số m màu được sử dụng trong ảnh Giá trị của một phần tử trong ma trận dữ liệu ảnh cho biết màu của điểm ảnh đó nằm ở hàng nào trong ma trận màu.
2.2 Ảnh grayscale:
Mỗi ảnh được biểu diễn bởi một ma trận hai chiều, trong đó giá trị của mỗi phần tử cho biết độ sang (hay mức xám) của điểm ảnh đó Ma trận này có thể một trong các kiểu uint8, uint16 hoặc double Ảnh biểu diễn theo kiểu này còn gọi là ảnh „trắng đen‟.
Trang 11Chương 3: XỬ LÝ ẢNH BIỂN SỐ XE
3.1.Tổng quan về tải ảnh lên để xử lý:
Trang 12Đây là bước đầu tiên trong việc xử lý ảnh Ảnh được chụp từ camera lưu vào một tệp tin cố định trong PC Để lấy ảnh từ tệp đó ta sử dụng hàm
“ uigetfile “
Ví dụ :
[filename path] = uigetfile({'*.jpg;*.png','Image file';'*.*','All
file'},'Open Image');
Trong đó:
- filename: Là giá trị trả về bạn nhận được khi bạn click vào file nào đó
(Trả về tên file)
- path: Trả về đường dẫn tới file đó
- '*.jpg;*.png','Image file' : Là các định dạng có đuôi bạn quy định sẵn
mà bạn cho phép người dùng chọn Ở đây là file dạng hình ảnh.
Đoạn code trong chương trình:
function btnLoadImage_Callback(hObject, eventdata, handles)
% hObject handle to btnLoadImage (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global srcImg;
set(handles.btnTachBienSo,'Enable','off');
set(handles.btnOCR,'Enable','off');
set(handles.pushbutton5,'Enable','off');
set(handles.pushbutton6,'Enable','off');
set(handles.pushbutton8,'Enable','off');
[filename path] = uigetfile({'*.jpg;*.png','Image file';'*.*','All
file'},'Open Image');
set(handles.pushbutton5,'Enable','on');
set(handles.pushbutton6,'Enable','on');
Trang 13Hình ảnh thực tế
Ngoài việc thực hiện tải ảnh lên từ thư mục trong máy tính Ở bước này
em thực hiện tiền xử lý hỉnh ảnh đưa hình ảnh về kích thước chuẩn chung cho các ảnh đầu vào Chỉnh sửa việc on , off của các nút nhấn để phù hợp với
chương trình Khi tải ảnh lên ảnh sẽ xuất hiện ở axes axsSrcImg
3.2.Tổng quan về tách biển số:
Tách biển số là một bước rất quan trọng trong quá trình nhận dạng biển số xe.
Khối tách biển số xe được chia làm 2 giai đoạn chính:
Giai đoạn 1: Định vị trí của biển số trong ảnh chụp Ảnh được chụp là từ một góc chụp của camera, vị trí đậu xe khi chụp ảnh cũng giống như nhau ta chỉ cần xác định tọa độ của vùng chứa biến số chung sau đó qua giai đoạn 2.
Giai đoạn 2: dùng các giải thuật để cắt biển số xe ra khỏi ảnh chụp
Ví dụ từ chương trình :
Trang 14Ảnh sau khi tách biển số
Mục đích của chương trình em viết là đọc biển số xe từ một vị trí cố định,
ví dụ như là lối vào của một khu vực bãi đậu xe Hệ thống xây dựng là một máy tính thông thường , ảnh được chụp từ camera theo một góc cố định để tạo ra ảnh gốc được đưa vào máy tính PC Từ ảnh thu được có chứa biển số
xe ta thực hiên quá trình tách biển số xe.
Đoạn code trong matlab phần cắt biển số xe:
function pushbutton5_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
set(handles.pushbutton8,'Enable','on');
Đây là đoạn code của cắt biển số ra khỏi ảnh chính Ảnh đầu vào nếu xác định là ảnh full ta sẽ thực hiện bước cắt ảnh theo một hệ tọa độ không gian nhất định là [440 790 850 200] Ảnh sau khi cắt sẽ được xuất lên vùng axes6
để ta tiện theo dõi quá trình.
3.3.Tổng quan về nhận dạng kí tự và số :
Kết quả của khối cắt biển số là một ảnh màu RBG có chứa biển số xe
Để nhận dạng các ký tự trong biển số, ta tiến hành nhận dạng ký tự và số Phân đoạn ký tự là việc cắt ký tự trong biển số xe.
Sau khi nhận kết quả của cắt biển số hoặc ảnh trực tiếp của biển số, việc nhận dạng ký tự bắt đầu bằng việc tách từng ký tự trong biển số Trước khi tách ký tự, ảnh sẽ được chuyển thành ảnh nhị phân Ảnh nhị phân được chuẩn hóa về kích chuẩn, sau đó tiến hành cắt các ký tự Kết quả của quá trình phân đoạn là một ma trận chứa các ảnh đen trắng của ký tự.
Trang 15ngưỡng tối ưu, sau đó tiến hành xám hóa ảnh với ngưỡng vừa tìm được
( nhằm làm tăng độ tương phản của ký tự với nền biển số ).
Ảnh sau khi được làm xám
Sau khi xám hóa ảnh ta lấy loại bỏ các phần mờ không rõ ràng bằng cách nhị phân ảnh Việc xử lý này giúp nhận dạng ký tự một cách chuẩn xác hơn.
.
Ảnh khi được nhị phân
Trang 163.3.2 Tách ký tự
Ảnh sau khi được nhị phân chính là ngõ vào của bước này Các vùng trắng được xác định có thể là ký tự sẽ được tách ra độc lập từng ảnh dựa trên khung hình chữ nhật.
Các khung được tạo thành lần lượt từ trái qua phải.
Các khung hình chữ nhật của từng kì tự được xác định, mỗi khung tạo thành một bức ảnh chứa ma trận ký tự độc lập với nhau với tên của mỗi bức ảnh là “chr+stt”
Hình ảnh minh họa
3.3.3 Nhận dạng ký tự
Đây là bước cuối cùng của quá trình nhận dạng Sau khi thực hiện quá trình tách kỳ tự Lần lượt mỗi ma trận ký tự của hàng trên và hàng dưới sẽ được đưa vào chương trình nhận dạng Kết quả cuối cùng sẽ hiện thị lần lượt các ký tự này ở dạng text.
Thực chất, quá trình nhận dạng là quá trình đổi ma trận điểm ảnh của các ký tự thành thành mã ASCII tương ứng với ký tự đó Để làm được điều này người ta đem so sánh ma trận của ký tự với tất cả các ma trận trong tập mẫu, ma trận mẫu nào có khả năng giống nhiều nhất thì có chính là ký tự cần tìm.
Ở bước này ta sử dụng phương pháp nhận dạng kí tự quang học OCR (Optical Character Recognition) OCR làm việc khá tốt với các trang văn bản
rõ nét Nhận dạng ký tự quang học (dùng các kỹ thuật quang học chẳng hạn như gương và ống kính) và nhận dạng ký tự số (sử dụng máy quét và các thuật toán máy tính) lúc đầu được xem xét như hai lĩnh vực khác nhau Bởi vì chỉ có rất ít các ứng dụng tồn tại với các kỹ thuật quang học thực sự, bởi vậy thuật ngữ Nhận dạng ký tự quang học được mở rộng và bao gồm luôn ý nghĩa
Trang 17nhau giữa trang văn bản và hình ảnh Đa số các hệ nhận dạng dùng các tham
số thống kê để phân biệt chữ và hình ảnh (đối với văn bản, màu trắng và đen phân bố với nhịp điệu chuẩn, còn trong hình ảnh thì các pattern đen trắng phân bố không đều) Có nhiều phương pháp nhận dạng, nhưng nói chung được quy về 2 kiểu: nhận dạng theo mẫu (template-base) và nhận dạng theo tính chất (feature - bas)
Theo phương pháp này ta sẽ nhận dạng theo mẫu (template-base) Ở bước tách biển số mỗi ký tự sẽ được tách thành từng khung độc lập chứa các
ma trận ký tự độc lập Sau đó ta sẽ so sánh lần lượt các ma trận ký tự so với tập mẫu Phương pháp này tuy đơn giản nhưng hiệu quả trong trường hợp tập ảnh nhận dạng rõ nét, ít bị nhiễu Nếu ảnh bị nhiễu thì ma trận đầu vào thay đổi, lúc này tập mẫu sẽ không còn chính xác Trong 1 vài trường hợp biển số ban đầu bị nghiêng hoặc lệch, khi ta xoay và chuẩn hóa kích thước thì các ký
tự bị nhiễu và khi so sánh với tập mẫu cũng không còn chính xác.
Hình ảnh nhận dạng ký tự và xuất ra kết quả nhận dạng
Đoạn code trong matlab phần nhận dạng ký tự:
function btnOCR_Callback(hObject, eventdata, handles)
% hObject handle to btnOCR (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global srcImg;
Trang 18global bsImg;
global finalImg;
set(handles.btnTachBienSo,'Enable','off');
BW = imdilate(bsImg, strel('disk',3)); % grow the text a bit to get a bigger ROI around them
results = ocr(BW1, roi, 'TextLayout',
'Word','Language','tessdata/bsx.traineddata','CharacterSet','0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'); %ABCDEFGHIJKLMNOPQRSTUVWXYZ
Trang 19%confidences = sprintf('%.2f', results.CharacterConfidences);
%finalImg = insertObjectAnnotation(im2uint8(BW1), 'Rectangle', roi, confidences ,'FontSize',72);
Chương 4: THỰC HIỆN ĐỀ TÀI TRÊN
MATLAB
4.1 Giới thiệu gui
Gui-là giao diện bằng hình ảnh của chương trình
Gui-bao gồm các nút nhấn, hộp liệt kê, thanh trượt, menu… chúng cung cấp cho người dùng sử dụng một môi trường làm việc thân thiện để
họ tập trung vào các ứng dụng của chương trình hơn là đi tìm hiểu cách thức làm việc của chương trình đó.
Sau khi tạo xong giao diện và lưu giao diện vừa tạo Matlab sẽ tạo ra hai file có cùng tên nhưng khác phần mở rộng:
- File có phần mở rộng fig chứa nội dung của giao diện
- File có phần mở rộng m chứa những đoạn mã liên quan đến giao diện Ta xử lý lập trình các thuật toán trên file m
Các hàm thường được sử dụng trong gui:
- Set : thay đổi giá trị của các thuộc tính của một đối tượng giao diện
- Get : truy xuất giá trị của thuộc tính của một đối tượng giao diện
- Ngoài ra còn các hàm như axes, guide, num2str(), str2num()
Trang 204.2 Tạo giao diện gui
4.3 Code của chương trình matlab
function varargout = NHOM5_XLA_BXS(varargin)
% NHOM5_XLA_BXS MATLAB code for NHOM5_XLA_BXS.fig
% NHOM5_XLA_BXS, by itself, creates a new NHOM5_XLA_BXS or raises the existing
Trang 21% unrecognized property name or invalid value makes property
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help NHOM5_XLA_BXS
% Last Modified by GUIDE v2.5 29-Oct-2019 12:04:05
% Begin initialization code - DO NOT EDIT
% End initialization code - DO NOT EDIT
% - Executes just before NHOM5_XLA_BXS is made visible
function NHOM5_XLA_BXS_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to NHOM5_XLA_BXS (see VARARGIN)
% Choose default command line output for NHOM5_XLA_BXS
% - Outputs from this function are returned to the command line
function varargout = NHOM5_XLA_BXS_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
Trang 22% Get default command line output from handles structure
varargout{1} = handles.output;
% - Executes on button press in btnLoadImage
function btnLoadImage_Callback(hObject, eventdata, handles)
% hObject handle to btnLoadImage (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global srcImg;
set(handles.btnTachBienSo,'Enable','off');
set(handles.btnOCR,'Enable','off');
set(handles.pushbutton5,'Enable','off');
set(handles.pushbutton6,'Enable','off');
set(handles.pushbutton8,'Enable','off');
[filename path] = uigetfile({'*.jpg;*.png','Image file';'*.*','All
file'},'Open Image');
set(handles.pushbutton5,'Enable','on');
set(handles.pushbutton6,'Enable','on');
% - Executes on button press in btnTachBienSo
function btnTachBienSo_Callback(hObject, eventdata, handles)
% hObject handle to btnTachBienSo (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global bsImg;
global xamImg;
set(handles.pushbutton6,'Enable','off');
set(handles.pushbutton8,'Enable','off');