• Tidak ada hasil yang ditemukan

Pembuatan Aplikasi Penipisan Citra Tulisan Dengan Metoda Hilditch.

N/A
N/A
Protected

Academic year: 2017

Membagikan "Pembuatan Aplikasi Penipisan Citra Tulisan Dengan Metoda Hilditch."

Copied!
27
0
0

Teks penuh

(1)

i

Universitas Kristen Maranatha ABSTRAK

Dewasa ini era modernisasi berkembang cukup pesat. Hal ini membuat orang – orang yang ahli di bidang elektronika berlomba – lomba membuat alat yang dapat memudahkan pekerjaan manusia. Salah satunya adalah mesin pencatat plat nomor otomatis. Namun seringkali terjadi kendala tidak terbacanya tulisan oleh jaringan saraf tiruan (JST) karena tulisan yang terlalu tebal.

(2)

ii

Universitas Kristen Maranatha ABSTRACT

Today's era of modernization developed rapidly. This made peoples who experts in the field of electronics race to make a tool that can facilitate the work of man. One of it is the automatic plate number recording machine. But the problem is often the artificial neural network did not recognize the letters because the size of the letters is too thick.

(3)

v

(4)

vi

Universitas Kristen Maranatha

3.2 Flowchart keseluruhan ... 18

3.3 Tampilan awal dan komponen yang digunakan ... 20

3.4 Coding untuk open file ... 21

3.5 Coding untuk save as ... 21

3.6 Coding untuk animate ... 22

3.7 Coding untuk button1 thin ... 22

3.8 Coding untuk button2 undo ... 23

3.9 Coding untuk struktur ketetanggaan ... 24

3.10 Coding untuk penipisan citra ... 24

BAB 4 PENGUJIAN DAN ANALISIS 4.1 Proses penipisan citra ... 30

4.1.1 Tampilan awal ... 30

4.1.2 Data pengamatan penipisan angka ... 31

4.1.3 Data pengamatan penipisan huruf ... 32

4.1.4 Data pengamatan penipisan tulisan ... 34

4.1.5 Data pengamatan penipisan huruf asing ... 35

4.1.6 Contoh penipisan citra perlangkah ... 39

4.2 Data kuesioner untuk pembacaan huruf cina dan arab ... 40

BAB 5 KESIMPULAN DAN SARAN 5.1 Kesimpulan ... 42

5.2 Saran ... 42

(5)

vii

Universitas Kristen Maranatha

DAFTAR GAMBAR

Halaman

Gambar 2.1 Representasi citra biner ... 4

Gambar 2.2 matriks ketetanggaan ... 8

Gambar 2.3 B(p1)=2 , A(p1)=1 ... 9

Gambar 2.14 garis vertical sebesar 2 piksel ... 14

Gambar 2.15 A(p4)!=1 ... 14

Gambar 2.16 p2.p4.p6=0 ... 14

Gambar 2.17 p2.p4.p6!=0 dan A(p4)=1... 15

Gambar 2.18 Garis horizontal sebesar 2 pixel. ... 15

Gambar 3.1 Diagram blok ... 17

Gambar 4.4 hasil penipisan tulisan ... 35

(6)

viii

Universitas Kristen Maranatha

Gambar 4.6 hasil penipisan huruf cina... 36

Gambar 4.7 hasil penipisan huruf arab ... 36

Gambar 4.8 hasil penipisan kaligrafi tulisan arab ... 37

Gambar 4.9 hasil penipisan huruf ibrani ... 38

Gambar 4.10 hasil penipisan huruf ibrani ... 38

(7)

ix

Universitas Kristen Maranatha

DAFTAR TABEL

Halaman

Tabel 4.1 tabel kuesioner pembacaan huruf cina ... 40

(8)

A-1 LAMPIRAN A CODING PROGRAM

unit Thinning;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Menus, ExtCtrls, ExtDlgs, StdCtrls;

type

TRGBTripleArray = array[0..1000] of RGBTriple;

PRGBTripleArray = ^TRGBTripleArray;

TPoints = array of TPoint;

TForm1 = class(TForm)

OpenPictureDialog1: TOpenPictureDialog;

SavePictureDialog1: TSavePictureDialog;

Image1: TImage;

MainMenu1: TMainMenu;

File1: TMenuItem;

Open1: TMenuItem;

SaveAs1: TMenuItem;

N1: TMenuItem;

Animate1: TMenuItem;

(9)

A-2

Exit1: TMenuItem;

Button1: TButton;

Button2: TButton;

Image2: TImage;

StaticText1: TStaticText;

StaticText2: TStaticText;

procedure Open1Click(Sender: TObject);

procedure SaveAs1Click(Sender: TObject);

procedure Animate1Click(Sender: TObject);

procedure Exit1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure Skeletonize(var Points : TPoints ;

ALebar, ATinggi : integer);

procedure SkeletonizeAnimate(var Points : TPoints ;

ALebar, ATinggi : integer);

function Tetangga(ATetangga : byte) : TPoint;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

UndoBitmap : TBitmap;

public

{ Public declarations }

(10)

A-3

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

begin

UndoBitmap := TBitmap.Create;

UndoBitmap.PixelFormat := pf24bit;

end;

procedure TForm1.Open1Click(Sender: TObject);

begin

if not OpenPictureDialog1.Execute then Exit;

Image1.Picture.Bitmap.LoadFromFile(OpenPictureDialog1.FileName);

Image1.Picture.Bitmap.PixelFormat := pf24bit;

Image1.AutoSize := True;

Image2.Picture.Bitmap.LoadFromFile(OpenPictureDialog1.FileName);

Image2.Picture.Bitmap.PixelFormat := pf24bit;

Image2.AutoSize := True;

Button1.Enabled := true;

(11)

A-4

procedure TForm1.SaveAs1Click(Sender: TObject);

begin

if not SavePictureDialog1.Execute then Exit;

Image1.Picture.Bitmap.SaveToFile(SavePictureDialog1.FileName);

Image1.Picture.Bitmap.PixelFormat := pf24bit;

end;

procedure TForm1.Animate1Click(Sender: TObject);

begin

Animate1.Checked := not Animate1.Checked;

end;

procedure TForm1.Exit1Click(Sender: TObject);

begin

Close;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

Image1.Canvas.Draw(0, 0, UndoBitmap);

Button2.Enabled := False;

Button1.Enabled := True;

end;

(12)

A-5

begin

ATetangga := (ATetangga - 2 ) mod 8 + 2; // struktur ketetanggaan

Case ATetangga of

1 : begin Result.X := 0; Result.Y := 0; end; //

2 : begin Result.X := 0; Result.Y := -1; end; //

3 : begin Result.X := 1; Result.Y := -1; end; // |

4 : begin Result.X := 1; Result.Y := 0; end; //

5 : begin Result.X := 1; Result.Y := 1; end; //

6 : begin Result.X := 0; Result.Y := 1; end; //

7 : begin Result.X := -1; Result.Y := 1; end; //

8 : begin Result.X := -1; Result.Y := 0; end; //

9 : begin Result.X := -1; Result.Y := -1; end; //

end;

end;

procedure TForm1.Skeletonize(var Points : TPoints ;

ALebar, ATinggi : integer);

Var

Lx, Ly, index : integer;

B, A, N, AN2, AN4 : byte;

NOff : TPoint;

Ubah : boolean;

Hapus : array of boolean;

Image : array of array of byte;

(13)

A-6

// gambar diperbesar untuk tinggi dan lebarnya sebesar 2 pixel untuk

// menghindari access violation pada program

SetLength(Image, ALebar+2); // membuat array sebesar image

for Lx := 0 to ALebar + 1 do begin

SetLength(Image[Lx], ATinggi+2);

for Ly := 0 to ATinggi + 1 do begin

Image[Lx,Ly] := 0;

end;

end;

for index := 0 to High(Points) do

Image[Points[index].X+1][Points[index].Y+1] := 1; // array 2 dimensi diisi oleh Points dari image dengan nilai bit 1

SetLength(Hapus, length(Points)); // membuat array dengan nama Hapus panjangnya disesuaikan dengan image

Ubah := true; // memulai perubahan citra

while Ubah do begin // memulai loop untuk perubahan dan berhenti apabila sudah tidak ada perubahan

Ubah := false;

// loop melalui seluruh citra biner

for index := 0 to High(Points) do begin

(14)

A-7

Lx := Points[index].X +1; //dari array yang telah di isi point dari image, X dan Y dideklarasikan pointnya +1

Ly := Points[index].Y +1;

// kriteria 1

// menghitung B

// B adalah jumlah tetangga yang bernilai bit 1

B := 0;

for N := 2 to 9 do begin

NOff := Tetangga(N);

Inc(B, Image[Lx+NOff.X][Ly+NOff.Y]); // B di increment sebanyak jumlah tetangga yang bernilai bit 1

end;

if (B < 2) or (B > 6) then Continue; // jika B bernilai 2 sampai 6 maka lanjutkan

// kriteria 2

// menghitung A

// A adalah jumlah transisi bit 0->1 hanya boleh berjumlah 1 [A(p1)=1]

A := 0;

for N := 2 to 9 do begin

NOff := Tetangga(N);

if Image[Lx+NOff.X][Ly+NOff.Y] = 0 then begin

(15)

A-8

if Image[Lx+NOff.X][Ly+NOff.Y] = 1 then Inc(A);

end;

if A > 1 then Break; // bila A sudah melebihi 1 maka (p) tersebut tidak melanjutkan program ke kriteria selanjutnya

end;

if A <> 1 then Continue; // bila A sama dengan dengan 1 maka lanjut ke kriteria berikutnya

// kriteria 3

// Menghitung nilai A untuk p2

AN2 := 0;

for N := 2 to 9 do begin

NOff := Tetangga(N);

if Image[Lx+NOff.X][Ly+NOff.Y-1] = 0 then begin

NOff := Tetangga(N+1);

if Image[Lx+NOff.X][Ly+NOff.Y-1] = 1 then Inc(AN2);

end;

end;

if (Image[Lx][Ly-1] * Image[Lx+1][Ly] * Image[Lx-1][Ly]=0) or // p2.p4.p8 = 0 atau p2 != 1

(AN2 <> 1) then Continue;

// kriteria 4

(16)

A-9

AN4 := 0;

for N := 2 to 9 do begin

NOff := Tetangga(N);

if Image[Lx+NOff.X+1][Ly+NOff.Y] = 0 then begin

NOff := Tetangga(N+1);

if Image[Lx+NOff.X+1][Ly+NOff.Y] = 1 then Inc(AN4);

end;

end;

if (Image[Lx][Ly-1] * Image[Lx+1][Ly] * Image[Lx][Ly+1] = 0) or // p2.p4.p6 = 0 atau p4 != 1

(AN4 <> 1) then begin

Hapus[index] := True;

Ubah := True;

end;

end;

// menghapus point yang telah diberi tanda pada array hapus

if Ubah then begin

index := 0;

while index < length(Points) do begin

if Hapus[index] then begin

// penghapusan array Hapus yang sudah diberi tanda

(17)

A-10

SetLength(Hapus, High(Hapus));

Points[index] := Points[High(Points)];

SetLength(Points, High(Points));

Image[Points[index].X+1][Points[index].Y+1] := 0;

end

else Inc(index);

end;

end;

end;

end;

// program penganimasian

procedure TForm1.SkeletonizeAnimate(var Points : TPoints ;

ALebar, ATinggi : integer);

Var

Lx, Ly, index : integer;

B, A, N, AN2, AN4 : byte;

NOff : TPoint;

Ubah : boolean;

Hapus : array of boolean;

Image : array of array of byte;

begin

SetLength(Image, ALebar+2);

for Lx := 0 to ALebar + 1 do begin

(18)

A-11

for Ly := 0 to ATinggi + 1 do begin

Image[Lx][Ly] := 0;

end;

end;

for index := 0 to High(Points) do

Image[Points[index].X+1][Points[index].Y+1] := 1;

SetLength(Hapus, length(Points));

Ubah := true;

while Ubah do begin

Ubah := false;

for index := 0 to High(Points) do begin

Hapus[index] := False;

Lx := Points[index].X +1;

Ly := Points[index].Y +1;

B := 0;

for N := 2 to 9 do begin

NOff := Tetangga(N);

Inc(B, Image[Lx+NOff.X][Ly+NOff.Y]);

(19)

A-12

if (B < 2) or (B > 6) then Continue;

A := 0;

for N := 2 to 9 do begin

NOff := Tetangga(N);

if Image[Lx+NOff.X][Ly+NOff.Y] = 0 then begin

NOff := Tetangga(N+1);

if Image[Lx+NOff.X][Ly+NOff.Y] = 1 then Inc(A);

end;

if A > 1 then Break;

end;

if A <> 1 then Continue;

AN2 := 0;

for N := 2 to 9 do begin

NOff := Tetangga(N);

if Image[Lx+NOff.X][Ly+NOff.Y+1] = 0 then begin

NOff := Tetangga(N+1);

if Image[Lx+NOff.X][Ly+NOff.Y+1] = 1 then Inc(AN2);

end;

end;

(20)

A-13

(AN2 = 1) then Continue;

AN4 := 0;

for N := 2 to 9 do begin

NOff := Tetangga(N);

if Image[Lx+NOff.X+1][Ly+NOff.Y] = 0 then begin

NOff := Tetangga(N+1);

if Image[Lx+NOff.X+1][Ly+NOff.Y] = 1 then Inc(AN4);

end;

end;

if (Image[Lx][Ly-1] * Image[Lx+1][Ly] * Image[Lx][Ly+1] = 0) or

(AN4 <> 1) then begin

Hapus[index] := True;

Ubah := True;

end;

end;

if Ubah then begin

index := 0;

while index < length(Points) do begin

if Hapus[index] then begin

(21)

A-14

Points[index] := Points[High(Points)];

SetLength(Points, High(Points));

Hapus[index] := Hapus[High(Hapus)];

SetLength(Hapus, High(Hapus));

end

else Inc(index);

end;

end;

Image1.Canvas.FillRect(Image1.ClientRect);

for Ly := 0 to High(Points) do begin

Image1.Canvas.Pixels[Points[Ly].X, Points[Ly].Y] := clblack;

end;

Image1.Refresh;

Sleep(200);

end;

end;

procedure TForm1.Button1Click(Sender: TObject);

var

Scan : PRGBTripleArray;

Lx, Ly : integer;

Points : TPoints;

(22)

A-15

UndoBitmap.Lebar := Image1.Lebar;

UndoBitmap.Tinggi := Image1.Tinggi;

UndoBitmap.Canvas.Draw(0, 0, Image1.Picture.Bitmap);

Button2.Enabled := True;

Button1.Enabled := False;

//mengambil array Points dari image

SetLength(Points, 0);

for Ly := 0 to Image1.Tinggi -1 do begin

Scan := Image1.Picture.Bitmap.ScanLine[Ly];

for Lx := 0 to Image1.Lebar -1 do begin

if Scan[Lx].rgbtgreen = 0 then begin

SetLength(Points, length(Points)+1 );

Points[High(Points)] := Point(Lx, Ly);

end;

end;

end;

if Animate1.Checked then

SkeletonizeAnimate(Points, Image1.Lebar, Image1.Tinggi) else

Skeletonize(Points, Image1.Lebar, Image1.Tinggi);

Image1.Canvas.FillRect(Image1.ClientRect);

for Lx := 0 to High(Points) do begin

(23)

A-16

end;

end;

(24)

1

Universitas Kristen Maranatha

BAB I

PENDAHULUAN

1.1 Latar Belakang

Seiring dengan perkembangan zaman yang semakin pesat, kebutuhan

akan efektifitas dan efisiensi sangat diutamakan dalam berbagai bidang. Hal

tersebut telah mendorong manusia untuk semakin berkreasi dan berinovasi

dalam bidang teknologi untuk dapat melakukan berbagai pekerjaan secara

otomatis.

Salah satu contoh pekerjaan tersebut adalah pencatatan plat nomor

secara otomatis. Dalam sistem ini terdapat 3 tahapan dalam pengerjaannya

yaitu penangkapan citra plat nomor oleh kamera, pemrosesan citra tersebut,

dan pembacaan oleh jaringan saraf tiruan.

Namun pada proses pembacaan oleh jaringan saraf tiruan seringkali

terjadi kesalahan dalam pembacaannya karena huruf dan angka pada plat

nomor tersebut terlalu tebal. Oleh karena itulah dipilih sebuah topik dengan

judul PEMBUATAN APLIKASI PENIPISAN CITRA TULISAN DENGAN

METODA HILDITCH sebagai topik tugas akhir.

1.2Rumusan Masalah

Berdasarkan latar belakang tersebut maka dirumuskanlah sebuah

permasalahan yang ada yaitu :

 Bagaimana pembuatan aplikasi penipisan citra tulisan dengan metoda

hilditch ?

1.3 Tujuan

 Tujuan dari tugas akhir ini adalah membuat aplikasi penipisan citra tulisan

(25)

2

Universitas Kristen Maranatha 1.4 Pembatasan Masalah

Pembatasan masalah dalam Tugas Akhir ini meliputi:

 Menggunakan program Delphi 7 untuk membuat software penipisan citra.

 Citra tulisan yang ditipiskan menggunakan algoritma Hilditch.

 Jenis font terbatas pada font yang tidak menggunakan tipografi yang rumit.

 Ekstensi file yang dapat digunakan hanya .BMP ( bitmap )

1.5 Sistematika Penulisan

Sistematika penulisan laporan ini disusun menjadi lima bab, yaitu

sebagai berikut:

BAB 1 : PENDAHULUAN

Bab ini membahas tentang latar belakang, perumusan masalah,

tujuan, pembatasan masalah, dan sistematika penulisan.

BAB 2 : LANDASAN TEORI

Bab ini membahas tentang dasar – dasar teori yang digunakan dalam

pembuatan dan perancangan tugas akhir ini.

BAB 3 : PERANCANGAN & PEMODELAN

Bab ini membahas tentang perancangan pada pembuatan aplikasi

penipisan citra tulisan dengan metoda Hilditch. Mulai dari

komponen – komponen yang digunakan dan program instruksi yang

digunakan.

BAB 4 : PEMBAHASAN MASALAH

Bab ini membahas tentang analisis dan pengujian keluaran –

keluaran dari aplikasi penipisan citra tulisan yang berupa huruf dan

angka yang telah ditipiskan.

BAB 5 : KESIMPULAN DAN SARAN

Bab ini membahas tentang kesimpulan yang diperoleh setelah

melaksanakan tugas akhir beserta masukan dan saran yang dapat

(26)

42

Universitas Kristen Maranatha

BAB V

KESIMPULAN DAN SARAN

Bab ini berisi kesimpulan dari Tugas Akhir dan saran-saran yang perlu

dilakukan untuk perbaikan yang akan dilakukan pada masa yang akan datang.

5.1 Kesimpulan

Kesimpulan yang didapat dari pembuatan aplikasi penipisan citra

tulisan dengan metoda hilditch adalah sebagai berikut :

1. Pembuatan aplikasi penipisan citra tulisan dengan metoda hilditch

sudah berhasil dibuat

2. Sering terjadi kendala karena citra bitmap yang didapat tidak

sempurna

3. Perlu adanya suatu program pendukung seperti noise removal atau

sharpning mask agar citra bitmap yang akan diproses dapat

ditipiskan dengan sempurna.

5.2 Saran

Saran untuk program aplikasi penipisan citra tulisan dengam

metoda hilditch adalah sebagai berikut :

1. Untuk perkembangan ke depannya aplikasi ini sebaiknya dapat

lebih baik lagi.

2. Dalam hal interface tampilannya dapat dibuat lebih menarik lagi.

3. Dapat ditambahkan fitur-fitur tambahan lainnya contohnya seperti

pengkonversian citra .JPEG ke citra .BITMAP, dan juga

(27)

43

Universitas Kristen Maranatha

DAFTAR PUSTAKA

 Benley, Jon Louis, 1999, “Programming Pearls 2ndedition”

 C Y Suen, dan P S P Wang. 1994. Thinning Methodologies for Pattern

recognition USA: World Scientific Publishing Co.Pte.Ltd.

 Jason Rupard. “Skeletonization (part 1)”.

http://www.rupj.net/portfolio/docs/skeletonization.pdf. Diakses tanggal 7

september 2012.

 H.E.Burdick, dan Mc Graw Hill. 1997. Morphological Operations.

Http://ppsc.pme.nthu.edu.tw/.../Chapter%209%20Morphological%20operatio

ns.pdf. Diakses tanggal 7 september 2012

 S, Riyanto dkk. 2005. Step by Step Pengolahan Citra Digital. Yogyakarta:

Andi.

 Supardi, Y. 2000. Pascal dan Flowchart lewat Praktek. Jakarta:Dinastindo.

http://id.wikipedia.org/wiki/Citra, November 2012

http://id.wikipedia.org/wiki/Borland_Delphi, November 2012

http://en.wikipedia.org/wiki/Digital_image, November 2012

http://en.wikipedia.org/wiki/Image_processing, November 2012

Referensi

Dokumen terkait

Berita keras atau hard news adalah segala informasi penting dan menarik yang harus segera disiarkan oleh media penyiaran karenan sifatnya yang harus segera

Dalam proses pembelajaran, siswa selalu diberikan apersepsi tentang materi yang akan disampaikan, (1) siswa disuruh mengamati puisi yang diberikan kemudian menukarkan

mencari tahu dan mencari referensi untuk menentukan tema dan judul yang akan diambil untuk skripsi mereka. Tapi ketika buku dan utamanya laporan skripsi yang sudah

Berdasarkan kondisi dan permasalahan yang ada di Kabupaten Gunungkidul tersebut, peneliti tertarik untuk melakukan penelitian menganai faktor-faktor yang mempengaruhi minat

Alasan utama dipakai beton ready mix adalah mutu beton yang dihasilkan lebih sesuai dengan mutu beton yang telah direncanakan, sehingga lebih mendekati dari hasil hitungan,

Sistem dapat membangkitkan telaah kesalahan tanda baca berdasarkan kesalahan yang dideteksi dari karya ilmiah serta penggunaan algoritma pencarian kata (dalam kasus

Telah dilakukan juga ekperimen terhadap alat RFB yang menggunakan sudu-sudu pada distributornya.Untuk pelaksanaan eksperimen ini pertama kali motor diesel akan di uji

[r]