- Vytvorenie šablóny
- Detekcia písmen
- Detekcia ŠPZ
- Fungovanie systému na zisťovanie čísla registračnej značky vozidla pomocou MATLABu
Zamysleli ste sa niekedy nad tým, ako funguje systém ANPR (automatické rozpoznávanie evidenčných čísel)? Poviem vám koncept, ktorý za tým stojí, kamera systému ANPR sníma obraz poznávacej značky vozidla a potom sa obraz spracuje pomocou viacerých algoritmov, aby poskytla alfanumerický prevod obrázka do textového formátu. Systém ANPR sa používa na mnohých miestach, ako sú benzínové pumpy, nákupné centrá, letiská, diaľnice, mýtnice, hotely, nemocnice, parkoviská, obranné a vojenské kontrolné body atď.
Pre detekciu tabuľky s evidenčným číslom je k dispozícii veľa nástrojov na spracovanie obrazu, ale tu v tomto výučbe použijeme program MATLAB Image Processing na získanie čísla registračnej značky vozidla do textového formátu. Ak ste v MATLABe alebo v oblasti spracovania obrázkov nováčikom, pozrite si naše predchádzajúce projekty v MATLABe:
- Začíname s MATLABom: Stručný úvod
- Začíname so spracovaním obrazu pomocou MATLABu
Najprv by som vás chcel oboznámiť s konceptom, ktorý používame na zisťovanie ŠPZ. Pre tento projekt existujú tri programy alebo súbory „.m“.
- Vytvorenie šablóny ( template_creation.m ) - slúži na vyvolanie uložených obrázkov alfanumerických čísel a ich následné uloženie ako novej šablóny do pamäte MATLABu.
- Detekcia písmen ( Letter_detection.m ) - Prečíta znaky zo vstupného obrázka a nájde zodpovedajúcu alfanumerickú abecedu s najvyššou zhodou.
- Plate Detection ( Plate_detection.m ) - Spracujte obraz a potom zavolajte dva vyššie uvedené súbory m, aby ste zistili počet.
Teraz sa dozvieme, ako kódovať tieto súbory m a čo musíte urobiť pred začatím kódovania. Po absolvovaní tohto tutoriálu nájdete všetky súbory s kódom a video s pracovným vysvetlením na konci tohto projektu.
Vytvorenie šablóny
Najskôr vytvorte priečinok pre projekt (môj priečinok má názov Number Plate Detection ), aby ste mohli súbory uložiť a uložiť. Binárne obrázky všetkých abecedných čísel a čísel sme uložili do podadresára s názvom „ alfa“ .
Teraz otvorte okno editora v MATLABe, ako je to znázornené na nasledujúcom obrázku,
Pokiaľ nie ste oboznámení so základnou terminológiou MATLABu, odporúčam vám skontrolovať prepojený návod.
Teraz skopírujte a vložte nasledujúci kód do súboru template_creation.m a uložte súbor do priečinka projektu ( Detekcia tabuľky s evidenčným číslom ). Všetky súbory súvisiace s týmto projektom vrátane súborov šablón obrázkov si môžete stiahnuť odtiaľto. Tiež skontrolujte video uvedená na konci tohto projektu.
% Abecedy 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 ('alfa / X.bmp '); Y = imread ('alfa / Y.bmp'); Z = imread ('alfa / Z.bmp'); % Prirodzených čísel jeden = imread ('alfa / 1.bmp'); dva = imread ('alfa / 2.bmp'); tri = imread ('alfa / 3.bmp'); štyri = imread ('alfa / 4.bmp'); five = imread ('alpha / 5.bmp'); six = imread ('alpha / 6.bmp'); sedem = imread ('alfa / 7.bmp'); osem = imread ('alfa / 8.bmp'); deväť = imread ('alpha / 9.bmp'); nula = imread ('alfa / 0.bmp'); % Vytvorenie poľa pre abecedy písmeno =; % Vytvorenie poľa pre čísla number =; NewTemplates =; save ('NewTemplates', 'NewTemplates') clear all
Tu vo vyššie uvedenom kóde ukladáme obrázky do premennej pomocou príkazu „ imread () “. Táto funkcia sa používa na vyvolanie obrázkov z priečinka alebo z ľubovoľného umiestnenia počítača v počítači MATLAB. Zoberme si príklad z vyššie uvedeného kódu:
A = imread ('alfa / A.bmp');
Kde A je premenná a v priečinku „ alpha / A.bmp“ je „alfa“ názov priečinka a „ A.bmp“ názov súboru.
Potom vytvorte maticu „ písmen “ a „ čísel “ a uložte ju do premennej „ NewTemplates “ pomocou príkazu „ uložiť (názov súboru, premenné)“ .
% Vytvorenie poľa pre abecedy písmeno =; % Vytvorenie poľa pre čísla number =; NewTemplates =; save ('NewTemplates', 'NewTemplates') clear all
Teraz začnite kódovať Letter_detection.m v novom okne editora.
Detekcia písmen
Tu vytvárame druhý súbor s názvom Letter_detection.m . Teraz skopírujte a vložte nasledujúci kód do tohto súboru a uložte súbor do priečinka projektu s názvom Letter_detection. Tento súbor je možné stiahnuť odtiaľto, tento pripojený súbor zip obsahuje aj ďalšie súbory súvisiace s týmto projektom detekcie ŠPZ.
funkčné písmeno = readLetter (snap) načítať NewTemplates snap = imresize (snap,); rec =; pre n = 1: dĺžka (NewTemplates) cor = corr2 (NewTemplates {1, n}, snap); rec =; end ind = find (rec == max (rec)); display (find (rec == max (rec))); % Zoznamov abeced. ak ind == 1 - ind == 2 písmeno = 'A'; elseif ind == 3 - ind == 4 písmeno = 'B'; elseif ind == 5 písmen = 'C' elseif ind == 6 - ind == 7 písmen = 'D'; elseif ind == 8 písmen = 'E'; elseif ind == 9 písmen = 'F'; elseif ind == 10 písmen = 'G'; elseif ind == 11 písmen = 'H'; elseif ind == 12 písmen = 'I'; elseif ind == 13 písmen = 'J'; elseif ind == 14 písmen = 'K'; elseif ind == 15 písmen = 'L'; elseif ind == 16 písmen = 'M'; elseif ind == 17 písmeno = 'N'; elseif ind == 18 - ind == 19 písmeno = 'O'; elseif ind == 20 - ind == 21 písmeno = 'P'; elseif ind == 22 - ind == 23 písmeno = 'Q'; elseif ind == 24 - ind == 25 písmeno = 'R'; elseif ind == 26 písmeno = 'S'; elseif ind == 27 písmeno = 'T'; elseif ind == 28 písmen = 'U'; elseif ind == 29 písmen = 'V'; elseif ind == 30 písmen = 'W'; elseif ind == 31 písmeno = 'X'; elseif ind == 32 písmeno = 'Y'; elseif ind == 33 písmeno = 'Z'; % * - * - * - * - * % Číslovky výpisy. elseif ind == 34 písmeno = '1'; elseif ind == 35 písmeno = '2'; elseif ind == 36 písmen = '3'; elseif ind == 37 - ind == 38 písmeno = '4'; elseif ind == 39 písmeno = '5'; elseif ind == 40 - ind == 41 - ind == 42 písmeno = '6'; elseif ind == 43 písmeno = '7'; elseif ind == 44 - ind == 45 písmeno = '8'; elseif ind == 46 - ind == 47 - ind == 48 písmen = '9'; else letter = '0'; koniec koniec
Tu sme vo vyššie uvedenom kóde vytvorili funkciu s názvom písmeno, ktorá nám pomocou príkazu „ readLetter ()“ poskytuje alfanumerický výstup vstupného obrázka z triedy „ alpha “ . A potom načítajte uložené šablóny pomocou príkazu načítať 'NewTemplates .
Potom sme zmenili veľkosť vstupného obrázka, aby ho bolo možné porovnať s obrázkami šablóny pomocou príkazu „imresize (názov súboru, veľkosť)“ . Potom sa slučka for použije na koreláciu vstupného obrázka s každým obrázkom v šablóne, aby sa dosiahla najlepšia zhoda.
Vytvorí sa matica „ rec “ na zaznamenanie hodnoty korelácie pre každú alfanumerickú šablónu so šablónou znakov zo vstupného obrázka, ako je uvedené v nasledujúcom kóde,
cor = corr2 (NewTemplates {1, n}, Snap);
Potom sa pomocou príkazu 'find ()' vyhľadá index, ktorý zodpovedá znaku s najvyššou zhodou. Podľa tohto indexu sa potom zodpovedajúci znak vytlačí pomocou príkazu „if-else“ .
Teraz, po dokončení tohto, otvorte nové okno editora na spustenie kódu pre hlavný program.
Detekcia ŠPZ
Tu je tretí a posledný súbor kódu s názvom Plate_detection.m, skopírujte a vložte nasledujúci kód do tohto súboru a uložte do priečinka projektu. Pre rýchly štart si môžete odtiaľto stiahnuť všetky súbory s kódmi so šablónami obrázkov.
zavrieť všetko; zmazať všetko; im = imread ('ŠPZ / image1.png'); imgray = rgb2gray (im); imbin = imbinarize (imgray); im = hrana (obr., 'prewitt'); % Nižšie uvedené kroky slúžia na vyhľadanie umiestnenia tabuľky s evidenčným číslom Iprops = regionprops (im, 'BoundingBox', 'Area', 'Image'); plocha = Iprops.Area; count = numel (Iprops); maxa = plocha; boundingBox = Iprops.BoundingBox; pre i = 1: počíta sa, ak je max
Základné príkazy použité vo vyššie uvedenom kóde sú uvedené nižšie:
imread () - Tento príkaz sa používa na otvorenie obrázka do MATLABu z cieľového priečinka.
rgb2gray () - Tento príkaz sa používa na prevod obrázka RGB do formátu sivej.
imbinarize () - Tento príkaz sa používa na binarizáciu 2D obrazu v odtieňoch sivej alebo jednoducho môžeme povedať, že prevádza obrázok do čiernobieleho formátu.
edge () - Tento príkaz sa používa na detekciu hrán v obraze pomocou rôznych metód, ako sú Roberts, Sobel, Prewitt a mnoho ďalších.
regionprops () - Tento príkaz sa používa na meranie vlastností oblasti obrázka.
numel () - Tento príkaz sa používa na výpočet počtu prvkov poľa.
imcrop () - Tento príkaz sa používa na orezanie obrázka v zadanej veľkosti.
bwareaopen () - Tento príkaz sa používa na odstránenie malých objektov z binárneho obrazu.
Použitím vyššie uvedených príkazov v kóde voláme vstupný obrázok a konvertujeme ho na stupne šedej. Potom sa škála šedej prevedie na binárny obraz a okraj binárnych obrazov sa zistí metódou Prewitt.
Potom sa nižšie uvedený kód použije na zistenie umiestnenia ŠPZ na celom vstupnom obrázku, Iprops = regionprops (im, 'BoundingBox', 'Area', 'Image'); plocha = Iprops.Area; count = numel (Iprops); maxa = plocha; boundingBox = Iprops.BoundingBox; pre i = 1: počíta sa, ak je max
Potom orezajte ŠPZ a odstráňte malé objekty z binárneho obrazu pomocou príkazu „imcrop ()“ a „bwareaopen ()“ .
Nasledujúci kód sa potom použije na spracovanie orezaného obrázka ŠPZ a na zobrazenie zisteného čísla v obrazovom a textovom formáte (v príkazovom okne).
Iprops = regionprops (im, 'BoundingBox', 'Area', 'Image'); count = numel (Iprops); noPlate =; pre i = 1: count ow = dĺžka (Iprops (i). Image (1,:)); oh = dĺžka (Iprops (i). Image (:, 1)); ak ow <(h / 2) & oh> (h / 3) letter = Letter_detection (Iprops (i).Image); noPlate = end end
Fungovanie systému na zisťovanie čísla registračnej značky vozidla pomocou MATLABu
V súbore template_creation.m sme navrhli kód na uloženie všetkých binárnych obrazov alfanumeriky do adresára alebo súboru s názvom „ NewTemplates “. Potom sa tento adresár volá v Letter_detection.m, ako vidíte nižšie
Potom sa v súbore kódu Plate_detection.m zavolá súbor kódu Letter_detection.m, keď obrázok spracujeme, ako je to znázornené na obrázku nižšie,
Teraz kliknite na tlačidlo „RUN“, aby ste spustili súbor.m.
MATLABu môže trvať niekoľko sekúnd, kým odpovie, počkajte, kým sa v ľavom dolnom rohu nezobrazí rušná správa, ako je to zobrazené nižšie,
Po spustení programu sa zobrazí okno s obrázkom tabuľky s evidenčným číslom a číslo v príkazovom okne. Výstup pre môj obrázok bude vyzerať ako obrázok uvedený nižšie;
Kompletné fungovanie systému detekcie štítkov s evidenčným číslom vozidla je demonštrované na videu nižšie a všetky súbory s kódmi so šablónami obrázkov si môžete stiahnuť odtiaľto.
Skontrolujte tiež všetky projekty MATLABu.