Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

buku cara cepat pengolahan citra dengan c# sharp

8,327 views

Published on

buku cara cepat pengolahan citra dengan c# sharp

Published in: Engineering
  • Be the first to comment

buku cara cepat pengolahan citra dengan c# sharp

  1. 1. i http://softscients.blogspot.cohttp://softscients.blogspot.co
  2. 2. ii Kata Pengantar Olah citra merupakan topik riset tidak pernah sepi peminatnya. Beragam teknologi dikembangkan baik dari sisi hardware maupun software, tentunya dari segi software pengembangkan lebih diarahkan kedalam metode yang digunakan (algoritma). Implementasi dari olah citra dalam dunia industri telah banyak digunakan yaitu face detection, face recognition, GIS, pengendalian mutu, dan bahkan untuk dunia HAKI seperti watermarking, kriptografi Rangkuman tulisan kecil ini merupakan buah karya kedua dari penulis yang telah menggeluti bidang olah citra selama beberapa tahun belakangan ini. Pengalaman best practice dituangkan kedalam beberapa demo project dalam 2 versi (console dan 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 citra serta topik yang digunakan. Tools merupakan wadah pengujian dari algoritma maka dari itu, tools tersebut harus mampu mengakomodasi kebutuhan. Banyak tools dikembangkan yaitu Matlab, Scilab, Octave merupakan tools yang siap digunakan, akan tetapi penulis tetap memilih tools lainnya yaitu C# dengan IDE Sharp Develop v.4 dikarenakan free, applicable, extendsible, dan dukungan pustaka seperti AForge.net, Accord.Net yang opensource dan free walaupun ada banyak tools seperti Java dengan ImageJ, C / C++ dengan OpenCV nya (native) ataupun .Net. Maka tujuan dari tulisan kecil tidak saja dapat digunakan dalam skala lab akan tetapi harus juga bersifat applicable. Buku ini menekankan learning by doing sehingga pembaca dituntut telah memahami konsep-konsep OOP (object oriented programming), event-driven dan studi kasus yang disajikan dalam project demo yang mudah dipahami karena dilengkapi dengan comment yang mendukung, serta penulis telah menyediakan pustaka (opensource) dukungan yang akan mempermudah dalam proses pengembangannya. Beberapa topik buku ini yaitu Konsep Olah Citra : mengenal dasar olah citra secara 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 olah citra 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 dengan metode gray level co-occurance sebagai metode standar dalam analisis tekstur, PCA (Principal Component Analyst): mengenal face recognition dengan metode PCA dan konsep serialisasi data biner, Interfacing Webcam: melakukan koneksi (interfacing) menggunakan webcam baik single maupun multiple connection http://softscients.blogspot.cohttp://softscients.blogspot.co
  3. 3. iii Yogyakarta, Januari 2012 Mulkan Syarif http://softscients.blogspot.cohttp://softscients.blogspot.co
  4. 4. iv DAFTAR ISI Kata Pengantar ..................................................................................ii Daftar Isi............................................................................................iv Bab I Olah Citra..................................................................................1 Konsep Olah Citra Digital............................................................... 1 Sekilas tentang .Net ....................................................................... 3 Tools .............................................................................................. 4 Bab II Ide Sharp Develop ....................................................................6 apa itu IDE..................................................................................... 6 Solution.......................................................................................... 7 Library ........................................................................................... 8 Component..................................................................................... 10 Membuat Solution ......................................................................... 12 Bab III Framework AForge.Net- Accord.Net.........................................14 Modul AForge dan Accord............................................................... 15 Install Framework ......................................................................... 15 Bab IV Operasi Dasar Olah Citra .........................................................30 Konvolusi ....................................................................................... 30 Thresholding.................................................................................. 40 Morphologi ..................................................................................... 45 Operasi Blob................................................................................... 50 Bab V Analisis Tekstur .......................................................................59 GLCM sebagai salah satu metode analisis tekstur.......................... 60 Perhitungan GLCM......................................................................... 61 Perhitungan 7 fitur utama.............................................................. 62 Bab VI PCA (Principal Component Analyst) .........................................72 Perhitungan PCA............................................................................ 72 Implementasi PCA untuk Face Recognition .................................... 78 Bab VII Interfacing Webcam ...............................................................88 Single Webcam............................................................................... 89 Filtering Secara Realtime................................................................ 91 Multiple Interfacing........................................................................ 91 Lampiran............................................................................................92 Daftar Pustaka ...................................................................................93 Tentang Penulis .................................................................................94 http://softscients.blogspot.cohttp://softscients.blogspot.co
  5. 5. v Penjelasan Singkat Mengenai Cd Dan Jenis Materi CD berisi aplikasi, library, dan project Olah Citra dengan C# menggunakan Framework AForge & Accord: 1. Folder Aplikasi a. AForge.NET Framework-2.1.5.exe b. Accord.NET Framework-2.6.1.exe c. Ice-3.4.2.msi d. Lib - Ice.dll e. MonoDevelop-2.6.msi f. SharpDevelop_2.2.1.2648_Setup.msi g. SharpDevelop_3.2.0.5777_Setup.msi h. SharpDevelop_3.2.1.6466_Setup.msi i. SharpDevelop_4.1.0.8000_Setup.msi j. dotNetFx40_Full_x86.exe k. dotNetFx40_Full_x86_ia64.exe l. dotNetFx40_Full_x86_x64.exe m. gtk-sharp-2.12.10.win32.msi 2. Folder Library a. AForge.NET b. Accord.NET c. ZedGraph 3. Folder Project a. Demo.Bab2Console b. Demo.Bab2GUI c. Demo.Bab3Console d. Demo.Bab4Blob e. Demo.Bab4Convolution f. Demo.Bab4Edge g. Demo.Bab4Morpho h. Demo.Bab4Threshold i. Demo.Bab5.GLCMConsole j. Demo.Bab5.GLCMGUI k. Demo.Bab6.PCAConsole l. Demo.Bab6.PCAGUI m. Demo.Bab7 n. Demo.Bab7.RealtimeFilter o. Ext p. ImageViewer http://softscients.blogspot.cohttp://softscients.blogspot.co
  6. 6. vi Konsep Olah Citra IDE Sharp Develop 4.1 http://softscients.blogspot.cohttp://softscients.blogspot.co
  7. 7. vii Framework AForge.Net- Accord.Net Operasi Dasar Olah Citra http://softscients.blogspot.cohttp://softscients.blogspot.co
  8. 8. viii Analisis Tekstur PCA (Principal Component Analyst) http://softscients.blogspot.cohttp://softscients.blogspot.co
  9. 9. ix Interfacing Webcam http://softscients.blogspot.cohttp://softscients.blogspot.co
  10. 10. 1 OLAH CITRA Konsep Olah Citra Digital Olah citra (image processing) sebagai dasar dalam computer vision merupakan bidang yang telah banyak diterapkan dalam dunia industri misalnya pada sistem biometrik, recognition, detection, kendali gesture gerak tangan, optical character recognition (pengenal tulisan baik tangan atau cetakan dari printer), optical mark recognition (scan lembar jawab komputer) sehingga dengan kemajuan teknologi computer vision dapat mempermudah dan memperakurat pemrosesan data citra digital. 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, y disebut sebagai intensitas / kedalaman warna. Misalkan kedalaman aras keabuan dinyatakan dengan satuan nilai bit yaitu 1byte (1byte=28)-1 = 255 kombinasi warna hitam sampai putih yang berpengaruh terhadap kedalaman warna. http://softscients.blogspot.cohttp://softscients.blogspot.co
  11. 11. 2 Tingkat kerapatan seringkali disebut resolusi dengan satuan dpi (dot per inchi) yang berpengaruh terhadap kehalusan (ketajaman) citra. Ilustrasi dibawah menunjukan ukuran 6 dpi Jenis citra / format citra berdasarkan nilai pixelnya dapat dibagi menjadi 3 yaitu 1. Citra biner : terdiri dari MxN matrix bernilai 1 dan 0 yaitu putih dan hitam yang digunakan untuk operasi morphologi sehingga untuk bisa ditampilkan kedalam citra yang sesungguhnya maka dilakukan konversi yaitu jika 1 maka 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) matrix bernilai 0 sampai 255 Jenis format file citra dapat dibagi menjadi 2 yaitu 1. Tanpa kompresi yaitu bmp 2. Kompresi yaitu jpeg, jpg, png Jenis penyajian ruang warna yaitu 1. RGB yaitu format penyajian warna menggunakan kombinasi warna red, green, dan blue 2. HSV yaitu dibentuk dalam 3 komponen hue (menunjukan warna merah, biru, dan kuning), saturation (menunjukan tingkat kemurnian warna), dan value (intensitas atau ukuran kecerahan dari suatu warna) http://softscients.blogspot.cohttp://softscients.blogspot.co
  12. 12. 3 Sekilas tentang .Net Berbicara tentang bahasa C# maka tidak terlepas dari .Net. Source code yang dibuat menggunakan platform .Net akan dikompilasi kedalam MSIL (microsoft intermediate languange) atau juga disebut sebagai Intermediate Languange (IL) atau Common Intermediate Language (CIL). MSIL sendiri merupakan suatu set instruksi CPU yang bersifat independent OS yang dapat dikonversikan kedalam kode mesin, selain itu metadata juga diciptakan dalam proses kompilasi bersamaan dengan proses kompilasi MSIL dan disimpan dengan kode dikompilasi. Metadata disimpan dalam sebuah file yang bernama Manifest, dan berisi informasi tentang anggota, jenis, referensi dan semua data lainnya yang dibutuhkan Common Language Runtime (CLR) untuk eksekusi. CLR menggunakan metadata untuk menemukan dan mengambil class, menghasilkan kode asli, memberikan keamanan, eksekusi manage code. Baik MSIL dan metadata berkumpul bersama-sama dikenal sebagai Portable Executable (PE) file. Runtime (CLR) pada Just In Time (JIT) compiler mengubah MSIL ke dalam Kode Mesin Sistem Operasi yang bersifat independent dan kode ini dikenal sebagai Managed Code, yang dapat berjalan diatas .NET Framework. .Net yang dikenalkan oleh pihak Microsoft sebagai perangkat lunak kerangka kerja yang mendukung kebutuhan program pada bidang user interface (GDI+), pengaksesan data, koneksi basis data, kriptografi, pembuatan aplikasi berbasis web, algoritma numerik, dan komunikasi jaringan. GDI+ (graphics device interface plus) merupakan library untuk pengembangan aplikasi berbasis GUI dan pemrosesan berbasis gambar (citra). Library GDI+ secara default sudah terinstal pada sistem operasi berbasis windows yaitu XP, Vista, dan Windows 2003 dengan nama Gdiplus.dll dan GDIPlusImage.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. http://softscients.blogspot.cohttp://softscients.blogspot.co
  13. 13. 4 Namespace 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) kombinasi warna, sehingga kombinasi tiga komponen RGB tersebut mempunyai kombinasi warna 255x255x255. Alpha komponen mewakili aspek transparan dari warna yang akan 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 Tools Tentunya berbicara tentang olah citra digital diperlukan tools (perkakas). Tools dalam arti luas bukan saja tentang bahasa tapi juga IDE (Integrated Development Environment), SDK (Standard Development Kit), dan framework. Banyak tools pengembangan yang digunakan dalam olah citra yaitu Matlab, Scilab, Octave, Lab View (komputasi teknis) ataupun menggunakan bahasa program yang bersifat umum seperti C/C++ (openCV, CImage), java (ImageJ, Maven Framework), C# dengan AForge.Net dan Accord.Net tentunya dalam menggunakan sebuah tools dipengaruhi oleh kasus dan tujuan dari pengembangan serta implementasi dari http://softscients.blogspot.cohttp://softscients.blogspot.co
  14. 14. 5 aplikasi misalkan untuk embedded system, pengembangan prototype algoritma ataupun aplikasi akan berbeda dikarenakan tools tertentu akan lebih cepat atau mudah bila digunakan dalam pengembangan prototype tapi akan sulit untuk diimplementasikan (terlalu mahal) kedalam embedded system. Bahasa C# adalah salah satu tools yang mumpuni karena dukungan library yang lengkap serta beragam framework yang berkaitan sudah banyak dikembangkan salah satunya yaitu framework AForge.net, Accord.net serta IDE yang banyak digunakan yaitu Sharp Develop. Berikut daftar tools yang digunakan dalam buku ini a. .Net sebagai framework aplikasi b. IDE Sharp Develop sebagai lingkungan pengembangan c. AForge dan Accord sebagai framework core olah citra d. Zedgraph sebagai component chart http://softscients.blogspot.cohttp://softscients.blogspot.co
  15. 15. 6 IDE SHARP DEVELOP Apa itu IDE? Bagi para developer melakukan penulisan source code dan sekaligus melakukan testing 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 hanya menggunakan Sharp Develop versi 4.1.0. Sharp Develop adalah salah satu IDE yang dapat berjalan baik di windows (untuk di linux saat ini belum didukung, bila anda menggunakan linux sebagai OS nya, lebih baik menggunakan Mono Develop dan Gtk#). Saat ini Sharp Develop telah mendukung implementasi dari Net 4.0. Walaupun tidak sepenuhnya mendukung aplikasi berbasis web tentunya untuk membuat aplikasi berbasis GUI dan console sudah sangat baik sekali. Sebelum melakukan install Sharp Develop, diharuskan install .Net 4.0 atau .Net 3.5 tergantung versi dari Sharp Develop yang anda gunakan. Sharp Develop menawarkan 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 banyak programmer dengan penguasaan bahasa masing-masing misalkan visual basic, C++, C# yang menggunakan .Net platform sebagai lingkungan pengembangan aplikasi, maka ketiga bahasa tersebut dapat saling diintegrasikan. Semua aplikasi yang dibangun diatas platform .Net akan membutuhkan .Net Framework sehingga client yang akan menjalankan aplikasinya harus meng install terlebih dahulu .Net Framework di komputernya. Didalam CD disertakan .Net berbagai versi bit (silahkan untuk di install) dan juga Sharp Develop yang akan kita gunakan yaitu versi 4.1 yang membutuhkan .Net 4.0 bila di komputer belum install .Net 4.0 akan http://softscients.blogspot.cohttp://softscients.blogspot.co
  16. 16. 7 muncul peringatan harus melakukan install .Net 4.0, tapi jika anda ingin menginstall dengan versi terbaru silahkan untuk donwload .Net di www.microsoft.com/net/download. dan Sharp Develop di http://www.icsharpcode.net/opensource/sd/download/. Bila anda telah menggunakan IDE seperti Microsoft Visual Studio maka tidak akan asing dengan Sharp Develop dikarenakan hampir mirip dengan IDE besutan Microsoft. Selain useriterface yang mirip dengan Microsoft Visual Studio juga saling compatible sehingga bila anda ingin suatu saat melanjutkan project menggunakan Microsoft Visual Studio maka tidak ada masalah. Solution Solution yang dimaksud disini adalah suatu set project termasuk configuration, source code, icon, dan library yang digunakan. Pengembangan Solution dapat berupa Console Application, Windows Form, ataupun Library. Penamaan Solution sebaiknya menggunakan aturan huruf depan kapital dan tidak menggunakan space (diganti dengan tanda titik) misalkan seperti berikut Project.Windows.Bab1 berikut adalah ilustrasi bagian dari sebuah Solution yang terdiri dari a. References : berisi library yang digunakan b. Properties : berisi info dan setting application c. *.cs : berisi source code program http://softscients.blogspot.cohttp://softscients.blogspot.co
  17. 17. 8 Library Library yang berekstensi .dll (dynamic link library ekstensi sama seperti .dll win32) adalah koleksi dari sekumpulan code kecil yang dapat dipanggil ketika dibutuhkan oleh program besar pada saat berjalan di komputer. Penambahan library ada 3 macam yaitu via A. Net Assembler (dll) dan COM jika hanya mempunyai code biner saja. Berikut langkah yang dilakukan yaitu 1. Klik kanan pada folder References > Add Reference 2. Pilih tab (.Net Assembly Browser atau COM) 3. Pilih Browse 4. Pilih salah satu .dll atau .com > Open 5. Secara otomatis akan tampil library pada folder References http://softscients.blogspot.cohttp://softscients.blogspot.co
  18. 18. 9 B. Project (jika anda mempunyai source code atau project yang saling terlibat). 1. Klik kanan pada Solution (nama solution) > Add > Existing Project 2. Muncul kotak dialog untuk memilih *.csproj > Open 3. Secara otomatis akan tampil project dalam satu solution 4. Untuk menambahkan library via project, maka klik kanan pada folder References > Add Reference 5. Pilih tab Projects > pilih Project Name yang akan ditambahkan > Select 6. Akan tampil dibawah Reference name yang telah dipilih > OK 7. Terlihat pada folder References akan ada tambahan library http://softscients.blogspot.cohttp://softscients.blogspot.co
  19. 19. 10 Component Selain adanya library, kita juga mengenal adanya component ketika mengembangkan aplikasi dalam mode Windows Form. Kita banyak mengenal component 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 buku ini menggunakan component tersebut untuk melakukan plot histogram. Berikut langkah-langkah dalam menambahkan component ZedGraph 1. Pilihlah tab Tools dan klik kanan New Category  Configure SideBar 2. Muncul jendela Configure Siderbar dan pilih menu New Category 3. Pilih Add Component  muncul jendela Add Components 4. Pilih tab Customs  File Names 5. Cari component ZedGraph.dll, 6. Maka component ZedGraph yaitu ZedGraphControl siap digunakan. http://softscients.blogspot.cohttp://softscients.blogspot.co
  20. 20. 11 Semua library dan component dapat digunakan dengan menambahkan keyword using seperti berikut http://softscients.blogspot.cohttp://softscients.blogspot.co
  21. 21. 12 Membuat Solution IDE Sharp Develop mendukung pengembangan 2 aplikasi yaitu console dan GUI (graphic user interface). Langkah dalam membuat solution sebagai berikut 1. Pilih menu File  New  Solution 2. 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 main method (class yang akan dipanggil secara default ketika run) yaitu dengan cara tekan F5 (run) Console Window http://softscients.blogspot.cohttp://softscients.blogspot.co
  22. 22. 13 Tampilan Console Tampilan Form http://softscients.blogspot.cohttp://softscients.blogspot.co
  23. 23. 14 FRAMEWORK AFORGE.NET- ACCORD.NET Pengembangan aplikasi yang besar biasanya terdiri dari beberapa proses yang rumit dan kompleks. Seringkali terdapat banyak algoritma dan code yang dibuat oleh pihak lain atau bahkan membuat sendiri. Tentu ada sebagian programer yang lebih menyukai untuk mengembangkan sendiri tapi hal ini akan menjadi sedikit masalah bila ada yang ingin melanjutkan project, maka programer tersebut harus mempelajari “cara kerja” code yang dibuat oleh programer sebelumnya. Hal ini dapat dipersingkat jika kita menerapkan framework atau sering disebut kerangka kerja. Misalkan bilamana ada orang yang ingin melanjutkan suatu project (telah menggunakan framework), maka orang tersebut telah paham “cara kerja” nya sehingga pekerjaan menjadi fokus. Ada anggapan bahwa terkadang membuat (menulis) code lebih mudah daripada merawat code. Framework bukan saja sebuah library (pustaka) tapi merupakan kerangka kerja menyeluruh sehingga diharapkan pengembang aplikasi yang akan menggunakannya menjadi “rapi dan seragam” walau berbeda-beda programmernya dikarenakan progammer diharuskan untuk mengikuti framework. Ada banyak framework untuk pengembangan aplikasi yang fokus terhadap pengolahan citra dan salah satu yang terkenal adalah AForge.Net dan Accord.Net. Anda dapat mendownload di http://www.aforgenet.com/ atau http://code.google.com/p/aforge. AForge http://softscients.blogspot.cohttp://softscients.blogspot.co
  24. 24. 15 didesain untuk pengembangan dan periset yang mengkhususkan diri di Computer Vision dan Artificial Intelligence sedangkan Accord merupakan extends (perluasan) dari AForge, anda dapat mengunjungi di http://code.google.com/p/accord/. Modul AForge dan Accord Fitur framework AForge 1. AForge.Imaging - library with image processing routines and filters 2. AForge.Vision - computer vision library 3. AForge.Neuro - neural networks computation library 4. AForge.Genetic - evolution programming library 5. AForge.Fuzzy - fuzzy computations library 6. AForge.MachineLearning - machine learning library 7. AForge.Robotics - library providing support of some robotics kits 8. AForge.Video - set of libraries for video processing Fitur framework Accord 1. Scientific Computing a. Accord.Math b. Accord.Statistics c. Accord.MachineLearning d. Accord.Neuro 2. Signal and Image Processing a. Accord.Imagng b. Accord.Audio c. Accord.Vision 3. Support Libraries a. Accord.Controls b. Accord.Controls.Imaging c. Accord.Controls.Audio d. Accord.Controls.Vision Install Framework Pastikan terlebih dahulu anda telah meng-install .Net 4.0 (pilih sesuai dengan dukungan bit OS) dan Sharp Develop 4.1. Silahkan untuk dibuka CD penyerta di folder Applications. Buku ini menggunakan AForge.net-2.1-5 (build version .Net 3.5) dan Accord.Net-2.6.1 (build version .Net 4.0). Silahkan untuk instal keduanya (folder install sebaiknya di C:/Program Files). http://softscients.blogspot.cohttp://softscients.blogspot.co
  25. 25. 16 Isi dari Folder Hasil Install AForge dan Accord.Net 1. Folder Docs: berisi dokumentasi class dan method dari modul 2. Folder Release: merupakan kumpulan *.dll yang siap pakai dari semua modul (telah di compilation oleh pengembang). Jika ingin langsung menggunakan library *.dll bisa langsung arahkan ke folder Release, tapi bila ingin melakukan compilation source code arahkan ke folder Sources 3. Folder Samples: berisi contoh-contoh project dan solution 4. Folder Sources: berisi source code project Image Viewer AForge telah memberikan beragam contoh project salah satunya adalah Image Viewer, kita akan mengeksplor kemampuan dari modul AForge.Imaging. Bukalah project Image Viewer yang berada di <lokasi path> AForge.NET Framework Samples Imaging ImageViewer ImageViewer.sln. Bukalah MainForm.cs pada mode Source, berikut adalah isi event Click pada Menu File > Open 1 if ( openFileDialog.ShowDialog( ) == DialogResult.OK ) 2 { 3 try 4 { 5 ImageInfo imageInfo = null; 6 7 pictureBox.Image = ImageDecoder.DecodeFromFile( 8 openFileDialog.FileName, 9 out imageInfo ); 10 propertyGrid.SelectedObject = imageInfo; 11 propertyGrid.ExpandAllGridItems( ); 12 } 13 catch ( NotSupportedException ex ) http://softscients.blogspot.cohttp://softscients.blogspot.co
  26. 26. 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 catch 29 { 30 MessageBox.Show( "Failed loading the image", 31 "Error", 32 MessageBoxButtons.OK, 33 MessageBoxIcon.Error ); 34 } 35 } Penjelasan: Line Keterangan 1 Menampilkan kotak dialog OpenFile 7 Class ImageInfo untuk menampung informasi sebuah image, Menampilkan image kedalam component PictureBox 10 - 11 Menampilkan info kedalam component PropertyGrid Penjelasan: Item Keterangan Bit per piksel 24 artinya terdiri dari 24/8 = 3 komponen warna yaitu Red, Green, Blue Width dan Height 1680x1050 satuan pixels http://softscients.blogspot.cohttp://softscients.blogspot.co
  27. 27. 18 Pengembangan program terkadang kita akan banyak sekali melakukan proses debugging untuk tracking variable ada 2 cara hal yang paling efisien yaitu 1. Mode console 2. Mode debug Mode Console Mode console yaitu menjalankan application berbasis text base, walaupun project ImageViewer dalam mode Windows application bisa kita ubah untuk dijalankan dalam mode Console Application yaitu 1. Klik kanan pada project > Properties 2. Pilih tab Application 3. Pilih Output type : Console Application Misalkan kita akan menampilkan informasi tentang resolusi image didapatkan dengan memanggil method VerticalResolution dan HorizontalResolution pada class Image. Tambahkan kode berikut (baris 5 - 10), setelah itu tekan F5 (mode debugger) 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()); http://softscients.blogspot.cohttp://softscients.blogspot.co
  28. 28. 19 11 propertyGrid.SelectedObject = imageInfo; 12 propertyGrid.ExpandAllGridItems( ); Maka akan tampil jendela console seperti berikut Mode Debug Debug berasal dari 2 kata yaitu de dan bug (kutu) yang artinya proses mencari error pada kode, hampir semua IDE mempunyai fasilitas untuk proses debugging. Debugging sangat efektif dan membantu manakala, kita telah menuliskan banyak source code dan ingin melakukan trace line by line terhadap source code meliputi return dari sebuah variabel baik type primitif ataupun object class. Kita coba memanfaatkn class ImageStatistics yang berada di modul AForge.Imaging. 1. jangan lupa untuk menambahkan pada References - lokasi AForge.Imaging.dll bisa diambil di folder Release <path>Release AForge.Imaging.dll atau di modul <path>SourcesImagingbinDebugAForge.Imaging.dll 2. menambahkan using AForge.Imaging pada header source code pada MainForm.cs http://softscients.blogspot.cohttp://softscients.blogspot.co
  29. 29. 20 Tambahkan code berikut (font tebal) 1 //menampilkan resolusi 2 Console.WriteLine("vertical "+ 3 pictureBox.Image.VerticalResolution. 4 ToString()); 5 Console.WriteLine("horisontal "+ 6 pictureBox.Image.HorizontalResolution. 7 ToString()); 8 //menampilkan informasi statistik citra 9 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 dan arahkan 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 line 2. posisi break point 3. variabel stat mengembalikan return value null dikarenakan masih diinisialisasi, untuk mendapatkan return nya maka tekan tanda panah (lihat point 1) http://softscients.blogspot.cohttp://softscients.blogspot.co
  30. 30. 21 Tentunya hasil diatas akan berbeda untuk file citra dengan format berbeda. class ImageStatistics merupakan class yang berfungsi untuk melakukan perhitungan statistik citra meliputi max, min, median, standar deviasi. Framework AForge dan Accord secara cerdas dalam semua operasi citra nya menggunakan input berupa class Image dan Bitmap tanpa menggunakan matrix sebagai nilai argumennya. Class dasar yang disediakan oleh Accord yaitu 1. Menampilkan citra menggunakan ImageBox 2. Konversi citra kedalam matrix dan sebaliknya menggunakan ImageToMatrix, MatrixToImage 3. Menampilkan matrix kedalam MessageBox dan kedalam DataGridBox 4. Operasi matrix Sedangkan untuk operasi konversi lainnya, bisa menggunakan AForge yaitu 1. Operasi mengubah citra truecolor ke graycolor 2. Operasi black white 3. Operasi filtering, morphologi (akan dibahas pada bab selanjutnya) Semuanya memanfaatkan package AForge.Imaging.Filters. Penulis juga telah membuat package Ext untuk melengkapi kekurangan pada Accord dan AForge, misalkan untuk menampilkan citra dalam beberapa Window sekaligus (tidak perlu di close) karena menggunakan threading berbeda dengan ImageBox dari Accord yang harus di close terlebih dahulu, membuat citra truecolor dari matrix (Accord belum 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 method yaitu 1. TampilCitra() 2. AksesPixelGrayColor() 3. AkesPixelTrueColor() 4. Matrix2CitraGray() 5. Matrix2CitraTrueColor() http://softscients.blogspot.cohttp://softscients.blogspot.co
  31. 31. 22 6. OperasiMatrix() 7. KonversiColor2Gray() 8. KonversiGray2BW() Berikut adalah library yang digunakan 1. 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.bmp Source code Demo.Bab3Console 1 using System; 2 using System.IO; 3 using System.Drawing; 4 using System.Windows.Forms; 5 using System.Windows; 6 7 using AForge; 8 using AForge.Imaging; 9 using AForge.Imaging.Filters; 10 using AForge.Math; 11 12 using Accord.Math; 13 using Accord.Math.Formats; 14 using Accord.Controls.Imaging; 15 using Accord.Imaging.Converters; 16 17 using Ext; 18 using Ext.Utility; 19 20 namespace Demo.Bab3Console 21 { 22 class Program 23 { 24 //lokasi citra 25 static String lokasiTrueColor = " 24bit.bmp"; 26 static String lokasiGrayscale = " grayscale8bit.bmp"; http://softscients.blogspot.cohttp://softscients.blogspot.co
  32. 32. 23 27 //bitmap 28 Bitmap bitmapTrueColor = (Bitmap)Bitmap.FromFile(lokasiTrueColor); 29 Bitmap bitmapGrayscale = (Bitmap)Bitmap.FromFile(lokasiGrayscale); 30 31 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(); 39 40 program.AksesPixelCitra(); 41 program.OperasiMatrix(); 42 program.KonversiColor2Gray(); 43 program.KonversiGray2BW(); 44 Console.ReadKey(true); 45 } 46 public void TampilCitra() 47 { 48 //tampilkan # 1 --> Accord 49 /*Accord tidak menggunakan Threading sehingga tidak bisa saling 50 *tampil secara ber urutan 51 */ 52 53 ImageBox.Show("True color", 54 bitmapTrueColor,PictureBoxSizeMode.Zoom); 55 ImageBox.Show("Gray color",bitmapGrayscale, 56 PictureBoxSizeMode.Zoom); 57 58 //tampilkan # 2 --> Ext. 59 /*Ext. menggunakan Threading sehingga bisa tampil ber urutan 60 * */ 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 ); 71 72 } 73 public void AksesPixelGrayColor() 74 { 75 //# 1 --> Accord 76 // untuk format grayscale 77 double [,]matrix; 78 //baca 79 //format 0 sampai 255 80 ImageToMatrix im2mat = new ImageToMatrix(0,255); 81 im2mat.Convert(bitmapGrayscale,out matrix); 82 /* Accord menyediakan 2 tampilan untuk menampilkan matrix 83 * 1. bentuk dialog 84 * 2. bentuk grid tabel 85 * */ http://softscients.blogspot.cohttp://softscients.blogspot.co
  33. 33. 24 86 //tampilkan dalam bentuk dialog 87 MessageBox.Show( 88 matrix.ToString( 89 CSharpMatrixFormatProvider.InvariantCulture), 90 "pixel gray"); 91 //tampilkan dalam bentuk tabel 92 Accord.Controls.DataGridBox.Show(matrix, nonBlocking: true) 93 .SetAutoSizeColumns(DataGridViewAutoSizeColumnsMode.Fill) 94 .SetAutoSizeRows(DataGridViewAutoSizeRowsMode 95 .AllCellsExceptHeaders) 96 .SetDefaultFontSize(5) 97 .WaitForClose(); 98 99 //# 2 --> Ext. 100 ReadImage read = new ReadImage(bitmapGrayscale); 101 byte [,] gray = read.Gray; 102 //tampilkan ke console 103 Ext.Utility.Prt.Print(gray); 104 for (int i=0;i<gray.GetLength(0);i++) 105 { 106 for (int j=0;j<gray.GetLength(1);j++) 107 { 108 //tampilkan dalam mode debug 109 System.Diagnostics.Debug.Write(gray[i,j]+" "); 110 } 111 System.Diagnostics.Debug.WriteLine(""); 112 } 113 114 } 115 public void AkesPixelTrueColor() 116 { 117 //# 1 --> Accord 118 double [,]matrix; 119 ImageToMatrix im2mat = new ImageToMatrix(0,255,1); //red 120 im2mat.Convert(bitmapTrueColor,out matrix); 121 122 im2mat = new ImageToMatrix(0,255,2); //blue 123 im2mat.Convert(bitmapTrueColor,out matrix); 124 125 im2mat = new ImageToMatrix(0,255,3); //green 126 im2mat.Convert(bitmapTrueColor,out matrix); 127 128 //# 2 --> Ext. 129 ReadImage read = new ReadImage(bitmapTrueColor); 130 byte [,] red = read.Red; 131 byte [,] green = read.Green; 132 byte [,] blue = read.Blue; 133 134 } 135 public void Matrix2CitraGray() 136 { 137 //# 1 --> membuat citra gray dari matrix - Accord 138 double [,]gray; 139 //baca 140 ImageToMatrix im2mat = new ImageToMatrix(0,255); 141 im2mat.Convert(bitmapGrayscale,out gray); 142 //tulis 143 MatrixToImage mat2image = new MatrixToImage(0,255); 144 Bitmap bitmapHasil; http://softscients.blogspot.cohttp://softscients.blogspot.co
  34. 34. 25 145 mat2image.Convert(gray,out bitmapHasil); 146 147 //tampilkan citra 148 new Ext.Utility.ShowImage(). 149 InitShow( 150 new MyDataBitmap("Accord - Gray ", 151 bitmapHasil) 152 ); 153 //# 2 --> membuat citra gray dari matrix - Ext. 154 //baca 155 ReadImage read = new ReadImage(bitmapGrayscale); 156 //tulis 157 CreateImage create = new CreateImage(read.Gray); 158 //tampilkan citra 159 new Ext.Utility.ShowImage(). 160 InitShow( 161 new MyDataBitmap("Ext - Gray ", 162 create.Btmp) 163 ); 164 165 166 } 167 public void Matrix2CitraTrueColor() 168 { 169 //# 1 --> membuat citra color dari matrix - Accord 170 double [,]matrix; 171 //baca 172 ImageToMatrix im2mat = new ImageToMatrix(0,255,1); //red 173 im2mat.Convert(bitmapTrueColor,out matrix); 174 //tulis 175 MatrixToImage mat2image = new MatrixToImage(0,255); 176 Bitmap bitmapHasil; 177 mat2image.Convert(matrix,out bitmapHasil); 178 //tampilkan citra 179 new Ext.Utility.ShowImage(). 180 InitShow( 181 new MyDataBitmap("Accord - red pixel", 182 bitmapHasil) 183 ); 184 185 186 //# 2 --> membuat citra color dari matrix - Ext. 187 //baca 188 ReadImage read = new ReadImage(bitmapTrueColor); 189 //tulis 190 CreateImage create = new CreateImage(read.Red); 191 //tampilkan citra 192 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 citra 199 new Ext.Utility.ShowImage(). 200 InitShow( 201 new MyDataBitmap("Ext - true color ", 202 create.Btmp) 203 ); http://softscients.blogspot.cohttp://softscients.blogspot.co
  35. 35. 26 204 } 205 206 public void OperasiMatrix() 207 { 208 //baca citra 209 ReadImage read = new ReadImage(bitmapGrayscale); 210 //nilai pixel citra 211 int [,] gray = read.GrayInt; 212 //casting nilai 213 double [,]grayD = Ext.Utility.Casting.int2double(gray); 214 //dinaikan 2x 215 grayD = Matrix.Multiply(grayD,2); 216 //casting nilai 217 gray = Ext.Utility.Casting.double2int(grayD); 218 219 CreateImage create = new CreateImage(gray);//buat citra 220 221 new Ext.Utility.ShowImage(). 222 InitShow( 223 new MyDataBitmap("cerah", 224 create.Btmp) 225 ); 226 227 228 } 229 public void KonversiColor2Gray() 230 { 231 232 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 ); 241 242 new Ext.Utility.ShowImage(). 243 InitShow( 244 new MyDataBitmap("gray", 245 gray,1) 246 ); 247 } 248 public void KonversiGray2BW() 249 { 250 //threshold 251 Threshold filter = new Threshold(); 252 //input harus gray 253 filter.ApplyInPlace(bitmapGrayscale); 254 new Ext.Utility.ShowImage(). 255 InitShow( 256 new MyDataBitmap("BW", 257 bitmapGrayscale) 258 ); 259 260 } 261 262 } http://softscients.blogspot.cohttp://softscients.blogspot.co
  36. 36. 27 263 264 } a.1 b.2 b.1 b.2 b.3 b.4 c.1 c.2 http://softscients.blogspot.cohttp://softscients.blogspot.co
  37. 37. 28 d.1 d.2 d.3 e f.1 f.2 Keterangan: a.1 Tampilan ImageBox() a.2 Tampilan Ext.Utility.ShowImage() ImageBox dari Accord tidak mendukung tampilan secara berurutan sehingga harus di close terlebih dahulu sehingga gunakan saja Ext.Utility.ShowImage() b.1 Tampilan MessageBox() dari Accord b.2 Tampilan DataGridBox() dari Accord b.3 Tampilan Ext.Utility.Prt.Print() b.4 Tampilan System.Diagnostics.Debug.Write() c.1 c.2 Perbandingan operasi read dan create yang menghasilkan tampilan yang sama baik untuk Accord dan Ext d.1 Read pixel dari Accord tidak sempurna menampilkan citra dari format http://softscients.blogspot.cohttp://softscients.blogspot.co
  38. 38. 29 d.2 d.3 truecolor untuk layer pixel matrix red (merah) e Operasi matrix untuk menaikan nilai pixel dari Accord f.1 f.2 Operasi konversi ke graycolor dan black white dari AForge http://softscients.blogspot.cohttp://softscients.blogspot.co
  39. 39. 30 OPERASI DASAR OLAH CITRA Banyak teknik dasar olah citra yang telah disediakan oleh AForge diantaranya adalah operasi konvolusi (filtering), thresholding, morphologi, dan blob, corner detection, histogram equalization, line - circle - shape detection yang dibungkus secara rapi dalam bentuk class pada package AForge.Imaging dan AForge.Imaging.Filters. Bila ingin mengetahui demo yang telah disediakan oleh AForge, maka bukalah contoh demo di <lokasi path>AForge.NETFrameworkSamplesImagingFiltersDemo.sln. Bab 4 ini akan fokus membahas tentang konvolusi, thresholding, morphologi, operasi blob. Konvolusi Konvolusi merupakan salah satu operasi dasar untuk analisis citra yang memberikan efek tertentu pada citra. Beberapa kegunaan dari konvolusi seperti smoothing, sharpening, blur, dan deteksi tepi. Operasi Konvolusi menggunakan array 2D sebagai masukan dan array 2D square sebagai filter/kernel. Hasil dari konvolusi akan berbeda tergantung dari jenis kernelnya. Berikut contoh perhitungan dari konvolusi http://softscients.blogspot.cohttp://softscients.blogspot.co
  40. 40. 31 Jika x array 2D sebagai matrix input h 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 mulkan.ms@gmail.com http://softscients.blogspot.cohttp://softscients.blogspot.co
  41. 41. 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 mulkan.ms@gmail.com http://softscients.blogspot.cohttp://softscients.blogspot.co
  42. 42. 33 Berikut jenis kernel yang sering digunakan untuk menampilkan efek tertentu pada citra 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 code untuk melakukan operasi konvolusi menggunakan input berupa matrix yaitu Form ini Sengaja Tidak ditampilkan Sebagai Review Version Silahkan untuk membeli edisi Full version http://softscients.blogspot.com mulkan.ms@gmail.com http://softscients.blogspot.cohttp://softscients.blogspot.co
  43. 43. 34 Ext.Convolution dan contoh Project dengan nama Demo.Bab4Convolution yang terdiri dari 3 method yaitu 1. OperasiKonvolusiMatrix() : contoh matrix seperti diatas dan class Ext.Convolution untuk melakukan operasi konvolusi 2. OperasiKonvolusiCitra() : contoh matrix dari citra format gray yang akan diconvolution kemudian hasil matrix nya dibuat citra berformat gray 3. OperasiKonvolusiAForge() : Input dan Output argument method nya menggunakan object berupa class Bitmap bukan matrix lagi sehingga proses nya menjadi mudah. Source code Demo.Bab4Convolution 1 using System; 2 using System.Drawing; 3 using AForge.Imaging.Filters; 4 using Ext; 5 using Ext.Utility; 6 namespace Demo.Bab4Convolution 7 { 8 class Program 9 { 10 //lokasi citra 11 static String lokasiTrueColor = "24bit.bmp"; 12 static String lokasiGrayscale = "grayscale8bit.bmp"; 13 //bitmap 14 Bitmap bitmapTrueColor = (Bitmap)Bitmap.FromFile(lokasiTrueColor); 15 Bitmap bitmapGrayscale = (Bitmap)Bitmap.FromFile(lokasiGrayscale); 16 17 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 { 27 28 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); 44 45 } 46 public void OperasiKonvolusiCitra() 47 { 48 double[,] emboss = { Form ini Sengaja Tidak ditampilkan Sebagai Review Version Silahkan untuk membeli edisi Full version http://softscients.blogspot.com mulkan.ms@gmail.com http://softscients.blogspot.cohttp://softscients.blogspot.co
  44. 44. 35 49 { -2, -1, 0 }, 50 { -1, 1, 1 }, 51 { 0, 1, 2 } }; 52 53 //baca citra 54 ReadImage read = new ReadImage(bitmapGrayscale); 55 //nilai pixel citra 56 int [,] gray = read.GrayInt; 57 Ext.Convolution conv=new Ext.Convolution(); 58 59 CreateImage create = new CreateImage(conv.conv2d(gray,emboss)); 60 new Ext.Utility.ShowImage(). 61 InitShow( 62 new MyDataBitmap("emboss", 63 create.Btmp) 64 ); 65 66 67 } 68 public void OperasiKonvolusiAForge() 69 { 70 // convolution 71 AForge.Imaging.Filters.Convolution convolution; 72 73 // kernel emboss 74 int[,] emboss = { 75 { -2, -1, 0 }, 76 { -1, 1, 1 }, 77 { 0, 1, 2 } }; 78 79 80 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 ); http://softscients.blogspot.cohttp://softscients.blogspot.co
  45. 45. 36 108 109 110 111 } 112 113 114 } 115 116 } a b c.1 c.2 c.3 Keterangan: a Operasi konvolusi matrix b Operasi konvolusi citra Ext c.1 Operasi konvolusi AForge - Filter Sharp c.2 Operasi konvolusi AForge - Filter Emboss http://softscients.blogspot.cohttp://softscients.blogspot.co
  46. 46. 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 melakukan edge detection yaitu 1. Secara tidak langsung menggunakan convolution dari package Ext dan melakukan looping yaitu mulai dari membaca pixel, mengubah kedalam format biner, convolution, mengubah kedalam format 0-255, dan mengubah matrix kedalam citra 2. Secara langsung menggunakan class yang telah disediakan oleh AForge yaitu CannyEdgeDetector, SobelEdgeDetector, Edges Source code Demo.Bab4Edge 1 using System; 2 using System.Drawing; 3 using AForge.Imaging.Filters; 4 using Ext; 5 using Ext.Utility; 6 namespace Demo.Bab4Edge 7 { 8 class Program 9 { 10 //lokasi citra 11 static String lokasiGrayscale = "D:Sample CitraBlob8Bit.bmp"; 12 //bitmap 13 Bitmap bitmapGrayscale = (Bitmap)Bitmap.FromFile(lokasiGrayscale); 14 15 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 - biner 25 OtsuThreshold otsu = new OtsuThreshold();//dibahas di bab thresholding 26 Bitmap bw = otsu.Apply(bitmapGrayscale); 27 //# 2 --> ubah kedalam format biner 28 ReadImage read = new ReadImage(bw); 29 30 byte [,] biner = read.Gray; 31 for (int i=0;i<biner.GetLength(0);i++) 32 { 33 for(int j=0;j<biner.GetLength(1);j++) 34 { 35 if(biner[i,j]>0) 36 { 37 biner[i,j]=1; 38 }else 39 { 40 biner[i,j]=0; 41 } 42 } 43 } 44 //# 3 --> convolution untuk gradient X dan Y 45 double[,] sobelX = { http://softscients.blogspot.cohttp://softscients.blogspot.co
  47. 47. 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 X 57 double [,]biner2 = conv.conv2d(Casting.byte2double(biner),sobelX); 58 //convolution untuk gradient Y 59 biner2 = conv.conv2d(biner2,sobelY); 60 61 //# 4 --> ubah kedalam format angka 0 sampai 255 62 for (int i=0;i<biner.GetLength(0);i++) 63 { 64 for(int j=0;j<biner.GetLength(1);j++) 65 { 66 67 if(biner2[i,j]>0) 68 { 69 biner[i,j]=255; 70 }else 71 { 72 biner[i,j]=0; 73 } 74 } 75 } 76 77 //# 5 --> konversi matrix ke citra 78 CreateImage create = new CreateImage(biner); 79 //# 6 --> tampilkan 80 new Ext.Utility.ShowImage(). 81 InitShow( 82 new MyDataBitmap("Ext", 83 create.Btmp) 84 ); 85 86 } 87 public void EdgeAForge() 88 { 89 //# 1 --> edge type canny 90 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 sobel 98 SobelEdgeDetector sobel = new SobelEdgeDetector(); 99 hasil = sobel.Apply(bitmapGrayscale); 100 new Ext.Utility.ShowImage(). 101 InitShow( 102 new MyDataBitmap("sobel", 103 hasil) 104 ); http://softscients.blogspot.cohttp://softscients.blogspot.co
  48. 48. 39 105 //# 3 --> edge type custom 106 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 } 120 121 } 122 123 } a b.1 b.2 b.3 Keterangan: a Operasi edge detection menggunakan Ext b.1 Operasi AForge menggunakan class CannyEdgeDetector b.2 Operasi AForge menggunakan class SobelEdgeDetector b.3 Operasi AForge menggunakan class Edges http://softscients.blogspot.cohttp://softscients.blogspot.co
  49. 49. 40 Thresholding Thresholding (pengambangan) mencari nilai T (ambang batas) yang digunakan untuk melakukan proses konversi citra true color dalam format black white. Ada banyak metode untuk mendapatkan nilai ambang batas sebagai acuan untuk mengkategorikan nilai suatu pixel termasuk warna hitam atau putih jika dalam format biner maka (1 dan 0) dan format grayscale (0 dan 255) salah satu yang paling banyak dikenal luas dan digunakan sebagai standar yaitu metode Otsu. Metode Otsu mencari nilai ambang batas (T) dengan melakukan analisis diskriminan pada suatu variabel yang dapat membedakan antara dua atau lebih kelompok yang muncul secara alami. Misalkan nilai ambang batas yang akan dicari k. Nilai k berkisar 1 sampai dengan L, dengan L = 255 Jika p(i) = nilai histogram sumT = jumlah total pixel wB = bobot background wF = bobot foreground N = luas matrix sumB = jumlah total pixel ke i mB = rata-rata background mF = rata - rata foreground Maka nilai ambang batas didapatkan dengan mencari nilai maksimal dari variance 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 mulkan.ms@gmail.com http://softscients.blogspot.cohttp://softscients.blogspot.co
  50. 50. 41 1. Misalkan kita mempunyai matrix citra dengan nilai 0 sampai 20 (L = 20) dan N 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 20 0 4 2 3 7 5 14 15 16 17 18 19 20 0 1 2 3 7 5 14 15 16 17 18 19 20 0 1 2 3 8 9 14 15 11 17 18 10 20 1 1 2 3 9 9 14 15 12 11 18 10 20 1 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 = 1234 4. Misalkan untuk k =3 wB(3) = 4+5+6+7 = 22 wF(3) = 126 -22 = 104 sumB(3) = 0*4+1*5+2*6+3*7= 38 mB = 38/22 = 1.722 mF = (1234 - 38 )/104 = 11.5 variance =22*104*(1.722-11.5)2 = 218518 k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 k = 6 49926.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 =13 274193.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* = 20 240269.2 209169.5 188957.9 154803.5 104034 68338.68 5. Mencari nilai variance tertinggi pada k ke Maka nilai k terbesar berada di k = 9 yaitu 290625.7 Keterangan: Untuk k = 20 tidak dihitung karena wF = 0 AForge menyediakan 2 class untuk melakukan proses segmentasi yaitu 1. Threshold secara default nilai ambang batas nya adalah 128 2. OtsuThreshold menggunakan metode otsu untuk mencari nilai ambang batas nya atau bisa juga di set nilai ThresholdValue nya Demo operasi segmentasi didalam Project Demo.Bab4Threshold dibagi menjadi 3 yaitu 1. Menghitung nilai ambang batas menggunakan class Otsu dari package Ext kemudian melakukan looping untuk mengubah nilai pixel menjadi 0 dan 255. 2. Menerapkan pengubahan nilai citra menggunakan class Threshold dari package AForge dengan nilai T yang didapatkan dari point 1. 3. Menggunakan class OtsuThreshold dari AForge. Source code Demo.Bab4Threshold 1 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 mulkan.ms@gmail.com http://softscients.blogspot.cohttp://softscients.blogspot.co
  51. 51. 42 7 { 8 class Program 9 { 10 //lokasi citra 11 static String lokasiCitra = "grayscale8bit.bmp"; 12 Bitmap bitmapGrayscale=(Bitmap)Bitmap.FromFile(lokasiCitra); 13 14 public static void Main(string[] args) 15 { 16 17 Program program = new Program(); 18 //program.TestOtsu(); 19 program.OperasiBW(); 20 program.operasiBWAforge(); 21 Console.ReadKey(true); 22 } 23 24 public void TestOtsu() 25 { 26 27 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} 34 35 }; 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()); 40 41 } 42 public void OperasiBW() 43 { 44 //tampilkan citra 45 new Ext.Utility.ShowImage(). 46 InitShow( 47 new MyDataBitmap("gray", 48 bitmapGrayscale 49 ) 50 ); 51 52 //tampilkan histogram 53 new Ext.Utility.ShowHistogram(). 54 InitShow( 55 new MyDataBitmap("histogram gray ", 56 bitmapGrayscale 57 ) 58 ); 59 //baca pixel citra 60 Ext.ReadImage read=new Ext.ReadImage(bitmapGrayscale); 61 //matrix 62 byte [,] gray=read.Gray; 63 //perhitungan nilai ambang batas 64 Ext.Otsu otsu=new Ext.Otsu(); 65 //proses http://softscients.blogspot.cohttp://softscients.blogspot.co
  52. 52. 43 66 otsu.Process(gray); 67 //nilai T 68 int T = otsu.T; 69 Console.WriteLine("nilai otsu "+T.ToString()); 70 71 //## 1 --> cara ke 1 72 for (int i = 0; i<gray.GetLength(0);i++) 73 { 74 75 for (int j = 0; j<gray.GetLength(1);j++) 76 { 77 78 if(gray[i,j]>=otsu.T) 79 { 80 gray[i,j]=255; 81 }else{ 82 gray[i,j]=0; 83 } 84 } 85 86 } 87 Ext.CreateImage create=new Ext.CreateImage(gray); 88 new Ext.Utility.ShowImage(). 89 InitShow( 90 new MyDataBitmap("BW -- 1 ", 91 create.Btmp 92 ) 93 ); 94 95 //## 2 --> cara ke 2 96 Threshold tr=new Threshold(T); 97 98 new Ext.Utility.ShowImage(). 99 InitShow( 100 new MyDataBitmap("BW -- 2", 101 tr.Apply(bitmapGrayscale) 102 ) 103 ); 104 105 } 106 public void operasiBWAforge() 107 { 108 109 OtsuThreshold tr=new OtsuThreshold(); 110 new Ext.Utility.ShowImage(). 111 InitShow( 112 new MyDataBitmap("BW -- 3", 113 tr.Apply(bitmapGrayscale) 114 ) 115 ); 116 117 } 118 119 } 120 121 } http://softscients.blogspot.cohttp://softscients.blogspot.co
  53. 53. 44 a.1 a.2 a.3 a.4 b Keterangan: a.1 menampilkan citra gray a.2 menampilkan histogram citra a.3 Operasi BW cara 1 a.4 Operasi BW cara ke 2 b Operasi BW dengan AForge http://softscients.blogspot.cohttp://softscients.blogspot.co
  54. 54. 45 Morphologi Secara sederhana morphologi adalah bentuk dan struktur. Operasi morphologi bekerja dalam format biner yaitu 1 dan 0. Beberapa operasi yang sering digunakan yaitu 1. Dilation (penebalan) yaitu menambahkan sejumlah pixel terhadap semua arah dari sebuah structure element 2. Erotion (penipisan) yaitu mengurangi sejumlah pixel terhadap semua arah dari sebuah structure element 3. Opening yaitu operasi erotion disertai dengan dilation berfungsi untuk menghilangkan objek - objek kecil yang terdapat dalam citra 4. Closing yaitu operasi dilation disertai dengan erotion Operasi morphologi melibatkan dua input himpunan yaitu citra (format biner) dengan suatu kernel yang disebut dengan Structure Element sebagai dasar operasinya 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 mulkan.ms@gmail.com http://softscients.blogspot.cohttp://softscients.blogspot.co
  55. 55. 46 Form ini Sengaja Tidak ditampilkan Sebagai Review Version Silahkan untuk membeli edisi Full version http://softscients.blogspot.com mulkan.ms@gmail.com http://softscients.blogspot.cohttp://softscients.blogspot.co
  56. 56. 47 Bukalah project Demo.Bab4Morpho yang berisi operasi morphologi. Semua operasi morpholgi menggunakan input argument berupa Bitmap dan menggunakan method Apply() sebagai standard operasinya. Form ini Sengaja Tidak ditampilkan Sebagai Review Version Silahkan untuk membeli edisi Full version http://softscients.blogspot.com mulkan.ms@gmail.com http://softscients.blogspot.cohttp://softscients.blogspot.co
  57. 57. 48 Berikut adalah class yang terlibat a. Dilation b. Erosion c. Opening d. Closing Source code Demo.Bab4Morpho 1 using System; 2 using System.Drawing; 3 using AForge.Imaging.Filters; 4 using Ext; 5 using Ext.Utility; 6 namespace Demo.Bab4Morpho 7 { 8 class Program 9 { 10 //lokasi citra 11 static String lokasiCitra = " morpho24bit.bmp"; 12 Bitmap bitmapGrayscale=(Bitmap)Bitmap.FromFile(lokasiCitra); 13 14 public static void Main(string[] args) 15 { 16 17 Program program = new Program(); 18 program.DemoMorpho(); 19 Console.ReadKey(true); 20 } 21 22 public void DemoMorpho() 23 { 24 //tampilkan citra 25 new Ext.Utility.ShowImage(). 26 InitShow( 27 new MyDataBitmap("original", 28 bitmapGrayscale 29 ) 30 ); 31 32 Dilatation dilation = new Dilatation( ); 33 //tampilkan citra 34 new Ext.Utility.ShowImage(). 35 InitShow( 36 new MyDataBitmap("Dilation", 37 dilation.Apply( bitmapGrayscale ) 38 ) 39 ); 40 41 Erosion erosion = new Erosion(); 42 //tampilkan citra 43 new Ext.Utility.ShowImage(). 44 InitShow( 45 new MyDataBitmap("Erosion", 46 erosion.Apply( bitmapGrayscale ) 47 ) 48 ); 49 50 Opening opening = new Opening(); 51 //tampilkan citra 52 new Ext.Utility.ShowImage(). http://softscients.blogspot.cohttp://softscients.blogspot.co
  58. 58. 49 53 InitShow( 54 new MyDataBitmap("opening", 55 opening.Apply( bitmapGrayscale ),1 56 ) 57 ); 58 Closing closing = new Closing(); 59 //tampilkan citra 60 new Ext.Utility.ShowImage(). 61 InitShow( 62 new MyDataBitmap("closing", 63 closing.Apply( bitmapGrayscale ) 64 ) 65 ); 66 67 68 } 69 70 71 } 72 73 } a.1 a.2 a.3 a.4 http://softscients.blogspot.cohttp://softscients.blogspot.co
  59. 59. 50 a.5 Keterangan: a.1 Citra original a.2 Citra dilation a.3 Citra erotion a.4 Citra opening a.5 Citra closing Operasi Blob Dasar dari operasi blob adalah labelling yaitu untuk menghitung jumlah item suatu citra berdasarkan komponen terhubung. Misalkan pada citra akan ditentukan 1. Berapa jumlah item 2. Lokasi koordinat x,y masing-masing item 3. 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 untuk melakukan perhitungan moment. Berikut adalah sampel citra yang digunakan Blob8Bit.bmp Labelling Penandaan komponen terhubung yaitu mengelompokan pixel kedalam suatu komponen terhubung menurut aturan ketetanggaan. Setiap komponen yang tidak terhubung (disjoint) akan diberi suatu tanda yang berbeda. Langkah nya yaitu periksa (scan) citra dengan bergerak dari sepanjang baris sampai sudah http://softscients.blogspot.cohttp://softscients.blogspot.co
  60. 60. 51 menemukan pixel p (nilai p berada dalam matrix V). Bila p sudah ditemukan maka periksa nilai pixel tetangganya. Berikut adalah penandaan ketetanggan 4 8 1 1 1 1 1 4 1 1 8 1 1 1 1 1 Berikut contoh ilustrasi dari labelling dengan nilai 4 dan 8 ketetanggaan. Matrix biner 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 4 tetangga 0 0 0 0 0 0 0 0 0 1 1 1 0 2 0 0 0 0 0 0 1 0 2 2 2 2 2 0 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 3 3 0 0 0 0 0 4 4 0 0 0 0 0 0 0 0 4 0 5 0 0 0 0 0 0 4 4 0 5 0 8 tetangga 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 Moment Momen suatu objek dapat menggambarkan luas area, posisi, orientasi, dan paramater yang lainnya. Persamaan dasar dari momen sebagai berikut Dengan i dan j adalah posisi dari suatu pixel dengan nilai intensitas axy. Momen tingkat 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 mulkan.ms@gmail.com http://softscients.blogspot.cohttp://softscients.blogspot.co
  61. 61. 52 Titik pusat (center of gravity) x’ dan y’ sebagai berikut Misalkan 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Maka Area = 2 M00 = 2 M10 = 7 M01 = 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 mulkan.ms@gmail.com http://softscients.blogspot.cohttp://softscients.blogspot.co
  62. 62. 53 Maka vector ciri untuk pengenalan objek dari momen - momen invarian sebagai berikut Untuk contoh diatas akan menghasilkan seperti berikut moment1 = 2.357 moment2 = 10.703125 moment3 = 23.4140625 moment4 = 28.1953125 moment5 = -1162.06622314453 moment6 = 65.06103515625 moment7 = 1191.31031799316 source code Demo.Bab4Blob 1 using System; 2 using System.Drawing; 3 using System.Drawing.Imaging; 4 using System.Diagnostics; 5 6 using AForge.Imaging; 7 using AForge.Imaging.Filters; 8 9 using Ext; 10 using Ext.Utility; 11 namespace Demo.Bab4Blob 12 { 13 class Program 14 { 15 //lokasi citra 16 //static String lokasiCitra = @"D:Sample CitraBlob8Bit.bmp"; 17 static String lokasiCitra = @"D:Sample CitraBlob8Bit.bmp"; 18 Bitmap bitmapGrayscale=(Bitmap)Bitmap.FromFile(lokasiCitra); 19 20 public static void Main(string[] args) 21 { 22 23 Program program = new Program(); 24 //program.DemoLabellingMatrix(); 25 //program.DemoCoG(); 26 program.DemoBlob(); 27 Console.ReadKey(true); 28 } 29 30 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 mulkan.ms@gmail.com http://softscients.blogspot.cohttp://softscients.blogspot.co
  63. 63. 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} 43 44 }; 45 46 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 }; 64 65 Ext.CenterOfGravity cog = new Ext.CenterOfGravity(); 66 cog.Process(data); 67 Console.WriteLine("Posisi X "+cog.X+" Posisi Y "+cog.Y); 68 69 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); 78 79 } 80 public void DemoBlob() 81 { 82 //tampilkan citra 83 new Ext.Utility.ShowImage(). 84 InitShow( 85 new MyDataBitmap("original", 86 bitmapGrayscale) 87 ); 88 89 //perubahan ke BW 90 OtsuThreshold threshold = new OtsuThreshold(); 91 Bitmap blackWhite = threshold.Apply(bitmapGrayscale); 92 //clone ke format truecolor 93 Bitmap imageTrueColor = AForge.Imaging.Image. 94 Clone(blackWhite, 95 PixelFormat.Format24bppRgb ); http://softscients.blogspot.cohttp://softscients.blogspot.co
  64. 64. 55 96 //operasi blob 97 BlobCounter blobCounter = new BlobCounter(); 98 //proses 99 blobCounter.ProcessImage(blackWhite); 100 101 AForge.Imaging.Blob[] blobs=blobCounter.GetObjectsInformation(); 102 blobs = blobCounter.GetObjectsInformation(); 103 //operasi draw citra 104 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 citra 112 Ext.ReadImage read; 113 Bitmap target; 114 115 foreach ( AForge.Imaging.Blob blob in blobs ) 116 { 117 118 //jika area > 50 119 if (blob.Area>=50) 120 { 121 //draw 122 drawPoint = new PointF(blob.CenterOfGravity.X, 123 blob.CenterOfGravity.Y); 124 125 blobCounter.ExtractBlobsImage(blackWhite, blob, true); 126 Bitmap bw = blob.Image.ToManagedImage(); 127 //proses croping 128 Rectangle cropRect=blob.Rectangle; 129 target = bw.Clone(cropRect,bw.PixelFormat); 130 131 //baca pixel citra 132 read=new Ext.ReadImage(target); 133 134 //menghitung moment 135 Ext.Moment moment=new Ext.Moment(); 136 moment.Process(blob.CenterOfGravity.X,blob.CenterOfGravity.Y, 137 read.Gray); 138 139 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.X 151 +" 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 mulkan.ms@gmail.com http://softscients.blogspot.cohttp://softscients.blogspot.co
  65. 65. 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)); 159 160 161 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 } 169 170 171 } 172 new Ext.Utility.ShowImage(). 173 InitShow( 174 new MyDataBitmap("count", 175 (Bitmap)image3) 176 ); 177 178 179 180 } 181 182 183 } 184 185 } a http://softscients.blogspot.cohttp://softscients.blogspot.co
  66. 66. 57 b.1 b.2 Keterangan: a Perhitungan hasil Center of gravity dan momentnya b.1 Citra original b.2 Citra hasil blob Berikut hasil dari tampilan Debug  Output nya [1] lokasi 153.0507 dan 288.8216 moment1 2.715 moment2 9.442 moment3 257552.609 moment4 393867.417 moment5 30147466885.689 moment6 1003571.22 moment7 -57134563087.444 [2] lokasi 798.4896 dan 357.4542 moment1 29.136 moment2 1217.235 moment3 474055537.436 moment4 490814201.319 moment5 2.60638092613942E+17 moment6 18242375178.783 moment7 2.07415641255753E+17 [3] lokasi 576.3546 dan 368.7476 moment1 17.69 moment2 530.006 moment3 95655583.849 moment4 101403206.477 moment5 1.40532426648792E+16 moment6 2054030339.179 moment7 1.13282718266874E+16 [4] lokasi 264.6995 dan 587.8546 moment1 21.442 moment2 685.696 moment3 130251134.58 moment4 135429848.292 moment5 5.44693479578967E+15 moment6 3093029271.551 moment7 -8.72499826279729E+15 [5] lokasi 605.1851 dan 656.7604 moment1 40.588 moment2 3267.005 moment3 1004757395.002 moment4 1030472856.919 moment5 1.22030714860354E+18 moment6 41646354676.358 moment7 1.0650179015771E+17 [6] lokasi 528.1293 dan 814.6841 moment1 35.083 moment2 2193.041 moment3 899387743.841 moment4 915869170.674 moment5 5.11694787845467E+17 moment6 33907336249.808 moment7 -4.19838326260914E+17 [7] lokasi 787.5 dan 843 moment1 62.194 moment2 7693.981 moment3 4316996878.566 moment4 4363545317.34 moment5 2.18335014229934E+19 moment6 271363112642.319 moment7 1.60762584463735E+18 http://softscients.blogspot.cohttp://softscients.blogspot.co
  67. 67. 58 Bila diplotkan kedalam grafik akan tampil seperti berikut Kesimpulan Bila dilihat dari plot grafik maka akan tampak bawah moment1, moment2, moment3, moment4, moment6 yang signifikan untuk membedakan bentuk dari objek http://softscients.blogspot.cohttp://softscients.blogspot.co
  68. 68. 59 ANALISIS TEKSTUR Manusia mengenal tekstur seperti lembut dan kasar walaupun tangan tidak menyentuh benda tersebut, tapi otak mampu membedakan hal tersebut melalui visualisasi yang ditangkap oleh mata. Tekstur dapat dicirikan sebagai berikut a. Pengulangan pola dari variasi lokal sehingga membentuk kesatuan yang utuh b. Menyediakan informasi susunan spasial dari warna dan intensitas citra c. Dicirikan dengan distribusi spasial dari level intensitas dari nilai pixel ketetanggaan d. Tidak bisa didefinisikan sebagai suatu satu point / nilai tertentu karena merupakan sebuah pola / kesatuan Lihatlah ilustrasi berikut tentang tekstur sebuah citra yaitu terdiri dari 50% hitam dan 50% putih Tentunya uji statistik standar seperti mean, standar deviasi tidak akan mampu membedakan ketiga citra tersebut karena akan menghasilkan nilai yang sama. Seperti yang sudah dijelaskan bahwa tekstur merupakan suatu pengulangan pola dan distribusi spasial artinya ketiga citra tersebut mempunyai tingkat intensitas nilai pixel yang sama tapi mempunyai distribusi spasial yang berbeda. Analisis tekstur merupakan salah satu metode untuk melakukan identifikasi atau klasifikasi suatu citra, analisis tersebut telah banyak digunakan dalam berbagai http://softscients.blogspot.cohttp://softscients.blogspot.co
  69. 69. 60 bidang yaitu uji tekstur wajah, mutu keramik, membedakan jenis daun dan dalam interpretasi suatu peta sehingga dapat diketahui jenis lahan. GLCM sebagai salah satu metode analisis tekstur Gray-Level Co-occurrence matrix merupakan metode paling banyak digunakan untuk analisis tekstur. Metode ini diperkenalkan oleh Haralick di tahun 1973 yang merupakan bagian dari project yang didukung olah NASA yaitu tepatnya NASA Goddard Space Flight Center. Haralick menggunakan citra dari NASA ERTS untuk melakukan klasifikasi dengan tingkat akurasi diatas 80%. Matrix GLCM dihitung dari nilai pixel yang berpasangan dan memiliki nilai intensitas tertentu. Misalkan d adalah jarak antara dua pixel yaitu (x1,y1) dan (x2,y2) dan Ѳ tetha didefinisikan sebagai sudut antara keduanya, maka matrix GLCM merupakan distribusi spasial dari Pd Ѳ (i,j). Banyak paper menuliskan berbagai versi tentang perhitungan GLCM terutama mengenai masalah sudut yang digunakan. Berikut adalah ilustrasi yang menggambarkan arah sudut dengan jarak 1 pixel dan ada 4 jenis sudut yang digunakan: a. 0o=180o; b. 45o=225o, c. 90o=270o, dan d. 135o=315o tapi terkadang ada yang menyatakan terdiri dari 8 arah, hal ini terjadi karena antara sudut 0o dan 180o dianggap berbeda begitu juga dengan arah sudut yang lainnya http://softscients.blogspot.cohttp://softscients.blogspot.co
  70. 70. 61 Perhitungan GLCM Misalkan kita mempunyai gray matrix dengan skala intensitas dari 0 sampai 2 0 0 1 2 2 0 2 0 1 0 0 2 2 0 1 1 Maka tentukan P1,0(M) yaitu matrix GLCM dari jarak 1 untuk sudut 0o 1. Buatlah matrix pasangan yaitu 0 1 2 0 1 2 2. Misalkan hitung matrix pasangan (0,0) untuk sudut 0 dan 180 Sudut 0o Sudut 180o no Sudut 0o Sudut 180o a 0,0 0,0 b 0,1 1,0 c 1,2 2,1 d 2,0 0,2 e f g h i j k l 1,1 1,1 Form ini Sengaja Tidak ditampilkan Sebagai Review Version Silahkan untuk membeli edisi Full version http://softscients.blogspot.com mulkan.ms@gmail.com http://softscients.blogspot.cohttp://softscients.blogspot.co
  71. 71. 62 Sehingga matrix GLCM nya adalah 0 1 2 0 1 2 3. Langkah selanjutnya adalah melakukan normalisasi yaitu matrixGLCMNorm. Jumlah total nilai = 24 0.1667 0.1250 0.2083 0.1250 0.0833 0.0417 0.2083 0.0417 0 Bila dijumlahkan akan menghasilkan nilai 1. Matrix diatas merupakan input untuk perhitungan fitur tekstur. Berikut adalah beberapa fitur yang bisa dihitung menggunakan GLCM yaitu terdiri dari 7 fitur utama dan 7 fitur tambahan yang diturunkan dari 7 fitur utama. 1. Angular second moment/uniformity/energy 2. Entropy 3. Dissimilarity 4. Contrast/inertia 5. Correlation 6. Homogeneity/inverse difference moment 7. Autocorrelation 8. Sum of squares (variance) 9. Sum average 10. Sum variance 11. Sum entropy 12. Difference variance 13. Difference entropy 14. Information measures of correlation Perhitungan 7 fitur utama 1. 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 akan bernilai kecil menandakan nilai dari GLCM normalisasi adalah heterogen. Nilai maksimum dari energy adalah 1 yang artinya distribusi pixel dalam kondisi konstan atau bentuk nya yang berperiodik (tidak acak). Hasil perhitungan diatas adalah f1 = 0.1042 Form ini Sengaja Tidak ditampilkan Sebagai Review Version Silahkan untuk membeli edisi Full version http://softscients.blogspot.com mulkan.ms@gmail.com http://softscients.blogspot.cohttp://softscients.blogspot.co
  72. 72. 63 2. Entropy Mengukur kompleksitas(keacakan) citra. Entropy akan bernilai tinggi ketika citra tidak seragam. Hasil perhitungan diatas adalah f2 = 2.325 3. Dissimilarity Mengukur ketidakmiripan suatu tekstur, yang akan bernilai besar bila acak dan sebaliknya akan bernilai kecil bila seragam. Hasil perhitungan diatas adalah f3 = 1.5833 4. Contrast/inertia Mengukur frekuensi spasial dari citra dan perbedaan moment GLCM. Perbedaan yang dimaksudkan adalah perbedaan tinggi dan rendah nya pixel. Contrast akan bernilai 0 jika pixel ketetanggaan mempunyai nilai yang sama. Hasil perhitungan diatas adalah f4 = 3.416 5. Correlation Dengan Mengukur linearitas (the joint probability) dari sejumlah pasangan pixel (pairs). µx = 2.458 µy= 2.458 x = 1.1649 y = 1.1649 Hasil perhitungan diatas adalah f5 = 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 mulkan.ms@gmail.com http://softscients.blogspot.cohttp://softscients.blogspot.co
  73. 73. 64 Mengukur homogenitas. Nilai ini sangat sensitif terhadap nilai disekitar diagonal utama. Bernilai tinggi ketika semua pixel mempunyai nilai yang sama / seragam. Kebalikan dari contrast yaitu akan bernilai besar jika mempunyai nilai pixel yang sama pada saat energy bernilai tetap. Hasil perhitungan diatas adalah f6 = 0.392 7. Autocorrelation Mengukur correlation diantara garis diagonal utama. Hasil nya contoh diatas adalah 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 tetapi mempunyai sebaran lokasi pixel yang berbeda (pola-tekstur). Perhitungan GLCM menggunakan sudut 0o dan jarak 1 yaitu P(1,0) gray M1 M2 M3 0 1 2 3 0 0 0 0 0 3 1 3 0 1 2 3 3 3 3 3 0 2 0 1 0 1 2 3 2 2 2 2 3 1 0 3 0 1 2 3 1 1 1 1 1 2 2 2 glcm 0 4 0 0 6 0 0 0 0 2 2 2 4 0 4 0 0 6 0 0 2 0 1 3 0 4 0 4 0 0 6 0 2 1 4 0 0 0 4 0 0 0 0 6 2 3 0 0 glcmNorm 0 0.1667 0 0 0.25 0 0 0 0 0.0833 0.0833 0.0833 0.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 M3 Energy 0.166 0.25 0.104 M2 mempunyai keseragaman paling tinggi bila diukur dari sudut 0o Entropy 1.791 1.386 2.325 M3 mempunyai ketidakseragaman paling tinggi hal ini menandakan entropy mempunyai hubungan terbalik secara kuat dengan hasil energy Dissimiliarity 1 0 1.583 M3 bernilai paling tinggi karena paling acak Contrast 1 0 3.416 M2 mempunyai nilai pixel ketetanggan yang sama (bila diukur dari sudut 0o) sehingga bernilai 0 Correlation 0.45 1 -0.466 M2 mempunyai linearitas paling tinggi Homogeneity 0.5 1 0.391 M2 mempunyai nilai yang seragam yaitu bernilai 1 http://softscients.blogspot.cohttp://softscients.blogspot.co
  74. 74. 65 Autocorrelation 6.6 7.5 5.5 M2 mempunyai nilai paling tinggi pada diagonal utamanya Optimasi: Faktor yang mempengaruhi hasil perhitungan GLCM adalah sudut yang digunakan. Maka beberapa referensi telah mengoptimasi agar hasil perhitungan tidak rancu yaitu menggunakan semua sudut sebagai perhitungan fitur tekstur. Berikut adalah hasil optimasi tersebut yang dapat memberikan gambaran menyeluruh bahwa ada perbedaan hasil untuk M1 dan M2 tapi untuk M3 tidak berubah sedikitpun yaitu jikalau hasil nya paling tinggi ataupun paling rendah Fitur M1 M2 M3 Energy 0.105 0.105 0.069 M1 dan M2 mempunyai keseragaman paling tinggi bila diukur dari berbagai arah Entropy 2.274 2.274 2.689 M3 mempunyai ketidakseragaman paling tinggi. Sedangkan M1 dan M2 bernilai sama Dissimiliarity 0.71 1.19 1.5 M3 bernilai paling tinggi karena paling acak Contrast 0.71 2.619 3.11 M1 mempunyai nilai pixel ketetanggan yang sama (paling tinggi) dibandingkan dengan M2 dan M3 Correlation 0.647 -0.0973 -0.259 M1 mempunyai linearitas paling tinggi Homogeneity 0.642 0.5476 0.411 M1 mempunyai nilai yang seragam kemudian disusul M2 dan M3 Autocorrelation 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 adalah stabil yaitu bernilai paling rendah ataupun paling tinggi. Kesimpulan: Penentuan sudut sangat mempengaruhi karena merupakan “sudut pandang” terhadap suatu citra maka sebaiknya menggunakan aturan berikut Jenis sudut kondisi Arah sudut tertentu Mensyaratkan hasil capture citra dalam kondisi arah tertentu Semua arah Tidak mensyaratkan pada arah tertentu (free angle) Bukan format Gray: GLCM bekerja dengan memandang sebuah citra dalam format gray apabila bekerja dengan format RGB maka perlu adanya konversi yaitu. http://softscients.blogspot.cohttp://softscients.blogspot.co
  75. 75. 66 Atau Penulis menyarankan untuk menggunakan persamaan no 2 dikarenakan mata manusia lebih peka terhadap warna hijau sehingga “penekanan” dilakukan pada warna hijau. Perhitungan GLCM dan Feature: Penulis telah menulis source code untuk melakukan perhitungan GLCM dan Feature yaitu di package Ext. Berikut penulis telah membuat Project dengan 2 versi yaitu berbentuk Versi console (nama project - Demo.Bab5.GLCMConsole) Terdiri dari contoh yaitu a. Matrix input yang digunakan 0 3 1 3 0 2 0 1 3 1 0 3 1 2 2 2 Hasil perhitungan matrix GLCM dan Feature sebagai berikut 1. Matrix GLCM 0 2 2 2 2 0 1 3 2 1 4 0 2 3 0 0 2. Matrix GLCM-Normalisasi 0 0.0833 0.0833 0.0833 0.0833 0 0.0417 0.125 0.0833 0.0417 0.1667 0 0.0833 0.125 0 0 3. Fitur Energy 0.104166666666667 Entropy 2.32577810771429 contrast 3.41666666666667 Correlation -0.466467958271237 Homogen 0.391666666666667 Dissimiliarity 1.58333333333333 Autocorrelation 5.5 http://softscients.blogspot.cohttp://softscients.blogspot.co
  76. 76. 67 b. Sampel citra yang digunakan gradient.bmp siluet.bmp acak.bmp Maka hasil nya sebagai berikut gradient siluet acak energy 0.00395232602845061 0.00686034145023157 0.00040826410627664 entropy 5.53582709668341 8.54614567695219 9.11881719904337 contrast 0 1997.10302087597 4764.90311986861 Correlation 1 0.583729759907239 0.000885246129725912 Homogen 0.999999999999997 0.202403069470656 0.040246187392743 Dissimiliarity 0 26.4556365124848 55.4604926108371 Autocorrelation 21547.6705882353 5966.94012279981 4562.05921182268 Source code Demo.Bab5.GLCMConsole 1 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; 9 10 11 namespace Demo.Bab5.GLCMConsole 12 { 13 14 class Program 15 { 16 17 public static void Main(string[] args) 18 { 19 20 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(); 26 27 Console.ReadKey(); 28 } 29 public void CalculateMatrixGLCM() http://softscients.blogspot.cohttp://softscients.blogspot.co
  77. 77. 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 GLCM 40 int nilaiMaksimal = 3;//intensitas maksimal 41 glcm.Process(M,Ext.GLCM.SUDUT_0,nilaiMaksimal);//proses 42 double [,]H = glcm.H; 43 double [,]T = glcm.T;//nilai matrix GLCM ternormalisasi 44 Console.WriteLine("Matrix GLCM"); 45 Ext.Utility.Prt.Print(H); 46 Console.WriteLine("nMatrix GLCM-Normalisasi"); 47 Ext.Utility.Prt.Print(T); 48 49 Ext.Feature feature = new Ext.Feature(); //class feature 50 feature.Process(T); //proses 51 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 //Debug 61 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(""); 74 75 } 76 public void CalculateMatirxGLCMCitra(String lokasiCitra) 77 { 78 Console.WriteLine("Perhitungan Feature - GLCM "+lokasiCitra+"n"); 79 //read file 80 Bitmap citraOri = (Bitmap)Bitmap.FromFile(lokasiCitra); 81 // jeda 3 detik 82 int jeda=1000; 83 84 //ubah kedalam format grayscale bila truecolor 85 if(citraOri.PixelFormat != PixelFormat.Format8bppIndexed) 86 { 87 //ubah ke gray 88 citraOri = AForge.Imaging. http://softscients.blogspot.cohttp://softscients.blogspot.co
  78. 78. 69 89 Filters. 90 Grayscale. 91 CommonAlgorithms. 92 RMY.Apply(citraOri); 93 94 } 95 //tampilkan 96 new Ext.Utility.ShowImage(). 97 InitShow( 98 new MyDataBitmap(lokasiCitra,citraOri,jeda) 99 ); 100 //baca pixel citra 101 Ext.ReadImage read= new Ext.ReadImage(citraOri); 102 Ext.GLCM glcm=new Ext.GLCM(); //class GLCM 103 //intensitas maksimal 104 int nilaiMaksimal=255; 105 //proses 106 glcm.Process(read.Gray,Ext.GLCM.SUDUT_90,nilaiMaksimal); 107 double [,]T=glcm.T;//nilai matrix GLCM ternormalisasi 108 Ext.Feature feature=new Ext.Feature(); //class feature 109 feature.Process(T); //proses 110 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 //Debug 119 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 } http://softscients.blogspot.cohttp://softscients.blogspot.co
  79. 79. 70 Versi GUI (nama project - Demo.Bab5GLCMGUI) menggunakan FORM serta library ZedGraph sebagai penampil grafiknya. http://softscients.blogspot.cohttp://softscients.blogspot.co
  80. 80. 71 http://softscients.blogspot.cohttp://softscients.blogspot.co
  81. 81. 72 PCA (PRINCIPAL COMPONENT ANALYST) Apakah pernah melihat film yang bercerita tentang betapa mudahnya sebuah komputer melakukan pelacakan sebuah wajah seseorang seketika dari ribuan database wajah. Salah satu teknologi olah citra dalam biometrika adalah pengenal wajah atau yang lebih dikenal dengan face recognition (berbeda dengan face detection - bila anda penggunan facebook akan ditemui pada fitur tag foto). Teknologi face recognition berkembang begitu cepat seiring dengan berkembangnya teknologi komputasi dari sisi hardware nya. Secara garis besar teknologi face recognition dapat dibedakan dalam 2 hal yaitu berbasis tektur dan berbasis geometri (mengukur jarak bagian wajah seperti hidung, mata, mulut, dahi). Apa hubungan PCA dengan face recognition? Hubungannya pada teknologi yang akan dipakai dalam face recognition dengan basis analisis tekstur. Citra wajah 2D sangat sulit dikenali / dihitung oleh sebuah komputer sehingga kita perlu membantu nya dengan teknik reduksi dimensi. Teknik reduksi dimensi yaitu Analisis Komponen Utama atau Principal Component Analyst (PCA)adalah teknik untuk melakukan reduksi suatu dimensi dalam ruang berdimensi Я. Perhitungan PCA Algoritma PCA sebagai salah satu teknik dalam face recognition dapat dibagi kedalam 2 bagian yaitu proses training dan proses testing. Training Berikut adalah langkah-langkah dalam melakukan proses training yang terdiri dari 7 langkah. 1. Pembuatan T matrix citra Pembuatan database yaitu menyusun suatu matrix yang terdiri dari (M*N)*Jumlah_Sampel. Misalkan ada 5 sampel yaitu 2 baris * 3 kolom * 5 sampel yang akan disusun menjadi T matrix (6*5) http://softscients.blogspot.cohttp://softscients.blogspot.co
  82. 82. 73 Matrix T_training Sampel 1 Sampel 2 Sampel 3 Sampel 4 Sampel 5 1 3 4 4 5 3 6 6 7 8 2 1 6 2 Menyusun T matrix yaitu mengubah tiap matrix sampel menjadi vector, seperti berikut Matrix T_Training Sampel1 Sampel2 Sampel3 Sampel4 Sampel5 1 9 3 9 4 6 6 5 7 4 8 6 1 1 8 2. Menghitung matrix mean = training1 training2 training3 training4 training5 Mean(m) 1 3 4 6 2 2 1 5 3.2 7 1 4 1 4 3.4 8 6 1 1 8 4.8 Matrix mean 5.6 5.6 4 3.2 3.4 4.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 0 2.8 -1.2 -1.2 3.6 -2.4 0.6 3.2 1.2 -3.8 Form ini Sengaja Tidak ditampilkan Sebagai Review Version Silahkan untuk membeli edisi Full version http://softscients.blogspot.com mulkan.ms@gmail.com http://softscients.blogspot.cohttp://softscients.blogspot.co
  83. 83. 74 4. Menghitung matrix kovarian L = AT * A matrix kovarian L 58.96 0.76 -18.84 -33.84 -7.04 0.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 A 5. Perhitungan eigen vector dan eigen value dari matrix L Misalkan sebuah matrix bujur sangkar dengan order n x n yaitu L, dan sebuah vector kolom X dalam ruang Eucledian Rn yang dihubungkan dengan persamaan LX = ʎX Dengan ʎadalah suatu skalar dan X adalah vector ≠0 maka ʎdinamakan dengan eigen value dari matrix L. Eigen value merupakan nilai karakteristik dari matrix bujur sangkar dan matrix X dinamanakan dengan eigen vector yang berkorespondensi dengan eigenvalue ʎ. Untuk menghitung eigen vector dan eigen value dapat menggunakan class EigenvalueDecomposition pada package Accord.Math.Decompositions dengan properties Eigenvectors sebagai eigen vector dan DiagonalMatrix sebagai eigen value Eigen value = ʎ Matrix eigen value X (unsort) 0-E13 0 0 0 0 0 5.4135 0 0 0 0 0 17.2862 0 0 0 0 0 51.2184 0 0 0 0 0 91.282 A B C D E Eigen vector = X Matrix 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 1 a = 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 http://softscients.blogspot.cohttp://softscients.blogspot.co
  84. 84. 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 2 a = L*X(2) 58.96 0.76 -18.84 -33.84 -7.04 * 0.2487 = 1.3482 0.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)*X 5.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 seterusnya memenuhi persamaan LX = ʎX 6. Urutkan eigen vector berdasarkan eigen value nya dari nilai terbesar sampai terkecil Eigen value = X Matrix eigen value X (sort) 0 0 0 0 0-E13 0 0 0 5.4135 0 0 0 17.2862 0 0 0 51.2184 0 0 0 91.282 0 0 0 0 E D C B A Eigen vector = V Matrix eigen vector V (sort) 0.7488 0.3592 -0.2202 0.2487 -0.4472 0.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.4472 0.1338 -0.8747 0.0647 0.1135 -0.4472 E D C B A http://softscients.blogspot.cohttp://softscients.blogspot.co
  85. 85. 76 7. Perhitungan (ruang wajah) matrix eigen face = A * Eigen vector matrix eigen face -4.4769 -4.3894 0.0581 1.3736 0E-12 -1.0358 -4.3209 -0.7054 -1.7201 0E-12 0.8308 -2.2003 -0.6806 0.0737 0E-12 3.9617 -1.4204 -0.7825 0.6893 0E-12 3.9361 -0.2753 -3.0902 0.2861 0E-12 6.1877 -2.5192 2.482 0.0727 0E-12 setelah melakukan proses training, maka langkah selanjutnya melakukan proses testing. Testing Proses testing yaitu melakukan test terhadap input matrix yang akan dihitung jarak eucledian terhadap matrix yang ada dalam matrix training. Terdapat 5 langkah untuk melakukan testing. Berikut kita mempunyai sebuah matrix testing yaitu Matrix T_Testing 3 5 3 2 1 8 Selanjut untuk dilakukan transformasi kedalam bentuk seperti berikut Matrix T_Testing 3 5 3 2 1 8 Matrix T_Testing diatas akan dihitung jarak eucledian menggunakan langkah berikut 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.5192 0.0581 -0.6806 -0.7825 -3.0902 2.4820 1.3736 0.0737 0.6893 0.2861 0.0727 0E-12 0E-12 0E-12 0E-12 0E-12 Matrix A n = 1 n = 2 n = 3 n = 4 n = 5 -4.6 -1.6 0.4 2.4 3.4 -2.6 0 2.8 3.6 3.2 Form ini Sengaja Tidak ditampilkan Sebagai Review Version Silahkan untuk membeli edisi Full version http://softscients.blogspot.com mulkan.ms@gmail.com http://softscients.blogspot.cohttp://softscients.blogspot.co
  86. 86. 77 Maka untuk projectedImages(1) = eigenface T * A(1) akan menghasilkan Selanjutnya untuk projectedImages(n = 1 … N) = eigenface T * A(n=1…N) yaitu 2. Perhitungan delta = T_Testing - mean T_Sample - mean = delta 3 5.6 -2.6000 5 5.6 -0.6000 3 4 -1.0000 2 3.2 -1.2000 1 3.4 -2.4000 8 4.8 3.2000 3. Menghitung projectedTestImages = eigenface T * delta projectedTestImages 17.0306 10.5090 17.2507 -3.8942 0 4. Menghitung jarak euclid(n) = {projectedTestImages, projectedImages (n)}. Misalkan untuk projectedImages (n = 1), projectedTestImages projectedImages( n = 1) Jarak euclid (n = 1) 17.0306 10.5090 17.2507 -3.8942 1.3463 0 0E-12 Selanjut nya untuk n = 1… N, maka Jarak euclid (n = 1) Keterangan n = 1 56.743 n = 2 17.607 Nilai terkecil n = 3 54.783 projectedImages (n = 1) 68.3502 18.3959 -3.8065 1.3463 0 Matrix projectedImages(n) n = 1 n = 2 n = 3 n = 4 n = 5 68.3502 18.3959 -3.8065 1.3463 0E-12 Form ini Sengaja Tidak ditampilkan Sebagai Review Version Silahkan untuk membeli edisi Full version http://softscients.blogspot.c om mulkan.ms@gmail.com http://softscients.blogspot.cohttp://softscients.blogspot.co
  87. 87. 78 n = 4 70.776 n = 5 57.99 5. Jarak terkecil yaitu pada n = 2, sehingga untuk T_Testing mirip dengan matrix T_Training no 2 T_Sample Mirip dengan T_Training no 2 3 4 5 5 3 3 2 2 1 1 8 6 Implementasi PCA untuk Face Recognition Penulis telah menulis source code untuk melakukan perhitungan PCA yaitu di package Ext sedangkan untuk operasi perhitungan matrix menggunakan library Accord. Berikut penulis telah membuat Project dengan 2 versi yaitu berbentuk. Versi Console (nama project - Demo.Bab6.PCAConsole) Dibagi menjadi 2 demo yaitu a. Menggunakan contoh matrix non citra DemoMatrix() b. Menggunakan contoh citra yang dbagi menjadi 2 tahap yaitu training DemoPCATrainingCitra() dan testing DemoPCATestingCitra(). Salah satu cara termudah untuk menyimpan database dalam bentuk sebuah object yaitu dengan konsep serialisasi. Pada class PCA yang bersifat [Serializable] maka class tersebut dapat disimpan dalam bentuk file biner. Hal ini sangat menguntungkan dikarenakan kita dapat menyimpan semua properties dari class tersebut. Sedangkan untuk database citra bersumber dari http://cswww.essex.ac.uk/mv/allfaces/faces94.zip. Agar memudahkan dalam mengenali cara kerja nya, penulis telah menyiapkan sejumlah contoh citra yaitu di folder Sample Citrasample PCA Berikut adalah tampilan dari demo untuk contoh matrix non citra Demo.Matrix() Tahap training ### 1 --> Matrix T 1 4 6 8 9 3 5 7 4 9 4 3 4 3 6 6 2 2 1 5 7 1 4 1 4 8 6 1 1 8 ### 2 --> mean data 5.6 5.6 4 3.2 3.4 4.8 ### 3 --> normalisasi data http://softscients.blogspot.cohttp://softscients.blogspot.co
  88. 88. 79 -4.6 -1.6 0.4 2.4 3.4 -2.6 -0.6 1.4 -1.6 3.4 0 -1 0 -1 2 2.8 -1.2 -1.2 -2.2 1.8 3.6 -2.4 0.6 -2.4 0.6 3.2 1.2 -3.8 -3.8 3.2 ### 4 --> Covariance data 58.96 0.76 -18.84-33.84-7.04 0.76 12.56 -6.04 1.96 -9.24 -18.84-6.04 18.36 14.36 -7.84 -33.841.96 14.36 34.36 -16.84 -7.04 -9.24 -7.84 -16.8440.96 ===### 5 --> Perhitungan eigen Perhitungan Vector Eigen -0.4472 0.2487 -0.2202 0.3592 0.7488 -0.4472 -0.4925 0.7141 0.2178 0.002 -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 Perhitungan Value Eigen 0 0 0 0 0 0 5.4135 0 0 0 0 0 17.2862 0 0 0 0 0 51.2184 0 0 0 0 0 91.282 ### 6 --> Sort Eigen Vector eigen 0.7488 0.3592 -0.2202 0.2487 -0.4472 0.002 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.4472 0.1338 -0.8747 0.0647 0.1135 -0.4472 Value eigen 91.2819572544627 5 1.2184294235861 17.2861584317404 5.41345489021076 -3.64767816963152E-15 ### 7 --> eigen face -4.4769 -4.3894 0.0581 1.3736 0 -1.0358 -4.3209 -0.7054 -1.72010 Form ini Sengaja Tidak ditampilkan Sebagai Review Version Silahkan untuk membeli edisi Full version http://softscients.blogspot.com mulkan.ms@gmail.com http://softscients.blogspot.cohttp://softscients.blogspot.co
  89. 89. 80 0.8308 -2.2003 -0.6806 0.0737 0 3.9617 -1.4204 -0.7825 0.6893 0 3.9361 -0.2753 -3.0902 0.2861 0 6.1877 -2.5192 2.482 0.0727 0 Tahap testing Matrix A Normalisasi -4.6 -1.6 0.4 2.4 3.4 -2.6 -0.6 1.4 -1.6 3.4 0 -1 0 -1 2 2.8 -1.2 -1.2 -2.2 1.8 3.6 -2.4 0.6 -2.4 0.6 3.2 1.2 -3.8 -3.8 3.2 eigenFace Transpose -4.4769 -1.0358 0.8308 3.9617 3.9361 6.1877 -4.3894 -4.3209 -2.2003 -1.4204 -0.2753 -2.5192 0.0581 -0.7054 -0.6806 -0.7825 -3.0902 2.482 1.3736 -1.7201 0.0737 0.6893 0.2861 0.0727 0 0 0 0 0 0 Matrix A ke 1 -4.6 -2.6 0 2.8 3.6 3.2 Hasil ProjectImages ke 1 68.3505 18.3962 -3.8061 1.3462 0 Matrix A ke 2 -1.6 -0.6 -1 -1.2 -2.4 1.2 Hasil ProjectImages ke 2 0.1783 11.1579 12.3448 http://softscients.blogspot.cohttp://softscients.blogspot.co
  90. 90. 81 -2.666 0 Matrix A ke 3 0.4 1.4 0 -1.2 0.6 -3.8 Hasil ProjectImages ke 3 -29.1466 3.3073 -11.3112 -2.7904 0 Matrix A ke 4 2.4 -1.6 -1 -2.2 -2.4 -3.8 Hasil ProjectImages ke 4 -51.5938 11.9377 1.6549 3.496 0 Matrix A ke 5 3.4 3.4 2 1.8 0.6 3.2 Hasil ProjectImages ke 5 12.2117 -44.7991 1.1177 0.6143 0 http://softscients.blogspot.cohttp://softscients.blogspot.co
  91. 91. 82 ### 1 --> Projected Images 68.3505 0.1783 -29.1466 -51.5938 12.2117 18.3962 11.1579 3.3073 11.9377 -44.7991 -3.8061 12.3448 -11.3112 1.6549 1.1177 1.3462 -2.666 -2.7904 3.496 0.6143 0 0 0 0 0 ### 2 --> delta -2.6 -0.6 -1 -1.2 -2.4 3.2 ### 3 --> projectedtestimage 17.0306 10.5089 17.2508 -3.8943 0 ### 4 --> perhitungan jarak 56.274328072399 17.606816861659 54.7832091064406 7 0.775702045264 57.9896542497021 jarak euclid 56.274 17.607 54.783 70.776 57.99 jarak minimal yaitu 17.606816861659 berada pada 2 dengan nama data training 2 Berikut adalah tampilan dari demo untuk contoh citra DemoPCATrainingCitra() dan DemoPCATestingCitra() Tahap training lokasi file ke [1] D:Sample Citrasample PCAtrainingtony.1.jpg lokasi file ke [2] D:Sample Citrasample PCAtrainingtony.10.jpg lokasi file ke [3] D:Sample Citrasample PCAtrainingtony.11.jpg lokasi file ke [4] D:Sample Citrasample PCAtrainingtony.12.jpg lokasi file ke [5] D:Sample Citrasample PCAtrainingtony.13.jpg [dilanjutkan…….] lokasi file ke [120] D:Sample Citrasample PCAtrainingyfhsie.8.jpg lokasi file ke [121] D:Sample Citrasample PCAtrainingyfhsie.9.jpg Proses pelatihan... tunggu Proses serialisasi data ..... tunggu penyimpanan data selesai tahap testing http://softscients.blogspot.cohttp://softscients.blogspot.co

×