You are on page 1of 22

Image Processing Modul

with
Delphi


Made Windu Antara Kesiman, S.T, M.Sc






Jurusan Pendidikan Teknik Informatika
Universitas Pendidikan Ganesha

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 FileSave All, pilih folder ProjectImageProcessingModul yang Anda buat tadi untuk
menyimpan project Delphi ini.



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

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
ViewObject 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.

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

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.

J angan lupa untuk selalu menyimpan hasil project terakhir dengan klik menu FileSave All.

10. Run aplikasi

Untuk me-run aplikasi Delphi, tekan F9, atau gunakan menu RunRun 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 :

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

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 ViewForm. Akan tampil daftar form-form yang telah kita
buat di project ini. Pilih FormMenu untuk ditampilkan.
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 FileNewUnit 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
Wi ndows, Gr aphi cs;

type
Mat r i ks = ar r ay of ar r ay of i nt eger ;

function I mageBi ner ToMat r i ks( I mageBi ner : TBi t map) : Mat r i ks;
function Mat r i ksToI mageBi ner ( M: Mat r i ks) : TBi t map;
function I mageGr eyToMat r i ks( I mageGr ey: TBi t Map) : Mat r i ks;
function Mat r i ksToI mageGr ey( M: Mat r i ks) : TBi t Map;
function I mageRGBToMat r i ksR( I mageRGB: TBi t Map) : Mat r i ks;
function I mageRGBToMat r i ksG( I mageRGB: TBi t Map) : Mat r i ks;
function I mageRGBToMat r i ksB( I mageRGB: TBi t Map) : Mat r i ks;
function Mat r i ksToI mageRGB( MR, MG, MB: Mat r i ks) : TBi t Map;

var
Fi l eNameI mageI nput , Fi l eNameI mageOut put : string;
Bi t mapI mageI nput , Bi t mapI mageOut put : TBi t Map;
Mat r i ksI mageI nput , Mat r i ksI mageOut put : Mat r i ks;
Mat r i ksRI mageI nput , Mat r i ksGI mageI nput , Mat r i ksBI mageI nput : Mat r i ks;
Mat r i ksRI mageOut put , Mat r i ksGI mageOut put , Mat r i ksBI mageOut put : Mat r i ks;

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
Wi ndows, Gr aphi cs;

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
Mat r i ks = ar r ay of ar r ay of i nt eger ;

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 I mageBi ner ToMat r i ks( I mageBi ner : TBi t map) : Mat r i ks;
function Mat r i ksToI mageBi ner ( M: Mat r i ks) : TBi t map;
function I mageGr eyToMat r i ks( I mageGr ey: TBi t Map) : Mat r i ks;
function Mat r i ksToI mageGr ey( M: Mat r i ks) : TBi t Map;
function I mageRGBToMat r i ksR( I mageRGB: TBi t Map) : Mat r i ks;
function I mageRGBToMat r i ksG( I mageRGB: TBi t Map) : Mat r i ks;
function I mageRGBToMat r i ksB( I mageRGB: TBi t Map) : Mat r i ks;
function Mat r i ksToI mageRGB( MR, MG, MB: Mat r i ks) : TBi t Map;

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
Fi l eNameI mageI nput , Fi l eNameI mageOut put : string;
Bi t mapI mageI nput , Bi t mapI mageOut put : TBi t Map;
Mat r i ksI mageI nput , Mat r i ksI mageOut put : Mat r i ks;
Mat r i ksRI mageI nput , Mat r i ksGI mageI nput , Mat r i ksBI mageI nput : Mat r i ks;
Mat r i ksRI mageOut put , Mat r i ksGI mageOut put , Mat r i ksBI mageOut put : Mat r i ks;
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 I mageGr eyToMat r i ks( I mageGr ey: TBi t Map) : Mat r i ks;
var
i , j : i nt eger ;
M: Mat r i ks;
begin
Set Lengt h( M, I mageGr ey. Wi dt h, I mageGr ey. Hei ght ) ;
for i : =0 to I mageGr ey. Wi dt h- 1 do
begin
for j : =0 to I mageGr ey. Hei ght - 1 do
begin
M[ i , j ] : =Byt e( I mageGr ey. Canvas. Pi xel s[ i , j ] ) ;
end;
end;
I mageGr eyToMat r i ks: =M;
end;

Sedangkan implementasi dari fungsi MatriksToImageGrey adalah sebagai berikut :

function Mat r i ksToI mageGr ey( M: Mat r i ks) : TBi t Map;
var
i , j : i nt eger ;
I mageGr ey: TBi t Map;
begin
I mageGr ey: =TBi t Map. Cr eat e;
I mageGr ey. Pi xel For mat : =pf 8bi t ;
I mageGr ey. Hei ght : =Lengt h( M[ 0] ) ;
I mageGr ey. Wi dt h: =Lengt h( M) ;
for i : =0 to I mageGr ey. Wi dt h- 1 do
begin
for j : =0 to I mageGr ey. Hei ght - 1 do
begin
I mageGr ey. Canvas. Pi xel s[ i , j ] : =RGB( M[ i , j ] , M[ i , j ] , M[ i , j ] ) ;
end;
end;
Mat r i ksToI mageGr ey: =I mageGr ey;
end;

Implementasi 6 fungsi lainnya menjadi latihan bagi Anda ! Petunjuk : gunakan fungsi RGB, GetRValue,
GetGValue, dan GetBValue yang telah didefinisikan oleh Delphi !

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 FileOpen 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 TFor mMenu. OpenI mage1Cl i ck( Sender : TObj ect ) ;
begin

end;

Artinya Delphi menyediakan sebuah tempat untuk procedure yang akan dijalankan saat sub menu FileOpen
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, FileOpen 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 TFor mMenu. OpenI mage1Cl i ck( Sender : TObj ect ) ;
begin
OpenPi ct ur eDi al og. Execut e;
Fi l eNameI mageI nput : =OpenPi ct ur eDi al og. Fi l eName;
if ( Fi l eNameI mageI nput <>' ' ) then
begin
For mI mageI nput . I mageI nput . Pi ct ur e. Bi t map. LoadFr omFi l e( Fi l eNameI mageI nput ) ;
For mI mageI nput . Vi si bl e: =t r ue;
Bi t mapI mageI nput : =For mI mageI nput . I mageI nput . Pi ct ur e. Bi t map;

case Bi t mapI mageI nput . Pi xel For mat of
pf 1bi t : begin
Mat r i ksI mageI nput : =I mageBi ner ToMat r i ks( Bi t mapI mageI nput ) ;
end;
pf 8bi t : begin
Mat r i ksI mageI nput : =I mageGr eyToMat r i ks( Bi t mapI mageI nput ) ;
end;
pf 24bi t : begin
Mat r i ksRI mageI nput : =I mageRGBToMat r i ksR( Bi t mapI mageI nput ) ;
Mat r i ksGI mageI nput : =I mageRGBToMat r i ksG( Bi t mapI mageI nput ) ;
Mat r i ksBI mageI nput : =I mageRGBToMat r i ksB( Bi t mapI mageI nput ) ;
end;
end;

For mI mageOut put . I mageOut put . Pi ct ur e. Bi t map: =For mI mageI nput . I mageI nput . Pi ct u
r e. Bi t map;
For mI mageOut put . Vi si bl e: =t r ue;
Bi t mapI mageOut put : =For mI mageOut put . I mageOut put . Pi ct ur e. Bi t map;
end;
Image Processing Modul with Delphi - Made Windu Antara Kesiman, S.T, M.Sc
Jurusan Pendidikan Teknik Informatika Universitas Pendidikan Ganesha
12
end;

Run pr ogr am Anda, t est menu FileOpen 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 TFor mMenu. Cl oseI mage1Cl i ck( Sender : TObj ect ) ;
begin
For mI mageI nput . Cl ose;
For mI mageOut put . Cl ose;
end;

4. Menyimpan sebuah file citra

Untuk sub menu Save Image :

procedure TFor mMenu. SaveI mage1Cl i ck( Sender : TObj ect ) ;
begin
SavePi ct ur eDi al og. Execut e;
Fi l eNameI mageOut put : =SavePi ct ur eDi al og. Fi l eName;
Image Processing Modul with Delphi - Made Windu Antara Kesiman, S.T, M.Sc
Jurusan Pendidikan Teknik Informatika Universitas Pendidikan Ganesha
13
if ( Fi l eNameI mageOut put <>' ' ) then
begin
For mI mageOut put . I mageOut put . Pi ct ur e. SaveToFi l e( Fi l eNameI mageOut put ) ;
end;
end;

5. Keluar dari aplikasi

Untuk sub menu Quit Application :

procedure TFor mMenu. Qui t Appl i cat i on1Cl i ck( Sender : TObj ect ) ;
begin
Appl i cat i on. Ter mi nat e;
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.

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 InfoImage Input

Tampilkan FormMenu kembali, lalu klik sub menu Image InfoImage Input. Lengkapi kode program
dari prosedur yang ditentukan oleh Delphi sebagai berikut :

procedure TFor mMenu. I mageI nput 1Cl i ck( Sender : TObj ect ) ;
var
St r i ngLabel , St r i ngLabel 2: string;
begin
For mI mageI nf o. Vi si bl e: =t r ue;

St r i ngLabel : =I nt ToSt r ( Bi t mapI mageI nput . Hei ght ) ;
St r i ngLabel : =St r i ngLabel +' x' ;
St r i ngLabel : =St r i ngLabel +I nt ToSt r ( Bi t mapI mageI nput . Wi dt h) ;
St r i ngLabel : =St r i ngLabel +' pi xel s' ;
For mI mageI nf o. Label Pi xel Si ze. Capt i on: =St r i ngLabel ;

case Bi t mapI mageI nput . Pi xel For mat of
pf 1bi t : begin
St r i ngLabel : =' Bi nar y I mage' ;
St r i ngLabel 2: =' 1 bi t / pi xel ' ;
end;
pf 8bi t : begin
St r i ngLabel : =' Gr eyscal e I mage' ;
St r i ngLabel 2: =' 8 bi t s/ pi xel = 1 byt e/ pi xel ' ;
end;
pf 24bi t : begin
St r i ngLabel : =' Col or I mage' ;
St r i ngLabel 2: =' 24 bi t s/ pi xel = 3 byt es/ pi xel ' ;
end;
else
begin
St r i ngLabel : =' Undef i ned' ;
St r i ngLabel 2: =' Undef i ned' ;
end;
end;

For mI mageI nf o. Label I mageType. Capt i on: =St r i ngLabel ;
For mI mageI nf o. Label Col or Dept h. Capt i on: =St r i ngLabel 2;

end;

Run progam Anda, buka sebuah file citra, lalu pilih menu Image InfoImage Input, Anda akan
mendapat tampilan seperti contoh berikut ini :
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 InfoImage Output

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



8. Menyiapkan form untuk sub menu
Pixel ProcessingChange 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 :
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 ProcessingChange Pixel Value, lalu lengkapi kode
programnya sebagai berikut :

procedure TFor mMenu. ChangePi xel Val ue1Cl i ck( Sender : TObj ect ) ;
begin
For mChangePi xel . Vi si bl e: =t r ue;

case Bi t mapI mageI nput . Pi xel For mat of
pf 1bi t : begin
For mChangePi xel . Edi t G. Enabl ed: =f al se;
For mChangePi xel . Edi t B. Enabl ed: =f al se;
For mChangePi xel . Edi t GChange. Enabl ed: =f al se;
For mChangePi xel . Edi t BChange. Enabl ed: =f al se;
end;
pf 8bi t : begin
For mChangePi xel . Edi t G. Enabl ed: =f al se;
For mChangePi xel . Edi t B. Enabl ed: =f al se;
For mChangePi xel . Edi t GChange. Enabl ed: =f al se;
For mChangePi xel . Edi t BChange. Enabl ed: =f al se;
end;
pf 24bi t : begin
For mChangePi xel . Edi t G. Enabl ed: =t r ue;
For mChangePi xel . Edi t B. Enabl ed: =t r ue;
For mChangePi xel . Edi t GChange. Enabl ed: =t r ue;
For mChangePi xel . Edi t BChange. Enabl ed: =t r ue;
end;
end;
end;
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 ProcessingChange 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 TFor mI mageI nput . I mageI nput MouseMove( Sender : TObj ect ;
Shi f t : TShi f t St at e; X, Y: I nt eger ) ;
begin

case Bi t mapI mageI nput . Pi xel For mat of
pf 1bi t : begin
Image Processing Modul with Delphi - Made Windu Antara Kesiman, S.T, M.Sc
Jurusan Pendidikan Teknik Informatika Universitas Pendidikan Ganesha
18

For mChangePi xel . Edi t R. Text : =I nt ToSt r ( Mat r i ksI mageI nput [ X, Y] ) ;

For mChangePi xel . Edi t G. Text : =I nt ToSt r ( Mat r i ksI mageI nput [ X, Y] ) ;

For mChangePi xel . Edi t B. Text : =I nt ToSt r ( Mat r i ksI mageI nput [ X, Y] ) ;
end;
pf 8bi t : begin

For mChangePi xel . Edi t R. Text : =I nt ToSt r ( Mat r i ksI mageI nput [ X, Y] ) ;

For mChangePi xel . Edi t G. Text : =I nt ToSt r ( Mat r i ksI mageI nput [ X, Y] ) ;

For mChangePi xel . Edi t B. Text : =I nt ToSt r ( Mat r i ksI mageI nput [ X, Y] ) ;
end;
pf 24bi t : begin

For mChangePi xel . Edi t R. Text : =I nt ToSt r ( Mat r i ksRI mageI nput [ X, Y] ) ;

For mChangePi xel . Edi t G. Text : =I nt ToSt r ( Mat r i ksGI mageI nput [ X, Y] ) ;

For mChangePi xel . Edi t B. Text : =I nt ToSt r ( Mat r i ksBI mageI nput [ X, Y] ) ;
end;
end;
For mChangePi xel . Edi t X. Text : =I nt ToSt r ( X) ;
For mChangePi xel . Edi t Y. Text : =I nt ToSt r ( Y) ;
end;

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

procedure TFor mI mageI nput . I mageI nput Cl i ck( Sender : TObj ect ) ;
begin
For mChangePi xel . Edi t RChange. Text : =For mChangePi xel . Edi t R. Text ;
For mChangePi xel . Edi t GChange. Text : =For mChangePi xel . Edi t G. Text ;
For mChangePi xel . Edi t BChange. Text : =For mChangePi xel . Edi t B. Text ;
For mChangePi xel . Edi t XChange. Text : =For mChangePi xel . Edi t X. Text ;
For mChangePi xel . Edi t YChange. Text : =For mChangePi xel . Edi t Y. Text ;
end;

Run program Anda, buka sebuah file citra, klik menu Pixel ProcessingChange 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 :
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
Uni t I mageMat r i ces;

function ChangePi xel Val ue( MI nput : Mat r i ks; X, Y, Val ue: i nt eger ) : Mat r i ks;

2. Setelah interface, tambahkan implementasi kode program dari function ChangePixelValue
tersebut, sebagai berikut :

function ChangePi xel Val ue( MI nput : Mat r i ks; X, Y, Val ue: i nt eger ) : Mat r i ks;
var
Image Processing Modul with Delphi - Made Windu Antara Kesiman, S.T, M.Sc
Jurusan Pendidikan Teknik Informatika Universitas Pendidikan Ganesha
20
i , j : i nt eger ;
MOut put : Mat r i ks;
begin
Set Lengt h( MOut put , Lengt h( MI nput ) , Lengt h( MI nput [ 0] ) ) ;
for i : =0 to Lengt h( MOut put ) - 1 do
begin
for j : =0 to Lengt h( MOut put [ 0] ) - 1 do
begin
MOut put [ i , j ] : =MI nput [ i , j ] ;
end;
end;
MOut put [ X, Y] : =Val ue;
ChangePi xel Val ue: =MOut put ;
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 TFor mChangePi xel . But t onChangePi xel Val ueCl i ck( Sender : TObj ect ) ;
var
X, Y, Val ue: i nt eger ;
begin
case Bi t mapI mageI nput . Pi xel For mat of
pf 1bi t : begin
if
( ( Edi t XChange. Text <>' ' ) and( Edi t YChange. Text <>' ' ) and( Edi t RChange. Text <>' '
) ) then
begin
X: =St r ToI nt ( Edi t XChange. Text ) ;
Y: =St r ToI nt ( Edi t YChange. Text ) ;
Val ue: =St r ToI nt ( Edi t RChange. Text ) ;

Mat r i ksI mageOut put : =ChangePi xel Val ue( Mat r i ksI mageI nput , X, Y, Val ue) ;

Bi t mapI mageOut put : =Mat r i ksToI mageBi ner ( Mat r i ksI mageOut put ) ;
end;
end;
pf 8bi t : begin
if
( ( Edi t XChange. Text <>' ' ) and( Edi t YChange. Text <>' ' ) and( Edi t RChange. Text <>' '
) ) then
begin
X: =St r ToI nt ( Edi t XChange. Text ) ;
Y: =St r ToI nt ( Edi t YChange. Text ) ;
Val ue: =St r ToI nt ( Edi t RChange. Text ) ;

Mat r i ksI mageOut put : =ChangePi xel Val ue( Mat r i ksI mageI nput , X, Y, Val ue) ;

Bi t mapI mageOut put : =Mat r i ksToI mageGr ey( Mat r i ksI mageOut put ) ;
end;
end;
pf 24bi t : begin
if
( ( Edi t XChange. Text <>' ' ) and( Edi t YChange. Text <>' ' ) and( Edi t RChange. Text <>' '
) and( Edi t GChange. Text <>' ' ) and( Edi t BChange. Text <>' ' ) ) t hen
begin
X: =St r ToI nt ( Edi t XChange. Text ) ;
Y: =St r ToI nt ( Edi t YChange. Text ) ;
Val ue: =St r ToI nt ( Edi t RChange. Text ) ;
Image Processing Modul with Delphi - Made Windu Antara Kesiman, S.T, M.Sc
Jurusan Pendidikan Teknik Informatika Universitas Pendidikan Ganesha
21

Mat r i ksRI mageOut put : =ChangePi xel Val ue( Mat r i ksRI mageI nput , X, Y, Val ue) ;
Val ue: =St r ToI nt ( Edi t GChange. Text ) ;

Mat r i ksGI mageOut put : =ChangePi xel Val ue( Mat r i ksGI mageI nput , X, Y, Val ue) ;
Val ue: =St r ToI nt ( Edi t BChange. Text ) ;

Mat r i ksBI mageOut put : =ChangePi xel Val ue( Mat r i ksBI mageI nput , X, Y, Val ue) ;

Bi t mapI mageOut put : =Mat r i ksToI mageRGB( Mat r i ksRI mageOut put , Mat r i ksGI mageOu
t put , Mat r i ksBI mageOut put ) ;
end;
end;
end;
For mI mageOut put . I mageOut put . Pi ct ur e. Bi t map: =Bi t mapI mageOut put ;
end;

Run program Anda, buka sebuah file citra, klik menu Pixel ProcessingChange 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 ProcessingImage 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 I mageNegat i ve( MI nput : Mat r i ks) : Mat r i ks;

2. Pada bagian implementasi, tambahkan :

function I mageNegat i ve( MI nput : Mat r i ks) : Mat r i ks;
var
i , j : i nt eger ;
MOut put : Mat r i ks;
begin
Set Lengt h( MOut put , Lengt h( MI nput ) , Lengt h( MI nput [ 0] ) ) ;
for i : =0 to Lengt h( MOut put ) - 1 do
begin
for j : =0 to Lengt h( MOut put [ 0] ) - 1 do
begin
MOut put [ i , j ] : =255- MI nput [ i , j ] ;
end;
end;
I mageNegat i ve: =MOut put ;
end;

3. Setelah function ImageNegative ini selesai, kita bisa menggunakannya saat sub menu Pixel
ProcessingImage Negative pada FormMenu diklik. Buka kembali FormMenu, klik sub menu
Pixel ProcessingImage Negative. Lengkapi kode programnya sebagai berikut :

procedure TFor mMenu. I mageNegat i ve1Cl i ck( Sender : TObj ect ) ;
Image Processing Modul with Delphi - Made Windu Antara Kesiman, S.T, M.Sc
Jurusan Pendidikan Teknik Informatika Universitas Pendidikan Ganesha
22
begin
case Bi t mapI mageI nput . Pi xel For mat of
pf 1bi t : begin
Mat r i ksI mageOut put : =I mageNegat i ve( Mat r i ksI mageI nput ) ;
Bi t mapI mageOut put : =Mat r i ksToI mageBi ner ( Mat r i ksI mageOut put ) ;
end;
pf 8bi t : begin
Mat r i ksI mageOut put : =I mageNegat i ve( Mat r i ksI mageI nput ) ;
Bi t mapI mageOut put : =Mat r i ksToI mageGr ey( Mat r i ksI mageOut put ) ;
end;
pf 24bi t : begin
Mat r i ksRI mageOut put : =I mageNegat i ve( Mat r i ksRI mageI nput ) ;
Mat r i ksGI mageOut put : =I mageNegat i ve( Mat r i ksGI mageI nput ) ;
Mat r i ksBI mageOut put : =I mageNegat i ve( Mat r i ksBI mageI nput ) ;

Bi t mapI mageOut put : =Mat r i ksToI mageRGB( Mat r i ksRI mageOut put , Mat r i ksGI mageOu
t put , Mat r i ksBI mageOut put ) ;
end;
end;
For mI mageOut put . I mageOut put . Pi ct ur e. Bi t map: =Bi t mapI mageOut put ;
end;

Run pr ogr am Anda, buka sebuah f i l e ci t r a, kl i k menu Pixel
ProcessingImage Negative, Anda akan mendapat contoh tampilan sebagai berikut :

You might also like