buku cara cepat pengolahan citra dengan c# - sharp

104
i http://softscients.blogspot.com

Upload: mulkan-syarief

Post on 11-Sep-2015

206 views

Category:

Documents


74 download

DESCRIPTION

Buku Cara Cepat Pengolahan Citra Dengan C# - Sharp

TRANSCRIPT

  • ihttp

    ://so

    ftsci

    ents

    .blo

    gspo

    t.com

  • ii

    Kata PengantarOlah citra merupakan topik riset tidak pernah sepi peminatnya. Beragam teknologidikembangkan baik dari sisi hardware maupun software, tentunya dari segisoftware pengembangkan lebih diarahkan kedalam metode yang digunakan(algoritma). Implementasi dari olah citra dalam dunia industri telah banyakdigunakan yaitu face detection, face recognition, GIS, pengendalian mutu, danbahkan untuk dunia HAKI seperti watermarking, kriptografi

    Rangkuman tulisan kecil ini merupakan buah karya kedua dari penulis yang telahmenggeluti bidang olah citra selama beberapa tahun belakangan ini. Pengalamanbest practice dituangkan kedalam beberapa demo project dalam 2 versi (consoledan GUI) agar para pembaca mampu untuk memahami alurnya.

    Beragam tools (Standard Development Kit - Integrated Development Environment -Framework) dipilih sesuai dengan perkembangan terkini tentang dunia olah citraserta topik yang digunakan. Tools merupakan wadah pengujian dari algoritmamaka dari itu, tools tersebut harus mampu mengakomodasi kebutuhan. Banyaktools dikembangkan yaitu Matlab, Scilab, Octave merupakan tools yang siapdigunakan, akan tetapi penulis tetap memilih tools lainnya yaitu C# dengan IDESharp Develop v.4 dikarenakan free, applicable, extendsible, dan dukunganpustaka seperti AForge.net, Accord.Net yang opensource dan free walaupun adabanyak tools seperti Java dengan ImageJ, C / C++ dengan OpenCV nya (native)ataupun .Net. Maka tujuan dari tulisan kecil tidak saja dapat digunakan dalamskala lab akan tetapi harus juga bersifat applicable. Buku ini menekankanlearning by doing sehingga pembaca dituntut telah memahami konsep-konsep OOP(object oriented programming), event-driven dan studi kasus yang disajikan dalamproject demo yang mudah dipahami karena dilengkapi dengan comment yangmendukung, serta penulis telah menyediakan pustaka (opensource) dukunganyang akan mempermudah dalam proses pengembangannya.

    Beberapa topik buku ini yaitu Konsep Olah Citra : mengenal dasar olah citrasecara umum, IDE Sharp Develop 4.1: mengenal solution, library, component,debug, build application, Framework AForge.Net- Accord.Net: mengenal modul-modul untuk olah citra, Operasi Dasar Olah Citra: mengenal operasi dasar olahcitra yaitu Konvolusi untuk membuat efek (blur, sharpening, edge detection),Thresholding menggunakan metode Otsu untuk melakukan operasi Black-White,Morphologi (dilation, erotion, opening, closing), Blob (labelling, center of gravity,moment invariant), Analisis Tekstur: mengenal konsep analisis tektur denganmetode gray level co-occurance sebagai metode standar dalam analisis tekstur,PCA (Principal Component Analyst): mengenal face recognition dengan metode PCAdan konsep serialisasi data biner, Interfacing Webcam: melakukan koneksi(interfacing) menggunakan webcam baik single maupun multiple connection

    http

    ://so

    ftsci

    ents

    .blo

    gspo

    t.com

  • iii

    Yogyakarta, Januari 2012

    Mulkan Syarif

    http

    ://so

    ftsci

    ents

    .blo

    gspo

    t.com

  • iv

    DAFTAR ISI

    Kata Pengantar ..................................................................................iiDaftar Isi............................................................................................ivBab I Olah Citra..................................................................................1

    Konsep Olah Citra Digital............................................................... 1Sekilas tentang .Net ....................................................................... 3Tools .............................................................................................. 4

    Bab II Ide Sharp Develop ....................................................................6apa itu IDE..................................................................................... 6Solution.......................................................................................... 7Library ........................................................................................... 8Component..................................................................................... 10Membuat Solution ......................................................................... 12

    Bab III Framework AForge.Net- Accord.Net.........................................14Modul AForge dan Accord............................................................... 15Install Framework ......................................................................... 15

    Bab IV Operasi Dasar Olah Citra .........................................................30Konvolusi ....................................................................................... 30Thresholding .................................................................................. 40Morphologi ..................................................................................... 45Operasi Blob................................................................................... 50

    Bab V Analisis Tekstur .......................................................................59GLCM sebagai salah satu metode analisis tekstur.......................... 60Perhitungan GLCM......................................................................... 61Perhitungan 7 fitur utama.............................................................. 62

    Bab VI PCA (Principal Component Analyst) .........................................72Perhitungan PCA............................................................................ 72Implementasi PCA untuk Face Recognition .................................... 78

    Bab VII Interfacing Webcam ...............................................................88Single Webcam............................................................................... 89Filtering Secara Realtime................................................................ 91Multiple Interfacing........................................................................ 91

    Lampiran............................................................................................92Daftar Pustaka ...................................................................................93Tentang Penulis .................................................................................94

    http

    ://so

    ftsci

    ents

    .blo

    gspo

    t.com

  • vPenjelasan Singkat Mengenai Cd Dan Jenis MateriCD berisi aplikasi, library, dan project Olah Citra dengan C# menggunakanFramework AForge & Accord:

    1. Folder Aplikasia. AForge.NET Framework-2.1.5.exeb. Accord.NET Framework-2.6.1.exec. Ice-3.4.2.msid. Lib

    - Ice.dlle. MonoDevelop-2.6.msif. SharpDevelop_2.2.1.2648_Setup.msig. SharpDevelop_3.2.0.5777_Setup.msih. SharpDevelop_3.2.1.6466_Setup.msii. SharpDevelop_4.1.0.8000_Setup.msij. dotNetFx40_Full_x86.exek. dotNetFx40_Full_x86_ia64.exel. dotNetFx40_Full_x86_x64.exem. gtk-sharp-2.12.10.win32.msi

    2. Folder Librarya. AForge.NETb. Accord.NETc. ZedGraph

    3. Folder Projecta. Demo.Bab2Consoleb. Demo.Bab2GUIc. Demo.Bab3Consoled. Demo.Bab4Blobe. Demo.Bab4Convolutionf. Demo.Bab4Edgeg. Demo.Bab4Morphoh. Demo.Bab4Thresholdi. Demo.Bab5.GLCMConsolej. Demo.Bab5.GLCMGUIk. Demo.Bab6.PCAConsolel. Demo.Bab6.PCAGUIm. Demo.Bab7n. Demo.Bab7.RealtimeFiltero. Extp. ImageViewer

    http

    ://so

    ftsci

    ents

    .blo

    gspo

    t.com

  • vi

    Konsep Olah Citra

    IDE Sharp Develop 4.1

    http

    ://so

    ftsci

    ents

    .blo

    gspo

    t.com

  • vii

    Framework AForge.Net- Accord.Net

    Operasi Dasar Olah Citra

    http

    ://so

    ftsci

    ents

    .blo

    gspo

    t.com

  • viii

    Analisis Tekstur

    PCA (Principal Component Analyst)

    http

    ://so

    ftsci

    ents

    .blo

    gspo

    t.com

  • ix

    Interfacing Webcam

    http

    ://so

    ftsci

    ents

    .blo

    gspo

    t.com

  • 1OLAH CITRA

    Konsep Olah Citra DigitalOlah citra (image processing) sebagai dasar dalam computer vision merupakanbidang yang telah banyak diterapkan dalam dunia industri misalnya pada sistembiometrik, recognition, detection, kendali gesture gerak tangan, optical characterrecognition (pengenal tulisan baik tangan atau cetakan dari printer), optical markrecognition (scan lembar jawab komputer) sehingga dengan kemajuan teknologicomputer vision dapat mempermudah dan memperakurat pemrosesan data citradigital. Citra digital didefinisikan sebagai function f(x,y) berukuran I (baris) dan J(kolom) dengan x dan y adalah koordinat spasial dan value dari tiap koordinat x, ydisebut sebagai intensitas / kedalaman warna. Misalkan kedalaman aras keabuandinyatakan dengan satuan nilai bit yaitu 1byte (1byte=28)-1 = 255 kombinasiwarna hitam sampai putih yang berpengaruh terhadap kedalaman warna.

  • 2Tingkat kerapatan seringkali disebut resolusi dengan satuan dpi (dot per inchi)yang berpengaruh terhadap kehalusan (ketajaman) citra. Ilustrasi dibawahmenunjukan ukuran 6 dpi

    Jenis citra / format citra berdasarkan nilai pixelnya dapat dibagi menjadi 3 yaitu1. Citra biner : terdiri dari MxN matrix bernilai 1 dan 0 yaitu putih dan hitam

    yang digunakan untuk operasi morphologi sehingga untuk bisa ditampilkankedalam citra yang sesungguhnya maka dilakukan konversi yaitu jika 1maka diubah ke 255 dan 0 akan tetap bernilai 0

    2. Citra grayscale : terdiri dari MxN matrix bernilai 0 (hitam) sampai 255(putih)

    3. Citra truecolor : terdiri dari MxNx3(dimensi yaitu red;green;blue) matrixbernilai 0 sampai 255

    Jenis format file citra dapat dibagi menjadi 2 yaitu1. Tanpa kompresi yaitu bmp2. Kompresi yaitu jpeg, jpg, png

    Jenis penyajian ruang warna yaitu1. RGB yaitu format penyajian warna menggunakan kombinasi warna red,

    green, dan blue2. HSV yaitu dibentuk dalam 3 komponen hue (menunjukan warna merah,

    biru, dan kuning), saturation (menunjukan tingkat kemurnian warna), danvalue (intensitas atau ukuran kecerahan dari suatu warna)

  • 3Sekilas tentang .NetBerbicara tentang bahasa C# maka tidak terlepasdari .Net. Source code yang dibuatmenggunakan platform .Net akan dikompilasikedalam MSIL (microsoft intermediate languange)atau juga disebut sebagai IntermediateLanguange (IL) atau Common IntermediateLanguage (CIL). MSIL sendiri merupakan suatuset instruksi CPU yang bersifat independent OSyang dapat dikonversikan kedalam kode mesin,selain itu metadata juga diciptakan dalam proseskompilasi bersamaan dengan proses kompilasiMSIL dan disimpan dengan kode dikompilasi.Metadata disimpan dalam sebuah file yangbernama Manifest, dan berisi informasi tentanganggota, jenis, referensi dan semua data lainnyayang dibutuhkan Common Language Runtime(CLR) untuk eksekusi. CLR menggunakanmetadata untuk menemukan dan mengambil

    class,menghasilkan

    kode asli, memberikan keamanan, eksekusimanage code. Baik MSIL dan metadataberkumpul bersama-sama dikenal sebagaiPortable Executable (PE) file. Runtime (CLR)pada Just In Time (JIT) compiler mengubah MSILke dalam Kode Mesin Sistem Operasi yangbersifat independent dan kode ini dikenalsebagai Managed Code, yang dapat berjalandiatas .NET Framework. .Net yang dikenalkanoleh pihak Microsoft sebagai perangkat lunakkerangka kerja yang mendukung kebutuhanprogram pada bidang user interface (GDI+),pengaksesan data, koneksi basis data,

    kriptografi, pembuatan aplikasi berbasis web, algoritma numerik, dan komunikasijaringan. GDI+ (graphics device interface plus) merupakan library untukpengembangan aplikasi berbasis GUI dan pemrosesan berbasis gambar (citra).Library GDI+ secara default sudah terinstal pada sistem operasi berbasis windowsyaitu XP, Vista, dan Windows 2003 dengan nama Gdiplus.dll danGDIPlusImage.dll.

    Fitur dari GDI+a. 2D Vector : Komponen pembentuk base shape (bentuk dasar) seperti kotak,

    lingkaran, elips yang dibentuk dari kumpulan titik pada sistem koordinat.b. Imaging: Merupakan fitur untuk melakukan manipulasi image dengan

    berbagai format citra yaitu .bmp; .jpg; .gif; dan .png.c. Typography: Digunakan untuk desain, jenis, dan tata letak font.

  • 4Namespace dan class dalam .Net

    Class System.Drawing Fitur GDI+

    Struktur color pada GDI+ mempunyai empat komponen warna yaitu: alpha, red,green, dan blue. Setiap warna mempunyai 255 atau 1byte (1byte=28-1) kombinasiwarna, sehingga kombinasi tiga komponen RGB tersebut mempunyai kombinasiwarna 255x255x255. Alpha komponen mewakili aspek transparan dari warna yangakan terlihat ketika beberapa warna digabungkan. Sistem Koordinat Standar GDI+tidak seperti sistem kartesian, pada perangkat tampilan seperti monitor sumbu(0,0) terletak pada pojok kiri atas.

    Komponen Warna Koordinat

    ToolsTentunya berbicara tentang olah citra digital diperlukan tools (perkakas). Toolsdalam arti luas bukan saja tentang bahasa tapi juga IDE (Integrated DevelopmentEnvironment), SDK (Standard Development Kit), dan framework. Banyak toolspengembangan yang digunakan dalam olah citra yaitu Matlab, Scilab, Octave, LabView (komputasi teknis) ataupun menggunakan bahasa program yang bersifatumum seperti C/C++ (openCV, CImage), java (ImageJ, Maven Framework), C#dengan AForge.Net dan Accord.Net tentunya dalam menggunakan sebuah toolsdipengaruhi oleh kasus dan tujuan dari pengembangan serta implementasi dari

  • 5aplikasi misalkan untuk embedded system, pengembangan prototype algoritmaataupun aplikasi akan berbeda dikarenakan tools tertentu akan lebih cepat ataumudah bila digunakan dalam pengembangan prototype tapi akan sulit untukdiimplementasikan (terlalu mahal) kedalam embedded system. Bahasa C# adalahsalah satu tools yang mumpuni karena dukungan library yang lengkap sertaberagam framework yang berkaitan sudah banyak dikembangkan salah satunyayaitu framework AForge.net, Accord.net serta IDE yang banyak digunakan yaituSharp Develop. Berikut daftar tools yang digunakan dalam buku ini

    a. .Net sebagai framework aplikasib. IDE Sharp Develop sebagai lingkungan pengembanganc. AForge dan Accord sebagai framework core olah citrad. Zedgraph sebagai component chart

  • 6IDE SHARP DEVELOP

    Apa itu IDE?Bagi para developer melakukan penulisan source code dan sekaligus melakukantesting ataupun debugging) memerlukan IDE yang handal. IDE dalam lingkungan.NET ada banyak sekali yaitu Mono Develop, Microsoft Visual C# -- Express Edition(edisi gratisan dari Microsoft), Sharp Develop. Tapi dalam buku ini hanyamenggunakan Sharp Develop versi 4.1.0. Sharp Develop adalah salah satu IDEyang dapat berjalan baik di windows (untuk di linux saat ini belum didukung, bilaanda menggunakan linux sebagai OS nya, lebih baik menggunakan Mono Developdan Gtk#). Saat ini Sharp Develop telah mendukung implementasi dari Net 4.0.Walaupun tidak sepenuhnya mendukung aplikasi berbasis web tentunya untukmembuat aplikasi berbasis GUI dan console sudah sangat baik sekali. Sebelummelakukan install Sharp Develop, diharuskan install .Net 4.0 atau .Net 3.5tergantung versi dari Sharp Develop yang anda gunakan. Sharp Developmenawarkan tiga lingkungan pengembangan aplikasi berbasis .Net yaitu Console(text based), Windows Form (GUI), atau Library (.dll). Salah satu keunggulan dari.Net adalah jika kita sedang membangun suatu project yang melibatkan banyakprogrammer dengan penguasaan bahasa masing-masing misalkan visual basic,C++, C# yang menggunakan .Net platform sebagai lingkungan pengembanganaplikasi, maka ketiga bahasa tersebut dapat saling diintegrasikan. Semua aplikasiyang dibangun diatas platform .Net akan membutuhkan .Net Framework sehinggaclient yang akan menjalankan aplikasinya harus meng install terlebih dahulu .NetFramework di komputernya. Didalam CD disertakan .Net berbagai versi bit(silahkan untuk di install) dan juga Sharp Develop yang akan kita gunakan yaituversi 4.1 yang membutuhkan .Net 4.0 bila di komputer belum install .Net 4.0 akan

  • 7muncul peringatan harus melakukan install .Net 4.0, tapi jika anda inginmenginstall dengan versi terbaru silahkan untuk donwload .Net diwww.microsoft.com/net/download. dan Sharp Develop dihttp://www.icsharpcode.net/opensource/sd/download/. Bila anda telahmenggunakan IDE seperti Microsoft Visual Studio maka tidak akan asing denganSharp Develop dikarenakan hampir mirip dengan IDE besutan Microsoft. Selainuseriterface yang mirip dengan Microsoft Visual Studio juga saling compatiblesehingga bila anda ingin suatu saat melanjutkan project menggunakan MicrosoftVisual Studio maka tidak ada masalah.

    SolutionSolution yang dimaksud disiniadalah suatu set project termasukconfiguration, source code, icon,dan library yang digunakan.Pengembangan Solution dapatberupa Console Application,Windows Form, ataupun Library.Penamaan Solution sebaiknyamenggunakan aturan huruf depankapital dan tidak menggunakanspace (diganti dengan tanda titik)misalkan seperti berikutProject.Windows.Bab1 berikutadalah ilustrasi bagian dari sebuahSolution yang terdiri dari

    a. References : berisi libraryyang digunakan

    b. Properties : berisi info dansetting application

    c. *.cs : berisi source code program

  • 8LibraryLibrary yang berekstensi .dll (dynamic link library ekstensi sama seperti .dll win32)adalah koleksi dari sekumpulan code kecil yang dapat dipanggil ketika dibutuhkanoleh program besar pada saat berjalan di komputer. Penambahan library ada 3macam yaitu viaA. Net Assembler (dll) dan COM jika hanya mempunyai code biner saja.Berikut langkah yang dilakukan yaitu

    1. Klik kanan pada folder References > Add Reference2. Pilih tab (.Net Assembly Browser atau COM)3. Pilih Browse4. Pilih salah satu .dll atau .com > Open5. Secara otomatis akan tampil library pada folder References

  • 9B. Project (jika anda mempunyai source code atau project yang saling terlibat).1. Klik kanan pada Solution (nama solution) > Add > Existing Project2. Muncul kotak dialog untuk memilih *.csproj > Open3. Secara otomatis akan tampil project dalam satu solution4. Untuk menambahkan library via project, maka klik kanan pada folder

    References > Add Reference5. Pilih tab Projects > pilih Project Name yang akan ditambahkan > Select6. Akan tampil dibawah Reference name yang telah dipilih > OK7. Terlihat pada folder References akan ada tambahan library

  • 10

    ComponentSelain adanya library, kita juga mengenal adanya component ketikamengembangkan aplikasi dalam mode Windows Form. Kita banyak mengenalcomponent bawaan dari Sharp Develop yang siap pakai seperti PictureBox, Button,CheckBox , dan lain-lain.

    Component Default Component Zedgraph

    Salah satu component untuk membuat chart yaitu ZedGraph. Demo dalam bukuini menggunakan component tersebut untuk melakukan plot histogram. Berikutlangkah-langkah dalam menambahkan component ZedGraph

    1. Pilihlah tab Tools dan klik kanan New Category Configure SideBar2. Muncul jendela Configure Siderbar dan pilih menu New Category3. Pilih Add Component muncul jendela Add Components4. Pilih tab Customs File Names5. Cari component ZedGraph.dll,6. Maka component ZedGraph yaitu ZedGraphControl siap digunakan.

  • 11

    Semua library dan component dapat digunakan dengan menambahkan keywordusing seperti berikut

  • 12

    Membuat SolutionIDE Sharp Develop mendukung pengembangan 2 aplikasi yaitu console dan GUI(graphic user interface). Langkah dalam membuat solution sebagai berikut

    1. Pilih menu File New Solution2. Pilih jenis Console Application atau Windows Application (GUI)3. Membuat nama solution, misalkan Demo.Bab2Console atau versi windows

    yaitu Demo.Bab2GUI

    Maka secara default akan tercipta Program.cs (class Program) yang berisi mainmethod (class yang akan dipanggil secara default ketika run) yaitu dengan caratekan F5 (run)

    Console Window

  • 13

    Tampilan Console Tampilan Form

  • 14

    FRAMEWORK AFORGE.NET- ACCORD.NET

    Pengembangan aplikasi yang besar biasanya terdiri dari beberapa proses yangrumit dan kompleks. Seringkali terdapat banyak algoritma dan code yang dibuatoleh pihak lain atau bahkan membuat sendiri. Tentu ada sebagian programer yanglebih menyukai untuk mengembangkan sendiri tapi hal ini akan menjadi sedikitmasalah bila ada yang ingin melanjutkan project, maka programer tersebut harusmempelajari cara kerja code yang dibuat oleh programer sebelumnya. Hal inidapat dipersingkat jika kita menerapkan framework atau sering disebut kerangkakerja. Misalkan bilamana ada orang yang ingin melanjutkan suatu project (telahmenggunakan framework), maka orang tersebut telah paham cara kerja nyasehingga pekerjaan menjadi fokus. Ada anggapan bahwa terkadang membuat(menulis) code lebih mudah daripada merawat code. Framework bukan sajasebuah library (pustaka) tapi merupakan kerangka kerja menyeluruh sehinggadiharapkan pengembang aplikasi yang akan menggunakannya menjadi rapi danseragam walau berbeda-beda programmernya dikarenakan progammerdiharuskan untuk mengikuti framework. Ada banyak framework untukpengembangan aplikasi yang fokus terhadap pengolahan citra dan salah satu yangterkenal adalah AForge.Net dan Accord.Net. Anda dapat mendownload dihttp://www.aforgenet.com/ atau http://code.google.com/p/aforge. AForge

  • 15

    didesain untuk pengembangan dan periset yang mengkhususkan diri di ComputerVision dan Artificial Intelligence sedangkan Accord merupakan extends(perluasan) dari AForge, anda dapat mengunjungi dihttp://code.google.com/p/accord/.

    Modul AForge dan AccordFitur framework AForge

    1. AForge.Imaging - library with image processing routines and filters2. AForge.Vision - computer vision library3. AForge.Neuro - neural networks computation library4. AForge.Genetic - evolution programming library5. AForge.Fuzzy - fuzzy computations library6. AForge.MachineLearning - machine learning library7. AForge.Robotics - library providing support of some robotics kits8. AForge.Video - set of libraries for video processing

    Fitur framework Accord1. Scientific Computing

    a. Accord.Mathb. Accord.Statisticsc. Accord.MachineLearningd. Accord.Neuro

    2. Signal and Image Processinga. Accord.Imagngb. Accord.Audioc. Accord.Vision

    3. Support Librariesa. Accord.Controlsb. Accord.Controls.Imagingc. Accord.Controls.Audiod. Accord.Controls.Vision

    Install FrameworkPastikan terlebih dahulu anda telah meng-install .Net 4.0 (pilih sesuai dengandukungan bit OS) dan Sharp Develop 4.1. Silahkan untuk dibuka CD penyerta difolder Applications. Bukuini menggunakanAForge.net-2.1-5 (buildversion .Net 3.5) danAccord.Net-2.6.1 (buildversion .Net 4.0). Silahkanuntuk instal keduanya(folder install sebaiknya diC:/Program Files).

  • 16

    Isi dari Folder Hasil Install AForge dan Accord.Net

    1. Folder Docs: berisi dokumentasi class dan method dari modul2. Folder Release: merupakan kumpulan *.dll yang siap pakai dari semua

    modul (telah di compilation oleh pengembang). Jika ingin langsungmenggunakan library *.dll bisa langsung arahkan ke folder Release, tapibila ingin melakukan compilation source code arahkan ke folder Sources

    3. Folder Samples: berisi contoh-contoh project dan solution4. Folder Sources: berisi source code project

    Image ViewerAForge telah memberikan beragam contoh project salah satunya adalah ImageViewer, kita akan mengeksplor kemampuan dari modul AForge.Imaging. Bukalahproject Image Viewer yang berada di AForge.NET \ Framework \Samples \ Imaging\ ImageViewer \ ImageViewer.sln. Bukalah MainForm.cs padamode Source, berikut adalah isi event Click pada Menu File > Open

    1 if ( openFileDialog.ShowDialog( ) == DialogResult.OK )2 {3 try4 {5 ImageInfo imageInfo = null;67 pictureBox.Image = ImageDecoder.DecodeFromFile(8 openFileDialog.FileName,9 out imageInfo );10 propertyGrid.SelectedObject = imageInfo;11 propertyGrid.ExpandAllGridItems( );12 }13 catch ( NotSupportedException ex )

  • 17

    14 {15 MessageBox.Show( "Image format is not supported: " +16 ex.Message,17 "Error",18 MessageBoxButtons.OK,19 MessageBoxIcon.Error );20 }21 catch ( ArgumentException ex )22 {23 MessageBox.Show( "Invalid image: " + ex.Message,24 "Error",25 MessageBoxButtons.OK,26 MessageBoxIcon.Error );27 }28 catch29 {30 MessageBox.Show( "Failed loading the image",31 "Error",32 MessageBoxButtons.OK,33 MessageBoxIcon.Error );34 }35 }

    Penjelasan:Line Keterangan1 Menampilkan kotak dialog OpenFile7 Class ImageInfo untuk menampung informasi sebuah image, Menampilkan

    image kedalam component PictureBox10 - 11 Menampilkan info kedalam component PropertyGrid

    Penjelasan:Item KeteranganBit per piksel 24 artinya terdiri dari 24/8 = 3 komponen warna yaitu Red, Green, BlueWidth dan Height 1680x1050 satuan pixels

  • 18

    Pengembangan program terkadang kita akan banyak sekali melakukan prosesdebugging untuk tracking variable ada 2 cara hal yang paling efisien yaitu

    1. Mode console2. Mode debug

    Mode ConsoleMode console yaitu menjalankan application berbasis text base, walaupun projectImageViewer dalam mode Windows application bisa kita ubah untuk dijalankandalam mode Console Application yaitu

    1. Klik kanan pada project > Properties2. Pilih tab Application3. Pilih Output type : Console Application

    Misalkan kita akan menampilkan informasi tentang resolusi image didapatkandengan memanggil method VerticalResolution dan HorizontalResolution pada classImage. Tambahkan kode berikut (baris 5 - 10), setelah itu tekan F5 (modedebugger) atau Ctrl+F5 (mode normal tanpa debugger)

    1 ImageInfo imageInfo = null;2 pictureBox.Image = ImageDecoder.DecodeFromFile(3 openFileDialog.FileName,4 out imageInfo );5 Console.WriteLine(vertical +6 pictureBox.Image.VerticalResolution.7 ToString());8 Console.WriteLine(horisontal +9 pictureBox.Image.HorizontalResolution.10 ToString());

  • 19

    11 propertyGrid.SelectedObject = imageInfo;12 propertyGrid.ExpandAllGridItems( );

    Maka akan tampil jendela console seperti berikut

    Mode DebugDebug berasal dari 2 kata yaitu de dan bug (kutu) yang artinya proses mencarierror pada kode, hampir semua IDE mempunyai fasilitas untuk proses debugging.Debugging sangat efektif dan membantu manakala, kita telah menuliskan banyaksource code dan ingin melakukan trace line by line terhadap source code meliputireturn dari sebuah variabel baik type primitif ataupun object class. Kita cobamemanfaatkn class ImageStatistics yang berada di modul AForge.Imaging.

    1. jangan lupa untuk menambahkan pada References - lokasiAForge.Imaging.dll bisa diambil di folder Release \Release\AForge.Imaging.dll atau di modul\Sources\Imaging\bin\Debug\AForge.Imaging.dll

    2. menambahkan using AForge.Imaging pada header source code padaMainForm.cs

  • 20

    Tambahkan code berikut (font tebal)1 //menampilkan resolusi2 Console.WriteLine("vertical "+3 pictureBox.Image.VerticalResolution.4 ToString());5 Console.WriteLine("horisontal "+6 pictureBox.Image.HorizontalResolution.7 ToString());8 //menampilkan informasi statistik citra9 AForge.Imaging.ImageStatistics stat =10 new AForge.Imaging.ImageStatistics(11 (Bitmap)pictureBox.Image);12 int i=0;Aktifkan feature Toogle Breakpoint di Sharp Develop dengan menekan F7 danarahkan ke lokasi source code (baris 9 dan 12), seperti berikut

    Jalankan application dengan mode debug yaitu tekan F5 serta buka file image,maka akan tampil berikut

    1. untuk melanjutkan proses debug next line2. posisi break point3. variabel stat mengembalikan return value null dikarenakan masih

    diinisialisasi, untuk mendapatkan return nya maka tekan tanda panah (lihatpoint 1)

  • 21

    Tentunya hasil diatas akan berbeda untuk file citra dengan format berbeda. classImageStatistics merupakan class yang berfungsi untuk melakukan perhitunganstatistik citra meliputi max, min, median, standar deviasi.

    Framework AForge dan Accord secara cerdas dalam semua operasi citra nyamenggunakan input berupa class Image dan Bitmap tanpa menggunakan matrixsebagai nilai argumennya. Class dasar yang disediakan oleh Accord yaitu

    1. Menampilkan citra menggunakan ImageBox2. Konversi citra kedalam matrix dan sebaliknya menggunakan ImageToMatrix,

    MatrixToImage3. Menampilkan matrix kedalam MessageBox dan kedalam DataGridBox4. Operasi matrix

    Sedangkan untuk operasi konversi lainnya, bisa menggunakan AForge yaitu1. Operasi mengubah citra truecolor ke graycolor2. Operasi black white3. Operasi filtering, morphologi (akan dibahas pada bab selanjutnya)

    Semuanya memanfaatkan package AForge.Imaging.Filters. Penulis juga telahmembuat package Ext untuk melengkapi kekurangan pada Accord dan AForge,misalkan untuk menampilkan citra dalam beberapa Window sekaligus (tidak perludi close) karena menggunakan threading berbeda dengan ImageBox dari Accordyang harus di close terlebih dahulu, membuat citra truecolor dari matrix (Accordbelum ada, hanya untuk format grayscale saja), menampilkan histogram warna.Agar mempermudah dalam memahaminya, penulis telah membuat demo (console)project Demo.Bab3Console yang terdiri dari 1 class Program dan beberapa methodyaitu

    1. TampilCitra()2. AksesPixelGrayColor()3. AkesPixelTrueColor()4. Matrix2CitraGray()5. Matrix2CitraTrueColor()

  • 22

    6. OperasiMatrix()7. KonversiColor2Gray()8. KonversiGray2BW()

    Berikut adalah library yang digunakan1. System;2. System.IO;3. System.Drawing;4. System.Windows.Forms;5. System.Windows;6. AForge;7. AForge.Imaging;8. AForge.Imaging.Filters;9. AForge.Math;10.Accord.Math;11.Accord.Math.Formats;12.Accord.Controls.Imaging;13.Accord.Imaging.Converters;14.Ext;15.Ext.Utility;

    Sedangkan untuk sampel citra nya yaitu terdiri dari

    24bit.bmp grayscale8bit.bmpSource code Demo.Bab3Console1 using System;2 using System.IO;3 using System.Drawing;4 using System.Windows.Forms;5 using System.Windows;67 using AForge;8 using AForge.Imaging;9 using AForge.Imaging.Filters;10 using AForge.Math;1112 using Accord.Math;13 using Accord.Math.Formats;14 using Accord.Controls.Imaging;15 using Accord.Imaging.Converters;1617 using Ext;18 using Ext.Utility;1920 namespace Demo.Bab3Console21 {22 class Program23 {24 //lokasi citra25 static String lokasiTrueColor = " 24bit.bmp";26 static String lokasiGrayscale = " grayscale8bit.bmp";

  • 23

    27 //bitmap28 Bitmap bitmapTrueColor = (Bitmap)Bitmap.FromFile(lokasiTrueColor);29 Bitmap bitmapGrayscale = (Bitmap)Bitmap.FromFile(lokasiGrayscale);3031 public static void Main(string[] args)32 {33 Program program = new Program();34 program.TampilCitra();35 program.AksesPixelGrayColor();36 program.AkesPixelTrueColor();37 program.Matrix2CitraGray();38 program.Matrix2CitraTrueColor();3940 program.AksesPixelCitra();41 program.OperasiMatrix();42 program.KonversiColor2Gray();43 program.KonversiGray2BW();44 Console.ReadKey(true);45 }46 public void TampilCitra()47 {48 //tampilkan # 1 --> Accord49 /*Accord tidak menggunakan Threading sehingga tidak bisa saling50 *tampil secara ber urutan51 */5253 ImageBox.Show("True color",54 bitmapTrueColor,PictureBoxSizeMode.Zoom);55 ImageBox.Show("Gray color",bitmapGrayscale,56 PictureBoxSizeMode.Zoom);5758 //tampilkan # 2 --> Ext.59 /*Ext. menggunakan Threading sehingga bisa tampil ber urutan60 * */61 new Ext.Utility.ShowImage().62 InitShow(63 new MyDataBitmap("true color",64 bitmapTrueColor)65 );66 new Ext.Utility.ShowImage().67 InitShow(68 new MyDataBitmap("gray color",69 bitmapGrayscale)70 );7172 }73 public void AksesPixelGrayColor()74 {75 //# 1 --> Accord76 // untuk format grayscale77 double [,]matrix;78 //baca79 //format 0 sampai 25580 ImageToMatrix im2mat = new ImageToMatrix(0,255);81 im2mat.Convert(bitmapGrayscale,out matrix);82 /* Accord menyediakan 2 tampilan untuk menampilkan matrix83 * 1. bentuk dialog84 * 2. bentuk grid tabel85 * */

  • 24

    86 //tampilkan dalam bentuk dialog87 MessageBox.Show(88 matrix.ToString(89 CSharpMatrixFormatProvider.InvariantCulture),90 "pixel gray");91 //tampilkan dalam bentuk tabel92 Accord.Controls.DataGridBox.Show(matrix, nonBlocking: true)93 .SetAutoSizeColumns(DataGridViewAutoSizeColumnsMode.Fill)94 .SetAutoSizeRows(DataGridViewAutoSizeRowsMode95 .AllCellsExceptHeaders)96 .SetDefaultFontSize(5)97 .WaitForClose();9899 //# 2 --> Ext.100 ReadImage read = new ReadImage(bitmapGrayscale);101 byte [,] gray = read.Gray;102 //tampilkan ke console103 Ext.Utility.Prt.Print(gray);104 for (int i=0;i Ext.129 ReadImage read = new ReadImage(bitmapTrueColor);130 byte [,] red = read.Red;131 byte [,] green = read.Green;132 byte [,] blue = read.Blue;133134 }135 public void Matrix2CitraGray()136 {137 //# 1 --> membuat citra gray dari matrix - Accord138 double [,]gray;139 //baca140 ImageToMatrix im2mat = new ImageToMatrix(0,255);141 im2mat.Convert(bitmapGrayscale,out gray);142 //tulis143 MatrixToImage mat2image = new MatrixToImage(0,255);144 Bitmap bitmapHasil;

  • 25

    145 mat2image.Convert(gray,out bitmapHasil);146147 //tampilkan citra148 new Ext.Utility.ShowImage().149 InitShow(150 new MyDataBitmap("Accord - Gray ",151 bitmapHasil)152 );153 //# 2 --> membuat citra gray dari matrix - Ext.154 //baca155 ReadImage read = new ReadImage(bitmapGrayscale);156 //tulis157 CreateImage create = new CreateImage(read.Gray);158 //tampilkan citra159 new Ext.Utility.ShowImage().160 InitShow(161 new MyDataBitmap("Ext - Gray ",162 create.Btmp)163 );164165166 }167 public void Matrix2CitraTrueColor()168 {169 //# 1 --> membuat citra color dari matrix - Accord170 double [,]matrix;171 //baca172 ImageToMatrix im2mat = new ImageToMatrix(0,255,1); //red173 im2mat.Convert(bitmapTrueColor,out matrix);174 //tulis175 MatrixToImage mat2image = new MatrixToImage(0,255);176 Bitmap bitmapHasil;177 mat2image.Convert(matrix,out bitmapHasil);178 //tampilkan citra179 new Ext.Utility.ShowImage().180 InitShow(181 new MyDataBitmap("Accord - red pixel",182 bitmapHasil)183 );184185186 //# 2 --> membuat citra color dari matrix - Ext.187 //baca188 ReadImage read = new ReadImage(bitmapTrueColor);189 //tulis190 CreateImage create = new CreateImage(read.Red);191 //tampilkan citra192 new Ext.Utility.ShowImage().193 InitShow(194 new MyDataBitmap("Ext - red pixel ",195 create.Btmp)196 );197 create = new CreateImage(read.Red,read.Green,read.Blue);198 //tampilkan citra199 new Ext.Utility.ShowImage().200 InitShow(201 new MyDataBitmap("Ext - true color ",202 create.Btmp)203 );

  • 26

    204 }205206 public void OperasiMatrix()207 {208 //baca citra209 ReadImage read = new ReadImage(bitmapGrayscale);210 //nilai pixel citra211 int [,] gray = read.GrayInt;212 //casting nilai213 double [,]grayD = Ext.Utility.Casting.int2double(gray);214 //dinaikan 2x215 grayD = Matrix.Multiply(grayD,2);216 //casting nilai217 gray = Ext.Utility.Casting.double2int(grayD);218219 CreateImage create = new CreateImage(gray);//buat citra220221 new Ext.Utility.ShowImage().222 InitShow(223 new MyDataBitmap("cerah",224 create.Btmp)225 );226227228 }229 public void KonversiColor2Gray()230 {231232 Bitmap gray=AForge.Imaging.Filters.233 Grayscale.234 CommonAlgorithms.RMY.235 Apply(bitmapTrueColor);236 new Ext.Utility.ShowImage().237 InitShow(238 new MyDataBitmap("truecolor",239 bitmapTrueColor)240 );241242 new Ext.Utility.ShowImage().243 InitShow(244 new MyDataBitmap("gray",245 gray,1)246 );247 }248 public void KonversiGray2BW()249 {250 //threshold251 Threshold filter = new Threshold();252 //input harus gray253 filter.ApplyInPlace(bitmapGrayscale);254 new Ext.Utility.ShowImage().255 InitShow(256 new MyDataBitmap("BW",257 bitmapGrayscale)258 );259260 }261262 }

  • 27

    263264 }

    a.1 b.2

    b.1 b.2

    b.3 b.4

    c.1 c.2

  • 28

    d.1 d.2

    d.3 e

    f.1 f.2Keterangan:a.1 Tampilan ImageBox()a.2 Tampilan Ext.Utility.ShowImage()

    ImageBox dari Accord tidak mendukung tampilan secara berurutansehingga harus di close terlebih dahulu sehingga gunakan sajaExt.Utility.ShowImage()

    b.1 Tampilan MessageBox() dari Accordb.2 Tampilan DataGridBox() dari Accordb.3 Tampilan Ext.Utility.Prt.Print()b.4 Tampilan System.Diagnostics.Debug.Write()c.1c.2

    Perbandingan operasi read dan create yang menghasilkan tampilan yangsama baik untuk Accord dan Ext

    d.1 Read pixel dari Accord tidak sempurna menampilkan citra dari format

  • 29

    d.2d.3

    truecolor untuk layer pixel matrix red (merah)

    e Operasi matrix untuk menaikan nilai pixel dari Accordf.1f.2

    Operasi konversi ke graycolor dan black white dari AForge

  • 30

    OPERASI DASAR OLAH CITRA

    Banyak teknik dasar olah citra yang telah disediakan oleh AForge diantaranyaadalah operasi konvolusi (filtering), thresholding, morphologi, dan blob, cornerdetection, histogram equalization, line - circle - shape detection yang dibungkussecara rapi dalam bentuk class pada package AForge.Imaging danAForge.Imaging.Filters. Bila ingin mengetahui demo yang telah disediakan olehAForge, maka bukalah contoh demo di \AForge.NET\Framework\Samples\Imaging\FiltersDemo.sln. Bab 4 ini akanfokus membahas tentang konvolusi, thresholding, morphologi, operasi blob.

    KonvolusiKonvolusi merupakan salah satu operasi dasar untuk analisis citra yangmemberikan efek tertentu pada citra. Beberapa kegunaan dari konvolusi sepertismoothing, sharpening, blur, dan deteksi tepi. Operasi Konvolusi menggunakanarray 2D sebagai masukan dan array 2D square sebagai filter/kernel. Hasil darikonvolusi akan berbeda tergantung dari jenis kernelnya. Berikut contohperhitungan dari konvolusi

  • 31

    Jikax array 2D sebagai matrix inputh array 2D sebagai matrix (kernel / filter)m, i adalah kolom dari input (x) dan kernel (h)n, j adalah baris dari input (x) dan kernel (h)y sebagai ouput

    Form ini Sengaja Tidak ditampilkan

    Sebagai

    Review Version

    Silahkan untuk membeli edisi

    Full version

    http://softscients.blogspot.com

    [email protected]

  • 32

    Maka akan terlihat seperti berikut

    Berikut untuk perhitungan yang lainnya

    Form ini Sengaja Tidak ditampilkan

    Sebagai

    Review Version

    Silahkan untuk membeli edisi

    Full version

    http://softscients.blogspot.com

    [email protected]

  • 33

    Berikut jenis kernel yang sering digunakan untuk menampilkan efek tertentu padacitra digital.

    Sharpen Blur Emboss

    { 0, -1, 0 },{ -1, 5, -1 },{ 0, -1, 0 }

    { 1, 2, 3, 2, 1 },{ 2, 4, 5, 4, 2 },{ 3, 5, 6, 5, 3 },{ 2, 4, 5, 4, 2 },{ 1, 2, 3, 2, 1 }

    { -2, -1, 0 },{ -1, 1, 1 },{ 0, 1, 2 }

    Untuk memahami cara kerja konvolusi, penulis telah menuliskan source codeuntuk melakukan operasi konvolusi menggunakan input berupa matrix yaitu

    Form ini Sengaja Tidakditampilkan

    Sebagai

    Review Version

    Silahkan untuk membeli edisi

    Full version

    http://softscients.blogspot.com

    [email protected]

  • 34

    Ext.Convolution dan contoh Project dengan nama Demo.Bab4Convolution yangterdiri dari 3 method yaitu

    1. OperasiKonvolusiMatrix() : contoh matrix seperti diatas dan classExt.Convolution untuk melakukan operasi konvolusi

    2. OperasiKonvolusiCitra() : contoh matrix dari citra format gray yang akandiconvolution kemudian hasil matrix nya dibuat citra berformat gray

    3. OperasiKonvolusiAForge() : Input dan Output argument method nyamenggunakan object berupa class Bitmap bukan matrix lagi sehinggaproses nya menjadi mudah.

    Source code Demo.Bab4Convolution1 using System;2 using System.Drawing;3 using AForge.Imaging.Filters;4 using Ext;5 using Ext.Utility;6 namespace Demo.Bab4Convolution7 {8 class Program9 {10 //lokasi citra11 static String lokasiTrueColor = "24bit.bmp";12 static String lokasiGrayscale = "grayscale8bit.bmp";13 //bitmap14 Bitmap bitmapTrueColor = (Bitmap)Bitmap.FromFile(lokasiTrueColor);15 Bitmap bitmapGrayscale = (Bitmap)Bitmap.FromFile(lokasiGrayscale);1617 public static void Main(string[] args)18 {19 Program program = new Program();20 program.KonvolusiMatrix();21 program.OperasiKonvolusiCitra();22 program.OperasiKonvolusiAForge();23 Console.ReadKey(true);24 }25 public void KonvolusiMatrix()26 {2728 double[,] input = {29 { 1, 2, 3 },30 { 4, 5, 6 },31 { 7, 8, 9 } };32 double[,] kernel = {33 { -1, -2, -1 },34 { 0, 0, 0 },35 { 1, 2, 1 } };36 Ext.Convolution conv = new Ext.Convolution();37 double [,] output = conv.conv2d(input,kernel);38 Console.WriteLine("Input ");39 Ext.Utility.Prt.Print(input);40 Console.WriteLine("kernel ");41 Ext.Utility.Prt.Print(kernel);42 Console.WriteLine("Output ");43 Ext.Utility.Prt.Print(output);4445 }46 public void OperasiKonvolusiCitra()47 {48 double[,] emboss = {

    Form ini Sengaja Tidakditampilkan

    Sebagai

    Review Version

    Silahkan untuk membeli edisi

    Full version

    http://softscients.blogspot.com

    [email protected]

  • 35

    49 { -2, -1, 0 },50 { -1, 1, 1 },51 { 0, 1, 2 } };5253 //baca citra54 ReadImage read = new ReadImage(bitmapGrayscale);55 //nilai pixel citra56 int [,] gray = read.GrayInt;57 Ext.Convolution conv=new Ext.Convolution();5859 CreateImage create = new CreateImage(conv.conv2d(gray,emboss));60 new Ext.Utility.ShowImage().61 InitShow(62 new MyDataBitmap("emboss",63 create.Btmp)64 );656667 }68 public void OperasiKonvolusiAForge()69 {70 // convolution71 AForge.Imaging.Filters.Convolution convolution;7273 // kernel emboss74 int[,] emboss = {75 { -2, -1, 0 },76 { -1, 1, 1 },77 { 0, 1, 2 } };787980 convolution = new AForge.Imaging.Filters.Convolution(emboss);81 new Ext.Utility.ShowImage().82 InitShow(83 new MyDataBitmap("emboss",84 convolution.Apply(bitmapTrueColor))85 );86 int[,] sharp = {87 { 0, -1, 0 },88 { -1, 5, -1 },89 { 0, -1, 0 } };90 convolution = new AForge.Imaging.Filters.Convolution(sharp);91 new Ext.Utility.ShowImage().92 InitShow(93 new MyDataBitmap("sharp",94 convolution.Apply(bitmapTrueColor))95 );96 int [,]blur = {97 { 1, 2, 3, 2, 1 },98 { 2, 4, 5, 4, 2 },99 { 3, 5, 6, 5, 3 },100 { 2, 4, 5, 4, 2 },101 { 1, 2, 3, 2, 1 } };102 convolution = new AForge.Imaging.Filters.Convolution(blur);103 new Ext.Utility.ShowImage().104 InitShow(105 new MyDataBitmap("blur",106 convolution.Apply(bitmapTrueColor))107 );

  • 36

    108109110111 }112113114 }115116 }

    a

    b c.1

    c.2 c.3Keterangan:a Operasi konvolusi matrixb Operasi konvolusi citra Extc.1 Operasi konvolusi AForge - Filter Sharpc.2 Operasi konvolusi AForge - Filter Emboss

  • 37

    c.3 Operasi konvolusi AForge - Filter Blur

    Selain berfungsi untuk melakukan filtering atau pemberian efek terhadap citra,konvolusi juga bisa digunakan untuk melakukan edge detection (deteksi tepi).Silahkan untuk buka project Demo.Bab4Edge, ada dua metode untuk melakukanedge detection yaitu

    1. Secara tidak langsung menggunakan convolution dari package Ext danmelakukan looping yaitu mulai dari membaca pixel, mengubah kedalamformat biner, convolution, mengubah kedalam format 0-255, dan mengubahmatrix kedalam citra

    2. Secara langsung menggunakan class yang telah disediakan oleh AForgeyaitu CannyEdgeDetector, SobelEdgeDetector, Edges

    Source code Demo.Bab4Edge1 using System;2 using System.Drawing;3 using AForge.Imaging.Filters;4 using Ext;5 using Ext.Utility;6 namespace Demo.Bab4Edge7 {8 class Program9 {10 //lokasi citra11 static String lokasiGrayscale = "D:\Sample Citra\Blob8Bit.bmp";12 //bitmap13 Bitmap bitmapGrayscale = (Bitmap)Bitmap.FromFile(lokasiGrayscale);1415 public static void Main(string[] args)16 {17 Program program = new Program();18 program.Edge();19 program.EdgeAForge();20 Console.ReadKey(true);21 }22 public void Edge()23 {24 //# 1 --> mengubah grayscale ke black white - biner25 OtsuThreshold otsu = new OtsuThreshold();//dibahas di bab thresholding26 Bitmap bw = otsu.Apply(bitmapGrayscale);27 //# 2 --> ubah kedalam format biner28 ReadImage read = new ReadImage(bw);2930 byte [,] biner = read.Gray;31 for (int i=0;i convolution untuk gradient X dan Y45 double[,] sobelX = {

  • 38

    46 {-1,-2,-1},47 {0,0,0},48 {1,2,1}49 };50 double [,] sobelY = {51 {-1,0,1},52 {-2,0,2},53 {-1,0,1}54 };55 Ext.Convolution conv = new Ext.Convolution();56 //convolution untuk gradient X57 double [,]biner2 = conv.conv2d(Casting.byte2double(biner),sobelX);58 //convolution untuk gradient Y59 biner2 = conv.conv2d(biner2,sobelY);6061 //# 4 --> ubah kedalam format angka 0 sampai 25562 for (int i=0;i konversi matrix ke citra78 CreateImage create = new CreateImage(biner);79 //# 6 --> tampilkan80 new Ext.Utility.ShowImage().81 InitShow(82 new MyDataBitmap("Ext",83 create.Btmp)84 );8586 }87 public void EdgeAForge()88 {89 //# 1 --> edge type canny90 CannyEdgeDetector canny = new CannyEdgeDetector();91 Bitmap hasil = canny.Apply(bitmapGrayscale);92 new Ext.Utility.ShowImage().93 InitShow(94 new MyDataBitmap("canny",95 hasil)96 );97 //# 2 --> edge type sobel98 SobelEdgeDetector sobel = new SobelEdgeDetector();99 hasil = sobel.Apply(bitmapGrayscale);100 new Ext.Utility.ShowImage().101 InitShow(102 new MyDataBitmap("sobel",103 hasil)104 );

  • 39

    105 //# 3 --> edge type custom106 Edges edge = new Edges();107 int [,] kernel = {108 {0, -1, 0},109 {-1, 4, -1},110 {0, -1, 0}111 };112 edge.Kernel = kernel;113 hasil = edge.Apply(bitmapGrayscale);114 new Ext.Utility.ShowImage().115 InitShow(116 new MyDataBitmap("custom",117 hasil)118 );119 }120121 }122123 }

    a b.1

    b.2 b.3

    Keterangan:a Operasi edge detection menggunakan Extb.1 Operasi AForge menggunakan class CannyEdgeDetectorb.2 Operasi AForge menggunakan class SobelEdgeDetectorb.3 Operasi AForge menggunakan class Edges

  • 40

    ThresholdingThresholding (pengambangan) mencari nilai T (ambang batas) yang digunakanuntuk melakukan proses konversi citra true color dalam format black white. Adabanyak metode untuk mendapatkan nilai ambang batas sebagai acuan untukmengkategorikan nilai suatu pixel termasuk warna hitam atau putih jika dalamformat biner maka (1 dan 0) dan format grayscale (0 dan 255) salah satu yangpaling banyak dikenal luas dan digunakan sebagai standar yaitu metode Otsu.

    Metode Otsu mencari nilai ambang batas (T) dengan melakukan analisisdiskriminan pada suatu variabel yang dapat membedakan antara dua atau lebihkelompok yang muncul secara alami. Misalkan nilai ambang batas yang akandicari k. Nilai k berkisar 1 sampai dengan L, dengan L = 255Jikap(i) = nilai histogramsumT = jumlah total pixelwB = bobot backgroundwF = bobot foregroundN = luas matrixsumB = jumlah total pixel ke imB = rata-rata backgroundmF = rata - rata foreground

    Maka nilai ambang batas didapatkan dengan mencari nilai maksimal darivariance nya. Berikut contoh perhitungan dari metode otsu.

    Form ini Sengaja Tidak ditampilkan

    Sebagai

    Review Version

    Silahkan untuk membeli edisi

    Full version

    http://softscients.blogspot.com

    [email protected]

  • 41

    1. Misalkan kita mempunyai matrix citra dengan nilai 0 sampai 20 (L = 20) danN 6(baris)*21(kolom) = 126

    0 3 2 3 7 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 200 4 2 3 7 5 14 15 16 17 18 19 200 1 2 3 7 5 14 15 16 17 18 19 200 1 2 3 8 9 14 15 11 17 18 10 201 1 2 3 9 9 14 15 12 11 18 10 201 4 2 3 9 9 8 7 8 9 10 11 12 9 10 15 12 11 12 10 11

    2. Histogram citra p(i)Range 0 1 2 3 4 15 16 17 18 19 20

    Frek.p(i) 4 5 6 7 2 6 3 4 5 3 5

    3. Nilai sumT = 12344. Misalkan untuk k =3

    wB(3) = 4+5+6+7 = 22wF(3) = 126 -22 = 104sumB(3) = 0*4+1*5+2*6+3*7= 38mB = 38/22 = 1.722mF = (1234 - 38 )/104 = 11.5variance =22*104*(1.722-11.5)2 = 218518

    k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 k = 649926.42 104222.8 160907.8 218518.2 231777.9 245791 257613.6

    k = 7 k = 8 k = 9 k = 10 k = 11 k = 12 k =13274193.9 284203.7 290625.7 290588.1 283855 271590.4 259487.5

    k = 14 k = 15 k = 16 k = 17 k = 18 k = 19 k* = 20240269.2 209169.5 188957.9 154803.5 104034 68338.68

    5. Mencari nilai variance tertinggi pada k keMaka nilai k terbesar berada di k = 9 yaitu 290625.7Keterangan:Untuk k = 20 tidak dihitung karena wF = 0

    AForge menyediakan 2 class untuk melakukan proses segmentasi yaitu1. Threshold secara default nilai ambang batas nya adalah 1282. OtsuThreshold menggunakan metode otsu untuk mencari nilai ambang

    batas nya atau bisa juga di set nilai ThresholdValue nyaDemo operasi segmentasi didalam Project Demo.Bab4Threshold dibagi menjadi 3yaitu

    1. Menghitung nilai ambang batas menggunakan class Otsu dari package Extkemudian melakukan looping untuk mengubah nilai pixel menjadi 0 dan255.

    2. Menerapkan pengubahan nilai citra menggunakan class Threshold daripackage AForge dengan nilai T yang didapatkan dari point 1.

    3. Menggunakan class OtsuThreshold dari AForge.Source code Demo.Bab4Threshold1 using System;2 using System.Drawing;3 using AForge.Imaging.Filters;4 using Ext;5 using Ext.Utility;6 namespace Demo.Bab4Threshold

    Form ini Sengaja Tidak ditampilkan

    Sebagai

    Review Version

    Silahkan untuk membeli edisi

    Full version

    http://softscients.blogspot.com

    [email protected]

  • 42

    7 {8 class Program9 {10 //lokasi citra11 static String lokasiCitra = "grayscale8bit.bmp";12 Bitmap bitmapGrayscale=(Bitmap)Bitmap.FromFile(lokasiCitra);1314 public static void Main(string[] args)15 {1617 Program program = new Program();18 //program.TestOtsu();19 program.OperasiBW();20 program.operasiBWAforge();21 Console.ReadKey(true);22 }2324 public void TestOtsu()25 {2627 byte [,] data={28 {0,3,2,3,7,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20},29 {0,4,2,3,7,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20},30 {0,1,2,3,7,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20},31 {0,1,2,3,8,9,6,7,8,9,10,11,12,13,14,15,11,17,18,10,20},32 {1,1,2,3,9,9,8,7,8,9,10,11,12,13,14,15,12,11,18,10,20},33 {1,4,2,3,9,9,8,7,8,9,10,11,12,9,10,15,12,11,12,10,11}3435 };36 Ext.Otsu otsu=new Ext.Otsu();37 otsu.Process(data);38 int T = otsu.T;39 Console.WriteLine("Nilai ambang batas T = "+T.ToString());4041 }42 public void OperasiBW()43 {44 //tampilkan citra45 new Ext.Utility.ShowImage().46 InitShow(47 new MyDataBitmap("gray",48 bitmapGrayscale49 )50 );5152 //tampilkan histogram53 new Ext.Utility.ShowHistogram().54 InitShow(55 new MyDataBitmap("histogram gray ",56 bitmapGrayscale57 )58 );59 //baca pixel citra60 Ext.ReadImage read=new Ext.ReadImage(bitmapGrayscale);61 //matrix62 byte [,] gray=read.Gray;63 //perhitungan nilai ambang batas64 Ext.Otsu otsu=new Ext.Otsu();65 //proses

  • 43

    66 otsu.Process(gray);67 //nilai T68 int T = otsu.T;69 Console.WriteLine("nilai otsu "+T.ToString());7071 //## 1 --> cara ke 172 for (int i = 0; i cara ke 296 Threshold tr=new Threshold(T);9798 new Ext.Utility.ShowImage().99 InitShow(100 new MyDataBitmap("BW -- 2",101 tr.Apply(bitmapGrayscale)102 )103 );104105 }106 public void operasiBWAforge()107 {108109 OtsuThreshold tr=new OtsuThreshold();110 new Ext.Utility.ShowImage().111 InitShow(112 new MyDataBitmap("BW -- 3",113 tr.Apply(bitmapGrayscale)114 )115 );116117 }118119 }120121 }

  • 44

    a.1 a.2

    a.3 a.4

    bKeterangan:a.1 menampilkan citra graya.2 menampilkan histogram citraa.3 Operasi BW cara 1a.4 Operasi BW cara ke 2b Operasi BW dengan AForge

  • 45

    MorphologiSecara sederhana morphologi adalah bentuk dan struktur. Operasi morphologibekerja dalam format biner yaitu 1 dan 0. Beberapa operasi yang sering digunakanyaitu

    1. Dilation (penebalan) yaitu menambahkan sejumlah pixel terhadap semuaarah dari sebuah structure element

    2. Erotion (penipisan) yaitu mengurangi sejumlah pixel terhadap semua arahdari sebuah structure element

    3. Opening yaitu operasi erotion disertai dengan dilation berfungsi untukmenghilangkan objek - objek kecil yang terdapat dalam citra

    4. Closing yaitu operasi dilation disertai dengan erotionOperasi morphologi melibatkan dua input himpunan yaitu citra (format biner)dengan suatu kernel yang disebut dengan Structure Element sebagai dasaroperasinya nya. Berikut dibawah ini ilustrasi dari operasi morphologi.

    Form ini Sengaja Tidak ditampilkan

    Sebagai

    Review Version

    Silahkan untuk membeli edisi

    Full version

    http://softscients.blogspot.com

    [email protected]

  • 46

    Form ini Sengaja Tidak ditampilkan

    Sebagai

    Review Version

    Silahkan untuk membeli edisi

    Full version

    http://softscients.blogspot.com

    [email protected]

  • 47

    Bukalah project Demo.Bab4Morpho yang berisi operasi morphologi. Semua operasimorpholgi menggunakan input argument berupa Bitmap dan menggunakanmethod Apply() sebagai standard operasinya.

    Form ini Sengaja Tidak ditampilkan

    Sebagai

    Review Version

    Silahkan untuk membeli edisi

    Full version

    http://softscients.blogspot.com

    [email protected]

  • 48

    Berikut adalah class yang terlibata. Dilationb. Erosionc. Openingd. Closing

    Source code Demo.Bab4Morpho1 using System;2 using System.Drawing;3 using AForge.Imaging.Filters;4 using Ext;5 using Ext.Utility;6 namespace Demo.Bab4Morpho7 {8 class Program9 {10 //lokasi citra11 static String lokasiCitra = " morpho24bit.bmp";12 Bitmap bitmapGrayscale=(Bitmap)Bitmap.FromFile(lokasiCitra);1314 public static void Main(string[] args)15 {1617 Program program = new Program();18 program.DemoMorpho();19 Console.ReadKey(true);20 }2122 public void DemoMorpho()23 {24 //tampilkan citra25 new Ext.Utility.ShowImage().26 InitShow(27 new MyDataBitmap("original",28 bitmapGrayscale29 )30 );3132 Dilatation dilation = new Dilatation( );33 //tampilkan citra34 new Ext.Utility.ShowImage().35 InitShow(36 new MyDataBitmap("Dilation",37 dilation.Apply( bitmapGrayscale )38 )39 );4041 Erosion erosion = new Erosion();42 //tampilkan citra43 new Ext.Utility.ShowImage().44 InitShow(45 new MyDataBitmap("Erosion",46 erosion.Apply( bitmapGrayscale )47 )48 );4950 Opening opening = new Opening();51 //tampilkan citra52 new Ext.Utility.ShowImage().

  • 49

    53 InitShow(54 new MyDataBitmap("opening",55 opening.Apply( bitmapGrayscale ),156 )57 );58 Closing closing = new Closing();59 //tampilkan citra60 new Ext.Utility.ShowImage().61 InitShow(62 new MyDataBitmap("closing",63 closing.Apply( bitmapGrayscale )64 )65 );666768 }697071 }7273 }

    a.1 a.2

    a.3 a.4

  • 50

    a.5Keterangan:a.1 Citra originala.2 Citra dilationa.3 Citra erotiona.4 Citra openinga.5 Citra closing

    Operasi BlobDasar dari operasi blob adalah labelling yaitu untuk menghitung jumlah itemsuatu citra berdasarkan komponen terhubung. Misalkan pada citra akanditentukan

    1. Berapa jumlah item2. Lokasi koordinat x,y masing-masing item3. Manakah termasuk lingkaran penuh, persegi, lonjong, lingkaran donat

    Pada point 1 dan 2 AForge telah menyediakan perhitungannya di class Blob,sedangkan untuk point 3, penulis telah menuliskan class Ext.Moment untukmelakukan perhitungan moment. Berikut adalah sampel citra yang digunakan

    Blob8Bit.bmp

    LabellingPenandaan komponen terhubung yaitu mengelompokan pixel kedalam suatukomponen terhubung menurut aturan ketetanggaan. Setiap komponen yang tidakterhubung (disjoint) akan diberi suatu tanda yang berbeda. Langkah nya yaituperiksa (scan) citra dengan bergerak dari sepanjang baris sampai sudah

  • 51

    menemukan pixel p (nilai p berada dalam matrix V). Bila p sudah ditemukan makaperiksa nilai pixel tetangganya. Berikut adalah penandaan

    ketetanggan4 81 1 1 1

    1 4 1 1 8 11 1 1 1

    Berikut contoh ilustrasi dari labelling dengan nilai 4 dan 8 ketetanggaan.Matrix biner

    0 00 01 10 00 00 00 00 0

    0 0 0 0 1 1 0 1 0

    4 tetangga0 0 0 0 0 0 0 0 01 1 1 0 2 0 0 0 00 0 1 0 2 2 2 2 20 1 1 0 0 0 0 0 00 1 0 0 0 0 0 0 00 0 0 0 0 3 3 0 00 0 0 4 4 0 0 0 00 0 0 0 4 0 5 0 00 0 0 0 4 4 0 5 0

    8 tetangga0 0 0 0 0 0 0 0 010000000

    MomentMomen suatu objek dapat menggambarkan luas area, posisi, orientasi, danparamater yang lainnya. Persamaan dasar dari momen sebagai berikut

    Dengan i dan j adalah posisi dari suatu pixel dengan nilai intensitas axy. Momentingkat ke 0 dan ke 1 didefinisikan sebagai berikut

    Form ini Sengaja Tidak ditampilkan

    Sebagai

    Review Version

    Silahkan untuk membeli edisi

    Full version

    http://softscients.blogspot.com

    [email protected]

  • 52

    Titik pusat (center of gravity) x dan y sebagai berikut

    Misalkan0 0 0 0 0 0 00 0 0 0 0 0 00 0 0 1 1 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 0

    MakaArea = 2M00 = 2M10 = 7M01 = 4

    Posisi x dan y adalah koordinat layar bukan koordinat kartesius.

    Momen Pusat Momen yang bersesuai dengan titik tengah suatu area

    Momen ternormalisasi dinyatakan dengan persamaan berikut,

    dengan

    Form ini Sengaja Tidak ditampilkan

    Sebagai

    Review Version

    Silahkan untuk membeli edisi

    Full version

    http://softscients.blogspot.com

    [email protected]

  • 53

    Maka vector ciri untuk pengenalan objek dari momen - momen invarian sebagaiberikut

    Untuk contoh diatas akan menghasilkan seperti berikutmoment1 = 2.357moment2 = 10.703125moment3 = 23.4140625moment4 = 28.1953125moment5 = -1162.06622314453moment6 = 65.06103515625moment7 = 1191.31031799316

    source code Demo.Bab4Blob1 using System;2 using System.Drawing;3 using System.Drawing.Imaging;4 using System.Diagnostics;56 using AForge.Imaging;7 using AForge.Imaging.Filters;89 using Ext;10 using Ext.Utility;11 namespace Demo.Bab4Blob12 {13 class Program14 {15 //lokasi citra16 //static String lokasiCitra = @"D:\Sample Citra\Blob8Bit.bmp";17 static String lokasiCitra = @"D:\Sample Citra\Blob8Bit.bmp";18 Bitmap bitmapGrayscale=(Bitmap)Bitmap.FromFile(lokasiCitra);1920 public static void Main(string[] args)21 {2223 Program program = new Program();24 //program.DemoLabellingMatrix();25 //program.DemoCoG();26 program.DemoBlob();27 Console.ReadKey(true);28 }2930 public void DemoLabellingMatrix()31 {32 byte [,] data = new byte[,]33 {34 {0,0,0,0,0,0,0,0,0},35 {1,1,1,0,1,0,0,0,0},36 {0,0,1,0,1,1,1,1,1},

    Form ini Sengaja Tidak ditampilkan

    Sebagai

    Review Version

    Silahkan untuk membeli edisi

    Full version

    http://softscients.blogspot.com

    [email protected]

  • 54

    37 {0,1,1,0,0,0,0,0,0},38 {0,1,0,0,0,0,0,0,0},39 {0,0,0,0,0,1,1,0,0},40 {0,0,0,1,1,0,0,0,0},41 {0,0,0,0,1,0,1,0,0},42 {0,0,0,0,1,1,0,1,0}4344 };4546 Ext.Labelling labelling = new Ext.Labelling();47 labelling.Process(data,Labelling.LABEL_4);48 Ext.Utility.Prt.Print(labelling.LabelByte);49 labelling.Process(data,Labelling.LABEL_8);50 Ext.Utility.Prt.Print(labelling.LabelByte);51 }52 public void DemoCoG()53 {54 byte[,] data = new byte[,]55 {56 {0,0,0,0,0,0,0},57 {0,0,0,0,0,0,0},58 {0,0,0,1,1,0,0},59 {0,0,0,0,0,0,0},60 {0,0,0,0,0,0,0},61 {0,0,0,0,0,0,0},62 {0,0,0,0,0,0,0}63 };6465 Ext.CenterOfGravity cog = new Ext.CenterOfGravity();66 cog.Process(data);67 Console.WriteLine("Posisi X "+cog.X+" Posisi Y "+cog.Y);6869 Ext.Moment moment = new Ext.Moment();70 moment.Process(cog.X,cog.Y,data);71 Console.WriteLine("moment1 "+moment.Moment1);72 Console.WriteLine("moment2 "+moment.Moment2);73 Console.WriteLine("moment3 "+moment.Moment3);74 Console.WriteLine("moment4 "+moment.Moment4);75 Console.WriteLine("moment5 "+moment.Moment5);76 Console.WriteLine("moment6 "+moment.Moment6);77 Console.WriteLine("moment7 "+moment.Moment7);7879 }80 public void DemoBlob()81 {82 //tampilkan citra83 new Ext.Utility.ShowImage().84 InitShow(85 new MyDataBitmap("original",86 bitmapGrayscale)87 );8889 //perubahan ke BW90 OtsuThreshold threshold = new OtsuThreshold();91 Bitmap blackWhite = threshold.Apply(bitmapGrayscale);92 //clone ke format truecolor93 Bitmap imageTrueColor = AForge.Imaging.Image.94 Clone(blackWhite,95 PixelFormat.Format24bppRgb );

  • 55

    96 //operasi blob97 BlobCounter blobCounter = new BlobCounter();98 //proses99 blobCounter.ProcessImage(blackWhite);100101 AForge.Imaging.Blob[] blobs=blobCounter.GetObjectsInformation();102 blobs = blobCounter.GetObjectsInformation();103 //operasi draw citra104 System.Drawing.Image image3=(System.Drawing.Image)imageTrueColor;105 Graphics g=Graphics.FromImage(image3);106 // Create font and brush.107 Font drawFont = new Font("Arial",36);108 SolidBrush drawBrush = new SolidBrush(Color.Red);109 PointF drawPoint;110 int i=1;111 //untuk baca pixel citra112 Ext.ReadImage read;113 Bitmap target;114115 foreach ( AForge.Imaging.Blob blob in blobs )116 {117118 //jika area > 50119 if (blob.Area>=50)120 {121 //draw122 drawPoint = new PointF(blob.CenterOfGravity.X,123 blob.CenterOfGravity.Y);124125 blobCounter.ExtractBlobsImage(blackWhite, blob, true);126 Bitmap bw = blob.Image.ToManagedImage();127 //proses croping128 Rectangle cropRect=blob.Rectangle;129 target = bw.Clone(cropRect,bw.PixelFormat);130131 //baca pixel citra132 read=new Ext.ReadImage(target);133134 //menghitung moment135 Ext.Moment moment=new Ext.Moment();136 moment.Process(blob.CenterOfGravity.X,blob.CenterOfGravity.Y,137 read.Gray);138139 Console.WriteLine("["+i.ToString()+"] lokasi "140 +blob.CenterOfGravity.X +" dan "141 +blob.CenterOfGravity.Y);142 Console.WriteLine("moment1 "+moment.Moment1);143 Console.WriteLine("moment2 "+moment.Moment2);144 Console.WriteLine("moment3 "+moment.Moment3);145 Console.WriteLine("moment4 "+moment.Moment4);146 Console.WriteLine("moment5 "+moment.Moment5);147 Console.WriteLine("moment6 "+moment.Moment6);148 Console.WriteLine("moment7 "+moment.Moment7);149 Debug.WriteLine("["+i.ToString() +"] lokasi "150 +blob.CenterOfGravity.X151 +" dan "+blob.CenterOfGravity.Y);152 Debug.WriteLine("moment1 "+Math.Round(moment.Moment1,3));153 Debug.WriteLine("moment2 "+Math.Round(moment.Moment2,3));154 Debug.WriteLine("moment3 "+Math.Round(moment.Moment3,3));

    Form ini Sengaja Tidak ditampilkan

    Sebagai

    Review Version

    Silahkan untuk membeli edisi

    Full version

    http://softscients.blogspot.com

    [email protected]

  • 56

    155 Debug.WriteLine("moment4 "+Math.Round(moment.Moment4,3));156 Debug.WriteLine("moment5 "+Math.Round(moment.Moment5,3));157 Debug.WriteLine("moment6 "+Math.Round(moment.Moment6,3));158 Debug.WriteLine("moment7 "+Math.Round(moment.Moment7,3));159160161 new Ext.Utility.ShowImage().162 InitShow(163 new MyDataBitmap(164 "citra ke "+i.ToString(),target)165 );166 g.DrawString(i.ToString(), drawFont, drawBrush, drawPoint);167 i++;168 }169170171 }172 new Ext.Utility.ShowImage().173 InitShow(174 new MyDataBitmap("count",175 (Bitmap)image3)176 );177178179180 }181182183 }184185 }

    a

  • 57

    b.1 b.2

    Keterangan:a Perhitungan hasil Center of gravity dan momentnyab.1 Citra originalb.2 Citra hasil blob

    Berikut hasil dari tampilan Debug Output nya[1] lokasi 153.0507 dan 288.8216moment1 2.715moment2 9.442moment3 257552.609moment4 393867.417moment5 30147466885.689moment6 1003571.22moment7 -57134563087.444

    [2] lokasi 798.4896 dan 357.4542moment1 29.136moment2 1217.235moment3 474055537.436moment4 490814201.319moment5 2.60638092613942E+17moment6 18242375178.783moment7 2.07415641255753E+17

    [3] lokasi 576.3546 dan 368.7476moment1 17.69moment2 530.006moment3 95655583.849moment4 101403206.477moment5 1.40532426648792E+16moment6 2054030339.179moment7 1.13282718266874E+16

    [4] lokasi 264.6995 dan 587.8546moment1 21.442moment2 685.696moment3 130251134.58moment4 135429848.292moment5 5.44693479578967E+15moment6 3093029271.551moment7 -8.72499826279729E+15

    [5] lokasi 605.1851 dan 656.7604moment1 40.588moment2 3267.005moment3 1004757395.002moment4 1030472856.919moment5 1.22030714860354E+18moment6 41646354676.358moment7 1.0650179015771E+17

    [6] lokasi 528.1293 dan 814.6841moment1 35.083moment2 2193.041moment3 899387743.841moment4 915869170.674moment5 5.11694787845467E+17moment6 33907336249.808moment7 -4.19838326260914E+17

    [7] lokasi 787.5 dan 843moment1 62.194moment2 7693.981moment3 4316996878.566moment4 4363545317.34moment5 2.18335014229934E+19moment6 271363112642.319moment7 1.60762584463735E+18

  • 58

    Bila diplotkan kedalam grafik akan tampil seperti berikut

    KesimpulanBila dilihat dari plot grafik maka akan tampak bawah moment1, moment2,moment3, moment4, moment6 yang signifikan untuk membedakan bentuk dariobjek

  • 59

    ANALISIS TEKSTUR

    Manusia mengenal tekstur seperti lembut dan kasar walaupun tangan tidakmenyentuh benda tersebut, tapi otak mampu membedakan hal tersebut melaluivisualisasi yang ditangkap oleh mata. Tekstur dapat dicirikan sebagai berikut

    a. Pengulangan pola dari variasi lokal sehingga membentuk kesatuan yangutuh

    b. Menyediakan informasi susunan spasial dari warna dan intensitas citrac. Dicirikan dengan distribusi spasial dari level intensitas dari nilai pixel

    ketetanggaand. Tidak bisa didefinisikan sebagai suatu satu point / nilai tertentu karena

    merupakan sebuah pola / kesatuanLihatlah ilustrasi berikut tentang tekstur sebuah citra yaitu terdiri dari 50% hitamdan 50% putih

    Tentunya uji statistik standar seperti mean, standar deviasi tidak akan mampumembedakan ketiga citra tersebut karena akan menghasilkan nilai yang sama.Seperti yang sudah dijelaskan bahwa tekstur merupakan suatu pengulangan poladan distribusi spasial artinya ketiga citra tersebut mempunyai tingkat intensitasnilai pixel yang sama tapi mempunyai distribusi spasial yang berbeda.

    Analisis tekstur merupakan salah satu metode untuk melakukan identifikasi atauklasifikasi suatu citra, analisis tersebut telah banyak digunakan dalam berbagai

  • 60

    bidang yaitu uji tekstur wajah, mutu keramik, membedakan jenis daun dan dalaminterpretasi suatu peta sehingga dapat diketahui jenis lahan.

    GLCM sebagai salah satu metode analisisteksturGray-Level Co-occurrence matrix merupakan metode paling banyak digunakanuntuk analisis tekstur. Metode ini diperkenalkan oleh Haralick di tahun 1973 yangmerupakan bagian dari project yang didukung olah NASA yaitu tepatnya NASAGoddard Space Flight Center. Haralick menggunakan citra dari NASA ERTS untukmelakukan klasifikasi dengan tingkat akurasi diatas 80%.

    Matrix GLCM dihitung dari nilai pixel yang berpasangan dan memiliki nilaiintensitas tertentu. Misalkan d adalah jarak antara dua pixel yaitu (x1,y1) dan(x2,y2) dan tetha didefinisikan sebagai sudut antara keduanya, maka matrixGLCM merupakan distribusi spasial dari Pd (i,j). Banyak paper menuliskanberbagai versi tentang perhitungan GLCM terutama mengenai masalah sudut yangdigunakan. Berikut adalah ilustrasi yang menggambarkan arah sudut denganjarak 1 pixel dan ada 4 jenis sudut yang digunakan:

    a. 0o=180o;b. 45o=225o,c. 90o=270o, dand. 135o=315o

    tapi terkadang ada yang menyatakan terdiri dari 8 arah, hal ini terjadi karenaantara sudut 0o dan 180o dianggap berbeda begitu juga dengan arah sudut yanglainnya

  • 61

    Perhitungan GLCMMisalkan kita mempunyai gray matrix dengan skala intensitas dari 0 sampai 2

    0 0 1 22 0 2 01 0 0 22 0 1 1

    Maka tentukan P1,0(M) yaitu matrix GLCM dari jarak 1 untuk sudut 0o1. Buatlah matrix pasangan yaitu

    0 1 2012

    2. Misalkan hitung matrix pasangan (0,0) untuk sudut 0 dan 180

    Sudut 0o Sudut 180o

    no Sudut 0o Sudut 180oa 0,0 0,0b 0,1 1,0c 1,2 2,1d 2,0 0,2efghijkl 1,1 1,1

    Form ini Sengaja Tidak ditampilkan

    Sebagai

    Review Version

    Silahkan untuk membeli edisi

    Full version

    http://softscients.blogspot.com

    [email protected]

  • 62

    Sehingga matrix GLCM nya adalah0 1 2

    012

    3. Langkah selanjutnya adalah melakukan normalisasi yaitu matrixGLCMNorm.Jumlah total nilai = 24

    0.1667 0.1250 0.20830.1250 0.0833 0.04170.2083 0.0417 0

    Bila dijumlahkan akan menghasilkan nilai 1. Matrix diatas merupakan inputuntuk perhitungan fitur tekstur. Berikut adalah beberapa fitur yang bisa dihitungmenggunakan GLCM yaitu terdiri dari 7 fitur utama dan 7 fitur tambahan yangditurunkan dari 7 fitur utama.1. Angular second moment/uniformity/energy2. Entropy3. Dissimilarity4. Contrast/inertia5. Correlation6. Homogeneity/inverse difference moment7. Autocorrelation8. Sum of squares (variance)9. Sum average10. Sum variance11. Sum entropy12. Difference variance13. Difference entropy14. Information measures of correlation

    Perhitungan 7 fitur utama1. Angular second moment/uniformity/energy

    Mengukur tentang keseragaman atau sering disebut angular second moment.Energy akan bernilai tinggi ketika nilai pixel mirip satu sama lain sebaliknya akanbernilai kecil menandakan nilai dari GLCM normalisasi adalah heterogen. Nilaimaksimum dari energy adalah 1 yang artinya distribusi pixel dalam kondisikonstan atau bentuk nya yang berperiodik (tidak acak). Hasil perhitungan diatasadalah

    f1 = 0.1042

    Form ini Sengaja Tidak ditampilkan

    Sebagai

    Review Version

    Silahkan untuk membeli edisi

    Full version

    http://softscients.blogspot.com

    [email protected]

  • 63

    2. Entropy

    Mengukur kompleksitas(keacakan) citra. Entropy akan bernilai tinggi ketika citratidak seragam. Hasil perhitungan diatas adalah

    f2 = 2.325

    3. Dissimilarity

    Mengukur ketidakmiripan suatu tekstur, yang akan bernilai besar bila acak dansebaliknya akan bernilai kecil bila seragam. Hasil perhitungan diatas adalah

    f3 = 1.5833

    4. Contrast/inertia

    Mengukur frekuensi spasial dari citra dan perbedaan moment GLCM. Perbedaanyang dimaksudkan adalah perbedaan tinggi dan rendah nya pixel. Contrast akanbernilai 0 jika pixel ketetanggaan mempunyai nilai yang sama. Hasil perhitungandiatas adalah

    f4 = 3.416

    5. Correlation

    Dengan

    Mengukur linearitas (the joint probability) dari sejumlah pasangan pixel (pairs).x = 2.458y= 2.458

    x = 1.1649y = 1.1649

    Hasil perhitungan diatas adalahf5 = 0.1042

    6. Homogeneity/inverse difference moment

    Form ini Sengaja Tidak ditampilkan

    Sebagai

    Review Version

    Silahkan untuk membeli edisi

    Full version

    http://softscients.blogspot.com

    [email protected]

  • 64

    Mengukur homogenitas. Nilai ini sangat sensitif terhadap nilai disekitar diagonalutama. Bernilai tinggi ketika semua pixel mempunyai nilai yang sama / seragam.Kebalikan dari contrast yaitu akan bernilai besar jika mempunyai nilai pixel yangsama pada saat energy bernilai tetap. Hasil perhitungan diatas adalah

    f6 = 0.3927. Autocorrelation

    Mengukur correlation diantara garis diagonal utama. Hasil nya contoh diatasadalah

    f7 = 5.5

    Catatan:i dan j menggunakan nilai initial 1 bukan 0

    Contoh:Berikut disajikan contoh untuk analisis fitur GLCM. ada 3 matrix gray yaitu M1;M2; M3 yang masing-masing mempunyai jumlah nilai pixel yang sama, akan tetapimempunyai sebaran lokasi pixel yang berbeda (pola-tekstur). Perhitungan GLCMmenggunakan sudut 0o dan jarak 1 yaitu P (1,0)

    gra

    y

    M1 M2 M30 1 2 3 0 0 0 0 0 3 1 30 1 2 3 3 3 3 3 0 2 0 10 1 2 3 2 2 2 2 3 1 0 30 1 2 3 1 1 1 1 1 2 2 2

    glc

    m

    0 4 0 0 6 0 0 0 0 2 2 24 0 4 0 0 6 0 0 2 0 1 30 4 0 4 0 0 6 0 2 1 4 00 0 4 0 0 0 0 6 2 3 0 0

    glcm

    Nor

    m

    0 0.1667 0 0 0.25 0 0 0 0 0.0833 0.0833 0.08330.1667 0 0.1667 0 0 0.25 0 0 0.0833 0 0.0417 0.1250

    0 0.1667 0 0.1667 0 0 0.25 0 0.0833 0.0417 0.1667 0

    0 0 0.1667 0 0 0 0 0.25 0.0833 0.1250 0 0

    Hasil:Fitur M1 M2 M3Energy 0.166 0.25 0.104 M2 mempunyai keseragaman paling

    tinggi bila diukur dari sudut 0oEntropy 1.791 1.386 2.325 M3 mempunyai ketidakseragaman

    paling tinggi hal ini menandakan entropymempunyai hubungan terbalik secarakuat dengan hasil energy

    Dissimiliarity 1 0 1.583 M3 bernilai paling tinggi karena palingacak

    Contrast 1 0 3.416 M2 mempunyai nilai pixel ketetangganyang sama (bila diukur dari sudut 0o)sehingga bernilai 0

    Correlation 0.45 1 -0.466 M2 mempunyai linearitas paling tinggiHomogeneity 0.5 1 0.391 M2 mempunyai nilai yang seragam yaitu

    bernilai 1

  • 65

    Autocorrelation 6.6 7.5 5.5 M2 mempunyai nilai paling tinggi padadiagonal utamanya

    Optimasi:Faktor yang mempengaruhi hasil perhitungan GLCM adalah sudut yangdigunakan. Maka beberapa referensi telah mengoptimasi agar hasil perhitungantidak rancu yaitu menggunakan semua sudut sebagai perhitungan fitur tekstur.Berikut adalah hasil optimasi tersebut yang dapat memberikan gambaranmenyeluruh bahwa ada perbedaan hasil untuk M1 dan M2 tapi untuk M3 tidakberubah sedikitpun yaitu jikalau hasil nya paling tinggi ataupun paling rendahFitur M1 M2 M3Energy 0.105 0.105 0.069 M1 dan M2 mempunyai keseragaman

    paling tinggi bila diukur dari berbagaiarah

    Entropy 2.274 2.274 2.689 M3 mempunyai ketidakseragamanpaling tinggi. Sedangkan M1 dan M2bernilai sama

    Dissimiliarity 0.71 1.19 1.5 M3 bernilai paling tinggi karena palingacak

    Contrast 0.71 2.619 3.11 M1 mempunyai nilai pixel ketetangganyang sama (paling tinggi) dibandingkandengan M2 dan M3

    Correlation 0.647 -0.0973 -0.259 M1 mempunyai linearitas paling tinggiHomogeneity 0.642 0.5476 0.411 M1 mempunyai nilai yang seragam

    kemudian disusul M2 dan M3Autocorrelation 6.904 7.38 5.4047 M2 mempunyai nilai paling tinggi pada

    diagonal utamanya

    Seperti terlihat pada plot grafik dibawah ini, bahwa untuk M3 hasilnya adalahstabil yaitu bernilai paling rendah ataupun paling tinggi.

    Kesimpulan:Penentuan sudut sangat mempengaruhi karena merupakan sudut pandangterhadap suatu citra maka sebaiknya menggunakan aturan berikutJenis sudut kondisiArah sudut tertentu Mensyaratkan hasil capture citra dalam kondisi arah

    tertentuSemua arah Tidak mensyaratkan pada arah tertentu (free angle)

    Bukan format Gray:GLCM bekerja dengan memandang sebuah citra dalam format gray apabila bekerjadengan format RGB maka perlu adanya konversi yaitu.

  • 66

    Atau

    Penulis menyarankan untuk menggunakan persamaan no 2 dikarenakan matamanusia lebih peka terhadap warna hijau sehingga penekanan dilakukan padawarna hijau.

    Perhitungan GLCM dan Feature:Penulis telah menulis source code untuk melakukan perhitungan GLCM danFeature yaitu di package Ext. Berikut penulis telah membuat Project dengan 2versi yaitu berbentuk

    Versi console (nama project - Demo.Bab5.GLCMConsole)Terdiri dari contoh yaitu

    a. Matrix input yang digunakan0 3 1 30 2 0 13 1 0 31 2 2 2

    Hasil perhitungan matrix GLCM dan Feature sebagai berikut1. Matrix GLCM

    0 2 2 22 0 1 32 1 4 02 3 0 0

    2. Matrix GLCM-Normalisasi

    0 0.0833 0.0833 0.08330.0833 0 0.0417 0.1250.0833 0.0417 0.1667 00.0833 0.125 0 0

    3. FiturEnergy 0.104166666666667Entropy 2.32577810771429contrast 3.41666666666667Correlation -0.466467958271237Homogen 0.391666666666667Dissimiliarity 1.58333333333333Autocorrelation 5.5

  • 67

    b. Sampel citra yang digunakan

    gradient.bmp siluet.bmp acak.bmp

    Maka hasil nya sebagai berikutgradient siluet acak

    energy 0.00395232602845061 0.00686034145023157 0.00040826410627664entropy 5.53582709668341 8.54614567695219 9.11881719904337contrast 0 1997.10302087597 4764.90311986861Correlation 1 0.583729759907239 0.000885246129725912Homogen 0.999999999999997 0.202403069470656 0.040246187392743Dissimiliarity 0 26.4556365124848 55.4604926108371Autocorrelation 21547.6705882353 5966.94012279981 4562.05921182268

    Source code Demo.Bab5.GLCMConsole1 using System;2 using System.Drawing;3 using System.Diagnostics;4 using System.Drawing.Imaging;5 using AForge.Imaging;6 using AForge;7 using Ext;8 using Ext.Utility;91011 namespace Demo.Bab5.GLCMConsole12 {1314 class Program15 {1617 public static void Main(string[] args)18 {1920 Console.CursorVisible=true;21 Program program=new Program();22 program.CalculateMatirxGLCMCitra("D:/Sample Citra/gradient.bmp");23 program.CalculateMatirxGLCMCitra("D:/Sample Citra/siluet.bmp");24 program.CalculateMatirxGLCMCitra("D:/Sample Citra/acak.bmp");25 //program.CalculateMatrixGLCM();2627 Console.ReadKey();28 }29 public void CalculateMatrixGLCM()

  • 68

    30 {31 int [,]M = new int[,]{32 {0, 3, 1, 3},33 {0, 2, 0, 1},34 {3, 1, 0, 3},35 {1, 2, 2, 2}};36 Console.WriteLine("Matrix Input");37 Ext.Utility.Prt.Print(M);38 Console.WriteLine();39 Ext.GLCM glcm = new Ext.GLCM(); //class GLCM40 int nilaiMaksimal = 3;//intensitas maksimal41 glcm.Process(M,Ext.GLCM.SUDUT_0,nilaiMaksimal);//proses42 double [,]H = glcm.H;43 double [,]T = glcm.T;//nilai matrix GLCM ternormalisasi44 Console.WriteLine("Matrix GLCM");45 Ext.Utility.Prt.Print(H);46 Console.WriteLine("\nMatrix GLCM-Normalisasi");47 Ext.Utility.Prt.Print(T);4849 Ext.Feature feature = new Ext.Feature(); //class feature50 feature.Process(T); //proses51 Console.WriteLine("\n Fitur");52 Console.WriteLine("energy "+feature.Energy);53 Console.WriteLine("entropy "+feature.Entropy);54 Console.WriteLine("contrast "+feature.Contrast);55 Console.WriteLine("Correlation "+feature.Correlation);56 Console.WriteLine("Homogen "+feature.Homogen);57 Console.WriteLine("Dissimiliarity "+feature.Dissimilarity);58 Console.WriteLine("Autocorrelation "+feature.Autocorrelation);59 Console.WriteLine();60 //Debug61 Debug.WriteLine("Matrix GLCM");62 Ext.Utility.Prt.Debug(H);63 Debug.WriteLine("\nMatrix GLCM-Normalisasi");64 Ext.Utility.Prt.Debug(T);65 Debug.WriteLine("\n Fitur");66 Debug.WriteLine("energy "+feature.Energy);67 Debug.WriteLine("entropy "+feature.Entropy);68 Debug.WriteLine("contrast "+feature.Contrast);69 Debug.WriteLine("Correlation "+feature.Correlation);70 Debug.WriteLine("Homogen "+feature.Homogen);71 Debug.WriteLine("Dissimiliarity "+feature.Dissimilarity);72 Debug.WriteLine("Autocorrelation "+feature.Autocorrelation);73 Debug.WriteLine("");7475 }76 public void CalculateMatirxGLCMCitra(String lokasiCitra)77 {78 Console.WriteLine("Perhitungan Feature - GLCM "+lokasiCitra+"\n");79 //read file80 Bitmap citraOri = (Bitmap)Bitmap.FromFile(lokasiCitra);81 // jeda 3 detik82 int jeda=1000;8384 //ubah kedalam format grayscale bila truecolor85 if(citraOri.PixelFormat != PixelFormat.Format8bppIndexed)86 {87 //ubah ke gray88 citraOri = AForge.Imaging.

  • 69

    89 Filters.90 Grayscale.91 CommonAlgorithms.92 RMY.Apply(citraOri);9394 }95 //tampilkan96 new Ext.Utility.ShowImage().97 InitShow(98 new MyDataBitmap(lokasiCitra,citraOri,jeda)99 );100 //baca pixel citra101 Ext.ReadImage read= new Ext.ReadImage(citraOri);102 Ext.GLCM glcm=new Ext.GLCM(); //class GLCM103 //intensitas maksimal104 int nilaiMaksimal=255;105 //proses106 glcm.Process(read.Gray,Ext.GLCM.SUDUT_90,nilaiMaksimal);107 double [,]T=glcm.T;//nilai matrix GLCM ternormalisasi108 Ext.Feature feature=new Ext.Feature(); //class feature109 feature.Process(T); //proses110 Console.WriteLine("energy "+feature.Energy);111 Console.WriteLine("entropy "+feature.Entropy);112 Console.WriteLine("contrast "+feature.Contrast);113 Console.WriteLine("Correlation "+feature.Correlation);114 Console.WriteLine("Homogen "+feature.Homogen);115 Console.WriteLine("Dissimiliarity "+feature.Dissimilarity);116 Console.WriteLine("Autocorrelation "+feature.Autocorrelation);117 Console.WriteLine();118 //Debug119 Debug.WriteLine("\n Fitur");120 Debug.WriteLine("energy, "+feature.Energy);121 Debug.WriteLine("entropy, "+feature.Entropy);122 Debug.WriteLine("contrast, "+feature.Contrast);123 Debug.WriteLine("Correlation, "+feature.Correlation);124 Debug.WriteLine("Homogen, "+feature.Homogen);125 Debug.WriteLine("Dissimiliarity, "+feature.Dissimilarity);126 Debug.WriteLine("Autocorrelation, "+feature.Autocorrelation);127 Debug.WriteLine("");128 }129 }130 }

  • 70

    Versi GUI (nama project - Demo.Bab5GLCMGUI)menggunakan FORM serta library ZedGraph sebagai penampil grafiknya.

  • 71

  • 72

    PCA (PRINCIPAL COMPONENT ANALYST)

    Apakah pernah melihat film yang bercerita tentang betapa mudahnya sebuahkomputer melakukan pelacakan sebuah wajah seseorang seketika dari ribuandatabase wajah. Salah satu teknologi olah citra dalam biometrika adalah pengenalwajah atau yang lebih dikenal dengan face recognition (berbeda dengan facedetection - bila anda penggunan facebook akan ditemui pada fitur tag foto).Teknologi face recognition berkembang begitu cepat seiring denganberkembangnya teknologi komputasi dari sisi hardware nya. Secara garis besarteknologi face recognition dapat dibedakan dalam 2 hal yaitu berbasis tektur danberbasis geometri (mengukur jarak bagian wajah seperti hidung, mata, mulut,dahi).Apa hubungan PCA dengan face recognition? Hubungannya pada teknologi yangakan dipakai dalam face recognition dengan basis analisis tekstur. Citra wajah 2Dsangat sulit dikenali / dihitung oleh sebuah komputer sehingga kita perlumembantu nya dengan teknik reduksi dimensi. Teknik reduksi dimensi yaituAnalisis Komponen Utama atau Principal Component Analyst (PCA)adalah teknikuntuk melakukan reduksi suatu dimensi dalam ruang berdimensi .

    Perhitungan PCAAlgoritma PCA sebagai salah satu teknik dalam face recognition dapat dibagikedalam 2 bagian yaitu proses training dan proses testing.TrainingBerikut adalah langkah-langkah dalam melakukan proses training yang terdiri dari7 langkah.

    1. Pembuatan T matrix citraPembuatan database yaitu menyusun suatu matrix yang terdiri dari(M*N)*Jumlah_Sampel. Misalkan ada 5 sampel yaitu 2 baris * 3 kolom * 5sampel yang akan disusun menjadi T matrix (6*5)

  • 73

    Matrix T_trainingSampel 1 Sampel 2 Sampel 3 Sampel 4 Sampel 5

    1 3 4 4 5 3 66 7 8 2 1 6 2

    Menyusun T matrix yaitu mengubah tiap matrix sampel menjadi vector,seperti berikut

    Matrix T_Training

    Sam

    pel

    1

    Sam

    pel

    2

    Sam

    pel

    3

    Sam

    pel

    4

    Sam

    pel

    5

    1 93 94 66 57 48 6 1 1 8

    2. Menghitung matrix mean =

    trai

    nin

    g1

    trai

    nin

    g2

    trai

    nin

    g3

    trai

    nin

    g4

    trai

    nin

    g5

    Mea

    n(m

    )

    1346 2 2 1 5 3.27 1 4 1 4 3.48 6 1 1 8 4.8

    Matrix mean

    5.65.64

    3.23.44.8

    3. Menghitung matrix normalisasi A =matrix normalisasi A

    -4.6 -1.6 0.4 2.4 3.4-2.6 -0.6 1.4

    0 -1 02.8 -1.2 -1.23.6 -2.4 0.63.2 1.2 -3.8

    Form ini Sengaja Tidakditampilkan

    Sebagai

    Review Version

    Silahkan untuk membeli edisi

    Full version

    http://softscients.blogspot.com

    [email protected]

  • 74

    4. Menghitung matrix kovarian L = AT * A

    matrix kovarian L58.96 0.76 -18.84 -33.84 -7.040.76 12.56 -6.04 1.96 -9.24

    -18.84 -6.04 18.36 14.36 -7.84-33.84 1.96 14.36 34.36 -16.84-7.04 -9.24 -7.84 -16.84 40.96

    Dengan AT adalah matrix tranpose dari A5. Perhitungan eigen vector dan eigen value dari matrix L

    Misalkan sebuah matrix bujur sangkar dengan order n x n yaitu L, dansebuah vector kolom X dalam ruang Eucledian Rn yang dihubungkandengan persamaan

    LX =X

    Dengan adalah suatu skalar dan X adalah vector 0 maka dinamakandengan eigen value dari matrix L. Eigen value merupakan nilai karakteristikdari matrix bujur sangkar dan matrix X dinamanakan dengan eigen vectoryang berkorespondensi dengan eigenvalue . Untuk menghitung eigen vectordan eigen value dapat menggunakan class EigenvalueDecomposition padapackage Accord.Math.Decompositions dengan properties Eigenvectorssebagai eigen vector dan DiagonalMatrix sebagai eigen value

    Eigen value =Matrix eigen value X (unsort)

    0-E13 0 0 0 00 5.4135 0 0 00 0 17.2862 0 00 0 0 51.2184 00 0 0 0 91.282A B C D E

    Eigen vector = XMatrix eigen vector V (unsort)

    -0.4472 0.2487 -0.2202 0.3592 0.7488-0.4472 -0.4925 0.7141 0.2178 0.0020-0.4472 -0.5155 -0.6543 0.0646 -0.3193-0.4472 0.6458 0.0957 0.2331 -0.5652-0.4472 0.1135 0.0647 -0.8747 0.1338

    A B C D E

    Misalkan untuk kolom ke 1a = L*X(1)

    58.96 0.76 -18.84 -33.84 -7.04

    *

    -0.4472

    =

    2.6645e-015*0.76 12.56 -6.04 1.96 -9.24 -0.4472 0

    -18.84 -6.04 18.36 14.36 -7.84 -0.4472 0-33.84 1.96 14.36 34.36 -16.84 -0.4472 2.6645e-015*-7.04 -9.24 -7.84 -16.84 40.96 -0.4472 -3.5527e-015*

    *keterangan: karena nilai sangat kecil maka dianggap = 0

    Form ini Sengaja Tidak ditampilkan

    Sebagai

    Review Version

    Silahkan untuk membeli edisi

    Full version

    http://softscients.blogspot.com

    [email protected]

  • 75

    b =(1,1)*X

    0-E13 *

    -0.4472 0.2487 -0.2202 0.3592 0.7488

    =

    0-0.4472 -0.4925 0.7141 0.2178 0.0020 0-0.4472 -0.5155 -0.6543 0.0646 -0.3193 0-0.4472 0.6458 0.0957 0.2331 -0.5652 0-0.4472 0.1135 0.0647 -0.8747 0.1338 0

    Untuk kolom ke 2a = L*X(2)

    58.96 0.76 -18.84 -33.84 -7.04

    *

    0.2487

    =

    1.34820.76 12.56 -6.04 1.96 -9.24 -0.4925 -2.6661

    -18.84 -6.04 18.36 14.36 -7.84 -0.5155 -2.7915-33.84 1.96 14.36 34.36 -16.84 0.6458 3.4945-7.04 -9.24 -7.84 -16.84 40.96 0.1135 0.6151

    b =(2,2)*X5.4135

    *

    -0.4472 0.2487 -0.2202 0.3592 0.7488

    =

    1.3463-0.4472 -0.4925 0.7141 0.2178 0.0020 -2.6661-0.4472 -0.5155 -0.6543 0.0646 -0.3193 -2.7907-0.4472 0.6458 0.0957 0.2331 -0.5652 3.4960-0.4472 0.1135 0.0647 -0.8747 0.1338 0.6144

    Terlihat bahwa untuk hasil a dan b pada kolom 1,2 dan seterusnyamemenuhi persamaan

    LX =X

    6. Urutkan eigen vector berdasarkan eigen value nya dari nilai terbesarsampai terkecilEigen value = X

    Matrix eigen value X (sort)0 0 0 0 0-E130 0 0 5.4135 00 0 17.2862 0 00 51.2184 0 0 0

    91.282 0 0 0 0E D C B A

    Eigen vector = VMatrix eigen vector V (sort)

    0.7488 0.3592 -0.2202 0.2487 -0.44720.0020 0.2178 0.7141 -0.4925 -0.4472

    -0.3193 0.0646 -0.6543 -0.5155 -0.4472-0.5652 0.2331 0.0957 0.6458 -0.44720.1338 -0.8747 0.0647 0.1135 -0.4472

    E D C B A

    Form ini Sengaja Tidak ditampilkan

    Sebagai

    Review Version

    Silahkan untuk membeli edisi

    Full version

    http://softscients.blogspot.com

    [email protected]

  • 76

    7. Perhitungan (ruang wajah) matrix eigen face = A * Eigen vectormatrix eigen face

    -4.4769 -4.3894 0.0581 1.3736 0E-12-1.0358 -4.3209 -0.7054 -1.7201 0E-120.8308 -2.2003 -0.6806 0.0737 0E-123.9617 -1.4204 -0.7825 0.6893 0E-123.9361 -0.2753 -3.0902 0.2861 0E-126.1877 -2.5192 2.482 0.0727 0E-12

    setelah melakukan proses training, maka langkah selanjutnya melakukan prosestesting.

    TestingProses testing yaitu melakukan test terhadap input matrix yang akan dihitungjarak eucledian terhadap matrix yang ada dalam matrix training. Terdapat 5langkah untuk melakukan testing. Berikut kita mempunyai sebuah matrix testingyaitu

    Matrix T_Testing3 5 32 1 8

    Selanjut untuk dilakukan transformasi kedalam bentuk seperti berikutMatrix T_Testing

    353218

    Matrix T_Testing diatas akan dihitung jarak eucledian menggunakan langkahberikut

    1. Menghitung projectedImages(n) = egienface T * A(n)Matrix eigenface T

    -4.4769 0.8308 3.9617 3.9361 6.1877-4.3894 -2.2003 -1.4204 -0.2753 -2.51920.0581 -0.6806 -0.7825 -3.0902 2.48201.3736 0.0737 0.6893 0.2861 0.07270E-12 0E-12 0E-12 0E-12 0E-12

    Matrix An = 1 n = 2 n = 3 n = 4 n = 5-4.6 -1.6 0.4 2.4 3.4-2.6

    02.83.63.2

    Form ini Sengaja Tidak ditampilkan

    Sebagai

    Review Version

    Silahkan untuk membeli edisi

    Full version

    http://softscients.blogspot.com

    [email protected]

  • 77

    Maka untuk projectedImages(1) = eigenface T * A(1) akan menghasilkan

    Selanjutnya untuk projectedImages(n = 1 N) = eigenface T * A(n=1N)yaitu

    2. Perhitungan delta = T_Testing - mean

    T_Sample

    -

    mean

    =

    delta3 5.6 -2.60005 5.6 -0.60003 4 -1.00002 3.2 -1.20001 3.4 -2.40008 4.8 3.2000

    3. Menghitung projectedTestImages = eigenface T * delta

    projectedTestImages17.030610.509017.2507-3.8942

    04. Menghitung jarak euclid(n) = {projectedTestImages, projectedImages (n)}.

    Misalkan untuk projectedImages (n = 1),projectedTestImages projectedImages( n = 1) Jarak euclid (n = 1)17.0306

    10.509017.2507-3.8942 1.3463

    0 0E-12Selanjut nya untuk n = 1 N, maka

    Jarak euclid (n = 1) Keterangann = 1 56.743n = 2 17.607 Nilai terkeciln = 3 54.783

    projectedImages (n = 1)68.350218.3959-3.80651.3463

    0

    Matrix projectedImages(n)n = 1 n = 2 n = 3 n = 4 n = 5

    68.350218.3959-3.80651.34630E-12

    Form ini Sengaja Tidak ditampilkan

    Sebagai

    Review Version

    Silahkan untuk membeli edisi

    Full version

    http://softscients.blogspot.com

    [email protected]

  • 78

    n = 4 70.776n = 5 57.99

    5. Jarak terkecil yaitu pada n = 2, sehingga untuk T_Testing mirip denganmatrix T_Training no 2

    T_Sample

    Miripdengan

    T_Training no 23 45 53 32 21 18 6

    Implementasi PCA untuk Face RecognitionPenulis telah menulis source code untuk melakukan perhitungan PCA yaitu dipackage Ext sedangkan untuk operasi perhitungan matrix menggunakan libraryAccord. Berikut penulis telah membuat Project dengan 2 versi yaitu berbentuk.

    Versi Console (nama project - Demo.Bab6.PCAConsole)Dibagi menj