- Израда шаблона
- Откривање слова
- Откривање регистарске плочице
- Рад система за откривање броја регистарских таблица возила помоћу МАТЛАБ-а
Да ли сте се икада запитали како функционише систем АНПР (аутоматско препознавање таблице)? Рећи ћу вам концепт који стоји иза тога, камера АНПР система снима слику регистарске таблице возила, а затим се слика обрађује кроз вишеструки број алгоритама како би се обезбедила алфа нумеричка конверзија слике у текстуални формат. АНПР систем се користи на многим местима као што су бензинске пумпе, тржни центри, аеродроми, аутопутеви, наплатне рампе, хотели, болнице, паркиралишта, одбрамбени и војни пунктови итд.
За ово откривање регистарске плочице доступно је много алата за обраду слика, али овде у овом упутству ћемо користити МАТЛАБ обраду слика да бисмо број таблице возила пребацили у текстуални формат. Ако сте нови у МАТЛАБ-у или у обради слика, погледајте наше претходне МАТЛАБ-ове пројекте:
- Први кораци са МАТЛАБ-ом: Кратки увод
- Први кораци у обради слика помоћу МАТЛАБ-а
Прво, дозволите ми да вас укратко упознам са концептом који користимо за откривање таблица. Постоје три програма или „.м“ датотеке за овај пројекат.
- Креирање предлошка ( темплате_цреатион.м ) - Користи се за позивање сачуваних слика алфанумеричких бројева, а затим их чува као нови образац у МАТЛАБ меморији.
- Откривање слова ( Леттер_детецтион.м ) - чита знакове са улазне слике и проналази одговарајућу алфанумеричку вредност која се најбоље подудара.
- Откривање плоче ( Плате_детецтион.м ) - Обрадите слику, а затим позовите горње две м-датотеке да бисте открили број.
Сада ћемо научити како кодирати ове м-датотеке и шта морате учинити пре почетка кодирања. Након што прођете кроз овај водич, на крају овог пројекта можете пронаћи све датотеке с кодовима и видео с објашњењима.
Израда шаблона
Прво креирајте фасциклу за пројекат (моје име фасцикле је Откривање таблице ) да бисте сачували и сачували датотеке. Бинарне слике свих абецеда и бројева сачували смо у подмапи која је названа „ алфа“ .
Сада отворите прозор Едитор у МАТЛАБ-у, као што је приказано на доњој слици,
Ако нисте упознати са основном терминологијом МАТЛАБ-а, предлажем вам да погледате повезани водич.
Сада копирајте и залепите доњи код у датотеку темплате_цреатион.м и сачувајте датотеку у директоријуму пројекта ( Откривање плочице са бројевима ). Све датотеке повезане са овим пројектом, укључујући датотеке шаблона слика, могу се преузети овде. Такође погледајте видео запис дат на крају овог пројекта.
% Абецеде А = непрочитано ('алфа / А.бмп'); Б = непрочитано ('алфа / Б.бмп'); Ц = непрочитано ('алфа / Ц.бмп'); Д = непрочитано ('алфа / Д.бмп'); Е = непрочитано ('алфа / Е.бмп'); Ф = непрочитано ('алфа / Ф.бмп'); Г = непрочитано ('алфа / Г.бмп'); Х = непрочитано ('алфа / Х.бмп'); И = непрочитано ('алфа / И.бмп'); Ј = непрочитано ('алфа / Ј.бмп'); К = непрочитано ('алфа / К.бмп'); Л = непрочитано ('алфа / Л.бмп'); М = непрочитано ('алфа / М.бмп'); Н = непрочитано ('алфа / Н.бмп'); О = непрочитано ('алфа / О.бмп'); П = непрочитано ('алфа / П.бмп'); К = непрочитано ('алфа / П.бмп'); Р = непрочитано ('алфа / Р.бмп'); С = непрочитано ('алфа / С.бмп'); Т = непрочитано ('алфа / Т.бмп'); У = непрочитано ('алфа / У.бмп'); В = непрочитано ('алфа / В.бмп'); В = непрочитано ('алфа / В.бмп'); Кс = непрочитано ('алфа / Кс.бмп '); И = непрочитано ('алфа / И.бмп'); З = непрочитано ('алфа / З.бмп'); % Природних бројева један = непрочитано ('алфа / 1.бмп'); два = непрочитано ('алфа / 2.бмп'); тхрее = имреад ('алпха / 3.бмп'); фоур = имреад ('алпха / 4.бмп'); пет = непрочитано ('алфа / 5.бмп'); шест = непрочитано ('алфа / 6.бмп'); седам = непрочитано ('алфа / 7.бмп'); осам = непрочитано ('алфа / 8.бмп'); девет = непрочитано ('алфа / 9.бмп'); нула = непрочитано ('алфа / 0.бмп'); % Стварање низа за абецеде леттер =; % Креирање низа за бројеве број =; НевТемплатес =; саве ('НевТемплатес', 'НевТемплатес') обриши све
Овде, у горњем коду, слике чувамо у променљиву помоћу наредбе ' имреад () '. Ова функција се користи за позивање слика из директоријума или са било ког места рачунара у МАТЛАБ. Узмимо пример из горњег кода:
А = непрочитано ('алфа / А.бмп');
Тамо где је А променљива, а у „ алпха / А.бмп“ , „алпха“ је име фасцикле, а „ А.бмп“ је име датотеке.
Затим створите матрицу од ' слова ' и ' броја ' и сачувајте је у променљивој ' НевТемплатес ' помоћу команде ' саве (име датотеке, променљиве)' .
% Стварање низа за абецеде леттер =; % Креирање низа за бројеве број =; НевТемплатес =; саве ('НевТемплатес', 'НевТемплатес') обриши све
Почните са кодирањем Леттер_детецтион.м , у новом прозору уређивача.
Откривање слова
Овде креирамо другу кодну датотеку која се зове Леттер_детецтион.м . Сада копирајте и залепите доњи код у ту датотеку и сачувајте датотеку у директоријуму пројекта са именом Леттер_детецтион. Ову датотеку можете преузети овде, ове приложене зип датотеке садрже и друге датотеке повезане са овим пројектом откривања регистарске плочице.
функцијско слово = реадЛеттер (снап) лоад НевТемплатес снап = имресизе (снап,); рец =; за н = 1: дужина (НевТемплатес) цор = цорр2 (НевТемплатес {1, н}, снап); рец =; крај инд = пронађи (рец == мак (рец)); приказ (пронађи (рец == мак (рец))); % Спискови абецеда. ако је инд == 1 - инд == 2 слово = 'А'; елсеиф инд == 3 - инд == 4 слово = 'Б'; елсеиф инд == 5 слова = 'Ц' елсеиф инд == 6 - инд == 7 слово = 'Д'; елсеиф инд == 8 слово = 'Е'; елсеиф инд == 9 слово = 'Ф'; елсеиф инд == 10 слово = 'Г'; елсеиф инд == 11 слово = 'Х'; елсеиф инд == 12 слово = 'И'; елсеиф инд == 13 слово = 'Ј'; елсеиф инд == 14 слово = 'К'; елсеиф инд == 15 слово = 'Л'; елсеиф инд == 16 слово = 'М'; елсеиф инд == 17 слово = 'Н'; елсеиф инд == 18 - инд == 19 слово = 'О'; елсеиф инд == 20 - инд == 21 слово = 'П'; елсеиф инд == 22 - инд == 23 слово = 'К'; елсеиф инд == 24 - инд == 25 слово = 'Р'; елсеиф инд == 26 слово = 'С'; елсеиф инд == 27 слово = 'Т'; елсеиф инд == 28 слово = 'У'; елсеиф инд == 29 слово = 'В'; елсеиф инд == 30 слова = 'В'; елсеиф инд == 31 слово = 'Кс'; елсеиф инд == 32 слово = 'И'; елсеиф инд == 33 слово = 'З'; % * - * - * - * - * % бројеви уноса. елсеиф инд == 34 писмо = '1'; елсеиф инд == 35 слово = '2'; елсеиф инд == 36 слово = '3'; елсеиф инд == 37 - инд == 38 слово = '4'; елсеиф инд == 39 слово = '5'; елсеиф инд == 40 - инд == 41 - инд == 42 слово = '6'; елсеиф инд == 43 писмо = '7'; елсеиф инд == 44 - инд == 45 слово = '8'; елсеиф инд == 46 - инд == 47 - инд == 48 писмо = '9'; елсе леттер = '0'; крај крај
Овде смо у горњем коду креирали функцију названу словом која нам даје алфанумерички излаз улазне слике из класе ' алфа ' помоћу команде ' реадЛеттер ()' . А затим учитајте сачуване предлошке помоћу наредбе лоад 'НевТемплатес .
Након тога, променили смо величину улазне слике тако да се може упоредити са сликама предлошка помоћу наредбе 'имресизе (име датотеке, величина)' . Затим се петља фор користи за корелацију улазне слике са сваком сликом у предлошку како би се постигло најбоље подударање.
Ствара се матрица ' рец ' за бележење вредности корелације за сваки алфанумерички образац са шаблоном знакова са улазне слике, као што је приказано у доњем коду,
цор = цорр2 (НевТемплатес {1, н}, снап);
Тада се команда 'финд ()' користи за проналажење индекса који одговара највише одговарајућем карактеру. Тада се према том индексу исписује одговарајући знак помоћу изјаве „ако-друго“ .
Сада, након што завршите са овим, отворите нови прозор уређивача за покретање кода за главни програм.
Откривање регистарске плочице
Ево треће и последње датотеке кода под називом Плате_детецтион.м, копирајте и залепите доњи код у ову датотеку и сачувајте је у директоријуму пројекта. За брзи почетак одавде можете преузети све кодне датотеке са предлошцима слика.
затворите све; избриши све; им = имреад ('Слике плочице са бројевима / имаге1.пнг'); имграи = ргб2граи (им); имбин = имбинаризирати (имграи); им = ивица (имграи, 'превитт'); % Следе кораци за проналажење места таблице Ипропс = регионпропс (им, 'БоундингБок', 'Ареа', 'Имаге'); ареа = Ипропс.Ареа; цоунт = нумел (Ипропс); мака = површина; боундингБок = Ипропс.БоундингБок; за и = 1: рачунати ако је мака
Основне команде коришћене у горњем коду су наведене у наставку:
имреад () - Ова наредба се користи за отварање слике у МАТЛАБ из циљне фасцикле.
ргб2граи () - Ова наредба се користи за претварање РГБ слике у формат сиве.
имбинаризе () - Ова наредба се користи за Бинаризирање 2-Д слике у сивим тоновима или једноставно можемо рећи да претвара слику у црно-бели формат.
едге () - Ова наредба се користи за откривање ивица на слици, користећи различите методе попут Робертса, Собел, Превитта и многих других.
регионпропс () - Ова наредба се користи за мерење својстава региона слике.
нумел () - Ова наредба се користи за израчунавање броја елемената низа.
имцроп () - Ова наредба се користи за обрезивање слике у унетој величини.
бвареаопен () - Ова наредба се користи за уклањање малих предмета са бинарне слике.
Користећи горње наредбе у коду, позивамо улазну слику и претварамо је у сиву скалу. Затим се сива скала претвара у бинарну слику, а ивица бинарних слика открива се методом Превитт.
Тада се доњи код користи за откривање локације таблице на целој улазној слици, Ипропс = регионпропс (им, 'БоундингБок', 'Ареа', 'Имаге'); ареа = Ипропс.Ареа; цоунт = нумел (Ипропс); мака = површина; боундингБок = Ипропс.БоундингБок; за и = 1: рачунати ако је мака
После тога обрежите регистарску плочицу и уклоните мале предмете са бинарне слике помоћу наредби 'имцроп ()' и 'бвареаопен ()' респективно.
Затим се доњи код користи за обраду те изрезане слике регистарске плочице и за приказ откривеног броја у формату слике и текста (у командном прозору).
Ипропс = регионпропс (им, 'БоундингБок', 'Ареа', 'Имаге'); цоунт = нумел (Ипропс); ноПлате =; за и = 1: цоунт ов = ленгтх (Ипропс (и).Имаге (1,:)); ох = дужина (Ипропс (и).Имаге (:, 1)); иф ов <(х / 2) & ох> (х / 3) писмо = Леттер_детецтион (Ипропс (и).Имаге); ноПлате = крај крај
Рад система за откривање броја регистарских таблица возила помоћу МАТЛАБ-а
У датотеци темплате_цреатион.м имамо дизајнирани код да сачувамо све бинарне слике алфанумеричких бројева у директоријум или датотеку названу „ НевТемплатес “. Тада се тај директоријум позива у Леттер_детецтион.м, као што можете видети у наставку
Тада се у датотеци кода Плате_детецтион.м позива датотека датотеке Леттер_детецтион.м када обрађујемо слику као што је приказано на слици испод,
Сада кликните на дугме 'РУН' да бисте покренули.м датотеку
МАТЛАБ-у ће требати неколико секунди да одговори, сачекајте док се у доњем левом углу не појави порука заузећа, као што је приказано доле,
Како се програм покреће, у наредбеном прозору ћете добити скочни прозор са бројевима и бројевима. Излаз за моју слику ће изгледати као слика дата испод;
Комплетан рад система за откривање регистарских таблица возила приказан је у видео снимку испод, а све датотеке кода са предлошцима слика можете преузети овде.
Такође, овде погледајте све МАТЛАБ пројекте.