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