Senin, 18 Mei 2015

Java-Gray Level Coocurance Matrix



UPDATE: 01 FEBRUARI 2019
BAHASA: JAVA
SYSTEM:
a. Windows 10
b. NetBeans IDE 8.0.2 (Build 201411181905)
c. Java: 1.8.0_111; Java HotSpot(TM) 64-Bit Server VM 25.111-b14

PENGANTAR:


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

  1. Pengulangan pola dari variasi lokal sehingga membentuk kesatuan yang utuh
  2. Menyediakan informasi susunan spasial dari warna dan intensitas citra
  3. Dicirikan dengan distribusi spasial dari level intensitas dari nilai pixel ketetanggaan
  4. Tidak bisa didefinisikan sebagai suatu satu point / nilai tertentu karena merupakan sebuah pola / kesatuan


Lihatlah ilustrasi berikut tentang tekstur sebuah citra yaitu terdiri dari 50% hitam dan 50% putih






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


Analisis tekstur merupakan salah satu metode untuk melakukan identifikasi atau klasifikasi suatu citra, analisis tersebut telah banyak digunakan dalam berbagai bidang yaitu uji tekstur wajah, mutu keramik, membedakan jenis daun dan dalam interpretasi suatu peta sehingga dapat diketahui jenis lahan.

#GLCM sebagai salah satu metode analisis tekstur

Gray-Level Co-occurrence matrix merupakan metode paling banyak digunakan untuk analisis tekstur. Metode ini diperkenalkan oleh Haralick di tahun 1973 yang merupakan bagian dari project yang didukung olah NASA yaitu tepatnya NASA Goddard Space Flight Center. Haralick menggunakan citra dari NASA ERTS untuk melakukan klasifikasi dengan tingkat akurasi diatas 80%.

Matrix GLCM dihitung dari nilai pixel yang berpasangan dan memiliki nilai intensitas tertentu. Misalkan d adalah jarak antara dua pixel yaitu (x1,y1) dan (x2,y2) dan Ѳ tetha didefinisikan sebagai sudut antara keduanya, maka matrix GLCM merupakan distribusi spasial dari Pd Ѳ (i,j). Banyak paper menuliskan berbagai versi tentang perhitungan GLCM terutama mengenai masalah sudut yang digunakan. Berikut adalah ilustrasi yang menggambarkan arah sudut dengan jarak 1 pixel dan ada 4 jenis sudut yang digunakan:
  • 0=180;
  • 45=225,
  • 90=270, dan
  • 135=315

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






#Perhitungan 7 fitur utama

[1] Angularsecond moment/uniformity/energy
Mengukur tentang keseragaman atau sering disebut angular second moment. Energy akan bernilai tinggi ketika nilai pixel mirip satu sama lain sebaliknya akan bernilai kecil menandakan nilai dari GLCM normalisasi adalah heterogen. Nilai maksimum dari energy adalah 1 yang artinya distribusi pixel dalam kondisi konstan atau bentuk nya yang berperiodik (tidak acak).




[2] Entropy
Mengukur kompleksitas(keacakan) citra. Entropy akan bernilai tinggi ketika citra tidak seragam.



[3] Dissimilarity
Mengukur ketidakmiripan suatu tekstur, yang akan bernilai besar bila acak dan sebaliknya akan bernilai kecil bila seragam.

[4] Contrast/inertia
Mengukur frekuensi spasial dari citra dan perbedaan moment GLCM. Perbedaan yang dimaksudkan adalah perbedaan tinggi dan rendah nya pixel. Contrast akan bernilai 0 jika pixel ketetanggaan mempunyai nilai yang sama.


[5]Correlation
Mengukur linearitas (the joint probability) dari sejumlah pasangan pixel (pairs).

[6] Homogeneity/inversedifference moment
Mengukur homogenitas. Nilai ini sangat sensitif terhadap nilai disekitar diagonal utama. Bernilai tinggi ketika semua pixel mempunyai nilai yang sama / seragam. Kebalikan dari contrast yaitu akan bernilai besar jika mempunyai nilai pixel yang sama pada saat energy bernilai tetap.



[7] Autocorrelation
Mengukur correlation diantara garis diagonal utama.


Untuk lebih jelasnya bisa kunjungi link berikut yang telah ditulis ulang ke bahasa C#
http://www.softscients.web.id/2018/10/bab-5-analisis-tekstur.html


DATASET:


Untuk dataset, kita mencoba untuk versi simple saja untuk menghitung GLCM dari Feature dari sebuah array berikut

 int [][] data = new int[][] {
 { 0,   0,   1,   2 },
 {2,   0,   2,   0 },
 {1,   0,   0,   2 },
 {2,   0,   1,   1 }
  };      
 


Dengan nilai maksimal array adalah 2, dan sudut yang akan hitung adalah 0

GLCM glcm = new GLCM();
int maksimal = 2; //karena nilai 
glcm.process(data,GLCM.SUDUT_0,2);

Hitung feature GLCM

FeatGLCM fitur = new FeatGLCM();
fitur.process(glcm.getT());//matrix normalisasi
System.out.println("Fitur");
System.out.println("Autocorrelation : " + fitur.getAutocorrelation());
System.out.println("Contrast : " + fitur.getContrast());
System.out.println("Correlation : " + fitur.getCorrelation());
System.out.println("Dissimilarity : " + fitur.getDissimilarity());
System.out.println("Energy : " + fitur.getEnergy());
System.out.println("Entropy : " + fitur.getEntropy());
System.out.println("Homogen : " + fitur.getHomogen());

Kode lengkapnya sebagai berikut

import glcm.FeatGLCM;
import glcm.GLCM;
public class DemoConsole {
    public static void main(String[] args) {
        // TODO code application logic here
        int [][] data = new int[][] {
                    { 0,   0,   1,   2 },
                    {2,   0,   2,   0 },
                    {1,   0,   0,   2 },
                    {2,   0,   1,   1 }
                  };
        GLCM glcm = new GLCM();
        int maksimal = 2; //karena nilai 
        glcm.process(data,GLCM.SUDUT_0,2);
        
        FeatGLCM fitur = new FeatGLCM();
        fitur.process(glcm.getT());//matrix normalisasi
        System.out.println("Fitur");
        System.out.println("Autocorrelation : " + fitur.getAutocorrelation());
        System.out.println("Contrast : " + fitur.getContrast());
        System.out.println("Correlation : " + fitur.getCorrelation());
        System.out.println("Dissimilarity : " + fitur.getDissimilarity());
        System.out.println("Energy : " + fitur.getEnergy());
        System.out.println("Entropy : " + fitur.getEntropy());
        System.out.println("Homogen : " + fitur.getHomogen());
    }
}

Output

Fitur
Autocorrelation : 2.75
Contrast : 2.0
Correlation : -0.45454545454545453
Dissimilarity : 1.1666666666666667
Energy : 0.15625
Entropy : 1.9439903027667307
Homogen : 0.49999999999999994

Untuk versi pengolahan gambar, agar lebih mudah telah dibuatkan GUI

 PUSTAKA GLCM:




Kode GLCM tidak memerlukan library tambahan karena ditulis sendiri.

1 komentar:

Rizani helmi mengatakan...

Untuk pengolahan gambar ada source code nya gak mas?