Selasa, 07 Juli 2009

Jawaban Tugas 2



Jawaban Tugas 7

Deteksi Warna Kulit

Satu fungsi image adalah satu penyajian matematis dari satu image, antara lain: f ( x) = f ( x,y ) intensitas cahaya atau daya pada posisi x. Satu dapat tulis: f ( x) = i( x). r ( x) dengan i (x ) iluminasi dan r (x ) pemantulan. Keduanya adalah terbatas: MEMASUKI<= i( x) <= dan memasuki<= r ( x) <= 1, sesuai dengan total pemantulan batas serapan dan penjumlahan. Pentingnya r (x ) dalam hal ini, tapi dengan cahaya struktur dan bentuk dari menaungi i(x ) permainan satu peran penting. Dengan tampilan hitam dan putih , f ( x) adalah satu nilai skalar; di image spektral multi f (x ) adalah satu nilai vektor. Image yang punya f 3 dimensi: f ( x) = { fred (x ), fgreen (x ), fblue (x )}. Pencitraan image diambil dari satelit atau pesawat udara, menghasilkan satu image yang mana dapat bisa berada pada dimensi 30 sampai dimensi 256 . Untuk 3 - D menggambar satu x= penggunaan {x,y,x }, dan untuk satu gugus berkala image: f ( x,t ). Satu model pendigitan dideskripsikan pada koordinat digtal ruang dan waktu, memanggil sampling, dan nilai intensitas tersebut, disebut dengan kuantisasi. Kamera CCD dan scanner sering mempergunakan persegi untuk melakukan sampling; pancaran pemasukan kemudian adalah terintegrasi berlalu area atau bagian dari ini. Untuk menggambar image yang mana harus diperlihatkan pada televisi, segiempat memiliki sisi dengan rasio 4:3 ( rasio aspek) atau 16:9 untuk layar lebar paling baru standar TV. Format lain digunakan juga pada kamera CCD percobaan seperti titik bersudut enam. Ini mempunyai keuntungan pada satu titik yang punya memiliki jenis sesuatu dari titik berdekatan. Ketika memilih satu sistem kamera lensa zoom, pastikan bahwa resolusinya cukup tinggi jadi saat itu resolusi paling kecil punya satu luas permukan dari paling tidak pada suatu titik tertentu. Banyaknya pixel yang diperlukan tergantung pada kebutuhan yang diukur dan dengan akurasi yang dihitung. Lebih tinggi daya pisah, makin banyak tempat yang diperlukan untuk penyimpanan ini. Waktu kalkulasi untuk algoritma juga bertambah, misal seperti n.ln (n ), n2 atau n3, n menjadi beberapa titik. Itulah sebabnya mengapa daya pisah piramida dipergunakan: antara lain dari satu 512*512 memperoleh image, kita hitung pertama 256*256, 128*128, 64*64, dsb. image. Menemukan objek dapat terjadi pada 64*64 gambar. Menentukan permukaan dari satu objek kemudian lebih tepat pada 512*512 gambar. Tentu, waktu yang ada harus dibebani siap sedia dibutuhkan ke bangun piramida seperti halnya ingatan ekstra memerlukan simpan image. Bagaimanapun, sejumlah titik pada image ekstra tidak akan pernah lebih dari sejumlah titik pada image asli (melihat bab 7.1.1). Sejumlah bytes memerlukan untuk menyimpan data intermediate, seperti itu tepi dari objek, dapat kurang














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 pembagian
yang sama.


Image Retrieval

Ada dua cara yang dapat dilakukan dalam pengambilan kembali suatu image atau image retrieval
a. 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.

Jawaban Tugas 6

// searching for vertical lines

short[,] 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 lines

short[,] 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 sequence
AForge.Imaging.Filters.FiltersSequence filterSequence =
new AForge.Imaging.Filters.FiltersSequence();
// add 8 thinning filters with different structuring elements
filterSequence.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 iterations
AForge.Imaging.Filters.FilterIterator filter =
new AForge.Imaging.Filters.FilterIterator(filterSequence, 10);

Jawaban Tugas 5

Pengenalan Angka

· 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

Y|OFN_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

E|LR_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_LOADFROMFILE|L

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_LOADFROMFILE|LR_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_HIDEREADONLY|OFN_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_LOADFROMFILE|LR_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_LOADFROMFILE|LR_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_LOADFROMFILE|LR_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).