- Ustvarjanje predloge
- Zaznavanje črk
- Zaznavanje registrske tablice
- Delovanje sistema za zaznavanje številk registrske tablice vozila z uporabo MATLAB
Ste se kdaj vprašali, kako deluje sistem ANPR (samodejno prepoznavanje registrske tablice)? Naj vam povem koncept tega, da kamera sistema ANPR zajame podobo registrske tablice vozila, nato pa se slika obdela z več algoritmi, da se zagotovi alfanumerična pretvorba slike v besedilno obliko. Sistem ANPR se uporablja na mnogih mestih, kot so bencinske črpalke, nakupovalna središča, letališča, avtoceste, cestninske postaje, hoteli, bolnišnice, parkirišča, obrambne in vojaške kontrolne točke itd.
Za to zaznavanje registrske tablice je na voljo veliko orodij za obdelavo slik, vendar bomo v tej vadnici uporabili obdelavo slik MATLAB, da bomo številko registrske tablice vozila prenesli v besedilno obliko. Če ste novi v MATLAB-u ali v obdelavi slik, preverite naše prejšnje projekte MATLAB:
- Uvod v MATLAB: kratek uvod
- Uvod v obdelavo slik z uporabo MATLAB
Najprej naj vas seznanim s konceptom, ki ga uporabljamo za odkrivanje registrskih tablic. Za ta projekt obstajajo trije programi ali datoteke.m.
- Ustvarjanje predloge ( template_creation.m ) - S tem se shranijo slike alfanumeričnih slik in nato shranijo kot nova predloga v pomnilnik MATLAB.
- Zaznavanje črk ( Letter_detection.m ) - prebere znake z vhodne slike in poišče ustrezne alfanumerične črke.
- Plate Detection ( Plate_detection.m ) - obdelajte sliko in nato pokličite zgornji dve datoteki m, da zaznate številko.
Zdaj bomo izvedeli, kako kodirati te m-datoteke in kaj morate storiti, preden začnete s kodiranjem. Po pregledu te vadnice lahko na koncu tega projekta najdete vse datoteke s kodami in video z obrazložitvami.
Ustvarjanje predloge
Najprej ustvarite mapo za projekt (moje ime mape je Številčna ploščica ), da shranite in shranite datoteke. Binarne slike vseh abeced in številk smo shranili v podmapo, imenovano " alfa" .
Zdaj odprite okno urejevalnika v MATLAB-u, kot je prikazano na spodnji sliki,
Če ne poznate osnovne terminologije MATLAB, predlagam, da preverite povezano vadnico.
Zdaj kopirajte in prilepite spodnjo kodo v datoteko template_creation.m in jo shranite v mapo projekta ( zaznavanje številčne ploščice ). Vse datoteke, povezane s tem projektom, vključno z datotekami slikovnih predlog, lahko prenesete od tukaj. Oglejte si tudi videoposnetek na koncu tega projekta.
% Abeced A = neprebrano ('alfa / A.bmp'); B = neprebrano ('alfa / B.bmp'); C = neprebrano ('alfa / C.bmp'); D = neprebrano ('alfa / D.bmp'); E = neprebrano ('alfa / E.bmp'); F = neprebrano ('alfa / F.bmp'); G = neprebrano ('alfa / G.bmp'); H = neprebrano ('alfa / H.bmp'); I = neprebrano ('alfa / I.bmp'); J = neprebrano ('alfa / J.bmp'); K = neprebrano ('alfa / K.bmp'); L = neprebrano ('alfa / L.bmp'); M = neprebrano ('alfa / M.bmp'); N = neprebrano ('alfa / N.bmp'); O = neprebrano ('alfa / O.bmp'); P = neprebrano ('alfa / P.bmp'); Q = neprebrano ('alfa / Q.bmp'); R = neprebrano ('alfa / R.bmp'); S = neprebrano ('alfa / S.bmp'); T = neprebrano ('alfa / T.bmp'); U = neprebrano ('alfa / U.bmp'); V = neprebrano ('alfa / V.bmp'); W = neprebrano ('alfa / W.bmp'); X = neprebrano ('alfa / X.bmp '); Y = neprebrano ('alfa / Y.bmp'); Z = neprebrano ('alfa / Z.bmp'); % Naravnih števil ena = neprebrano ('alfa / 1.bmp'); dve = neprebrano ('alfa / 2.bmp'); tri = neprebrano ('alfa / 3.bmp'); štiri = neprebrano ('alfa / 4.bmp'); pet = neprebrano ('alfa / 5.bmp'); šest = neprebrano ('alfa / 6.bmp'); sedem = neprebrano ('alfa / 7.bmp'); osem = neprebrano ('alfa / 8.bmp'); devet = neprebrano ('alfa / 9.bmp'); nič = neprebrano ('alfa / 0.bmp'); % Ustvarjanje polja za abecede letter =; % Ustvarjanje matrike za številke število =; NewTemplates =; save ('NewTemplates', 'NewTemplates') počisti vse
Tu v zgornji kodi slike shranimo v spremenljivko z ukazom ' imread () '. Ta funkcija se uporablja za klic slik iz mape ali s katerega koli mesta računalnika v MATLAB. Vzemimo primer iz zgornje kode:
A = neprebrano ('alfa / A.bmp');
Kjer je A spremenljivka, v ' alpha / A.bmp' pa je 'alpha' ime mape, ' A.bmp' pa ime datoteke.
Nato ustvarite matriko ' črke ' in ' številke ' in jo shranite v spremenljivko ' NewTemplates ' z ukazom ' shrani (ime datoteke, spremenljivke)' .
% Ustvarjanje polja za abecede letter =; % Ustvarjanje matrike za številke število =; NewTemplates =; save ('NewTemplates', 'NewTemplates') počisti vse
Zdaj začnite kodirati Letter_detection.m v novem oknu urejevalnika.
Zaznavanje črk
Tu ustvarjamo drugo kodno datoteko z imenom Letter_detection.m . Zdaj kopirajte in prilepite spodnjo kodo v to datoteko in jo shranite v mapo projekta z imenom Letter_detection. To datoteko lahko prenesete od tukaj, te priložene datoteke zip vsebujejo tudi druge datoteke, povezane s tem projektom zaznavanja registrske tablice.
črka funkcije = readLetter (snap) load NewTemplates snap = imresize (snap,); rec =; za n = 1: dolžina (NewTemplates) cor = corr2 (NewTemplates {1, n}, snap); rec =; konec ind = najti (rec == max (rec)); prikaz (najti (rec == max (rec))); % Seznamov abeced. če je ind == 1 - ind == 2 črki = 'A'; elseif ind == 3 - ind == 4 črka = 'B'; elseif ind == 5 črka = 'C' elseif ind == 6 - ind == 7 črka = 'D'; elseif ind == 8 črka = 'E'; elseif ind == 9 črka = 'F'; elseif ind == 10 črk = 'G'; elseif ind == 11 črka = 'H'; elseif ind == 12 črk = 'I'; elseif ind == 13 črka = 'J'; elseif ind == 14 črka = 'K'; elseif ind == 15 črk = 'L'; elseif ind == 16 črka = 'M'; elseif ind == 17 črka = 'N'; elseif ind == 18 - ind == 19 črka = 'O'; elseif ind == 20 - ind == 21 črka = 'P'; elseif ind == 22 - ind == 23 črka = 'Q'; elseif ind == 24 - ind == 25 črka = 'R'; elseif ind == 26 črka = 'S'; elseif ind == 27 črka = 'T'; elseif ind == 28 črka = 'U'; elseif ind == 29 črka = 'V'; elseif ind == 30 črk = 'W'; elseif ind == 31 črka = 'X'; elseif ind == 32 črka = 'Y'; elseif ind == 33 črka = 'Z'; % * - * - * - * - * % številkami oglasi. elseif ind == 34 črka = '1'; elseif ind == 35 črka = '2'; elseif ind == 36 črka = '3'; elseif ind == 37 - ind == 38 črka = '4'; elseif ind == 39 črka = '5'; elseif ind == 40 - ind == 41 - ind == 42 črka = '6'; elseif ind == 43 črka = '7'; elseif ind == 44 - ind == 45 črka = '8'; elseif ind == 46 - ind == 47 - ind == 48 letter = '9'; sicer črka = '0'; konec konec
Tu smo v zgornji kodi ustvarili funkcijo z imenom črka, ki nam z ukazom " readLetter ()" daje alfanumerični izhodni izhod vhodne slike iz razreda " alfa " . In nato naložite shranjene predloge z ukazom load "NewTemplates .
Po tem smo spremenili velikost vhodne slike, tako da jo lahko primerjamo s slikami predloge z uporabo ukaza 'imresize (ime datoteke, velikost)' . Nato se zanka for uporablja za korelacijo vhodne slike z vsako sliko v predlogi, da dobimo najboljše ujemanje.
Ustvari se matrika ' rec ' za zapis vrednosti korelacije za vsako alfanumerično predlogo s predlogo znakov iz vhodne slike, kot je prikazano v spodnji kodi,
cor = corr2 (NewTemplates {1, n}, snap);
Nato se z ukazom 'find ()' poišče indeks, ki ustreza najvišje ujemajočemu se znaku. Nato se v skladu s tem indeksom ustrezen znak natisne z uporabo stavka "če-drugače" .
Zdaj, ko končate s tem, odprite novo okno urejevalnika za zagon kode glavnega programa.
Zaznavanje registrske tablice
Tu je tretja in zadnja kodna datoteka z imenom Plate_detection.m, kopirajte in prilepite spodnjo kodo v to datoteko ter jo shranite v mapo projekta. Za hiter začetek lahko od tukaj prenesete vse kodne datoteke s slikovnimi predlogami.
zaprite vse; Počisti vse; im = imread ('Slike tablice / image1.png'); imgray = rgb2gray (im); imbin = imbinarizirati (imgray); im = rob (imgray, 'prewitt'); % Spodaj so koraki za iskanje lokacije registrske tablice Iprops = regionprops (im, 'BoundingBox', 'Area', 'Image'); area = Iprops.Area; count = numel (Iprops); maxa = površina; boundingBox = Iprops.BoundingBox; za i = 1: šteje, če je maxa
Osnovni ukazi, uporabljeni v zgornji kodi, so navedeni spodaj:
imread () - Ta ukaz se uporablja za odpiranje slike v MATLAB iz ciljne mape.
rgb2gray () - Ta ukaz se uporablja za pretvorbo slike RGB v format sivine.
imbinarize () - Ta ukaz se uporablja za Binariziranje 2-D slike v sivinah ali preprosto lahko rečemo, da sliko pretvori v črno-belo obliko.
edge () - Ta ukaz se uporablja za zaznavanje robov na sliki z različnimi metodami, kot so Roberts, Sobel, Prewitt in mnogi drugi.
regionprops () - Ta ukaz se uporablja za merjenje lastnosti območja slike.
numel () - Ta ukaz se uporablja za izračun števila elementov matrike.
imcrop () - Ta ukaz se uporablja za obrezovanje slike v vneseni velikosti.
bwareaopen () - Ta ukaz se uporablja za odstranjevanje majhnih predmetov iz binarne slike.
Z uporabo zgornjih ukazov v kodi pokličemo vhodno sliko in jo pretvorimo v sivine. Nato se sivine pretvorijo v binarno sliko in rob binarnih slik zazna z metodo Prewitt.
Nato s spodnjo kodo zaznamo lokacijo tablice na celotni vhodni sliki, Iprops = regionprops (im, 'BoundingBox', 'Area', 'Image'); area = Iprops.Area; count = numel (Iprops); maxa = površina; boundingBox = Iprops.BoundingBox; za i = 1: šteje, če je maxa
Nato obrežite številčno ploščico in odstranite majhne predmete iz binarne slike z ukazom 'imcrop ()' in 'bwareaopen ()' .
Nato se spodnja koda uporablja za obdelavo te obrezane slike registrske tablice in za prikaz zaznane številke v obliki slike in besedila (v ukaznem oknu).
Iprops = regionprops (im, 'BoundingBox', 'Area', 'Image'); count = numel (Iprops); noPlate =; za i = 1: count ow = dolžina (Iprops (i).Image (1,:)); oh = dolžina (Iprops (i). Slika (:, 1)); if ow <(h / 2) & oh> (h / 3) letter = Letter_detection (Iprops (i).Image); noPlate = konec konca
Delovanje sistema za zaznavanje številk registrske tablice vozila z uporabo MATLAB
V datoteki template_creation.m imamo oblikovano kodo za shranjevanje vseh binarnih slik alfanumeričnih znakov v imenik ali datoteko z imenom ' NewTemplates '. Nato se ta imenik pokliče v Letter_detection.m, kot lahko vidite spodaj
Nato se v kodni datoteki Plate_detection.m pokliče kodna datoteka Letter_detection.m, ko obdelamo sliko, kot je prikazano na spodnji sliki,
Zdaj kliknite gumb 'RUN', da zaženete datoteko.m
MATLAB lahko traja nekaj sekund, da se odzove, počakajte, da se v spodnjem levem kotu prikaže sporočilo zasedeno, kot je prikazano spodaj,
Ko se program zažene, se v ukaznem oknu prikaže pojavno okno slike številke in številka. Izhod za mojo sliko bo videti kot slika spodaj;
Popolno delovanje sistema za zaznavanje registrskih tablic vozila je prikazano v spodnjem videu, vse kodne datoteke s slikovnimi predlogami pa lahko prenesete od tukaj.
Tukaj preverite tudi vse projekte MATLAB.