- Tworzenie szablonów
- Wykrywanie liter
- Wykrywanie tablic rejestracyjnych
- Działanie systemu wykrywania numerów tablic rejestracyjnych pojazdu za pomocą MATLAB
Czy zastanawiałeś się kiedyś, jak działa system ANPR (automatyczne rozpoznawanie tablic rejestracyjnych)? Pozwólcie, że powiem wam koncepcję, która się za tym kryje, kamera systemu ANPR rejestruje obraz tablicy rejestracyjnej pojazdu, a następnie obraz jest przetwarzany przez wiele algorytmów, aby zapewnić alfanumeryczną konwersję obrazu na format tekstowy. System ANPR jest używany w wielu miejscach, takich jak pompy benzynowe, centra handlowe, lotniska, autostrady, punkty poboru opłat, hotele, szpitale, parkingi, punkty kontrolne obrony i wojska itp.
Dostępnych jest wiele narzędzi do przetwarzania obrazu dla tego wykrywania tablic rejestracyjnych, ale tutaj w tym samouczku użyjemy przetwarzania obrazu MATLAB, aby uzyskać numer tablicy rejestracyjnej pojazdu w formacie tekstowym. Jeśli nie masz doświadczenia z MATLABem lub przetwarzaniem obrazu, sprawdź nasze poprzednie projekty MATLAB:
- Pierwsze kroki z MATLAB: szybkie wprowadzenie
- Pierwsze kroki z przetwarzaniem obrazu przy użyciu MATLAB-a
Najpierw przedstawię koncepcję, której używamy do wykrywania tablic rejestracyjnych. Istnieją trzy programy lub pliki „.m” dla tego projektu.
- Tworzenie szablonu ( template_creation.m ) - służy do wywoływania zapisanych obrazów alfanumerycznych, a następnie zapisywania ich jako nowy szablon w pamięci MATLAB-a.
- Wykrywanie liter ( Letter_detection.m ) - Odczytuje znaki z obrazu wejściowego i znajduje odpowiadające im znaki alfanumeryczne o najwyższym dopasowaniu.
- Wykrywanie płytek ( Plate_detection.m ) - Przetwórz obraz, a następnie wywołaj dwa powyższe pliki m, aby wykryć numer.
Teraz dowiemy się, jak zakodować te m-pliki i co należy zrobić przed rozpoczęciem kodowania. Po przejściu przez ten samouczek, na końcu tego projektu znajdziesz wszystkie pliki kodu i działające wideo wyjaśniające.
Tworzenie szablonów
Najpierw utwórz folder dla projektu (mój folder to Wykrywanie tablic rejestracyjnych ), aby zapisać i zapisać pliki. Przechowaliśmy binarne obrazy wszystkich alfabetów i liczb w podfolderze o nazwie „ alfa” .
Teraz otwórz okno Edytora w MATLABIE, jak pokazano na poniższym obrazku,
Jeśli nie jesteś zaznajomiony z podstawową terminologią MATLAB-a, proponuję zapoznać się z połączonym tutorialem.
Teraz skopiuj i wklej poniższy kod do pliku template_creation.m i zapisz plik w folderze projektu ( Wykrywanie tablic rejestracyjnych ). Wszystkie pliki związane z tym projektem, w tym pliki szablonów obrazów, można pobrać stąd. Również sprawdzić wideo podane na końcu tego projektu.
% Alphabets 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 ('alpha / X.bmp '); Y = imread ('alpha / Y.bmp'); Z = imread ('alpha / Z.bmp'); % Liczb naturalnych jeden = imread ('alpha / 1.bmp'); two = imread ('alpha / 2.bmp'); trzy = imread ('alpha / 3.bmp'); four = imread ('alpha / 4.bmp'); pięć = imread ('alpha / 5.bmp'); sześć = imread ('alpha / 6.bmp'); siedem = imread ('alpha / 7.bmp'); eight = imread ('alpha / 8.bmp'); dziewięć = imread („alpha / 9.bmp”); zero = imread ('alpha / 0.bmp'); % Tworzenie tablicy dla alfabetów letter =; % Tworzenie tablicy liczb numer =; NewTemplates =; save ('NewTemplates', 'NewTemplates') wyczyść wszystko
Tutaj w powyższym kodzie zapisujemy obrazy do zmiennej za pomocą polecenia ' imread () '. Ta funkcja jest używana do wywoływania obrazów z folderu lub z dowolnego miejsca na komputerze do MATLABA. Weźmy przykład z powyższego kodu:
A = imread ('alpha / A.bmp');
Gdzie A to zmienna, aw „ alpha / A.bmp” , „alpha” to nazwa folderu, a „ A.bmp” to nazwa pliku.
Następnie utwórz macierz „ litery ” i „ liczby ” i zapisz ją w zmiennej „ Nowe szablony ” za pomocą polecenia „ zapisz (nazwa pliku, zmienne)” .
% Tworzenie tablicy dla alfabetów letter =; % Tworzenie tablicy liczb number =; NewTemplates =; save ('NewTemplates', 'NewTemplates') wyczyść wszystko
Teraz zacznij kodować Letter_detection.m w nowym oknie edytora.
Wykrywanie liter
Tutaj tworzymy drugi plik kodu o nazwie Letter_detection.m . Teraz skopiuj i wklej poniższy kod w tym pliku i zapisz plik w folderze projektu pod nazwą Letter_detection. Ten plik można pobrać stąd, załączone pliki zip zawierają również inne pliki związane z tym projektem wykrywania tablic rejestracyjnych.
litera funkcji = readLetter (snap) ładowanie NewTemplates snap = imresize (snap,); rec =; dla n = 1: length (NewTemplates) cor = corr2 (NewTemplates {1, n}, snap); rec =; end ind = find (rec == max (rec)); display (find (rec == max (rec))); % List alfabetów. if ind == 1 - ind == 2 litera = 'A'; elseif ind == 3 - ind == 4 litera = 'B'; elseif ind == 5 liter = 'C' elseif ind == 6 - ind == 7 liter = 'D'; elseif ind == 8 letter = 'E'; elseif ind == 9 letter = 'F'; elseif ind == 10 letter = 'G'; elseif ind == 11 litera = 'H'; elseif ind == 12 litera = „ja”; elseif ind == 13 litera = 'J'; elseif ind == 14 letter = 'K'; elseif ind == 15 litera = 'L'; elseif ind == 16 litera = 'M'; elseif ind == 17 litera = 'N'; elseif ind == 18 - ind == 19 letter = 'O'; elseif ind == 20 - ind == 21 letter = 'P'; elseif ind == 22 - ind == 23 letter = 'Q'; elseif ind == 24 - ind == 25 litera = 'R'; elseif ind == 26 letter = 'S'; elseif ind == 27 litera = 'T'; elseif ind == 28 letter = 'U'; elseif ind == 29 litera = 'V'; elseif ind == 30 litera = 'W'; elseif ind == 31 litera = 'X'; elseif ind == 32 litera = 'Y'; elseif ind == 33 litera = 'Z'; % * - * - * - * - * % Cyfry ofert. elseif ind == 34 letter = '1'; elseif ind == 35 letter = '2'; elseif ind == 36 letter = '3'; elseif ind == 37 - ind == 38 letter = '4'; elseif ind == 39 letter = '5'; elseif ind == 40 - ind == 41 - ind == 42 letter = '6'; elseif ind == 43 letter = '7'; elseif ind == 44 - ind == 45 letter = '8'; elseif ind == 46 - ind == 47 - ind == 48 letter = '9'; else litera = „0”; koniec koniec
Tutaj, w powyższym kodzie, stworzyliśmy funkcję o nazwie letter, która daje nam alfanumeryczne wyjście obrazu wejściowego z klasy ' alpha ' za pomocą polecenia ' readLetter ()' . Następnie załaduj zapisane szablony za pomocą polecenia load 'NewTemplates .
Następnie zmieniliśmy rozmiar obrazu wejściowego, aby można go było porównać z obrazami szablonu za pomocą polecenia „imresize (nazwa pliku, rozmiar)” . Następnie pętla for jest używana do skorelowania obrazu wejściowego z każdym obrazem w szablonie, aby uzyskać najlepsze dopasowanie.
Tworzona jest macierz `` rec '' w celu zapisania wartości korelacji dla każdego szablonu alfanumerycznego z szablonem znaków z obrazu wejściowego, jak pokazano w poniższym kodzie,
cor = corr2 (NewTemplates {1, n}, snap);
Następnie polecenie „find ()” jest używane do znalezienia indeksu odpowiadającego najwyższemu dopasowanemu znakowi. Następnie, zgodnie z tym indeksem, odpowiedni znak jest drukowany przy użyciu instrukcji „if-else” .
Teraz, po zakończeniu tego, otwórz nowe okno edytora, aby uruchomić kod dla programu głównego.
Wykrywanie tablic rejestracyjnych
Oto trzeci i ostatni plik kodu o nazwie Plate_detection.m skopiuj i wklej poniższy kod w tym pliku i zapisz w folderze projektu. Aby szybko rozpocząć, możesz pobrać stąd wszystkie pliki kodu z szablonami obrazów.
zamknij wszystko; Wyczyść wszystko; im = imread ('Number Plate Images / image1.png'); imgray = rgb2gray (im); imbin = imbinarize (imgray); im = edge (imgray, 'prewitt'); % Poniższe kroki służą do znalezienia lokalizacji numeru rejestracyjnego Iprops = regionprops (im, 'BoundingBox', 'Area', 'Image'); area = Iprops.Area; count = numel (Iprops); maxa = obszar; boundingBox = Iprops.BoundingBox; dla i = 1: policz, jeśli maxa
Podstawowe komendy użyte w powyższym kodzie są wymienione poniżej:
imread () - To polecenie służy do otwierania obrazu w MATLAB-u z folderu docelowego.
rgb2gray () - To polecenie służy do konwersji obrazu RGB na format w skali szarości.
imbinarize () - To polecenie jest używane do binarizacji obrazu 2-D w skali szarości lub po prostu możemy powiedzieć, że konwertuje obraz do formatu czarno-białego.
edge () - To polecenie jest używane do wykrywania krawędzi obrazu przy użyciu różnych metod, takich jak Roberts, Sobel, Prewitt i wiele innych.
regionprops () - To polecenie służy do pomiaru właściwości regionu obrazu.
numel () - To polecenie służy do obliczania liczby elementów tablicy.
imcrop () - To polecenie służy do przycinania obrazu we wprowadzonym rozmiarze.
bwareaopen () - To polecenie służy do usuwania małych obiektów z obrazu binarnego.
Używając powyższych poleceń w kodzie, wywołujemy obraz wejściowy i konwertujemy go na skalę szarości. Następnie skala szarości jest konwertowana na obraz binarny, a krawędzie obrazów binarnych są wykrywane metodą Prewitt.
Wówczas poniższy kod służy do wykrywania lokalizacji tablicy rejestracyjnej w całym obrazie wejściowym, Iprops = regionprops (im, 'BoundingBox', 'Area', 'Image'); area = Iprops.Area; count = numel (Iprops); maxa = obszar; boundingBox = Iprops.BoundingBox; dla i = 1: policz, jeśli maxa
Następnie przytnij tablicę rejestracyjną i usuń małe obiekty z obrazu binarnego, używając odpowiednio poleceń „imcrop ()” i „bwareaopen ()” .
Następnie poniższy kod jest używany do przetwarzania tego przyciętego obrazu tablicy rejestracyjnej i wyświetlania wykrytego numeru w formacie obrazu i tekstu (w oknie poleceń).
Iprops = regionprops (im, 'BoundingBox', 'Area', 'Image'); count = numel (Iprops); noPlate =; dla i = 1: count ow = length (Iprops (i).Image (1,:)); oh = length (Iprops (i).Image (:, 1)); if ow <(h / 2) & oh> (h / 3) letter = Letter_detection (Iprops (i).Image); noPlate = end end
Działanie systemu wykrywania numerów tablic rejestracyjnych pojazdu za pomocą MATLAB
W pliku template_creation.m zaprojektowaliśmy kod zapisujący wszystkie binarne obrazy alfanumeryczne w katalogu lub pliku o nazwie „ NewTemplates ”. Następnie ten katalog jest wywoływany w Letter_detection.m, jak widać poniżej
Następnie w pliku kodu Plate_detection.m plik kodu Letter_detection.m jest wywoływany, gdy przetwarzamy obraz, jak pokazano na poniższym obrazku,
Teraz kliknij przycisk „RUN”, aby uruchomić plik.m
MATLAB może odpowiedzieć kilka sekund, poczekaj, aż w lewym dolnym rogu pojawi się komunikat o zajętości, jak pokazano poniżej,
Po uruchomieniu programu otrzymasz wyskakujące okienko z obrazem tablicy rejestracyjnej i numer w oknie poleceń. Wynik dla mojego obrazu będzie wyglądał jak obraz podany poniżej;
Pełne działanie systemu wykrywania tablic rejestracyjnych pojazdu jest przedstawione w poniższym filmie, a wszystkie pliki kodów z szablonami obrazów można pobrać stąd.
Sprawdź również wszystkie projekty MATLAB tutaj.