Senin, 29 Juni 2009

Laporan Resmi Praktikum 7

Analisa :

1. Tugas 1

a. Histogram citra gray scale : grafik yang menggambarkan hubungan antara suatu nilai dan banyaknya nilai itu muncul pada sebuah data

b. Kumulatif histogram citra gray scale : banyaknya kemunculan suatu nilai pada sebuah data

c. Histogram equalisasi citra gray scale : suatu proses perataan histogram, dimana distribusi nilai derajat keabuan pada suatu citra dibuat rata

2. Tugas 2


Citra yang dihasilkan menggunakan metode penambahan contrass menjadi lebih terang dari citra aslinya. Namun citra yang dihasilkan tidak teralu baik (terlalu terang).

3. Tugas 3

Citra yang dihasilkan menggunakan metode penambahan brightness menjadi lebih terang dari citra aslinya. Namun citra yang dihasilkan tidak terlalu baik (kabur)

4. Tugas 4



Hasil dari hequalization ternyata sesuai dengan yang terdapat pada teori yaitu naik secara linier. Hal tersebut dikarenakan Hequalization (perataan histogram) adalah suatu proses dimana histogram diratakan berdasarkan suatu fungsi linier (garis lurus)

5. Tugas 5

Citra yang didapatkan melalui proses perbaikan citra (enhancement) menggunakan histogram equalisasi ternyata memang lebih baik (jelas) dibandingkan dengan citra aslinya.

Kesimpulan :

1. Metode histogram equalisasi (perataan citra) memang baik digunakan untuk proses enhancement. Citra yang dihasilkan menjadi lebih baik (jelas)
2. Histogram equalization dilakukan dengan cara meratakan distribusi nilai derajat keabuan dari suatu citra.

Laporan Resmi Praktikum 5

Analisa :

* Latihan 1
Source code untuk brightness :
Nilai warna pada setiap pixel akan diambil rata-rata red, green dan bluenya kemudian nilai rata-rata itu akan ditambahkan dengan nilai brightness yang didapat dari textbox, nilai warna akan dibatasi dari 0 sampai dengan 255,kemudian semua titik akan diberikan nilai warna baru tersebut.

* Latihan 2 Source code untuk contrass :
Sama dengan proses brightness pada gambar RGB tetapi nilai k tidak ditambahkan dengan rata-rata nilai red, green bluenya melainkan dikalikan

* Latihan 3Source code untuk autolevel :

Auto level akan mengatur brightness dan contrass gambar secara otomatis, dengan cara mencari nilai terbesar dan terkecil rata-rata red green blue tiap-tiap pixel, setelah itu akan dicari jarak antara nilai terkcil dan terbesar yang akan dijadikan sebagai nilai untuk memperbaiki citra, dalam hal ini citra akan diubah ke format grayscale


Kesimpulan :

- Brightness adalah proses penambahan kecerahan dari nilai derajat keabuan. Proses brightness ini dilakukan dengan menambahkan nilai derajat keabuan dengan suatu nilai penambah.
- Mengubah kontras dari suatu citra adalah proses pengaturan nilai range interval pada setiap nilai derajat keabuan

Laporan Resmi Praktikum 4

Analisa

* Latihan 1
- Pada pengubahan sebuah gambar menjadi grayscale dapat dilakukan dengan cara mengambil semua pixel pada gambar kemudian warna tiap pixel akan diambil informasi mengenai 3 warna dasar yaitu merah, biru dan hijau (melalui fungsi warnatoRGB), ketiga warna dasar ini akan dijumlahkan kemudian dibagi tiga sehingga didapat nilai rata-rata. Nilai rata-rata inilah yang akan dipakai untuk memberikan warna pada pixel gambar sehingga warna menjadi grayscale, tiga warna dasar dari sebuah pixel akan diset menjadi nilai rata-rata (melalui fungsi RGBtowarna)
- Proses dari rumus keduanya hampir sama, bedanya pada rumus pertama warna pada setiap pixel yang telah dirata-rata akan dikalikan dengan nilai derajat keabuan (th), sehingga terjadi pengelompokan warna menjadi beberapa kelompok sesuai dengan nilai kuantisasinya.


* Latihan 2
a. Untuk rumus x = 0.2r + 0.2g + 0.5b


b. Untuk rumus x = 0.5r + 0.5g + 0b


c. Untuk rumus x = 0.5r + 0g + 0.5b


Gambar yang paling terang diperoleh pada saat menggunakan rumus ke-2 (x = 0.5r + 0.5g + 0b). Sedangkan gambar paling tidak terang diperoleh saat menggunakan rumus ke-1 (x = 0.2r + 0.2g + 0.5b).


* Latihan 3
- Thresholding digunakan untuk mengatur jumlah derajat keabuan yang ada pada citra. Dengan menggunakan thresholding maka derajat keabuan bisa diubah sesuai keinginan, misalkan diinginkan menggunakan derajat keabuan 16, maka tinggal membagi nilai derajat keabuan dengan 16. Proses thresholding ini pada dasarnya adalah proses pengubahan kuantisasi pada citra, sehingga untuk melakukan thresholding dengan derajat keabuan dapat digunakan rumus:
dimana :
w adalah nilai derajat keabuan sebelum thresholding
x adalah nilai derajat keabuan setelah thresholding

- Hubungan thresholding dengan kuantisasi citra yaitu kuantisasi citra dapat diperoleh berdasarkan derajat keabuan yang dimasukkan dalam rumus thresholding.


4. Latihan 4
Gambar dengan thresholding 2
Gambar hasil konversi citra ke citra binerTernyata gambar yang dihasilkan dengan nilai thresholding 2 dan gambar hasil konversi citra ke citra biner tidak sama. Untuk gambar yang pertama digunakan metode thresholding dengan nilai derajad keabuan sebesar 2.


Kesimpulan :

- Pada proses thresholding, kuantisasi citra yang bervariasi dapat diperoleh dengan mengubah nilai derajat keabuan pada rumus thresholding.
- Proses kuantisasi hampir sama dengan grayscale, bedanya warna pada setiap pixel yang telah dirata-rata akan dikalikan dengan nilai derajat keabuan (th), sehingga terjadi pengelompokan warna mejadi beberapa kelompok sesuai dengan nilai kuantisasinya

Minggu, 28 Juni 2009

Laporan Resmi Praktikum 2

Analisa

Listing Program :



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.

Kesimpulan :

- Pencampuran ketiga warna dasar akan menghasilkan berbegai warna bergantung dari kadar dari masing-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.

Rabu, 03 Juni 2009

Jawaban tugas 2



Jawaban tugas 1

Void CTgs1View::OnTestOpenfile( )
{
// TODO: Add your command handler code here
static char BASED_CODE szFilter]="Bitmap Files (*.bmp)|*.bmp||";
CFileDialog m_ldFile(TRUE, "*.bmp", name, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, szFilter);
if(m_ldFile.DoModal()==IDOK)
{
name=m_ldFile.GetPathName();
LoadGambar();
}}
// merubah data pixel ke RGB
void WarnaToRGB(long int warna,int *Red, int *Green, int *Blue)
{
*Red = warna & 0x000000FF;
*Green = (warna & 0x0000FF00) >> 8;
*Blue = (warna & 0x00FF0000) >> 16;
}
//merubah RGB ke data pixel
long int RGBToWarna(int Red, int Green, int Blue)
{
return(Red+(Green<<8)+(blue<<16));>
}

// Menampilkan gambar hasil dari open file
void CEdgeRobertView::LoadGambar(void)
{
CDC* pDC = GetDC();
CDC dcMem;
int i,j,r,g,b,s;
long int w;
HBITMAP hBitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(), name,
IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION);
if(hBitmap)
{
if(m_bmpBitmap.DeleteObject())
m_bmpBitmap.Detach();
m_bmpBitmap.Attach(hBitmap);
}
dcMem.CreateCompatibleDC(pDC);
dcMem.SelectObject(&m_bmpBitmap);

// Proses RGB to GRAY-SCALE
f0r(i=0;i<250;i++)>
f0r(j=0;j<250;j++)>
w=dcMem.GetPixel(j,i);
WarnaToRGB(w,&r,&g,&b);
s=int((r+g+b)/3);
w=RGBToWarna(s,s,s);
dcMem.SetPixel(j,i,w);
}
pDC->BitBlt(0,0,250,250,&dcMem,0,0,SRCCOPY);
}

void CEdgeRobertView::OnTestEdgerobert()
{
// TODO: Add your command handler code here
CDC* pDC = GetDC();
CDC dcMem;
int i,j,r,g,b;
int resultr,resultg,resultb;
long int w,mat[1][2];
int h[1][2],hr,hg,hb;
dcMem.CreateCompatibleDC(pDC);
dcMem.SelectObject(&m_bmpBitmap);
// Proses Konvolusi
int nh=2; // Menyatakan ukuran filter
// Penentuan kernel filter
h[0][0]=-1; h[0][1]=1;
int u=0;//Menyatakan ukuran filter orizontal
f0r(i=0;i<250;i++)>
f0r(j=0;j<250;j++){>
mat[0][0]=dcMem.GetPixel(j,i);
mat[0][1]=dcMem.GetPixel(j,i+1);
hr=0;hg=0;hb=0;
//Menyatakan ukuran filter vertikal
f0r(int v=0;v<2;v++){>
WarnaToRGB(mat[u][v],&r,&g,&b);
hr+=r*h[u][v];
hg+=g*h[u][v];
hb+=b*h[u][v];
}
resultr=hr;
resultg=hg;
resultb=hb;
if(resultr>255)resultr=255;
if(resultg>255)resultg=255;
if(resultb>255)resultb=255;
w=RGBToWarna(resultr,resultg,resultb);
dcMem.SetPixel(j,i,w);

void CTgs1View::OnTestEdgeprewitt()
{
// TODO: Add your command handler code here
CDC* pDC = GetDC();
CDC dcMem;
int i,j,r,g,b,u,v;
int resultr,resultg,resultb;
long int mat[3][3],temp[250][250];
int hy[3][3],hx[3][3],hrx,hgx,hbx,hry,hgy,hby;
dcMem.CreateCompatibleDC(pDC);
dcMem.SelectObject(&m_bmpBitmap);
// Proses Konvolusi
int nh=3; // Menyatakan ukuran filter
// Penentuan kernel filter hy
hy[0][0]=-1; hy[0][1]=0; hy[0][2]=1;
hy[1][0]=-1; hy[1][1]=0; hy[1][2]=1;
hy[2][0]=-1; hy[2][1]=0; hy[2][2]=1;
// Penentuan kernel filter hx
hx[0][0]=-1; hx[0][1]=-1; hx[0][2]=-1;
hx[1][0]=0; hx[1][1]=0; hx[1][2]=0;
hx[2][0]=1; hx[2][1]=1; hx[2][2]=1;
f0r(i=0;i<250;i++)>
f0r(j=0;j<250;j++){>
mat[0][0]=dcMem.GetPixel(j-1,i-1);
mat[0][1]=dcMem.GetPixel(j,i-1);
mat[0][2]=dcMem.GetPixel(j+1,i-1);
mat[1][0]=dcMem.GetPixel(j-1,i);
mat[1][1]=dcMem.GetPixel(j,i);
mat[1][2]=dcMem.GetPixel(j+1,i);
mat[2][0]=dcMem.GetPixel(j-1,i+1);
mat[2][1]=dcMem.GetPixel(j,i+1);
mat[2][2]=dcMem.GetPixel(j+1,i+1);
hrx=0;hgx=0;hbx=0;
hry=0;hgy=0;hby=0;
f0r(u=0;u
f0r(v=0;v
WarnaToRGB(mat[u][v],&r,&g,&b);
hrx+= r*hx[u][v];
hgx+= g*hx[u][v];
hbx+= b*hx[u][v];
hry+= r*hy[u][v];
hgy+= g*hy[u][v];
hby+= b*hy[u][v];
}
resultr=abs(hrx)+abs(hry);
resultg=abs(hgx)+abs(hgy);
resultb=abs(hbx)+abs(hby);
if(resultr>255)resultr=255;
if(resultg>255)resultg=255;
if(resultb>255)resultb=255;
temp[j][i]=RGBToWarna(resultr,resultg,resultb);
}
f0r(i=0;i<250;i++)>
f0r(j=0;j<250;j++)>
dcMem.SetPixel(j,i,temp[j][i]);
pDC->BitBlt(250,0,500,250,&dcMem,0,0,SRCCOPY);
}

void CTgs1View::OnTestEdgesobel ()
{
// TODO: Add your command handler code here
CDC* pDC = GetDC();
CDC dcMem;
int i,j,r,g,b,u,v;
int resultr,resultg,resultb;
long int mat[3][3],temp[150][150];
int hy[3][3],hx[3][3],hrx,hgx,hbx,hry,hgy,hby;
dcMem.CreateCompatibleDC(pDC);
dcMem.SelectObject(&m_bmpBitmap);
// Proses Konvolusi
int nh=3; // Menyatakan ukuran filter
// Penentuan kernel filter hy
hy[0][0]=-1; hy[0][1]=0; hy[0][2]=1;
hy[1][0]=-2; hy[1][1]=0; hy[1][2]=2;
hy[2][0]=-1; hy[2][1]=0; hy[2][2]=1;
// Penentuan kernel filter hx
hx[0][0]=-1; hx[0][1]=-2; hx[0][2]=-1;
hx[1][0]=0; hx[1][1]=0; hx[1][2]=0;
hx[2][0]=1; hx[2][1]=2; hx[2][2]=1;
f0r(i=0;i<250;i++)>
f0r(j=0;j<250;j++){>
mat[0][0]=dcMem.GetPixel(j-1,i-1);
mat[0][1]=dcMem.GetPixel(j,i-1);
mat[0][2]=dcMem.GetPixel(j+1,i-1);
mat[1][0]=dcMem.GetPixel(j-1,i);
mat[1][1]=dcMem.GetPixel(j,i);
mat[1][2]=dcMem.GetPixel(j+1,i);
mat[2][0]=dcMem.GetPixel(j-1,i+1);
mat[2][1]=dcMem.GetPixel(j,i+1);
mat[2][2]=dcMem.GetPixel(j+1,i+1);
hrx=0;hgx=0;hbx=0;
hry=0;hgy=0;hby=0;
f0r(u=0;u
f0r(v=0;v
WarnaToRGB(mat[u][v],&r,&g,&b);
hrx+= r*hx[u][v];
hgx+= g*hx[u][v];
hbx+= b*hx[u][v];
hry+= r*hy[u][v];
hgy+= g*hy[u][v];
hby+= b*hy[u][v];
}
resultr=abs(hrx)+abs(hry);
resultg=abs(hgx)+abs(hgy);
resultb=abs(hbx)+abs(hby);
if(resultr>255)resultr=255;
if(resultg>255)resultg=255;
if(resultb>255)resultb=255;
temp[j][i]=RGBToWarna(resultr,resultg,resultb);
}
f0r(i=0;i<250;i++)>
f0r(j=0;j<250;j++)>
dcMem.SetPixel(j,i,temp[j][i]);
pDC->BitBlt(250,0,500,250,&dcMem,0,0,SRCCOPY);
}