- Mallin luominen
- Kirjainten tunnistus
- Rekisterikilven tunnistus
- Ajoneuvon rekisterikilven tunnistusjärjestelmän toiminta MATLAB: n avulla
Oletko koskaan miettinyt, kuinka ANPR (Automatic Number Plate Recognition) -järjestelmä toimii? Haluan kertoa teille sen takana olevan käsitteen: ANPR-järjestelmän kamera sieppaa kuvan ajoneuvon rekisterikilvestä ja sitten kuvaa käsitellään useiden algoritmien avulla kuvan aakkosnumeerisen muunnoksen aikaansaamiseksi tekstimuodoksi. ANPR-järjestelmää käytetään monissa paikoissa, kuten bensiinipumpuissa, ostoskeskuksissa, lentokentillä, moottoriteillä, tietullissa, hotelleissa, sairaaloissa, parkkipaikoissa, puolustus- ja sotilaspisteissä jne.
Tähän rekisterikilven havaitsemiseen on tarjolla monia kuvankäsittelytyökaluja, mutta tässä opetusohjelmassa käytämme MATLAB-kuvankäsittelyä saadaksesi ajoneuvon rekisterikilven tekstimuotoon. Jos sinulla on uusi MATLAB- tai kuvankäsittelyohjelma, tarkista edelliset MATLAB-projektit:
- MATLABin käytön aloittaminen: Nopea esittely
- Kuvankäsittelyn aloittaminen MATLAB: n avulla
Ensinnäkin haluaisin kertoa teille käsitteestä, jota käytämme rekisterikilpien havaitsemiseen. Tässä projektissa on kolme ohjelmaa tai.m-tiedostoa.
- Template Creation ( template_creation.m ) - Tätä käytetään aakkosnumeeristen tallennettujen kuvien kutsumiseen ja tallentamiseen sitten uutena mallina MATLAB-muistiin.
- Kirjainten tunnistus ( Letter_detection.m ) - Lukee merkit syötekuvasta ja löytää vastaavimman aakkosnumeerisen merkin.
- Levyn tunnistus ( Plate_detection.m ) - Käsittele kuva ja soita sitten yllä oleviin kahteen m-tiedostoon tunnistaaksesi numero.
Nyt opimme kuinka koodata nämä m-tiedostot ja mitä sinun on tehtävä ennen koodauksen aloittamista. Tämän opetusohjelman jälkeen löydät kaikki kooditiedostot ja toimivan selitysvideon tämän projektin lopussa.
Mallin luominen
Luo ensin kansio projektille (kansion nimi on Numerotunnistus ) tiedostojen tallentamiseksi ja tallentamiseksi. Olemme tallentaneet kaikkien aakkosien ja numeroiden binaarikuvat alikansioon nimeltä alfa .
Avaa nyt MATLAB: n Editori-ikkuna, kuten alla olevassa kuvassa näkyy,
Jos et ole perehtynyt MATLABin perustermeihin, suosittelen tarkistamaan linkitetyn opetusohjelman.
Kopioi ja liitä alla oleva koodi nyt template_creation.m- tiedostoon ja tallenna tiedosto projektikansioon ( rekisterikilven tunnistus ). Kaikki tähän projektiin liittyvät tiedostot, mukaan lukien kuvamallitiedostot, voidaan ladata täältä. Myös tarkistaa video annetaan lopussa tämän projektin.
% Aakkoset A = luettu ('alfa / A.bmp'); B = luettu ('alfa / B.bmp'); C = luettu ('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'); % Luonnolliset numerot yksi = luettu ('alfa / 1.bmp'); kaksi = luettu ('alfa / 2.bmp'); kolme = imread ('alfa / 3.bmp'); neljä = imread ('alfa / 4.bmp'); viisi = luettu ('alfa / 5.bmp'); kuusi = luettu ('alfa / 6.bmp'); seitsemän = imread ('alfa / 7.bmp'); kahdeksan = imread ('alfa / 8.bmp'); yhdeksän = luettu ('alfa / 9.bmp'); nolla = luettu ('alfa / 0.bmp'); % Taulukon luominen aakkosille kirjain =; % Taulukon luominen numeroille =; NewTemplates =; save ('NewTemplates', 'NewTemplates') tyhjentää kaikki
Tässä yllä olevassa koodissa tallennamme kuvat muuttujaan komennolla ' imread () '. Tätä toimintoa käytetään kutsumaan kuvat kansiosta tai mistä tahansa tietokoneen sijainnista MATLAB: iin. Otetaan esimerkki yllä olevasta koodista:
A = luettu ('alfa / A.bmp');
Missä A on muuttuja ja kohdassa " alfa / A.bmp" , "alfa" on kansion nimi ja " A.bmp" on tiedoston nimi.
Luo sitten matriisi kirjaimista ja numeroista ja tallenna se muuttujaan NewTemplates komennolla ' save (tiedostonimi, muuttujat)' .
% Taulukon luominen aakkosille kirjain =; % Taulukon luominen numeroille =; NewTemplates =; save ('NewTemplates', 'NewTemplates') tyhjentää kaikki
Aloita nyt Letter_detection.m- koodaus uudessa editori-ikkunassa.
Kirjainten tunnistus
Tässä luomme toisen kooditiedoston nimeltä Letter_detection.m . Kopioi ja liitä alla oleva koodi tähän tiedostoon ja tallenna tiedosto projektikansioon nimellä Letter_detection. Tämä tiedosto voidaan ladata täältä, tämä liitteenä oleva zip-tiedosto sisältää myös muita tähän rekisterikilven tunnistusprojektiin liittyviä tiedostoja.
funktiokirjain = readLetter (napsautus) kuormitus NewTemplates snap = imresize (snap,); rec =; for n = 1: pituus (NewTemplates) cor = corr2 (NewTemplates {1, n}, napsauta); rec =; end ind = etsi (rec == max (rec)); näyttö (etsi (rec == max (rec))); % Aakkoset. jos ind == 1 - ind == 2 kirjainta = 'A'; elseif ind == 3 - ind == 4 kirjainta = 'B'; elseif ind == 5 kirjainta = 'C' elseif ind == 6 - ind == 7 kirjainta = 'D'; elseif ind == 8 kirjainta = 'E'; elseif ind == 9 kirjainta = 'F'; elseif ind == 10 kirjainta = 'G'; elseif ind == 11 kirjainta = 'H'; elseif = 12 kirjainta = 'I'; elseif ind == 13 kirjainta = 'J'; elseif ind == 14 kirjainta = 'K'; elseif ind == 15 kirjainta = 'L'; elseif ind == 16 kirjainta = 'M'; elseif ind == 17 kirjainta = 'N'; elseif ind == 18 - ind == 19 kirjain = 'O'; elseif ind == 20 - ind == 21 kirjain = 'P'; elseif ind == 22 - ind == 23 kirjain = 'Q'; elseif ind == 24 - ind == 25 kirjain = 'R'; elseif ind == 26 kirjainta = 'S'; elseif ind == 27 kirjainta = 'T'; elseif ind == 28 kirjainta = 'U'; elseif ind == 29 kirjainta = 'V'; elseif ind == 30 kirjainta = 'W'; elseif ind == 31 kirjainta = 'X'; elseif = = 32 kirjain = 'Y'; elseif ind == 33 kirjainta = 'Z'; % * - * - * - * - * % Numerot listat. elseif ind == 34 kirjainta = '1'; elseif ind == 35 kirjainta = '2'; elseif ind == 36 kirjainta = '3'; elseif ind == 37 - ind == 38 kirjain = '4'; elseif ind == 39 kirjainta = '5'; elseif ind == 40 - ind == 41 - ind == 42 kirjain = '6'; elseif ind == 43 kirjainta = '7'; elseif ind == 44 - ind == 45 kirjain = '8'; elseif ind == 46 - ind == 47 - ind == 48 kirjain = '9'; muu kirjain = '0'; end end
Tässä olemme luoneet yllä olevaan koodiin funktion nimeltä kirjain, joka antaa meille aakkosnumeerisen tuloksen kuvan alfasta käyttämällä komentoa ' readLetter ()' . Lataa sitten tallennetut mallit komennolla Load NewTemplates .
Sen jälkeen olemme muuttaneet tulokuvan kokoa, jotta sitä voidaan verrata mallin kuviin komennolla 'imresize (tiedostonimi, koko)' . Sitten sillä silmukkaa käytetään korreloi syötetyn kuvan jokaisen kuvan mallin saada paras ottelu.
Matriisi ' rec ' luodaan kunkin aakkosnumeerisen mallin korrelaation arvon tallentamiseksi syöttökuvan merkkimallin kanssa alla olevan koodin mukaisesti,
cor = corr2 (NewTemplates {1, n}, napsauta);
Sitten 'etsi ()' -komentoa käytetään hakemiston löytämiseen, joka vastaa parhaiten vastaavaa merkkiä. Tämän indeksin mukaan vastaava merkki tulostetaan 'if-else' -lausekkeella.
Kun olet suorittanut tämän, avaa uusi editori-ikkuna aloittaaksesi pääohjelman koodin.
Rekisterikilven tunnistus
Tässä on kolmas ja viimeinen kooditiedosto nimeltä Plate_detection.m kopioi ja liitä alla oleva koodi tähän tiedostoon ja tallenna se projektikansioon. Pika-aloitusohjeet varten voit ladata kaikki kooditiedostot kuvamalleilla täältä.
sulje kaikki; Tyhjennä; im = imread ('Rekisterikilven kuvat / image1.png'); imgray = rgb2gray (im); imbin = imbinarize (imgray); im = reuna (imgray, 'prewitt'); % Seuraavista vaiheista löydät rekisterikilven sijainnin Iprops = regionprops (im, 'BoundingBox', 'Area', 'Image'); alue = Iprops.Area; count = numel (Iprops); maxa = pinta-ala; boundingBox = Iprops.BoundingBox; i = 1: lasketaan, jos maxa
Yllä olevassa koodissa käytetyt peruskomennot mainitaan alla:
imread () - Tätä komentoa käytetään kuvan avaamiseen MATLAB: iin kohdekansiosta.
rgb2gray () - Tätä komentoa käytetään muuntamaan RGB-kuva harmaasävymuotoon.
imbinarize () - Tätä komentoa käytetään 2-D harmaasävykuvan binarointiin tai voimme yksinkertaisesti sanoa, että se muuntaa kuvan mustavalkoiseksi.
reuna () - Tätä komentoa käytetään kuvan reunojen tunnistamiseen käyttämällä erilaisia menetelmiä, kuten Roberts, Sobel, Prewitt ja monia muita.
regionprops () - Tätä komentoa käytetään mittaamaan kuva-alueen ominaisuuksia.
numel () - Tätä komentoa käytetään laskemaan matriisielementtien määrä.
imcrop () - Tätä komentoa käytetään kuvan rajaamiseen syötetyssä koossa.
bwareaopen () - Tätä komentoa käytetään pienten objektien poistamiseen binaarikuvasta.
Käyttämällä yllä olevia komentoja koodissa kutsumme syötekuvan ja muunnamme sen harmaasävyksi. Sitten harmaasävy muunnetaan binaarikuvaksi ja binäärikuvien reuna havaitaan Prewitt-menetelmällä.
Sitten alla olevaa koodia käytetään tunnistamaan rekisterikilven sijainti koko syötekuvassa, Iprops = regionprops (im, 'BoundingBox', 'Area', 'Image'); alue = Iprops.Area; count = numel (Iprops); maxa = pinta-ala; boundingBox = Iprops.BoundingBox; i = 1: lasketaan, jos maxa
Tämän jälkeen rajata rekisterikilpi ja poista pienet esineet binäärikuvasta käyttämällä komentoja 'imcrop ()' ja 'bwareaopen ()' .
Seuraavaa koodia käytetään sitten rajatun rekisterikilven kuvan käsittelemiseen ja havaitun numeron näyttämiseen kuva- ja tekstimuodossa (komentoikkunassa).
Iprops = regionprops (im, 'BoundingBox', 'Area', 'Image'); count = numel (Iprops); noPlate =; i = 1: count ow = pituus (Iprops (i).Kuva (1,:)); oh = pituus (Iprops (i). Kuva (:, 1)); if ow <(h / 2) & oh> (h / 3) kirjain = Letter_detection (Iprops (i).Kuva); noPlate = end end
Ajoneuvon rekisterikilven tunnistusjärjestelmän toiminta MATLAB: n avulla
Vuonna template_creation.m tiedosto meillä suunnitella koodin tallentaa kaikki binary kuvat kirjaimia hakemistoon tai tiedoston nimetty ' NewTemplates '. Sitten kyseistä hakemistoa kutsutaan Letter_detection.m: ssä, kuten näet alla
Sitten Plate_detection.m- kooditiedostossa kutsutaan Letter_detection.m- kooditiedostoa, kun käsittelemme kuvaa alla olevan kuvan mukaisesti,
Napsauta nyt RUN-painiketta ajaaksesi.m-tiedoston
MATLAB voi kestää muutaman sekunnin vastata, odota, kunnes se näyttää varattu viesti vasemmassa alakulmassa alla olevan kuvan mukaisesti,
Ohjelman käynnistyessä saat rekisterikilven kuvan ponnahdusikkunan ja numeron komentoikkunaan. Kuvani tulostus näyttää alla olevalta kuvalta;
Ajoneuvon rekisterikilven tunnistusjärjestelmän täydellinen toiminta on esitetty alla olevassa videossa, ja kaikki kooditiedostot ja kuvamallit voidaan ladata täältä.
Tarkista myös kaikki MATLAB-projektit täältä.