Senin, 06 Juli 2009
Tugas 7
Pengenalan Angka dan Huruf
Aplikasi pengenalan angka dan huruf menggunakan Jaringan Syaraf Buatan (JSB)Secara umum dan sederhana, citra dapatdidefinisikan sebagai representasi visual dari suatu objek. Lebih jauh citra juga dapat diartikan sebagai gambaran yang representatif mengenai suatu objek sedemikian sehingga citra tersebut dapat memberikan kesan yang mendalam mengenai objek yang dimaksud. Jika ingin mendefinisikannya lebih bebas lagi, citra dapat didefinisikan sebagai bentuk visual yang dapat diterima secara baik oleh indera penglihatan, apapun bentuknya. Dalam bidang komputer, citra atau disebut juga image merupakan representasi visual dari suatu objek setelah mengalami berbagai transformasi data dari berbagai bentuk rangkaian numerik.Untuk mendapatkan data yang akurat dan konsisten dari setiap sampel, digunakan suatu metode sederhana yaitu dengan cara menghitung jumlah pixel aktif yang terdapat pada bagian-bagian dari sampel. Adapun algoritma umum dari pengekstrakan data numerik dari setiap sampel adalah sebagai berikut :1. Setiap sampel yang diamati, dibagi menjadi beberapa area, misalnya 4 kolom dan 5 baris,sehingga akan terdapat 20 area pengamatan; 2. jumlah pixel yang aktif dari setiap area yang ada dihitung secara akurat;3. dihasilkan sejumlah 20 data numerik dengan atribut kolom dan baris yang diharapkan dapat mewakili data ciri dari sampel yang diamati. Setelah melalui tahapan normalisasi, data-data numerik tadi akan menjadi data input pada JSB. Dengan demikian jumlah area yang ada pada setiap sampel akan bersesuaian dengan jumlah neuron input JSB yang akan digunakan. Agar dapat dihasilkan kumpulan data yang seragam, maka setiap sampel yang akan diamati haruslah memiliki jumlah area pembagianyang sama.
Image Retrieval
Ada dua cara yang dapat dilakukan dalam pengambilan kembali suatu image atau image retrievala. context-based adalah pengambilan data dengan merujuk pada kandungan semantik berkaitan dengan image, biasanya berhubungan dengan deskripsi image misalnya keyword dari image.b. content-based adalah pengambilan data dengan merujuk pada fitur image seperti warna, tekstur, bentuk, atau kombinasi atau yang biasa desebut dengan Content Based Image Retrieval (CBIR).Pada perkembangannya teknik context based menjadi tidak praktis dikarenakan adanya ukuran basis data yang besar dan penilaian subjektif dalam mengartikan image dengan text. Untuk menghindari teknik ini, maka digunakan pendekatan lain dalam image retrieval yaitu content based.CBIR adalah salah satu metodologi untuk pemanggilan kembali data image berdasarkan content sebuah image. Teknik CBIR yang banyak digunakan adalah teknik warna, teknik tekstur, dan teknik bentuk. Pada sistem CBIR, content visual dari image akan diekstraksi dan diuraikan menggunakan metode pengekstrakan ciri. Untuk mendapatkan kembali image, user menginputkan query image. Kemudian sistem akan mengekstrak image tersebut sehingga menghasilkan fitur ciri image. Fitur ciri image query dan image dalam database akan dicari similaritynya. Image yang memiliki nilai similarity yang paling tinggi akan muncul diurutan teratas. Gambar dibawah ini memperlihatkan bentuk umum sistem CBIR. Pada image tersebut terdapat dua jalur utama yaitu query dan database. Pada kedua lajur tersebut terdapat visual content description yang akan digunakan untuk proses similarity comparison, indexing dan retrieval.
Tugas 5
· Buat aplikasi AppWizard dan beri nama project dengan Lat17
· Buat disain dialog seperti pada gambar berikut dengan 6 buah control picture dan 7 buah button.
·
Ubah properti control dan tambahkan class variabel control tipe dan membernya seperti pada tabel berikut:
· Tambahkan program untuk melakukan konversi dari data pixel ke RGB dan dari data RGB ke data Pixel. Seperti berikut.
// 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 Re
d, int Green, int Blue)
{
return(Red+(Green<<8)+(blue<<1
6));
}
· Tambahkan program pada button1 click seperti di bawah ini,yang berfungsi untuk melakukan load gambar angka1 (Load Angka [1]).
void
CLat17Dlg::OnButton
1()
{
// TODO: Add your control notification handler code here
static char BASED_CODE
szFilter[]="Bitmap Files
(*.bmp)*.bmp";
CFileDialog m_ldFile(TRUE, "*.bmp", name,
OFN_HIDEREADONL
YOFN_OVERWRITEP
ROMPT, szFilter);
if(m_ldFile.DoModal()==IDOK)
{
name=m_ldFile.GetP
athName();
}
CDC* p
DC = m_pic1.GetDC();//
mengarah kontrol picture
CDC dcMem; //mengarahkan obyek yg sdh dipilih pd
bitmap
CRect rect;//kotak di picture
BITMAP bm;//mendefinisikan
fungsi2 yg ada d bitmap
HBITMA
P hBitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),
name ,IMAGE_BITMAP,
0, 0, LR_LOADFROMFIL
ELR_CREATEDIBSECTION);
if(hBitmap)
{
if(m_bmpBitmap.Del
eteObject())
m_bmpBitmap.Detach
();
m_bmpBitmap.Attach(h
Bitmap);
}
m_pic1.GetClientRect(rect);
m_bmpBitmap.GetB
itmap(&bm);
dcMem.CreateCompati
bleDC(pDC);
//pDC->MoveTo(10,190);
//pDC->LineTo(300,190);
dcMem.SelectObje
ct(&m_bmpBitmap);
pDC->StretchBlt(0,0
,rect.Width(),rect.Height(),&dcMem,
0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
}
· Tambahkan program pada button2 click seperti di bawah ini,yang akan melakukan proses Integral Proyeksi Horizontal terhadap angka 1 (gambar1) dan menampilkannya pada Picture 5 (gambar 5).
void CLat17Dlg::OnButton
2()
{
// TODO: Add your control notification handler code here
int i,j;
int red,green,blue;
long int warna,warna1;
//float h[384];
CDC* pDC = m_pic1.GetDC();
CDC dcMem;
CRect rect; //kotak di
picture
BITMAP bm; //mendefinisikan fungsi2 yg ada d bitmap
HBITMAP hBitm
ap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),
name ,IMAGE_BIT
MAP, 0, 0, LR_LOADFROMFILEL
R_CREATEDIBSEC
TION);
m_pic1.GetClientRect(rect);
m_bmpBitmap.GetBit
map(&bm);
dcMem.CreateComp
atibleDC(pDC);
dcMem.SelectObject(&m_bmpBitmap);
for(j=0;j
{
hx[j]=0;
for(i=0;i
{
warna=dcMem.GetPixel(j,i);
WarnaToRGB(warna,&red,&green,&blue);
hx[j]+=(float)(255-red)/255;
}
hx[j]=hx[j]/2;
}
CDC* pDC1 = m_pic5.GetDC();
for(i=1;i
{
//1.3 nilai x atau lebar
pDC1->MoveTo(i*3.5,0);
pDC1->LineTo(i*3.5,hx[i]);
}
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,
0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
}
· Tambahkan program pada button3 click seperti di bawah ini,yang akan melakukan proses Integral Proyeksi Vertical terhadap angka 1 (gambar1) dan menampilkannya pada Picture 2 (gambar 2).
void CLat17Dlg::OnButton3()
{
// TODO: Add your control notification handler code here
int i,j;
int red,green,blue;
long int warna,warna1;
//float h[384];
CDC* pDC = m_pic1.GetDC();
CDC dcMem;
CRect rect; //kotak di picture
BITMAP bm;//mendefinisikan fungsi2 yg ada d bitmap
HBITMAP hBitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),
name ,IMAGE_BITMAP, 0, 0, LR_LOADFROMFILELR_CREATEDIBSECTION);
m_pic1.GetClientRect(rect);
m_bmpBitmap.GetBitmap(&bm);
dcMem.CreateCompatibleDC(pDC);
dcMem.SelectObject(&m_bmpBitmap);
for(i=0;i
{
hy[i]=0;
for(j=0;j
{
warna=dcMem.GetPixel(j,i);
WarnaToRGB(warna,&red,&green,&blue);
hy[i]+=(float)(255-red)/255;
}
hy[i]=hy[i]/2;
}
CDC* pDC1 = m_pic2.GetDC();
for(i=1;i
{
//1.3 nilai x atau lebar
pDC1->MoveTo(0,i*2);
pDC1->LineTo(hy[i],i*2);
}
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,
0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
}
· Tambahkan program pada button4 click seperti di bawah ini,yang berfungsi untuk melakukan load gambar angka2 (Load Angka [2]).
void CLat17Dlg::OnButton4()
{
// TODO: Add your control notification handler code here
static char BASED_CODE szFilter[]="Bitmap Files (*.bmp)*.bmp";
CFileDialog m_ldFile(TRUE, "*.bmp", name, OFN_HIDEREADONLYOFN_OVERWRITEPROMPT, szFilter);
if(m_ldFile.DoModal()==IDOK)
{
name=m_ldFile.GetPathName();
}
CDC* pDC = m_pic3.GetDC(); // mengarah kontrol picture
CDC dcMem; //mengarahkan obyek yg sdh dipilih pd bitmap
CRect rect; //kotak di picture
BITMAP bm; //mendefinisikan fungsi2 yg ada d bitmap
HBITMAP hBitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),
name ,IMAGE_BITMAP, 0, 0, LR_LOADFROMFILELR_CREATEDIBSECTION);
if(hBitmap)
{
if(m_bmpBitmap.DeleteObject())
m_bmpBitmap.Detach();
m_bmpBitmap.Attach(hBitmap);
}
m_pic3.GetClientRect(rect);
m_bmpBitmap.GetBitmap(&bm);
dcMem.CreateCompatibleDC(pDC);
//pDC->MoveTo(10,190);
//pDC->LineTo(300,190);
dcMem.SelectObject(&m_bmpBitmap);
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,
0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
}
· Tambahkan program pada button5 click seperti di bawah ini,yang akan melakukan proses Integral Proyeksi Horizontal terhadap angka 2 (gambar3) dan menampilkannya pada Picture 6 (gambar 6).
void CLat17Dlg::OnButton5()
{
// TODO: Add your control notification handler code here
int i,j;
int red,green,blue;
long int warna,warna1;
//float h[384];
CDC* pDC = m_pic3.GetDC();
CDC dcMem;
CRect rect; //kotak di picture
BITMAP bm; //mendefinisikan fungsi2 yg ada d bitmap
HBITMAP hBitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),
name ,IMAGE_BITMAP, 0, 0, LR_LOADFROMFILELR_CREATEDIBSECTION);
m_pic3.GetClientRect(rect);
m_bmpBitmap.GetBitmap(&bm);
dcMem.CreateCompatibleDC(pDC);
dcMem.SelectObject(&m_bmpBitmap);
for(j=0;j
{
hx2[j]=0;
for(i=0;i
{
warna=dcMem.GetPixel(j,i);
WarnaToRGB(warna,&red,&green,&blue);
//penggunaan red, tidak terikat, bisa green atau blue
// digunakan 255- , supaya bisa masuk/mendapatkan warna hitam
hx2[j]+=(float)(255-red)/255;
}
hx2[j]=hx2[j]/2;
}
CDC* pDC1 = m_pic6.GetDC();
for(i=1;i
{
//1.3 nilai x atau lebar
// dimulai dari 0 ke atas, sehingga gambar histogramnya kebalik
pDC1->MoveTo(i*2,0);
pDC1->LineTo(i*2,hx2[i]);
}
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,
0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
}
· Tambahkan program pada button6 click seperti di bawah ini,yang akan melakukan proses Integral Proyeksi Vertical terhadap angka 2 (gambar3) dan menampilkannya pada Picture 4 (gambar 4).
void CLat17Dlg::OnButton6()
{
// TODO: Add your control notification handler code here
int i,j;
int red,green,blue;
long int warna,warna1;
//float h[384];
CDC* pDC = m_pic3.GetDC();
CDC dcMem;
CRect rect; //kotak di picture
BITMAP bm; //mendefinisikan fungsi2 yg ada d bitmap
HBITMAP hBitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),
name ,IMAGE_BITMAP, 0, 0, LR_LOADFROMFILELR_CREATEDIBSECTION);
m_pic3.GetClientRect(rect);
m_bmpBitmap.GetBitmap(&bm);
dcMem.CreateCompatibleDC(pDC);
dcMem.SelectObject(&m_bmpBitmap);
for(i=0;i
{
hy2[i]=0;
for(j=0;j
{
warna=dcMem.GetPixel(j,i);
WarnaToRGB(warna,&red,&green,&blue);
hy2[i]+=(float)(255-red)/255;
}
hy2[i]=hy2[i]/2;
}
CDC* pDC1 = m_pic4.GetDC();
for(i=1;i
{
//1.3 nilai x atau lebar
pDC1->MoveTo(0,i*2);
pDC1->LineTo(hy2[i],i*2);
}
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,
0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
}
· Tambahkan program pada button7 click seperti di bawah ini,yang berfungsi untuk melakukan load pencocokan antara angka1 dengan angka 2 dengan membandingkan perhitungan kedua integral proyeksinya,baik horizontal maupun vertical dari kedua gambar angka yang dibandingkan (Matching).
void CLat17Dlg::OnButton7()
{
// TODO: Add your control notification handler code here
CDC* pDC1 = GetDC();//
float dx=0,dy=0,d;
int i;
char str[5];
float jhx=0,jhy=0,jhx2=0,jhy2=0;
//digunakan untuk normalisasi angka1
for(i=0;i<50;i++)
jhx+=hx[i];
for(i=0;i<80;i++)
jhy+=hy[i];
for(i=0;i<50;i++)
hx[i]=hx[i]/jhx;
for(i=0;i<80;i++)
hy[i]=hy[i]/jhy;
//digunakan untuk normalisasi angka2
for(i=0;i<50;i++)
jhx2+=hx2[i];
for(i=0;i<80;i++)
jhy2+=hy2[i];
for(i=0;i<50;i++)
hx2[i]=hx2[i]/jhx2;
for(i=0;i<80;i++)
hy2[i]=hy2[i]/jhy2;
//hitung jarak
for(i=0;i<50;i++)
dx=dx+fabs (hx[i]-hx2[i]);
for(i=0;i<80;i++)
dy=dy+fabs (hy[i]-hy2[i]);
d=dx/50+dy/80;
sprintf(str,"%f",d);
pDC1->TextOut(60,320,str);
}
2. Menambah header file
· Buka file Lat17Dlg.h
· Tambahkan program seperti dibawah ini
public:
CLat17Dlg(CWnd* pParent = NULL); // standard constructor
CBitmap m_bmpBitmap;
CBitmap m_bmpBitmap2;
CString name;
float hx[300],hy[300];
float hx2[300],hy2[300];
3. Cara menjalankan program (Running Program)
· Pilih menu : Build->Execute (!)
· Click button1(Load Angka1 ): picture 1 akan menampilkan gambar angka1
· Click button2 (Integral Proyeksi Horizontal [1]): picture 5 akan menampilkan hasil integral proyeksi dari gambar angka1.
· Click button3 (Integral Proyeksi Vertical [1]): picture 2 akan menampilkan hasil integral proyeksi dari gambar angka1.
· Click button4(Load Angka2 ): picture 3 akan menampilkan gambar angka2
· Click button5 (Integral Proyeksi Horizontal [2]): picture 6 akan menampilkan hasil integral proyeksi dari gambar angka2.
· Click button6 (Integral Proyeksi Vertical [2]): picture 4 akan menampilkan hasil integral proyeksi dari gambar angka2.
· Click button7 (Matching): Akan dilakukan perhitungan kemiripan antara angka1 dengan angka2 berdasarkan bentuk integral proyeksi horizontal & integral proyeksi verticalnya.
· Hasil Running Aplikasi tampak seperti pada gambar berikut:
Tampilan Hasil Exsekusi program:
Pada Tampilan diatas dilakukan proses pembandingan antara angka 0 dan angka 6 berdasarkan integral proyeksi horizontal & integral proyeksi vertikalnya.dan diperoleh nilai error 0.012879. Semakin kecil nilai errornya (semakin mendekati 0) maka dua macam obyek akan semakin memiliki tingkat kemiripan yang tinggi.
Pada tampilan diatas dilakukan pengenalan angka terhadap obyek yang sama yaitu,angka 0 dan diperoleh hasil nilai error = 0.000000 (kedua obyek sama).
Diposkan oleh A. Fikri Akbar Hofa (013) di 08:26 0 komentar
Tugas 6
// searching for vertical linesshort[,] vse = new short[3, 3] {{ 0, 1, 0 },{ 0, 1, 0 },{ 0, 1, 0 }};AForge.Imaging.Filters.HitAndMiss vFilter =new AForge.Imaging.Filters.HitAndMiss( vse );System.Drawing.Bitmap vImage = vFilter.Apply( image );// searching for horizontal linesshort[,] hse = new short[3, 3] {{ 0, 0, 0 },{ 1, 1, 1 },{ 0, 0, 0 }};AForge.Imaging.Filters.HitAndMiss hFilter =new AForge.Imaging.Filters.HitAndMiss( hse );System.Drawing.Bitmap hImage = hFilter.Apply( image );source code 2// create filter sequenceAForge.Imaging.Filters.FiltersSequence filterSequence =new AForge.Imaging.Filters.FiltersSequence();// add 8 thinning filters with different structuring elementsfilterSequence.Add(new AForge.Imaging.Filters.HitAndMiss(new short [,] {{0, 0, 0}, {-1, 1, -1}, {1, 1, 1}}, HitAndMissMode.Thinning ));filterSequence.Add(new AForge.Imaging.Filters.HitAndMiss(new short [,] {{-1, 0, 0}, {1, 1, 0}, {-1, 1, -1}}, HitAndMissMode.Thinning ));filterSequence.Add(new AForge.Imaging.Filters.HitAndMiss(new short [,] {{1, -1, 0}, {1, 1, 0}, {1, -1, 0}}, HitAndMissMode.Thinning ));filterSequence.Add(new AForge.Imaging.Filters.HitAndMiss(new short [,] {{-1, 1, -1}, {1, 1, 0}, {-1, 0, 0}}, HitAndMissMode.Thinning ));filterSequence.Add(new AForge.Imaging.Filters.HitAndMiss(new short [,] {{1, 1, 1}, {-1, 1, -1}, {0, 0, 0}}, HitAndMissMode.Thinning ));filterSequence.Add(new AForge.Imaging.Filters.HitAndMiss(new short [,] {{-1, 1, -1}, {0, 1, 1}, {0, 0, -1}}, HitAndMissMode.Thinning ));filterSequence.Add(new AForge.Imaging.Filters.HitAndMiss(new short [,] {{0, -1, 1}, {0, 1, 1}, {0, -1, 1}}, HitAndMissMode.Thinning ));filterSequence.Add(new AForge.Imaging.Filters.HitAndMiss(new short [,] {{0, 0, -1}, {0, 1, 1}, {-1, 1, -1}}, HitAndMissMode.Thinning ));// create filter iterator for 10 iterationsAForge.Imaging.Filters.FilterIterator filter =new AForge.Imaging.Filters.FilterIterator(filterSequence, 10);
Tugas 6
Tugas 4
Laporan Resmi Praktikum 2
Laporan Resmi Praktikum 7
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
Tugas 2
Citra yang dihasilkan menggunakan metode penambahan contrass menjadi lebih terang dari citra aslinya. Namun citra yang dihasilkan tidak teralu baik (terlalu terang).
Tugas 3
Citra yang dihasilkan menggunakan metode penambahan brightness menjadi lebih terang dari citra aslinya. Namun citra yang dihasilkan tidak terlalu baik (kabur)
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)
1. 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 6
Latihan 1.
a. Transformasi Citra Negatif
Inversi citra adalah proses negatif pada citra, dimana setiap nilai citra dibalik dengan acuan threshold yang diberikan. Gambar yang dihasilkan baru sedikit terlihat ketika slider dimaksimalkan. Untuk citra dengan derajat keabuan 256, proses inversi citra didefinisikan dengan: xn = 255 – x
b. Transformasi Citra dengan fungsi LOG
Transformasi menggunakan fungsi LOG akan mempengaruhi contras dari suatu citra, citra yang ditransformasi menggunakan metode ini akan terlihat lebih terang.
c. Transformasi Citra dengan Fungsi Inverse LOG
Transformasi menggunakan fungsi inverse LOG akan mempengaruhi contras dari suatu citra, citra yang ditransformasi menggunakan metode ini akan terlihat lebih gelap.
d. Transformasi Citra Nth Power
Transformasi citra Nth power menghasilkan citra yang menyerupai grayscale.
e. Transformasi Citra Nth Root Power
Transformasi citra Nth root power menghasilkan citra yang lebih contras menyerupai transformasi menggunakan fungsi LOG
Latihan 2
· Negative : Semakin besar input gray level yang diberikan maka semakin kecil nilai output gray level yang dihasilkan. Nilai output yang didapatkan linier.
· LOG : Mula-mula nilai output gray level yang didapatkan mengalami peningkatan yang cukup besar seiring bertambahnya nilai input. Namun saat mencapai nilai input tertentu, peningkatan nilai output menjadi menurun hingga mendekati kondisi steady.
· Inverse LOG : Mula-mula nilai gray level yang didapatkan mengalami peningkatan yang kecil seiring bertambahnya nilai output. Namun saat mencapai nilai input tertentu, nilai output mengalami peningkatan yang cukup besar hingga mendekati kondisi steady
· Nth power : Karakteristiknya hamper sama seperti inverse LOG, namun lebih mendekati linier.
· Nth power root : Karakteristiknya hamper sama seperti LOG, namun lebih mendekati linier
Kesimpulan
Transformasi citra dapat dilakukan dengan berbagai cara, diantaranya dengan inverse (negative), proses logaritmik (LOG dan inverse LOG) , dan power law (Nth power dan Nth power root).
Untuk transformasi inverse diperlukan nilai maksimum yang didapatkan dari slider. Untuk transformasi LOG dan inverse LOG diperlukan nilai C yang diinputkan melalui text box. Sedangkan untuk transformasi power law dibutuhkan nilai C dan Y yang diinputkan melalui text box
Laporan Resmi Praktikum 5
1. Source code untuk brightness :
int k=GetDlgItemInt(IDC_EDIT1);
for(i=0;i
if(gray<0)gray=0; warnagray="RGBToWarna(gray,gray,gray);">2. Source code untuk contrass :
int k=GetDlgItemInt(IDC_EDIT1);
for(i=0;i
warnagray=RGBToWarna(gray,gray,gray);
dcMem1.SetPixel(j,i,warnagray);
}
Sama dengan proses brightness pada gambar RGB tetapi nilai k tidak ditambahakan dengan rata-rata nilai red, green bluenya melainkan dikalikan
3.Source code untuk autolevel :
int xmax=300,xmin=0,d;
for(i=0;i
}
d=xmin-xmax;
for(i=0;i
warna=dcMem1.GetPixel(j,i);
WarnaToRGB(warna,&red,&green,&blue);
gray=int(red+green+blue)/3;
gray=int(float(255/d)*(gray-xmax));
warna=RGBToWarna(gray,gray,gray);
dcMem1.SetPixel(j,i,warna);
}
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 :
1. Brightness adalah proses penambahan kecerahan dari nilai derajat keabuan. Proses brightness ini dilakukan dengan menambahkan nilai derajat keabuan dengan suatu nilai penambah.
2. Mengubah kontras dari suatu citra adalah proses pengaturan nilai range interval pada setiap nilai derajat keabuan
Kamis, 02 Juli 2009
Laporan Resmi praktikum 4
Analisa :
1. 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.
2.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).
3. 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.
Ternyata 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