3.2.1 Giới thiệu về MATLAB
Malab là một phần mềm dùng để tính tốn trong kỹ thuật đặc biệt là các bài tốn về ma trận. Matlab cịn cung cấp các toolboxes chuyên dụng để giải quyết những vấn đề cụ thể như xử lý ảnh, mô phỏng, neural, xử lý số tín hiệu…Matlab cịn cung cấp Image Processing toobox, chuyên về xử lý ảnh. Matlab có một tài nguyên vơ cùng lớn, có thể nói Matlab là một phần mềm vơ cùng lợi hại giúp cho việc thực hiện các giải thuật xử lý nhanh chóng và dễ hiểu.
Trong Matlab, mỗi hình ảnh thường được biểu diễn bằng một ma trận hai chiều. Mỗi một phần tử của ma trận tương ứng với 1 pixel (một phân tử ảnh – picture element – biểu diễn bằng một điểm trên màn hình). Điểm ảnh ở góc trên bên trái ứng với hang 1, cột 1.
Matlab lưu giữ các hình ảnh dưới một trong các kiểu dữ liệu sau: logical, uint8, uint16, double.
Người dùng có thể sử dụng các phép toán và các thao tác cơ bản trên ma trận để tác động lên dữ liệu hình ảnh với điều kiện các thao tác này chấp nhận các kiểu dữ liệu trên.
3.2.2 Xử lý ảnh với Matlab
Các bước cần thiết trong xử lý ảnh. Đầu tiên, ảnh tự nhiên từ thế giới ngoài được thu nhận qua các thiết bị thu (như Camera, máy chụp ảnh). Trước đây, ảnh thu qua Camera là các ảnh tương tự (loại Camera ống kiểu CCIR). Gần đây, với sự phát triển của công nghệ, ảnh màu hoặc đen trắng được lấy ra từ Camera, sau đó nó được chuyển trực tiếp thành ảnh số tạo thuận lợi cho xử lý tiếp theo. Máy ảnh số hiện nay là một thí dụ gần gũi. Mặt khác, ảnh cũng có thể tiếp nhận từ vệ tinh; có thể quét từ ảnh chụp bằng máy quét ảnh.
3.2.3 Các giai đoạn xử lý ảnha) Thu nhận ảnh (Image Acquisition) a) Thu nhận ảnh (Image Acquisition)
– Ảnh được thu từ nhiều nguồn khác nhau:máy ảnh, máy quay phim, máy quét, ảnh vệ tinh…
– Mục đích: biến đổi thơng tin hình ảnh về các cấu trúc được lưu trữ trong máy tính, có thể hiển thị ra các thiết bị ngoại vi như là máy in, màn hình…
– Gồm hai tiến trình:
+ Biến đổi năng lượng quang học thành năng lượng điện. + Tổng hợp năng lượng điện thành ảnh hoặc ma trận số.
b) Tiền xử lý (Image Processing)
– Là quá trình sử dụng các kỹ thuật xử lý ảnh để làm ảnh tốt lên theo mục đích sử dụng.
+ Điều chỉnh độ chiếu sáng để khắc phục hậu quả của việc chiếu sáng không đều. + Giảm nhỏ thành phần nhiễu của ảnh tức là các đối tượng xuất hiện ngoài ý muốn. + Hiệu chỉnh giá trị độ sáng giữa nền và đối tượng.
+ Chuẩn hoá độ lớn, màu, dạng của ảnh.
+Điều chỉnh bộ lọc để khuyếch đại và nén các tần số.
c) Phân đoạn (Segmentation)
– Là quá trình phân chia nội dung các đối tượng cần khảo sát ra khỏi ảnh. – Phân chia các đối tượng tiếp giáp nhau.
– Phân tách các đối tượng riêng biệt thành các đối tượng con.
d) Biểu diễn ảnh (Image Representation)
Đầu ra ảnh sau phân đoạn chứa các điểm ảnh của vùng ảnh (ảnh đã phân đoạn) cộng với mã liên kết với các vùng lận cận. Việc biến đổi các số liệu này thành dạng thích hợp là cần thiết cho xử lý tiếp theo bằng máy tính. Việc chọn các tính chất để thể hiện ảnh gọi là trích chọn đặc trưng (Feature Selection) gắn với việc tách các đặc tính của ảnh dưới dạng các thông tin định lượng hoặc làm cơ sở để phân biệt lớp đối tượng này với đối tượng khác trong phạm vi ảnh nhận được.
Ví dụ: trong nhận dạng ký tự trên phong bì thư, chúng ta miêu tả các đặc trưng của từng ký tự giúp phân biệt ký tự này với ký tự khác.
e) Nhận dạng và nội suy ảnh (Image Recognition and Interpretation)
Nhận dạng ảnh là quá trình xác định ảnh. Quá trình này thường thu được bằng cách so sánh với mẫu chuẩn đã được học (hoặc lưu) từ trước. Nội suy là phán đoán theo ý nghĩa trên cơ sở nhận dạng.
Ví dụ: một loạt chữ số và nét gạch ngang trên phong bì thư có thể được nội suy thành mã điện thoại. Có nhiều cách phân loai ảnh khác nhau về ảnh. Theo lý thuyết về nhận dạng, các mơ hình tốn học về ảnh được phân theo hai loại nhận dạng ảnh cơ bản:
– Nhận dạng theo tham số. – Nhận dạng theo cấu trúc.
Một số đối tượng nhận dạng khá phổ biến hiện nay đang được áp dụng trong khoa học và công nghệ là: nhận dạng ký tự (chữ in, chữ viết tay, chữ ký điện tử), nhận dạng văn bản (Text), nhận dạng vân tay, nhận dạng mã vạch, nhận dạng mặt
người…
f) Cơ sở tri thức (Knowledge Base)
Như đã nói ở trên, ảnh là một đối tượng khá phức tạp về đường nét, độ sáng tối, dung lượng điểm ảnh, môi trường để thu ảnh phong phú kéo theo nhiễu. Trong nhiều khâu xử lý và phân tích ảnh ngồi việc đơn giản hóa các phương pháp tốn học đảm bảo tiện lợi cho xử lý, người ta mong muốn bắt chước quy trình tiếp nhận và xử lý ảnh theo cách của con người. Trong các bước xử lý đó, nhiều khâu hiện nay đã xử lý theo các phương pháp trí tuệ con người. Vì vậy, ở đây các cơ sở tri thức được phát huy.
3.3Quy trình thực hiện
3.3.1 Các phương pháp đã được phát triển và áp dụng
Với bài toán này, chúng ta có rất nhiều hướng giải quyết tùy vào đặc thù của biến số xe của mỗi quốc gia và thuật tốn được lựa chọn. Tuy nhiên nhìn chung thì có một số kỹ thuật chung được áp dụng vào bài tốn nhận dạng biển số xe. Những kỹ thuật này có thể kể ra đây như: phương pháp hình thái học, phương pháp hough, phương pháp chiếu…
Vấn đề chính gặp phải khi xây dựng hệ thống tự động nhận dạng biển số xe là vấn đề phân đoạn ảnh. Có hai giai đoạn phân đoạn ảnh chính. Thứ nhất là xác định và trích xuất vùng biển số xe từ ảnh lớn hơn. Thứ hai là trích xuất các ký tự alpha từ vùng biển đã có.
Giải quyết bài tốn này u cầu một hệ thống các thủ tục được sắp xếp hợp lý. Để dễ dàng hơn, bài toán được chia làm hai bài toán nhỏ: bài toán tách biển số xe, bài toán tách ký tự và nhận dạng ký tự.
3.3.2 Các phương pháp tách biển số xe
Hướng tiếp cận phát triển vùng:
Ý tưởng của phương pháp này: đó là biển số xe thường chứa một màu đồng nhất, chẳng hạn như màu trắng và có diện tích tương đối nhất định. Vì vậy có thể dùng phương pháp phát triển vùng, hoặc dùng khung chữ nhật di chuyển để tìm ra vùng có tính chất thỏa mãn biển số xe và tiến hành nhận dạng.
Ưu điểm: rất đơn giản, và xử lý rất nhanh đối với những ảnh chỉ chứa vùng biển số.
Nhược điểm: khi ảnh có thêm nhiều đối tượng khơng phải dùng biển số, chẳng hạn như ảnh chụp cảnh vật bên ngồi thì cách tiếp cận này trở nên khơng hiệu quả. Vì vậy phương pháp này rất hiệu quả với trạm thu phí, trạm gác cổng, gửi xe tự động.
Ngoài những cách tiếp cận trên, cịn có nhiều cách tiếp cận khác để xác định độ chính xác vùng nào chứa biển số xe và bước cuối cùng là tiến hành nhận dạng ký tự. Mỗi cách tiếp cận đều có ưu và nhược điểm.
3.3.3 Các phương pháp tách ký tự và nhận dạng ký tự
a. Tách ký tự
Bước tiếp theo sau khi tách biển số là tách ký tự trên biển số. Đây là một bước vơ cùng quan trọng trong q trình nhận dạng biển số xe tự động bởi vì các bước sau đó đều phụ thuộc vào bước này. Nếu tách ký tự khơng chính xác thì mọi cố gắng phía sau đều vơ nghĩa.
Việc tách ký tự có thể gặp một số khó khăn như dính ký tự, dính viền biển số xe với ký tự, không thể tách ký tự do biển số quá mờ hoặc quá cũ. Đôi khi tách ký tự lại nhận được một số nhiễu đi kèm làm cho việc nhận dạng bị sai. Đặc biệt đối với biển số xe Việt Nam, rất nhiều ký tự trên biển số bị che lấp bởi các đinh ốc gắn vào biển. Đây là một thách thức lớn đối với q trình nhận dạng.
Có rất nhiều phương pháp để thực hiện tách ký tự, một số phương pháp có thể kể đến như phương pháp chiếu, phương pháp hình thái học, phương pháp phát hiện contour, phương pháp sử dụng trí tuệ nhân tạo…
b. Nhận dạng ký tự
Giới thiệu một số phương pháp nhận dạng ký tự:
Sau khi tách rời các ký tự, việc tiếp theo là nhận dạng ký tự. Bài toán nhận dạng ký tự là bài toán đã được phát triển và sử dụng trong rất nhiều ứng dụng nhận dạng chữ viết tay, nhận dạng chữ in. Với bài toán nhận dạng biển số xe, số lượng ký tự ít, các kiểu front chữ ít cho nên độ phức tạp cũng ít hơn, đó là một thuận lợi.
Có rất nhiều phương pháp để nhận dạng ký tự, phổ biến là sử dụng mạng noron tức là huấn luyện cho máy tính nhận dạng các ký tự. Phương pháp này cho kết quả khá chính xác.
Bên cạnh đó cịn có một phương pháp khác đó là phương pháp hình thái học. Phương pháp này sử dụng các hình thái đặc biệt của các ký tự để phân biệt các ký tự. Các ký tự có những đặc điểm riêng có thể phân biệt với nhau chẳng hạn như số ‘0’ có một lỗ trống ở giữa, ‘8’ có 2 lỗ trống hay ‘X’ đối xứng 2 trục ngang dọc….
Để hiểu rõ về phương pháp sử dụng trong đồ án tốt, chúng ta sẽ đi vào giải thích chi tiết trong mục tiếp theo với hai giai đoạn tìm vị trí biển số và nhận dạng kí tự với hai sơ đồ cụ thể từng bước thao tác thực hiện.
3.3.4 Các bước thực hiện
Quá trình nhận dạng biển số xe được chia ra thành 2 giai đoạn:
Giai đoạn 1: Tìm ra được vị trí hay khung có chứa ký tự biển số
Giai đoạn 2: Nhận dạng ký tự bên trong biển số. Sơ đồ nhận dạng biển số:
Sơ đồ 1: Tìm và cắt ra vùng có chứa biển số trong ảnh
3.4Các thuật xử lý ảnh liên quan
3.4.1 Biến đổi ảnh xám (Grayscale convert)
Trong xử lý ảnh, việc chuyển đổi ảnh màu sang ảnh xám là công việc phổ biến. Ảnh màu thực chất chỉ là tập hợp của những ma trận có cùng kích thước. Khi muốn xử lý thơng tin trên ảnh, sẽ dễ dàng hơn nếu ta chỉ xử lý dữ liệu trên một ma trận số thay vì nhiều ma trận số. Việc biến đổi ảnh màu về ảnh số (Grayscale converting) xuất hiện vì mục đích trên – biến đổi thông tin ảnh về một ma trận số hai chiều duy nhất.
GrayScale là một hệ thống màu có mơ hình màu đơn giản nhất với 256 cấp độ xám biến thiên từ màu đen đến màu trắng. Sản phẩm được xuất ra sẽ có màu trắng đen. Được sử dụng trong cả cơng nghiệp in lẫn dùng trong công việc thể hiện ảnh lên các thiết bị số. Ảnh xám (Gray image) hay còn gọi là ảnh đơn sắc (Monochromatic), mỗi giá trị điểm ảnh (Pixel) trong ma trận điểm ảnh mang giá trị từ 0 đến 255. Trong khơng gian màu RGB, để có một ảnh xám cần phải có giá trị kênh màu Red (x, y) = Green (x, y) = Blue (x, y) (Với x, y là tọa độ điểm ảnh).
Chuyển đổi hệ thống màu RGB sang Grayscale:
Một bức ảnh mà tập hợp của một ma trận điểm ảnh (Pixel). Mỗi điểm ảnh có thể được biểu diễn bằng n bytes dưới các kênh màu khác nhau. Việc chuyển đổi giữa các hệ màu thông thường được thực hiện thông qua các phép biến đổi ma trận.
Cơng thức tính cường độ sáng tại một điểm ảnh từ ảnh RGB:
o I (x, y) = 0.3086*Red (x, y) + 0.6094*Green (x, y) + 0.082*Blue (x, y) o I (x, y) = 0.299*Red (x, y) + 0.587*Green (x, y) + 0.114*Blue (x, y) Phân tích:
o I (x, y): là cường độ sáng tại điểm ảnh (x, y) của ảnh xám
o Red (x, y): Là giá trị của kênh màu Red (Đỏ) tại điểm ảnh (x, y) của ảnh màu (RGB)
o Green (x, y): Là giá trị của kênh màu Green (xanh lá cây) tại điểm ảnh (x, y) của ảnh màu (RGB)
o Blue (x, y): là giá trị của kênh màu Blue (xanh lơ) tại điểm ảnh (x, y) của ảnh màu (RGB)
Chú ý:
o Các phép toán trong số nguyên (Int) nhanh hơn rất nhiều trong số thực (Float)
o Trong OpenCV, hệ thống màu theo thứ tự các kênh là Blue-Green-Red
o Các thông số dùng để tính tốn cường độ sáng cho ảnh xám như: 0.3086, 0.6094, 0.0820, … được coi là con số đẹp do người ta nghiên cứu ra.
3.5Nhận diện biển số trên MATLAB
Đầu tiên, em xin giới thiệu sơ lược về khái niệm mà em đang sử dụng để phát hiện biển số. Có ba chương trình hoặc file ‘.m’ cho đề tài này.
Template Creation (template_creation.m) - Điều này được sử dụng để gọi các hình ảnh đã lưu của chữ và số và sau đó lưu chúng dưới dạng một mẫu mới trong bộ nhớ MATLAB.
Letter Detection (Letter_detection.m) - Đọc các ký tự từ hình ảnh đầu vào và tìm chữ và số tương ứng phù hợp nhất.
Plate Detection (Plate_detection.m) – Xử lý hình ảnh và sau đó gọi hai file .m ở trên để phát hiện số.
Hình 3. 10 Giải thuật cho hệ thống nhận diện biển số xe
3.5.1 Template Creation
Đầu tiên tạo một thư mục cho đề tài (tên thư mục của em là Number Plate Detection) để lưu và lưu trữ các tệp. Em đã lưu trữ các hình ảnh nhị phân của tất cả các bảng chữ cái và số trong thư mục con có tên là 'alpha'. Bây giờ, hãy mở cửa sổ Trình chỉnh sửa trong MATLAB, như được hiển thị trong hình ảnh bên dưới,
Hình 3. 11 Template creation
Sao chép và dán đoạn mã dưới đây vào tệp template_creation.m và lưu tệp trong thư mục dự án (Phát hiện Biển số).
%Alphabets A=imread('alpha/A.bmp');B=imread('alpha/B.bmp');C=imread('alpha/C.bmp'); D=imread('alpha/D.bmp');E=imread('alpha/E.bmp');F=imread('alpha/F.bmp'); G=imread('alpha/G.bmp');H=imread('alpha/H.bmp');I=imread('alpha/I.bmp'); J=imread('alpha/J.bmp');K=imread('alpha/K.bmp');L=imread('alpha/L.bmp'); M=imread('alpha/M.bmp');N=imread('alpha/N.bmp');O=imread('alpha/O.bmp'); P=imread('alpha/P.bmp');Q=imread('alpha/Q.bmp');R=imread('alpha/R.bmp'); S=imread('alpha/S.bmp');T=imread('alpha/T.bmp');U=imread('alpha/U.bmp'); V=imread('alpha/V.bmp');W=imread('alpha/W.bmp');X=imread('alpha/X.bmp'); Y=imread('alpha/Y.bmp');Z=imread('alpha/Z.bmp'); %Natural Numbers one=imread('alpha/1.bmp');two=imread('alpha/2.bmp'); three=imread('alpha/3.bmp');four=imread('alpha/4.bmp'); five=imread('alpha/5.bmp'); six=imread('alpha/6.bmp'); seven=imread('alpha/7.bmp');eight=imread('alpha/8.bmp'); nine=imread('alpha/9.bmp'); zero=imread('alpha/0.bmp'); %Creating Array for Alphabets
letter=[A B C D E F G H I J K L M N O P Q R S T U V W X Y Z]; %Creating Array for Numbers
number=[one two three four five six seven eight nine zero]; NewTemplates=[letter number];
save ('NewTemplates','NewTemplates') clear all
Hình 3. 12 Đoạn mã lưu hình ảnh
Ở đây, trong đoạn mã trên, ta đang lưu các hình ảnh vào một biến bằng cách sử dụng lệnh ‘imread () '. Chức năng này được sử dụng để gọi hình ảnh từ thư mục hoặc từ bất kỳ vị trí nào của PC vào MATLAB. Hãy lấy một ví dụ từ đoạn mã trên:
A=imread('alpha/A.bmp');
Trong đó A là biến và trong ‘alpha / A.bmp’, ‘alpha’ là tên thư mục và ‘A.bmp’ là tên tệp. Sau đó, tạo một ma trận gồm ‘chữ cái’ và ‘số’ và lưu nó trong biến ‘NewTemplates’ bằng cách sử dụng lệnh ‘save (tên tệp, biến)’.
%Creating Array for Alphabets
letter=[A B C D E F G H I J K L M N O P Q R S T U V W X Y Z];
%Creating Array for Numbers
NewTemplates=[letter number]; save ('NewTemplates','NewTemplates') clear all
Bây giờ hãy bắt đầu viết mã Letter_detection.m, trong một cửa sổ soạn thảo mới.
3.5.2 Letter Detection
Ở đây em đang tạo tệp mã thứ hai có tên là Letter_detection.m. Bây giờ, sao chép và dán đoạn mã dưới đây vào tệp đó và lưu tệp trong thư mục dự án với tên Letter_detection. function letter=readLetter(snap) load NewTemplates snap=imresize(snap,[42 24]); rec=[ ]; for n=1:length(NewTemplates) cor=corr2(NewTemplates{1,n},snap); rec=[rec cor]; end ind=find(rec==max(rec)); display(find(rec==max(rec))); % Alphabets listings. if ind==1 || ind==2 letter='A';
elseif ind==3 || ind==4 letter='B';
elseif ind==5 letter='C'
elseif ind==6 || ind==7 letter='D'; elseif ind==8 letter='E'; elseif ind==9 letter='F'; elseif ind==10 letter='G'; elseif ind==11 letter='H'; elseif ind==12 letter='I'; elseif ind==13 letter='J'; elseif ind==14 letter='K'; elseif ind==15
letter='L'; elseif ind==16 letter='M'; elseif ind==17 letter='N';
elseif ind==18 || ind==19 letter='O';
elseif ind==20 || ind==21 letter='P';
elseif ind==22 || ind==23 letter='Q';
elseif ind==24 || ind==25 letter='R'; elseif ind==26 letter='S'; elseif ind==27 letter='T'; elseif ind==28 letter='U'; elseif ind==29 letter='V';
elseif ind==30 letter='W'; elseif ind==31 letter='X'; elseif ind==32 letter='Y'; elseif ind==33 letter='Z'; %*-*-*-*-* % Numerals listings. elseif ind==34 letter='1'; elseif ind==35 letter='2'; elseif ind==36 letter='3';
elseif ind==37 || ind==38 letter='4';
elseif ind==39 letter='5';
letter='6'; elseif ind==43 letter='7';
elseif ind==44 || ind==45 letter='8';
elseif ind==46 || ind==47 || ind==48 letter='9';
else
letter='0'; end
end
Ở đây, trong đoạn mã hình 3.13, ta đã tạo một hàm có tên là ký tự cung cấp cho ta kết quả đầu ra là chữ và số của hình ảnh đầu vào từ lớp ‘alpha’ bằng cách sử dụng lệnh ‘readLetter () '. Và sau đó tải các mẫu đã lưu bằng cách sử dụng lệnh tải