PENGOLAHAN CITRA DIGITAL STEP BY STEP MENGGUNAKAN DELPHI 7.

(1)

Anak Agung Ngurah Gunawan

PENGOLAHAN

CITRA DIGITAL

STEP BY STEP MENGGUNAKAN DELPHI 7


(2)

PENGOLAHAN CITRA DIGITAL

STEP BY STEP MENGGUNAKAN DELPHI 7

Anak Agung Ngurah Gunawan

Penerbit : ANDI


(3)

Oleh : Anak Agung Ngurah Gunawan Hak Cipta @ 2013 pada Penulis Editor :

Setting : Desain Cover : Korektor :

Hak cipta dilindungi undang-undang. Dularang memperbanyak atau memendahkan sebagian atau seluruh isi buku ini dalam bentuk apapun, baik secara elektronis maupun mekanis, termasuk memfotocopy, merekam, atau dengan sistem

penyimpanan lainnyatanpa izin tertulis dari penulis. Penerbit: ANDI

Percetakan:


(4)

Buku ini kupersembahkan kepada

Orang tuaku tercinta Almr. A. A. Pt. Oka Pudjawan dan A.A. Ayu Kompiang Raka Mertuaku tercinta Almr. Ahmad Simin dan Alrm Sih Niti Istriku tercinta Sumi Natalia Anakku tersanyang Jacqueline, Franky, Frady Cucuku tersayang A.A. Ngr. Brawijaya (Wah Brow) Dan mantu : IGst Agung Prabawa Weda Kehadiranmu adalah pembuka jalan terciptanya buku ini


(5)

(6)

KATA PENGANTAR

Puji syukur Penulis panjatkan ke hadirat Tuhan Yang Maha Esa atas selesainya penyusunan buku Pratikum Pengolahan Citra Digital. Buku ini disusun untuk melengkapi khasanah buku teks perkuliahan di Teknik Informatika atau Ilmu Komputer, khususnya di bidang pengolahan citra. Penulis berharap dengan adanya buku ini, mahasiswa mendapatkan panduan dalam mengikuti Pratikum Pengolahan Citra Digital di pendidikan D3 atau S1 Teknik Informatika atau Ilmu Komputer. Materi dalam buku ini adala teori dan langkah pemrograman, diharapkan setelah membaca buku ini pembaca bisa membuat priram sederhana pengolahan citra digital dengan menggunakan bahasa pemrograman dephi 7.

Sebagai sebuah karya manusia, tentu buku ini masih banyak mengandung

kelemahan. Kami berharap masukan kritik dan saran dari pembaca melalui email

agung1962sp@yahoo.co.id. Penulis berterimakasi atas kritik saran pembaca yang akan kami sempurnakan penerbitan buku berikutnya.

Denpasar, Agustus 2013 Penyusun


(7)

(8)

DAFTAR ISI

KATA PENGANTAR v

DAFTAR ISI vii

DAFTAR GAMBAR x

DAFTAR TABEL xviii

BAB I OPEN IMAGE 1

1.1 Cara Membuat Program Open Image 1 1.2 Program Open Image Selengkapnya Adalah Sebagai Berikut 7 BAB II HISTOGRAM EQUALIZATION 9

2.1 Perataan Histogram 9

2.2 Cara Membuat Program Equalization 13 2.3 Program Histogram Equalization Selengkapnya Adalah sebagai

Berikut

25

BAB III WIENER FILTER 31

3.1 Teori Wiener Filter 31 3.2 Cara Membuat Program Wiener Filter 32 3.3 Program Wiener Filter Selengkapnya Adalah Sebagai Berikut 45 BAB IV GLOBAL TRESHOLDING 51 4.1 Dasar Teori Global Thresholding 51 4.2 Cara Membuat Program Global Thresholding 51 4.3 Program Global Thresholding Selengkapnya Adalah Sebagai

Berikut

61

BAB V HISTOGRAM CUT 65

5.1 Dasar Teori Histogram Cut 65 5.2 Cara Menbuat Program Histogram Cut 69 5.3 Program Histogram Cut Selengkapnya Adalah Sebagai Berikut 84

BAB VI MORPOLOGI 89

6.1 Dasar Teori Morpologi 89

6.1.1 Struktur elemen 89

6.1.2 Dilasi 89

6.1.3 Erosi 90

6.1.4 Opening 91


(9)

6.2 Cara Menbuat Program Morpologi 92 6.3 Program Morpologi Selengkapnya Adalah Sebagai Berikut 105

BAB VII SUBTRAK 111

7.1 Dasar Teori Subtrak 111 7.2 Cara Membuat Program Subtrak 111 7.3 Program Subtrak Selengkapnya Adalah Sebagai Berikut 123 BAB VIII DETEKSI TEPI SOBEL 127 8.1 Dasar Teori Deteksi Tepi Sobel 127 8.2 Cara Membuat Program Deteksi Tepi Sobel 128 8.3 Program Deteksi Tepi Sobel Selengkapnya Adalah Sebagai Berikut 140 BAB IX DETEKSI TEPI PREWITT 145 9.1 Dasar Teori Deteksi Tepi Prewitt 145 9.2 Cara Membuat Program Deteksi Tepi Prewitt 146 9.3 Program Deteksi Tepi Prewitt Selengkapnya Adalah Sebagai

Berikut

159 BAB X DETEKSI TEPI ROBERT 163 10.1 Dasar Teori Deteksi Tepi Robert 163 10.2 Cara Membuat Program Deteksi Tepi Robert 164 10.3 Program Deteksi Tepi Robert Selengkapnya Adalah Sebagai Berikut 176 BAB XI LOW PASS FILTER 181 11.1 Dasar Teori Low Pass Filter 181 11.2 Cara Membuat Program Low Pass Filter 181 11.3 Program Low Pass Filter Selengkapnya Adalah Sebagai Berikut 194 BAB XII HIGHT PASS FILTER 199 12.1 Dasar Teori Hight Pass Filter 199 12.2 Cara Membuat Program Hight Pass Filter 200 12.3 Program Hight Pass Filter Selengkapnya Adalah Sebagai Berikut 214

BAB XIII K-MEANS 219

13.1 Algoritma K-Means 219 13.2 Cara Membuat Program K-Means 222 13.3 Program K-Means Selengkapnya Adalah Sebagai Berikut 240 BAB XIV MENAMPILKAN NILAI INTENSITAS PIXEL 247

14.1 Pendahuluan 247

14.2 Cara Membuat Program Menampilkan Nilai Intensitas Pixel 247 14.3 Program Menampilkan Nilai Intensitas Pixel Selengkapnya Adalah

Sebagai Berikut

255

BAB XV LOG IN 261

15.1 Pendahuluan 261

15.2 Cara Membuat Program Log In 261 15.3 Program Log In Selengkapnya Adalah Sebagai Berikut 268


(10)

DAFTAR PUSTAKA 271


(11)

DAFTAR GAMBAR

Gambar 1.1 Start Program Delphi 1 Gambar 1.2 New Application 1 Gambar 1.3 Object Inspector 2

Gambar 1.4 Save All 2

Gambar 1.5 Save Unit 2

Gambar 1.6 Save Project 3

Gambar 1.7 Menu Image 3

Gambar 1.8 Stretch True 3

Gambar 1.9 Menu Button 4

Gambar 1.10 Button Open 4

Gambar 1.11 Menu OpenPictureDialog 4 Gambar 1.12 Hasil OpenPictureDialog 5

Gambar 1.13 Button Exit 5

Gambar 1.14 Menu Compiler 6

Gambar 1.15 Menu Run 6

Gambar 1.16 Hasil Program 7 Gambar 2.1 Fungsi Transformasi 10 Gambar 2.2 Histogram Citra Sebelum Perataan 11 Gambar 2.3 Histogram Citra Hasil Pemetaan. 12 Gambar 2.4 Start Program Delphi 13 Gambar 2.5 New Application 13 Gambar 2.6 Object Inspector 14

Gambar 2.7 Save All 14

Gambar 2.8 Save UnitEqualization 14 Gambar 2.9 Save ProjectEqualization 15

Gambar 2.10 Menu Image 15

Gambar 2.11 Stretch True 15 Gambar 2.12 Penambahan Image 2 16 Gambar 2.13 Menu Button 16 Gambar 2.14 Button Open 16 Gambar 2.15 Menu OpenPictureDialog 17 Gambar 2.16 Hasil OpenPictureDialog 17 Gambar 2.17 Button Equalization 18 Gambar 2.18 Menu ProgresBar 18 Gambar 2.19 Hasil ProgresBar 18

Gambar 2.20 New Unit 19

Gambar 2.21 Save All 19

Gambar 2.22 Save UnitImageProses 19 Gambar 2.23 Hasil Save UnitImageProses 20 Gambar 2.24 Kembali ke FormEqualization 22 Gambar 2.25 Menu Toggle Form 23 Gambar 2.26 Klik Button Equalization 23 Gambar 2.27 Button Exit 24


(12)

Gambar 2.28 Compile ProjectEqualization 24 Gambar 2.29 Run ProjectEqualization 25 Gambar 2.30 Hasil Program Equalization 25 Gambar 3.1 Start Program 32 Gambar 3.2 New Application 33 Gambar 3.3 Form Wiener Filter 33

Gambar 3.4 Save All 33

Gambar 3.5 Unit Wiener Filter 34 Gambar 3.6 Project Wiener Filter 34

Gambar 3.7 Menu Image 34

Gambar 3.8 Stretch True 35 Gambar 3.9 Penambahan Image 2 35 Gambar 3.10 Menu Button 35 Gambar 3.11 Button Open 36 Gambar 3.12 Menu OpenPictureDialog 36 Gambar 3.13 Hasil OpenPictureDialog 36 Gambar 3.14 Button Wiener Filter 37 Gambar 3.15 Menu ProgresBar 37 Gambar 3.16 Hasil ProgresBar 38

Gambar 3.17 New Unit 38

Gambar 3.18 Save All 38

Gambar 3.19 Save UnitImageProses 39 Gambar 3.20 Hasil Save UnitImageProses 39 Gambar 3.21 Kembali ke FormWienerFilter 42 Gambar 3.22 Menu Toggle Form 43 Gambar 3.23 Klik Button Wiener Filter 43 Gambar 3.24 Button Exit 44 Gambar 3.25 Menu Compile 44

Gambar 3.26 Menu Run 45

Gambar 3.27 Hasil Wiener Filter 45 Gambar 4.1 Start Program 51 Gambar 4.2 Form Global Thresholding 52

Gambar 4.3 Button Open 52

Gambar 4.4 Save All 53

Gambar 4.5 Save Unit Global Thresolding 53 Gambar 4.6 Save Project Global Thresolding 54 Gambar 4.7 Button Thresolding 55

Gambar 4.8 New Unit 55

Gambar 4.9 Save Image Proses 56 Gambar 4.10 Edit Thresolding 59 Gambar 4.11 Button Exit 60 Gambar 4.12 Hasil Program Thresolding 60 Gambar 5.1 Start Program 69 Gambar 5.2 New Application 69 Gambar 5.3 Form Histogram Cut 70


(13)

Gambar 5.5 Save UnitHistogramCut 70 Gambar 5.6 Save ProjectHistogramCut 71

Gambar 5.7 Menu Image 71

Gambar 5.8 AutoSize True 71 Gambar 5.9 Penambahan Image 2 72 Gambar 5.10 Menu Button 72 Gambar 5.11 Button Open 72 Gambar 5.12 Menu OpenPictureDialog 73 Gambar 5.13 Hasil OpenPictureDialog 73 Gambar 5.14 Button HistogramCut 74 Gambar 5.15 Menu ProgresBar 74 Gambar 5.16 Hasil ProgresBar 74

Gambar 5.17 New Unit 75

Gambar 5.18 Save As 75

Gambar 5.19 Save UnitImageProses 75 Gambar 5.20 Hasil Save UnitImageProses 76 Gambar 5.21 Kembali ke Form HistogramCut 79 Gambar 5.22 Menu Toggle 79 Gambar 5.23 Klik Button HistogramCut 89 Gambar 5.24 Button Exit 81

Gambar 5.25 Menu Edit 81

Gambar 5.26 Object InspectorEdit 81

Gambar 5.27 Menu Label 82

Gambar 5.28 Object Inspector Cut 82 Gambar 5.29 Menu Compile 83

Gambar 5.30 Menu Run 83

Gambar 5.31 Hasil Program Histogram Cut 84 Gambar 6.1 Start Program 92 Gambar 6.2 New Application 92 Gambar 6.3 Form Morpologi 93

Gambar 6.4 Save All 93

Gambar 6.5 Save UnitMorpologi 93 Gambar 6.6 Save ProjectMorpologi 94

Gambar 6.7 Menu Image 94

Gambar 6.8 Stretch True 94 Gambar 6.9 Penambahan Image 2 95 Gambar 6.10 Menu Button 95 Gambar 6.11 Button Open 95 Gambar 6.12 Menu OpenPictureDialog 96 Gambar 6.13 Hasil OpenPictureDialog 96 Gambar 6.14 Button Morpologi 97 Gambar 6.15 Menu ProgresBar 97 Gambar 6.16 Hasil ProgresBar 97

Gambar 6.17 New Unit 98

Gambar 6.18 Save As 98

Gambar 6.19 Save UnitImageProses 98 Gambar 6.20 Hasil Save UnitImageProses 99 Gambar 6.21 Kembali ke FormMorpologi 102 Gambar 6.22 Menu Toggle 102


(14)

Gambar 6.23 Klik Button Morpologi 102 Gambar 6.24 Button Exit 103 Gambar 6.25 Compiler ProjectMorpologi 104

Gambar 6.26 Menu Run 104

Gambar 6.27 Hasil Program Morpologi 104 Gambar 7.1 Start Program 111 Gambar 7.2 New Application 112 Gambar 7.3 Form Substrak 112

Gambar 7.4 Save All 112

Gambar 7.5 Save UnitSubtrak 113 Gambar 7.6 Save ProjectSubstrak 113

Gambar 7.7 Menu Image 113

Gambar 7.8 Stretch True 114 Gambar 7.9 Penambahan Image 2 114 Gambar 7.10 Menu Button 114 Gambar 7.11 Button Open 115 Gambar 7.12 Menu OpenPictureDialog 115 Gambar 7.13 Hasil OpenPictureDialog 115 Gambar 7.14 Button Subtrak 116 Gambar 7.15 Menu ProgresBar 116 Gambar 7.16 Hasil ProgresBar 117

Gambar 7.17 New Unit 117

Gambar 7.18 Save As 117

Gambar 7.19 Save UnitImageProses 118 Gambar 7.20 Hasil Save UnitImageProses 118 Gambar 7.21 Kembali ke FormSubstrak 120 Gambar 7.22 Menu Toggle 121 Gambar 7.23 Klik Button Substrak 121 Gambar 7.24 Button Exit 122 Gambar 7.25 Compiler ProjectSubtrak 122

Gambar 7.26 Menu Run 122

Gambar 7.27 Hasil Program Subtrak 123 Gambar 8.1 Start Program 128 Gambar 8.2 New Application 128

Gambar 8.3 Form Sobel 129

Gambar 8.4 Save All 129

Gambar 8.5 Save UnitSobel 129 Gambar 8.6 Save ProjectSobel 130

Gambar 8.7 Menu Image 130

Gambar 8.8 Stretch True 130 Gambar 8.9 Penambahan Image 2 131 Gambar 8.10 Menu Button 131 Gambar 8.11 Button Open 131 Gambar 8.12 Menu OpenPictureDialog 132 Gambar 8.13 Hasil OpenPictureDialog 132 Gambar 8.14 Button Sobel 133

Gambar 8.15 New Unit 133


(15)

Gambar 8.17 Save UnitImageProses 134 Gambar 8.18 Hasil Save UnitImageProses 134 Gambar 8.19 Kembali ke FormSobel 136 Gambar 8.20 Menu Toggle 136 Gambar 8.21 Button Sobel 136 Gambar 8.22 Button Exit 138 Gambar 8.23 Compiler ProjectSobel 139

Gambar 8.24 Menu Run 139

Gambar 8.25 Hasil Mammografi 140 Gambar 8.26 Hasil Photo 140 Gambar 9.1 Start Program 146 Gambar 9.2 New Application 146 Gambar 9.3 Form Prewitt 147

Gambar 9.4 Save All 147

Gambar 9.5 Save UnitPrewitt 147 Gambar 9.6 Save ProjectPrewitt 148

Gambar 9.7 Menu Image 148

Gambar 9.8 Stretch True 148 Gambar 9.9 Penambahan Image 2 149 Gambar 9.10 Menu Button 149 Gambar 9.11 Button Open 149 Gambar 9.12 Menu OpenPictureDialog 150 Gambar 9.13 Hasil OpenPictureDialog 150 Gambar 9.14 Button Prewitt 151

Gambar 9.15 New Unit 151

Gambar 9.16 Save As 151

Gambar 9.17 Save UnitImageProses 152 Gambar 9.18 Hasil Save UnitImageProses 152 Gambar 9.19 Kembali ke FormPrewitt 154 Gambar 9.20 Menu Toggle 154 Gambar 9.21 Button Sobel 154 Gambar 9.22 Button Exit 156 Gambar 9.23 Compiler ProjectPrewitt 157

Gambar 9.24 Menu Run 157

Gambar 9.25 Hasil Mammografi 158 Gambar 9.26 Hasil Photo 158 Gambar 10.1 Start Program 164 Gambar 10.2 New Application 164 Gambar 10.3 Form Robert 165

Gambar 10.4 Save All 165

Gambar 10.5 Save UnitRobert 165 Gambar 10.6 Save ProjectRobert 166 Gambar 10.7 Menu Image 166 Gambar 10.8 Stretch True 166 Gambar 10.9 Penambahan Image 2 167 Gambar 10.10 Menu Button 167 Gambar 10.11 Button Open 167 Gambar 10.12 Menu OpenPictureDialog 168


(16)

Gambar 10.13 Hasil OpenPictureDialog 168 Gambar 10.14 Button Robert 169

Gambar 10.15 New Unit 169

Gambar 10.16 Save As 169

Gambar 10.17 Save UnitImageProses 170 Gambar 10.18 Hasil Save UnitImageProses 170 Gambar 10.19 Kembali ke FormRobert 172 Gambar 10.20 Menu Toggle 172 Gambar 10.21 Button Robert 172 Gambar 10.22 Button Exit 174 Gambar 10.23 Compiler ProjectRobert 175

Gambar 10.24 Menu Run 175

Gambar 10.25 Hasil Program Robert 175 Gambar 11.1 Start Program 181 Gambar 11.2 New Application 182 Gambar 11.3 Form LowPassFilter 182

Gambar 11.4 Save All 182

Gambar 11.5 Save UnitLowPassFilter 183 Gambar 11.6 Save ProjectLowPassFilter 183 Gambar 11.7 Menu Image 183 Gambar 11.8 Stretch True 184 Gambar 11.9 Penambahan Image 2 184 Gambar 11.10 Menu Button 184 Gambar 11.11 Button Open 185 Gambar 11.12 Menu OpenPictureDialog 185 Gambar 11.13 Hasil OpenPictureDialog 185 Gambar 11.14 Button Low Pass Filter 186

Gambar 11.15 New Unit 187

Gambar 11.16 Save As 187

Gambar 11.17 Save UnitImageProses 187 Gambar 11.18 Hasil Save UnitImageProses 188 Gambar 11.19 Kembali ke FormLowPassFilter 190 Gambar 11.20 Menu Toggle 190 Gambar 11.21 Klik Button Low Pass Filter 190 Gambar 11.22 Button Exit 192 Gambar 11.23 Compiler ProjectLowPassFilter 193

Gambar 11.24 Menu Run 193

Gambar 11.25 Hasil Mammografi 194 Gambar 11.26 Hasil Photo 194 Gambar 12.1 Start Program 200 Gambar 12.2 New Application 200 Gambar 12.3 FormHighPassFilter 201

Gambar 12.4 Save All 201

Gambar 12.5 Save UnitHighPassFilter 202 Gambar 12.6 Save ProjectHighPassFilter 202 Gambar 12.7 Menu Image 202 Gambar 12.8 Stretch True 203 Gambar 12.9 Penambahan Image 2 203


(17)

Gambar 12.10 Menu Button 204 Gambar 12.11 Button Open 204 Gambar 12.12 Menu OpenPictureDialog 204 Gambar 12.13 Hasil OpenPictureDialog 205 Gambar 12.14 Button High Pass filter ton Low Pass Filter 206

Gambar 12.15 New Unit 206

Gambar 12.16 Save As 206

Gambar 12.17 Save UnitImageProses 207 Gambar 12.18 Hasil Save UnitImageProses 207 Gambar 12.19 Kembali ke FormHighPassFilter 209 Gambar 12.20 Menu Toggle 209 Gambar 12.21 Klik Button High Pass Filter 209 Gambar 12.22 Button Exit 211 Gambar 12.23 Compiler ProjectHighPassFilter 212

Gambar 12.24 Menu Run 212

Gambar 12.25 Hasil Mammografi 213 Gambar 12.26 Hasil Photo 213 Gambar 13.1 Start Program 222 Gambar 13.2 New Application 223

Gambar 13.3 FormKMean 223

Gambar 13.4 Save All 223

Gambar 13.5 Save UnitKMean 224 Gambar 13.6 Save ProjectKMean 224 Gambar 13.7 Menu Image 224 Gambar 13.8 Stretch True 225 Gambar 13.9 Penambahan Image 2 225 Gambar 13.10 Menu Button 225 Gambar 13.11 Button Open 226 Gambar 13.12 Menu OpenPictureDialog 226 Gambar 13.13 Hasil OpenPictureDialog 226 Gambar 13.14 Button K-Mean 227 Gambar 13.15 Menu Label 228

Gambar 13.16 Label K 228

Gambar 13.17 Menu Edit 228 Gambar 13.18 EditCluster 229 Gambar 13.19 Label Weight 229 Gambar 13.20 Clr Wight 40Menu Toggle 230 Gambar 13.21 Menu ProgressBar 230 Gambar 13.22 Hasil ProgressBar 230 Gambar 13.23 Menu New Unit 231 Gambar 13.24 Menu Save As 231 Gambar 13.25 Save UnitImageProses 232 Gambar 13.26 Hasil UnitImageProses 232 Gambar 13.27 Kembali ke FormKMean 237

Gambar 13.28 Toggle 237

Gambar 13.29 Button K-Mean 237 Gambar 13.30 Button Exit 238 Gambar 13.31 Compiler ProjectKMean 239


(18)

Gambar 13.33 Hasil Program K-Mean 239 Gambar 14.1 Menu Open Project 247 Gambar 14.2 Open ProjectHistogramCut 248 Gambar 14.3 Hasil OpenProjectHistogramCut 248

Gambar 14.4 Menu Memo 249

Gambar 14.5 Hasil Memo 249

Gambar 14.6 MainMenu 249

Gambar 14.7 Hasil Main Menu Pada Form 250 Gambar 14.8 Tampilan Main Menu 250 Gambar 14.9 Tulisan Caption File Pada Main Menu 251 Gambar 14.10 Hasil Tampilan Fle Main Menu 251 Gambar 14.11 Menampilkan Tulisan Nilai Intensitas Pixel Awal 251 Gambar 14.12 Menampilkan Nilai Intensitas Pixel Hasil 252 Gambar 14.13 Kembali ke FormHistogramCut 252 Gambar 14.14 Hasil Program Menampilkan Nialai Intensitas Pixel 254 Gambar 15.1 Start Program 261 Gambar 15.2 New Application 261 Gambar 15.3 Form LogIn 262 Gambar 15.4 Tambah Edit ke Form 262 Gambar 15.5 Tambah Button ke Form 263

Gambar 15.6 New Form 263

Gambar 15.7 Form Aplikasi 264 Gambar 15.8 Menu Save All 264 Gambar 15.9 Save UnitLogIn 265

Gambar 15.10 Use Unit 265

Gambar 15.11 Mengelingkan Form Aplikasi Dengan UnitLogIn 266 Gambar 15.12 Mengelingkan UnitLogIn Dengan Form Aplikasi 266 Gambar 15.13 Compiler ProjectLogIn 267

Gambar 15.14 Menu Run 267


(19)

DAFTAR TABEL

TABEL 2.1 Nilai-nilai rk jika L=8 9 TABEL 2.2 Histogram Citra Semula Sebelum Perataan 10 TABEL 2.3 Hasil Transformasinya 11 TABEL 2.4 Histogram Citra Hasil Perataan 12


(20)

BAB 1

OPEN IMAGE

1.1

CARA MEMBUAT PROGRAM OPEN IMAGE

LAKUKAN LANGKAH BERIKUT:

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

Gambar 1.1 Start Program Delphi 2. Kemudian pilih menu file, new, application.


(21)

3. Pada object inspector, ubah properti captionnya dengan nama OpenImage, dan namenya dengan nama FormOpenImage.

Gambar 1.3 Object Inspector 4. Simpan unit dan projectnya dengan cara save all.

Gambar 1.4 Save All 5. Beri nama unitnya dengan nama UnitOpenImage.


(22)

6. Beri nama projectnya dengan nama ProjectOpenImage.

Gambar 1.6 Save Project

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

Gambar 1.7 Menu Image 8. Rubah stretchnya ke true dan AutoSizenya true.


(23)

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

Gambar 1.9 Menu Button

10.Pada oject inspector rubah properti captionnya dengan nama Open, kemudian

namenya dengan nama btOpen.

Gambar 1.10 Button Open

11.Tambahkan OpenPictureDialog ke form, dengan cara pilih menu dialog, OpenPictureDialog, lalu klik ke form.


(24)

12.Hasilnya sebagai berikut.

Gambar 1.12 Hasil OpenPictureDialog

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

berikut.

procedure TFormOpenImage.btOpenClick(Sender: TObject); begin

if OpenPictureDialog1.Execute then begin

Caption := 'Program MammoAnalisis Image : '+ OpenPictureDialog1.FileName;

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

end; end.

14. Tambahkan button ke form, lalu pada object inspector rubah properties

captionnya dengan nama Exit dan namenya dengan nama btExit.

Gambar 1.13 Button Exit


(25)

procedure TFormOpenImage.btExitClick(Sender: TObject); begin

FormOpenImage.Close;

end;

16. Simpan program dengan cara File, save all.

17. Compiler progran dengan cara pilih menu Project, Compile ProjectOpenImage.

Gambar 1.14 Menu Compiler

18.Lalu jalankan progran dengan cara pilih menu Run, Run.

Gambar 1.15 Menu Run


(26)

Gambar 1.16 Hasil Program 20.Keluar dari program klik button Exit.

1.2

PROGRAM OPEN IMAGE SELENGKAPNYA

ADALAH SEBAGAI BERIKUT:

unit UnitOpenImage;

interface uses

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

Dialogs, ExtDlgs, StdCtrls, ExtCtrls; type

TFormOpenImage = class(TForm) Image1: TImage;

btOpen: TButton;

OpenPictureDialog1: TOpenPictureDialog; btExit: TButton;

procedure btOpenClick(Sender: TObject); procedure btExitClick(Sender: TObject); private

{ Private declarations } public

{ Public declarations } end;

var


(27)

implementation {$R *.dfm}

procedure TFormOpenImage.btOpenClick(Sender: TObject); begin

if OpenPictureDialog1.Execute then begin

Caption := 'Program MammoAnalisis Image : '+ OpenPictureDialog1.FileName;

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

end;

procedure TFormOpenImage.btExitClick(Sender: TObject); begin FormOpenImage.Close; end; end. unit Unit1; interface uses

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

Dialogs; type

TFormOpenImage = class(TForm) private

{ Private declarations } public

{ Public declarations } end; var FormOpenImage: TFormOpenImage; implementation {$R *.dfm} end.


(28)

BAB 2

HISTOGRAM EQUALIZATION

2.1 PERATAAN HISTOGRAM (

HISTOGRAM

EQUALIZATION

)

Histogram citra memberikan informasi tentang penyebaran intensitas pixel-pixel di dalam citra. Misalnya, citra yang terlalu terang atau terlalu gelap memiliki

histogram yang sempit.

Agar diperoleh citra yang baik, maka penyebaran nilai intensitas harus diubah. Teknik yang lazim dipakai adalah histogram equalization. Tujuan dari perataan histogram adalah untuk memperoleh penyebaran histogram yang merata, sehingga setiap derajat keabuan memiliki jumlah pixel yang relatif sama. Dengan r, rk, s, sk, k,

Pr, L, nk , n,T(r), w secara berurutan adalah nilai keabuan citra semula, nilai keabuan

citra semula dengan derajat keabuan tertentu , nilai keabuan yang baru, nilai

keabuan yang baru dengan derajat keabuan tertentu, derajat keabuan, peluang pixel dengan derajat keabuan tertentu, jumlah derajat keabuan, jumlah pixel dengan derajat keabuan tertentu, jumlah pixel total, fungsi transformasi, variabel dummi.

Karena histogram menyatakan peluang pixel dengan derajat keabuan tertentu, maka rumus menghitung histogram ditulis kembali sebagai peluang

Pr (rk) = nk / n ...(2.1)

Yang didalam hal ini

rk = k / (L – 1), 0 ≤ k ≤ L – 1 ...(2.2)

yang artinya, derajat keabuan (k) dinormalkan terhadap derajat keabuan terbesar (L-1). Nilai rk = 0 menyatakan hitam, dan rk = 1 menyatakan putih dalam skala keabuan

yang didefinisikan.

Contohnya, jika L=8, maka nilai-nilai rk dinyatakan di dalam tabel 2.1. Tabel 2.1. Nilai-nilai rk jika L=8

k rk 0 0/7 = 0 1 1/7 2 2/7 3 3/7 4 4/7 5 5/7 6 6/7 7 7/7 = 1


(29)

Yang dimaksud dengan perataan histogram adalah mengubah derajat keabuan suatu pixel (r) dengan derajat keabuan yang baru (s) dengan suatu fungsi transformasi T, yang dalam hal ini s = T(r). Gambar 2.2 memperlihatkan transformasi r menjadi s. s 1

sk=T(rk)

0 rk 1 r

Gambar 2.1. Fungsi Transformasi Untuk fungsi histogram yang kontinu,

s = T(r) = ∫ 0 (), 0 ≤ r ≤ 1 ...(2.3)

dengan :

w = variabel dummi.

Dalam bentuk diskrit, nilai-nilai s diperoleh dengan persamaan berikut :

sk = T (rk) = ∑#"=0!!" = ∑#"=0") ...(2.4)

dengan :

0 ≤ rk ≤ 1, k = 0, 1, 2, ..., L-1

Contoh :

Misalkan terdapat citra yang berukuran 64 x 64 dengan jumlah derajaat keabuan (L) = 8 dan jumlah seluruh pixel (n) = 64 x 64 = 4096:

Table 2.2 Histogram Citra Semula Sebelum Perataan.

k rk nk Pr(rk) = nk/n

0 0/7 = 0.00 790 0.19 1 1/7 = 0.14 1023 0.25 2 2/7 = 0.29 850 0.21 3 3/7 = 0.43 656 0.16 4 4/7 = 0.57 329 0.08 5 5/7 = 0.71 245 0.06 6 6/7 = 0.86 122 0.03 7 7/7 = 1.00 81 0.02


(30)

Pr(rk) 0.30 0.25 0.20 0.15 0.10 0.05

0 1/7 2/7 3/7 4/7 5/7 6/7 1 rk Gambar 2.2. Histogram Citra Sebelum Perataan

Perhitungan perataan histogram adalah sebagai berikut : s0 = T(r0) = ∑0"=0$"%=(0) = 0.19

s1 = T(r1) = ∑1"=0"%=(0)+ (1) = 0.19 + 0.25 = 0.44

s2 = T(r2) = ∑2"=0"%=(0)+ (1)+ (2) = 0.19 + 0.25 + 0.21 = 0.65

dan seterusnya, diperoleh :

s3 = 0.81 s5 = 0.95 s7 = 1.00

s4 = 0.89 s6 = 0.98

Karena pada citra ini hanya ada 8 nilai intensitas, maka nilai-nilai sk harus

dibulatkan ke nilai-nilai r yang terdekat :

s0 = 0.19 lebih dekat ke nilai 1/7 (=0.14), maka s0 = 1/7.

s1 = 0.44 lebih dekat ke nilai 3/7 (=0.43), maka s1 = 3/7.

s2 = 0.65 lebih dekat ke nilai 5/7 (=0.71), maka s2 = 5/7.

s3 = 0.81 lebih dekat ke nilai 6/7 (=0.86), maka s3 = 6/7.

s4 = 0.89 lebih dekat ke nilai 6/7 (=0.86), maka s4 = 6/7.

s5 = 0.95 lebih dekat ke nilai 7/7 (=1.00), maka s5 = 7/7.

s6 = 0.98 lebih dekat ke nilai 7/7 (=1.00), maka s6 = 7/7.

s7 = 1.00 lebih dekat ke nilai 7/7 (=1.00), maka s7 = 7/7.

Table 2.3 Hasil Transformasinya :

k rk sk

0 0 1/7

1 1/7 3/7

2 2/7 5/7

3 3/7 6/7

4 4/7 6/7

5 5/7 1

6 6/7 1

7 1 1

Terlihat dari contoh di atas hanya lima nilai intensitas yang terisi yaitu 1/7, 3/7, 5/7, 6/7, dan 1.


(31)

s0 = 1/7, s1 = 3/7, s2 = 5/7, s3 = 6/7, s4 = 1.

Karena r0 = 0 dipetakan ke s0 = 1/7, terdapat 790 pixel hasil transformasi yang

memiliki nilai intensitas 1/7. Selanjutnya, s1 = 3/7 memiliki 1023 pixel, s2 = 5/7

memiliki 850 pixel. Juga, karena r3 dan r4 dipetakan ke nilai yang sama, s3 = 6/7,

maka jumlah pixel yang bernilai 6/7 adalah 656 + 329 = 985. Jumlah pixel hasil tranformasi diringkas pada tabel di bawah ini :

Table 2.4 Histogram Citra Hasil Perataan

sk nk Ps(sk) = nk/n

1/7 790 0.19

3/7 1023 0.25

5/7 850 0.21

6/7 656 + 329 = 958 0.23 7/7 245 + 122 + 81 =

448

0.11

Ps(sk)

0.30 0.25 0.20 0.15 0.10 0.05

0 1/7 2/7 3/7 4/7 5/7 6/7 1 sk

Gambar 2.3. Histogram Citra Hasil Pemetaan.

2.2 CARA MEMBUAT PROGRAM EQUALIZATION LAKUKAN LANGKAH BERIKUT:


(32)

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

Gambar 2.4 Start Program Delphi 2. Kemudian pilih menu file, new, application.

Gambar 2.5 New Application

3. Pada object


(33)

ubah properti captionnya dengan nama Equalization, dan namenya dengan nama FormEqualization.

Gambar 2.6 Object Inspector 4. Simpan unit dan projectnya dengan cara save all.

Gambar 2.7 Save All 5. Beri nama unitnya dengan nama UnitEqualization.


(34)

6. Beri nama projectnya dengan nama ProjectEqualization.

Gambar 2.9 Save ProjectEqualization

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

Gambar 2.10 Menu Image 8. Rubah stretchnya ke true dan autosizenyatrue.


(35)

9. Dengan cara yang sama tambahkan image2 di sebelah kanan image1 kemudian ubah stretchnya ke true dan autosizenya true.

Gambar 2.12 Penambahan Image 2

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

Gambar 2.13 Menu Button

11.Pada oject inspector rubah properti captionnya dengan nama Open, kemudian

namenya dengan nama btOpen.


(36)

12.Tambahkan OpenPictureDialog ke form, dengan cara pilih menu dialog, OpenPictureDialog, lalu klik ke form.

Gambar 2.15 Menu OpenPictureDialog 13.Hasilnya sebagai berikut.

Gambar 2.16 Hasil OpenPictureDialog

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

berikut. var

FormEqualization: TFormEqualization; FileNameImg: string;

implementation {$R *.dfm}

procedure TFormEqualization.btOpenClick(Sender: TObject); begin

if OpenPictureDialog1.Execute then begin

Caption := 'Histogram Equalization : '+ OpenPictureDialog1.FileName;

Image1.Picture.LoadFromFile (OpenPictureDialog1.FileName); Image2.Visible := False;

end;

end; end.


(37)

15. Tambahkan button pada form, pada object inspector rubah properties

captionnya dengan nama Equalization dan Namenya dengan nama

btEqualization.

Gambar 2.17 Button Equalization

16. Tambahkan ProgressBar ke form dengan cara, pilih menu Win32, ProgressBar. Lalu klik ke form, lalu geser kekanan.

Gambar 2.18 Menu ProgresBar 17. Hasilnya sebagai berikut.

Gambar 2.19 Hasil ProgresBar 18. Tambahkan unit baru, dengan cara file, new unit.


(38)

Gambar 2.20 New Unit 19. Simpan unitnya dengan cara save as.

Gambar 2.21 Save All 20. Berinama unitnya dengan nama UnitImageProses.

Gambar 2.22 Save UnitImageProses 21.Hasilnya sebagai berikut.


(39)

Gambar 2.23 Hasil Save UnitImageProses 22. Ketik program berikut ke dalam UnitImageProses.

unit UnitImageProses; interface

uses

WINPROCS, Graphics, ExtCtrls, ComCtrls; type

TFreqHist = array [0..255] of longint;

function ImgGetGray (var Image:TImage; x,y:integer) : byte;

procedure ImgHistogramEqu (var Image:TImage; var ProgressBar1: TProgressBar);

implementation const

PercentR = 0.299; PercentG = 0.587; PercentB = 0.114;

function ByteRange (r:double) : byte; begin

if r<0 then ByteRange:=0

else if r>255 then ByteRange:=255 else ByteRange:=Round(r);

end;

function RgbToGray (Clr:TColor) : byte; var r,g,b:byte;

begin


(40)

g := GetGValue(Clr); b := GetBValue(Clr);

RgbToGray := ByteRange (r*PercentR + g*PercentG + b*PercentB); 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 ImgHistogramEqu (var Image:TImage; var ProgressBar1: TProgressBar);

var

x,y,i:integer; Clr:TColor; ClrGray:byte; Freq, NewColor: TFreqHist;

TotFreq, ImgSize: longint; begin

ProgressBar1.Max := Image.Width-1; ProgressBar1.Position := 0;

{ set Frek[i]=0 }

for i:=0 to 255 do Freq[i]:=0; { hitung frekuensi tiap warna } for x:=0 to Image.Width-1 do for y:=0 to Image.Height-1 do begin

ClrGray := ImgGetGray (Image,x,y); Inc (Freq[ClrGray]);


(41)

{ hitung pixel baru } TotFreq := 0;

ImgSize := Image.Width * Image.Height; for i:=0 to 255 do

begin

Inc (TotFreq, Freq[i]);

NewColor[i] := Round((TotFreq/ImgSize)*255); end;

{ 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);

ClrGray := ByteRange (NewColor[ClrGray]);

Image.Canvas.Pixels[x,y] := RGB (ClrGray,ClrGray,ClrGray); end;

ProgressBar1.Position := x; Image.Repaint;

end; end; end.

23. Kembali ke FormEqualization, caranya klik unitEqualization

Gambar 2.24 Kembali ke FormEqualization


(42)

Gambar 2.25 Menu Toggle Form 25.Doble klik button Equalization.

Gambar 2.26 Klik Button Equalization 26.Lalu ketik program dengan hurup tebal berikut.

procedure TFormEqualization.btEqualizationClick(Sender: TObject); begin

Image2.Visible := True;

Image2.Picture.Graphic := Image1.Picture.Graphic; ImgHistogramEqu(Image2,ProgressBar1);

end;

27.Dibawah implementasi ketik program yang tertulis huruf tebal berikut. implementation

{$R *.dfm}

uses

UnitImageProses;

28. Tambahkan button ke form, lalu pada object inspector rubah properties


(43)

Gambar 2.27 Button Exit 29.Doble klik button Exit, lalu ketik program berikut.

procedure TFormEqualization.btExitClick(Sender: TObject); begin

FormEqualization.Close;

end;

30. Simpan program dengan cara file save all.

31. Compiler progran dengan cara pilih menu Project, Compile ProjectEqualization.

Gambar 2.28 Compile ProjectEqualization


(44)

Gambar 2.29 Run ProjectEqualization 33.Hasil sebagai berikut.

Gambar 2.30 Hasil Program Equalization 34.Keluar dari program klik button Exit.

2.3 PROGRAM HISTOGRAM EQUALIZATION

SELENGKAPNYA ADALAH SEBAGAI BERIKUT:

unit UnitEqualization;

interface uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtDlgs, StdCtrls, ExtCtrls, ComCtrls;

type

TFormEqualization = class(TForm) Image1: TImage;

Image2: TImage; btOpen: TButton;


(45)

btEqualization: TButton; ProgressBar1: TProgressBar; btExit: TButton;

procedure btOpenClick(Sender: TObject);

procedure btEqualizationClick(Sender: TObject); procedure btExitClick(Sender: TObject);

private

{ Private declarations } public

{ Public declarations } end; var FormEqualization: TFormEqualization; FileNameImg: string; implementation {$R *.dfm} uses UnitImageProses;

procedure TFormEqualization.btOpenClick(Sender: TObject); begin

if OpenPictureDialog1.Execute then begin

Caption := 'Histogram Equalization : '+ OpenPictureDialog1.FileName; Image1.Picture.LoadFromFile (OpenPictureDialog1.FileName);

Image2.Visible := False; end;

end;

procedure TFormEqualization.btEqualizationClick(Sender: TObject); begin

Image2.Visible := True;

Image2.Picture.Graphic := Image1.Picture.Graphic; ImgHistogramEqu(Image2,ProgressBar1);

end;

procedure TFormEqualization.btExitClick(Sender: TObject); begin FormEqualization.Close; end; end. unit UnitImageProses; interface


(46)

uses

WINPROCS, Graphics, ExtCtrls, ComCtrls; type

TFreqHist = array [0..255] of longint;

function ImgGetGray (var Image:TImage; x,y:integer) : byte;

procedure ImgHistogramEqu (var Image:TImage; var ProgressBar1: TProgressBar); implementation

const

PercentR = 0.299; PercentG = 0.587; PercentB = 0.114;

function ByteRange (r:double) : byte; begin

if r<0 then ByteRange:=0

else if r>255 then ByteRange:=255 else ByteRange:=Round(r);

end;

function RgbToGray (Clr:TColor) : byte; var r,g,b:byte;

begin

r := GetRValue(Clr); g := GetGValue(Clr); b := GetBValue(Clr);

RgbToGray := ByteRange (r*PercentR + g*PercentG + b*PercentB); 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


(47)

ClrGray := ImgGetGray (Image1,x,y);

Image1.Canvas.Pixels[x,y] := RGB (ClrGray,ClrGray,ClrGray); end;

Image1.Repaint;

ProgressBar1.Position := x; end;

end;

procedure ImgHistogramEqu (var Image:TImage; var ProgressBar1: TProgressBar); var

x,y,i:integer; Clr:TColor; ClrGray:byte; Freq, NewColor: TFreqHist;

TotFreq, ImgSize: longint; begin

ProgressBar1.Max := Image.Width-1; ProgressBar1.Position := 0;

{ set Frek[i]=0 }

for i:=0 to 255 do Freq[i]:=0; { hitung frekuensi tiap warna } for x:=0 to Image.Width-1 do for y:=0 to Image.Height-1 do begin

ClrGray := ImgGetGray (Image,x,y); Inc (Freq[ClrGray]);

end;

{ hitung pixel baru } TotFreq := 0;

ImgSize := Image.Width * Image.Height; for i:=0 to 255 do

begin

Inc (TotFreq, Freq[i]);

NewColor[i] := Round((TotFreq/ImgSize)*255); end;

{ 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);

ClrGray := ByteRange (NewColor[ClrGray]);

Image.Canvas.Pixels[x,y] := RGB (ClrGray,ClrGray,ClrGray); end;

ProgressBar1.Position := x; Image.Repaint;


(48)

end; end; end.


(49)

(50)

BAB 3

WIENER FILTER

3.1 TEORI WIENER FILTER

Wiener filter merupakan discrete time linier finite impulse response (FIR) filter. Prinsip ini telah dikembangkan luas untuk rekontruksi dari sinyal satu dimensi dan citra dua dimensi. Meskipun demikian wiener filter sensitive terhadap nois, tepi filter tersebut dapat mengkontruksi citra secara bagus (Mauridhi , Arif ,2010).

Wiener filter mencari sebuah estimasi f^ yang meminimisasi fungsi kesalahan statistic dapat ditulis menggunakan persamaan

e2 = E { (f f^)2 }………...………(3.1)

Dimensi E{.} adalah nilai argument yang diharapkan. Dimana

f^ (x,y) = w(x,y) * g(x,y)…………...…………..(3.2) Dimana w(x,y) adalah Wiener Filter

Persamaan (3.1) dapat diuraikan menjadi

E{(f(x,y) –f^(x,y))2} = E[f(x,y)2] + E[f^(x,y)2] 2E[f(x,y)f^(x,y)]

=Rf(x,y)+E[{w(x,y)*g(x,y)}2] – 2 E[f(x,y){w(x,y)*g(x,y)}]...(3.3)

Dimana Rf(x,y) = E[f(x,y)2]

Berdasarkan persamaan diatas, maka error nya dapat dinyatakan dalam bentuk persamaan

e2 = Rf(x,y)+w(x,y)*h(x,y)*Rf(x,y)*h(x,y)*w(x,y)*w(x,y)*Rf(x,y)*w(x,y)

2w(x,y)*h(x,y)*Rf(x,y)………...…….(3.4)

Persamaan tersebut diatas dapat ditulis dalam bentuk matrik

e2 = Tr[[Rf]+[w][H][Rf][H]T[w]+[w][Rn][w]T 2[w][H][Rf]]………..(3.5)

Dan

[w]opt = [Rf][H]T[[H][Rf][H]T + [Rn]]-1………...……..(3.6)

Dengan menggunakan aplikasi Transformasi Fourier, maka akan menghasilkan W(u,v) = |&(*&∗(*,+),-(*,+)


(51)

Jika persamaan (3.7) dibagi dengan Sf(u,v),maka akan dihasilkan persamaan W(u,v) = &∗(*,+)

|&(*,+)]2+.!(*,+)/,-(*,+)…………...…….….(3.8)

Dan

F^(u,v) = w(u,v) G(u,v)………...………(3.9)

Dan asumsi bahwa citra dan nois tidak saling berkorelasi dan salah satu dari keduanya adalah zero mean. Estimasi dari citra asli diberikan dalam domain frekwensi dari persamaan diatas dalam bentuk model sebagai berikut:

F^ (u,v) = /(*,+)|&(*,+)|+ 0(*,+)| &∗(*,+)|

|&(*,+)|2+.!(*,+)/,-(*,+) ……...………..(3.10)

H(u,v) adalah transformasi fourier dari mekanisme degradasi representasi suatu fungsi dan G(u,v) adalah spectrum dari image yang terdegradasi. Power spectrum dari nois dan citra asli masing-masing dapat direpresentasikan dalam bentuk persamaan.

Sn(u,v) = |N(u,v)|2………...………(3.11)

Dan sf(u,v) = |F(u,v)|2………...………….(3.12)

3.2 CARA MEMBUAT PROGRAM WIENER FILTER

LAKUKAN LANGKAH BERIKUT:

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

Gambar 3.1 Start Program 2. Kemudian pilih menu file, new, application.


(52)

Gambar 3.2 New Aplication

3. Pada object inspector, ubah properti captionnya dengan nama Wiener Filter, dan namenya dengan nama FormWienerFilter.

Gambar 3.3 Form Wiener Filter 4. Simpan unit dan projectnya dengan cara save all.

Gambar 3.4 Save All 5. Beri nama unitnya dengan nama UnitWienerFilter.


(53)

Gambar 3.5 Unit Wiener Filter 6. Beri nama projectnya dengan nama ProjectWienerFilter.

Gambar 3.6 Project Wiener Filter

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

Gambar 3.7 Menu Image 8. Rubah stretchnya ke true dan autozizenya true.


(54)

Gambar 3.8 Stretch True

9. Dengan cara yang sama tambahkan image2 di sebelah kanan image1 kemudian ubah stretchnya ke true dan auto sizenya true.

Gambar 3.9 Penambahan Image 2

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

Gambar 3.10 Menu Button

11.Pada oject inspector rubah properti captionnya dengan nama Open, kemudian


(55)

Gambar 3.11 Button Open

12.Tambahkan OpenPictureDialog ke form, dengan cara pilih menu dialog,

OpenPictureDialog, lalu klik ke form.

Gambar 3.12 Menu OpenPictureDialog 13.Hasilnya sebagai berikut.

Gambar 3.13 Hasil OpenPictureDialog

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

berikut. var


(56)

FormWienerFilter: TFormWienerFilter; FileNameImg: string;

implementation {$R *.dfm}

procedure TFormWienerFilter.btOpenClick(Sender: TObject); begin

if OpenPictureDialog1.Execute then begin

FileNameImg := OpenPictureDialog1.FileName;

Caption := 'Wiener Filter : '+ 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 WienerFilter dan Namenya dengan nama

btWienerFilter.

Gambar 3.14 Button Wiener Filter

16. Tambahkan ProgressBar ke form dengan cara, pilih menu Win32,

ProgressBar. Lalu klik ke form.

Gambar 3.15 Menu ProgressBar 17. Hasilnya sebagai berikut.


(57)

Gambar 3.16 Hasil Progress Bar 18. Tambahkan unit baru, dengan cara file, new unit.

Gambar 3.17 New Unit 19. Simpan unitnya dengan cara save as.

Gambar 3.18 Save All


(58)

Gambar 3.19 Save UnitImageProses 21.Hasilnya sebagai berikut.

Gambar 3.20 Hasil Unit Image Proses 22. 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);


(59)

procedure ImgFilterWiener (var Image:TImage; Mtrx:TMatrixFilter; nCol,nRow:byte; var ProgressBar1: TProgressBar);

implementation const

PercentR = 0.299; PercentG = 0.587; PercentB = 0.114;

function ByteRange (r:double) : byte; begin

if r<0 then ByteRange:=0

else if r>255 then ByteRange:=255 else ByteRange:=Round(r);

end;

function RgbToGray (Clr:TColor) : byte; var r,g,b:byte;

begin

r := GetRValue(Clr); g := GetGValue(Clr); b := GetBValue(Clr);

RgbToGray := ByteRange (r*PercentR + g*PercentG + b*PercentB); 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;


(60)

end;

procedure ImgFilterWiener (var Image:TImage; Mtrx:TMatrixFilter; nCol,nRow:byte; var ProgressBar1: TProgressBar);

var dx,dy:byte; ImgTemp:TImage;

mean,pSpectrum:Variant; pSpectrumNoise: real; procedure CalculateParameter (x,y:integer);

var row,col:integer; clrGray,tot,tot2:real; begin

tot:=0; tot2:=0; for col:=1 to nCol do for row:=1 to nRow do begin

clrGray := ImgGetGray (ImgTemp, x+col-dx-1, y+row-dy-1); tot := tot + Mtrx[col,row] * clrGray;

tot2 := tot2 + Mtrx[col,row] * Sqr(clrGray); end;

mean[x,y] := tot/(nCol*nRow);

pSpectrum[x,y] := tot2/(nCol*nRow) - mean[x,y]; end;

procedure CalculatePixel (x,y:integer; var clrGray:byte); var c:real;

begin

clrGray := ImgGetGray (ImgTemp, x,y);

c := mean[x,y] + pSpectrum[x,y]/(pSpectrum[x,y]+pSpectrumNoise) * (clrGray-mean[x,y]);

clrGray := ByteRange (c); end;

var

x,y: integer; clrGray: byte; begin

dx := nCol div 2; dy := nRow div 2;

ImgTemp := TImage.Create (Image.Parent);

ImgTemp.Picture.Graphic := Image.Picture.Graphic;;

mean := VarArrayCreate([0,Image.Width-1, 0,Image.Height-1], varSingle); pSpectrum := VarArrayCreate([0,Image.Width-1, 0,Image.Height-1], varSingle);

pSpectrumNoise := 0; { parameter }


(61)

ProgressBar1.Max := Image.Width; ProgressBar1.Position := 0;

pSpectrumNoise := 0;

for x:=dx to Image.Width-1-dx do begin

for y:=dy to Image.Height-1-dy do begin

CalculateParameter (x,y);

pSpectrumNoise := pSpectrumNoise + pSpectrum[x,y]; Image.Canvas.Pixels[x,y] := RGB (clrGray,clrGray,clrGray); end; { for y }

ProgressBar1.Position := x; end; { for x }

pSpectrumNoise := pSpectrumNoise / (Image.Width-dx)/(Image.Height-dy); ProgressBar1.Position := ProgressBar1.Max;

{ filtering process }

for x:=dx to Image.Width-1-dx do begin

for y:=dy to Image.Height-1-dy do begin

CalculatePixel (x,y, clrGray);

Image.Canvas.Pixels[x,y] := RGB (clrGray,clrGray,clrGray); end; { for y }

ProgressBar1.Position := x; end; { for x }

ProgressBar1.Position := ProgressBar1.Max; Image.Repaint;

end; end.

23.Kembali ke FormWienerFilter, caranya klik UnitWienerFilter.

Gambar 3.21 Kembali ke FormWienerFilter 24.Lalu klik toggle form.


(62)

Gambar 3.22 Menu Toggle 25.Doble klik button WienerFilter.

Gambar 3.23 Klik Button Wiener Filter 26.Lalu ketik program berikut.

procedure TFormWienerFilter.btWienerFilterClick(Sender: TObject); var Mtrx:TMatrixFilter; nRow,nCol,r,c:integer;

begin

Image2.Visible := True;

Image2.Picture.Graphic := Image1.Picture.Graphic; begin

nRow:=3; nCol:=3; for c:=1 to nCol do for r:=1 to nRow do Mtrx[r,c]:=1;

ImgFilterWiener (Image2, Mtrx,nCol,nRow, ProgressBar1); end;

end;

27.Dibawah implementasi ketik program yang tertulis huruf tebal berikut. implementation


(63)

uses

UnitImageProses;

28. Tambahkan button ke form, lalu pada object inspector rubah properties

captionnya dengan nama Exit dan namenya dengan nama btExit.

Gambar 3.24 Button Exit 29.Doble klik button Exit, lalu ketik program berikut.

procedure TFormWienerFilter.btExitClick(Sender: TObject); begin

FormWienerFilter.Close;

end;

30.Compiler progran dengan cara pilih menu Project, Compile ProjectWienerFilter.

Gambar 3.25 Menu Compile


(64)

Gambar 3.26 Menu Run 32.Hasil sebagai berikut.

Gambar 3.27 Hasil Wiener Filter 33.Keluar dari program klik button Exit.

3.3 PROGRAM WIENER FILTER SELENGKAPNYA

ADALAH SEBAGAI BERIKUT:

unit UnitWienerFilter;

interface uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtDlgs, StdCtrls, ExtCtrls, ComCtrls;

type

TFormWienerFilter = class(TForm) Image1: TImage;

Image2: TImage; btOpen: TButton;

OpenPictureDialog1: TOpenPictureDialog; btWienerFilter: TButton;


(65)

ProgressBar1: TProgressBar; btExit: TButton;

procedure btOpenClick(Sender: TObject);

procedure btWienerFilterClick(Sender: TObject); procedure btExitClick(Sender: TObject);

private

{ Private declarations } public

{ Public declarations } end; var FormWienerFilter: TFormWienerFilter; FileNameImg: string; implementation {$R *.dfm} uses UnitImageProses;

procedure TFormWienerFilter.btOpenClick(Sender: TObject); begin

if OpenPictureDialog1.Execute then begin

FileNameImg := OpenPictureDialog1.FileName;

Caption := 'Wiener Filter : '+ OpenPictureDialog1.FileName; Image1.Picture.LoadFromFile (OpenPictureDialog1.FileName); Image2.Visible := False;

end; end;

procedure TFormWienerFilter.btWienerFilterClick(Sender: TObject); var Mtrx:TMatrixFilter; nRow,nCol,r,c:integer;

begin

Image2.Visible := True;

Image2.Picture.Graphic := Image1.Picture.Graphic; begin

nRow:=3; nCol:=3; for c:=1 to nCol do for r:=1 to nRow do Mtrx[r,c]:=1;

ImgFilterWiener (Image2, Mtrx,nCol,nRow, ProgressBar1); end;

end;


(66)

begin FormWienerFilter.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 ImgFilterWiener (var Image:TImage; Mtrx:TMatrixFilter; nCol,nRow:byte; var ProgressBar1: TProgressBar);

implementation const

PercentR = 0.299; PercentG = 0.587; PercentB = 0.114;

function ByteRange (r:double) : byte; begin

if r<0 then ByteRange:=0

else if r>255 then ByteRange:=255 else ByteRange:=Round(r);

end;

function RgbToGray (Clr:TColor) : byte; var r,g,b:byte;

begin

r := GetRValue(Clr); g := GetGValue(Clr); b := GetBValue(Clr);

RgbToGray := ByteRange (r*PercentR + g*PercentG + b*PercentB); end;


(67)

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 ImgFilterWiener (var Image:TImage; Mtrx:TMatrixFilter; nCol,nRow:byte; var ProgressBar1: TProgressBar);

var dx,dy:byte; ImgTemp:TImage;

mean,pSpectrum:Variant; pSpectrumNoise: real; procedure CalculateParameter (x,y:integer);

var row,col:integer; clrGray,tot,tot2:real; begin

tot:=0; tot2:=0; for col:=1 to nCol do for row:=1 to nRow do begin

clrGray := ImgGetGray (ImgTemp, x+col-dx-1, y+row-dy-1); tot := tot + Mtrx[col,row] * clrGray;

tot2 := tot2 + Mtrx[col,row] * Sqr(clrGray); end;

mean[x,y] := tot/(nCol*nRow);

pSpectrum[x,y] := tot2/(nCol*nRow) - mean[x,y]; end;

procedure CalculatePixel (x,y:integer; var clrGray:byte); var c:real;

begin

clrGray := ImgGetGray (ImgTemp, x,y);


(68)

* (clrGray-mean[x,y]); clrGray := ByteRange (c);

end; var

x,y: integer; clrGray: byte; begin

dx := nCol div 2; dy := nRow div 2;

ImgTemp := TImage.Create (Image.Parent);

ImgTemp.Picture.Graphic := Image.Picture.Graphic;;

mean := VarArrayCreate([0,Image.Width-1, 0,Image.Height-1], varSingle); pSpectrum := VarArrayCreate([0,Image.Width-1, 0,Image.Height-1], varSingle); pSpectrumNoise := 0;

{ parameter }

ProgressBar1.Max := Image.Width; ProgressBar1.Position := 0;

pSpectrumNoise := 0;

for x:=dx to Image.Width-1-dx do begin

for y:=dy to Image.Height-1-dy do begin

CalculateParameter (x,y);

pSpectrumNoise := pSpectrumNoise + pSpectrum[x,y]; Image.Canvas.Pixels[x,y] := RGB (clrGray,clrGray,clrGray); end; { for y }

ProgressBar1.Position := x; end; { for x }

pSpectrumNoise := pSpectrumNoise / (Image.Width-dx)/(Image.Height-dy); ProgressBar1.Position := ProgressBar1.Max;

{ filtering process }

for x:=dx to Image.Width-1-dx do begin

for y:=dy to Image.Height-1-dy do begin

CalculatePixel (x,y, clrGray);

Image.Canvas.Pixels[x,y] := RGB (clrGray,clrGray,clrGray); end; { for y }

ProgressBar1.Position := x; end; { for x }

ProgressBar1.Position := ProgressBar1.Max; Image.Repaint;


(69)

end; end.


(70)

BAB 4

GLOBAL THRESHOLDING

4.1 DASAR TEORI GLOBAL THRESHOLDING

Tresholding adalah suatu metode untuk menghasilkan citra biner hitam (0) dan putih (1), dengan menggunkan rumus sebagai berikut:

1(2,3)= 41 "5#6-(2,3) ≥ 8

0 "5#6-(2,3)<89……….………..4.1

Dengan g(x,y) adalah citra biner dari citra grascale f(x,y), dan T merupakan nilai ambang.

4.2 CARA MEMBUAT PROGRAM THRESOLDING:

1. Klik tombol start lalu Program, Borland Delphi 7, Delphi 7. Nanti akan muncul gambar berikut:

Gambar 4.1 Start Program

2. P a d a

o b


(71)

ject inspector berinama captionnya dengan Global Thresholding dan namenya

dengan nama FormGlobalThreshold.

Gambar 4.2 Form Global Thresholding

3. Tambahkan image1, image2, OpenPictureDialog dan button1 ke form. Pada

object inspector stetch kedua image di ganti true, kemudian caption pada button diganti dengan Open, Namenya dengan btOpen.

Gambar 4.3


(72)

4. Simpan project dan unitnya dengan cara save all.

Gambar 4.4 Save All

5. Beri nama unitnya dengan nama UnitGlobalThresolding. Projectnya dengan nama ProjectGlobalThresolding.


(73)

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.btOpenClick(Sender: 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.


(74)

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


(75)

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


(76)

else if r>255 then ByteRange:=255 else ByteRange:=Round(r);

end;

function RgbToGray (Clr:TColor) : byte; var r,g,b:byte;

begin

r := GetRValue(Clr); g := GetGValue(Clr); b := GetBValue(Clr);

RgbToGray := ByteRange (r*PercentR + g*PercentG + b*PercentB); 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;


(77)

for x:=0 to Image.Width-1 do for y:=0 to Image.Height-1 do begin

ClrGray := ImgGetGray (Image,x,y); if ClrGray<thres 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 := m1/n1; m2 := m2/n2;

thres := (m1+m2) / 2; Inc (counter);

ProgressBar1.Position := counter;

until (Abs(thresOld-thres)<=3)or(counter=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 ClrGray<thres 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


(78)

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.btGlobalThresoldingClick(Sender: 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 := IntToStr(Round(thres));

end;

15. Tambahkan button ke dalam form lalu captionnya diganti dengan Exit, namenya diberinama btExit.


(79)

Gambar 4.11 Button Exit

16.Doble klik button exit kemudin ketik program berikut.

procedure TFormGlobalThreshold.btExitClick(Sender: 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


(80)

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 = class(TForm) Image1: TImage; Image2: TImage; btOpen: TButton; OpenPictureDialog1: TOpenPictureDialog; btGlobalThresolding: TButton; ProgressBar1: TProgressBar; EditThreshold: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; btExit: TButton;

procedure btOpenClick(Sender: TObject);

procedure btGlobalThresoldingClick(Sender: TObject); procedure btExitClick(Sender: TObject);

private

{ Private declarations } public

{ Public declarations } end; var FormGlobalThreshold: TFormGlobalThreshold; FileNameImg: string; implementation {$R *.dfm} uses ImageProses;


(81)

procedure TFormGlobalThreshold.btOpenClick(Sender: 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.btGlobalThresoldingClick(Sender: 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 := IntToStr(Round(thres));

end;

procedure TFormGlobalThreshold.btExitClick(Sender: 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);


(82)

const

PercentR = 0.299; PercentG = 0.587; PercentB = 0.114;

function ByteRange (r:double) : byte; begin

if r<0 then ByteRange:=0

else if r>255 then ByteRange:=255 else ByteRange:=Round(r);

end;

function RgbToGray (Clr:TColor) : byte; var r,g,b:byte;

begin

r := GetRValue(Clr); g := GetGValue(Clr); b := GetBValue(Clr);

RgbToGray := ByteRange (r*PercentR + g*PercentG + b*PercentB); 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


(83)

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 ClrGray<thres 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 := m1/n1; m2 := m2/n2;

thres := (m1+m2) / 2; Inc (counter);

ProgressBar1.Position := counter;

until (Abs(thresOld-thres)<=3)or(counter=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 ClrGray<thres then

Image.Canvas.Pixels[x,y] := clWhite; end;

end;

ProgressBar1.Position := ProgressBar1.Max; end;

end.

BAB 5

HISTOGRAM CUT


(84)

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 > imgsizebaru/2.

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

0 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)


(85)

13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 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 81/2 = 40,5).

Gray Frek Frek Kum

Keterangan

0 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 >= imgSize/2= 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 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 Total 116

3.Kemudian dilakukan transformasi linier grayBaru = clrGray / clrGrayMax* 20 (karena skala maksimum 20, pada program sebenarnya 255).


(86)

Gray Frek Gray Baru Keterangan

0 10 0 1 20 0 2 5 0 3 8 0 4 7 0

5 11 0 Perubahan nilai gray, lebih kecil dari threshold maka lebih gelap

6 10 0 6 < 7 maka gray baru = 0

7 20 13 Gray baru = 7/11 * 20 =12,7 = 13 8 5 15 Gray baru = 8/11 * 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 0

13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 Total 116

4.Akhirnya dihasilkan image yang lebih kontras dengan distribusi frekuensi sebagai berikut:

Gray Frek lama Frek baru keterangan

0 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 0

13 0 20 Hasil perhitungan piksel baru diatas 14 0


(87)

15 0 5 Hasil perhitungan piksel baru diatas 16 0 5 Hasil perhitungan piksel baru diatas 17 0

18 0 7 Hasil perhitungan piksel baru diatas 19 0

20 0 8 Hasil perhitungan piksel baru diatas Total 116 116

5. ulangi langkah 2 sampai langkah 4, Proses histogram thresholding bias dilakukan berulangkali sehingga dihasilkan image yang semakin kontras. Makanya pada procedurenya, penulis tambahkan parameter nRepeat.


(88)

5.2 CARA MEMBUAT PROGRAM HISTOGRAMCUT

LAKUKAN LANGKAH BERIKUT:

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

Gambar 5.1 Start Program 2. Kemudian pilih menu file, new, application.

Gambar 5.2 New Aplication

3. Pada object inspector, ubah properti captionnya dengan nama HistogramCut, dan namenya dengan nama FormHistogramCut.


(89)

Gambar 5.3 Form Histogram Cut 21.Simpan unit dan projectnya dengan cara save all.

Gambar 5.4 Save All

22.Beri nama unitnya dengan nama UnitHistogramCut.

Gambar 5.5 Save UnitHistogramCut 23.Beri nama projectnya dengan nama ProjectHistogramCut.


(90)

Gambar 5.6 Save ProjectHistogramCut

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

Gambar 5.7 Menu Image

25.Pada properties rubah stretchnya ke true dan autosizenya true.

Gambar 5.8 AutoSize True

26.Dengan cara yang sama tambahkan image2 di sebelah kanan image1 kemudian ubah stretchnya ke true dan autosizenya true.


(91)

Gambar 5.9 Penambahan Image 2

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

Gambar 5.10 Menu Button

28.Pada oject inspector rubah properti captionnya dengan nama Open, kemudian

namenya dengan nama btOpen.

Gambar 5.11 Button Open

29.Tambahkan OpenPictureDialog ke form, dengan cara pilih menu dialog, OpenPictureDialog, lalu klik ke form.


(92)

Gambar 5.12 Menu OpenPictureDialog 30.Hasilnya sebagai berikut.

Gambar 5.13 Hasil Open Dialog

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

berikut. var

FormHistogramCut: TFormHistogramCut; FileNameImg: string;

implementation {$R *.dfm}

procedure TFormHistogramCut.btOpenClick(Sender: TObject); begin

if OpenPictureDialog1.Execute then begin

FileNameImg := OpenPictureDialog1.FileName;

Caption := 'Histogram Cut : '+ OpenPictureDialog1.FileName; Image1.Picture.LoadFromFile (OpenPictureDialog1.FileName); Image2.Visible := False;

end;


(93)

32. Tambahkan button pada form, pada object inspector rubah properties

captionnya dengan nama HistogramCut dan Namenya dengan nama

btHistogramCut.

Gambar 5.14 Button HistogramCut

33. Tambahkan ProgressBar ke form dengan cara, pilih menu Win32, ProgressBar. Lalu klik ke form.

Gambar 5.15 Menu ProgresBar 34. Hasilnya sebagai berikut.


(94)

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

Gambar 5.17 New Unit 36. Simpan unitnya dengan cara save as.

Gambar 5.18 Save As 37. Berinama unitnya dengan nama UnitImageProses.


(95)

38.Hasilnya sebagai berikut.

Gambar 5.20 Hasil SaveUnitImageProses 39. 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);

procedure ImgHistogramCut (var Image:TImage; nRepeat:integer; var ProgressBar1: TProgressBar);

implementation const

PercentR = 0.299; PercentG = 0.587; PercentB = 0.114;

function ByteRange (r:double) : byte; begin

if r<0 then ByteRange:=0


(96)

else ByteRange:=Round(r); end;

function RgbToGray (Clr:TColor) : byte; var r,g,b:byte;

begin

r := GetRValue(Clr); g := GetGValue(Clr); b := GetBValue(Clr);

RgbToGray := ByteRange (r*PercentR + g*PercentG + b*PercentB); 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 ImgHistogramCut (var Image:TImage; nRepeat:integer; var ProgressBar1: TProgressBar); const BLACK_THRES=2; var x,y,i,counter:integer; clrGray,clrGrayMax:byte; Freq: TFreqHist;

TotFreq, ImgSize: longint; thres: real;

begin

ProgressBar1.Max := Image.Width-1; ProgressBar1.Position := 0;


(1)

Gambar 15.15 Hasil Program LogIn

15.3 PROGRAM SELENGKAPNYA ADALAH

SEBAGAI BERIKUT:

unit UnitLogIn;

interface uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type

TFormLogIn = class(TForm) Label1: TLabel;

Label2: TLabel; Edit1: TEdit; Edit2: TEdit; btLogIn: TButton; btExit: TButton;

procedure btLogInClick(Sender: TObject); procedure btExitClick(Sender: TObject); private

{ Private declarations } public

{ Public declarations } end;

var


(2)

implementation uses UnitAplikasi; {$R *.dfm}

procedure TFormLogIn.btLogInClick(Sender: TObject); begin

if (Edit1.Text='username') and (Edit2.Text='pasword') then begin

MessageBox(0,'Log In

Sukses','information',MB_OK+MB_ICONINFORMATION); FormLogIn.Hide;

FormAplikasi.Show; end

else

MessageBox(0,'Log In Gagal','error',MB_OK+MB_ICONERROR); end;

procedure TFormLogIn.btExitClick(Sender: TObject); begin

FormLogIn.Close; end;

end.

unit UnitAplikasi;

interface uses

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

type

TFormAplikasi = class(TForm) private

{ Private declarations } public

{ Public declarations } end;

var


(3)

implementation uses UnitLogIn; {$R *.dfm}


(4)

DAFTAR PUSTAKA

1. Anak Agung Ngurah Gunawan, Model Penentuan Kelainan Mamma Berdasarkan

Besaran Fisis Film Hasil Mammografi, Desertasi, Program Studi S3 MIPA UNAIR, 2013.

2. Anak Agung Ngurah Gunawan, Suhariningsih, Triyono and Widodo, Determination of Physical Parameter Model for the Photo Film Mammografphic X-Ray Results on the Breast Cancer Histology Classification, International Journal of Contemporary Mathematical Sciences, Vol.7, n0. 45-48, ISSN 1312-7586, pp. 2236-2244, 2012. 3. Anak Agung Ngurah Gunawan, Suhariningsih, Triyono and Yasin, Conversion of

Images Into Numerical Model to Determine the Condition of Breast Health on Contralateral, Applied Mathematical Sciences, Vol. 7, ISSN 1314-7552, 2013. 4. Antony Pranata, Pemrograman Borlan Delphi, Edisi 2, AndiYogyakarta, 1998. 5. Darma Putra, Sistem Biometrika, AndiYogyakarta, 2009.

6. Darma Putra, Pengolahan Citra Digital, AndiYogyakarta, 2010.

7. Djoko Pramono, Mudah Menguasai Delphi 3.0, Jilid 1, 2, Elex Media Komputindo, 1999.

8. Eko Prasetyo, Pengolahan Citra Digital Dan Aplikasinya Menggunakan Matlab, AndiYogyakarta,2011.

9. Fadlisyah dkk, Pengolahan Citr Menggunakan Delphi, Graha Ilmu, 2008

10. Jon Matcho dan David R. Faulkner, Panduan Penggunaan Delphi, AndiYogyakarta, 1999.

11.Marvin Ch. Wijaya dan Agus Prijono, Pengolahan Citra Dgital Menggunakan MatLab, Informatika Bandung,2007.

12.Mauridhi Hery Purnomo, dkk, Konsep Pengolahan Citra Digital dan Ekstraksi Fitur, Graha Ilmu, 2010.

13. Rafael C. Gonzalez and Richard E. Wo0ds, Digital Image Processing, 1993.

14.Rinaldi Munir, Pengolahan Citra Digital Dengan Pendekatan Algoritmik, Informatika Bandung, 2004.

15. Riyanto Sigit, dkk, Step By Step Pengolahan Citra Digital, AndiYogyakarta, 2005. 16.T.Sutoyo, dkk., Teori Pengolahan Citra Digital, AndiYogyakarta, 2009.

17. Usman Ahmad, Pengolahan Citra Digital Dan Teknik Pemrograman, Graha Ilmu, 2005.

18.Raman Maini & Dr. Himanshu Aggarwal, International Journal of Image Processing (IJIP), Volume (3) : Issue (1), pp. 1-12. 2013.

19.http://www.cse.unr.edu/~bebis/CS791E/Notes/EdgeDetection.pdf. 20.http://www.math.uci.edu/icamp/courses/math77c/demos/hist_eq.pdf

21. Robert Krutsch and David Tenorio, Histogram Equalization, Freescale Semiconductor, Document Number: AN4318, Rev. 0, pp 1- 8, June 2011

22.http://cronos.rutgers.edu/~lrr/dsp%20design%20course/lectures_2012_new/pdf_ 2012/Histogram%20Processing.pdf

23.http://www.cpe.eng.cmu.ac.th/wp-content/uploads/CPE752_08.pdf

24.http://www.math.tau.ac.il/~turkel/notes/threshold.pdf

25. Joshua Goodman, Global Thresholding and Multiple-Pass Parsing, Harvard University 40 Oxford St. Cambridge, MA 02138 goodman@das.harvard.edu,

http://acl.ldc.upenn.edu/W/W97/W97-0302.pdf

26.Gleb V.Tcheslavsk, Morphological Image Processing: Basic Concepts,

http://ee.lamar.edu/gleb/dip/10-1%20- %20 Morphological %20Image%20 Processing.pdf.


(5)

27.Harvey Rhody, Basic Morphological Image Processing, 2005.

http://www.cis.rit.edu/class/simg782/lectures/lecture_03/lec782_05_03.pdf. 28.Shahbe Mat Desa, Qussay A. Salih, Image Subtraction for Real Time Moving Object

Extraction, http://vc.cs.nthu.edu.tw/home/paper/codfiles/ycchu/


(6)

RIWAYAT HIDUP

Anak Agung Ngurah Gunawan

Lahir di Denpasar, 25 September 1962.

Pendidikan : S1 di FMIPA Universitas Airlangga Surabaya, tahun 1982. S2 di Teknik Informatika, Institut Teknologi Sepuluh November (ITS) Surabaya, tahun 1997. S3 di Program Studi MIPA Universitas Airlangga Surabaya, tahun 2010.

Pekerjaan : Sejak Tahun 1992 hingga kini mengabdi di Jurusan Fisika FMIPA Universitas Udayana Denpasar Bali. Konsentrasi penelitian pada pengolahan citra digital.

Penulisan Journal International dan Paten :

1) Anak Agung Ngurah Gunawan, Suhariningsih, Triyono and Widodo, Determination of Physical Parameter Model for the Photo Film Mammografphic X-Ray Results on the Breast Cancer Histology Classification, International Journal of Contemporary Mathematical Sciences, Vol.7, n0. 45-48, ISSN 1312-7586, pp. 2236-2244, 2012.

2) Anak Agung Ngurah Gunawan, Suhariningsih, Triyono and Yasin, Conversion of Images Into Numerical Model to Determine the Condition of Breast Health on Contralateral, Applied Mathematical Sciences, Vol. 7, ISSN 1314-7552, 2013. 3) Penentuan Histopatologi Pada Ca Mamma Menggunakan Besaran Fisis Film

Hasil Mammografi, P00201300327, tahun 2013.

4) Penentuan Stadium Ca Mamma Menggunakan Besaran Fisis Film Hasil Mammografi, P00201300328, tahun 2013.