- Izrada predloška
- Otkrivanje slova
- Otkrivanje registarske pločice
- Rad sustava za otkrivanje broja registarskih tablica vozila pomoću MATLAB-a
Jeste li se ikad zapitali kako funkcionira sustav ANPR (automatsko prepoznavanje tablice)? Dopustite mi da vam kažem koncept koji stoji iza toga, kamera ANPR sustava snima sliku registarske pločice vozila, a zatim se slika obrađuje kroz višestruki broj algoritama kako bi se osigurala alfa numerička konverzija slike u tekstualni format. ANPR sustav koristi se na mnogim mjestima poput benzinskih pumpi, trgovačkih centara, zračnih luka, autocesta, naplatnih kućica, hotela, bolnica, parkirališta, obrambenih i vojnih kontrolnih punktova itd.
Za ovo otkrivanje registarske pločice dostupno je mnogo alata za obradu slika, ali ovdje u ovom uputstvu koristit ćemo MATLAB Obradu slika kako bismo broj tablice vozila prebacili u tekstualni format. Ako ste novi u MATLAB-u ili u obradi slika, provjerite naše prethodne MATLAB-ove projekte:
- Početak rada s MATLAB-om: kratki uvod
- Početak rada s obradom slika pomoću MATLAB-a
Prvo, dopustite mi da vas ukratko obavijestim o konceptu koji koristimo za otkrivanje registarskih pločica. Postoje tri programa ili '.m' datoteke za ovaj projekt.
- Izrada predloška ( template_creation.m ) - Koristi se za pozivanje spremljenih slika alfanumeričkih brojeva, a zatim ih sprema kao novi predložak u memoriju MATLAB.
- Otkrivanje slova ( Letter_detection.m ) - čita znakove s ulazne slike i pronalazi odgovarajuću alfanumeričku oznaku koja se najbolje podudara.
- Otkrivanje ploče ( Plate_detection.m ) - Obradite sliku, a zatim pozovite gornje dvije m-datoteke kako biste otkrili broj.
Sada ćemo naučiti kako kodirati ove m-datoteke i što morate učiniti prije početka kodiranja. Nakon što prođete kroz ovaj vodič, na kraju ovog projekta možete pronaći sve datoteke s kodovima i video s objašnjenjima.
Izrada predloška
Prvo stvorite mapu za projekt (moje ime mape je Otkrivanje pločice s brojevima ) za spremanje i pohranu datoteka. Binarne slike svih abeceda i brojeva pohranili smo u podmapu nazvanu ' alfa' .
Sada otvorite prozor Editor u MATLAB-u, kao što je prikazano na donjoj slici,

Ako niste upoznati s osnovnom terminologijom MATLAB-a, predlažem da provjerite povezani vodič.
Sada kopirajte i zalijepite donji kod u datoteku template_creation.m i spremite datoteku u mapu projekta ( Otkrivanje pločice s brojevima ). Sve datoteke povezane s ovim projektom, uključujući datoteke s predlošcima slika, mogu se preuzeti ovdje. Također provjerite video zapis dat na kraju ovog projekta.
% Abecede A = nepročitano ('alfa / A.bmp'); B = nepročitano ('alfa / B.bmp'); C = nepročitano ('alfa / C.bmp'); D = nepročitano ('alfa / D.bmp'); E = nepročitano ('alfa / E.bmp'); F = nepročitano ('alfa / F.bmp'); G = nepročitano ('alfa / G.bmp'); H = nepročitano ('alfa / H.bmp'); I = nepročitano ('alfa / I.bmp'); J = nepročitano ('alfa / J.bmp'); K = nepročitano ('alfa / K.bmp'); L = nepročitano ('alfa / L.bmp'); M = nepročitano ('alfa / M.bmp'); N = nepročitano ('alfa / N.bmp'); O = nepročitano ('alfa / O.bmp'); P = nepročitano ('alfa / P.bmp'); Q = nepročitano ('alfa / P.bmp'); R = nepročitano ('alfa / R.bmp'); S = nepročitano ('alfa / S.bmp'); T = nepročitano ('alfa / T.bmp'); U = nepročitano ('alfa / U.bmp'); V = nepročitano ('alfa / V.bmp'); W = nepročitano ('alfa / W.bmp'); X = nepročitano ('alfa / X.bmp '); Y = nepročitano ('alfa / Y.bmp'); Z = nepročitano ('alfa / Z.bmp'); % Prirodnih brojeva jedan = nepročitano ('alfa / 1.bmp'); dva = nepročitano ('alfa / 2.bmp'); tri = nepročitano ('alfa / 3.bmp'); četiri = nepročitano ('alfa / 4.bmp'); pet = nepročitano ('alfa / 5.bmp'); šest = nepročitano ('alfa / 6.bmp'); sedam = nepročitano ('alfa / 7.bmp'); osam = nepročitano ('alfa / 8.bmp'); devet = nepročitano ('alfa / 9.bmp'); nula = nepročitano ('alfa / 0.bmp'); % Stvaranje niza za abecede letter =; % Stvaranje niza za brojeve broj =; NewTemplates =; save ('NewTemplates', 'NewTemplates') obriši sve

Ovdje, u gornjem kodu, slike spremamo u varijablu pomoću naredbe ' imread () '. Ova se funkcija koristi za pozivanje slika iz mape ili s bilo kojeg mjesta računala u MATLAB. Uzmimo primjer iz gornjeg koda:
A = nepročitano ('alfa / A.bmp');
Gdje je A varijabla, a u ' alpha / A.bmp' , 'alpha' je naziv mape, a ' A.bmp' je naziv datoteke.
Zatim stvorite matricu od ' slova ' i ' broja ' i spremite je u varijablu ' NewTemplates ' pomoću naredbe ' spremi (naziv datoteke, varijable)' .
% Stvaranje niza za abecede letter =; % Stvaranje niza za brojeve broj =; NewTemplates =; save ('NewTemplates', 'NewTemplates') obriši sve
Počnite kodirati Letter_detection.m , u novom prozoru uređivača.
Otkrivanje slova
Ovdje stvaramo drugu kodnu datoteku nazvanu Letter_detection.m . Sada kopirajte i zalijepite donji kod u tu datoteku i spremite datoteku u mapu projekta s imenom Letter_detection. Ovu datoteku možete preuzeti ovdje, ove priložene zip datoteke sadrže i druge datoteke povezane s ovim projektom otkrivanja registarske pločice.
funkcijsko slovo = readLetter (snap) load NewTemplates snap = imresize (snap,); rec =; za n = 1: duljina (NewTemplates) cor = corr2 (NewTemplates {1, n}, snap); rec =; kraj ind = pronađi (rec == max (rec)); prikaz (pronađi (rec == max (rec))); % Popisi abeceda. ako je ind == 1 - ind == 2 slovo = 'A'; elseif ind == 3 - ind == 4 slovo = 'B'; elseif ind == 5 slova = 'C' elseif ind == 6 - ind == 7 slovo = 'D'; elseif ind == 8 slovo = 'E'; elseif ind == 9 slovo = 'F'; elseif ind == 10 slova = 'G'; elseif ind == 11 slovo = 'H'; elseif ind == 12 slovo = 'I'; elseif ind == 13 slovo = 'J'; elseif ind == 14 slovo = 'K'; elseif ind == 15 slovo = 'L'; elseif ind == 16 slovo = 'M'; elseif ind == 17 slovo = 'N'; elseif ind == 18 - ind == 19 slovo = 'O'; elseif ind == 20 - ind == 21 slovo = 'P'; elseif ind == 22 - ind == 23 slovo = 'Q'; elseif ind == 24 - ind == 25 slovo = 'R'; elseif ind == 26 slovo = 'S'; elseif ind == 27 slovo = 'T'; elseif ind == 28 slovo = 'U'; elseif ind == 29 slovo = 'V'; elseif ind == 30 slova = 'W'; elseif ind == 31 slovo = 'X'; elseif ind == 32 slovo = 'Y'; elseif ind == 33 slovo = 'Z'; % * - * - * - * - * % brojkama oglasi. elseif ind == 34 slovo = '1'; elseif ind == 35 slovo = '2'; elseif ind == 36 slovo = '3'; elseif ind == 37 - ind == 38 slovo = '4'; elseif ind == 39 slovo = '5'; elseif ind == 40 - ind == 41 - ind == 42 slovo = '6'; elseif ind == 43 slovo = '7'; elseif ind == 44 - ind == 45 slovo = '8'; elseif ind == 46 - ind == 47 - ind == 48 slovo = '9'; inače slovo = '0'; kraj kraj

Ovdje smo u gornjem kodu stvorili funkciju nazvanu slovom koja nam daje alfanumerički izlaz ulazne slike iz klase ' alfa ' pomoću naredbe ' readLetter ()' . A zatim učitajte spremljene predloške pomoću naredbe za učitavanje 'NewTemplates .
Nakon toga promijenili smo veličinu ulazne slike kako bismo je mogli usporediti sa slikama predloška pomoću naredbe 'imresize (naziv datoteke, veličina)' . Zatim se petlja for koristi za korelaciju ulazne slike sa svakom slikom u predlošku kako bi se postiglo najbolje podudaranje.
Stvara se matrica ' rec ' za bilježenje vrijednosti korelacije za svaki alfanumerički predložak s predloškom znakova s ulazne slike, kao što je prikazano u donjem kodu,
cor = corr2 (NewTemplates {1, n}, ugriz);
Tada se naredba 'find ()' koristi za pronalaženje indeksa koji odgovara najviše odgovarajućem znaku. Tada se prema tom indeksu ispisuje odgovarajući znak pomoću izraza "ako-drugo" .
Sada, nakon što završite s ovim, otvorite novi prozor uređivača za pokretanje koda za glavni program.
Otkrivanje registarske pločice
Ovdje je treća i zadnja kodna datoteka pod nazivom Plate_detection.m. Kopirajte i zalijepite donji kod u ovu datoteku i spremite u mapu projekta. Za brzi početak odavde možete preuzeti sve kodne datoteke s predlošcima slika.
zatvori sve; očistiti sve; im = imread ('Slike s pločice s brojevima / image1.png'); imgray = rgb2gray (im); imbin = imbinarizirati (imgray); im = rub (imgray, 'prewitt'); % Dolje su koraci za pronalaženje mjesta tablice Iprops = regionprops (im, 'BoundingBox', 'Area', 'Image'); područje = Iprops.Area; count = numel (Iprops); maxa = površina; boundingBox = Iprops.BoundingBox; za i = 1: računajte ako je maxa

U nastavku su spomenute osnovne naredbe korištene u gornjem kodu:
imread () - Ova se naredba koristi za otvaranje slike u MATLAB iz ciljne mape.
rgb2gray () - Ova se naredba koristi za pretvaranje RGB slike u format sive boje.
imbinarize () - Ova se naredba koristi za Binariziranje 2-D slike u sivim tonovima ili jednostavno možemo reći da pretvara sliku u crno-bijeli format.
edge () - Ova se naredba koristi za otkrivanje rubova na slici, koristeći razne metode poput Robertsa, Sobel, Prewitta i mnogih drugih.
regionprops () - Ova se naredba koristi za mjerenje svojstava područja slike.
numel () - Ova se naredba koristi za izračunavanje broja elemenata niza.
imcrop () - Ova se naredba koristi za obrezivanje slike u unijetoj veličini.
bwareaopen () - Ova se naredba koristi za uklanjanje malih predmeta s binarne slike.
Korištenjem gornjih naredbi u kodu pozivamo ulaznu sliku i pretvaramo je u sivu ljestvicu. Tada se sive boje pretvaraju u binarnu sliku, a rub binarnih slika otkriva se metodom Prewitt.
Tada se donji kod koristi za otkrivanje mjesta registarske pločice na cijeloj ulaznoj slici, Iprops = regionprops (im, 'BoundingBox', 'Area', 'Image'); područje = Iprops.Area; count = numel (Iprops); maxa = površina; boundingBox = Iprops.BoundingBox; za i = 1: računajte ako je maxa
Nakon toga obrežite pločicu s brojevima i uklonite male predmete s binarne slike pomoću naredbi 'imcrop ()' i 'bwareaopen ()' .
Zatim se donji kod koristi za obradu te izrezane slike registarske pločice i za prikaz otkrivenog broja u formatu slike i teksta (u naredbenom prozoru).
Iprops = regionprops (im, 'BoundingBox', 'Area', 'Image'); count = numel (Iprops); noPlate =; za i = 1: count ow = length (Iprops (i).Image (1,:)); oh = duljina (Iprops (i).Image (:, 1)); if ow <(h / 2) & oh> (h / 3) slovo = Letter_detection (Iprops (i).Image); noPlate = kraj kraj
Rad sustava za otkrivanje broja registarskih tablica vozila pomoću MATLAB-a
U datoteci template_creation.m imamo dizajn koda koji sprema sve binarne slike alfanumeričkih brojeva u direktorij ili datoteku nazvanu ' NewTemplates '. Tada se taj direktorij poziva u Letter_detection.m, kao što možete vidjeti u nastavku

Tada se u datoteci koda Plate_detection.m poziva datoteka koda Letter_detection.m kada obrađujemo sliku kao što je prikazano na donjoj slici,

Sada kliknite gumb 'RUN' da biste pokrenuli.m datoteku

MATLAB-u će trebati nekoliko sekundi da odgovori, pričekajte dok se u donjem lijevom kutu ne pojavi poruka zauzeća, kao što je prikazano dolje,

Kako se program pokreće, u naredbenom prozoru dobit ćete skočni prikaz slike s brojevima i broj. Izlaz za moju sliku izgledat će kao slika dolje;

Kompletan rad sustava za otkrivanje registarskih tablica vozila prikazan je u videozapisu ispod, a sve datoteke koda s predlošcima slika mogu se preuzeti ovdje.
Također, ovdje provjerite sve MATLAB projekte.
