Kamis, 16 April 2009

praktikum PCD 2

Dasar Pengolahan Citra 1
1. Tujuan : 
     1. Mahasiswa dapat membuat program untuk memproses gambar dengan mengambil warna            RGB 

     2. Mahasiswa dapat membuat program untuk memproses gambar dengan meletakkan warna          RGB pada lokasi x dan y.

2. Dasar Teori : 

      Dasar dari pengolahan citra adalah pengolahan warna RGB pada posisi tertentu. Dalam pengolahan citra warna dipresentasikan dengan nilai hexadesimal dari 0x00000000 sampai 0x00ffffff. Warna hitam adalah 0x00000000 dan warna putih adalah 0x00ffffff. Definisi nilai warna di atas seperti gambar 2.1, variabel 0x00 menyatakan angka dibelakangnya adalah hexadecimal. 

Gambar 2.1 Nilai warna RGB dalam hexadesimal 

Terlihat bahwa setiap warna mempunyai range nilai 00 (angka desimalnya adalah 0) dan ff (angka desimalnya adalah 255), atau mempunyai nilai derajat keabuan 256 = 28. Dengan demikian range warna yang digunakan adalah (28)(28)(28) = 224 (atau yang dikenal dengan istilah True Colour pada Windows). Nilai warna yang digunakan di atas merupakan gabungan warna cahaya merah, hijau dan biru seperti yang terlihat pada gambar 2.2. Sehingga untuk menentukan nilai dari suatu warna yang bukan warna dasar digunakan gabungan skala kecerahan dari setiap warnanya. 


Gambar 2.2 Komposisi warna RGB 

Dari definisi diatas untuk menyajikan warna tertentu dapat dengan mudah dilakukan, yaitu dengan mencampurkan ketiga warna dasar RGB, table 1. berikut memperlihatkan contoh-contoh warna yang bisa digunakan

Untuk mengetahui kombinasi warna, perlu dibuat suatu program yang dapat menampilkan warna sesuai dengan nilai yang dimasukkan sehingga dapat dicoba berbagai macam kombinasiwarna RGB seperti gambar 2.2.

Analisa

Listing program latihan 1
void CPrak2Dlg::OnButton1() 
{
 // TODO: Add your control notification handler code here
 UpdateData();
 CDC* pDC = m_picgab.GetDC(); // penentuan kolom yg akan diisi
 CDC dcMem; 
 CRect rect; 
 BITMAP bm;// 
 int i,j,r,g,b,w; // inisialisasi variabel
 long int warna; 
 char str[5]; 
 HBITMAP hBitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(), 
 "ibra.bmp",IMAGE_BITMAP, 0, 0, 
 LR_LOADFROMFILE|LR_CREATEDIBSECTION); 
 if(hBitmap) 
 { 
  if(m_bmpBitmap.DeleteObject()) 
  m_bmpBitmap.Detach(); 
  m_bmpBitmap.Attach(hBitmap); 
 } 
 m_picgab.GetClientRect(rect); 
 m_bmpBitmap.GetBitmap(&bm); 
 dcMem.CreateCompatibleDC(pDC); 
 dcMem.SelectObject(&m_bmpBitmap); 
 
 for(i=0;i  for(j=0;j  { 
  // memberi warna pada titik 
  UpdateData(); // mengambil nilai dari edit box
  g = m_nilau;
  b = m_nilao;
  r = m_nilai;
  w = r+(g<<8)+(b<<16); // perhitungan untuk warna hasil campuran
   
  dcMem.SetPixel(j,i,w);
  } 

 pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem, 
 0,0,bm.bmWidth,bm.bmHeight,SRCCOPY); 
 // membaca warna pada titik 
 warna=dcMem.GetPixel(5,5); 
 sprintf(str,"%ld",warna); 
 pDC->TextOut(10,10,str);
 red(); // pemanggilan fungsi untuk mengisi kolom merah
 green(); // pemanggilan fungsi untuk mengisi kolom hijau

 blue(); // pemanggilan fungsi untuk mengisi kolom biru
}

 
 

 Pada dasarnya pengerjaan program ini sama dengan yang dicontohkan, perbedaannya adalah disini digunakan satu ruang tambahan (picture) untuk menampung hasil dari pencampuran ketiga warna. Besar dari ukuran masing-masing warna penyusun juga tidak fixed seperti pada program contoh, melainkan meminta input dari user ( 0 – 255 ). Input ini akan dibaca sebagai nilai integer. Disini juga hanya digunakan sebuah tombol (command) untuk mengisi keempat kolom (picture). Sehingga pada program button ini terdapat empat kali proses pengisian warna, yang pertama dikerjakan adalah mengisi warna hasil pencampuran, kemudian red, green, lalu blue. Tidak harus urut seperti ini, melainkan merupakan kreasi programmer masing-masing.

Konfigurasi :


Hasil : 


Kesimpulan :

Pencampuran ketiga warna dasar akan menghasilkan berbegai wrna bergantung dari kadar dari maasing-masing warna
Dalam numerisasi heksa untuk warna, dua digit paling belakang diwakili warna merah, kemudian dua digit selanjutnya diwakili warna hijau, dan biru untuk dua digit berikutnya.


Tidak ada komentar:

Posting Komentar