Tutorial Digital Image Processing Using Visual Basic 6
Tutorial Digital Image Processing Using Visual Basic 6
sensor visual pada robot dan sebagainya. Mau tahu apa itu
For x = 1 To IntPixelX
For y = 1 To IntPixelY
Pixels(x, y) = Picture1.Point(x, y)
Next y
Next x
For x = 1 To IntPixelX
For y = 1 To IntPixelY
Next x
For x = 1 To IntPixelX
For y = 1 To IntPixelY
Next y
Next x
(GreyScale).
Selamat Mencoba!
File Download Source Code pengolahan Citra Digital memang
Tidak saya sertakan diblog saya dengan tujuan untuk
membuat pengunjung blog ini mencoba sendiri dirumah
sehingga Ilmu yang didapat akan lebih melekat dan
bermamfaat. Harap Di Maklumi!
terkoneksi ke Internet)
http://bocah-cakil.blogspot.com
Elektronika00.TK
http://Anekahobi.wordpress.com
Source : http://fadilcrows.blogspot.com/
080913001
DEPARTEMEN FISIKA
FAKULTAS SAINS DAN TEKNOLOGI
UNIVERSITAS AIRLANGGA
2012
JUDUL
Abstrak
Pada Umumnya sistem pencatatan plat nomer mobil atau plat nomor motor
yang dilakukan di tempat masuk parkir masih dilakukan secara konvensional,
yaitu dengan pencatatan manual plat nomer kendaraan yang dilakukan oleh
kasir pada media karcis. Hal yang konvensional ini masih banyak yang
dipakai di pintu keluar masuk kendaraan salah satunya di pintu masuk atau
keluar jalan tool, yang terbaru saat ini mulai digunakan media kamera dan
komputer namun tetap saja pencatatan plat nomer kendaraan masih
dilakukan secara manual oleh kasir, dengan melakukan pencatatan yang
kontinou, pada suatu saat tidak menuntut kemungkinan akan timbul suatu
kejenuhan yang akan mempengaruhi konsentrasi kasir dalam melakukan
pencatatan plat nomer kendaraan yang masuk dan keluar pintu.
PENDAHULUAN
Noise yang terdapat pada citra digital dapat dikurangi atau dihilangkan
dengan berbagai macam metode, metode-metode yang sering digunakan
antara lain dengan metode median filter. Median filter adalah teknik
mereduksi noise dengan cara mengganti piksel noise dengan nilai median
atau nilai tengah dari piksel-piksel tetangganya, dan piksel itu sendiri. Filter
median sangat efektif untuk menghilangkan noise jenis salt and peper dan
juga dapat mempertahankan detail citra karena tidak tergantung dengan
nilai-nilai yang berbeda dengan nilai-nilai yang umum dalam lingkungannya.
Selain median filter terdapat metode lain yaitu Gaussian filter. Gaussian filter
adalah suatu filter dengan nilai pembobotan pada setiap piksel dipilih
berdasarkan bentuk fungsi Gaussian. Filter ini sangat baik dan sering
digunakan untuk menghilangkan noise yang bersifat sebaran normal, yang
banyak dijumpai pada citra hasil proses digitalisasi menggunakan kamera, hal
ini terjadi karena merupakan fenomena alamiah akibat dari sifat pantulan
cahaya dan kepekaan sensor cahaya pada kamera itu sendiri. Selain metode-
metode di atas terdapat berbagai macam metode yang sering digunakan untuk
menghilangkan noise, namun pada tugas akhir ini akan diteliti menggunakan
metode bandpass dan bandstop untuk mereduksi noise karena metode ini
akan menghasilkan citra yang lebih baik dimana efek blur yang dihasilkan
lebih kecil dibandingkan dengan metode Gaussian filter sehingga citra hasil
akan tampak lebih baik. Dengan cara seperti inilah untuk memperkecil
permasalahan yang akan dihadapi oleh neural network untuk membaca dan
menterjemahkan dari image menjadi teks. Yaitu plat nomor kendaraan.
Karena neural network sendiri akan bisa bekerja dengan baik jika disuguhkan
pada image yang simple tanpa banyak noise. Dan hal inilah yang akan
mempercepat kinerja neural network. karena proyek ini di buat untuk
pembacaan plat nomor kendaraan dengan kecepatan dan ketelitian
pembacaan plat nomor kendaraan yang sangat tinggi.
TINJAUAN PUSTAKA
1. Pemeliharaan (Maintenance)
Pada tahap ini, perangkat lunak akan mengalami perubahan-perubahan
setelah digunakan. Hal ini dapat terjadi pada saat di temukannya kesalahan,
proses adaptasi perangkat lunak pada sistem operasi dan perangkat lunak
lainnyayang dapat menimbulkan kesalahan. Pemeliharaan perangkat lunak
menggunakan kembali setiap langkah daur hidup (life cycle) yang terdahulu
untuk sebuah program yang sudah ada. Hal ini lebih baik daripada membuat
suatu program baru lagi. Di dalam permodelan suatu sistem memiliki alat
bantu untuk menggambarkan suatu diagram aliran instruksi yang berisi
serangkaian simbol yang menunjukkan secara logika tentang hubungan antar
elemenn-elemen yang disebut diagram alir atau flowchart. Diagram alir atau
flowchart dapat melukiskan sebuah kagiatan pengolahan informasi yang
berkisar tentang konfigurasi komputer sampai tahap rinci dalam program.
Citra merupakan suatu signal digital dua dimensi yang dapat di observasi oleh
sistem visual manusia. Ditinjau dari sudut pandang matematis, citra
merupakan fungsi menerus (continue) dari intensitas cahaya pada bidang
dwimatra. Sumber cahaya menerangi obyek, obyek memantulkan kembali
sebagian dari berkas cahaya tersebut. Pantulan cahaya ini ditangkap oleh alat-
alat optik, misalnya mata manusia, kamera pemindai (scanner) kamera
digital, dan sebagainya, sehingga banyak obyek citra tersebut terekam.
Citra digital merupakan suatu larik / array dua dimensi atau suatu matrik
yang elemen-elemennya menyatakan tingkat keabuan dari elemen gambar;
jadi informasi yang terkandung di dalamnya bersifat diskrit (Arymurthy dan
Setiawan, 1992).
Terdapat dua jenis citra yaitu citra diam dan citra bergerak. Citra bergerak
adalah rangkaian citra diam yang ditampilkan secara beruntun (sekuensial)
sehingga memberi kesan pada mata sebagai gambar yang bergerak.
Sedangkan citra diam adalah citra yang tidak bergerak.
fungsi kontinu menjadi nilai-nilai diskrit disebut pencitraan (imaging) atau
digitalisasi. Citra yang dihasilkan inilah yang disebut citra digital(Digital
Image), dinyatakan sebagai kumpulan piksel dalam matrik dua dimensi. Pada
umumnya citra digital berbentuk empat persegi panjang dan dimensi
ukurannya dinyatakan tinggi dikalikan dengan lebar atu lebar dikalikan
dengan panjang.
Terjemahan bebas bitmap adalah pemetaan bit. Artinya nilai intensitas piksel
di dalam citra dipetakan ke sejumlah bit tertentu. Peta bit umumnya adalah 8,
yang berarti setiap piksel panjangnya 8 bit. Delapan bit ini mempresentasikan
nilai intensitas piksel. Dengan demikian ada sebanyak 28 =256 derajat
keabuan, mulai dari 0 (00000000) sampai 255 (11111111). Setiap berkas
bitmap terdiri atas header berkas, header bitmap, informasi palet dan data
bitmap. Header adalah data yang terdapat pada awal bagian berkas citra.
Terdapat tiga macam citra dalam format BMP, yaitu citra biner, citra
berwarna dan citra hitam-puth (grayscale). Citra biner hanya memiliki dua
nilai keabuan 0 dan 1. Oleh kerena itu 1 bit telah cukup untuk
mempresentasikan nilai piksel. Citra berwarna adalah citra yang lebih umum.
Warna yang terlihat di dalam citra bitmap merupakan kombinasi dari tiga
komponen warna, yaitu : R (Red), G (Green) dan B (Blue). Kombinasi dari
tiga warna RGB tersebut menghasilkan warna yang khas untuk piksel yang
bersangkutan. Pada citra 256 warna, setiap piksel memiliki panjang 8-bit,
akan tetapi komponen RGBnya disimpan dalam tabel RGB yang disebut palet.
Pada tabel 2.5 berikut akan memperlihatkan panjang informasi palet untuk
setiap versi bitmap, masing-masing untuk citra 16 warna, 256 warna dan 16,7
juta warna. Berkas citra 24-bit tidak mempunyai palet RGB, karena langsung
diuraikan ke dalam data bitmap. Informasi palet warna terletak sesudah
header bitmap. Informasi palet warna dinyatakan dalam satu tabel RGB.
Setiap entry pada tabel terdiri atas tiga buah field yaitu, R (Red), G (Green),
dan B (Blue). Data bitmap diletakan sesudah informasi palet.
Format citra 8-bit dapat dilihat pada gambar 2.7. Format citra 4-bit (16
warna), hampir sama dengan format citra 8-bit. Pada citra 4-bit dan citra 8-
bit, warna suatu piksel diacu dari tabel informasi palet entry ke-k (k
merupakan nilai rentang 0-15 untuk citra 16 warna dan 0-155 untuk citra 256
warna). Sebagai contoh pada gambar 2.6, piksel pertama bernilai 2, warna
piksel pertama ini ditentukan oleh komponen RGB pada palet warna entry ke-
2, yaitu R=14, G=13 dan B=16.piksel kedua serupa dengan piksel pertama.
Piksel ketiga bernilai 1, warna ditentukan oleh komponen RGB pada palet
warna entry ke-1, yaitu R=20, G=45 dan B=24. Demikian seterusnya untuk
piksel-piksel lainnya. Khusus untuk citra hitam-putih 8-bit, komponen R,G
dan B suatu piksel bernilai sama dengan data bitmap piksel tersebut. Jadi
piksel dengan nilai data bitmap 129, memiliki nilai R=129, G=129 dan B=129.
Delphi berasal dari bahasa pemrograman yang cukup terkenal, yaitu bahasa
pascal. Bahasa pascal diciptakan pada tahun 1971 oleh ilmuwan dari swiss,
yaitu Niklaus Wirth. Namapascal diambil dari ahli matematika dan filsafat
Perancis, yaitu Blasie Pascal (1623-1622).
Karena pemrograman windows dengan turbo pascal masih dirasa cukup sulit,
maka sejak tahun 1993 Borland International mengembangkan bahasa pascal
yang bersifat visual. Hasil dari pengembangan ini adalah dirilisnya Delphi 1
pada tahun 1995. Perkembangan Delphi tidak berhenti sampai di situ. Pada
tahun berikutnya 1996, Borland International merilis Delphi 2 untuk windows
95/NT. Dan kemudian dalam tahun-tahun berikutnya, Borland International
merilis beberapa versi pengembangan Delphi yang memiliki tambahan fitur
baru dibandingkan dengan versi sebelumnya.
BAB III
Pada bab III ini akan dijelaskan software bisa membaca plat nomor
kendaraan (mobil atau motor). Tujuan dari pembuatan software ini yang
dengan bantuan Delphi 7 dan neural network adalah untuk membaca dan
menterjemahkan dari image plat motor menjadi sebuah karakter. Pada
awalnya pengguna memasukkan input data berupa immage. image masukan
adalah image yang sudah diolah melalui pemfilteran, pengurangan noise dan
cropping image. Sehingga di dapatkan image yang sempurna dengan format
bitmap grayscale karena sistem hanya dibatasi untuk memproses citra bitmap
grayscale.dengan grayscale ini bertujuan agar warna dari ketiga warna yang
ada di jadikan satu warna.
form kali ini sistem akan meminta untuk memasukkan citra dengan format
berkas bitmat grescale, yang kemudian akan dinegasi, setelah itu dicroping
dan yang terahir dilakukan proses get image chars yang hasil akhirnya berupa
sebuah teks atau karakter.
Pada subbab ini akan dijelaskan mengenai desain aplikasi sistem untuk
implementasi output. Desain aplikasi ini meliputi desain data, algoritma yang
digunakan dalam sistem yang digambarkan dengan flowchart dan desain
proses. Desain data berisikan penjelasan data yang diperlukan untuk dapat
menerapkan metode negasi pada citra plat nomor polisi kendaraan bermotor.
Desain data meliputi data masukan, data selama proses dan data keluaran.
Desain proses antara lain menjelaskan tentang proses negasi pada citra plat
nomor polisi kendaraan bermotor, yang selanjutnya dilakuka proses croping
dan yang terakhir yakni proses get image chars yang hasil akhirnya akan
berupa sebuah teks atau karakter dari sebuah citra plat nomor polisi
kendaraan bermotor.
Data yang digunakan untuk implementasi perangkat lunak ini dibagi menjadi
tiga bagian utama, yaitu data masukan, data selama proses dan data keluaran.
1. Data Masukan
Data masukan adalah data yang digunakan selama proses perubahan citra
plat nomor polisi kendaraan bermotor menjadi sebuah teks atau karakter.
Data masukan yang pertama dari pengguna adalah arsip citra yang dipilih
oleh pengguna. Pada sistem ini citra yang dimasukkan berupa arsip citra
grayscale dengan format .bmp. 2. Data Selama Proses
Pada tahapan proses negasi citra, dihasilkn citra yang telah dinegasikan yang
kemudian citra tersebut diproses lagi dengan proses croping dengan tujuan
membuang bagian-bagian yang sudah tidak diperlukan lagi.
Setelah melewati dua proses tersebut maka pada tahapan terakhir dilakukan
proses get image chars yang didalamnya juga terdapat proses penghilangan
nois, kemudian hasil akhir yang didapatkan akan berupa sebuah teks atau
karakter yang didapatkan dari sebuah citra plat nomor polisi kendaraan
bermotor.
3. Data Keluaran
Data keluaran yang dihasilkan dari serngkaian proses diatas adalah berupa
teks atau karakter yang didapatkan dari sebuah citra plat nomor polisi
kendaraan bermotor dengan format font berupa arial.
unit Unit1;
interface
uses
type
TForm1 = class(TForm)
Button1: TButton;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
TabSheet4: TTabSheet;
TabSheet5: TTabSheet;
TabSheet6: TTabSheet;
TabSheet7: TTabSheet;
IOriginal: TImage;
IMerah: TImage;
IHijau: TImage;
IBiru: TImage;
IGC1: TImage;
IGC2: TImage;
IGC3: TImage;
tgyuguhju: TTabSheet;
IGC: TImage;
OpenPictureDialog1: TOpenPictureDialog;
Chart1: TChart;
Series1: TLineSeries;
Chart2: TChart;
Chart3: TChart;
Series2: TLineSeries;
Series3: TLineSeries;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
IHasil: TImage;
Label6: TLabel;
Y: Integer);
Y: Integer);
Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
type
B,G,R,A: Byte;
end;
PRGB32Array = ^TRGB32Array;
var
Form1: TForm1;
implementation
uses Types;
{$R *.dfm}
var
y,x,panjang,lebar : Integer;
LineGC31,LineGC32,LineGC33,LineGC34,LineGC35,LineGC36,LineGC37,Lin
eGC38,LineGC39,LineGC310,LineGC311,LineGC312,LineGC313,
LineOriginal,LineMerah,LineBiru,LineHijau,LineGC1,LineGC2,LineGC3,Line
IGC: PRGB32Array;
jumlahGC1,jumlahGC2,jumlahGC3,K,n:integer;
hajarhitamGC3,hajarputihGC3,lebarhitam,itungan,jumlahGC3sebelumnya:in
teger;
ilang,bener:boolean;
rerataX:real;
kotak:TRect;
HasilBMP:TBitmap;
begin
if (OpenPictureDialog1.Execute)then
begin
IOriginal.Picture.LoadFromFile(OpenPictureDialog1.FileName);
IOriginal.Picture.Bitmap.PixelFormat := pf32bit;
IMerah.Picture.Bitmap.PixelFormat := pf32bit;
IBiru.Picture.Bitmap.PixelFormat := pf32bit;
IHijau.Picture.Bitmap.PixelFormat := pf32bit;
IGC1.Picture.Bitmap.PixelFormat := pf32bit;
IGC2.Picture.Bitmap.PixelFormat := pf32bit;
IGC3.Picture.Bitmap.PixelFormat := pf32bit;
IGC.Picture.Bitmap.PixelFormat := pf32bit;
panjang := IOriginal.Width;
lebar := IOriginal.Height;
IMerah.Picture.Assign(IOriginal.Picture);
IHijau.Picture.Assign(IOriginal.Picture);
IBiru.Picture.Assign(IOriginal.Picture);
IGC1.Picture.Assign(IOriginal.Picture);
IGC2.Picture.Assign(IOriginal.Picture);
IGC3.Picture.Assign(IOriginal.Picture);
IGC.Picture.Assign(IOriginal.Picture);
Series1.Clear;
Series2.Clear;
Series3.Clear;
//menganalisa
begin
LineOriginal := IOriginal.Picture.Bitmap.ScanLine[y];//mengambil
gambar Iorigigal pada Y
LineMerah := IMerah.Picture.Bitmap.ScanLine[y];
LineBiru := IBiru.Picture.Bitmap.ScanLine[y];
LineHijau := IHijau.Picture.Bitmap.ScanLine[y];
LineGC1 := IGC1.Picture.Bitmap.ScanLine[y];
LineGC2 := IGC2.Picture.Bitmap.ScanLine[y];
LineGC3 := IGC3.Picture.Bitmap.ScanLine[y];
LineIGC := IGC.Picture.Bitmap.ScanLine[y];
jumlahGC2:=0;
jumlahGC3:=0;
hajarhitamGC3:=0;
hajarputihGC3:=0;
ilang:=False;
for x := 0 to panjang -1 do
begin
LineMerah[x].G:=0;
LineMerah[x].B:=0;
LineHijau[x].R:=0;
LineHijau[x].B:=0;
LineBiru[x].R:=0;
LineBiru[x].G:=0;
//
if
(LineOriginal[x].R<LineOriginal[x].G)and(LineOriginal[x].G<LineOriginal[x]
.B)and
LineIGC[x].R:=0;
LineIGC[x].G:=0;
LineIGC[x].B:=0;
end
begin
LineIGC[x].R:=255;
LineIGC[x].G:=255;
LineIGC[x].B:=255;
end;
//IGC1
if LineIGC[x].R>180 then//jika pada Line
begin
LineGC1[x].R:=255;
LineGC1[x].G:=255;
LineGC1[x].B:=255;
end;
if LineIGC[x].R<=180 then
begin
LineGC1[x].R:=0;
LineGC1[x].G:=0;
LineGC1[x].B:=0;
end;
//mengetahui grafik
if x>0 then
if (LineGC1[x].R=0)and (LineGC1[x-1].R=255)then
inc(jumlahGC1);
//IGC2
if LineIGC[x].R>125 then
begin
LineGC2[x].R:=255;
LineGC2[x].G:=255;
LineGC2[x].B:=255;
end;
if LineIGC[x].R<=125 then
begin
LineGC2[x].R:=0;
LineGC2[x].G:=0;
LineGC2[x].B:=0;
end;
if x>0 then
inc(jumlahGC2);
//IGC3
LineGC3[x].R:=255;
LineGC3[x].G:=255;
LineGC3[x].B:=255;
if abs(x-hajarhitamGC3)<500 then
begin
begin
LineGC3[K].R:=255;
LineGC3[K].G:=255;
LineGC3[K].B:=255;
end;
end;
if hajarhitamGC3>50 then
begin
begin
LineGC3[K].R:=255;
LineGC3[K].G:=255;
LineGC3[K].B:=255;
end;
end;
hajarputihGC3:=0;
hajarhitamGC3:=0;
//hajartitikGC3:=0;
end;
LineGC3[x].R:=0;
LineGC3[x].G:=0;
LineGC3[x].B:=0;
inc(hajarhitamGC3);
if abs(x-panjang)<2 then
begin
begin
LineGC3[K].R:=255;
LineGC3[K].G:=255;
LineGC3[K].B:=255;
end;
end;
end;
if x>0 then
inc(jumlahGC3);
if hajarhitamGC3>200 then
jumlahGC3:=0 ;
if jumlahGC3>30 then
begin
begin
LineGC3[K].R:=255;
LineGC3[K].G:=255;
LineGC3[K].B:=255;
end;
end;
begin
begin
LineGC3[K+1].R:=255;
LineGC3[K+1].G:=255;
LineGC3[K+1].B:=255;
end;
end;
end;
Series1.AddXY(y,jumlahGC1);
Series2.AddXY(y,jumlahGC2);
end;
y:=0;
n:=0;
rerataX:=0;
//////////////////////////////////////
repeat
begin
LineGC3 := IGC3.Picture.Bitmap.ScanLine[y];
LineGC31 := IGC3.Picture.Bitmap.ScanLine[y+1];
LineGC32 := IGC3.Picture.Bitmap.ScanLine[y+2];
LineGC33 := IGC3.Picture.Bitmap.ScanLine[y+3];
LineGC34 := IGC3.Picture.Bitmap.ScanLine[y+4];
LineGC35 := IGC3.Picture.Bitmap.ScanLine[y+5];
LineGC36 := IGC3.Picture.Bitmap.ScanLine[y+6];
LineGC37 := IGC3.Picture.Bitmap.ScanLine[y+7];
LineGC38 := IGC3.Picture.Bitmap.ScanLine[y+8];
LineGC39 := IGC3.Picture.Bitmap.ScanLine[y+9];
LineGC310 := IGC3.Picture.Bitmap.ScanLine[y+10];
LineGC311 := IGC3.Picture.Bitmap.ScanLine[y+11];
LineGC312 := IGC3.Picture.Bitmap.ScanLine[y+12];
LineGC313 := IGC3.Picture.Bitmap.ScanLine[y+13];
bener:=false;
itungan:=0;
for x := 0 to panjang-1 do
begin
begin
LineGC31[x].R:=255;
LineGC31[x].G:=255;
LineGC31[x].B:=255;
end;
if (x<150) or (x>290)then
begin
LineGC31[x].R:=255;
LineGC32[x].R:=255;
LineGC33[x].R:=255;
LineGC34[x].R:=255;
LineGC35[x].R:=255;
LineGC36[x].R:=255;
LineGC37[x].R:=255;
LineGC38[x].R:=255;
LineGC39[x].R:=255;
LineGC310[x].R:=255;
LineGC311[x].R:=255;
LineGC312[x].R:=255;
///////////////////
LineGC31[x].G:=255;
LineGC32[x].G:=255;
LineGC33[x].G:=255;
LineGC34[x].G:=255;
LineGC35[x].G:=255;
&n