pcd - modul praktikum image processing

22
Image Processing Modul with Delphi Made Windu Antara Kesiman, S.T, M.Sc Jurusan Pendidikan Teknik Informatika Universitas Pendidikan Ganesha

Upload: sandi-fajar-rodiyansyah

Post on 27-Dec-2015

126 views

Category:

Documents


5 download

DESCRIPTION

Ini adalah modul praktikum pengolahan citra digital

TRANSCRIPT

Page 1: PCD - Modul Praktikum Image Processing

Image Processing Modul with Delphi Made Windu Antara Kesiman, S.T, M.Sc

Jurusan Pendidikan Teknik Informatika Universitas Pendidikan Ganesha

Page 2: PCD - Modul Praktikum Image Processing

Image Processing Modul with Delphi - Made Windu Antara Kesiman, S.T, M.Sc

Jurusan Pendidikan Teknik Informatika – Universitas Pendidikan Ganesha 2

1. Menyiapkan Form Menu Pada bagian 1 ini, kita akan membuat aplikasi menu untuk fungsi-fungsi pengolahan citra yang akan kita kembangkan selanjutnya. 1. Buat sebuah folder bernama : ProjectImageProcessingModul Folder ini bisa Anda buat di lokasi manapun, tergantung struktur folder dokumen yang Anda inginkan. Di dalam folder inilah nantinya kita akan menyimpan seluruh file-file yang dihasilkan Delphi saat kita mengembangkan aplikasi ini lebih lanjut. 2. Bukalah Program Delphi Anda ! Pertama kali dibuka, Delphi secara default akan menampilkan sebuah Form bernama Form1, dan sebuah Unit bernama Unit1.pas

3. Menyimpan aplikasi sebagai sebuah project Klik menu File→Save All, pilih folder ProjectImageProcessingModul yang Anda buat tadi untuk menyimpan project Delphi ini.

4. Ganti nama Unit1.pas menjadi UnitMenu.pas, klik Save

Page 3: PCD - Modul Praktikum Image Processing

Image Processing Modul with Delphi - Made Windu Antara Kesiman, S.T, M.Sc

Jurusan Pendidikan Teknik Informatika – Universitas Pendidikan Ganesha 3

5. Kemudian ganti nama Project1.dpr menjadi ProjectImageProcessingModul.dpr, klik Save

6. Maka sampai tahap ini, Anda telah menyimpan project untuk aplikasi ini, yang baru memiliki satu buah unit, yaitu UnitMenu.pas 7. Mengganti properti sebuah komponen dengan Object Inspector Ganti properti Caption dari Form1 menjadi Image Processing Modul, dan ganti properti Name dari Form1 menjadi FormMenu, dengan meng-edit property Caption dan Name dari Form1 pada Object Inspector yang ada pada pojok kiri bawah layar Delphi Anda. Bila Object Inspector belum ada, klik menu View→Object Inspector dari Delphi untuk menampilkan Object Inspector. Pada Object Inspector inilah kita bisa melihat seluruh properti dan event yang dimiliki oleh komponen-komponen yang disediakan oleh Delphi. Properti dari sebuah komponen merupakan atribut-atribut yang dimiliki komponen tersebut, misalnya warna, ukuran, nama, dsb. Sedangkan event dari komponen menunjukkan aksi-aksi yang bisa dikenakan pada komponen tersebut, setelah kita tambahkan kode program yang kita inginkan terjadi pada event tersebut.

Page 4: PCD - Modul Praktikum Image Processing

Image Processing Modul with Delphi - Made Windu Antara Kesiman, S.T, M.Sc

Jurusan Pendidikan Teknik Informatika – Universitas Pendidikan Ganesha 4

8. Menambahkan sebuah komponen MainMenu pada form. Komponen-komponen yang disediakan Delphi bisa dilihat dan dipilih pada deretan tab-tab toolbar pada bagian atas layar Delphi Anda. Tambahkan komponen MainMenu pada FormMenu Anda dengan mengklik Tab Standar. Klik komponen MainMenu, kemudian klik di area FormMenu Anda. Sebuah icon komponen MainMenu akan muncul di FormMenu Anda, letakkan di bagian pinggir area form, icon ini tidak akan tampak saat program Anda di run nantinya.

9. Mengisi komponen MainMenu untuk membuat sebuah struktur menu pada aplikasi Double klik icon MainMenu tadi, maka akan muncul FormMenu.MainMenu1, artinya komponen MainMenu yang bernama MainMenu1 berada/merupakan bagian dari FormMenu. Tambahkan sebuah menu dengan mengetik pada properti Caption pada Object Inspector, ketik File. Maka akan tampak sebuah menu File pada FormMenu Anda

Page 5: PCD - Modul Praktikum Image Processing

Image Processing Modul with Delphi - Made Windu Antara Kesiman, S.T, M.Sc

Jurusan Pendidikan Teknik Informatika – Universitas Pendidikan Ganesha 5

Tambahkan menu-menu lain, beserta sub menu lainnya sesuai kebutuhan Anda. Untuk menambahkan atau menghapus menu, selalu dengan mengklik terlebih dahulu komponen MainMenu yang sudah Anda buat tadi. Klik bagian teks kosong warna putih pada menu, lalu ganti Caption pada Object Inspector dengan nama menu atau sub menu yang Anda inginkan. Contoh : Sebagai contoh awal aplikasi pengolahan citra yang akan kita kembangkan, buatlah struktur menu sebagai berikut : File Open Image Close Image Save Image Quit Application Image Info Image Input Image Output Pixel Processing Change Pixel Value Image Negative Setelah membuat struktur menu tersebut, close dengan mengklik tanda silang pada pojok kanan atas form komponen menu tersebut. Perkecil ukuran FormMenu dengan men-drag sisi-sisi form. Buatlah ukuran FormMenu sekedar cukup untuk menampilkan menu-menu yang telah kita buat. Jangan lupa untuk selalu menyimpan hasil project terakhir dengan klik menu File→Save All. 10. Run aplikasi Untuk me-run aplikasi Delphi, tekan F9, atau gunakan menu Run→Run pada Delphi, atau klik icon segitiga berwarna hijau pada toolbar Delphi. Bila tidak ada kesalahan pada langkah 1 – langkah 9 di atas, maka bila di run, aplikasi Anda saat ini akan menghasilkan tampilan sebagai berikut :

Page 6: PCD - Modul Praktikum Image Processing

Image Processing Modul with Delphi - Made Windu Antara Kesiman, S.T, M.Sc

Jurusan Pendidikan Teknik Informatika – Universitas Pendidikan Ganesha 6

2. Menyiapkan Form Penampil Citra Pada bagian 2 ini, kita akan menyiapkan form untuk menampilkan citra asal yang akan kita olah, dan juga untuk menampilkan citra hasil pengolahan. 1. Membuat form baru untuk menempatkan image input Untuk menambahkan sebuah form baru pada aplikasi yang sudah kita buat, klik menu File→New→Form dari Delphi.

2. Seperti pada bagian 1, pada Object Inspector, ganti properti Caption form baru tersebut dengan Image Input. Ganti properti Name dari form tersebut dengan nama FormImageInput. Simpan unit untuk form tersebut dengan nama UnitImageInput.pas pada folder yang sama, ProjectImageProcessingModul 3. Menambahkan komponen Image pada form Tambahkan komponen Image pada FormImageInput. Komponen Image bisa ditemukan pada Tab Additional pada barisan toolbar di bagian atas layar Delphi Anda. Ganti properti Name untuk komponen Image tersebut dengan ImageInput. Ukurannya tidak perlu terlalu besar. Komponen ImageInput inilah yang akan kita gunakan untuk menampilkan sebuah citra yang akan diolah. 4. Properti Autosize dari komponen Image dan form

Page 7: PCD - Modul Praktikum Image Processing

Image Processing Modul with Delphi - Made Windu Antara Kesiman, S.T, M.Sc

Jurusan Pendidikan Teknik Informatika – Universitas Pendidikan Ganesha 7

Ukuran komponen ImageInput ini bisa disesuaikan dengan ukuran image input nanti, dengan cara mengubah properti AutoSize dari komponen ImageInput menjadi True. Kemudian ubah pula properti AutoSize dari FormImageInput menjadi True. 5. Lakukan langkah-langkah yang sama untuk membuat sebuah form dan komponen Image untuk menampilkan image output. Beri nama form tersebut FormImageOutput, dengan Caption Image Output, dan tambahkan komponen Image dengan nama ImageOutput, dengan AutoSize bernilai True. Simpan unit dengan form tersebut dengan nama UnitImageOutput.pas 6. Simpan aplikasi Anda sampai tahap ini ! Run aplikasi Anda, akan ditampilkan FormMenu yang pertama, sedangkan dua buah form penampil citra yang baru kita tambahkan tidak akan muncul. FormMenu adalah form utama pada aplikasi Anda, secara default Delphi akan menampilkan FormMenu saja di awal aplikasi Anda. Untuk bisa mengakses form-form lain dalam aplkasi kita, akan dilanjutkan pada bagian 3.

3. Menambahkan dan mengakses sebuah unit dari unit lain 1. Keyword uses pada kode program Delphi Keyword uses pada kode program Delphi menunjukkan unit-unit lain yang bisa digunakan oleh sebuah unit, baik unit yang telah disediakan oleh Delphi maupun unit yang baru didefinisikan oleh pembuat aplikasi. Lihatlah bagian text kode program dari UnitMenu.pas. Perhatikan bagian uses ! Tambahkan di bagian akhir sebelum tanda titik koma (;) UnitImageInput, UnitImageOutput (tanpa .pas). Dengan demikian, FormImageInput dan FormImageOutput yang merupakan bagian dari UnitImageInput.pas dan UnitImageOutput.pas bisa dipanggil nantinya dari FormMenu yang merupakan UnitMenu.pas. Demikian juga semua komponen-komponen yang nantinya akan ada di UnitImageInput.pas dan UnitImageOutput.pas akan bisa diakses/dipanggil dari UnitMenu.pas

4. Menggunakan komponen OpenPictureDialog dan SavePictureDialog 1. Menampilkan sebuah form yang telah ada pada aplikasi Tampilkan kembali FormMenu dengan klik menu View→Form. Akan tampil daftar form-form yang telah kita buat di project ini. Pilih FormMenu untuk ditampilkan.

Page 8: PCD - Modul Praktikum Image Processing

Image Processing Modul with Delphi - Made Windu Antara Kesiman, S.T, M.Sc

Jurusan Pendidikan Teknik Informatika – Universitas Pendidikan Ganesha 8

2. Tambahkan komponen OpenPictureDialog pada FormMenu kita. Komponen OpenPictureDialog dapat ditemukan pada Tab Dialogs deretan toolbar Delphi. 3. Tambahkan juga komponen SavePictureDialog yang ditemukan juga pada Tab Dialogs yang sama, letakkan di FormMenu tersebut. 4. Ganti properti Name dari kedua komponen tersebut menjadi OpenPictureDialog dan SavePictureDialog. Komponen OpenPictureDialog dan SavePictureDialog adalah komponen Delphi yang membantu kita untuk memilih dan membuka file citra dan menampilkannya pada komponen Image, dan juga sebaliknya untuk menyimpan sebuah citra pada komponen Image ke sebuah file citra.

5. Merancang struktur data untuk modul pengolahan citra Sebelum melanjutkan rancangan antarmuka/visual dari project ini, kita harus menyiapkan rancangan struktur data untuk mempermudah implementasi algoritma-algoritma pengolahan citra nantinya. Rancangan struktur data dan fungsi-fungsi dasar yang akan digunakan selanjutnya akan disimpan dalam unit yang terpisah dengan unit-unit untuk tampilan antarmuka/visual, sehingga akan memudahkan kita dalam pengembangan aplikasi lebih lanjut. Bila di masa mendatang perlu dilakukan integrasi dari satu aplikasi ke aplikasi lainnya yang menggunakan struktur data dan fungsi-fungsi dasar yang sama, kita tidak akan bergantung pada syntax-syntax yang dibawa oleh program visual yang kita gunakan sebelumnya. 1. Menambah sebuah unit tanpa form pada aplikasi Klik menu File→New→Unit dari Delphi untuk menambahkan sebuah unit tanpa form (hanya akan berisi kode program). Simpan terlebih dahulu unit tersebut dengan nama UnitImageMatrices.pas di folder project yang sama. 2. Mendefinisikan type, fungsi dan variabel Pada UnitImageMatrices.pas tersebut, diantara interface dan implementation tambahkan kode program ini : uses Windows, Graphics; type Matriks = array of array of integer; function ImageBinerToMatriks(ImageBiner:TBitmap):Matriks; function MatriksToImageBiner(M:Matriks):TBitmap; function ImageGreyToMatriks(ImageGrey:TBitMap):Matriks; function MatriksToImageGrey(M:Matriks):TBitMap; function ImageRGBToMatriksR(ImageRGB:TBitMap):Matriks; function ImageRGBToMatriksG(ImageRGB:TBitMap):Matriks; function ImageRGBToMatriksB(ImageRGB:TBitMap):Matriks; function MatriksToImageRGB(MR,MG,MB:Matriks):TBitMap; var FileNameImageInput,FileNameImageOutput:string; BitmapImageInput,BitmapImageOutput:TBitMap; MatriksImageInput,MatriksImageOutput:Matriks; MatriksRImageInput,MatriksGImageInput,MatriksBImageInput:Matriks; MatriksRImageOutput,MatriksGImageOutput,MatriksBImageOutput:Matriks;

Page 9: PCD - Modul Praktikum Image Processing

Image Processing Modul with Delphi - Made Windu Antara Kesiman, S.T, M.Sc

Jurusan Pendidikan Teknik Informatika – Universitas Pendidikan Ganesha 9

Penjelasan dari kode program tersebut sebagai berikut : uses Windows, Graphics; Artinya UnitImageMatrices.pas ini menggunakan unit Windows dan Graphics yang telah disediakan oleh Delphi. Unit Graphics merupakan tempat didefinisikannya TBitMap, yang kita gunakan untuk menyimpan segala informasi tentang sebuah file citra. Sedangkan unit Windows merupakan tempat didefinisikannya beberapa fungsi yang berkaitan dengan pembentukan dan pengaksesan warna, misalnya fungsi RGB (untuk membentuk nilai RGB sebuah pixel), fungsi GetRValue (untuk mengakses nilai warna Red dari sebuah pixel warna), demikian juga fungsi GetGValue dan GetBValue. Penggunaan fungsi-fungsi tersebut akan kita lihat pada bagian implementasi selanjutnya. type Matriks = array of array of integer; Artinya kita mendefinisikan sebuah type baru bernama Matriks, yang didefinisikan sebagai array dua dimensi dari data integer. Type Matriks ini memiliki definisi yang sama dengan konsep matriks di bidang matematika yang sudah kita kenal bersama. function ImageBinerToMatriks(ImageBiner:TBitmap):Matriks; function MatriksToImageBiner(M:Matriks):TBitmap; function ImageGreyToMatriks(ImageGrey:TBitMap):Matriks; function MatriksToImageGrey(M:Matriks):TBitMap; function ImageRGBToMatriksR(ImageRGB:TBitMap):Matriks; function ImageRGBToMatriksG(ImageRGB:TBitMap):Matriks; function ImageRGBToMatriksB(ImageRGB:TBitMap):Matriks; function MatriksToImageRGB(MR,MG,MB:Matriks):TBitMap; Selanjutnya kita mendefinisikan delapan buah fungsi dasar yang akan kita gunakan untuk memindahkan data citra kita dari TBitMap ke dalam struktur data Matriks yang telah kita definisikan sebelumnya, dan juga sebaliknya untuk mengembalikan data citra dari sebuah Matriks ke dalam TBitMap. Fungsi-fungsi tersebut tidak disediakan oleh Delphi, sehingga kita harus mendefinisikannya sendiri sesuai kebutuhan aplikasi yang akan kita kembangkan. Mendefinisikan sebuah fungsi di Delphi harus menggunakan keyword function, diikuti dengan nama fungsinya, lalu parameter fungsi (bila ada, nama parameter dan type nya), dan type keluaran fungsi tersebut. Fungsi ImageBinerToMatriks menerima masukan sebuah variabel ImageBiner bertype TBitMap yang berasal dari sebuah citra greyscale, lalu memindahkan isi data warnanya ke dalam sebuah variabel bertype Matriks. Sedangkan fungsi MatriksToImageBiner berfungsi sebaliknya. Fungsi ImageGreyToMatriks menerima masukan sebuah variabel ImageGrey bertype TBitMap yang berasal dari sebuah citra greyscale, lalu memindahkan isi data warnanya ke dalam sebuah variabel bertype Matriks. Sedangkan fungsi MatriksToImageGrey berfungsi sebaliknya. Fungsi ImageRGBToMatriksR, ImageRGBToMatriksG, ImageRGBToMatriksB menerima masukan sebuah variabel ImageRGB bertype TBitMap yang berasal dari sebuah citra warna RGB, lalu memindahkan isi data warnanya (hanya warna Red, Green, atau Blue saja) ke dalam sebuah variabel bertype Matriks. Sedangkan fungsi MatriksToImageRGB berfungsi sebaliknya, dengan menerima masukan tiga buah variabel bertype Matriks yang masing-masing menyimpan data-data warna Red, Green, atau Blue dari sebuah citra warna RGB, lalu menggabungkannya kembali membentuk sebuah citra warna RGB bertype TBitMap. var FileNameImageInput,FileNameImageOutput:string; BitmapImageInput,BitmapImageOutput:TBitMap; MatriksImageInput,MatriksImageOutput:Matriks; MatriksRImageInput,MatriksGImageInput,MatriksBImageInput:Matriks; MatriksRImageOutput,MatriksGImageOutput,MatriksBImageOutput:Matriks;

Page 10: PCD - Modul Praktikum Image Processing

Image Processing Modul with Delphi - Made Windu Antara Kesiman, S.T, M.Sc

Jurusan Pendidikan Teknik Informatika – Universitas Pendidikan Ganesha 10

Keyword var digunakan untuk mendefinisikan variabel pada Delphi. Pada aplikasi ini, kita akan mendefinisikan 12 variabel global, masing-masing sebagai berikut :

- Variabel FileNameImageInput dan FileNameImageOutput bertype string digunakan untuk menyimpan nama file citra input dan citra output hasil pengolahan.

- Variabel BitmapImageInput dan BitmapImageOutput bertype TBitMap digunakan untuk menyimpan data citra input dan citra output hasil pengolahan.

- Variabel MatriksImageInput dan MatriksImageOutput bertype Matriks digunakan untuk menyimpan data citra input dan output dalam bentuk matriks dari citra biner dan greyscale.

- Variabel MatriksRImageInput, MatriksGImageInput, MatriksBImageInput, MatriksRImageOutput, MatriksGImageOutput, MatriksBImageOutput bertype Matriks digunakan untuk menyimpan data citra input dan output dalam bentuk matriks dari citra warna RGB.

3. Kemudian diantara implementation dan end., tambahkan kode program yang merupakan implementasi dari fungsi-fungsi yang didefinisikan sebelumnya, di bagian atas tadi. Misalnya fungsi ImageGreyToMatriks akan diimplementasikan dengan kode program berikut ini : function ImageGreyToMatriks(ImageGrey:TBitMap):Matriks; var i,j:integer; M:Matriks; begin SetLength(M,ImageGrey.Width,ImageGrey.Height); for i:=0 to ImageGrey.Width-1 do begin for j:=0 to ImageGrey.Height-1 do begin M[i,j]:=Byte(ImageGrey.Canvas.Pixels[i,j]); end; end; ImageGreyToMatriks:=M; end; Sedangkan implementasi dari fungsi MatriksToImageGrey adalah sebagai berikut : function MatriksToImageGrey(M:Matriks):TBitMap; var i,j:integer; ImageGrey:TBitMap; begin ImageGrey:=TBitMap.Create; ImageGrey.PixelFormat:=pf8bit; ImageGrey.Height:=Length(M[0]); ImageGrey.Width:=Length(M); for i:=0 to ImageGrey.Width-1 do begin for j:=0 to ImageGrey.Height-1 do begin ImageGrey.Canvas.Pixels[i,j]:=RGB(M[i,j],M[i,j],M[i,j]); end; end; MatriksToImageGrey:=ImageGrey; end; Implementasi 6 fungsi lainnya menjadi latihan bagi Anda ! Petunjuk : gunakan fungsi RGB, GetRValue, GetGValue, dan GetBValue yang telah didefinisikan oleh Delphi !

Page 11: PCD - Modul Praktikum Image Processing

Image Processing Modul with Delphi - Made Windu Antara Kesiman, S.T, M.Sc

Jurusan Pendidikan Teknik Informatika – Universitas Pendidikan Ganesha 11

4. Setelah seluruh struktur data dan fungsi diimplementasikan pada UnitImageMatrices.pas, tambahkan UnitImageMatrices.pas ini pada bagian uses dari UnitMenu.pas

6. Membuka dan menyimpan sebuah file citra dan menampilkannya 1. Bukalah FormMenu yang telah kita lengkapi dengan struktur menu 2. Membuka file citra dan menampilkannya Klik menu File→Open Image yang telah kita buat pada strukur menu di FormMenu tersebut. Anda akan dibawa pada teks kode program dari UnitMenu.pas. Bagian kode program yang telah dibuat Delphi adalah : procedure TFormMenu.OpenImage1Click(Sender: TObject); begin end; Artinya Delphi menyediakan sebuah tempat untuk procedure yang akan dijalankan saat sub menu File→Open Image pada FormMenu kita klik. Diantara begin dan end dari procedure itulah kita harus menuliskan kode program yang kita inginkan. Sesuai dengan nama sub menunya, File→Open Image akan membuka sebuah kotak dialog untuk meminta user memilih menginputkan file citra yang akan dibuka dan ditampilkan. Maka, lengkapi procedure tersebut menjadi kode di bawah ini : procedure TFormMenu.OpenImage1Click(Sender: TObject); begin OpenPictureDialog.Execute; FileNameImageInput:=OpenPictureDialog.FileName; if (FileNameImageInput<>'') then begin FormImageInput.ImageInput.Picture.Bitmap.LoadFromFile(FileNameImageInput); FormImageInput.Visible:=true; BitmapImageInput:=FormImageInput.ImageInput.Picture.Bitmap; case BitmapImageInput.PixelFormat of pf1bit : begin MatriksImageInput:=ImageBinerToMatriks(BitmapImageInput); end; pf8bit : begin MatriksImageInput:=ImageGreyToMatriks(BitmapImageInput); end; pf24bit: begin MatriksRImageInput:=ImageRGBToMatriksR(BitmapImageInput); MatriksGImageInput:=ImageRGBToMatriksG(BitmapImageInput); MatriksBImageInput:=ImageRGBToMatriksB(BitmapImageInput); end; end; FormImageOutput.ImageOutput.Picture.Bitmap:=FormImageInput.ImageInput.Picture.Bitmap; FormImageOutput.Visible:=true; BitmapImageOutput:=FormImageOutput.ImageOutput.Picture.Bitmap; end;

Page 12: PCD - Modul Praktikum Image Processing

Image Processing Modul with Delphi - Made Windu Antara Kesiman, S.T, M.Sc

Jurusan Pendidikan Teknik Informatika – Universitas Pendidikan Ganesha 12

end; Run program Anda, test menu File→Open Image ! Bukalah sebuah file citra, Anda akan memperoleh contoh tampilan sebagai berikut :

Setelah sub menu Open Image dilengkapi dengan kode program, lengkapi pula sub menu Close Image, Save Image dan Quit Application dengan masing-masing kode program berikut ini : 3. Menutup sebuah form Untuk sub menu Close Image : procedure TFormMenu.CloseImage1Click(Sender: TObject); begin FormImageInput.Close; FormImageOutput.Close; end; 4. Menyimpan sebuah file citra Untuk sub menu Save Image : procedure TFormMenu.SaveImage1Click(Sender: TObject); begin SavePictureDialog.Execute; FileNameImageOutput:=SavePictureDialog.FileName;

Page 13: PCD - Modul Praktikum Image Processing

Image Processing Modul with Delphi - Made Windu Antara Kesiman, S.T, M.Sc

Jurusan Pendidikan Teknik Informatika – Universitas Pendidikan Ganesha 13

if (FileNameImageOutput<>'') then begin FormImageOutput.ImageOutput.Picture.SaveToFile(FileNameImageOutput); end; end; 5. Keluar dari aplikasi Untuk sub menu Quit Application : procedure TFormMenu.QuitApplication1Click(Sender: TObject); begin Application.Terminate; end;

7. Mengetahui informasi file citra dan melengkapi menu Image Info Sebelum melakukan pengolahan terhadap sebuah file citra, kita harus mengetahui dengan pasti informasi tentang file citra tersebut. Informasi tentang citra ini sangat dibutuhkan untuk dapat memilih metode/algoritma pengolahan citra dengan tepat. Tiga buah informasi yang sangat penting yang harus diketahui sebelum mengolah sebuah citra adalah : - Pixel size, ukuran pixel dari citra (jumlah pixel dalam panjang dan lebar citra), yang sekaligus menunjukkan resolusi dari citra tersebut - Image type, jenis citra, citra greyscale atau citra warna - Color depth, kedalaman warna, nilai bit yang digunakan untuk merepresentasikan sebuah warna dalam citra tersebut, sekaligus menunjukkan jumlah warna berbeda yang mungkin ditampilkan oleh citra tersebut. 1. Buatlah sebuah form baru, ganti properti Name dari form tersebut dengan FormImageInfo, dan Caption nya dengan Image Info, simpan unitnya dengan nama UnitImageInfo.pas. Tambahkan UnitImageInfo.pas ini pada bagian uses dari UnitMenu.pas sehingga FormImageInfo nantinya bisa dipanggil dari menu Image Info pada FormMenu. 2. Lengkapi FormImageInfo dengan komponen-komponen sebagai berikut :

- 6 buah komponen Label, yang bisa ditemukan pada Tab Standard. Ganti properti dari masing-masing Label tersebut sebagai berikut : 3 buah Label diletakkan berderet ke bawah, dimana masing-masing properti Caption nya diganti dengan : Image Type :, Color Depth : dan Pixel Size : 3 buah Label lainnya, bisa dicopy dari 3 Label sebelumnya, diletakkan berderet ke bawah, sejajar di samping deretan 3 label sebelumnya, dimana masing-masing properti Name nya diganti dengan : LabelImageType, LabelColorDepth, dan LabelPixelSize. Ganti properti Font Style dari keenam Label tersebut dengan fsbold bernilai True.

3. Kemudian kecilkan ukuran FormImageInfo sekedar cukup untuk menampilkan keenam Label yang telah dibuat tadi.

Page 14: PCD - Modul Praktikum Image Processing

Image Processing Modul with Delphi - Made Windu Antara Kesiman, S.T, M.Sc

Jurusan Pendidikan Teknik Informatika – Universitas Pendidikan Ganesha 14

4. Mengisi kode program sub menu Image Info→Image Input Tampilkan FormMenu kembali, lalu klik sub menu Image Info→Image Input. Lengkapi kode program dari prosedur yang ditentukan oleh Delphi sebagai berikut : procedure TFormMenu.ImageInput1Click(Sender: TObject); var StringLabel,StringLabel2:string; begin FormImageInfo.Visible:=true; StringLabel:=IntToStr(BitmapImageInput.Height); StringLabel:=StringLabel+'x'; StringLabel:=StringLabel+IntToStr(BitmapImageInput.Width); StringLabel:=StringLabel+' pixels'; FormImageInfo.LabelPixelSize.Caption:=StringLabel; case BitmapImageInput.PixelFormat of pf1bit : begin StringLabel:='Binary Image'; StringLabel2:='1 bit/pixel'; end; pf8bit : begin StringLabel:='Greyscale Image'; StringLabel2:='8 bits/pixel = 1 byte/pixel'; end; pf24bit: begin StringLabel:='Color Image'; StringLabel2:='24 bits/pixel = 3 bytes/pixel'; end; else begin StringLabel:='Undefined'; StringLabel2:='Undefined'; end; end; FormImageInfo.LabelImageType.Caption:=StringLabel; FormImageInfo.LabelColorDepth.Caption:=StringLabel2; end; Run progam Anda, buka sebuah file citra, lalu pilih menu Image Info→Image Input, Anda akan mendapat tampilan seperti contoh berikut ini :

Page 15: PCD - Modul Praktikum Image Processing

Image Processing Modul with Delphi - Made Windu Antara Kesiman, S.T, M.Sc

Jurusan Pendidikan Teknik Informatika – Universitas Pendidikan Ganesha 15

5. Mengisi kode program sub menu Image Info→Image Output Kita akan menggunakan FormImageInfo yang sama, hanya tinggal mengubah sedikit saja kode programnya dari sub menu Image Info→Image Input. Tampilkan FormMenu kembali, lalu klik sub menu Image Info→Image Output. Lengkapi kode program dari prosedur yang ditentukan oleh Delphi sama seperti kode program pada sub menu Image Info→Image Input. Hanya saja, variabel BitmapImageInput diganti dengan variabel BitmapImageOutput.

8. Menyiapkan form untuk sub menu Pixel Processing→Change Pixel Value 1. Buatlah sebuah form baru dengan properti Caption berisi Change Pixel Value, dan properti Name berisi FormChangePixel. Simpan unit untuk form tersebut dengan nama UnitChangePixel.pas. 2. Lengkapi FormChangePixel tersebut dengan komponen-komponen sebagai berikut :

- 10 buah komponen Label, yang bisa ditemukan pada Tab Standard. Ganti properti dari masing-masing Label tersebut sebagai berikut : 2 komponen Label diganti properti Caption nya menjadi X : 2 komponen Label diganti properti Caption nya menjadi Y : 2 komponen Label diganti properti Caption nya menjadi R : 2 komponen Label diganti properti Caption nya menjadi G :

Page 16: PCD - Modul Praktikum Image Processing

Image Processing Modul with Delphi - Made Windu Antara Kesiman, S.T, M.Sc

Jurusan Pendidikan Teknik Informatika – Universitas Pendidikan Ganesha 16

2 komponen Label diganti properti Caption nya menjadi B : Ganti properti Font Style dari kesepuluh Label tersebut menjadi fsbold bernilai True.

- 10 buah komponen Edit, yang bisa ditemukan pada Tab Standard. Ganti properti dari masing-masing Label tersebut sebagai berikut : Seluruh komponen Edit diganti properti Text nya menjadi kosong. 5 komponen Edit diganti properti Name nya masing-masing menjadi : EditX, EditY, EditR, EditG, dan EditB. 5 komponen Edit lainnya diganti Name nya masing-masing menjadi : EditXChange, EditYChange, EditRChange, EditGChange, dan EditBChange

- 1 buah komponen Button, yang bisa ditemukan pada Tab Standard. Ganti properti Name dari

komponen Button tersebut menjadi ButtonChangePixelValue, dan properti Caption nya menjadi Change Pixel Value.

3. Setelah FormChangePixel terisi lengkap dengan komponen-komponen tersebut, buka kembali FormMenu. Klik sub menu Pixel Processing→Change Pixel Value, lalu lengkapi kode programnya sebagai berikut :

procedure TFormMenu.ChangePixelValue1Click(Sender: TObject); begin FormChangePixel.Visible:=true; case BitmapImageInput.PixelFormat of pf1bit : begin FormChangePixel.EditG.Enabled:=false; FormChangePixel.EditB.Enabled:=false; FormChangePixel.EditGChange.Enabled:=false; FormChangePixel.EditBChange.Enabled:=false; end; pf8bit : begin FormChangePixel.EditG.Enabled:=false; FormChangePixel.EditB.Enabled:=false; FormChangePixel.EditGChange.Enabled:=false; FormChangePixel.EditBChange.Enabled:=false; end; pf24bit: begin FormChangePixel.EditG.Enabled:=true; FormChangePixel.EditB.Enabled:=true; FormChangePixel.EditGChange.Enabled:=true; FormChangePixel.EditBChange.Enabled:=true; end; end; end;

Page 17: PCD - Modul Praktikum Image Processing

Image Processing Modul with Delphi - Made Windu Antara Kesiman, S.T, M.Sc

Jurusan Pendidikan Teknik Informatika – Universitas Pendidikan Ganesha 17

Run program Anda, buka sebuah file citra, klik menu Pixel Processing→Change Pixel Value, Anda akan mendapat contoh tampilan sebagai berikut :

9. Memilih dan menampilkan posisi dan nilai warna dari sebuah pixel 1. Bukalah FormImageInput. Kemudian klik komponen ImageInput yang terdapat pada FormImageInput tersebut. Pada Object Inspector, klik Tab Event untuk komponen ImageInput tersebut, lalu double click kotak teks kosong di sebelah event OnMouseMove. Anda akan dibawa ke kode program dari UnitImageInput.pas. 2. Lengkapi procedure tersebut dengan kode program di bawah ini :

procedure TFormImageInput.ImageInputMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin case BitmapImageInput.PixelFormat of pf1bit : begin

Page 18: PCD - Modul Praktikum Image Processing

Image Processing Modul with Delphi - Made Windu Antara Kesiman, S.T, M.Sc

Jurusan Pendidikan Teknik Informatika – Universitas Pendidikan Ganesha 18

FormChangePixel.EditR.Text:=IntToStr(MatriksImageInput[X,Y]); FormChangePixel.EditG.Text:=IntToStr(MatriksImageInput[X,Y]); FormChangePixel.EditB.Text:=IntToStr(MatriksImageInput[X,Y]); end; pf8bit : begin FormChangePixel.EditR.Text:=IntToStr(MatriksImageInput[X,Y]); FormChangePixel.EditG.Text:=IntToStr(MatriksImageInput[X,Y]); FormChangePixel.EditB.Text:=IntToStr(MatriksImageInput[X,Y]); end; pf24bit: begin FormChangePixel.EditR.Text:=IntToStr(MatriksRImageInput[X,Y]); FormChangePixel.EditG.Text:=IntToStr(MatriksGImageInput[X,Y]); FormChangePixel.EditB.Text:=IntToStr(MatriksBImageInput[X,Y]); end; end; FormChangePixel.EditX.Text:=IntToStr(X); FormChangePixel.EditY.Text:=IntToStr(Y); end;

3. Kemudian, double click juga kotak teks kosong di sebelah event OnClick, lengkapi kode programnya sebagai berikut :

procedure TFormImageInput.ImageInputClick(Sender: TObject); begin FormChangePixel.EditRChange.Text:=FormChangePixel.EditR.Text; FormChangePixel.EditGChange.Text:=FormChangePixel.EditG.Text; FormChangePixel.EditBChange.Text:=FormChangePixel.EditB.Text; FormChangePixel.EditXChange.Text:=FormChangePixel.EditX.Text; FormChangePixel.EditYChange.Text:=FormChangePixel.EditY.Text; end;

Run program Anda, buka sebuah file citra, klik menu Pixel Processing→Change Pixel Value, gerakkan kursor di atas citra input, Anda akan melihat nilai-nilai warna dari citra tersebut pada FormChangePixel, lalu klik di satu posisi, Anda akan mendapat contoh tampilan sebagai berikut :

Page 19: PCD - Modul Praktikum Image Processing

Image Processing Modul with Delphi - Made Windu Antara Kesiman, S.T, M.Sc

Jurusan Pendidikan Teknik Informatika – Universitas Pendidikan Ganesha 19

10. Mengubah nilai warna sebuah pixel

Untuk melengkapi kode program untuk sub menu Change Pixel Value, yang akan dijalankan saat komponen ButtonChangePixelValue pada FormChangePixel diklik, maka kita akan membuat terlebih dahulu sebuah unit yang menampung seluruh algoritma pengolahan citra yang nantinya akan kita kembangkan. Di unit inilah kita akan menambahkan fungsi atau prosedur baru setiap kali kita menambahkan sebuah algoritma pengolahan citra yang baru.

1. Buatlah sebuah unit baru, simpan dengan nama UnitProcessing.pas. Diantara interface dan implementation, tambahkan kode program berikut ini :

uses UnitImageMatrices; function ChangePixelValue(MInput:Matriks; X,Y,Value:integer):Matriks; 2. Setelah interface, tambahkan implementasi kode program dari function ChangePixelValue tersebut, sebagai berikut : function ChangePixelValue(MInput:Matriks; X,Y,Value:integer):Matriks; var

Page 20: PCD - Modul Praktikum Image Processing

Image Processing Modul with Delphi - Made Windu Antara Kesiman, S.T, M.Sc

Jurusan Pendidikan Teknik Informatika – Universitas Pendidikan Ganesha 20

i,j:integer; MOutput : Matriks; begin SetLength(MOutput,Length(MInput),Length(MInput[0])); for i:=0 to Length(MOutput)-1 do begin for j:=0 to Length(MOutput[0])-1 do begin MOutput[i,j]:=MInput[i,j]; end; end; MOutput[X,Y]:=Value; ChangePixelValue:=MOutput; end; 3. Setelah function ChangePixelValue ini selesai, kita bisa menggunakannya saat komponen ButtonChangePixelValue pada FormChangePixel diklik. Buka kembali FormChangePixel, lalu double klik komponen ButtonChangePixelValue. Lengkapi kode programnya menjadi : procedure TFormChangePixel.ButtonChangePixelValueClick(Sender: TObject); var X,Y,Value:integer; begin case BitmapImageInput.PixelFormat of pf1bit : begin if ((EditXChange.Text<>'')and(EditYChange.Text<>'')and(EditRChange.Text<>'')) then begin X:=StrToInt(EditXChange.Text); Y:=StrToInt(EditYChange.Text); Value:=StrToInt(EditRChange.Text); MatriksImageOutput:=ChangePixelValue(MatriksImageInput,X,Y,Value); BitmapImageOutput:=MatriksToImageBiner(MatriksImageOutput); end; end; pf8bit : begin if ((EditXChange.Text<>'')and(EditYChange.Text<>'')and(EditRChange.Text<>'')) then begin X:=StrToInt(EditXChange.Text); Y:=StrToInt(EditYChange.Text); Value:=StrToInt(EditRChange.Text); MatriksImageOutput:=ChangePixelValue(MatriksImageInput,X,Y,Value); BitmapImageOutput:=MatriksToImageGrey(MatriksImageOutput); end; end; pf24bit: begin if ((EditXChange.Text<>'')and(EditYChange.Text<>'')and(EditRChange.Text<>'')and(EditGChange.Text<>'')and(EditBChange.Text<>'')) then begin X:=StrToInt(EditXChange.Text); Y:=StrToInt(EditYChange.Text); Value:=StrToInt(EditRChange.Text);

Page 21: PCD - Modul Praktikum Image Processing

Image Processing Modul with Delphi - Made Windu Antara Kesiman, S.T, M.Sc

Jurusan Pendidikan Teknik Informatika – Universitas Pendidikan Ganesha 21

MatriksRImageOutput:=ChangePixelValue(MatriksRImageInput,X,Y,Value); Value:=StrToInt(EditGChange.Text); MatriksGImageOutput:=ChangePixelValue(MatriksGImageInput,X,Y,Value); Value:=StrToInt(EditBChange.Text); MatriksBImageOutput:=ChangePixelValue(MatriksBImageInput,X,Y,Value); BitmapImageOutput:=MatriksToImageRGB(MatriksRImageOutput,MatriksGImageOutput,MatriksBImageOutput); end; end; end; FormImageOutput.ImageOutput.Picture.Bitmap:=BitmapImageOutput; end; Run program Anda, buka sebuah file citra, klik menu Pixel Processing→Change Pixel Value, gerakkan kursor di atas citra input, Anda akan melihat nilai-nilai warna dari citra tersebut pada FormChangePixel, lalu klik di satu posisi. Setelah itu ubah nilai pixel yang Anda klik tadi dengan nilai yang berbeda dengan nilai sebelumnya, lalu klik tombol Change Pixel Value.

11. Membuat citra negatif Untuk mengisi kode program dari sub menu Pixel Processing→Image Negative, terlebih dahulu kita buatkan fungsi untuk mengubah citra asal menjadi citra negatifnya. Fungsi tersebut kita definisikan di dalam UnitProcessing.pas sebagai berikut : 1. Pada bagian definisi function, tambahkan : function ImageNegative(MInput:Matriks):Matriks; 2. Pada bagian implementasi, tambahkan : function ImageNegative(MInput:Matriks):Matriks; var i,j : integer; MOutput : Matriks; begin SetLength(MOutput,Length(MInput),Length(MInput[0])); for i:=0 to Length(MOutput)-1 do begin for j:=0 to Length(MOutput[0])-1 do begin MOutput[i,j]:=255-MInput[i,j]; end; end; ImageNegative:=MOutput; end; 3. Setelah function ImageNegative ini selesai, kita bisa menggunakannya saat sub menu Pixel Processing→Image Negative pada FormMenu diklik. Buka kembali FormMenu, klik sub menu Pixel Processing→Image Negative. Lengkapi kode programnya sebagai berikut : procedure TFormMenu.ImageNegative1Click(Sender: TObject);

Page 22: PCD - Modul Praktikum Image Processing

Image Processing Modul with Delphi - Made Windu Antara Kesiman, S.T, M.Sc

Jurusan Pendidikan Teknik Informatika – Universitas Pendidikan Ganesha 22

begin case BitmapImageInput.PixelFormat of pf1bit : begin MatriksImageOutput:=ImageNegative(MatriksImageInput); BitmapImageOutput:=MatriksToImageBiner(MatriksImageOutput); end; pf8bit : begin MatriksImageOutput:=ImageNegative(MatriksImageInput); BitmapImageOutput:=MatriksToImageGrey(MatriksImageOutput); end; pf24bit: begin MatriksRImageOutput:=ImageNegative(MatriksRImageInput); MatriksGImageOutput:=ImageNegative(MatriksGImageInput); MatriksBImageOutput:=ImageNegative(MatriksBImageInput); BitmapImageOutput:=MatriksToImageRGB(MatriksRImageOutput,MatriksGImageOutput,MatriksBImageOutput); end; end; FormImageOutput.ImageOutput.Picture.Bitmap:=BitmapImageOutput; end; Run program Anda, buka sebuah file citra, klik menu Pixel Processing→Image Negative, Anda akan mendapat contoh tampilan sebagai berikut :