buku cara cepat pengolahan citra dengan c# sharp

104
i http://softscients.blogspot.com http://softscients.blogspot.com

Upload: wwwsoftscientswebid

Post on 19-Jun-2015

2.785 views

Category:

Engineering


21 download

DESCRIPTION

buku cara cepat pengolahan citra dengan c# sharp

TRANSCRIPT

Page 1: buku cara cepat pengolahan citra dengan c# sharp

i

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 2: buku cara cepat pengolahan citra dengan c# sharp

ii

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

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

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

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 3: buku cara cepat pengolahan citra dengan c# sharp

iii

Yogyakarta, Januari 2012

Mulkan Syarif

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 4: buku cara cepat pengolahan citra dengan c# sharp

iv

DAFTAR ISI

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

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

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

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

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

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

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

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

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 5: buku cara cepat pengolahan citra dengan c# sharp

v

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

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

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

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

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 6: buku cara cepat pengolahan citra dengan c# sharp

vi

Konsep Olah Citra

IDE Sharp Develop 4.1

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 7: buku cara cepat pengolahan citra dengan c# sharp

vii

Framework AForge.Net- Accord.Net

Operasi Dasar Olah Citra

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 8: buku cara cepat pengolahan citra dengan c# sharp

viii

Analisis Tekstur

PCA (Principal Component Analyst)

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 9: buku cara cepat pengolahan citra dengan c# sharp

ix

Interfacing Webcam

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 10: buku cara cepat pengolahan citra dengan c# sharp

1

OLAH CITRA

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 11: buku cara cepat pengolahan citra dengan c# sharp

2

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

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

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

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

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

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

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

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

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 12: buku cara cepat pengolahan citra dengan c# sharp

3

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

class,menghasilkan

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

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

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

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

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 13: buku cara cepat pengolahan citra dengan c# sharp

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) kombinasiwarna, sehingga kombinasi tiga komponen RGB tersebut mempunyai kombinasiwarna 255x255x255. Alpha komponen mewakili aspek transparan dari warna yangakan terlihat ketika beberapa warna digabungkan. Sistem Koordinat Standar GDI+tidak seperti sistem kartesian, pada perangkat tampilan seperti monitor sumbu(0,0) terletak pada pojok kiri atas.

Komponen Warna Koordinat

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 14: buku cara cepat pengolahan citra dengan c# sharp

5

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

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 15: buku cara cepat pengolahan citra dengan c# sharp

6

IDE SHARP DEVELOP

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 16: buku cara cepat pengolahan citra dengan c# sharp

7

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

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

a. References : berisi libraryyang digunakan

b. Properties : berisi info dansetting application

c. *.cs : berisi source code program

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 17: buku cara cepat pengolahan citra dengan c# sharp

8

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

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 18: buku cara cepat pengolahan citra dengan c# sharp

9

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

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 19: buku cara cepat pengolahan citra dengan c# sharp

10

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

Component Default Component Zedgraph

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

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 20: buku cara cepat pengolahan citra dengan c# sharp

11

Semua library dan component dapat digunakan dengan menambahkan keywordusing seperti berikuth

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 21: buku cara cepat pengolahan citra dengan c# sharp

12

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

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

yaitu Demo.Bab2GUI

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

Console Window

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 22: buku cara cepat pengolahan citra dengan c# sharp

13

Tampilan Console Tampilan Form

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 23: buku cara cepat pengolahan citra dengan c# sharp

14

FRAMEWORK AFORGE.NET- ACCORD.NET

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 24: buku cara cepat pengolahan citra dengan c# sharp

15

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

Modul AForge dan AccordFitur framework AForge

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

Fitur framework Accord1. Scientific Computing

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

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

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

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 25: buku cara cepat pengolahan citra dengan c# sharp

16

Isi dari Folder Hasil Install AForge dan Accord.Net

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

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

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

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

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 26: buku cara cepat pengolahan citra dengan c# sharp

17

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

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

image kedalam component PictureBox10 - 11 Menampilkan info kedalam component PropertyGrid

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 27: buku cara cepat pengolahan citra dengan c# sharp

18

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

1. Mode console2. Mode debug

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

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

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

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 28: buku cara cepat pengolahan citra dengan c# sharp

19

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

Maka akan tampil jendela console seperti berikut

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

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

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 29: buku cara cepat pengolahan citra dengan c# sharp

20

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

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

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

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 30: buku cara cepat pengolahan citra dengan c# sharp

21

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

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

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

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

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

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

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 31: buku cara cepat pengolahan citra dengan c# sharp

22

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

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

Sedangkan untuk sampel citra nya yaitu terdiri dari

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 32: buku cara cepat pengolahan citra dengan c# sharp

23

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 33: buku cara cepat pengolahan citra dengan c# sharp

24

86 //tampilkan dalam bentuk dialog87 MessageBox.Show(88 matrix.ToString(89 CSharpMatrixFormatProvider.InvariantCulture),90 "pixel gray");91 //tampilkan dalam bentuk tabel92 Accord.Controls.DataGridBox.Show(matrix, nonBlocking: true)93 .SetAutoSizeColumns(DataGridViewAutoSizeColumnsMode.Fill)94 .SetAutoSizeRows(DataGridViewAutoSizeRowsMode95 .AllCellsExceptHeaders)96 .SetDefaultFontSize(5)97 .WaitForClose();9899 //# 2 --> Ext.100 ReadImage read = new ReadImage(bitmapGrayscale);101 byte [,] gray = read.Gray;102 //tampilkan ke console103 Ext.Utility.Prt.Print(gray);104 for (int i=0;i<gray.GetLength(0);i++)105 {106 for (int j=0;j<gray.GetLength(1);j++)107 {108 //tampilkan dalam mode debug109 System.Diagnostics.Debug.Write(gray[i,j]+" ");110 }111 System.Diagnostics.Debug.WriteLine("");112 }113114 }115 public void AkesPixelTrueColor()116 {117 //# 1 --> Accord118 double [,]matrix;119 ImageToMatrix im2mat = new ImageToMatrix(0,255,1); //red120 im2mat.Convert(bitmapTrueColor,out matrix);121122 im2mat = new ImageToMatrix(0,255,2); //blue123 im2mat.Convert(bitmapTrueColor,out matrix);124125 im2mat = new ImageToMatrix(0,255,3); //green126 im2mat.Convert(bitmapTrueColor,out matrix);127128 //# 2 --> Ext.129 ReadImage read = new ReadImage(bitmapTrueColor);130 byte [,] red = read.Red;131 byte [,] green = read.Green;132 byte [,] blue = read.Blue;133134 }135 public void Matrix2CitraGray()136 {137 //# 1 --> membuat citra gray dari matrix - Accord138 double [,]gray;139 //baca140 ImageToMatrix im2mat = new ImageToMatrix(0,255);141 im2mat.Convert(bitmapGrayscale,out gray);142 //tulis143 MatrixToImage mat2image = new MatrixToImage(0,255);144 Bitmap bitmapHasil;

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 34: buku cara cepat pengolahan citra dengan c# sharp

25

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 35: buku cara cepat pengolahan citra dengan c# sharp

26

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 36: buku cara cepat pengolahan citra dengan c# sharp

27

263264 }

a.1 b.2

b.1 b.2

b.3 b.4

c.1 c.2

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 37: buku cara cepat pengolahan citra dengan c# sharp

28

d.1 d.2

d.3 e

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

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

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

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

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 38: buku cara cepat pengolahan citra dengan c# sharp

29

d.2d.3

truecolor untuk layer pixel matrix red (merah)

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

Operasi konversi ke graycolor dan black white dari AForge

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 39: buku cara cepat pengolahan citra dengan c# sharp

30

OPERASI DASAR OLAH CITRA

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

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 40: buku cara cepat pengolahan citra dengan c# sharp

31

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

Form ini Sengaja Tidak ditampilkan

Sebagai

Review Version

Silahkan untuk membeli edisi

Full version

http://softscients.blogspot.com

[email protected]

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 41: buku cara cepat pengolahan citra dengan c# sharp

32

Maka akan terlihat seperti berikut

Berikut untuk perhitungan yang lainnya

Form ini Sengaja Tidak ditampilkan

Sebagai

Review Version

Silahkan untuk membeli edisi

Full version

http://softscients.blogspot.com

[email protected]

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 42: buku cara cepat pengolahan citra dengan c# sharp

33

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

Sharpen Blur Emboss

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

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

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

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

Form ini Sengaja Tidakditampilkan

Sebagai

Review Version

Silahkan untuk membeli edisi

Full version

http://softscients.blogspot.com

[email protected]

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 43: buku cara cepat pengolahan citra dengan c# sharp

34

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

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

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

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

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

Form ini Sengaja Tidakditampilkan

Sebagai

Review Version

Silahkan untuk membeli edisi

Full version

http://softscients.blogspot.com

[email protected]

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 44: buku cara cepat pengolahan citra dengan c# sharp

35

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 45: buku cara cepat pengolahan citra dengan c# sharp

36

108109110111 }112113114 }115116 }

a

b c.1

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 46: buku cara cepat pengolahan citra dengan c# sharp

37

c.3 Operasi konvolusi AForge - Filter Blur

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

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

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

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 47: buku cara cepat pengolahan citra dengan c# sharp

38

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 48: buku cara cepat pengolahan citra dengan c# sharp

39

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

a b.1

b.2 b.3

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 49: buku cara cepat pengolahan citra dengan c# sharp

40

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

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

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

Form ini Sengaja Tidak ditampilkan

Sebagai

Review Version

Silahkan untuk membeli edisi

Full version

http://softscients.blogspot.com

[email protected]

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 50: buku cara cepat pengolahan citra dengan c# sharp

41

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Form ini Sengaja Tidak ditampilkan

Sebagai

Review Version

Silahkan untuk membeli edisi

Full version

http://softscients.blogspot.com

[email protected]

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 51: buku cara cepat pengolahan citra dengan c# sharp

42

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 52: buku cara cepat pengolahan citra dengan c# sharp

43

66 otsu.Process(gray);67 //nilai T68 int T = otsu.T;69 Console.WriteLine("nilai otsu "+T.ToString());7071 //## 1 --> cara ke 172 for (int i = 0; i<gray.GetLength(0);i++)73 {7475 for (int j = 0; j<gray.GetLength(1);j++)76 {7778 if(gray[i,j]>=otsu.T)79 {80 gray[i,j]=255;81 }else{82 gray[i,j]=0;83 }84 }8586 }87 Ext.CreateImage create=new Ext.CreateImage(gray);88 new Ext.Utility.ShowImage().89 InitShow(90 new MyDataBitmap("BW -- 1 ",91 create.Btmp92 )93 );9495 //## 2 --> cara ke 296 Threshold tr=new Threshold(T);9798 new Ext.Utility.ShowImage().99 InitShow(100 new MyDataBitmap("BW -- 2",101 tr.Apply(bitmapGrayscale)102 )103 );104105 }106 public void operasiBWAforge()107 {108109 OtsuThreshold tr=new OtsuThreshold();110 new Ext.Utility.ShowImage().111 InitShow(112 new MyDataBitmap("BW -- 3",113 tr.Apply(bitmapGrayscale)114 )115 );116117 }118119 }120121 }

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 53: buku cara cepat pengolahan citra dengan c# sharp

44

a.1 a.2

a.3 a.4

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 54: buku cara cepat pengolahan citra dengan c# sharp

45

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

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

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

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

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

Form ini Sengaja Tidak ditampilkan

Sebagai

Review Version

Silahkan untuk membeli edisi

Full version

http://softscients.blogspot.com

[email protected]

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 55: buku cara cepat pengolahan citra dengan c# sharp

46

Form ini Sengaja Tidak ditampilkan

Sebagai

Review Version

Silahkan untuk membeli edisi

Full version

http://softscients.blogspot.com

[email protected]

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 56: buku cara cepat pengolahan citra dengan c# sharp

47

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

Form ini Sengaja Tidak ditampilkan

Sebagai

Review Version

Silahkan untuk membeli edisi

Full version

http://softscients.blogspot.com

[email protected]

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 57: buku cara cepat pengolahan citra dengan c# sharp

48

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

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 58: buku cara cepat pengolahan citra dengan c# sharp

49

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

a.1 a.2

a.3 a.4

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 59: buku cara cepat pengolahan citra dengan c# sharp

50

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

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

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

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

Blob8Bit.bmp

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 60: buku cara cepat pengolahan citra dengan c# sharp

51

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

ketetanggan4 81 1 1 1

1 4 1 1 8 11 1 1 1

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

0 00 01 10 00 00 00 00 0

0 0 0 0 1 1 0 1 0

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

8 tetangga0 0 0 0 0 0 0 0 010000000

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

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

Form ini Sengaja Tidak ditampilkan

Sebagai

Review Version

Silahkan untuk membeli edisi

Full version

http://softscients.blogspot.com

[email protected]

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 61: buku cara cepat pengolahan citra dengan c# sharp

52

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

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

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

Posisi x’ dan y’ adalah koordinat layar bukan koordinat kartesius.

Momen Pusat µMomen yang bersesuai dengan titik tengah suatu area

Momen ternormalisasi dinyatakan dengan persamaan berikut,

dengan

Form ini Sengaja Tidak ditampilkan

Sebagai

Review Version

Silahkan untuk membeli edisi

Full version

http://softscients.blogspot.com

[email protected]

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 62: buku cara cepat pengolahan citra dengan c# sharp

53

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

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

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

Form ini Sengaja Tidak ditampilkan

Sebagai

Review Version

Silahkan untuk membeli edisi

Full version

http://softscients.blogspot.com

[email protected]

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 63: buku cara cepat pengolahan citra dengan c# sharp

54

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 64: buku cara cepat pengolahan citra dengan c# sharp

55

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

Form ini Sengaja Tidak ditampilkan

Sebagai

Review Version

Silahkan untuk membeli edisi

Full version

http://softscients.blogspot.com

[email protected]

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 65: buku cara cepat pengolahan citra dengan c# sharp

56

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

a

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 66: buku cara cepat pengolahan citra dengan c# sharp

57

b.1 b.2

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

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

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

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

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

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

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

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 67: buku cara cepat pengolahan citra dengan c# sharp

58

Bila diplotkan kedalam grafik akan tampil seperti berikut

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 68: buku cara cepat pengolahan citra dengan c# sharp

59

ANALISIS TEKSTUR

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

a. Pengulangan pola dari variasi lokal sehingga membentuk kesatuan yangutuh

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

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

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

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

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 69: buku cara cepat pengolahan citra dengan c# sharp

60

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

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

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

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

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 70: buku cara cepat pengolahan citra dengan c# sharp

61

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

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

Maka tentukan P1,0(M) yaitu matrix GLCM dari jarak 1 untuk sudut 0o

1. Buatlah matrix pasangan yaitu0 1 2

012

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,0b 0,1 1,0c 1,2 2,1d 2,0 0,2efghijkl 1,1 1,1

Form ini Sengaja Tidak ditampilkan

Sebagai

Review Version

Silahkan untuk membeli edisi

Full version

http://softscients.blogspot.com

[email protected]

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 71: buku cara cepat pengolahan citra dengan c# sharp

62

Sehingga matrix GLCM nya adalah0 1 2

012

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

0.1667 0.1250 0.20830.1250 0.0833 0.04170.2083 0.0417 0

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

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

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

f1 = 0.1042

Form ini Sengaja Tidak ditampilkan

Sebagai

Review Version

Silahkan untuk membeli edisi

Full version

http://softscients.blogspot.com

[email protected]

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 72: buku cara cepat pengolahan citra dengan c# sharp

63

2. Entropy

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

f2 = 2.325

3. Dissimilarity

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

f3 = 1.5833

4. Contrast/inertia

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

f4 = 3.416

5. Correlation

Dengan

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

x = 1.1649y = 1.1649

Hasil perhitungan diatas adalahf5 = 0.1042

6. Homogeneity/inverse difference moment

Form ini Sengaja Tidak ditampilkan

Sebagai

Review Version

Silahkan untuk membeli edisi

Full version

http://softscients.blogspot.com

[email protected]

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 73: buku cara cepat pengolahan citra dengan c# sharp

64

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

f6 = 0.3927. Autocorrelation

Mengukur correlation diantara garis diagonal utama. Hasil nya contoh diatasadalah

f7 = 5.5

Catatan:i dan j menggunakan nilai initial 1 bukan 0

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

gra

y

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

glc

m

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

glcm

Nor

m

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

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

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

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

tinggi bila diukur dari sudut 0o

Entropy 1.791 1.386 2.325 M3 mempunyai ketidakseragamanpaling tinggi hal ini menandakan entropymempunyai hubungan terbalik secarakuat dengan hasil energy

Dissimiliarity 1 0 1.583 M3 bernilai paling tinggi karena palingacak

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

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

bernilai 1

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 74: buku cara cepat pengolahan citra dengan c# sharp

65

Autocorrelation 6.6 7.5 5.5 M2 mempunyai nilai paling tinggi padadiagonal utamanya

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

paling tinggi bila diukur dari berbagaiarah

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

Dissimiliarity 0.71 1.19 1.5 M3 bernilai paling tinggi karena palingacak

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

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

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

diagonal utamanya

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

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

tertentuSemua arah Tidak mensyaratkan pada arah tertentu (free angle)

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 75: buku cara cepat pengolahan citra dengan c# sharp

66

Atau

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

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

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

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

Hasil perhitungan matrix GLCM dan Feature sebagai berikut1. Matrix GLCM

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

2. Matrix GLCM-Normalisasi

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

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 76: buku cara cepat pengolahan citra dengan c# sharp

67

b. Sampel citra yang digunakan

gradient.bmp siluet.bmp acak.bmp

Maka hasil nya sebagai berikutgradient siluet acak

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

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 77: buku cara cepat pengolahan citra dengan c# sharp

68

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 78: buku cara cepat pengolahan citra dengan c# sharp

69

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 79: buku cara cepat pengolahan citra dengan c# sharp

70

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 80: buku cara cepat pengolahan citra dengan c# sharp

71

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 81: buku cara cepat pengolahan citra dengan c# sharp

72

PCA (PRINCIPAL COMPONENT ANALYST)

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

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

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 82: buku cara cepat pengolahan citra dengan c# sharp

73

Matrix T_trainingSampel 1 Sampel 2 Sampel 3 Sampel 4 Sampel 5

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

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

Matrix T_Training

Sam

pel

1

Sam

pel

2

Sam

pel

3

Sam

pel

4

Sam

pel

5

1 93 94 66 57 48 6 1 1 8

2. Menghitung matrix mean =

trai

nin

g1

trai

nin

g2

trai

nin

g3

trai

nin

g4

trai

nin

g5

Mea

n(m

)

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

Matrix mean

5.65.64

3.23.44.8

3. Menghitung matrix normalisasi A =matrix normalisasi A

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

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

Form ini Sengaja Tidakditampilkan

Sebagai

Review Version

Silahkan untuk membeli edisi

Full version

http://softscients.blogspot.com

[email protected]

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 83: buku cara cepat pengolahan citra dengan c# sharp

74

4. Menghitung matrix kovarian L = AT * A

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

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

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

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

LX = ʎX

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

Eigen value = ʎMatrix eigen value X (unsort)

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

Eigen vector = XMatrix eigen vector V (unsort)

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

A B C D E

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

58.96 0.76 -18.84 -33.84 -7.04

*

-0.4472

=

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

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

*keterangan: karena nilai sangat kecil maka dianggap = 0

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 84: buku cara cepat pengolahan citra dengan c# sharp

75

b = ʎ(1,1)*X

0-E13 *

-0.4472 0.2487 -0.2202 0.3592 0.7488

=

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

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

58.96 0.76 -18.84 -33.84 -7.04

*

0.2487

=

1.34820.76 12.56 -6.04 1.96 -9.24 -0.4925 -2.6661

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

b = ʎ(2,2)*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 seterusnyamemenuhi persamaan

LX = ʎX

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

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

91.282 0 0 0 0E D C B A

Eigen vector = VMatrix eigen vector V (sort)

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

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

E D C B A

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 85: buku cara cepat pengolahan citra dengan c# sharp

76

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

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

setelah melakukan proses training, maka langkah selanjutnya melakukan prosestesting.

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

Matrix T_Testing3 5 32 1 8

Selanjut untuk dilakukan transformasi kedalam bentuk seperti berikutMatrix T_Testing

353218

Matrix T_Testing diatas akan dihitung jarak eucledian menggunakan langkahberikut

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

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

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

02.83.63.2

Form ini Sengaja Tidak ditampilkan

Sebagai

Review Version

Silahkan untuk membeli edisi

Full version

http://softscients.blogspot.com

[email protected]

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 86: buku cara cepat pengolahan citra dengan c# sharp

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

=

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

3. Menghitung projectedTestImages = eigenface T * delta

projectedTestImages17.030610.509017.2507-3.8942

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

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

10.509017.2507-3.8942 1.3463

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

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

projectedImages (n = 1)68.350218.3959-3.80651.3463

0

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

68.350218.3959-3.80651.34630E-12

Form ini Sengaja Tidakditampilkan

Sebagai

Review Version

Silahkan untuk membeliedisi

Full version

http://softscients.blogspot.com

[email protected]

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 87: buku cara cepat pengolahan citra dengan c# sharp

78

n = 4 70.776n = 5 57.99

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

T_Sample

Miripdengan

T_Training no 23 45 53 32 21 18 6

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

Versi Console (nama project - Demo.Bab6.PCAConsole)Dibagi 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 satucara termudah untuk menyimpan database dalam bentuk sebuah objectyaitu dengan konsep serialisasi. Pada class PCA yang bersifat [Serializable]maka class tersebut dapat disimpan dalam bentuk file biner. Hal ini sangatmenguntungkan dikarenakan kita dapat menyimpan semua properties dariclass tersebut. Sedangkan untuk database citra bersumber darihttp://cswww.essex.ac.uk/mv/allfaces/faces94.zip. Agar memudahkandalam mengenali cara kerja nya, penulis telah menyiapkan sejumlah contohcitra yaitu di folder Sample Citra\sample PCA\

Berikut adalah tampilan dari demo untuk contoh matrix non citra Demo.Matrix()Tahap training### 1 --> Matrix T

1 4 6 8 93 5 7 4 94 3 4 3 66 2 2 1 57 1 4 1 48 6 1 1 8

### 2 --> mean data

5.6 5.6 4 3.2 3.4 4.8

### 3 --> normalisasi data

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 88: buku cara cepat pengolahan citra dengan c# sharp

79

-4.6 -1.6 0.4 2.4 3.4-2.6 -0.6 1.4 -1.6 3.40 -1 0 -1 22.8 -1.2 -1.2 -2.2 1.83.6 -2.4 0.6 -2.4 0.63.2 1.2 -3.8 -3.8 3.2

### 4 --> Covariance data

58.96 0.76 -18.84-33.84-7.040.76 12.56 -6.04 1.96 -9.24-18.84-6.04 18.36 14.36 -7.84-33.841.96 14.36 34.36 -16.84-7.04 -9.24 -7.84 -16.8440.96

===### 5 --> Perhitungan eigenPerhitungan 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 00 5.4135 0 0 00 0 17.2862 0 00 0 0 51.2184 00 0 0 0 91.282

### 6 --> Sort EigenVector eigen

0.7488 0.3592 -0.2202 0.2487 -0.44720.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.44720.1338 -0.8747 0.0647 0.1135 -0.4472

Value eigen

91.2819572544627 51.218429423586117.28615843174045.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

[email protected]

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 89: buku cara cepat pengolahan citra dengan c# sharp

80

0.8308 -2.2003 -0.6806 0.0737 03.9617 -1.4204 -0.7825 0.6893 03.9361 -0.2753 -3.0902 0.2861 06.1877 -2.5192 2.482 0.0727 0

Tahap testingMatrix A Normalisasi

-4.6 -1.6 0.4 2.4 3.4-2.6 -0.6 1.4 -1.6 3.40 -1 0 -1 22.8 -1.2 -1.2 -2.2 1.83.6 -2.4 0.6 -2.4 0.63.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.51920.0581 -0.7054 -0.6806 -0.7825 -3.0902 2.4821.3736 -1.7201 0.0737 0.6893 0.2861 0.07270 0 0 0 0 0

Matrix A ke 1

-4.6-2.602.83.63.2

Hasil ProjectImages ke 1

68.350518.3962-3.80611.34620

Matrix A ke 2

-1.6-0.6-1-1.2-2.41.2

Hasil ProjectImages ke 2

0.178311.157912.3448

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 90: buku cara cepat pengolahan citra dengan c# sharp

81

-2.6660

Matrix A ke 3

0.41.40-1.20.6-3.8

Hasil ProjectImages ke 3

-29.14663.3073-11.3112-2.79040

Matrix A ke 4

2.4-1.6-1-2.2-2.4-3.8

Hasil ProjectImages ke 4

-51.593811.93771.65493.4960

Matrix A ke 5

3.43.421.80.63.2

Hasil ProjectImages ke 5

12.2117-44.79911.11770.61430

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 91: buku cara cepat pengolahan citra dengan c# sharp

82

### 1 --> Projected Images

68.3505 0.1783 -29.1466 -51.5938 12.211718.3962 11.1579 3.3073 11.9377 -44.7991-3.8061 12.3448 -11.3112 1.6549 1.11771.3462 -2.666 -2.7904 3.496 0.61430 0 0 0 0### 2 --> delta

-2.6-0.6-1-1.2-2.43.2

### 3 --> projectedtestimage

17.030610.508917.2508-3.89430

### 4 --> perhitungan jarak

56.27432807239917.60681686165954.7832091064406 70.77570204526457.9896542497021

jarak euclid

56.274 17.607 54.783 70.776 57.99

jarak minimal yaitu 17.606816861659 berada pada 2dengan nama data training 2

Berikut adalah tampilan dari demo untuk contoh citra DemoPCATrainingCitra()dan DemoPCATestingCitra()Tahap traininglokasi file ke [1] D:\Sample Citra\sample PCA\training\tony.1.jpglokasi file ke [2] D:\Sample Citra\sample PCA\training\tony.10.jpglokasi file ke [3] D:\Sample Citra\sample PCA\training\tony.11.jpglokasi file ke [4] D:\Sample Citra\sample PCA\training\tony.12.jpglokasi file ke [5] D:\Sample Citra\sample PCA\training\tony.13.jpg[dilanjutkan…….]lokasi file ke [120] D:\Sample Citra\sample PCA\training\yfhsie.8.jpglokasi file ke [121] D:\Sample Citra\sample PCA\training\yfhsie.9.jpgProses pelatihan... tungguProses serialisasi data ..... tunggupenyimpanan data selesaitahap testing

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 92: buku cara cepat pengolahan citra dengan c# sharp

83

Proses deserialisasi data... tungguProses testing ..... tunggucitra testing yaitu D:\Sample Citra\sample PCA\testing/tony.18.jpgjarakjarak minimal yaitu 19761331.2405133 berada pada 2dengan nama D:\Sample Citra\sample PCA\training\tony.10.jpg

a b

Keterangan:a Citra test yang akan dicari didalam data trainingb Citra yang ditampilkan didalam database

Source code Demo.Bab6.PCAConsole1 using System;2 using System.Collections;3 using System.Runtime.Serialization;4 using System.Drawing;5 using System.IO;6 using System.Runtime.Serialization;7 using System.Runtime.Serialization.Formatters.Binary;8 using AForge;9 using Accord.Math;10 using Ext;11 using Ext.Utility;12 namespace Demo.Bab6.PCAConsole13 {1415 class Program16 {17 public static void Main(string[] args)18 {19 Console.WindowWidth=135; //lebar console20 Program program=new Program();21 //program.DemoMatrix();22 //program.DemoPCATrainingCitra();23 program.DemoPCATestingCitra();24 Console.ReadKey(true);25 }

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 93: buku cara cepat pengolahan citra dengan c# sharp

84

26 public void DemoMatrix()27 {2829 //### 1 --> persiapan data training30 ArrayList dataTraining=new ArrayList();31 dataTraining.Insert(0,new NameAndData("data training 1",32 new byte[,]{33 {1,3,4},{6,7,8}}));34 dataTraining.Insert(1,new NameAndData("data training 2",35 new byte[,]{36 {4,5,3},{2,1,6}}));37 dataTraining.Insert(2,new NameAndData("data training 3",38 new byte[,]{39 {6,7,4},{2,4,1}}));40 dataTraining.Insert(3,new NameAndData("data training 4",41 new byte[,]{42 {8,4,3},{1,1,1}}));43 dataTraining.Insert(4,new NameAndData("data training 5",44 new byte[,]{45 {9,9,6},{5,4,8}}));4647 //### 2 --> perhitungan PCA48 PCA pca=new PCA(); //instance class49 pca.Debug=true; // tampilkan semua komentar50 pca.ProcessTraining(dataTraining); // proses training515253 //### 3 --> data testing54 ArrayList dataTest=new ArrayList();55 dataTest.Insert(0,new NameAndData("test saja",56 new byte[,]{57 {3,5,3},{2,1,8}}));585960 //### 4 --> proses testing61 pca.ProcessTest(pca.MeanData,pca.AData,pca.EigenFace,dataTest);626364 //### 5 --> jarak euclid65 Console.WriteLine("jarak euclid ");66 Ext.Utility.Prt.Print(Matrix.Round(pca.Shift,3));67 double jarakMin=Matrix.Min(pca.Shift); //jarak terkecil68 Console.WriteLine(" jarak minimal yaitu "+jarakMin+69 " berada pada "+70 (Array.IndexOf(pca.Shift,jarakMin)+1));71 //debug72 System.Diagnostics.Debug.WriteLine("jarak euclid ");73 Ext.Utility.Prt.Debug(Matrix.Round(pca.Shift,3));74 System.Diagnostics.Debug.WriteLine(" jarak minimal yaitu "+75 jarakMin+76 " berada pada "+77 (Array.IndexOf(pca.Shift,jarakMin)+1));7879 NameAndData hasil=(NameAndData)dataTraining[Array.80 IndexOf(81 pca.Shift,jarakMin)];82 Console.WriteLine("dengan nama "+hasil.NamaFile);83 //debug84 System.Diagnostics.Debug.WriteLine("dengan nama "+hasil.NamaFile);

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 94: buku cara cepat pengolahan citra dengan c# sharp

85

8586 }87 public void DemoPCATrainingCitra(){88 Console.WriteLine("citra pelatihan");89 Bitmap bitmap;90 Bitmap gray;91 Ext.ReadImage read;92 ArrayList dataTraining=new ArrayList();93 //### 1 --> persiapan data training94 string[] lokasiFileTraining = Directory.95 GetFiles(@"D:\Sample Citra\sample PCA\training",96 "*.jpg");97 for (int i=0;i<lokasiFileTraining.GetLength(0);i++){98 Console.WriteLine("lokasi file ke ["+(i+1)+"] "+99 lokasiFileTraining[i]);100 //debug101 System.Diagnostics.Debug.WriteLine("lokasi file ke ["+(i+1)+"] "+102 lokasiFileTraining[i]);103104 bitmap=(Bitmap)Image.FromFile(lokasiFileTraining[i]);105 gray=AForge.Imaging.Filters.106 Grayscale.107 CommonAlgorithms.108 RMY.Apply(bitmap);//convert ke gray109 read=new ReadImage(gray);//mendapatkan nilai pixel nya110 dataTraining.Insert(i,new NameAndData(lokasiFileTraining[i],111 read.Gray));//update ke array112 }113 //### 2 --> perhitungan PCA114 Console.WriteLine("Proses pelatihan... tunggu");115 //debug116 System.Diagnostics.Debug.WriteLine("Proses pelatihan... tunggu");117 PCA pca=new PCA();118 pca.ProcessTraining(dataTraining); //proses training119 Console.WriteLine("Proses serialisasi data ..... tunggu");120 //debug121 System.Diagnostics.Debug.WriteLine("Proses serialisasi data ..... tunggu");122 //### 3 --> simpan kedalam file biner123 Stream streamWrite = File.Create(@"D:/pca.obj");124 BinaryFormatter binaryWrite = new BinaryFormatter();125 binaryWrite.Serialize(streamWrite,pca);126 streamWrite.Close();127 Console.WriteLine("penyimpanan data selesai");128 //debug129 System.Diagnostics.Debug.WriteLine("penyimpanan data selesai");130131 }132 public void DemoPCATestingCitra()133 {134 Console.WriteLine("Proses deserialisasi data... tunggu");135 //debug136 System.Diagnostics.Debug.WriteLine("Proses deserialisasi data... tunggu");137 PCA pca= new PCA();138 //### 1 --> membaca file biner139 Stream streamRead=null;140 try{141 streamRead = File.OpenRead("D:/pca.obj");142 BinaryFormatter binaryRead = new BinaryFormatter();143 pca= (PCA) binaryRead.Deserialize(streamRead);

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 95: buku cara cepat pengolahan citra dengan c# sharp

86

144 streamRead.Close();145146 }147 catch{148 Console.WriteLine("tidak ada file");149 }150 Console.WriteLine("Proses testing ..... tunggu");151 //debug152 System.Diagnostics.Debug.WriteLine("Proses testing ..... tunggu");153154155 //### 2 --> persiapan citra testing156 Ext.ReadImage read;157 String lokasiFileTesting=@"D:\Sample Citra\sample PCA\testing/tony.18.jpg";158159 Console.WriteLine("citra testing yaitu "+lokasiFileTesting);160 //debug161 System.Diagnostics.Debug.WriteLine("citra testing yaitu "+lokasiFileTesting);162 Bitmap bitmapTest=(Bitmap)Image.FromFile(lokasiFileTesting);//menyiapkandata163164 //tampilkan165 new Ext.Utility.ShowImage().166 InitShow(167 new MyDataBitmap("citra testing "168 +lokasiFileTesting,169 bitmapTest)170 );171 //konversi ke gray172 bitmapTest=AForge.Imaging.Filters.Grayscale.173 CommonAlgorithms.174 RMY.Apply(bitmapTest);175 //baca nilai pixel176 read=new ReadImage(bitmapTest);177178 ArrayList dataTesting=new ArrayList();179 dataTesting.Insert(0,new NameAndData(lokasiFileTesting,read.Gray));180181182 //### 3 --> proses testing183 pca.ProcessTest(pca.MeanData,pca.AData,pca.EigenFace,dataTesting);184 ArrayList dataTraining=pca.Training;185186 Console.WriteLine("jarak ");187 //debug188 System.Diagnostics.Debug.WriteLine("jarak ");189 double jarakMin=Matrix.Min(pca.Shift);190 Console.WriteLine(" jarak minimal yaitu "+jarakMin+191 " berada pada "+192 (Array.IndexOf(pca.Shift,jarakMin)+1));193 //debug194 System.Diagnostics.Debug.WriteLine(" jarak minimal yaitu "+jarakMin+195 " berada pada "+(Array.IndexOf(pca.Shift,jarakMin)+1));196 NameAndDatahasil=(NameAndData)dataTraining[Array.IndexOf(pca.Shift,jarakMin)];197 Console.WriteLine("dengan nama "+hasil.NamaFile);198 //debug199 System.Diagnostics.Debug.WriteLine("dengan nama "+hasil.NamaFile);200 //tampilkan

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 96: buku cara cepat pengolahan citra dengan c# sharp

87

201 new Ext.Utility.ShowImage().202 InitShow(203 new MyDataBitmap("citra dalam database "+204 hasil.NamaFile,205 (Bitmap)Image.FromFile(hasil.NamaFile))206 );207208 }209210 }211 }

Versi GUI (nama project - Demo.Bab6.PCAGUI)menggunakan 2 Form yang berbeda untuk melakukan proses training dan testing.Berikut adalah tampilan aplikasi ketika berjalan.

a.1 a.2

c dKeterangan:a.1 Tampilan Form utama untuk melakukan testa.2 Hasil dari proses testingb.1 Tampilan Form trainingb.2 Hasil dari proses training

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 97: buku cara cepat pengolahan citra dengan c# sharp

88

INTERFACING WEBCAM

Keunggulan dari framework AForge adalah dukungan berupa component dariAForge.Controls.dll untuk melakukan interfacing multiple webcam sehinggaaplikasi yang akan dikembangkan menjadi realtime, misalkan aplikasi untukmelakukan face detection, survielance, traffic center. Sebelum melangkahselanjutnya, diperlukan add component berupa VideoSourcePlayer, silahkanuntuk melakukan point tersebut sesuai dengan Bab 2 yang telah dibahas.

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 98: buku cara cepat pengolahan citra dengan c# sharp

89

Serta diperlukan juga library yang lain yaitu AForge.Video,AForge.Video.DirectShow. Berikut adalah tampilan dari Form yang telah ditambahdengan component VideoSourcePlayer

Single WebcamAplikasi yang akan dibuat menggunakan Form sebagai wadah untuk menampilkanvideo dari webcam yang terdiri dari VideoSourcePlayer diletakan ditengah Form.Berikut adalah tampilan dari pembuatan aplikasi tersebut

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 99: buku cara cepat pengolahan citra dengan c# sharp

90

Source code Demo.Bab71 using System;2 using System.Collections.Generic;3 using System.Drawing;4 using System.Windows.Forms;5 using AForge.Video;6 using AForge.Video.DirectShow;78 namespace Demo.Bab79 {10 /// <summary>11 /// Description of MainForm.12 /// </summary>13 public partial class MainForm : Form14 {15 public MainForm()16 {1718 InitializeComponent();19 //daftar webcam20 FilterInfoCollection videoDevices= new FilterInfoCollection(21 FilterCategory.22 VideoInputDevice );23 try24 {252627 if ( videoDevices.Count == 0 )28 {29 throw new Exception( );30 }3132 string cameraName;33 for ( int i = 1, n = videoDevices.Count; i <= n; i++ )34 {35 cameraName = i + " : " + videoDevices[i - 1].Name;36 System.Diagnostics.Debug.WriteLine(cameraName);37 }3839 }40 catch41 {4243 }44 int noUrutWebcam = 0;45 VideoCaptureDevice videoSource1 = new VideoCaptureDevice(46 videoDevices[noUrutWebcam].47 MonikerString );48 //setting frame rate49 videoSource1.DesiredFrameRate = 25;50 //start51 videoSourcePlayer1.VideoSource = videoSource1;52 Console.WriteLine("Frame Rate : "+videoSource1.DesiredFrameRate);53 videoSourcePlayer1.Start( );54 Console.WriteLine("Starting Camera");55 System.Diagnostics.Debug.WriteLine("Selesai Camera");5657 }58 }

Form ini Sengaja Tidak ditampilkan

Sebagai

Review Version

Silahkan untuk membeli edisi

Full version

http://softscients.blogspot.com

[email protected]

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 100: buku cara cepat pengolahan citra dengan c# sharp

91

59 }

Filtering Secara RealtimeAplikasi juga dapat dikembangkan untuk melakukan filtering secara realtime,misalkan edge detection seperti tampilan berikut ini (Demo.Bab7.RealtimeFilter).Silahkan untuk dibuka project tersebut, maka tampilan aplikasi sebagai berikut

Multiple InterfacingSelain itu AForge juga telah melengkapi demo untuk contoh multiple interfacingwebcam yaitu <lokasi path >AForge.NET\Framework\Samples\Video\TwoCameras Test

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 101: buku cara cepat pengolahan citra dengan c# sharp

92

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 102: buku cara cepat pengolahan citra dengan c# sharp

93

LAMPIRAN

CD berisi aplikasi, library, dan project Olah Citra dengan C# menggunakanFramework AForge & Accord:

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

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

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

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

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 103: buku cara cepat pengolahan citra dengan c# sharp

94

DAFTAR PUSTAKA

R. M. Haralick, K. Shanmugam, and I.Dinstein. Textural features for imageclassification. IEEE Transactions on Systems,Man, andCybernetics, SMC-3(6): 610-621,(1973).

N. Otsu, "A Threshold Selection Method from Gray-Level Histograms,"IEEETransactions on Systems, Man, and Cybernetics, vol. 9, no. 1,pp.62-66, 1979.

http://archive.msdn.microsoft.com/ConnectedComponentshttp://www.aforgenet.com/http://cswww.essex.ac.ukhttp://code.google.com/p/accord/http://code.google.com/p/aforge/

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m

Page 104: buku cara cepat pengolahan citra dengan c# sharp

95

TENTANG PENULIS

Mulkan Syarif menyelsaikan jenjang S1 di Universitas Gajdah Mada pada tahun2010. Semasa menjadi mahasiswa telah beberapa menjadi asisten pada Lab.Analisis dan Simulasi Sistem Industri yaitu S1 dan D3 Penerapan Komputer danSistem Informasi dan Komunikasi serta telah membantu berbagai riset mahasiswaD3, S1 sampai dengan S2 dengan berbagai topik seperti web application, artificialintelegent, signal processing, sistem pengambilan keputusan, dan juga imageprocessing. Penulis memiliki ketertarikan dibidang pemrograman seperti java, php,Matlab, Delphi, C#, serta ERP. Beberapa artikel menarik dimuat di homepagepenulis yaitu http://softscients.blogspot.com. Anda bisa menghubungi penulismelalui alamat email [email protected]

htt

p:/

/so

ftscie

nts

.blo

gsp

ot.

co

mh

ttp

://s

oft

scie

nts

.blo

gsp

ot.

co

m