MAKALAH PENGENAL PLAT NOMOR KENDARAAN MENGGUNAKAN MATLAB PEMROGRAMAN KOMPUTER II Disusun oleh : Kelompok 5 1. Muhammad Akbar Ramadhan (1513619001) 2. Sri Ulina (1513619021) 3. Nova Dwi Astuti (1513619031) 4. Iqbal Alfajar (1513619038) 5. Raka Abi Affan Arifin (1513619061) 6. Lugina Adisaputra (1513617060) Dosen Pengampu : Dr. Baso Maruddani, S.T., M.T. PENDIDIKAN VOKASIONAL TEKNIK ELEKTRONIKA FAKULTAS TEKNIK UNIVERSITAS NEGERI JAKARTA 2021 KATA PENGANTAR Assalamu’alaikum Warahmatullahi Wabarakatuh Kami panjatkan puja dan puji syukur kehadirat Allah SWT yang telah melimpahkan taufiq dan hidayah-Nya serta telah memberi kami kesempatan menerima dan menyelesaikan tugas mata kuliah ini, membantu kami dalam menyelesaikan tugas ini. Terimakasih kepada Bapak Dr. Baso Maruddani, S.T., M.T. selaku dosen pembimbing mata kuliah Pemrograman Komputer II yang telah memberi banyak ilmu dan pengetahuan kepada kami. Serta tak lupa pula kami ucapkan terimakasih kepada orang tua kami yang telah memberi do’a, dukungan, dorongan, dan memfasilitasi kami dalam kehidupan sehari-hari termasuk fasilitas dibidang pendidikan. Adapun makalah yang kami buat ini adalah makalah tentang Pengenal Plat Nomor Kendaraan Menggunakan Matlab. Kami berharap pembuatan makalah ini dapat menambah wawasan, pengetahuan dan kreatifitas kami maupun pembaca. Kami menyadari bahwa makalah ini masih jauh dari kata sempurna karena masih terdapat kekurangan, baik dari segi pengetahuan kami, maupun segi penyusunan isi makalah ini. Oleh karena itu kami membutuhkan kritik dan saran dari berbagai pihak untuk memperbaiki laporan ini. Terimakasih. Wassalamu’alaikum Warahmatullahi Wabarakatuh. Jakarta, 23 April 2021 Penyusun ii DAFTAR ISI KATA PENGANTAR ...............................................................................................................ii DAFTAR ISI............................................................................................................................ iii BAB I ......................................................................................................................................... 1 PENDAHULUAN ..................................................................................................................... 1 1.1. Latar Belakang ............................................................................................................ 1 1.2. Rumusan Masalah ....................................................................................................... 1 1.3. Tujuan.......................................................................................................................... 1 1.4. Manfaat........................................................................................................................ 2 BAB II........................................................................................................................................ 3 PEMBAHASAN ........................................................................................................................ 3 2.1. Sistem Number Plate Recognition (NPR) ................................................................... 3 2.2. Langkah Kerja Sistem Number Plate Recognition (NPR) .......................................... 3 2.3. Cara Kerja Program Pengenal Plat Nomor Kendaraan menggunakan Matlab ........... 8 2.4. Flowchart Program Pengenal Plat Nomor Kendaraan menggunakan Matlab............. 9 2.5. List Program Pengenal Plat Nomor Kendaraan menggunakan Matlab..................... 10 BAB III .................................................................................................................................... 29 PENUTUP................................................................................................................................ 29 3.1. Kesimpulan................................................................................................................ 29 3.2. Saran .......................................................................................................................... 29 DAFTAR PUSTAKA .............................................................................................................. 30 LAMPIRAN .............................................................................................................................. 31 iii BAB I PENDAHULUAN 1.1. Latar Belakang Hukum Indonesia mewajibkan setiap kendaraan pribadi memiliki pengenal berupa plat nomor kendaraan. Pengenal kendaraan tersebut harus tercatat dalam database yang disimpan oleh pemerintah pusat. Umumnya, pencatatan pengenal kendaraan dilakukan secara manual oleh petugas. Penginputan data identitas secara manual memungkinkan terjadi kesalahan. Oleh karena itu, aplikasi-aplikasi baru berbasis teknologi canggih harus dimanfaatkan dengan sedemikian rupa agar dapat memenuhi tujuannya yaitu mempercepat dan mempermudah kinerja manusia. Salah satu contohnya yaitu Pengenal Plat Nomor Kendaraan Otomatis. Sistem identifikasi kendaraan otomatis digunakan untuk tujuan kontrol lalu lintas yang efektif dan aplikasi keamanan seperti kontrol akses ke area terbatas dan pelacakan kendaraan yang diinginkan. 1.2. Rumusan Masalah 1.2.1. Apa sistem yang digunakan sebagai Pengenal Plat Nomor Kendaraan? 1.2.2. Bagaimana langkah kerja sistem yang digunakan sebagai Pengenal Plat Nomor Kendaraan? 1.2.3. Bagaimana cara kerja program Pengenal Plat Nomor Kendaraan dengan menggunakan Matlab? 1.3. Tujuan 1.3.1. Mengetahui sistem yang digunakan sebagai Pengenal Plat Nomor Kendaraan 1.3.2. Mengetahui langkah kerja sistem yang digunakan sebagai Pengenal Plat Nomor Kendaraan 1.3.3. Memahami cara kerja program Pengenal Plat Nomor Kendaraan dengan menggunakan Matlab 1 1.4. Manfaat 1.4.1. Memperoleh pengetahuan berkaitan dengan sistem Pengenal Plat Nomor Kendaraan 1.4.2. Memperoleh pemahaman berkaitan dengan langkah kerja sistem yang digunakan sebagai Pengenal Plat Nomor Kendaraan 1.4.3. Dapat membuat program Pengenal menggunakan Matlab 2 Plat Nomor Kendaraan dengan BAB II PEMBAHASAN 2.1. Sistem Number Plate Recognition (NPR) Number Plate Recognition (NPR) atau LPR (Licence Plate Recognition) merupakan salah satu pemanfaatan pengolahan citra untuk mengenali karakter nomor plat pada kendaraan, yang dimana biasanya digunakan untuk proses pencatatan plat nomor kendaraan secara otomatis ke sistem salah satunya adalah proses penginputan secara otomatis ke dalam sistem parkir. Proses LPR (Licence Plate Recognition) memanfaatkan teknologi pengolahan citra yaitu OCR (Optical Character Recognition) yang dimana digunakan untuk mengenali karakter yang ada pada plat nomor sehingga dapat dilakukan proses pencatatan plat nomor kendaraan ke sistem secara otomatis. Dengan hal tersebut, maka akan meningkatkan keamanan saat melakukan proses pencatatan keluar masuk kendaraan bermotor. 2.2. Langkah Kerja Sistem Number Plate Recognition (NPR) a. Input gambar yang ditangkap b. Ekstraksi Plat Ekstraksi plat adalah proses untuk menentukan daerah letak plat yang berada pada citra gambar yang nanti akan diproses untuk pengenalan karakter huruf pada plat gambar tersebut. 1) Color to Gray Conversion Pada proses ini citra inputan yang pada awalnya merupakan citra berwarna kemudian akan diubah menjadi citra abu-abu (grayscale) dengan mengeliminasi hue dan saturation sementara tetap mempertahankan luminance dari citra input tersebut. Proses ini memanggil fungsi rgb2gray yang ada pada matlab dan citra grayscale tersebut disimpan ke dalam sebuah variabel yang bertipe image. 3 Gambar 2. Proses RGB ke Grayscale 2) Filter Penghalusan (Smooting) Filter smooting digunakan untuk mengaburkan (bluring) dan untuk mengurangi noise pada citra seperti membuang detai kecil citra untuk mengekstraksi objek yang besar. Pada proses ini mengunakan median filter yang termasuk dalam filter non-linier yang berfungsi menganti nilai piksel dengan median dari nilai intensitas piksel tersebut dengan perintah medfilt2(f, [m n]) pada matlab, yang mana fungsi [mn] mendefinisikan ukuran m x n dimana median dihitung. Gambar 3. Proses Median Filter 3) Dilasi Pada proses ini dilakukan penebalan pada citra gambar yang berfungsi untuk memperbaiki huruf dan angka yang berada pada plat agar terlihat lebih jelas dan mudah terbaca. Proses tersebut dapat dijalankan pada matlab dengan perintah imdilate. Gambar 4. Proses Dilasi 4) Erosi Erosi adalah proses kebalikan dari proses dilasi yang dimana berfungsi untuk penipisan dan pengkecilan objek dari citra. Fungsi tersebut dapat dijalankan dengan fungsi emrode. 4 Gambar 5. Proses Erosi 5) Morpologi Gradient Pada proses ini berfungsi sebagai penggabungan antara proses dilasi dan erosi pada citra. Gambar 6. Proses Morphologi Gradient 6) Konvolusi Pada proses ini konvolusi berfungsi sebagai penerangan pada sudut citra gambar untuk menghasilkan citra yang terang. Gambar 7. Proses Konvolusi 7) Historigram Equalization Histogram equalization bekerja dengan melakukan pemetaan linier terhadap nilai intensitas pada histogram awal menjadi nilai intensitas pada histogram yang baru.Hal ini bertujuan meningkatkan ketajaman gambar. Proses ini sangat berpengaruh dalam pendeteksian tepi. Gambar 8. Proses Histogram 8) Restorasi Citra Pada banyak kasus pengolahan citra baik proses binerisasi maupun deteksi tepi menghasilkan citra yang pada umumnya masih belum baik, oleh karena itu perlu dilakukan perbaikan citra/restorasi citra kembali. Dalam proses ini restorasi citra berfungsi untuk mengembalikan nilai citra yang hilang akibat 5 proses histogram untuk memperbaiki karakter angka atau huruf pada plat. Gambar 9. Proses Restorasi Citra 9) Operasi Morfologi Pada proses ini kita akan menerapkan Operasi morfologi untuk memperkecil citra biner dan menghapus nilai piksel kecil pada gambar agar terlihat lebih halus Gambar 10. Proses Morfologi Setelah itu lakukan proses penentuan daerah plat nomor dan melakukan ektraksi plat menggunakan algoritma yang telah ditentukan Gambar 11. Daerah Calon Plat Gambar 12. Hasil Calon Plat c. Segmentasi plat dan Pengenalan Karakter 1) Tahap Segmentasi Plat Dalam tahap ini merupakan tahap pemecahan image kedalam obyek-obyek yang terkandung didalamnya yang dapat menjadi sarana untuk automated image analysis, misal untuk pengenalan obyek-obyek dalam image. Segmentasi dapat dilakukan berdasar pada kemiripan (similarity), dimana image dibagi berdasar kemiripan gray level. 6 Tahapan segmentasi plat adalah sebagai berikut: a) Mengindex semua objek yang terdapat pada image b) Mencari luas masing-masing objek c) Mencari objek yang mempunyai luas sebagai plat nomor Tujuan dari proses ini adalah untuk mengekstrak plat nomor dari gambar yang diambil. Output dari proses ini adalah gambar plat nomor yang tepat pada plat nomornya. 2) Tahap Pengenalan Karakter Proses pengenalan karakter dilakukan dengan menggunakan metode template matching yang dimana hasil dari citra yang telah terekstrak akan dibandingkan dengan hasil dari segmantasi karakter yang telah dibuat dan di dalam database. Pendekatan dengan pencocokan template diperlukan untuk mengenali karakter yang ada pada plat. Untuk pencocokan gambar menggunakan database, gambar yang mempunyai kesamaan yang dianggap terbaik. Proses pencocokan dilakukan dengan memindahkan template gamber untuk seluruh posisi yang memungkinkan pada sumber gambar yang lebih besar dengan menhitung indeks numeric yang menunjukan seberapa baik template sesuai dengan gambar pada posisi itu. Selain itu pencocokan dilakukan dengan cara piksel-by-piksel. Pembuatan template ini adalah proses penting untuk menentukan pengenalan karakter, yang dimana template yang telah dibuat akan dibandingkan dengan citra pembanding untuk mengenali karakter yang ada pada plat. Pembuatan template ini menggunakan profile projection sebagai detector baris dari citra dan menggunakan titik massa (centroid) sebagai cara pemotongan perkarakter. Kemudian karakter yang telah dipotong diubah ukuranya menjadi 24 x 42 agar bisa dikolerasi dengan template. Dalam pembuatan template dibagi beberapa tahapan pembuatanya yaitu: a) Langkah pertama adalah membuat sebuah yang isinya alphabet dari A-Z dan angka dari 0-9 7 Gambar 13. Pembuatan Template b) Dengan menggunakan teknik vertical profile projection potong citra tersebut menjadi 3 baris. c) Tiap potongan baris akan mencari centroid (titik pusat massa) lalu crop sesuai dengan bounding box tiap centroid tersebut. d) Lalu setiap karakter hasil pemotongan di resize menjadi 24 x 42. e) Lalu hasil resize akan disimpan pada sebuah matriks secara berurutan sesuai dengan gambar diatas. Tujuannya adalah ketika melakukan kolerasi, pemenang dari kolerasi akan otomatis menunjukan indeks dari karakter tersebut. d. Menampilkan nomor plat kendaraan B 313 EEK 2.3. Cara Kerja Program Pengenal Plat Nomor Kendaraan menggunakan Matlab 1. Run program file Tampilan_Plat.m 2. Pilih (Pendahuluan/Tim Kami/Mulai) 3. Jika pilih Pendahuluan maka program akan menjalankan file Pendahuluan.fig -> akan menampilkan Pendahuluan 4. Jika pilih Tim Kami maka program akan menjalankan file Team_Kami.fig -> akan menampilkan Team_Kami 5. Jika pilih Mulai maka program akan menjalankan file Mulai.fig -> Menampilkan 8 Mulai -> Tekan Browse untuk menginput gambar plat nomor yang akan dideteksi >Tekan Start untuk menjalankan program pendeteksian plat nomor -> perhatikan result -> menampilkan hasil pendeteksian plat nomor pada result. Jika ingin mengulangi program silahkan tekan browse kembali. 6. Jika ingin kembali pada Tampilan_Plat (menu home) Tekan icon home untuk kembali pada Tampilan_Plat 7. Jika ingin mengakhiri program silahkan tekan tombol silang pada pojok kanan atas untuk mengakhiri program 2.4. Flowchart Program Pengenal Plat Nomor Kendaraan menggunakan Matlab 9 2.5. List Program Pengenal Plat Nomor Kendaraan menggunakan Matlab Tampilan_Plat.m 1 function varargout = Tampilan_Plat(varargin) 2 % TAMPILAN_PLAT MATLAB code for Tampilan_Plat.fig 3% 4% TAMPILAN_PLAT, by itself, creates a new TAMPILAN_PLAT or raises the existing singleton*. 5% 6% 7% H = TAMPILAN_PLAT returns the handle to a new TAMPILAN_PLAT or the handle to the existing singleton*. 8% 9% 10 % TAMPILAN_PLAT('CALLBACK',hObject,eventData,handles,...) calls the local function named CALLBACK in TAMPILAN_PLAT.M with the given input arguments. 11 % 12 % 13 % TAMPILAN_PLAT('Property','Value',...) creates a new TAMPILAN_PLAT or raises the 14 % applied to the GUI before Tampilan_Plat_OpeningFcn gets called. 15 % 16 % unrecognized property name or invalid value makes property application existing singleton*. stop. Starting from the left, property value pairs are An All inputs are passed to Tampilan_Plat_OpeningFcn via varargin. 17 % 18 % 19 % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one instance to run (singleton)". 20 % 21 % See also: GUIDE, GUIDATA, GUIHANDLES 22 23 % Edit the above text to modify the response to help Tampilan_Plat 24 25 % Last Modified by GUIDE v2.5 09-Apr-2021 23:47:31 26 27 % Begin initialization code - DO NOT EDIT 28 gui_Singleton = 1; 29 gui_State = struct('gui_Name', mfilename, ... 30 'gui_Singleton', 31 'gui_OpeningFcn', @Tampilan_Plat_OpeningFcn, ... 32 'gui_OutputFcn', @Tampilan_Plat_OutputFcn, ... 33 'gui_LayoutFcn', [] , ... 34 'gui_Callback', 35 if nargin && ischar(varargin{1}) 36 gui_Singleton, ... []); gui_State.gui_Callback = str2func(varargin{1}); 37 end 38 39 if nargout 40 [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); 41 else 42 gui_mainfcn(gui_State, varargin{:}); 43 end 44 % End initialization code - DO NOT EDIT 45 46 47 % --- Executes just before Tampilan_Plat is made visible. 48 function Tampilan_Plat_OpeningFcn(hObject, eventdata, handles, varargin) 10 49 % This function has no output args, see OutputFcn. 50 % hObject 51 % eventdata handle to figure 52 % handles structure with handles and user data (see GUIDATA) 53 % varargin command line arguments to Tampilan_Plat (see VARARGIN) reserved - to be defined in a future version of MATLAB 54 55 % Choose default command line output for Tampilan_Plat 56 handles.output = hObject; 57 58 % Update handles structure 59 guidata(hObject, handles); 60 61 % UIWAIT makes Tampilan_Plat wait for user response (see UIRESUME) 62 % uiwait(handles.figure1); 63 64 65 % --- Outputs from this function are returned to the command line. 66 function varargout = Tampilan_Plat_OutputFcn(hObject, eventdata, handles) 67 % varargout cell array for returning output args (see VARARGOUT); 68 % hObject 69 % eventdata handle to figure 70 % handles structure with handles and user data (see GUIDATA) reserved - to be defined in a future version of MATLAB 71 72 % Get default command line output from handles structure 73 varargout{1} = handles.output; 74 75 % --- Executes during object creation, after setting all properties. 76 function figure1_CreateFcn(hObject, eventdata, handles) 77 handles.output = hObject; 78 79 guidata(hObject, handles); 80 hback = axes('units','normalized','position',[0 0 1 1 ]); 81 uistack(hback,'bottom'); 82 [back map] = imread('awal.png'); 83 image(back) 84 colormap(map) 85 background=imread('awal.png'); 86 set(hback,'handlevisibility','off','visible','off') 87 88 % Update handles structure 89 guidata(hObject, handles); 90 91 92 % --- Executes during object creation, after setting all properties. 93 function axes1_CreateFcn(hObject, eventdata, handles) 94 % hObject handle to axes1 (see GCBO) 95 % eventdata 96 % handles reserved - to be defined in a future version of MATLAB empty - handles not created until after all CreateFcns called 97 98 % Hint: place code in OpeningFcn to populate axes1 99 imshow('p.png'); 100 101 102 % --- Executes during object creation, after setting all properties. 103 function axes2_CreateFcn(hObject, eventdata, handles) 104 % hObject handle to axes2 (see GCBO) 11 105 % eventdata reserved - to be defined in a future version of MATLAB 106 % handles empty - handles not created until after all CreateFcns called 107 108 % Hint: place code in OpeningFcn to populate axes2 109 imshow('team.png'); 110 111 112 % --- Executes during object creation, after setting all properties. 113 function axes3_CreateFcn(hObject, eventdata, handles) 114 % hObject handle to axes3 (see GCBO) 115 % eventdata 116 % handles reserved - to be defined in a future version of MATLAB empty - handles not created until after all CreateFcns called 117 118 % Hint: place code in OpeningFcn to populate axes3 119 imshow('mulai.png'); 120 121 122 % --- Executes on button press in pushbuttonPEN. 123 function pushbuttonPEN_Callback(hObject, eventdata, handles) 124 % hObject 125 % eventdata handle to pushbuttonPEN (see GCBO) 126 % handles structure with handles and user data (see GUIDATA) reserved - to be defined in a future version of MATLAB 127 close 128 Pendahuluan 129 130 % --- Executes on button press in pushbuttonTIM. 131 function pushbuttonTIM_Callback(hObject, eventdata, handles) 132 % hObject handle to pushbuttonTIM (see GCBO) 133 % eventdata 134 % handles reserved - to be defined in a future version of MATLAB structure with handles and user data (see GUIDATA) 135 close 136 Team_Kami 137 138 % --- Executes on button press in pushbuttonMULAI. 139 function pushbuttonMULAI_Callback(hObject, eventdata, handles) 140 % hObject handle to pushbuttonMULAI (see GCBO) 141 % eventdata reserved - to be defined in a future version of MATLAB 142 % handles structure with handles and user data (see GUIDATA) 143 close 144 Mulai 12 Pendahuluan.m 1 function varargout = Pendahuluan(varargin) 2 % PENDAHULUAN MATLAB code for Pendahuluan.fig PENDAHULUAN, by itself, creates a new PENDAHULUAN or raises the existing 3% 4% singleton*. 5% 6% H = PENDAHULUAN returns the handle to a new PENDAHULUAN or the handle to 7% the existing singleton*. 8% 9% PENDAHULUAN('CALLBACK',hObject,eventData,handles,...) calls the local 10 % function named CALLBACK in PENDAHULUAN.M with the given input arguments. 11 % 12 % PENDAHULUAN('Property','Value',...) creates a new PENDAHULUAN or raises the 13 % existing singleton*. 14 % 15 % applied to the GUI before Pendahuluan_OpeningFcn gets called. 16 % stop. 17 % 18 % *See GUI Options on GUIDE's Tools menu. 19 % instance to run (singleton)". Starting from the left, property value pairs are An unrecognized property name or invalid value makes property application All inputs are passed to Pendahuluan_OpeningFcn via varargin. Choose "GUI allows only one 20 % 21 % See also: GUIDE, GUIDATA, GUIHANDLES 22 23 % Edit the above text to modify the response to help Pendahuluan 24 25 % Last Modified by GUIDE v2.5 19-Apr-2021 11:33:07 26 27 % Begin initialization code - DO NOT EDIT 28 gui_Singleton = 1; 29 gui_State = struct('gui_Name', 'gui_Singleton', 30 mfilename, ... gui_Singleton, ... 31 'gui_OpeningFcn', @Pendahuluan_OpeningFcn, ... 32 'gui_OutputFcn', @Pendahuluan_OutputFcn, ... 33 'gui_LayoutFcn', [] , ... 34 'gui_Callback', 35 if nargin && ischar(varargin{1}) 36 []); gui_State.gui_Callback = str2func(varargin{1}); 37 end 38 39 if nargout 40 [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); 41 else 42 gui_mainfcn(gui_State, varargin{:}); 43 end 44 % End initialization code - DO NOT EDIT 45 46 47 % --- Executes just before Pendahuluan is made visible. 48 function Pendahuluan_OpeningFcn(hObject, eventdata, handles, varargin) 49 % This function has no output args, see OutputFcn. 50 % hObject 51 % eventdata handle to figure reserved - to be defined in a future version of MATLAB 52 % handles structure with handles and user data (see GUIDATA) 53 % varargin command line arguments to Pendahuluan (see VARARGIN) 54 13 55 % Choose default command line output for Pendahuluan 56 handles.output = hObject; 57 58 % Update handles structure 59 guidata(hObject, handles); 60 61 % UIWAIT makes Pendahuluan wait for user response (see UIRESUME) 62 % uiwait(handles.figure1); 63 64 65 % --- Outputs from this function are returned to the command line. 66 function varargout = Pendahuluan_OutputFcn(hObject, eventdata, handles) 67 % varargout cell array for returning output args (see VARARGOUT); 68 % hObject 69 % eventdata handle to figure 70 % handles structure with handles and user data (see GUIDATA) reserved - to be defined in a future version of MATLAB 71 72 % Get default command line output from handles structure 73 varargout{1} = handles.output; 74 75 76 % --- Executes during object creation, after setting all properties. 77 function figure1_CreateFcn(hObject, eventdata, handles) 78 % hObject handle to figure1 (see GCBO) 79 % eventdata reserved - to be defined in a future version of MATLAB 80 % handles empty - handles not created until after all CreateFcns called 81 handles.output = hObject; 82 83 guidata(hObject, handles); 84 hback = axes('units','normalized','position',[0 0 1 1 ]); 85 uistack(hback,'bottom'); 86 [back map] = imread('awal.png'); 87 image(back) 88 colormap(map) 89 background=imread('awal.png'); 90 set(hback,'handlevisibility','off','visible','off') 91 92 % Update handles structure 93 guidata(hObject, handles); 94 95 96 % --- Executes on button press in pushbutton5. 97 function pushbutton5_Callback(hObject, eventdata, handles) 98 % hObject 99 % eventdata 100 % handles handle to pushbutton5 (see GCBO) reserved - to be defined in a future version of MATLAB structure with handles and user data (see GUIDATA) 101 close 102 Tampilan_Plat 14 Team_Kami.m 1 function varargout = Team_Kami(varargin) 2 % TEAM_KAMI MATLAB code for Team_Kami.fig TEAM_KAMI, by itself, creates a new TEAM_KAMI or raises the existing 3% 4% singleton*. 5% 6% H = TEAM_KAMI returns the handle to a new TEAM_KAMI or the handle to 7% the existing singleton*. 8% 9% TEAM_KAMI('CALLBACK',hObject,eventData,handles,...) calls the local 10 % function named CALLBACK in TEAM_KAMI.M with the given input arguments. 11 % 12 % TEAM_KAMI('Property','Value',...) creates a new TEAM_KAMI or raises the 13 % existing singleton*. 14 % 15 % applied to the GUI before Team_Kami_OpeningFcn gets called. 16 % stop. 17 % 18 % *See GUI Options on GUIDE's Tools menu. 19 % instance to run (singleton)". Starting from the left, property value pairs are An unrecognized property name or invalid value makes property application All inputs are passed to Team_Kami_OpeningFcn via varargin. Choose "GUI allows only one 20 % 21 % See also: GUIDE, GUIDATA, GUIHANDLES 22 23 % Edit the above text to modify the response to help Team_Kami 24 25 % Last Modified by GUIDE v2.5 19-Apr-2021 14:43:51 26 27 % Begin initialization code - DO NOT EDIT 28 gui_Singleton = 1; 29 gui_State = struct('gui_Name', 'gui_Singleton', 30 mfilename, ... gui_Singleton, ... 31 'gui_OpeningFcn', @Team_Kami_OpeningFcn, ... 32 'gui_OutputFcn', @Team_Kami_OutputFcn, ... 33 'gui_LayoutFcn', [] , ... 34 'gui_Callback', 35 if nargin && ischar(varargin{1}) 36 []); gui_State.gui_Callback = str2func(varargin{1}); 37 end 38 39 if nargout 40 [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); 41 else 42 gui_mainfcn(gui_State, varargin{:}); 43 end 44 % End initialization code - DO NOT EDIT 45 46 47 % --- Executes just before Team_Kami is made visible. 48 function Team_Kami_OpeningFcn(hObject, eventdata, handles, varargin) 49 % This function has no output args, see OutputFcn. 50 % hObject 51 % eventdata handle to figure 52 % handles structure with handles and user data (see GUIDATA) 53 % varargin command line arguments to Team_Kami (see VARARGIN) reserved - to be defined in a future version of MATLAB 54 15 55 % Choose default command line output for Team_Kami 56 handles.output = hObject; 57 58 % Update handles structure 59 guidata(hObject, handles); 60 61 % UIWAIT makes Team_Kami wait for user response (see UIRESUME) 62 % uiwait(handles.figure1); 63 64 65 % --- Outputs from this function are returned to the command line. 66 function varargout = Team_Kami_OutputFcn(hObject, eventdata, handles) 67 % varargout cell array for returning output args (see VARARGOUT); 68 % hObject 69 % eventdata handle to figure 70 % handles structure with handles and user data (see GUIDATA) reserved - to be defined in a future version of MATLAB 71 72 % Get default command line output from handles structure 73 varargout{1} = handles.output; 74 guidata(hObject, handles); 75 hback = axes('units','normalized','position',[0 0 1 1 ]); 76 uistack(hback,'bottom'); 77 [back map] = imread('awal.png'); 78 image(back) 79 colormap(map) 80 background=imread('awal.png'); 81 set(hback,'handlevisibility','off','visible','off') 82 83 % Update handles structure 84 guidata(hObject, handles); 85 86 87 % --- Executes on button press in pushbutton2. 88 function pushbutton2_Callback(hObject, eventdata, handles) 89 % hObject 90 % eventdata handle to pushbutton2 (see GCBO) 91 % handles structure with handles and user data (see GUIDATA) reserved - to be defined in a future version of MATLAB 92 close 93 Tampilan_Plat 94 95 96 % --- Executes during object creation, after setting all properties. 97 function axes1_CreateFcn(hObject, eventdata, handles) 98 % hObject 99 % eventdata 100 % handles handle to axes1 (see GCBO) reserved - to be defined in a future version of MATLAB empty - handles not created until after all CreateFcns called 101 102 % Hint: place code in OpeningFcn to populate axes1 103 imshow('akbar.jpg'); 104 105 106 % --- Executes during object creation, after setting all properties. 107 function axes7_CreateFcn(hObject, eventdata, handles) 108 % hObject handle to axes7 (see GCBO) 109 % eventdata reserved - to be defined in a future version of MATLAB 110 % handles empty - handles not created until after all CreateFcns called 16 111 112 % Hint: place code in OpeningFcn to populate axes7 113 imshow('uli.jpg'); 114 115 116 % --- Executes during object creation, after setting all properties. 117 function axes8_CreateFcn(hObject, eventdata, handles) 118 % hObject 119 % eventdata handle to axes8 (see GCBO) 120 % handles empty - handles not created until after all CreateFcns called reserved - to be defined in a future version of MATLAB 121 122 % Hint: place code in OpeningFcn to populate axes8 123 imshow('nova.jpg'); 124 125 126 % --- Executes during object creation, after setting all properties. 127 function axes9_CreateFcn(hObject, eventdata, handles) 128 % hObject handle to axes9 (see GCBO) 129 % eventdata reserved - to be defined in a future version of MATLAB 130 % handles empty - handles not created until after all CreateFcns called 131 132 % Hint: place code in OpeningFcn to populate axes9 133 imshow('Iqbal.jpg'); 134 135 136 % --- Executes during object creation, after setting all properties. 137 function axes10_CreateFcn(hObject, eventdata, handles) 138 % hObject handle to axes10 (see GCBO) 139 % eventdata 140 % handles reserved - to be defined in a future version of MATLAB empty - handles not created until after all CreateFcns called 141 142 % Hint: place code in OpeningFcn to populate axes10 143 imshow('raka.jpg'); 144 145 146 % --- Executes during object creation, after setting all properties. 147 function axes11_CreateFcn(hObject, eventdata, handles) 148 % hObject 149 % eventdata handle to axes11 (see GCBO) 150 % handles empty - handles not created until after all CreateFcns called reserved - to be defined in a future version of MATLAB 151 152 % Hint: place code in OpeningFcn to populate axes11 153 imshow('lugina.jpg'); 17 Mulai.m 1 function varargout = Mulai(varargin) 2 % MULAI MATLAB code for Mulai.fig MULAI, by itself, creates a new MULAI or raises the existing 3% 4% singleton*. 5% 6% H = MULAI returns the handle to a new MULAI or the handle to 7% the existing singleton*. 8% 9% MULAI('CALLBACK',hObject,eventData,handles,...) calls the local 10 % function named CALLBACK in MULAI.M with the given input arguments. 11 % 12 % MULAI('Property','Value',...) creates a new MULAI or raises the 13 % existing singleton*. 14 % 15 % applied to the GUI before Mulai_OpeningFcn gets called. 16 % stop. 17 % 18 % *See GUI Options on GUIDE's Tools menu. 19 % instance to run (singleton)". Starting from the left, property value pairs are An unrecognized property name or invalid value makes property application All inputs are passed to Mulai_OpeningFcn via varargin. Choose "GUI allows only one 20 % 21 % See also: GUIDE, GUIDATA, GUIHANDLES 22 23 % Edit the above text to modify the response to help Mulai 24 25 % Last Modified by GUIDE v2.5 19-Apr-2021 23:18:01 26 27 % Begin initialization code - DO NOT EDIT 28 gui_Singleton = 1; 29 gui_State = struct('gui_Name', 'gui_Singleton', 30 mfilename, ... gui_Singleton, ... 31 'gui_OpeningFcn', @Mulai_OpeningFcn, ... 32 'gui_OutputFcn', @Mulai_OutputFcn, ... 33 'gui_LayoutFcn', [] , ... 34 'gui_Callback', 35 if nargin && ischar(varargin{1}) 36 []); gui_State.gui_Callback = str2func(varargin{1}); 37 end 38 39 if nargout 40 [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); 41 else 42 gui_mainfcn(gui_State, varargin{:}); 43 end 44 % End initialization code - DO NOT EDIT 45 46 47 % --- Executes just before Mulai is made visible. 48 function Mulai_OpeningFcn(hObject, eventdata, handles, varargin) 49 % This function has no output args, see OutputFcn. 50 % hObject 51 % eventdata handle to figure 52 % handles structure with handles and user data (see GUIDATA) 53 % varargin command line arguments to Mulai (see VARARGIN) reserved - to be defined in a future version of MATLAB 54 18 55 % Choose default command line output for Mulai 56 handles.output = hObject; 57 58 % Update handles structure 59 guidata(hObject, handles); 60 61 % UIWAIT makes Mulai wait for user response (see UIRESUME) 62 % uiwait(handles.figure1); 63 64 65 % --- Outputs from this function are returned to the command line. 66 function varargout = Mulai_OutputFcn(hObject, eventdata, handles) 67 % varargout cell array for returning output args (see VARARGOUT); 68 % hObject 69 % eventdata handle to figure 70 % handles structure with handles and user data (see GUIDATA) reserved - to be defined in a future version of MATLAB 71 72 % Get default command line output from handles structure 73 varargout{1} = handles.output; 74 75 % --- Executes during object creation, after setting all properties. 76 function figure1_CreateFcn(hObject, eventdata, handles) 77 % hObject 78 % eventdata handle to figure1 (see GCBO) 79 % handles empty - handles not created until after all CreateFcns called reserved - to be defined in a future version of MATLAB 80 handles.output = hObject; 81 82 guidata(hObject, handles); 83 hback = axes('units','normalized','position',[0 0 1 1 ]); 84 uistack(hback,'bottom'); 85 [back map] = imread('awal.png'); 86 image(back) 87 colormap(map) 88 background=imread('awal.png'); 89 set(hback,'handlevisibility','off','visible','off') 90 91 % Update handles structure 92 guidata(hObject, handles); 93 94 95 % --- Executes on button press in pushbutton1. 96 function pushbutton1_Callback(hObject, eventdata, handles) 97 % hObject handle to pushbutton1 (see GCBO) 98 % eventdata 99 % handles reserved - to be defined in a future version of MATLAB structure with handles and user data (see GUIDATA) 100 f=handles.a; %Membaca Gambar Plat Nomor 101 f=imresize(f,[400 NaN]); 102 tetap sama %Mengubah ukuran rasio untuk menjaga gambar 103 g=rgb2gray(f); %Mengonversi gambar RGB (warna) menjadi abu-abu 104 (intensitas) 105 g=medfilt2(g,[3 3]); %Pemfilteran (filter penghalusan) untuk 106 menghilangkan noise. 107 se=strel('disk',1); 108 pemrosesan morfologi. %Elemen struktural (disk dengan radius 1) untuk 109 gi=imdilate(g,se); %Mendilasi gambar (penebalan pada citra gambar 110 untuk memperbaiki huruf dan angka 19 111 ge=imerode(g,se); %Kebalikan dari dilasi (untuk penipisan dan 112 pengecilan objek dari citra 113 gdiff=imsubtract(gi,ge); %Morphological Gradient untuk peningkatan tepi 114 gdiff=mat2gray(gdiff); %Mengubah kelas menjadi dua kali lipat (tebal) 115 gdiff=conv2(gdiff,[1 1;1 1]); 116 tepinya %Konvolusi gambar ganda untuk mencerahkan 117 gdiff=imadjust(gdiff,[0.5 0.7],[0 1],0.1); 118 1. 119 B=logical(gdiff); %Skala intensitas antara rentang 0 hingga %Konversi kelas dari ganda ke biner. 120 er=imerode(B,strel('line',50,0)); 121 out1=imsubtract(B,er); 122 F=imfill(out1,'holes'); %Mengisi semua wilayah gambar. 123 H=bwmorph(F,'thin',1); %Menipiskan gambar untuk memastikan isolasi 124 karakter. 125 H=imerode(H,strel('line',3,90)); 126 final=bwareaopen(H,100); %%Menyeleksi semua wilayah yang luas pikselnya 127 lebih dari 100. 128 Iprops=regionprops(final,'BoundingBox','Image'); 129 NR=cat(1,Iprops.BoundingBox); 130 r=controlling(NR); 131 if ~isempty(r) 132 I={Iprops.Image}; 133 noPlate=[]; for v=1:length(r) 134 135 N=I{1,r(v)}; 136 letter=readLetter(N); while letter=='O' || letter=='0' 137 138 if v<=3 139 letter='O'; else 140 141 letter='0'; end 142 break; 143 end 144 145 noPlate=[noPlate letter]; 146 end 147 fid = fopen('noPlate.txt', 'wt'); 148 fprintf(fid,'%s\n',noPlate); 149 fclose(fid); 150 %winopen('noPlate.txt') %misalnya mau make notepad 151 %imshow(gdiff); %misalnya mau gambar ke biner doang 152 detect = noPlate 153 axes(handles.axes1); 154 imshow(final); 155 else 156 fprintf('Unable to extract the characters from the number plate.\n'); 157 fprintf('The characters on the number plate might not be clear or touching with 158 each other or boundries.\n'); 159 end 160 set(handles.result,'String',noPlate); 161 162 function result_Callback(hObject, eventdata, handles) 163 % hObject 164 % eventdata handle to result (see GCBO) 165 % handles structure with handles and user data (see GUIDATA) reserved - to be defined in a future version of MATLAB 166 20 167 % Hints: get(hObject,'String') returns contents of result as text 168 % str2double(get(hObject,'String')) returns contents of result as a double 169 170 171 % --- Executes during object creation, after setting all properties. 172 function result_CreateFcn(hObject, eventdata, handles) 173 % hObject handle to result (see GCBO) 174 % eventdata 175 % handles reserved - to be defined in a future version of MATLAB empty - handles not created until after all CreateFcns called 176 177 % Hint: edit controls usually have a white background on Windows. See ISPC and COMPUTER. 178 % 179 if ispc && isequal(get(hObject,'BackgroundColor'), 180 get(0,'defaultUicontrolBackgroundColor')) 181 set(hObject,'BackgroundColor','white'); 182 end 183 184 185 % --- Executes during object creation, after setting all properties. 186 function axes1_CreateFcn(hObject, eventdata, handles) 187 % hObject handle to axes1 (see GCBO) 188 % eventdata reserved - to be defined in a future version of MATLAB 189 % handles empty - handles not created until after all CreateFcns called 190 191 % Hint: place code in OpeningFcn to populate axes1 192 193 194 % --- Executes on button press in browse. 195 function browse_Callback(hObject, eventdata, handles) 196 % hObject handle to browse (see GCBO) 197 % eventdata reserved - to be defined in a future version of MATLAB 198 % handles structure with handles and user data (see GUIDATA) 199 [Filename,Pathname]=uigetfile('*.jpg','File Selector'); 200 name=strcat(Pathname,Filename); 201 a=imread(name); 202 set(handles.edit2,'string',name); 203 axes(handles.axes2); 204 imshow(a); 205 handles.a=a; 206 guidata(hObject, handles); 207 208 209 210 function edit2_Callback(hObject, eventdata, handles) handle to edit2 (see GCBO) 211 % hObject 212 % eventdata reserved - to be defined in a future version of MATLAB 213 % handles structure with handles and user data (see GUIDATA) 214 215 % Hints: get(hObject,'String') returns contents of edit2 as text 216 % str2double(get(hObject,'String')) returns contents of edit2 as a double 217 218 219 % --- Executes during object creation, after setting all properties. 220 function edit2_CreateFcn(hObject, eventdata, handles) 221 % hObject handle to edit2 (see GCBO) 222 % eventdata reserved - to be defined in a future version of MATLAB 21 223 % handles empty - handles not created until after all CreateFcns called 224 225 % Hint: edit controls usually have a white background on Windows. See ISPC and COMPUTER. 226 % 227 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end % --- Executes on button press in pushbutton6. function pushbutton6_Callback(hObject, eventdata, handles) % hObject handle to pushbutton6 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) close Tampilan_Plat 22 Create_templates.m 1 A=imread('A.bmp');B=imread('B.bmp'); 2 C=imread('C.bmp');D=imread('D.bmp'); 3 E=imread('E.bmp');F=imread('F.bmp'); 4 G=imread('G.bmp');H=imread('H.bmp'); 5 I=imread('I.bmp');J=imread('J.bmp'); 6 K=imread('K.bmp');L=imread('L.bmp'); 7 M=imread('M.bmp');N=imread('N.bmp'); 8 O=imread('O.bmp');P=imread('P.bmp'); 9 Q=imread('Q.bmp');R=imread('R.bmp'); 10 S=imread('S.bmp');T=imread('T.bmp'); 11 U=imread('U.bmp');V=imread('V.bmp'); 12 W=imread('W.bmp');X=imread('X.bmp'); 13 Y=imread('Y.bmp');Z=imread('Z.bmp'); 14 Afill=imread('fillA.bmp'); 15 Bfill=imread('fillB.bmp'); 16 Dfill=imread('fillD.bmp'); 17 Ofill=imread('fillO.bmp'); 18 Pfill=imread('fillP.bmp'); 19 Qfill=imread('fillQ.bmp'); 20 Rfill=imread('fillR.bmp'); 21 22 23 24 25 one=imread('1.bmp'); two=imread('2.bmp'); 26 three=imread('3.bmp');four=imread('4.bmp'); 27 five=imread('5.bmp'); six=imread('6.bmp'); 28 seven=imread('7.bmp');eight=imread('8.bmp'); 29 nine=imread('9.bmp'); zero=imread('0.bmp'); 30 zerofill=imread('fill0.bmp'); 31 fourfill=imread('fill4.bmp'); 32 sixfill=imread('fill6.bmp'); 33 sixfill2=imread('fill6_2.bmp'); 34 eightfill=imread('fill8.bmp'); 35 ninefill=imread('fill9.bmp'); 36 ninefill2=imread('fill9_2.bmp'); 37 38 39 40 41 42 letter=[A Afill B Bfill C D Dfill E F G H I J K L M... 43 N O Ofill P Pfill Q Qfill R Rfill S T U V W X Y Z]; 44 45 number=[one two three four fourfill five... 46 six sixfill sixfill2 seven eight eightfill nine ninefill ninefill2 zero zerofill]; 47 48 character=[letter number]; 49 50 NewTemplates=mat2cell(character,42,[24 24 24 24 24 24 24 24 ... 24 24 24 24 24 24 24 ... 51 52 24 24 24 24 24 24 24 ... 53 24 24 24 24 24 24 24 ... 54 24 24 24 24 24 24 24 ... 23 55 24 24 24 24 24 24 24 ... 56 24 24 24 24 24 24 24]); 57 58 59 60 61 62 63 save ('NewTemplates','NewTemplates') 64 clear all 24 readLetter.m 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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 function letter=readLetter(snap) load NewTemplates snap=imresize(snap,[42 24]); comp=[ ]; for n=1:length(NewTemplates) sem=corr2(NewTemplates{1,n},snap); comp=[comp sem]; end vd=find(comp==max(comp)); if vd==1 || vd==2 letter='A'; elseif vd==3 || vd==4 letter='B'; elseif vd==5 letter='C'; elseif vd==6 || vd==7 letter='D'; elseif vd==8 letter='E'; elseif vd==9 letter='F'; elseif vd==10 letter='G'; elseif vd==11 letter='H'; elseif vd==12 letter='I'; elseif vd==13 letter='J'; elseif vd==14 letter='K'; elseif vd==15 letter='L'; elseif vd==16 letter='M'; elseif vd==17 letter='N'; elseif vd==18 || vd==19 letter='O'; elseif vd==20 || vd==21 letter='P'; elseif vd==22 || vd==23 letter='Q'; elseif vd==24 || vd==25 letter='R'; elseif vd==26 letter='S'; elseif vd==27 letter='T'; elseif vd==28 letter='U'; elseif vd==29 letter='V'; 25 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 elseif vd==30 letter='W'; elseif vd==31 letter='X'; elseif vd==32 letter='Y'; elseif vd==33 letter='Z'; elseif vd==34 letter='1'; elseif vd==35 letter='2'; elseif vd==36 letter='3'; elseif vd==37 || letter='4'; elseif vd==39 letter='5'; elseif vd==40 || letter='6'; elseif vd==43 letter='7'; elseif vd==44 || letter='8'; elseif vd==46 || letter='9'; else letter='0'; end end vd==38 vd==41 || vd==42 vd==45 vd==47 || vd==48 takeboxes.m 1 function r=takeboxes(NR,container,chk) 2 3 takethisbox=[]; 4 for i=1:size(NR,1) 5 if NR(i,(2*chk))>=container(1) && NR(i,(2*chk))<=container(2) 6 7 takethisbox=cat(1,takethisbox,NR(i,:)); end 8 end 9 r=[]; 10 for k=1:size(takethisbox,1) 11 12 13 14 var=find(takethisbox(k,1)==reshape(NR(:,1),1,[])); if length(var)==1 r=[r var]; else for v=1:length(var) 15 16 M(v)=NR(var(v),(2*chk))>=container(1) && NR(var(v),(2*chk))<=container(2); 17 end 18 var=var(M); 19 20 r=[r var]; end 21 end 22 end 26 guessthesix.m 1 function container=guessthesix(Q,W,bsize) 2 3 for l=5:-1:2 4 val=find(Q==l); 5 var=length(val); 6 if isempty(var) || var == 1 if val == 1 7 8 index=val+1; else 9 10 index=val; 11 end 12 if length(Q)==val 13 index=[]; 14 end 15 if Q(index)+Q(index+1) == 6 | Q(index)+Q(index+1) == 7 | Q(index)+Q(index+1) == 8 16 container=[W(index)-(bsize/2) W(index+1)+(bsize/2)]; break; 17 elseif Q(index)+Q(index-1) == 6 | Q(index)+Q(index-1) == 7 | Q(index)+Q(index-1) == 8 18 19 container=[W(index-1)-(bsize/2) W(index)+(bsize/2)]; break; 20 end 21 else 22 for k=1:1:var 23 if val(k)==1 24 25 index=val(k)+1; else 26 27 index=val(k); 28 end 29 if length(Q)==val(k) 30 index=[]; 31 end 32 if Q(index)+Q(index+1) == 6 | Q(index)+Q(index+1) == 7 | Q(index)+Q(index+1) == 8 33 container=[W(index)-(bsize/2) W(index+1)+(bsize/2)]; break; 34 elseif Q(index)+Q(index-1) == 6 | Q(index)+Q(index-1) == 7 | Q(index)+Q(index-1) == 8 35 36 container=[W(index-1)-(bsize/2) W(index)+(bsize/2)]; break; 37 end 38 39 end 40 if k~=var break; 41 end 42 end 43 44 end 45 if l==2 46 container=[]; 47 end 48 end 27 controlling.m 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 35 36 37 38 39 40 41 42 43 44 function r=controlling(NR) [Q,W]=hist(NR(:,4)); ind=find(Q==6 | Q==7 | Q==8); for k=1:length(NR) C_5(k)=NR(k,2) * NR(k,4); end NR2=cat(2,NR,C_5'); [E,R]=hist(NR2(:,5),20); Y=find(E==6 | E==7 | E==8); if length(ind)==1 MP=W(ind); binsize=W(2)-W(1); container=[MP-(binsize/2) MP+(binsize/2)]; r=takeboxes(NR,container,2); elseif length(Y)==1 MP=R(Y); binsize=R(2)-R(1); container=[MP-(binsize/2) MP+(binsize/2)]; r=takeboxes(NR2,container,2.5); elseif isempty(ind) || length(ind)>1 [A,B]=hist(NR(:,2),20); ind2=find(A==6 | A==7 | A==8); if length(ind2)==1 MP=B(ind2); binsize=B(2)-B(1); container=[MP-(binsize/2) MP+(binsize/2)]; r=takeboxes(NR,container,1); else container=guessthesix(A,B,(B(2)-B(1))); if ~isempty(container) r=takeboxes(NR,container,1); elseif isempty(container) container2=guessthesix(E,R,(R(2)-R(1))); if ~isempty(container2) r=takeboxes(NR2,container2,2.5); else r=[]; end end end end end 28 BAB III PENUTUP 3.1. Kesimpulan Pengenal kendaraan tersebut harus tercatat dalam database yang disimpan oleh pemerintah pusat. Number Plate Recognition (NPR) atau LPR (Licence Plate Recognition) merupakan salah satu pemanfaatan pengolahan citra untuk mengenali karakter nomor plat pada kendaraan, yang dimana biasanya digunakan untuk proses pencatatan plat nomor kendaraan secara otomatis ke sistem salah satunya adalah proses penginputan secara otomatis ke dalam sistem parkir. Dalam sistem ini, perangkat lunak aplikasi dirancang untuk mendeteksi pelat nomor kendaraan menggunakan pelat nomor asli. Pada lokasi pelat pertama diekstraksi menggunakan operasi morfologis kemudian dipisahkan karakter pelat secara individual berdasarkan segmentasi. Akhirnya pencocokan template diterapkan dengan penggunaan korelasi untuk pengenalan karakter pelat. 3.2. Saran Untuk pembuatan project ini disarankan untuk memakai kamera yang HD untuk mendeteksi nomor plat lebih akurat. Dan disarankan juga untuk menggunakan nomor plat yang jelas bukan yang sudah rusak agar memudahkan pendektesian nomor plat dengan baik. 29 DAFTAR PUSTAKA Kiki Kusumawati dan Dery Willy Cahyadi. (2017). Penerapan Teknologi Optical Character Recognition untuk Mendeteksi Plat Nomor Kendaraan. ISSN 2580-5495 Ragini Bhat dan Bijender Mehandia. (2014). RECOGNITION OF VEHICLE NUMBER PLATE USING MATLAB. INTERNATIONAL JOURNAL OF INNOVATIVE RESEARCH IN ELECTRICAL, ELECTRONICS, INSTRUMENTATION AND CONTROL ENGINEERING, Vol.2, No.8. 1899-1903 Wakhidah, Nur. (2012). Deteksi Plat Nomor Kendaraan Bermotor Berdasarkan Area pada Image Segmentation. JURNAL TRANSFORMATIKA, Vol.9, No.2. 55-63 30 LAMPIRAN Tampilan_Plat Pendahuluan 31 Team_Kami Mulai 32