DASAR TEORI GLOBAL THRESHOLDING PROGRAM GLOBAL THRESOLDING SELENGKAPNYA ADALAH SEBAGAI BERIKUT:

6. Berinama Projectnya dengan nama ProjectGlobalThresolding.

Gambar 4.6 Save Project Global Thresolding

7. Doble clik button open, lalu keting program berikut:

var GlobalThreshold: TGlobalThreshold; FileNameImg: string; implementation {R .dfm} procedure TGlobalThreshold.btOpenClickSender: TObject; begin if OpenPictureDialog1.Execute then begin FileNameImg := OpenPictureDialog1.FileName; Caption := Mammo Analisys : + OpenPictureDialog1.FileName; Image1.Picture.LoadFromFile OpenPictureDialog1.FileName; Image2.Visible := False; end; end; end. 8. Tambahkan button ke form, beri nama captionnya dengan Global Thresolding dan namenya dengan btGlobalThresholding dan tambahkan juga ProgresBar kedalam form. Gambar 4.7 Button Thresolding

9. Tambahkan unit dengan cara file new unit.

Gambar 4.8 New Unit

10. Simpan unitnya dengan cara file save as, beri nama dengan ImageProses.

Gambar 4.9 Save Image Proses

11. Kemudian ketik program berikut pada unit imageproses:

unit ImageProses; 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; procedure ImgGlobalThresholding var Image:TImage; var thres:real; 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; ProgressBar1.Position := x; end; end; procedure ImgGlobalThresholding var Image:TImage; var thres:real; var ProgressBar1: TProgressBar; var x,y,counter:integer; m1,m2,n1,n2:real; Clr:TColor; ClrGray:byte; thresOld:real; begin ProgressBar1.Max := 5; ProgressBar1.Position := 0; counter := 0; repeat thresOld := thres; m1:=0; m2:=0; n1:=0; n2:=0; for x:=0 to Image.Width-1 do for y:=0 to Image.Height-1 do begin ClrGray := ImgGetGray Image,x,y; if ClrGraythres then begin m1 := m1 + ClrGray; n1 := n1 + 1; end else begin m2 := m2 + ClrGray; n2 := n2 + 1; end; end; if n1=0 then n1:=1; if n2=0 then n2:=1; m1 := m1n1; m2 := m2n2; thres := m1+m2 2; Inc counter; ProgressBar1.Position := counter; until AbsthresOld-thres=3orcounter=5; { tuliskan pixel baru } for x:=0 to Image.Width-1 do begin for y:=0 to Image.Height-1 do begin ClrGray := ImgGetGray Image,x,y; if ClrGraythres then Image.Canvas.Pixels[x,y] := RGB 0,0,0; Image.Canvas.Pixels[x,y] := clWhite; end; end; ProgressBar1.Position := ProgressBar1.Max; end; end. 12. Tambahkan Label1, Label2, Label3 kemudian ganti captionnya dengan nama masing-masing THRESHOLD, AWAL, AKHIR. Kemudian tambahkan Edit ada pada Standard ke form beri namenya dengan EditThreshold dan Text = 12. Seperti berikut ini. Gambar 4.10 Edit Thresolding

13. Tambahkan program berikut ke UnitGlobalThressolding.

implementation {R .dfm} uses ImageProses;

14. Doble klik button Global Thresolding lalu ketik program berikut

procedure TGlobalThreshold.btGlobalThresoldingClickSender: TObject; var thres:real; begin Image2.Visible := True; Image2.Picture.Graphic := Image1.Picture.Graphic; thres := StrToFloatDef EditThreshold.Text,5; ImgGlobalThresholding Image2,thres,ProgressBar1; EditThreshold.Text := IntToStrRoundthres; end; 15. Tambahkan button ke dalam form lalu captionnya diganti dengan Exit, namenya diberinama btExit. Gambar 4.11 Button Exit

16. Doble klik button exit kemudin ketik program berikut.

procedure TFormGlobalThreshold.btExitClickSender: TObject; begin FormGlobalThreshold.Close; end; 17. Simpan program dengan save all, kemudian jalankan progran dengan cara compile kemudian run. Hasilnya sebagai berikut. Gambar 4.12 Hasil Program Thresolding

18. Tutup program tekan button exit.

4.3 PROGRAM GLOBAL THRESOLDING SELENGKAPNYA ADALAH SEBAGAI BERIKUT:

unit UnitGlobalThresolding; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ExtDlgs, ComCtrls; type TFormGlobalThreshold = classTForm Image1: TImage; Image2: TImage; btOpen: TButton; OpenPictureDialog1: TOpenPictureDialog; btGlobalThresolding: TButton; ProgressBar1: TProgressBar; EditThreshold: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; btExit: TButton; procedure btOpenClickSender: TObject; procedure btGlobalThresoldingClickSender: TObject; procedure btExitClickSender: TObject; private { Private declarations } public { Public declarations } end; var FormGlobalThreshold: TFormGlobalThreshold; FileNameImg: string; implementation {R .dfm} uses ImageProses; procedure TFormGlobalThreshold.btOpenClickSender: TObject; begin if OpenPictureDialog1.Execute then begin FileNameImg := OpenPictureDialog1.FileName; Caption := Mammo Analisys : + OpenPictureDialog1.FileName; Image1.Picture.LoadFromFile OpenPictureDialog1.FileName; Image2.Visible := False; end; end; procedure TFormGlobalThreshold.btGlobalThresoldingClickSender: TObject; var thres:real; begin Image2.Visible := True; Image2.Picture.Graphic := Image1.Picture.Graphic; thres := StrToFloatDef EditThreshold.Text,5; ImgGlobalThresholding Image2,thres,ProgressBar1; EditThreshold.Text := IntToStrRoundthres; end; procedure TFormGlobalThreshold.btExitClickSender: TObject; begin FormGlobalThreshold.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; procedure ImgGlobalThresholding var Image:TImage; var thres:real; 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; ProgressBar1.Position := x; end; end; procedure ImgGlobalThresholding var Image:TImage; var thres:real; var ProgressBar1: TProgressBar; var x,y,counter:integer; m1,m2,n1,n2:real; Clr:TColor; ClrGray:byte; thresOld:real; begin ProgressBar1.Max := 5; ProgressBar1.Position := 0; counter := 0; repeat thresOld := thres; m1:=0; m2:=0; n1:=0; n2:=0; for x:=0 to Image.Width-1 do for y:=0 to Image.Height-1 do begin ClrGray := ImgGetGray Image,x,y; if ClrGraythres then begin m1 := m1 + ClrGray; n1 := n1 + 1; end else begin m2 := m2 + ClrGray; n2 := n2 + 1; end; end; if n1=0 then n1:=1; if n2=0 then n2:=1; m1 := m1n1; m2 := m2n2; thres := m1+m2 2; Inc counter; ProgressBar1.Position := counter; until AbsthresOld-thres=3orcounter=5; { tuliskan pixel baru } for x:=0 to Image.Width-1 do begin for y:=0 to Image.Height-1 do begin ClrGray := ImgGetGray Image,x,y; if ClrGraythres then Image.Canvas.Pixels[x,y] := clWhite; end; end; ProgressBar1.Position := ProgressBar1.Max; end; end.

BAB 5 HISTOGRAM CUT

5.1 DASAR TEORI HISTOGRAM CUT

Histogram Cut digunakan untuk mencerahkan enlightmen image berdasarkan distribusi frekuensi citra. Algoritma Histogram Cut 1. Masukkan nilai black_thres = 2. 2. Hitung frekuensi kemunculan nilai gray 3. Hitung frekuansi total dari gray imgsize awal 4. Bila nilai gray black_thres, maka tidak ikut diperhitungkan, karena dianggap benar-benar background. 5. Hitung imgsizebaru = imgsize awal – frekkuensi yang tidak diperhitungkan. 6. Cari nilai gray maksimum 7. Cari nilai threshold dengan cara menghitung frekuensi kumulatif dimulai dari gray tertinggi. 8. Threshold ditentukan berdasarkan nilai gray dimana ditemukan frekuensi kumulatif imgsizebaru2. 9. Bila nilai gray thresodl maka nilai grayBaru = 0. 10. Lakukan transformasi linear grayBaru = clrGray clrGrayMax 20 karena skala maksimum 20,pada program sebenarnya 255. 11. Sehingga didapat image yang lebih kontras. 12. Ulangi langkah 2 sampai langkah 10 sampai didapat image dengan kontras yang diinginkan. Cara kerja Histogram Thresholding Histogram Cut. 1.Misalkan skala keabuan antara 0-20, dan didapatkan distribusi frekuensi sbb. Gray frek Keterangan 10 Misalkan Black_Thres=2, maka nilai gray = 2 tidak ikut di perhitungkan dianggap benar-benar background 1 20 2 5 ß batas Black thres 3 8 Proses dilanjutkan dengan menghitung imgSize berdasarkan kasus ini imgSize = 116-10-20-5 = 81 4 7 5 11 6 10 Pada saat yang sama juga dicari nilai maksimum, pada kasus ini ditemukan clrGrayMax = 11 7 20 8 5 9 5 10 7 11 8 çclrGrayMax artinya nilai intensitas pixel maksimum adalah 11 12 13 14 15 16 17 18 19 20 Total 116 2.Proses berikutnya mencari threshold dengan cara mencari frekuensi kumulatif dimulai dari gray tertinggi. Threshold ditentukan berdasarkan nilai gray dimana frekuensi kumulatif imgSize 2 dalam hal ini 812 = 40,5. Gray Frek Frek Kum Keterangan 10 1 20 2 5 3 8 81 Frek kum = 73 + 8 = 81 4 7 73 Frek kum = 66 + 7 = 73 5 11 66 Frek kum = 55 + 11 = 66 6 10 55 Frek kum = 45 + 10 = 55 7 20 45 Frek kum = 25 + 20 = 45 pada titik ini pertama kali ditemukan frek kumulatif = imgSize2= 40,5. Maka nilai threshold yang baru = 7. 8 5 25 Frek kum = 20 + 5 = 25 9 5 20 Frek kum = 15 + 5 = 20 10 7 15 Gray 10, frek 7, frek kum = 8+7=15 11 8 8 Frek kumulatif mulai dari sini gray 11, frek 8, frek kum = 8 12 13 14 15 16 17 18 19 20 Total 116 3.Kemudian dilakukan transformasi linier grayBaru = clrGray clrGrayMax 20 karena skala maksimum 20, pada program sebenarnya 255. Sementara nilai gray threshold dijadikan 0. Gray Frek Gray Baru Keterangan 10 1 20 2 5 3 8 4 7 5 11 Perubahan nilai gray, lebih kecil dari threshold maka lebih gelap 6 10 6 7 maka gray baru = 0 7 20 13 Gray baru = 711 20 =12,7 = 13 8 5 15 Gray baru = 811 20 =14,5 = 15 9 5 16 Perubahan nilay gray, yang lebih besar dari threshold maka lebih cerah 10 7 18 11 8 20 12 13 14 15 16 17 18 19 20 Total 116 4.Akhirnya dihasilkan image yang lebih kontras dengan distribusi frekuensi sebagai berikut: Gray Frek lama Frek baru keterangan 10 71 Background 1 20 2 5 Kosong artinya o 3 8 4 7 5 11 6 10 7 20 8 5 9 5 10 7 11 8 12 13 20 Hasil perhitungan piksel baru diatas 14