DASAR TEORI HIGH PASS FILTER PROGRAM HIGHT PASS FILTER SELENGKAPNYA ADALAH SEBAGAI

10. Tambahkan button ke form, dengan cara pilih menu standart, button, lalu klik

ke form Gambar 12.10 Menu Button 11. Pada oject inspector rubah properti captionnya dengan nama Open, kemudian namenya dengan nama btOpen. Gambar 12.11 Button Open 12. Tambahkan OpenPictureDialog ke form, dengan cara pilih menu dialog, OpenPictureDialog, lalu klik ke form. Gambar 12.12 Menu OpenPictureDialog 13. Hasilnya sebagai berikut. Gambar 12.13 Hasil OpenPictureDialog

14. Doble klik button open kemudian ketik program yang di hurup tebal berikut.

var FormHighPassFilter: TFormHighPassFilter; FileNameImg: string; implementation {R .dfm} procedure TFormHighPassFilter.btOpenClickSender: TObject; begin if OpenPictureDialog1.Execute then begin FileNameImg := OpenPictureDialog1.FileName; Caption := HighPassFilter : + OpenPictureDialog1.FileName; Image1.Picture.LoadFromFile OpenPictureDialog1.FileName; Image2.Visible := False; end; end; 15. Tambahkan button pada form, pada object inspector rubah properties captionnya dengan nama High Pass Filter dan Namenya dengan nama btHighPassFilter. Gambar 12.14 Button High Pass filter

16. Tambahkan unit baru, dengan cara file, new unit.

Gambar 12.15 New Unit

17. Simpan unitnya dengan cara save as.

Gambar 12.16 Save As

18. Beri nama unitnya dengan nama UnitImageProses.

Gambar 12.17 Save UnitImageProses 19. Hasilnya sebagai berikut. Gambar 12.18 Hasil UnitImageProses

20. Ketik program berikut ke dalam UnitImageProses.

unit UnitImageProses; interface uses WINPROCS, Graphics, ExtCtrls, ComCtrls, Variants; type TFreqHist = array [0..255] of longint; TMatrixFilter = array [1..16,1..16] of real; function RgbToGray Clr:TColor : byte; function ImgGetGray var Image:TImage; x,y:integer : byte; procedure ImgConvertToGrayscale var Image1:TImage; var ProgressBar1: TProgressBar; implementation const PercentR = 0.299; PercentG = 0.587; PercentB = 0.114; function ByteRange r:double : byte; begin if r0 then ByteRange:=0 else if r255 then ByteRange:=255 else ByteRange:=Roundr; end; function RgbToGray Clr:TColor : byte; var r,g,b:byte; begin r := GetRValueClr; g := GetGValueClr; b := GetBValueClr; RgbToGray := ByteRange rPercentR + gPercentG + bPercentB; end; function ImgGetGray var Image:TImage; x,y:integer : byte; begin Result := RgbToGray Image.Canvas.Pixels[x,y]; end; procedure ImgConvertToGrayscale var Image1:TImage; var ProgressBar1: TProgressBar; var x,y:integer; ClrGray:byte; begin ProgressBar1.Max := Image1.Width-1; ProgressBar1.Position := 0; for x:=0 to Image1.Width-1 do begin for y:=0 to Image1.Height-1 do begin ClrGray := ImgGetGray Image1,x,y; Image1.Canvas.Pixels[x,y] := RGB ClrGray,ClrGray,ClrGray; end; Image1.Repaint; end; end; end.

21. Kembali ke FormHighPassFilter, caranya klik UnitHighPassFilter

Gambar 12.19 Kembali ke FormHighPassFilter

22. Lalu klik toggle form.

Gambar 12.20 Toggle

23. Doble klik button High Pass Filter

Gambar 12.21 Klik Button High Pass Filter 24. Lalu ketik program yang huruf tebal berikut procedure TFormHighPassFilter.btHigPassFilterClickSender: TObject; begin Image2.Visible := True; Image2.Picture.Graphic := Image1.Picture.Graphic; HighPassFilter; end;

25. Di bawah private tulis program tertulis huruf tebal berikut:

private procedure HighPassFilter; 26. Dibawah procedure TFormHighPassFilter.btHighPassFilterClick Sender. Tobject ketik program tertulis hurup tebal berikut: procedure TFormHighPassFilter.btHighPassFilterClickSender: TObject; begin Image2.Visible := True; Image2.Picture.Graphic := Image1.Picture.Graphic; HighPassFilter; end; procedure TFormHighPassFilter.HighPassFilter; const HighPassFilter : array[0..1,0..2,0..2] of smallint= -1,-1,-1,-1,8,-1,-1,-1,-1, 0,0,0,0,0,0,0,0,0; var row:array[0..8] of pbytearray; col:pbytearray; x,y:smallint; i,j,k,p:smallint; image:tbitmap; sum,jum:longint; begin p:=-120; image:=Tbitmap.Create; image.AssignImage1.Picture.Bitmap; for y:=1 to Image1.Height-2 do begin for i:=-1 to 1 do row[i+1]:=image.ScanLine[y+i]; col:=Image1.Picture.Bitmap.ScanLine[y]; x:=3; repeat sum:=0; for i:=-1 to 1 do for j:=-1 to 1 do sum:=sum+HighPassFilter[0,i+1,j+1]row[i+1,x+j3]; jum:=0; for i:=-1 to 1 do for j:=-1 to 1 do jum:=jum+HighPassFilter[1,i+1,j+1]row[i+1,x+j3]; sum:=sum+jum+p; if sum255 then sum:=255; if sum0 then sum:=0; for k:=0 to 2 do col[x+k]:=sum; incx,3; until x=3Image1.Width-4; end; Image2.picture.bitmap:=Image1.Picture.Bitmap; image.free; end;

27. Di bawah implementasi ketik program yang tertulis huruf tebal berikut.

implementation {R .dfm} uses UnitImageProses; 28. Tambahkan button ke form, lalu pada object inspector rubah properties captionnya dengan nama Exit dan namenya dengan nama btExit. Gambar 12.22 Button Exit

29. Doble klik button Exit, lalu ketik program berikut.

procedure TFormHighPassFilter.btExitClickSender: TObject; begin FormHighPassFilter.Close; end;

30. Simpan program dengan cara save all.

31. Compiler progran dengan cara pilih menu Project, Compile ProjectHighPassFilter. Gambar 12.23 Compiler ProjectHighPassFilter 32. Lalu jalankan progran dengan cara pilih menu Run, Run. Gambar 12.24 Menu Run 33. Hasil sebagai berikut. Gambar 12.25 Hasil Mammografi Gambar 12.26 Hasil Photo

34. Keluar dari program klik button Exit.

12.3 PROGRAM HIGHT PASS FILTER SELENGKAPNYA ADALAH SEBAGAI

BERIKUT: unit UnitHighPassFilter; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtDlgs, StdCtrls, ExtCtrls; type TFormHighPassFilter = classTForm Image1: TImage; Image2: TImage; btOpen: TButton; OpenPictureDialog1: TOpenPictureDialog; btHigPassFilter: TButton; btExit: TButton; procedure btOpenClickSender: TObject; procedure btHigPassFilterClickSender: TObject; procedure btExitClickSender: TObject; private procedure HighPassFilter; public { Public declarations } end; var FormHighPassFilter: TFormHighPassFilter; FileNameImg: string; implementation {R .dfm} uses UnitImageProses; procedure TFormHighPassFilter.btOpenClickSender: TObject; begin if OpenPictureDialog1.Execute then begin FileNameImg := OpenPictureDialog1.FileName; Caption := HighPassFilter : + OpenPictureDialog1.FileName; Image1.Picture.LoadFromFile OpenPictureDialog1.FileName; Image2.Visible := False; end; end; procedure TFormHighPassFilter.btHigPassFilterClickSender: TObject; begin Image2.Visible := True; Image2.Picture.Graphic := Image1.Picture.Graphic; HighPassFilter; end; procedure TFormHighPassFilter.HighPassFilter; const HighPassFilter : array[0..1,0..2,0..2] of smallint= -1,-1,-1,-1,8,-1,-1,-1,-1, 0,0,0,0,0,0,0,0,0; var row:array[0..8] of pbytearray; col:pbytearray; x,y:smallint; i,j,k,p:smallint; image:tbitmap; sum,jum:longint; begin p:=-120; image:=Tbitmap.Create; image.AssignImage1.Picture.Bitmap; for y:=1 to Image1.Height-2 do begin for i:=-1 to 1 do row[i+1]:=image.ScanLine[y+i]; col:=Image1.Picture.Bitmap.ScanLine[y]; x:=3; repeat sum:=0; for i:=-1 to 1 do for j:=-1 to 1 do sum:=sum+HighPassFilter[0,i+1,j+1]row[i+1,x+j3]; jum:=0; for i:=-1 to 1 do for j:=-1 to 1 do jum:=jum+HighPassFilter[1,i+1,j+1]row[i+1,x+j3]; sum:=sum+jum+p; if sum255 then sum:=255; if sum0 then sum:=0; for k:=0 to 2 do col[x+k]:=sum; incx,3; until x=3Image1.Width-4; end; Image2.picture.bitmap:=Image1.Picture.Bitmap; image.free; end; procedure TFormHighPassFilter.btExitClickSender: TObject; begin FormHighPassFilter.Close; end; end. unit UnitImageProses; interface uses WINPROCS, Graphics, ExtCtrls, ComCtrls, Variants; type TFreqHist = array [0..255] of longint; TMatrixFilter = array [1..16,1..16] of real; function RgbToGray Clr:TColor : byte; function ImgGetGray var Image:TImage; x,y:integer : byte; procedure ImgConvertToGrayscale var Image1:TImage; var ProgressBar1: TProgressBar; implementation const PercentR = 0.299; PercentG = 0.587; PercentB = 0.114; function ByteRange r:double : byte; begin if r0 then ByteRange:=0 else if r255 then ByteRange:=255 else ByteRange:=Roundr; end; function RgbToGray Clr:TColor : byte; var r,g,b:byte; begin r := GetRValueClr; g := GetGValueClr; b := GetBValueClr; RgbToGray := ByteRange rPercentR + gPercentG + bPercentB; end; function ImgGetGray var Image:TImage; x,y:integer : byte; begin Result := RgbToGray Image.Canvas.Pixels[x,y]; end; procedure ImgConvertToGrayscale var Image1:TImage; var ProgressBar1: TProgressBar; var x,y:integer; ClrGray:byte; begin ProgressBar1.Max := Image1.Width-1; ProgressBar1.Position := 0; for x:=0 to Image1.Width-1 do begin for y:=0 to Image1.Height-1 do begin ClrGray := ImgGetGray Image1,x,y; Image1.Canvas.Pixels[x,y] := RGB ClrGray,ClrGray,ClrGray; end; Image1.Repaint; end; end; end.

BAB 13 K-MEANS

13.1 Algoritma K-Means

K-Means merupakan metode klasterisasi yang paling terkenal dan banyak digunakan di berbagai bidang karena sederhana, mudah diimplementasikan, memiliki kemampuan untuk mengklaster data yang besar, mampu menangani data outlier, dan kompleksitas waktunya linear OnKT dengan n adalah jumlah dokumen, K adalah jumlah kluster, dan T adalah jumlah iterasi. K-means merupakan metode pengklasteran secara partitioning yang memisahkan data ke dalam kelompok yang berbeda. Dengan partitioning secara iteratif, K-Means mampu meminimalkan rata- rata jarak setiap data ke klasternya. Metode ini dikembangkan oleh Mac Queen pada tahun 1967. Dasar algoritma K-means adalah sebagai berikut : 1. Tentukan nilai k sebagai jumlah klaster yang ingin dibentuk. 2. Bangkitkan k centroid titik pusat klaster awal secara random. 3. Hitung jarak setiap data ke masing-masing centroid menggunakan rumus korelasi antar dua objek yaitu Euclidean Distance dan kesamaan Cosine. 4. Kelompokkan setiap data berdasarkan jarak terdekat antara data dengan centroidnya. 5. Tentukan posisi centroid baru k C dengan cara menghitung nilai rata-rata dari data-data yang ada pada centroid yang sama. ………………………..………………………………………………….13.1 Dimana k n adalah jumlah dokumen dalam cluster k dan i d adalah dokumen dalam cluster k. 6. Kembali ke langkah 3 jika posisi centroid baru dengan centroid lama tidak sama. Adapun karakteristik dari algoritma K-Means salah satunya adalah sangat sensitif dalam penentuan titik pusat awal klaster karena K-Means membangkitkan titik pusat klaster awal secara random. Pada saat pembangkitan awal titik pusat yang random tersebut mendekati solusi akhir pusat klaster, K-Means mempunyai posibilitas yang tinggi untuk menemukan titik pusat klaster yang tepat. Sebaliknya, jika awal titik pusat tersebut jauh dari solusi akhir pusat klaster, maka besar kemungkinan ini menyebabkan hasil pengklasteran yang tidak tepat. Akibatnya K-Means tidak menjamin hasil pengklasteran yang unik. Inilah yang menyebabkan metode K-Means sulit untuk mencapai optimum global, akan tetapi hanya minimum lokal. Selain itu, algoritma K-Means hanya bisa digunakan untuk data yang atributnya bernilai numeric. Cara kerja K- Mean. Masukan jumlah kluster : K = 2. Tentukan pusat kluster awal secara acak. Contoh : C1 x1, y1, nilai piksel , C2 x2, y2, nilai piksel C1 = 1,1,2 dan C2 = 2,3,5 1 2 1 2 2 3 1 3 2 5 4 4 6 5 1 3 Langkah 1: hitung jarak Rumus jarak d = Ѵ {x2-x1 2 + y2-y1 2 + p2-p1 2 } Contoh d = V { 3-1 2 + 2-1 2 +5-2 2 } = 3,74 C1 1,1,2 C23,2,5 keterangan 1,1,2 3,74=3 Karena 0 3 maka masuk ke kluster 1 1,2,0 2,24=2 5,38=5 5,38 dibulatkan kedepan jadi 5 2,1,3 1,41=1 2,45=2 2,2,1 1,73=1 4,12=4 3,1,2 2 3,16=3 3,2,5 3,74=3 4,1,2 3 3,32=3 4,2,6 5,09=5 1,41=1 Karena 1 5 maka masuk ke klaster 2 5,1,1 4,12=4 4,58=4 5,2,3 4,24=4 2,83=2 Langkah 2 : warnai vektornya x,y,p Lebar citra Nilai gray level Tinggi citra C1 1,1,2 C23,2,5 Bandingkan mana yang lebih kecil maka warna mengikuti yg lebih kecil 1,1,2 3,74=3 1,2,0 2,24=2 5,38=5 2,1,3 1,41=1 2,45=2 2,2,1 1,73=1 4,12=4 3,1,2 2 3,16=3 3,2,5 3,74=3 4,1,2 3 3,32=3 4,2,6 5,09=5 1,41=1 5,1,1 4,12=4 4,58=4 5,2,3 4,24=4 2,83=2 Langkah 3 : cari pusat klucter yg baru dengan rumus C 1= {x1 + x2 + x3 + …+xnn , y1 +y2+y3+…+ynn , p1+p2+p3+…+Pnn } C1= {1+1+2+2+3+4+57 , 1+2+1+2+1+1+17 , 2+0+3+1+2+2+17}=2,57 , 1,29 , 1,57=2,1,1 C 2= {x1 + x2 + x3 + …+xnn , y1 +y2+y3+…+ynn , p1+p2+p3+…+Pnn } C2 = {3+4+53 , 2+2+23, 5+6+33} = 4 , 2 , 4,67=4,2,4 Langkah 4 : sama dengan langkah satu mencari jarak d dengan pusat kluster yg baru C1 2 , 1 , 1 C24 , 2 , 4 Bandingkan mana yang lebih kecil maka warna mengikuti yg lebih kecil 1,1,2 1,4 = 1 3,74=3 1,2,0 1,7=1 5 2,1,3 2 2,44=2 2,2,1 1 3,6=3 3,1,2 1,4=1 2,44=2 3,2,5 4,24=4 1,4=1 4,1,2 2,23=2 2,23=2 4,2,6 5,47 2 5,1,1 3 3,31=3 5,2,3 3,74=3 1,4=1 Langkah 5 ulangi terus langkah 1 – 3 selama pusat kluster berubah terus. Bila nilai c sekarang sama dengan sebelumnya maka berhenti. C1= {1+1+2+2+3+4+57 , 1+2+1+2+1+1+17, 2+0+3+1+2+2+17}=2,57 , 1,28, 1,57 = 2,1,1 C2={3+4+53 , 2+2+23, 5+6+33} = 4,3, 4,66= 4,3,4 C1 2 , 1 , 1 C24 , 3, 4 Bandingkan mana yang lebih kecil maka warna mengikuti yg lebih kecil 1,1,2 1,2,0 2,1,3 2,2,1 3,1,2 3,2,5 4,1,2 4,2,6 5,1,1 5,2,3 Setelah pusat kluster tidak berubah , kemudian munculkan citranya sesuai warna clusternya.

13.2 Cara membuat program K-Mean lakukan langkah berikut:

1. Buka program delphi, dengan cara pilih menu start, program borland delphi 7, delphi 7.

Gambar 13.1 Start Program

2. Kemudian pilih menu file, new, application.

Gambar 13.2 New Application 3. Pada object inspector, ubah properti captionnya dengan nama KMean, dan namenya dengan nama FormKMean. Gambar 13.3 FormKMean

4. Simpan unit dan projectnya dengan cara save all.

Gambar 13.4 Save All

5. Beri nama unitnya dengan nama UnitKMean.

Gambar 13.5 Save UnitKMean

6. Beri nama projectnya dengan nama ProjectKMean.

Gambar 13.6 Save ProjectKMean

7. Tambahkan image ke form dengan cara pilih menu Additional, image, lalu klik

ke form. Gambar 13.7 Menu Image

8. Pada properties rubah stretchnya ke true dan auto sizenya true.

Gambar 13.8 Stret True 9. Dengan cara yang sama tambahkan image2 di sebelah kanan image1 kemudian ubah stretchnya ke true dan auto sizenya true. Gambar 13.9 Penambahan Image 2

10. Tambahkan button ke form, dengan cara pilih menu standart, button, lalu

klik ke form. Gambar 13.10 Menu Button