Anda di halaman 1dari 10

PRAKTIKUM 4

Gray Scale Kuantisasi


I. Tujuan
1. Mahasswa dapat membuat program untuk merubah ctra
warna RGB men|ad Gray-Scae
2. Mahasswa dapat membuat program threshodng atau
mengatur |umah dera|at keabuan yang ada pada ctra
II. Dasar Teori
II.1 Mengubah itra !er"arna Menja#i Gray$Scale
Proses awa yang banyak dakukan daam image processing
adaah mengubah ctra berwarna men|ad ctra gray-scae, ha
n dgunakan untuk menyederhanakan mode ctra. Sepert
teah d|easkan d depan, ctra berwarna terdr dar 3 ayer
matrk yatu R-ayer, G-ayer dan B-ayer. Sehngga untuk
meakukan proses-proses sean|utnya tetap dperhatkan tga
ayer d atas. Ba setap proses perhtungan dakukan
menggunakan tga ayer, berart dakukan tga perhtungan
yang sama. Sehngga konsep tu dubah dengan mengubah 3
ayer d atas men|ad 1 ayer matrk gray-scae dan hasnya
adaah ctra gray-scae. Daam ctra n tdak ada ag warna,
yang ada adaah dera|at keabuan.
Untuk mengubah ctra berwarna yang mempunya na
matrk masng-masng r, g dan b men|ad ctra gray scae
dengan na s, maka konvers dapat dakukan dengan
mengamb rata-rata dar na r, g dan b sehngga dapat
dtuskan men|ad:
Untuk mencoba proses konvers ctra berwarna men|ad ctra
gray-scae n dapat dbuat program sepert gambar 1
Gambar 1. Contoh form untuk menangkap ctra.
II.% Threshol#ing
Threshodng dgunakan untuk mengatur |umah dera|at
keabuan yang ada pada ctra. Dengan menggunakan
threshodng maka dera|at keabuan bsa dubah sesua
kengnan, msakan dngnkan menggunakan dera|at
keabuan 16, maka tngga membag na dera|at keabuan
dengan 16. Proses threshodng n pada dasarnya adaah
proses pengubahan kuantsas pada ctra, sehngga untuk
meakukan threshodng dengan dera|at keabuan dapat
dgunakan rumus:
dmana :
w adaah na dera|at keabuan sebeum threshodng
x adaah na dera|at keabuan seteah threshodng
Berkut n contoh threshodng mua d 256, 16, 4 dan 2.
Gambar 3.3. Contoh threshodng
Untuk mencoba meakukan proses threshodng, peru
dbuat program untuk dapat mengubah-ubah na
treshodng sesua kengnan. Sehngga peru dtampkan
dua ctra, yatu ctra as (gray-scae) dan has
threshodngnya dengan na threshodng yang dtentukan
meau nput sepert terhat pada gambar 3.3.
III. Percobaan
III.1 Mengubah itra !er"arna Menja#i Gray$Scale
1. Cara mengubah ctra warna men|ad gray-scae
Buat apkas AppWzard sepert pada praktkum 1
Buat Menu dengan desan sepert berkut:
Member varabe
Iskan program pada button oad gambar
vod CLmaDg::OnButton1()
{
CDC* pDC = m_pc1.GetDC();
CDC dcMem1;
CRect rect;
BITMAP bm;
HBITMAP
hBtmap=(HBITMAP)::LoadImage(AfxGetInstanceHande(),
"satu.bmp",IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|
LR_CREATEDIBSECTION);
f(hBtmap)
{
f(m_bmpBtmap.DeeteOb|ect())
m_bmpBtmap.Detach();
m_bmpBtmap.Attach(hBtmap);
}
m_pc1.GetCentRect(rect);
m_bmpBtmap.GetBtmap(&bm);
dcMem1.CreateCompatbeDC(pDC);
dcMem1.SeectOb|ect(&m_bmpBtmap);
pDC->StretchBt(0,0,rect.Wdth(),rect.Heght(),&dcMem1,
0,0,bm.bmWdth,bm.bmHeght,SRCCOPY);
}
Iskan Program pada button to grayScae
vod CLmaDg::OnButton2()
{
nt ,|,red,green,bue,gray;
ong nt warna,warnagray;
CDC* pDC = m_pc2.GetDC();
CDC dcMem1;
CRect rect;
BITMAP bm;
HBITMAP
hBtmap=(HBITMAP)::LoadImage(AfxGetInstanceHande(),
"satu.bmp",IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|
LR_CREATEDIBSECTION);
f(hBtmap)
{
f(m_bmpBtmap.DeeteOb|ect())
m_bmpBtmap.Detach();
m_bmpBtmap.Attach(hBtmap);
}
m_pc2.GetCentRect(rect);
m_bmpBtmap.GetBtmap(&bm);
dcMem1.CreateCompatbeDC(pDC);
dcMem1.SeectOb|ect(&m_bmpBtmap);
for(=0;<bm.bmHeght;++)
for(|=0;|<bm.bmWdth;|++)
{
warna=dcMem1.GetPxe(|,);
WarnaToRGB(warna,&red,&green,&bue);
gray=nt(red+green+bue)/3;
warnagray=RGBToWarna(gray,gray,gray);
dcMem1.SetPxe(|,,warnagray);
}
pDC->StretchBt(0,0,rect.Wdth(),rect.Heght(),&dcMem1,
0,0,bm.bmWdth,bm.bmHeght,SRCCOPY);//
}
Iskan program pada button toBnner
vod CmaDg::OnButton3()
{
nt ,|,red,green,bue,gray;
ong nt warna,warnagray,ratagray;
CDC* pDC = m_pc3.GetDC();
CDC dcMem1;
CRect rect;
BITMAP bm;
HBITMAP
hBtmap=(HBITMAP)::LoadImage(AfxGetInstanceHande(),
"satu.bmp",IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|
LR_CREATEDIBSECTION);
f(hBtmap)
{
f(m_bmpBtmap.DeeteOb|ect())
m_bmpBtmap.Detach();
m_bmpBtmap.Attach(hBtmap);
}
m_pc3.GetCentRect(rect);
m_bmpBtmap.GetBtmap(&bm);
dcMem1.CreateCompatbeDC(pDC);
dcMem1.SeectOb|ect(&m_bmpBtmap);
for(=0;<bm.bmHeght;++)
for(|=0;|<bm.bmWdth;|++)
{
warna=dcMem1.GetPxe(|,);
WarnaToRGB(warna,&red,&green,&bue);
gray=nt(red+green+bue)/3;
ratagray+=gray;
}
ratagray=ratagray/(bm.bmHeght*bm.bmWdth);
for(=0;<bm.bmHeght;++)
for(|=0;|<bm.bmWdth;|++)
{
warna=dcMem1.GetPxe(|,);
WarnaToRGB(warna,&red,&green,&bue);
gray=nt(red+green+bue)/3;
f(gray<128) gray=0;
ese gray=255;
warnagray=RGBToWarna(gray,gray,gray);
dcMem1.SetPxe(|,,warnagray);
}
pDC->StretchBt(0,0,rect.Wdth(),rect.Heght(),&dcMem1,
0,0,bm.bmWdth,bm.bmHeght,SRCCOPY);//
}
Fungs mengubah warna ke rgb
vod WarnaToRGB(ong nt warna,nt *Red, nt *Green, nt
*Bue)
{
*Red = warna & 0x000000FF;
*Green = (warna & 0x0000FF00) >> 8;
*Bue = (warna & 0x00FF0000) >> 16;
}
Fungs mengubah rgb ke warna
ong nt RGBToWarna(nt Red, nt Green, nt Bue)
{
return(Red+(Green<<8)+(Bue<<16));
}
Tambahkan pada header e
pubc:
CBtmap m_bmpBtmap;
III.% Threshol#ing
1. Cara Treeshodng gambar
Buat apkas AppWzard
Buat Menu dengan desan sebaga berkut
Member varabe
Iskan program pada button oad gambar (grayscae)
vod CEnamDg::OnButton1()
{
nt ,|,red,green,bue,gray;
ong nt warna,warnagray;
CDC* pDC = m_pc1.GetDC();
CDC dcMem1;
CRect rect;
BITMAP bm;
HBITMAP
hBtmap=(HBITMAP)::LoadImage(AfxGetInstanceHande(),
"pens.bmp",IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|
LR_CREATEDIBSECTION);
f(hBtmap)
{
f(m_bmpBtmap.DeeteOb|ect())
m_bmpBtmap.Detach();
m_bmpBtmap.Attach(hBtmap);
}
m_pc1.GetCentRect(rect);//
m_bmpBtmap.GetBtmap(&bm);//
dcMem1.CreateCompatbeDC(pDC);
dcMem1.SeectOb|ect(&m_bmpBtmap);
for(=0;<bm.bmHeght;++)
for(|=0;|<bm.bmWdth;|++)
{
warna=dcMem1.GetPxe(|,);
WarnaToRGB(warna,&red,&green,&bue);
gray=nt(red+green+bue)/3;
warnagray=RGBToWarna(gray,gray,gray);
dcMem1.SetPxe(|,,warnagray);
}
pDC->StretchBt(0,0,rect.Wdth(),rect.Heght(),&dcMem1,
0,0,bm.bmWdth,bm.bmHeght,SRCCOPY);//
}
Iskan program pada button kuantsas 16
vod CEnamDg::OnButton2()
{
nt ,|,red,green,bue,th;
ong nt warna,wgray,xgray;
CDC* pDC = m_pc2.GetDC();
CDC dcMem1;
CRect rect;
BITMAP bm;
HBITMAP
hBtmap=(HBITMAP)::LoadImage(AfxGetInstanceHande(),
"pens.bmp",IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|
LR_CREATEDIBSECTION);
f(hBtmap)
{
f(m_bmpBtmap.DeeteOb|ect())
m_bmpBtmap.Detach();
m_bmpBtmap.Attach(hBtmap);
}
m_pc2.GetCentRect(rect);
m_bmpBtmap.GetBtmap(&bm);
dcMem1.CreateCompatbeDC(pDC);
dcMem1.SeectOb|ect(&m_bmpBtmap);
th= nt (256/16);
for(=0;<bm.bmHeght;++)
for(|=0;|<bm.bmWdth;|++)
{
warna=dcMem1.GetPxe(|,);
WarnaToRGB(warna,&red,&green,&bue);
wgray=(red+green+bue)/3;
xgray=th*nt (wgray/th);
warna=RGBToWarna(xgray,xgray,xgray);
dcMem1.SetPxe(|,,warna);
}
pDC->StretchBt(0,0,rect.Wdth(),rect.Heght(),&dcMem1,
0,0,bm.bmWdth,bm.bmHeght,SRCCOPY);
}
Iskan program pada button kuantsas 4
vod CEnamDg::OnButton3()
{
nt ,|,red,green,bue,th;
ong nt warna,wgray,xgray;
CDC* pDC = m_pc3.GetDC();
CDC dcMem1;
CRect rect;
BITMAP bm;
HBITMAP
hBtmap=(HBITMAP)::LoadImage(AfxGetInstanceHande(),
"pens.bmp",IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|
LR_CREATEDIBSECTION);
f(hBtmap)
{
f(m_bmpBtmap.DeeteOb|ect())
m_bmpBtmap.Detach();
m_bmpBtmap.Attach(hBtmap);
}
m_pc3.GetCentRect(rect);
m_bmpBtmap.GetBtmap(&bm);
dcMem1.CreateCompatbeDC(pDC);
dcMem1.SeectOb|ect(&m_bmpBtmap);
th= nt (256/4);
for(=0;<bm.bmHeght;++)
for(|=0;|<bm.bmWdth;|++)
{
warna=dcMem1.GetPxe(|,);
WarnaToRGB(warna,&red,&green,&bue);
wgray=(red+green+bue)/3;
xgray=th*nt (wgray/th);
warna=RGBToWarna(xgray,xgray,xgray);
dcMem1.SetPxe(|,,warna);
}
pDC->StretchBt(0,0,rect.Wdth(),rect.Heght(),&dcMem1,
0,0,bm.bmWdth,bm.bmHeght,SRCCOPY);//
}
Iskan program pada button kuantsas 2
vod CEnamDg::OnButton4()
{
nt ,|,red,green,bue,th;
ong nt warna,wgray,xgray;
CDC* pDC = m_pc4.GetDC();
CDC dcMem1;
CRect rect;
BITMAP bm;
HBITMAP
hBtmap=(HBITMAP)::LoadImage(AfxGetInstanceHande(),
"pens.bmp",IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|
LR_CREATEDIBSECTION);
f(hBtmap)
{
f(m_bmpBtmap.DeeteOb|ect())
m_bmpBtmap.Detach();
m_bmpBtmap.Attach(hBtmap);
}
m_pc4.GetCentRect(rect);
m_bmpBtmap.GetBtmap(&bm);
dcMem1.CreateCompatbeDC(pDC);
dcMem1.SeectOb|ect(&m_bmpBtmap);
th= nt (256/2);
for(=0;<bm.bmHeght;++)
for(|=0;|<bm.bmWdth;|++)
{
warna=dcMem1.GetPxe(|,);
WarnaToRGB(warna,&red,&green,&bue);
wgray=(red+green+bue)/3;
xgray=th*nt (wgray/th);
warna=RGBToWarna(xgray,xgray,xgray);
dcMem1.SetPxe(|,,warna);
}
pDC->StretchBt(0,0,rect.Wdth(),rect.Heght(),&dcMem1,
0,0,bm.bmWdth,bm.bmHeght,SRCCOPY);
}
Fungs mengubah warna ke rgb
vod WarnaToRGB(ong nt warna,nt *Red, nt *Green, nt
*Bue)
{
*Red = warna & 0x000000FF;
*Green = (warna & 0x0000FF00) >> 8;
*Bue = (warna & 0x00FF0000) >> 16;
}
Fungs mengubah rgb ke warna
ong nt RGBToWarna(nt Red, nt Green, nt Bue)
{
return(Red+(Green<<8)+(Bue<<16));
}
Tambahan pada header e
pubc:
Cbtmap m_bmpBtmap;
III.& 'atihan
1. Sebutkan proses utama pada proses konvers ctra berwarna
men|ad ctra gray-scae? Apa perbedaan antara pemakaan
rumus rata-rata x = (r + g + b) / 3 dan rumus RGB optma x
= 0.42r + 0.32g + 0.28b.
2. Ubahah program konvers ctra berwarna men|ad ctra gray
scae d atas dengan mengubah na gray scae dengan
x = 0.5r + 0.2g + 0.3b
x = 0.2r + 0.5g + 0.3b
x = 0.2r + 0.2g + 0.5b
x = 0.5r + 0.5g + 0b
x = 0.5r + 0g + 0.5b
Perhatkan bagamana perbedaan has konvers dengan tga
macam rumus d atas.
3. |easkan apa pengertan dar threshodng, dan bagamana
prosesnya? Apa hubungan threshodng dengan kuantsas
pada ctra?
4. |easkan apakah konvers ctra ke ctra bner dan proses
threshodng dengan na threshodng 2 menghaskan ctra
yang sama ?

Anda mungkin juga menyukai