Selasa, 07 Juli 2009

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);

Kamis, 02 Juli 2009

Tugas 7 (Karya Tulis)

Content Based Image Retrieval (CBIR)

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.






www.ittelkom.ac.id/library/index.php?option


Sistem Pengenalan Wajah Optimal


Sistem Pengenalan Wajah
Wajah manusia merupakan objek dinamik yang memiliki tingkat variabilitas yang
tinggi. Hal ini membuat sistem pengenalan wajah yang memanfaatkan komputer meru-
pakan sistem yang tidak sederhana. Permasalahan umum yang ingin dijawab oleh sis-
tem ini adalah : Diberikan citra statis atau citra video, tunjukkan bagian citra yang
yang mengandung wajah(-wajah), jika ada identifikasi atau verifikasi wajah tersebut.
Pada dasarnya ada lima langkah yang dilakukan dalam pengenalan wajah yaitu
menangkap citra wajah baik langsung maupun tidak langsung, melakukan segmen-
tasi atau deteksi wajah dengan cara melokalisir wajah dari latar belakangnya, meng-
ekstraksi ciri wajah dari region wajah yang sudah terdeteksi untuk mendapatkan tem-
plate wajah, membandingkan template dengan template pada basisdata wajah dan
menunjukkan hasilnya. Gambar 2.1 memperlihatkan langkah-langkah tersebut secara
generik.
Gambar 2.1: Diagram Blok Sistem Pengenalan Wajah Generik
Penangkapan citra wajah (image capturing) dapat dilakukan secara langsung (real
time) menggunakan kamera video atau secara tidak langsung dimana citra wajah di-
ambil dari citra yang sudah ada ataupun dipindahkan dengan bantuan scanner. Secara
umum tahapan ini bisa dilakukan tanpa kendala yang berarti. Tahap lokalisasi wajah
adalah tahap dimana komputer mencoba melokalisir wajah yang ada di dalam citra,
kemudian memisahkannya dari latar belakangnya. Tahapan ini merupakan tahapan
yang sukar dilakukan namun sangat penting, walaupun dalam literatur masih belum
banyak dibahas [6]. Pengetahuan tentang bagaimana bentuk wajah serta warna kulit
sangat mempengaruhi kesuksesan pendeteksian wajah. Setelah citra wajah diperoleh,
maka dilakukan tahap analisis karakteristik wajah dimana ciri-ciri khusus wajah diek-
straksi (features extraction) untuk memperoleh template wajah. Template ini berisi
kumpulan data wajah yang telah direduksi demikian rupa yang menunjukkan ciri-ciri
khusus wajah yang bersangkutan. Tahapan pengenalan wajah dapat dikelompokkan
dalam 2 bagian yaitu identifikasi (who is X?) dan verifikasi (is this X?). Pada tahapan
ini template akan dibandingkan dengan template yang ada pada basisdata wajah.
Dalam literatur disebutkan topik-topik penelitian lain yang berkaitan dengan pen-
deteksian wajah antara lain adalah penelitian ekspresi wajah dan juga penelusuran
wajah (face tracking).
2.2 Metode Pendeteksian Wajah
Pendeteksian wajah merupakan bagian yang utama dalam sistem pengenalan wajah.
Literatur memberikan penjelasan yang berbeda-beda mengenai metode-metode yang
digunakan pada tahapan ini. Chellapa dalam [30] membagi sistem pengenalan wa-
jah menjadi tiga bagian yaitu segmentasi/deteksi, ekstraksi ciri dan pengenalan wa-
jah. Masing-masing tahapan dijelaskan metode-metode yang tercakup di dalamnya.
Hjelmas [6] dalam surveinya tidak membagi pendeteksi wajah berdasarkan langkah-
langkah, namun ia mengelompokkannya menjadi dua bagian besar yaitu berdasarkan
pendekatan ciri (Feature-based approaches) dan berdasarkan pendekatan citra (Image-
based approaches) seperti yang ditunjukkan pada gambar 2.2.
Pendekatan lain dibuat oleh Yang [17] dimana pendeteksian wajah dibagi ke dalam
empat kategori sebagai berikut:
1. Metode berbasiskan pengetahuan (Knowledge-based methods). Metode
berbasiskan aturan ini (rule-based) mencoba mengkodekan pengetahuan manusia
yang menjelaskan apa itu wajah manusia. Biasanya aturan-aturan ini mengkaitkan
relasi antara ciri-ciri wajah.
2. Pendekatan ciri invarian (Feature Invariant approaches). Teknik ini
berusaha menemukan struktur ciri yang ada dalam berbagai posisi, titik pengam-3. Metode pencocokan template (Template matching methods). Beber-
apa pola-pola wajah disimpan untuk mendeskripsikan wajah secara keseluruhan
maoun sebagian. Korelasi antara citra masukan dan pola yang disimpan akan
dihitung untuk pendeteksian.
4. Metode Berbasiskan Penampilan (Appearance-based methods). Pada
pendekatan ini, sekaligus juga peningkatan metode sebelumnya, model wajah akan dipelajari oleh sistem melalui sekumpulan citra yang mewakili ciri-ciri wajah
yang berbeda.







PROGRAM PASCASARJANA
INSTITUT TEKNOLOGI BANDUNG
2004

Deteksi Huruf Dan angka

Secara umum dan sederhana, citra dapat didefinisikan 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 dapatditerima secara baik oleh indera penglihatan, apapunbentuknya. Dalam bidang komputer, citra atau disebut juga image merupakan representasi visual dari suatuobjek setelah mengalami berbagai transformasi datadari berbagai bentuk rangkaian numerik. Komputer memiliki cara pandang tersendiriterhadap suatu citra. Berbeda dengan citra konvensionalyang misalnya dengan melalui proses fotografis seperti pada foto dapat dihasilkan suatu citra nyata
yang langsung dapat dinikmati oleh indera penglihatan,
citra pada komputer harus melalui beberapa tahapan
yang cukup rumit. Tahapan-tahapan tersebut dapat
digambarkan sebagai suatu rangkaian proses dari
proses akuisisi data, manipulasi data, visualisasi data,
serta proses penyimpanan data. Penjelasan lebih lanjut
dari proses-proses tersebut dapat dilihat pada [8].
Diantara proses tersebut diatas, proses penyimpanan
data adalah bagian paling pelik dari pengolahan citra
pada komputer. Saat ini sudah ter-dapat banyak metode
yang dapat digunakan untuk menyimpan suatu citra
digital ke dalam suatu file. File adalah media penyimpanan
standar pada sistem komputer. Metode-metode
penyimpanan tadi tentunya memiliki perbedaan yang
cukup berarti antara satu dengan yang lainnya. Hal
yang paling membedakan biasanya adalah tingkat
kompresi data yang ditawarkan oleh masing-masing
metode. Beberapa metode yang sudah cukup dikenal
adalah BMP, JPEG, PCX, WMF, TIFF, dll.
B. Jaringan Syaraf Propagasai Balik
Propagasi balik merupakan salah satu proses
belajar jaringan syaraf buatan dimana dalam proses
belajar tersebut pengubahan nilai berlangsung pada
arah mundur, yaitu mulai dari lapisan output dan
berakhir di lapisan input.
Algoritma belajar propagasi balik adalah sebagai
berikut [5] :
1. Perhitungan nilai keluaran neuron pada lapisan
tersembunyi dan output














dimana,
i = nomor neuron yang sedang dihitung
sinyal aktivasinya.
j = nomor neuron yang outputnya
dikontribusikan pada neuron i
sj = nilai output neuron j
wij = nilai bobot hubungan antara neuron ke i
dan ke j
qi = nilai bias neuron ke i
fungsi neti atau f(neti) disebut juga sebagai fungsi
aktivasi yang bentuknya dapat bermacam-macam.
2. Perhitungan kesalahan dalam proses belajar
disebut dengan fungsi energi.
dimana,
yi = output target neuron output i
si
x = output aktual neuron output I pada saat
jaringan terhubung dengan sample x
3. Perhitungan sensitivitas (δi) neuron-neuron dalam
lapisan tersembunyi dan lapisan output. Dimana
persamaan yang digunakan untuk perhitungan
sensitivitas baik untuk lapisan tersembunyi
maupun lapisan output, tergantung dari fungsi
aktivasi yang digunakan.
4. Perhitungan nilai perubahan bobot dan bias.
perubahan bobot :
perubahan bias :
5. Perhitungan nilai bobot dan bias baru.
bobot baru :
bias baru :
6. Langkah-langkah tersebut diulang sampai deviasi
keluaran kecil sehingga mencapai stopping kriteria
error yang diharapkan.
Fungsi aktivasi dapat diibaratkan sebagai
pendefinisian penguatan non linier dalam sistem analog
(continue). Penguatan (gain) ini dihitung dengan
mencari rasio perubahan pada fungsi output neuron
pada lapisan tersembunyi dan lapisan keluaran, dimana
penguatan merupakan kemiringan kurva pada suatu
tingkat eksistensi tertentu, dan nilainya berubah dari
harga yang kecil pada eksitasi negatif yang besar
(kurvanya hampir mendatar) menjadi harga yang besar
pada eksitasi nol, dan nilainya kembali mengecil
seiring dengan eksitasi yang semakin besar dan positif.
Fungsi aktivasi tidak hanya digunakan pada saat
perhitungan nilai keluaran neuron saja (neuron pada
lapisan tersembunyi dan lapisan output), tetapi turunan
pertamanya digunakan juga untuk menghitung
perubahan bobot dan bias pada proses belajar. Dalam
penulisan ini digunakan fungsi aktivasi Sigmoid
Parameter penting lainnya dari JSB adalah
bagaimana output dari JSB tersebut direpresentasikan,
secara terlokalisasi atau terdistribusi. Dalam penulisan
ini akan digunakan metode output yang direpresentasikan
secara terdistribusi. Hal ini dikarenakan banyaknya
jumlah variasi output yang harus direpresentasikan,
sehingga tidaklah efektif bila direpresentasikan
dengan jumlah digit sebanyak variasi output yang
berbeda. Perlu diketahui, seperti yang telah disebutkan
pada bagian batasan masalah, bahwa citra yang akan
dicoba untuk dikenali adalah citra huruf-huruf alpabet
(huruf kecil maupun huruf kapital) berikut angka-angka
arab satuan, yang berarti ada sejumlah 62 (13 huruf
kecil+13 huruf besar+10 angka arab satuan) objek yang
harus direpresentasikan sebagai target output. Tentunya
sangatlah tidak efektif bila 62 objek tersebut
( )
i ( i)
N
j
i ij j i
s f net
net w s q
=
+ =Σ
=1
( )
( )
= Σ Σ −
xy i
x
i
x
i E
dimana,
yi = output target neuron output i
si
x = output aktual neuron output I pada saat
jaringan terhubung dengan sample x
3. Perhitungan sensitivitas (δi) neuron-neuron dalam
lapisan tersembunyi dan lapisan output. Dimana
persamaan yang digunakan untuk perhitungan
sensitivitas baik untuk lapisan tersembunyi
maupun lapisan output, tergantung dari fungsi
aktivasi yang digunakan.
4. Perhitungan nilai perubahan bobot dan bias.
perubahan bobot :
perubahan bias :
5. Perhitungan nilai bobot dan bias baru.
bobot baru :
bias baru :
6. Langkah-langkah tersebut diulang sampai deviasi
keluaran kecil sehingga mencapai stopping kriteria
error yang diharapkan.
Fungsi aktivasi dapat diibaratkan sebagai
pendefinisian penguatan non linier dalam sistem analog
(continue). Penguatan (gain) ini dihitung dengan
mencari rasio perubahan pada fungsi output neuron
pada lapisan tersembunyi dan lapisan keluaran, dimana
penguatan merupakan kemiringan kurva pada suatu
tingkat eksistensi tertentu, dan nilainya berubah dari
harga yang kecil pada eksitasi negatif yang besar
(kurvanya hampir mendatar) menjadi harga yang besar
pada eksitasi nol, dan nilainya kembali mengecil
seiring dengan eksitasi yang semakin besar dan positif.
Fungsi aktivasi tidak hanya digunakan pada saat
perhitungan nilai keluaran neuron saja (neuron pada
lapisan tersembunyi dan lapisan output), tetapi turunan
pertamanya digunakan juga untuk menghitung
perubahan bobot dan bias pada proses belajar. Dalam
penulisan ini digunakan fungsi aktivasi Sigmoid
Parameter penting lainnya dari JSB adalah
bagaimana output dari JSB tersebut direpresentasikan,
secara terlokalisasi atau terdistribusi. Dalam penulisan
ini akan digunakan metode output yang direpresentasikan
secara terdistribusi. Hal ini dikarenakan banyaknya
jumlah variasi output yang harus direpresentasikan,
sehingga tidaklah efektif bila direpresentasikan
dengan jumlah digit sebanyak variasi output yang
berbeda. Perlu diketahui, seperti yang telah disebutkan
pada bagian batasan masalah, bahwa citra yang akan
dicoba untuk dikenali adalah citra huruf-huruf alpabet
(huruf kecil maupun huruf kapital) berikut angka-angka
arab satuan, yang berarti ada sejumlah 62 (13 huruf
kecil+13 huruf besar+10 angka arab satuan) objek yang
harus direpresentasikan sebagai target output. Tentunya
sangatlah tidak efektif bila 62 objek tersebut
direpresentasikan dengan sejumlah 62 digit biner
output.
Pada metode output terdistribusi, setiap huruf
alpabet dan angka arab akan dikonversi ke dalam
bentuk pengkodean 6 bit. Berarti hanya diperlukan 6
neuron yang akan digunakan sebagai output pada
lapisan output JSB. Tetapi dengan pengkodean 6 bit
berarti tersedia 26 = 64 variasi output yag berbeda,
sedangkan simbol atau objek yang akan
direpresentasikan hanya ada 62 objek, untuk itu penulis
menambahkan dua objek tambahan untuk melengkapi
ketersediaan pengkodean, kedua objek tersebut adalah
‘>’ dan ‘?’.
III. IMPLEMENTASI KONSEP
A. Analisi Masalah
Suatu citra huruf atau angka (selanjutnya akan
disebut sampel) yang akan diidentifikasi menggunakan
JSB, haruslah melalui tahapan-tahapan tertentu terlebih
dahulu sehingga dapat menjadi input yang baik bagi
JSB. Adapun input yang dapat diterima oleh dengan
baik oleh JSB adalah berupa kumpulan data numerik.
Dengan demikian maka permasalahan pertama adalah
bagaimana mengkonversi suatu citra digital menjadi
kumpulan data numerik yang representatif dan
konsisten. Tentunya walaupun JSB yang digunakan
memiliki karakteristik, struktur ataupun konfigurasi
yang sudah cukup spesifik, masih ada parameterparameter
penting lain dari JSB tersebut yang harus
diatur untuk mendapatkan hasil terbaik. Parameterparameter
tersebut antara lain adalah pengaruh bias dan
bobot awal, nilai momentum, nilai LearnRates, nilai
stopping criteria error, epoch, dan lain sebagainya.
Penyesuaian terhadap nilai-nilai tersebut adalah
masalah berikutnya yang akan dianalisa.
B. Metode Akuisisi Data
Setiap sampel yang akan diamati dan dianalisa
oleh JSB harus direpresentasikan secara baik ke dalam
bentuk data numerik. Untuk itu diperlukan suatu
metode yang dapat mengekstraksi data ciri dari setiap
sampel tadi secara konsisten. Tentunya data numerik
yang dihasilkan haruslah benar-benar dapat mewakili
karakteristik atau ciri-ciri dari sampel yang diamati,
sehingga diharapkan dari sekumpulan data dengan
target yang sama akan dihasilkan suatu generalisasi
atau pencirian secara umum terhadap suatu target yang
sejenis. Proses akuisisi data tersebut harus benar-benar
akurat dengan mempertimbangkan semua karakteristik
dari setiap sampel yang tidak lain adalah suatu citra
digital, dimana setiap citra digital memiliki
karakteristik tertentu.
B.1. Karakteristik Sampel
Sampel-sampel yang akan diamati tentunya harus
dibatasi dengan suatu struktur dimensi dan
homogenisasi pixel yang sederhana, sehingga diharapkan
dapat mempermudah proses analisa terhadap
konsep ini. Setiap sampel adalah satu citra digital yang
nilai warna dari pixel-pixelnya terhomo-genisasi
menjadi dua representasi warna, yaitu warna aktif
(hitam) dan warna nonaktif (selain hitam). Selain itu
dimensi dari setiap sampel dibatasi sebesar area yang
disediakan pada program aplikasi, tetapi tidak akan
mengurangi fleksibilitas dan skalabilitas yang
diharapkan.
B.2. Ekstraksi Data
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. Berikut contoh pengekstrakan data ciri dari
sampel pada Gambar 3.1.

>> Praktikum 7 Histogram Ekualisasi (Enhancement 3)

Tujuan :
Mahasiswa dapat membuat program untuk memperjelas citra dengan histogram Equalization

Dasar Teori :
Histogram Equalization
Histogram Equalization adalah suatu proses perataan histogram, dimana distribusi nilai derajat keabuan pada suatu citra dibuat rata. Untuk dapat melakukan histogram equalization ini diperlukan suatu fungsi distribusi kumulatif yang merupakan kumulatif dari histogram.
Misalkan diketahui data sebagai berikut:
2 4 3 1 3 6 4 3 1 0 3 2

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.

>> Praktikum 6 Transformasi Citra (Enhancement 2)

Tujuan :
Mahasiswa dapat membuat program untuk transformasi citra yaitu inverse, log, inverse log, nth power, nth root power

Dasar Teori :
Transformasi Citra:
Inversi Citra
Inversi citra adalah proses negatif pada citra, misalkan pada photo, dimana setiap nilai citra dibalik dengan acuan threshold yang diberikan. Proses ini banyak digunakan pada citra-citra medis seperti USG dan X-Ray. Untuk citra dengan derajat keabuan 256, proses inversi citra didefinisikan dengan:
xn = 255 - x

Tranformasi Logaritmik
Tranformasi Logaritmik didefinisikan dengan G = c Log (F +1)
Tranformasi Invers Logaritmik didefinisikan dengan G = c Log (L-F +1)
Dimana G adalah citra hasil, F citra asal, c adalah konstanta yang dipasang sebagai efek perubahan kontras


Transformasi Power Law
Transformasi Power Law ada dua yaitu nth power dan nth root power
Transformasi nth power dedifinisikan dengan G = C F Y
Transformasi nth root power didefinisikan dengan G = C F 1/Y
Dimana G adalah citra hasil, F adalah citra asal, c dan y adalah konstanta positif


Analisa :

1. Latihan 1

a. Transformasi citra negative










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

2. 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 :

1. 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).
2. 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

Jawaban Tugas 5

Program di bawah ini merupakan program utama dari program untuk pengenalan angka dari 0 - 9 :

//Konversi dari data pixel ke RGB dan dari data RGB ke data Pixel:
void WarnaToRGB(long int warna,int *Red, int *Green, int *Blue)
{

*Red = warna & 0x000000FF;
*Green = (warna & 0x0000FF00) >> 8;
*Blue = (warna & 0x00FF0000) >> 16;

}

long int RGBToWarna(int Red, int Green, int Blue){return(Red+(Green<<8)+(Blue<<16));
}

//Program untuk melakukan load angka (*.bmp).
void CAngkaDlg::OnLoad1()
{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_pic1.GetDC(); CDC dcMem;
CRect rect; BITMAP bm;
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_pic1.GetClientRect(rect); m_bmpBitmap.GetBitmap(&bm);
dcMem.CreateCompatibleDC(pDC); dcMem.SelectObject(&m_bmpBitmap);
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0, bm.bmWidth,bm.bmHeight,SRCCOPY);
}

//Program untuk menampilkan proyeksi integral horizontal dari angka .
void CAngkaDlg::OnHip1() {
int i,j; int red,green,blue; long int warna;
CDC* pDC = m_pic1.GetDC(); CDC dcMem; CRect rect; BITMAP bm;
HBITMAP hBitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),name,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
m_pic1.GetClientRect(rect); m_bmpBitmap.GetBimap(&bm);
dcMem.CreateCompatibleDC(pDC); dcMem.SelectObject(&m_bmpBitmap);
for(j=0;j<,bm.bmWidth;j++){
hx1[j]=0;
for(i=0;i<,bm.bmHeight;i++)
{
warna=dcMem.GetPixel(j,i);
WarnaToRGB(warna,&red,&green,&blue);
hx1[j]+=(float)(255-red)/255;}
hx1[j]=hx1[j]/2;
}
CDC* pDC1 = m_pic3.GetDC();
for(i=1;iMoveTo(i*0.75,0);
pDC1->LineTo(i*0.75,hx1[i]); }
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0, bm.bmWidth,bm.bmHeight,SRCCOPY);
}

//Program untuk menampilkan proyeksi integral vertikal dari angka.
void CAngkaDlg::OnVip1() {
int i,j; int warna,red,green,blue; CDC* pDC = m_pic1.GetDC();
CDC dcMem1; CRect rect; BITMAP bm;
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_pic1.GetClientRect(rect); m_bmpBitmap.GetBitmap(&bm);
dcMem1.CreateCompatibleDC(pDC); dcMem1.SelectObject(&m_bmpBitmap);
for(j=0;j<,bm.bmHeight;j++) {
hy1[j]=0;
for(i=0;i<,bm.bmWidth;i++) {
warna=dcMem1.GetPixel(j,i);
warnaToRGB(warna,&red,&green,&blue);
hy1[j]+=(float)(255-red)/255; }
hy1[j]=hy1[j]/2;
}
CDC*pDC1= m_pic2.GetDC(); for(i=0;i
pDC1->MoveTo(0,0.75*i); pDC1->LineTo(hy1[i],0.75*i);
}}

>> Praktikum 5 Perbaikan Citra (Enhancement 1)

Tujuan :
1.Mahasiswa dapat membuat program untuk menampilkan histogram dari citra 2. Mahasiswa dapat membuat program untuk memperjelas citra (brighness) dan kontras
Dasar Teori :

Brightness Brightness adalah proses penambahan kecerahan dari nilai derajat keabuan. Proses brightness ini dilakukan dengan me-nambahkan nilai derajat keabuan dengan suatu nilai penambah. xb = x + b dimana x = adalah nilai derajat keabuan b = nilai penambah xb = hasil brightness
Mengubah Kontras Mengubah kontras dari suatu citra adalah proses pengaturan nilai range interval pada setiap nilai derajat keabuan, dan didefinisikan dengan :
xk = k x
dimana x = nilai derajat keabuan k = nilai kontras xk = nilai setelah pengaturan kontras
Analisa :


1. 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 2. 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

3. Latihan 3









Source 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 :
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

Jawaban Tugas 4 (Membuat Aplikasi Pengenalan Angka )

Pengenalan Angka

Percobaan 1 (Membuat Aplikasi Sederhana Untuk Proses Pengenalan Angka):

  1. Pembuatan Aplikasi

· 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).







Analisa :

· Semakin kecil nilai error yang dihasilkan dari proses pengenalan angka,maka akan diperoleh hasil yang semakin valid & akurat.

· Dalam proses pengenalan angka ini dilakukan pembandingan dua macam obyek berdasarkan kesamaan bentuk dan nilai dari integral proyeksi horizontal & integral proyeksi verticalnya.