Selamat datang di sonoku.com

Dasar Pengolahan Citra dengan Dephi

Setelah beberapa bulan melakukan kajian pustaka..-kayak nggarap tesis aja- akhirnya saya bisa implementasikan teori-teori itu dalam sebuah program. Image processing..emang lebih keren pake bahasa inggris ketimbang mengartikannya ke pengolahan citra. Tapi demi bangsa tempat saya lahir, saya tetap gunakan istilah pengolahan citra…citra??diolah?? Apanya?? Dia itu kan temen SMPku..Okelah, musti harus dijelaskan dulu apa itu pengolahan citra-image processing.

Definisi dasar

Kita mulai dari definisi citra, citra yang dimaksud adalah gambar dua dimensi yang dihasilkan dari gambar analog dua dimensi yang kontinu menjadi gambar diskrit melalui proses sampling [1], jadi bukan Citra teman SMP-ku itu lho ya….Gambar analog dihasilkan dari sistem optik yang menerima sinyal analog, biasanya didapat dari kamera analog atau mata manusia, sedangkan citra diskrit atau citra digital dihasilkan dari proses digitalisasi citra kontinu, misalnya citra yang dihasilkan oleh scanner atau kamera digital.

Dari pernyataan diatas ada dua hal yang mungkin jadi pertanyaan, yaitu 1) apa proses sampling dan 2)proses digitalisasi. Keduanya sebenarnya hampir mirip, kalau kita ingin melakukan pengolahan citra, tentunya kita akan merepresentasikan dulu citra kontinu yang kita punya menjadi citra digital agar lebih mudah pengolahannya. Proses ini disebut proses digitalisasi, yaitu citra kontinu dibagi menjadi dalam bentuk matrik yang terdiri dari N baris dan M kolom sehingga menjadi citra diskrit. Sedangkan proses sampling adalah proses untuk menentukan warna pada piksel tertentu pada citra.

Jenis Citra Digital

Beberapa jenis digital yang sering digunakan adalah citra biner, citra greyscale, dan citra warna.

    1. Citra Biner

      Biasa disebut dengan citra monokrom. Citra ini terdiri dari 2 warna saja yaitu hitam dan putih.

    2. Citra Greyscle

      Citra greyscale (derajat keabuan) memiliki beberapa warna diantara hitam dan putih. Banyaknya warna tergantung dari berapa bit citra tersebut.

  1. Citra warna (true color)

    Pada citra warna tiap pikselnaya terdiri dari warna yang merupakan kombinasi dari 3 warna dasar yaitu merah (red), hijau (green) dan biru (blue). Mengapa disebut citra true color? Setiap warna dasar dari citra warna menggunakan memori 8 bit = 1byte yang berarti akan memiliki 28 = 256 tingkatan (gradasi) warna. Jadi akan ada 28.28.28 = 224 = 16777216 warna dalam tiap piksel dari citra tersebut. Maka dari itu karena citra memiliki begitu banyak warna yang mewakili seluruh warna yang ada, format ini dinamakan citra true color.

Ya sudah mungkin itu dulu omang-omong pengertian dasar sekitar citra, mari kita lanjutkan ke pengolahan citra itu sendiri.

Pengolahan citra
Pengolahan citra merupakan proses manipulasi data suatu citra untuk menghasilkan citra baru.
Citra warna bisa direpresentasikan dalam format piksel yang terdiri dari 3 komposisi warna, yaitu merah (red/R), hijau(green/G), dan biru (blue/B). Jika menggunakan representasi citra 8bit dalam integer nilai R, G dan B mempunyai rentang 0-255. Semakin besar nilainya artinya warna tersebut mendominasi pada kombinasi warna pada citra tersebut.

Pemrograman Dasar Pengolahan Citra dengan Delphi
Baik sekarang saya coba jelaskan beberapa pemrograman dasar delphi yang akan digunakan dalam pengolahan citra nanti. Ada beberapa fungsi yang digunakan seperti penampilan citra, operasi matematika, pengambilan warna piksel, dll.

1. Menampilkan citra/gambar

Citra/gambar yang nantinya kita olah berformat bitmap ( .bmp), untuk bisa menampilkannya biasanya saya menggunakan komponen Image pada tab Additional, kemudian saya juga gunakan OpenPictureDialog biar ngga susah-susah nulis filternya he..he.., dan juga MainMenu untuk membuka dialognya, property-nya saya atur seperti berikut.

Komponen Property Value
Image1 Scretch True
OpenPictureDialog1
MainMenu1 Items – sub items Image – Open

Kode programnya akan tampak seperti berikut:

procedure TForm1.Open1Click(Sender: TObject);
var gambar : TBitmap;
begin
if not OpenPictureDialog1.Execute then
Exit
else
begin
gambar := TBitmap.Create;
gambar.LoadFromFile(OpenPictureDialog1.FileName);
end;
Image1.Picture.Bitmap:= gambar;
end;

2. Operasi dasar matematika

Yah..matematika lagi, dimana-mana memang hidup saya ngga lepas dari matematika. Tapi emang dalam pengolahan citra operasi matematika, kalkulus, tidak akan bisa lepas. Semuanya menggunakan operasi matematika, dari yang paling sederhana sampai yang rumit. Operasi yang paling dasar adalah penjumlahan, pengurangan, perkalian dan pembagian. Ohya..satu lagi dalam pengolahan citra, anda harus mahir dalam operasi matrik juga. Coba lihat contoh kode berikut.

Untuk operasi bilangan lain anda pelajari sendiri ya, agar pembahasan kita tetap fokus.

procedure operasi_dasar;
var a, b, c : integer;
d : real;
begin
c := a + b; {penjumlahan}
c := a - b; {pengurangan}
c := a * b; {perkalian}
d := a/b; {pembagian}
c := a div b ; {pembagian bulat}
end;

3. Membaca citra

Proses untuk membaca citra sama prosesnya dengan membaca matrik , karena sebenarnya citra digital adalah suatu matrik. Setiap piksel pada citra mempunyai 3 nilai R,G,dan B. Untuk itu kita biasa gunakan proses looping menggunakan for..to..do, ataupun repeat…until, dsb.

for brs := 0 to Image2.Picture.Bitmap.Height-1 do
begin
...
for kol := 0 to Image2.Picture.Bitmap.Width-1 do
begin
...
 end;
end;

 

4. Pengambilan warna Piksel

Untuk pengambilan warna piksel pada citra, pertama kita bisa gunakan fungsi ColorToRGB(Color: TColor): Longint. Fungsi ini akan mengambil nilai komposisi warna dasar (RGB) dari sebuah warna. Setelah itu kita akan ambil nilai tiap komposisi warna tersebut menggunakan fungsi GetRValue(Color:TColor), GetGValue(Color:TColor), GetBValue(Color:TColor). Lebih jelasnya coba perhatikan potongan kode berikut.

[sourcecode language=”delphi”]
color := ColorToRGB(Image2.Picture.Bitmap.Canvas.Pixels[brs,kol]);//—mengambil warna piksel tertentu dalam citra</em>
r := GetRValue(color); //—mengambil nilai R
g := GetGValue(color); //—mengambil nilai G
b := GetBValue(color); //—mengambil nilai B
[/sourcecode]

Kode diatas bisa kita gunakan untuk mengambil warna per piksel tertentu dari suatu citra, namun pada prakteknya jika kita gunakan untuk memanipulasi piksel dari seluruh bagian citra bisa bikin program kita lambat, apalagi jika citra yang kita olah cukup besar ukurannya. Alternatif yang lebih cepat bisa kita gunakan fungsi ScanLine(). Fungsi ini mengambil nilai warna sekaligus per baris secara horizontal, dan menyimpan hasilnya dalam nilai heksadesimal $00000000 sampai $00FFFFFF. Formatnya seperti berikut:

$00BBGGRR

Dengan BB = nilai Blue, GG = nilai Green, dan RR = nilai Red dengan rentang 0-255, atau dalam heksadesimal 00-FF.

Untuk menggunakan fungsi ini kita harus set format pikselnya terlebih dahulu menggunakan fungsi FormatPixels. Lihat gambar berikut biar lebih jelas.

Image1.Picture.Bitmap.PixelFormat := pf24bit; //---set format piksel ke 24 bit
for brs := 0 to Image1.Picture.Bitmap.Height-1 do
begin
  temp := Image1.Picture.Bitmap.ScanLine[brs]; //---scan per baris
  Application.ProcessMessages;
  kol := 0;
  repeat
    clr :=((temp[kol])+(temp[kol+1])+(temp[kol+2]))div 3; //---greyscale
    for r:=0 to 2 do //----digit per piksel
      temp[kol+r] := clr;
    inc(kol,3);
  until kol >= 3*Image1.Picture.Bitmap.Width-1; //---format piksel 24bit(3x8bit) R=8bit,G=8bit,B=8 bit
end; // for
Image1.Invalidate;

 

References

[1] Wikipedia

[2] imageprocessingindelphi.blogspot.com

[3] Sutoyo,T., Edy Mulyanto, Vincent Suhartono, Oky Dwi Nurhayati, Wijanarto, Teori Pengolahan Citra Digital, UDINUS, Penerbit Andi, 2009

Comments

comments

One thought on “Dasar Pengolahan Citra dengan Dephi

  1. Makasih ilmunya bro. Saya mau tanya kalau coding buat ubah gambar RGB jadi matriks gimana ya? Saya mau menampilkan matriks dari sebuah gambar RGB. Mohon bantuannya.

    Thanks dan salam kenal. 🙂

Leave a Reply