- Pembuatan Template
- Deteksi Surat
- Deteksi Plat Nomor
- Pengerjaan Sistem Deteksi Nomor Plat Kendaraan dengan menggunakan MATLAB
Pernahkah Anda bertanya-tanya bagaimana cara kerja sistem ANPR (Pengenalan Plat Nomor Otomatis)? Izinkan saya memberi tahu Anda konsep di baliknya, kamera sistem ANPR menangkap gambar pelat nomor kendaraan dan kemudian gambar tersebut diproses melalui beberapa algoritme untuk memberikan konversi alfa numerik gambar ke dalam format teks. Sistem ANPR digunakan di banyak tempat seperti Pompa Bensin, Pusat Perbelanjaan, Bandara, jalan raya, pintu tol, Hotel, Rumah Sakit, Tempat parkir, pos pemeriksaan Pertahanan & Militer dll.
Ada banyak alat pengolah gambar yang tersedia untuk deteksi pelat nomor ini, tetapi di sini dalam tutorial ini kita akan menggunakan Pemrosesan Gambar MATLAB untuk memasukkan nomor pelat nomor kendaraan ke dalam format teks. Jika Anda baru dengan MATLAB atau pemrosesan gambar, periksa proyek MATLAB kami sebelumnya:
- Memulai dengan MATLAB: Pengantar Singkat
- Memulai Pemrosesan Gambar menggunakan MATLAB
Pertama, izinkan saya menjelaskan kepada Anda tentang konsep yang kami gunakan untuk mendeteksi pelat nomor. Ada tiga program atau file '.m' untuk proyek ini.
- Pembuatan Template ( template_creation.m ) - Ini digunakan untuk memanggil gambar alfanumerik yang disimpan dan kemudian menyimpannya sebagai template baru di memori MATLAB.
- Deteksi Huruf ( Letter_detection.m ) - Membaca karakter dari gambar masukan dan menemukan alfanumerik terkait yang paling cocok.
- Plate Detection ( Plate_detection.m ) - Proses gambar lalu panggil dua m-file di atas untuk mendeteksi nomornya.
Sekarang, kita akan belajar tentang cara membuat kode m-file ini dan apa yang harus Anda lakukan sebelum mulai membuat kode. Setelah melalui tutorial ini, Anda dapat menemukan semua file kode dan video penjelasan yang berfungsi di akhir proyek ini.
Pembuatan Template
Pertama buat folder untuk proyek (nama folder saya adalah Deteksi Plat Nomor ) untuk menyimpan dan menyimpan file. Kami telah menyimpan gambar biner dari semua huruf dan angka di sub-folder bernama ' alpha' .
Sekarang, buka jendela Editor di MATLAB, seperti yang ditunjukkan pada gambar di bawah ini,
Jika Anda tidak terbiasa dengan terminologi dasar MATLAB, saya sarankan Anda untuk memeriksa tutorial yang ditautkan.
Sekarang, salin dan tempel kode di bawah ini dalam file template_creation.m , dan simpan file di folder proyek ( Deteksi Plat Nomor ). Semua file yang terkait dengan proyek ini termasuk file template gambar dapat diunduh dari sini. Juga periksa video yang diberikan di akhir proyek ini.
% Abjad 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'); % Bilangan Alami satu = imread ('alpha / 1.bmp'); dua = imread ('alpha / 2.bmp'); tiga = imread ('alpha / 3.bmp'); empat = imread ('alpha / 4.bmp'); lima = imread ('alpha / 5.bmp'); enam = imread ('alpha / 6.bmp'); tujuh = imread ('alpha / 7.bmp'); delapan = imread ('alpha / 8.bmp'); sembilan = imread ('alpha / 9.bmp'); nol = imread ('alpha / 0.bmp'); % Membuat Array untuk Abjad letter =; % Membuat Array untuk Bilangan number =; NewTemplates =; simpan ('NewTemplates', 'NewTemplates') hapus semua
Di sini, pada kode di atas kita menyimpan gambar ke dalam variabel dengan menggunakan perintah ' imread () '. Fungsi ini digunakan untuk memanggil gambar dari folder atau dari lokasi manapun di PC ke dalam MATLAB. Mari kita ambil contoh dari kode di atas:
A = imread ('alpha / A.bmp');
Di mana A adalah variabel, dan di ' alpha / A.bmp' , 'alpha' adalah nama folder dan ' A.bmp' adalah nama file.
Kemudian buat matriks ' huruf ' dan ' angka ' dan simpan di variabel ' NewTemplates ' dengan menggunakan perintah ' simpan (nama file, variabel)' .
% Membuat Array untuk Abjad letter =; % Membuat Array untuk Bilangan number =; NewTemplates =; simpan ('NewTemplates', 'NewTemplates') hapus semua
Sekarang mulai coding Letter_detection.m , di jendela editor baru.
Deteksi Surat
Di sini kami membuat file kode kedua bernama Letter_detection.m . Sekarang, salin dan tempel kode di bawah ini di file itu dan simpan file di folder proyek dengan nama Letter_detection. File ini dapat diunduh dari sini, file zip terlampir ini juga berisi file lain yang terkait dengan proyek deteksi pelat nomor ini.
function letter = readLetter (snap) memuat NewTemplates snap = imresize (snap,); rec =; untuk n = 1: length (NewTemplates) cor = corr2 (NewTemplates {1, n}, snap); rec =; akhir ind = temukan (rec == max (rec)); tampilan (temukan (rec == max (rec))); % Daftar abjad. jika ind == 1 - ind == 2 huruf = 'A'; elseif ind == 3 - ind == 4 huruf = 'B'; elseif ind == 5 huruf = 'C' elseif ind == 6 - ind == 7 huruf = 'D'; elseif ind == 8 huruf = 'E'; elseif ind == 9 huruf = 'F'; elseif ind == 10 huruf = 'G'; elseif ind == 11 huruf = 'H'; elseif ind == 12 huruf = 'Saya'; elseif ind == 13 huruf = 'J'; elseif ind == 14 huruf = 'K'; elseif ind == 15 huruf = 'L'; elseif ind == 16 huruf = 'M'; elseif ind == 17 huruf = 'N'; elseif ind == 18 - ind == 19 huruf = 'O'; elseif ind == 20 - ind == 21 huruf = 'P'; elseif ind == 22 - ind == 23 huruf = 'Q'; elseif ind == 24 - ind == 25 huruf = 'R'; elseif ind == 26 huruf = 'S'; elseif ind == 27 huruf = 'T'; elseif ind == 28 huruf = 'U'; elseif ind == 29 huruf = 'V'; elseif ind == 30 huruf = 'W'; elseif ind == 31 huruf = 'X'; elseif ind == 32 huruf = 'Y'; elseif ind == 33 huruf = 'Z'; % * - * - * - * - * % Angka listing. elseif ind == 34 huruf = '1'; elseif ind == 35 huruf = '2'; elseif ind == 36 huruf = '3'; elseif ind == 37 - ind == 38 huruf = '4'; elseif ind == 39 huruf = '5'; elseif ind == 40 - ind == 41 - ind == 42 huruf = '6'; elseif ind == 43 huruf = '7'; elseif ind == 44 - ind == 45 huruf = '8'; elseif ind == 46 - ind == 47 - ind == 48 huruf = '9'; lain huruf = '0'; akhir akhir
Di sini, dalam kode di atas kita telah membuat fungsi bernama letter yang memberi kita keluaran alfanumerik dari gambar masukan dari kelas ' alpha ' dengan menggunakan perintah ' readLetter ()' . Dan kemudian memuat template yang disimpan dengan menggunakan perintah load 'NewTemplates .
Setelah itu, kita mengubah ukuran gambar input sehingga dapat dibandingkan dengan gambar template dengan menggunakan perintah 'imresize (filename, size)' . Kemudian for loop digunakan untuk menghubungkan gambar input dengan setiap gambar di template untuk mendapatkan kecocokan terbaik.
Sebuah matriks ' rec ' dibuat untuk mencatat nilai korelasi setiap template alfanumerik dengan template karakter dari gambar masukan, seperti yang ditunjukkan pada kode di bawah ini,
cor = corr2 (NewTemplates {1, n}, snap);
Kemudian perintah 'find ()' digunakan untuk menemukan indeks yang sesuai dengan karakter yang paling cocok. Kemudian menurut indeks tersebut, karakter yang sesuai dicetak menggunakan pernyataan 'if-else' .
Sekarang, setelah menyelesaikan dengan ini buka jendela editor baru untuk memulai kode untuk program utama.
Deteksi Plat Nomor
Berikut adalah file kode ketiga dan terakhir bernama Plate_detection.m salin dan tempel kode di bawah ini di file ini dan simpan ke dalam folder proyek. Untuk memulai dengan cepat, Anda dapat mengunduh semua file kode dengan templat gambar dari sini.
tutup semua; Bersihkan semua; im = imread ('Gambar Plat Nomor / image1.png'); imgray = rgb2gray (im); imbin = imbinarize (imgray); im = edge (imgray, 'prewitt'); % Langkah-langkah di bawah ini adalah untuk menemukan lokasi plat nomor Iprops = regionprops (im, 'BoundingBox', 'Area', 'Image'); area = Iprops.Area; count = numel (Iprops); maxa = luas; boundingBox = Iprops.BoundingBox; untuk i = 1: hitung jika maxa
Perintah dasar yang digunakan dalam kode di atas disebutkan di bawah ini:
imread () - Perintah ini digunakan untuk membuka gambar ke MATLAB dari folder target.
rgb2gray () –Perintah ini digunakan untuk mengubah citra RGB menjadi format grayscale.
imbinarize () - Perintah ini digunakan untuk Binarize 2-D gambar grayscale atau secara sederhana kita dapat mengatakan itu mengubah gambar menjadi format hitam dan putih.
edge () - Perintah ini digunakan untuk mendeteksi edge pada gambar, dengan menggunakan berbagai metode seperti Roberts, Sobel, Prewitt, dan banyak lainnya.
regionprops () - Perintah ini digunakan untuk mengukur properti wilayah gambar.
numel () - Perintah ini digunakan untuk menghitung jumlah elemen array.
imcrop () - Perintah ini digunakan untuk memotong gambar dalam ukuran yang dimasukkan.
bwareaopen () - Perintah ini digunakan untuk menghapus objek kecil dari gambar biner.
Dengan menggunakan perintah di atas dalam kode, kita memanggil gambar input dan mengubahnya menjadi grayscale. Kemudian grayscale diubah menjadi citra biner, dan tepi citra biner dideteksi dengan metode Prewitt.
Kemudian kode di bawah ini digunakan untuk mendeteksi lokasi pelat nomor di seluruh gambar input, Iprops = regionprops (im, 'BoundingBox', 'Area', 'Image'); area = Iprops.Area; count = numel (Iprops); maxa = luas; boundingBox = Iprops.BoundingBox; untuk i = 1: hitung jika maxa
Setelah itu pangkas pelat nomor dan hapus objek kecil dari gambar biner dengan menggunakan perintah 'imcrop ()' dan 'bwareaopen ()' .
Kemudian, kode di bawah ini digunakan untuk memproses gambar plat nomor yang dipotong tersebut dan untuk menampilkan nomor yang terdeteksi dalam format gambar dan teks (di jendela perintah).
Iprops = regionprops (im, 'BoundingBox', 'Area', 'Image'); count = numel (Iprops); noPlate =; untuk i = 1: hitung ow = panjang (Iprops (i). Gambar (1,:)); oh = panjang (Iprops (i).Gambar (:, 1)); jika ow <(h / 2) & oh> (h / 3) letter = Letter_detection (Iprops (i).Image); noPlate = akhir akhir
Pengerjaan Sistem Deteksi Nomor Plat Kendaraan dengan menggunakan MATLAB
Dalam file template_creation.m kami telah merancang kode untuk menyimpan semua gambar biner alfanumerik ke dalam direktori atau file bernama ' NewTemplates '. Kemudian direktori itu dipanggil di Letter_detection.m seperti yang Anda lihat di bawah ini
Kemudian pada file kode Plate_detection.m file kode Letter_detection.m dipanggil ketika kita memproses gambar seperti yang ditunjukkan pada gambar di bawah ini,
Sekarang, klik tombol 'RUN' untuk menjalankan file.m
MATLAB mungkin memerlukan beberapa detik untuk merespon, tunggu sampai muncul pesan sibuk di pojok kiri bawah seperti gambar di bawah ini,
Saat program dimulai, Anda akan mendapatkan popup gambar pelat nomor dan nomor di jendela perintah. Output untuk gambar saya akan terlihat seperti gambar di bawah ini;
Pengerjaan lengkap Sistem Deteksi Plat Nomor Kendaraan ditunjukkan dalam Video di bawah ini, dan semua file kode dengan templat gambar dapat diunduh dari sini.
Juga, periksa semua Proyek MATLAB di sini.