- Sablon létrehozása
- Levélészlelés
- Számtábla észlelése
- A jármű rendszám-érzékelő rendszerének működése a MATLAB segítségével
Gondolkozott már azon, hogy hogyan működik az ANPR (automatikus rendszámtábla-felismerés) rendszer? Hadd mondjam el a mögötte álló koncepciót: az ANPR rendszer kamerája rögzíti a jármű rendszámának képét, majd a képet több algoritmus segítségével dolgozzák fel, hogy a kép alfa-numerikus konvertálást nyújtson szöveges formátumba. Az ANPR rendszert sok helyen használják, például benzinszivattyúkban, bevásárlóközpontokban, repülőtereken, autópályákon, díjfizetési fülkékben, szállodákban, kórházakban, parkolókban, védelmi és katonai ellenőrző pontokon stb.
Számos képfeldolgozó eszköz érhető el ehhez a rendszámtábla-felismeréshez, de itt, ebben az oktatóanyagban, a MATLAB képfeldolgozással fogjuk felhasználni a jármű rendszámát szöveges formátumba. Ha még nem ismeri a MATLAB-ot vagy a képfeldolgozást, akkor ellenőrizze korábbi MATLAB-projektjeinket:
- A MATLAB használatának megkezdése: gyors bemutatás
- A képfeldolgozás kezdete a MATLAB használatával
Először hadd röviden ismertessem a koncepciót, amelyet a rendszámtáblák felismerésére használunk. Három program vagy '.m' fájl létezik ehhez a projekthez.
- Sablon létrehozása ( template_creation.m ) - Ez az alfanumerikus elemek mentett képeinek hívására szolgál, majd új sablonként elmenti őket a MATLAB memóriájába.
- Letter Detection ( Letter_detection.m ) - beolvassa a karaktereket a bemeneti képből, és megtalálja a legmagasabb egyezésű alfanumerikus karaktereket.
- Plate Detection ( Plate_detection.m ) - Feldolgozza a képet, majd hívja meg a fenti két m-fájlt a szám észleléséhez.
Most megtudhatjuk, hogyan kell kódolni ezeket az m-fájlokat, és mit kell tennie a kódolás megkezdése előtt. Miután áttekintette ezt az oktatóanyagot, a projekt végén megtalálhatja az összes kódfájlt és a működő magyarázó videót.
Sablon létrehozása
Először hozzon létre egy mappát a projekthez (a mappanevem a Number Plate Detection ), hogy elmentse és tárolja a fájlokat. Az összes ábécé és szám bináris képeit az ' alfa' névre keresztelt almappában tároltuk.
Most nyissa meg a Szerkesztő ablakot a MATLAB-ban, az alábbi képen látható módon,
Ha nem ismeri a MATLAB alapvető terminológiáját, javasoljuk, hogy ellenőrizze a kapcsolódó oktatóanyagot.
Másolja és illessze be az alábbi kódot a template_creation.m fájlba, és mentse a fájlt a projekt mappába ( Számtábla észlelése ). A projekthez kapcsolódó összes fájl, beleértve a képsablonokat is, innen letölthető. Szintén ellenőrizze a videó végén közölt a projekt.
% Ábécé A = imread ('alfa / A.bmp'); B = imread ('alfa / B.bmp'); C = imread ('alfa / C.bmp'); D = imread ('alfa / D.bmp'); E = imread ('alfa / E.bmp'); F = imread ('alfa / F.bmp'); G = imread ('alfa / G.bmp'); H = imread ('alfa / H.bmp'); I = imread ('alfa / I.bmp'); J = imread ('alfa / J.bmp'); K = imread ('alfa / K.bmp'); L = imread ('alfa / L.bmp'); M = imread ('alfa / M.bmp'); N = imread ('alfa / N.bmp'); O = imread ('alfa / O.bmp'); P = imread ('alfa / P.bmp'); Q = imread ('alfa / Q.bmp'); R = imread ('alfa / R.bmp'); S = imread ('alfa / S.bmp'); T = imread ('alfa / T.bmp'); U = imread ('alfa / U.bmp'); V = imread ('alfa / V.bmp'); W = imread ('alfa / W.bmp'); X = imread ('alfa / X.bmp '); Y = imread ('alfa / Y.bmp'); Z = imread ('alfa / Z.bmp'); % Természetes szám egy = imread ('alfa / 1.bmp'); kettő = imread ('alfa / 2.bmp'); három = imread ('alfa / 3.bmp'); négy = imread ('alfa / 4.bmp'); öt = imread ('alfa / 5.bmp'); hat = imread ('alfa / 6.bmp'); hét = imread ('alfa / 7.bmp'); nyolc = imread ('alfa / 8.bmp'); kilenc = imread ('alfa / 9.bmp'); nulla = imread ('alfa / 0.bmp'); % Tömb létrehozása ábécékhez letter =; % Tömb létrehozása számokhoz =; NewTemplates =; a save ('NewTemplates', 'NewTemplates') törli az összeset
Itt a fenti kódban a képeket egy változóba mentjük az ' imread () ' paranccsal. Ez a funkció a képek meghívására szolgál a mappából vagy a számítógép bármely helyéről a MATLAB-ba. Vegyünk egy példát a fenti kódból:
A = imread ('alfa / A.bmp');
Ahol A a változó és „ alfa / A.bmp” , „alpha” a mappa neve és a „ A.bmp” a fájl neve.
Ezután hozzon létre egy „ betű ” és „ szám ” mátrixot, és mentse el a „ NewTemplates ” változóba a „ save (fájlnév, változók)” paranccsal.
% Tömb létrehozása ábécékhez letter =; % Tömb létrehozása számokhoz =; NewTemplates =; a save ('NewTemplates', 'NewTemplates') törli az összeset
Most kezdje el a Letter_detection.m kódolását egy új szerkesztőablakban.
Levélészlelés
Itt készítjük a Letter_detection.m nevű második kódfájlt . Másolja és illessze be az alábbi kódot abba a fájlba, és mentse a fájlt a Projekt mappába Letter_detection néven. Ez a fájl innen tölthető le, ez a csatolt zip fájlok a Rendszámtábla-felismerési projekthez kapcsolódó egyéb fájlokat is tartalmaznak.
függvény betű = readLetter (snap) betöltés NewTemplates snap = imresize (snap,); rec =; n = 1 esetén: hossz (NewTemplates) cor = corr2 (NewTemplates {1, n}, snap); rec =; véget IND = találni (rec == max (rec)); megjelenítés (keresés (rec == max (rec))); % Ábécé listák. ha ind == 1 - ind == 2 betű = 'A'; elseif ind == 3 - ind == 4 betű = 'B'; elseif ind == 5 betű = 'C' elseif ind == 6 - ind == 7 betű = 'D'; elseif ind == 8 betű = 'E'; elseif ind == 9 betű = 'F'; elseif ind == 10 betű = 'G'; elseif ind == 11 betű = 'H'; elseif ind == 12 betű = 'I'; elseif ind == 13 betű = 'J'; elseif ind == 14 betű = 'K'; elseif ind == 15 betű = 'L'; elseif ind == 16 betű = 'M'; elseif ind == 17 betű = 'N'; elseif ind == 18 - ind == 19 betű = 'O'; elseif ind == 20 - ind == 21 betű = 'P'; elseif ind == 22 - ind == 23 betű = 'Q'; elseif ind == 24 - ind == 25 betű = 'R'; elseif ind == 26 betű = 'S'; elseif ind == 27 betű = 'T'; elseif ind == 28 betű = 'U'; elseif ind == 29 betű = 'V'; elseif ind == 30 betű = 'W'; elseif ind == 31 betű = 'X'; elseif ind == 32 betű = 'Y'; elseif ind == 33 betű = 'Z'; % * - * - * - * - * % számok listáját. elseif ind == 34 betű = '1'; elseif ind == 35 betű = '2'; elseif ind == 36 betű = '3'; elseif ind == 37 - ind == 38 betű = '4'; elseif ind == 39 betű = '5'; elseif ind == 40 - ind == 41 - ind == 42 betű = '6'; elseif ind == 43 betű = '7'; elseif ind == 44 - ind == 45 betű = '8'; elseif ind == 46 - ind == 47 - ind == 48 betű = '9'; else letter = '0'; end end
Itt a fenti kódban létrehoztunk egy betű nevű függvényt, amely a ' readLetter ()' paranccsal megadja nekünk az ' alpha ' osztályból származó bemeneti kép alfanumerikus kimenetét. Ezután töltse be a mentett sablonokat a 'NewTemplates parancs betöltésével .
Ezt követően átméreteztük a bemeneti képet, hogy az „imresize (fájlnév, méret)” paranccsal összehasonlítható legyen a sablon képeivel . Ezután a ciklushoz a bemeneti képet a sablon minden képével korreláljuk, hogy a legjobb egyezést kapjuk.
A „ rec ” mátrix jön létre, amely rögzíti az egyes alfanumerikus sablonok korrelációs értékét a bemeneti kép karaktersablonjával, az alábbi kód szerint,
cor = corr2 (NewTemplates {1, n}, snap);
Ezután a 'find ()' paranccsal megtalálható az index, amely megfelel a legjobban illesztett karakternek. Ezután az index szerint a megfelelő karakter ki van nyomtatva az „if-else” utasítással.
Miután ezt befejezte, nyisson meg egy új szerkesztőablakot a főprogram kódjának indításához.
Számtábla észlelése
A Plate_detection.m nevű harmadik és egy utolsó kódfájl másolja és illessze be az alábbi kódot ebbe a fájlba, és mentse a projekt mappába. A gyors indítás érdekében innen letöltheti az összes képfájlt tartalmazó kódfájlt.
bezár minden; mindent kitöröl; im = imread ('Számtábla képek / image1.png'); imgray = rgb2gray (im); imbin = imbinarizál (imgray); im = él (imgray, 'prewitt'); % Az alábbiakban meg kell találni a rendszám helyét Iprops = regionprops (im, 'BoundingBox', 'Area', 'Image'); terület = Iprops.Area; count = numel (Iprops); maxa = terület; boundingBox = Iprops.BoundingBox; i = 1 esetén: számolja meg, ha max
A fenti kódban használt alapvető parancsokat az alábbiakban említjük:
imread () - Ezzel a paranccsal nyitható meg a kép a MATLAB-ba a célmappából.
rgb2gray () - Ezzel a paranccsal lehet az RGB képet szürkeárnyalatos formátumúra konvertálni.
imbinarize () - Ezt a parancsot használjuk a 2-D szürkeárnyalatos képek binárisításához, vagy egyszerűen azt mondhatjuk, hogy a képet fekete-fehér formátumúra konvertálja.
edge () - Ez a parancs a kép széleinek észlelésére szolgál, különféle módszerekkel, mint Roberts, Sobel, Prewitt és még sok más.
regionprops () - Ez a parancs a kép régió tulajdonságainak mérésére szolgál.
numel () - Ezzel a paranccsal kiszámolható a tömb elemek száma.
imcrop () - Ez a parancs a kép kivágására szolgál a megadott méretben.
bwareaopen () - Ez a parancs kis objektumok eltávolítására szolgál a bináris képből.
A fenti parancsok használatával a kódban meghívjuk a bemeneti képet és átalakítjuk szürkeárnyalattá. Ezután a szürkeárnyalatot bináris képpé alakítják, és a bináris képek szélét Prewitt módszerrel érzékeli .
Ezután az alábbi kód segítségével felismerhető a rendszám helye a teljes bemeneti képen, Iprops = regionprops (im, 'BoundingBox', 'Area', 'Image'); terület = Iprops.Area; gróf = szám (Iprops); maxa = terület; boundingBox = Iprops.BoundingBox; i = 1 esetén: számolja meg, ha max
Ezt követően vágja le a rendszámtáblát, és távolítsa el a kis objektumokat a bináris képről az 'imcrop ()', illetve a 'bwareaopen ()' parancsokkal .
Ezután az alábbi kódot használják a levágott rendszám kép feldolgozására és az észlelt szám megjelenítésére kép és szöveg formátumban (a parancsablakban).
Iprops = regionprops (im, 'BoundingBox', 'Area', 'Image'); gróf = szám (Iprops); noPlate =; i = 1 esetén: count ow = hossz (Iprops (i). Kép (1,:)); oh = hossz (Iprops (i). Kép (:, 1)); if ow <(h / 2) & oh> (h / 3) betű = Levél_detektálás (Iprops (i).Kép); noPlate = vég vége
A jármű rendszám-érzékelő rendszerének működése a MATLAB segítségével
A template_creation.m fájlban megtervezzük a kódot, hogy az alfanumerikus összes bináris képet egy " NewTemplates " névre keresztelt könyvtárba vagy fájlba mentse . Ezután a könyvtárat meghívjuk a Letter_detection.m-ben, amint az alább látható
Ezután a Plate_detection.m kódfájlban a Letter_detection.m kódfájlt hívjuk meg, amikor a képet az alábbi képen látható módon feldolgozzuk,
Most kattintson a 'FUTÁS' gombra az.m fájl futtatásához
A MATLAB reagálása néhány másodpercet vehet igénybe, várjon, amíg elfoglalt üzenet jelenik meg a bal alsó sarokban, az alábbiak szerint,
A program indításakor megkapja a rendszám képének felugró ablakát és a számot a parancsablakban. A képem kimenete olyan lesz, mint az alább megadott;
A jármű-rendszámtábla-észlelő rendszer teljes működését az alábbi videó mutatja be, és az összes képfájl sablonokkal együtt letölthető innen.
Itt ellenőrizheti az összes MATLAB projektet is.