Kamis, 23 April 2009

Praktikum ke-3 "Pembalikan Gambar"

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

II. Percobaan:


1. Buatlah program untuk melakukan perputaran citra yang setiap baris pada picture-box 1
menjadi kolom pada picture-box 2 dan setiap kolom pada picture box 1 menjadi baris pada
picture box 2. Tampilan formnya sebagai berikut




Gambar 2.1. Pembalikan gambar

Listing Program :
void CPrak3Dlg::OnButton1()
{
// TODO: Add your control notification handler code here
CDC* pDC = m_pico.GetDC();//
CDC dcMem1;
CRect rect;//kotak di picture
BITMAP bm;//
HBITMAP
hBitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),
"rhmn.bmp",IMAGE_BITMAP, 0, 0,
LR_LOADFROMFILE|LR_CREATEDIBSECTION);
if(hBitmap)
{
if(m_bmpBitmap.DeleteObject())
m_bmpBitmap.Detach();
m_bmpBitmap.Attach(hBitmap);
}
m_pico.GetClientRect(rect);//
m_bmpBitmap.GetBitmap(&bm);//
dcMem1.CreateCompatibleDC(pDC);
dcMem1.SelectObject(&m_bmpBitmap);
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem1,
0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);//
}

void CPrak3Dlg::OnButton2()
{
// TODO: Add your control notification handler code here
int i,j;
long int warna[300][300];
CDC* pDC = m_pich.GetDC();//
CDC dcMem1;
CRect rect;//kotak di picture
BITMAP bm;//
HBITMAP
hBitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),
"rhmn.bmp",IMAGE_BITMAP, 0, 0,
LR_LOADFROMFILE|LR_CREATEDIBSECTION);
if(hBitmap)
{
if(m_bmpBitmap.DeleteObject())
m_bmpBitmap.Detach();
m_bmpBitmap.Attach(hBitmap);
}
m_pich.GetClientRect(rect);//
m_bmpBitmap.GetBitmap(&bm);//
dcMem1.CreateCompatibleDC(pDC);
dcMem1.SelectObject(&m_bmpBitmap);

for(i=0;iStretchBlt(0,0,rect.Width(),rect.Height(),&dcMem1,
0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);//
}

void CPrak3Dlg::OnButton3()
{
// TODO: Add your control notification handler code here
int i,j;
long int warna[300][300];
CDC* pDC = m_picv.GetDC();//
CDC dcMem1;
CRect rect;//kotak di picture
BITMAP bm;//
HBITMAP
hBitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),
"rhmn.bmp",IMAGE_BITMAP, 0, 0,
LR_LOADFROMFILE|LR_CREATEDIBSECTION);
if(hBitmap)
{
if(m_bmpBitmap.DeleteObject())
m_bmpBitmap.Detach();
m_bmpBitmap.Attach(hBitmap);
}
m_picv.GetClientRect(rect);//
m_bmpBitmap.GetBitmap(&bm);//
dcMem1.CreateCompatibleDC(pDC);
dcMem1.SelectObject(&m_bmpBitmap);

for(i=0;iStretchBlt(0,0,rect.Width(),rect.Height(),&dcMem1,
0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);//
}
Hasil Praktikum :

Analisa :


Kamis, 16 April 2009

Sambungan program tugas pada praktikum 2

void CPrak2Dlg::red() // fungsi untuk mengisi kolom bagian warna merah
{
 UpdateData();
 CDC* pDC = m_picr.GetDC(); 
 CDC dcMem; 
 CRect rect; 
 BITMAP bm;// 
 int i,j,r,g,b,w; 
 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_picr.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();
  g = 0;
  b = 0;
  r = m_nilai;
  w = r+(g<<8)+(b<<16);
   
  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);
}

void CPrak2Dlg::green() // fungsi untuk mengisi kolom bagian warna hijau
{
 UpdateData();
 CDC* pDC = m_picg.GetDC(); 
 CDC dcMem; 
 CRect rect; 
 BITMAP bm;// 
 int i,j,r,g,b,w; 
 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_picg.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();
  g = m_nilau;
  b = 0;
  r = 0;
  w = r+(g<<8)+(b<<16);
   
  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);
}

void CPrak2Dlg::blue() // fungsi untuk mengisi kolom bagian warna biru
{
 UpdateData();
 CDC* pDC = m_picb.GetDC(); 
 CDC dcMem; 
 CRect rect; 
 BITMAP bm;// 
 int i,j,r,g,b,w; 
 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_picb.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();
  g = 0;
  b = m_nilao;
  r = 0;
  w = r+(g<<8)+(b<<16);
   
  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);
}

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.


Kamis, 02 April 2009

praktikum1 "perkenalan MFC"

1. Tujuan :

Mahasiswa dapat membuat program pengolahan citra menggunakan Visual C++dengan MFC.
Mahasiswa dapat membuat dialog menggunakan Visual C++ dengan MFC.

2. Dasar Teori :

Image processing atau sering disebut dengan pengolahan citra digital merupakan suatu proses dari gambar asli menjadi gambar lain yang sesuai dengan keinginan kita. Misal suatu gambar yang kita dapatkan terlalu gelap maka dengan image processing gambar tersebut bisa kita proses sehingga mendapat gambar yang jelas. Secara garis besar bisa kita gambarkan seperti blok diagram pada gambar 1.2 dibawah ini:


Analisa

Latihan 1
Buat program untuk menampilkan Tulisan “Selamat Belajar Pengolahan Citra” dengan menggunakan MessageBox bila submenu yang dipilih.
Penyelesaian :
void CCupuDlg::OnButton1()
{
MessageBox("Selamat Belajar Pengolahan Citra");
}
Hasil :


Latihan 2
Buatlah program untuk menampilkan Tulisan “Ini adalah Teks” pada fungsi OnDraw(CDC* pDC) dengan menggunakan pDC->TextOut(10,10,"Ini adalah Teks");

Penyelesaian :
void CCupuDlg::OnButton1()
{
CDC* pDC = GetDC();
pDC->TextOut(10,10,"Ini adalah Teks");
}
Hasil :



Latihan 3
Buatlah program untuk mengambar sumbu x dan sumbu y pada fungsi OnDraw(CDC* pDC) dengan menggunakan pDC->MoveTo(10,10) dan pDC->LineTo(10,100)

Penyelesaian :

void CCupuDlg::OnButton1()
{
CDC* pDC = GetDC();
pDC->MoveTo(20,20); // menentukan posisi awal ( sumbu y )
pDC->LineTo(20,120); // membuat garis dari titik awal ke titik tujuan ( sumbu y )
pDC->TextOut(5,5,"y"); // mencetak tulisan “y”
pDC->MoveTo(20,120); // menentukan posisi awal ( sumbu x )
pDC->LineTo(120,120); // membuat garis dari titik awal ke titik tujuan ( sumbu x )
pDC->TextOut(125,125,"x"); // mencetak tulidan “x”
}
Hasil :



Latihan 4

Buatlah program untuk menampilkan persamaan linear y=x pada fungsi OnDraw(CDC* pDC) dimana nilai x dari 0 sampai 100

Penyelesaian :

void CCupuDlg::OnButton1()
{
int y,x;
CDC* pDC = GetDC();
pDC->MoveTo(0,0); // menset nilai awal pada titik (0,0)
for(x=0;x<=100;x++) // melakukan perulangan untuk nilai x = 0 s/d x = 100
{
pDC->LineTo(x,x); // membuat garis dengan titik akhir (x,x), dg nilai awal di atas
pDC->MoveTo(x,x); // menjadikan (x,y) sebagai titik awal untuk line selanjutnya.
}
}
Hasil :



Latihan 5
Buatlah program untuk menampilkan persamaan kuadrat y=x2 dimana nilai x dari 0 sampai 100 bila submenu yang dibuat dipilih.

Penyelesaian :

void CCupuDlg::OnButton1()
{
int y,x;
CDC* pDC = GetDC();
pDC->MoveTo(0,0); // membuat satu nilai awal pertama
for(x=0;x<=100;x++) // melakukan perulangan untuk nilai x = 0 s/d x = 100
{
y = x*x; // fungsi yang diminta
pDC->LineTo(x,y); // membuat garis dengan titik akhir (x,y), dg nilai awal di atas
pDC->MoveTo(x,y); // menjadikan (x,y) sebagai titik awal untuk line selanjutnya
}
}

Hasil :



KESIMPULAN :
Aplikasi MFC pada visual c++ dapat digunakan sebagai media untuk melakukan pengolahan citra digital
Screen dari hasil running merupakan diagram kartesius dengan nilai y akan semakin besar nilainya jika posisinya semakin berada di bawah. (berkebalikan dengan yang umum)
Terdapat fasilitas dialog untuk mempermudah user dalam pengoperasiannya.