bab 13 - rizafennisya.files.wordpress.com · pada proses ini, ... analisis penginderaan jarak-jauh....
TRANSCRIPT
>
BAB 13
Ekstraksi
Fitur Tekstur
Setelah bab ini berakhir, diharapkan pembaca dapat
memahami berbagai bahasan berikut yang berhubungan
dengan fitur tekstur dan mampu mempraktikkannya.
Fitur tekstur
Kategori tekstur
Tekstur berbasis histogram
Tekstur Laws
Lacunarity
GLCM
650 Pengolahan Citra Teori dan Aplikasi
13.1 Pengantar Fitur Tekstur
Selain melibatkan fitur bentuk, tekstur banyak digunakan sebagai fitur
untuk temu kembali citra. Hal ini disebabkan beberapa objek mempunyai pola-
pola tertentu, yang bagi manusia mudah untuk dibedakan. Oleh karena itu,
diharapkan komputer juga dapat mengenali sifat-sifat seperti itu.
Dalam praktik, tekstur digunakan untuk berbagai kepentingan. Umumnya,
aplikasi tekstur dapat dibagi menjadi dua kategori. Pertama adalah untuk
kepentingan segmentasi. Pada proses ini, tekstur dipakai untuk melakukan
pemisahan antara satu objek dengan objek yang lain. Kedua adalah untuk
klasifikasi tekstur, yang menggunakan fitur-fitur tekstur untuk mengklasifikasi
objek. Beberapa contoh aplikasi tekstur disajikan di bawah ini (Tuceryan dan Jain,
1998).
Inspeksi secara otomatis pada industri tekstil, pengecatan mobil,
pemakaian karpet.
Analisis citra medis. Misalnya, tekstur digunakan untuk klasifikasi
penyakit paru-paru, diagnosis leukemia, dan pembedaan tipe-tipe sel darah
putih.
Analisis penginderaan jarak-jauh. Misalnya, tekstur dipakai untuk
kepentingan klasifikasi area tanah.
Sebelum membahas lebih lanjut mengenai tekstur, pengertian tekstur perlu
dijelaskan lebih dulu walaupun definisi struktur yang baku belum pernah
disepakati. Sebagai contoh, Kulkarni (1994) mendefinisikan tekstur sebagai
hubungan mutual antara nilai intensitas piksel-piksel yang bertetangga yang
berulang di suatu area yang lebih luas daripada jarak hubungan tersebut. Namun,
penjelasan seperti itu pun masih menyisakan ketidakmudahan untuk mengenali
pengulangan yang terjadi pada citra. Ada suatu pengulangan yang terkadang sulit
dijabarkan, tetapi mudah ditangkap oleh mata , seperti yang terdapat pada Gambar
13.1(a) dan Gambar 13.1(b). Hal ini berbeda dengan Gambar 13.1(c). Citra yang
disebut terakhir mempunyai sifat pengulangan yang mudah dilihat. Namun, pada
ketiga gambar tersebut, jelas bahwa ada suatu tekstur yang terkandung dalam
Pemerolehan Fitur Tekstur 651
setiap citra. Tekstur pada Gambar 13.1(c), dari sisi keteraturan pola, adalah yang
paling mudah untuk dikenali.
(a) Halus (b) Kasar (c) Teratur
Gambar 13.1 Berbagai citra yang memiliki sifat tekstur yang berbeda-beda
(Sumber: citra Brodatz)
Perbedaan seperti yang terlihat pada Gambar 13.1 akan dicoba dengan
menggunakan beberapa pendekatan yang berorientasi pada tekstur. Dengan
begitu, gambaran tentang efektivitas setiap metode dapat diamati melalui besaran
kuantitatif yang dihasilkan.
13.2 Kategori Tekstur
Berdasarkan keteraturan pengulangan pola dalam objek, tekstur dapat
dikategorikan ke dalam dua bentuk: 1) tekstur teratur dan 2) tekstur tidak teratur.
Contoh kedua jenis tekstur ditunjukkan pada Gambar 13.2 dan Gambar 13.3.
Tekstur buatan manusia berkecenderungan masuk dalam kategori tekstur teratur,
sedangkan tekstur alamiah bersifat tidak teratur. Berdasarkan tingkat kekasaran
objek, tekstur dibedakan menjadi dua: mikrotekstur dan makrotekstur (Acharya
dan Ray, 2005). Apabila ukuran elemen yang menyusun pengulangan pola
berukuran besar, tekstur dikatakan kasar atau bertekstur makro. Tekstur seperti itu
dinamakan sebagai makrostruktur. Sebaliknya, mikrostruktur mempunyai sifat
elemen-elemen yang menyusun pengulangan pola berukuran kecil. Berdasarkan
perspektif matematis, tekstur dapat dibedakan ke dalam spektrum stokastis dan
spektrum regular. Tekstur stokastis (atau kadang disebut tekstur statistis) adalah
tekstur yang mempunyai bentuk mirip dengan derau. Tekstur regular (atau
terkadang sebagai tekstur struktural) adalah tekstur yang tersusun atas pola-pola
652 Pengolahan Citra Teori dan Aplikasi
periodis. Dalam hal ini, warna/intensitas serta bentuk elemen tekstur diulang
dengan interval yang sama.
Perlu diketahui, terdapat istilah texton. Istilah inilah yang berupa
pola-pola (struktur primitif) yang menyusun tekstur secara
periodik. Istilah tersebut terkadang dinamakan texel (berasal dari
kata “texture element”).
(a) (b)
Gambar 13.2 Tekstur teratur (a) dan
tekstur tidak teratur (b)
(Gambar (a), (b), dan (c) berasal dari Brodatz)
(a) Waru berdaun hijau (b) Waru varigata
Gambar 13.3 Dua daun dengan bentuk yang serupa,
tetapi berbeda dalam pola tekstur
Pemerolehan Fitur Tekstur 653
Metode yang digunakan untuk memperoleh fitur tekstur dapat dibedakan
menjadi tiga golongan: 1) metode statistis, 2) metode struktural, dan 3) metode
spektral. Metode statistis menggunakan perhitungan statistika untuk membentuk
fitur. Contoh yang termasuk sebagai metode statistis yaitu GLCM dan Tamura.
Metode struktural menjabarkan susunan elemen ke dalam tekstur. Contoh metode
struktural adalah Shape Grammar (Petrou dan Sevilla, 2006). Metode spektral
adalah metode yang didasarkan pada domain frekuensi-spasial. Contoh metode
spektral adalah distribusi energi domain Fourier, Gabor, dan filter Laws.
13.3 Tekstur Berbasis Histogram
Metode yang sederhana untuk mendapatkan tekstur adalah dengan
mendasarkan pada histogram. Namun, sebelum membahas fitur-fitur yang dapat
dikenal secara statistis melalui histogram, ada baiknya untuk melihat histogram
dari tiga buah citra yang mengandung tekstur yang berbeda, yang terdapat di
Gambar 13.4. Gambar 13.4(a) menunjukkan bahwa citra dengan tekstur halus
memiliki daerah perubahan intensitas yang sempit. Sebaliknya, citra yang kasar
memiliki kontras yang tinggi, ditandai dengan jangkauan intensitas yang lebar
(Gambar 13.4(c) dan (d)). Menurut penglihatan, citra dalam Gambar 13.4(e) juga
termasuk kasar dibandingkan dengan citra pada Gambar 13.4(a) meskipun
beraturan
654 Pengolahan Citra Teori dan Aplikasi
(a) Tekstur halus (b) Histogram tekstur halus
(c) Tekstur kasar (d) Histogram tekstur kasar
(e) Tekstur periodik (f) Histogram tekstur periodik
Gambar 13.4 Histogram tiga citra yang bertekstur berbeda
Fitur pertama yang dihitung secara statistis adalah rerata intensitas.
Komponen fitur ini dihitung berdasar persamaan
𝑚 = ∑ 𝑖 .𝑝(𝑖)𝐿−1𝑖=0 (13.1)
Dalam hal ini, i adalah aras keabuan pada citra f dan p(i) menyatakan probabilitas
kemunculan i dan L menyatakan nilai aras keabuan tertinggi. Rumus di atas akan
menghasilkan rerata kecerahan objek.
Pemerolehan Fitur Tekstur 655
Fitur kedua berupa deviasi standar. Perhitungannya sebagai berikut:
𝜎 = √∑ (𝑖 − 𝑚)2𝑝(𝑖)𝐿−1𝑖=1 (13.2)
Dalam hal ini, 2 dinamakan varians atau momen orde dua ternormalisasi karena
p(i) merupakan fungsi peluang. Fitur ini memberikan ukuran kekontrasan.
Fitur skewness merupakan ukuran ketidaksimetrisan terhadap rerata
intensitas. Definisinya :
𝑠𝑘𝑒𝑤𝑛𝑒𝑠𝑠 = ∑ (𝑖 − 𝑚)3𝑝(𝑖)𝐿−1𝑖=1 (13.3)
Skewness sering disebut sebagai momen orde tiga ternormalisasi. Nilai negatif
menyatakan bahwa distribusi kecerahan condong ke kiri terhadap rerata dan nilai
positif menyatakan bahwa distribusi kecerahan condong ke kanan terhadap rerata.
Dalam praktik, nilai skewness dibagi dengan (L-1)2 supaya ternormalisasi.
Deskriptor energi adalah ukuran yang menyatakan distribusi intensitas
piksel terhadap jangkauan aras keabuan. Definisinya sebagai berikut:
𝑒𝑛𝑒𝑟𝑔𝑖 = ∑ [𝑝(𝑖)]2𝐿−1𝑖=0 (13.4)
Citra yang seragam dengan satu nilai aras keabuan akan memiliki nilai energi
yang maksimum, yaitu sebesar 1. Secara umum, citra dengan sedikit aras keabuan
akan memiliki energi yang lebih tinggi daripada yang memiliki banyak nilai aras
keabuan. Energi sering disebut sebagai keseragaman.
Entropi mengindikasikan kompleksitas citra. Perhitungannya sebagai
berikut:
𝑒𝑛𝑡𝑟𝑜𝑝𝑖 = − ∑ 𝑝(𝑖)𝐿−1𝑖=0 log2 (𝑝(𝑖)) (13.5)
Semakin tinggi nilai entropi, semakin kompleks citra tersebut. Perlu diketahui,
entropi dan energi berkecenderungan berkebalikan. Entropi juga
merepresentasikan jumlah informasi yang terkandung di dalam sebaran data.
656 Pengolahan Citra Teori dan Aplikasi
Properti kehalusan biasa disertakan untuk mengukur tingkat
kehalusan/kekasaran intensitas pada citra. Definisinya sebagai berikut:
𝑅 = 1 −1
1+𝜎2 (13.6)
Pada rumus di atas, adalah deviasi standar. Berdasarkan rumus di atas, Nilai R
yang rendah menunjukkan bahwa citra memiliki intensitas yang kasar. Perlu
diketahui, di dalam menghitung kehalusan, varians perlu dinormalisasi sehingga
nilainya berada dalam jangkauan [0 1] dengan cara membaginya dengan (L-1)2.
Perwujudan perhitungan fitur tekstur secara statistis dapat dilihat pada
fungsi stattekstur berikut.
function [Stat] = stattekstur(F)
% STATTEKSTUR Memperoleh statistika tekstur.
% Masukan: F = citra berskala keabuan.
% Keluaran: Stat = berisi statistika tekstur
%
% Didasarkan pada Gonzalez, Woods, dan Eddins, 2004
[m, n] = size(F);
% Hitung frekuensi aras keabuan
L = 256;
Frek = zeros(L,1);
F = double(F);
for i = 1 : m
for j = 1 : n
intensitas = F(i,j);
Frek(intensitas+1) = Frek(intensitas+1) + 1;
end
end
% Hitung probabilitas
jum_piksel = m * n;
for i=0 : L-1
Prob(i+1) = Frek(i+1) / jum_piksel;
end
% Hitung mu
Program : stattekstur.m
Pemerolehan Fitur Tekstur 657
mu = 0;
for i=0 : L-1
mu = mu + i * Prob(i+1);
end
% Hitung deviasi standar
varians = 0;
for i=0 : L-1
varians = varians + (i - mu)^2 * Prob(i+1);
end
deviasi = sqrt(varians);
varians_n = varians / (L-1)^2; % Normalisasi
% Hitung skewness
skewness = 0;
for i=0 : L-1
skewness = skewness + (i - mu)^3 * Prob(i+1);
end
skewness = skewness / (L-1)^2;
% Energi (Keseragaman)
energi = 0;
for i=0 : L-1
energi = energi + Prob(i+1)^2;
end
% Entropi
entropi = 0;
for i=0 : L-1
if Prob(i+1) ~= 0
entropi = entropi + Prob(i+1) * log(Prob(i+1));
end
end
entropi = -entropi;
% Hitung R atau Smoothness
smoothness = 1 - 1 / (1 + varians_n);
Stat.mu = mu;
Stat.deviasi = deviasi;
Stat.skewness = skewness;
Stat.energi = energi;
Stat.entropi = entropi;
Stat.smoothness = smoothness;
Akhir Program
Contoh penggunaan fungsi stattekstur:
>> Img = imread('C:\Image\sidikjari.png');
658 Pengolahan Citra Teori dan Aplikasi
>> G = stattekstur(Img)
G =
scalar structure containing the fields:
mu = 125.130203247070
deviasi = 45.8705882891252
skewness = 0.0268669028523393
energi = 0.00630368571728468
entropi = 5.10425454860202
smoothness = 0.0313442386279402
>>
Contoh perbandingan statistika tekstur untuk berbagai citra ditunjukkan pada
Tabel 13.1.
Tabel 13.1 Fitur tekstur berbasis histogram
Objek Fitur
Rerata intensitas Rerata kontras Skewness
Energi Entropi
Smoothness :
: 161,408 : 16,089 : -0,2545
: 0,0220 : 3,9482
: 0,0039
Rerata intensitas Rerata kontras Skewness
Energi Entropi
Smoothness :
: 127,633 : 74,137 : -0,0312
: 0,0077 : 4,9436
: 0,0779
Rerata intensitas Rerata kontras
Skewness Energi Entropi
Smoothness :
: 162,381 : 99,3366
: -6,4603 : 0,1388 : 4,0303
: 0,1318
Pemerolehan Fitur Tekstur 659
Pendekatan yang serupa dengan di depan dilakukan dengan menggunakan
probability density function. Apabila p(i) adalah PDF, momen pusat PDF
didefinisikan sebagai
𝑚𝑘 = ∑ (𝑖 − 𝜇𝑓)𝑘 .𝑝(𝑖)𝐿−1𝑖=0 (13.7)
dengan i=0,1,2,…,L-1 adalah aras keabuan pada citra. Adapun f adalah rerata
aras keabuan pada citra, yang dihitung seperti berikut
𝜇𝑓 = ∑ 𝑖 .𝑝(𝑖)𝐿−1𝑖=0 (13.8)
Momen kedua, yakni varians aras keabuan, yang berlaku sebagai ukuran
ketidakhomogenan, berupa
𝜎𝑘2 = 𝑚2 = ∑ (𝑖 − 𝜇𝑘)2.𝑝(𝑖)𝐿−1
𝑖=0 (13.9)
Momen ketiga dan keempat ternormalisasi, yang secara berturut-turut bernama
skewness dan kurtosis, dinyatakan seperti berikut:
𝑠𝑘𝑒𝑤𝑛𝑒𝑠𝑠 =𝑚3
𝑚23/2 (13.10)
𝑘𝑢𝑟𝑡𝑜𝑠𝑖𝑠 =𝑚4
𝑚22 (13.11)
Skewness merupakan ukuran asimetri dan kurtosis merupakan ukuran
keseragaman.
Pendekatan tekstur dengan probabilitas mempunyai kelebihan pada
sifatnya yang tidak tergantung pada operasi translasi, penyekalaan, dan rotasi.
Kelemahannya adalah mengabaikan hubungan antarpiksel secara lokal. Dengan
kata lain, tekstur dengan susunan spasial yang berbeda tetapi memiliki distribusi
aras keabuan yang sama tidak dapat dibedakan. Sebagai contoh, tekstur yang
memiliki titik-titik warna hitam dan putih secara berselang-seling tidak dapat
660 Pengolahan Citra Teori dan Aplikasi
dibedakan dengan kotak-kotak yang berwarna hitam dan putih secara berselang-
seling.
13.4 Tekstur Laws
Laws mengemukakan metode yang digunakan untuk mengklasifikasi
setiap kelompok piksel di dalam citra guna menentukan ukuran energi tekstur
lokal (Rangayyan, 2005). Untuk keperluan tersebut, filter yang dilibatkan berupa
Gaussian, deteksi tepi, dan jenis Laplacian. Filter-filter tersebut dipakai untuk
membentuk citra yang berisi energi tekstur, sehingga dapat digunakan untuk
kepentingan segmentasi.
Cadar Laws yang paling sederhana yang digunakan untuk kepentingan
penapisan berukuran 1x 3. Nama filter berupa L3, E3, dan S3. Bentuknya seperti
berikut:
LE = [1 2 1]
E3 = [-1 0 1]
S3 = [-1 2 -1]
Karakteristik ketiga filter ditunjukkan pada Gambar 13.5. Setiap huruf awal di
dalam cadar berasal dari kata-kata seperti berikut (Lemaitre dan Rodojevic, 2012):
L = Local averaging, yang berarti pererataan secara lokal
E = Edge detection (pendeteksian tepi)
S = Spot detection (pendeteksi titik)
L3
E3
S3
1 2 1
-1 0 1
-1 2 -1
Gambar 13.5 Cadar Laws berukuran 1x3
Pemerolehan Fitur Tekstur 661
Selain cadar yang berukuran 1x3, terdapat cadar yang berukuran 1x5.
Kelima cadar berupa:
L5 = [ 1 4 6 4 1 ]
E5 = [ -1 -2 0 2 1 ]
S5 = [ -1 0 2 0 -1 ]
R5 = [ 1 -4 6 -4 1 ]
W5 = [ -1 2 0 -2 1 ]
Sebagai tambahan, R berasal dari kata “Ripple detection” dan W berasal dari
“Wave detection”. Karakteristik variasi bobot piksel kelima filter ditunjukkan
pada Gambar 13.6.
L5
E5
S5
1 4 6 4 1
-1 -2 0 2 1
-1 0 2 0 -1
-1 2 0 -2 1
1 -4 6
-4 1
W5
R5
Gambar 13.6 Cadar Laws berukuran 1x5
662 Pengolahan Citra Teori dan Aplikasi
Penerapannya, pasangan dua cadar dapat digabung berdasar perkalian
vektor. Dengan demikian, akan terbentuk matriks berukuran 3x3 atau 5x5.
Sebagai contoh, L3 x S3 menghasilkan matriks seperti berikut:
[121] [−1 2 −1] = [
−1 2 −1−2 4 −2−1 2 −1
] (13.12)
Oleh karena itu, dengan cadar berukuran 1x3 dapat diperoleh kombinasi perkalian
sebanyak 9, sedangkan dengan cadar berukuran 1x5 dapat terbentuk 25 kombinasi
perkalian. Tabel 13.2 menunjukkan kesembilan kombinasi ketiga cadar 1x3.
Adapun Tabel 13.3 memperlihatkan kombinasi pada cadar 1x5.
Tabel 13.2 Pasangan cadar Laws berukuran 1x3
Nama
Kernel
Matriks Keterangan
L3L3 L3TL3 Menyatakan pererataan intensitas aras
keabuan piksel-piksel yang bertetangga dengan ukuran 3x3
L3E3 L3TE3 Pererataan pada arah vertikal dan pendeteksian tepi pada arah horizontal
L3S3 L3TS3 Pererataan pada arah vertikal dan
pendeteksian titik pada arah horizontal
E3L3 E3TL3 Pendeteksian tepi pada arah vertikal dan pererataan intensitas pada arah horizontal
E3E3 E3TE3 Pendeteksian tepi pada arah vertikal dan
horizontal
E3S3 E3TS3 Pendeteksian tepi pada arah vertikal dan pendeteksian titik pada arah horizontal
S3L3 S3TL3 Pendeteksian titik pada arah vertikal dan
pererataan intensitas pada arah horizontal
S3E3 S3TE3 Pendeteksian titik pada arah vertikal dan pendeteksian tepi pada arah horizontal
S3S3 S3TS3 Pendeteksian titik pada arah vertikal dan
horizontal
Pemerolehan Fitur Tekstur 663
Tabel 13.3 Pasangan cadar Laws berukuran 1x5
L5L5 E5L5 S5L5 W5L5 R5L5
L5E5 E5E5 S5E5 W5E5 R5E5
L5S5 E5S5 S5S5 W5S5 R5S5
L5W5 E5W5 S5W5 W5W5 R5W5
L5R5 E5R5 S5R5 W5R5 R5R5
Fungsi bernama laws berikut merupakan implementasi untuk
memperoleh citra yang berisi energi tekstur.
function [E] = laws(F, cadar1, cadar2, w)
% LAWS Berguna untuk memperoleh citra yang berisi
% energi tekstur.
% Masukan: F = Citra berskala keabuan.
% cadar1 dan cadar2 = nama cadar
% (S3, S5, E3, dst.)
% w = ukuran jendela.
F = double(F);
% Memperoleh energi tekstur. Hasil berupa
% citra berukuran sama dengan F.
% w = ukuran jendela
L3 = [1 2 1];
E3 = [-1 0 -1];
S3 = [-1 2 -1];
L5 = [1 4 6 4 1];
E5 = [-1 -2 0 2 1];
S5 = [-1 0 2 0 -1];
R5 = [1 -4 6 -4 1];
W5 = [-1 2 0 -2 1];
% Cek cadar 1
if strcmp(cadar1, 'L3') == 1
Cd1 = L3;
ukuran1 = 3;
elseif strcmp(cadar1, 'E3') == 1
Cd1 = E3;
ukuran1 = 3;
elseif strcmp(cadar1, 'S3') == 1
Cd1 = S3;
ukuran1 = 3;
elseif strcmp(cadar1, 'L5') == 1
Program : laws.m
664 Pengolahan Citra Teori dan Aplikasi
Cd1 = L5;
ukuran1 = 5;
elseif strcmp(cadar1, 'E5') == 1
Cd1 = E5;
ukuran1 = 5;
elseif strcmp(cadar1, 'S5') == 1
Cd1 = S5;
ukuran1 = 5;
elseif strcmp(cadar1, 'R5') == 1
Cd1 = R5;
ukuran1 = 5;
elseif strcmp(cadar1, 'W5') == 1
Cd1 = W5;
ukuran1 = 5;
else
ukuran1 = 0;
end
% Cek cadar 2
if strcmp(cadar2, 'L3') == 1
Cd2 = L3;
ukuran2 = 3;
elseif strcmp(cadar2, 'E3') == 1
Cd2 = E3;
ukuran2 = 3;
elseif strcmp(cadar2, 'S3') == 1
Cd2 = S3;
ukuran2 = 3;
elseif strcmp(cadar2, 'L5') == 1
Cd2 = L5;
ukuran2 = 5;
elseif strcmp(cadar2, 'E5') == 1
Cd2 = E5;
ukuran2 = 5;
elseif strcmp(cadar2, 'S5') == 1
Cd2 = S5;
ukuran2 = 5;
elseif strcmp(cadar2, 'R5') == 1
Cd2 = R5;
ukuran2 = 5;
elseif strcmp(cadar2, 'W5') == 1
Cd2 = W5;
ukuran2 = 5;
else
ukuran2 = 0;
end
% Cek kebenaran cadar
ukuran = ukuran1 * ukuran2;
if ~(ukuran == 9 || ukuran == 25)
error('Cadar tidak valid');
end
Matriks = Cd1' * Cd2;
% Konvolusi citra dengan cadar
E = konvolusi2(F, Matriks);
% Lakukan pererataan dengan jendela berukuran w x w
Pemerolehan Fitur Tekstur 665
H=ones(w,w)/(w^2);
E=konvolusi2(E, H);
% Lakukan normalisasi ke 0 s/d 255
terkecil = min(min(E));
terbesar = max(max(E));
E = (E-terkecil) / (terbesar - terkecil) * 255;
% Kosongkan bagian tepi
[tinggi, lebar] = size(E);
E(1:15,:) = 0;
E(tinggi-15: tinggi,:) = 0;
E(:, 1:15) = 0;
E(:, lebar-15 : lebar) = 0;
E = uint8(E);
Akhir Program
Contoh penggunaan fungsi laws:
>> Lena = imread('C:\Image\lena256.png');
>> G = laws(Lena,'R5','S5',15);
>> imshow(G)
>>
Perintah di atas digunakan untuk memperoleh energi tekstur dengan menggunakan
pasangan cadar R5 dan S5 dengan ukuran jendela 15x15.
Contoh hasil penerapan enam pasangan cadar terhadap citra Lena
ditunjukkan pada Gambar 13.7.
666 Pengolahan Citra Teori dan Aplikasi
(a) L5L5, 15x15 (b) L5E5, 15x15
(c) L5L5, 15x15 (d) E5S5, 15x15
(e) S5R5, 15x15 (f) R5S5, 15x15
Gambar 13.7 Contoh hasil penggunaan enam cadar Laws
Tekstur Laws biasa dipakai untuk kepentingan segmentasi. Contoh dapat
dilihat pada Petrou dan sevilla (2006), yang menggunakan algoritma deterministic
annealing untuk melakukan segmentasi citra.
Pemerolehan Fitur Tekstur 667
13.5 Lacunarity
Lacunarity merupakan ukuran fraktal yang dapat digunakan untuk
memperoleh fitur tekstur (Petrou & Sevilla, 2006). Definisi lacunarity sebagai
berikut.
11
1
2
1 1
1 1
2
M
k
N
lkl
M
m
N
nmn
s
PMN
PMNL (13.13)
M
m
N
nM
k
N
lkl
mna
PMN
PMN
L1 1
1 1
11
1 (13.14)
p
M
m
N
n
p
M
k
N
lkl
mnp
PMN
PMN
L
/1
1 1
1 1
11
1
(13.15)
Dalam Hal ini, M x N menyatakan ukuran citra, Pmn menyatakan intensitas piksel
pada (m, n), dan p bernilai 2, 4, 6, dan seterusnya.
Implementasi lacunarity dapat dilihat di bawah ini. Fungsi bernama
lacunarity memerlukan masukan berupa citra berwarna.
Program : lacunarity.m
function [H] = lacunarity(RGB)
% LACUNARITY Berguna untuk memperoleh fitur lacunarity.
% Masukan: RGB = Citra berwarna
%
% Keluaran: H = Nilai balik berupa lacunarity
GR = im2bw(RGB, 0.5);
[tinggi, lebar] = size(GR);
RGB = double(RGB);
GR = double(GR);
668 Pengolahan Citra Teori dan Aplikasi
% Hitung warna rata-rata R, G, dan B
jumlsr_atas=0;
jumlsr_bawah=0;
jumlsg_atas=0;
jumlsg_bawah=0;
jumlsb_atas=0;
jumlsb_bawah=0;
jumls_atas=0;
jumls_bawah=0;
jum_piksel = 0;
for Baris = 1:tinggi
for Kolom = 1:lebar
jum_piksel = jum_piksel + 1;
jumlsr_atas = jumlsr_atas + RGB(Baris, Kolom, 1)^2;
jumlsg_atas = jumlsg_atas + RGB(Baris, Kolom, 2)^2;
jumlsb_atas = jumlsb_atas + RGB(Baris, Kolom, 3)^2;
jumls_atas = jumls_atas + GR(Baris, Kolom)^2;
jumlsr_bawah = jumlsr_bawah + RGB(Baris, Kolom, 1);
jumlsg_bawah = jumlsg_bawah + RGB(Baris, Kolom, 2);
jumlsb_bawah = jumlsb_bawah + RGB(Baris, Kolom, 3);
jumls_bawah = jumls_bawah + GR(Baris, Kolom);
end
end
jumlar=0;
jumlag=0;
jumlab=0;
jumla=0;
juml2r=0;
juml2g=0;
juml2b=0;
juml2=0;
juml4r=0;
juml4g=0;
juml4b=0;
juml4=0;
juml6r=0;
juml6g=0;
juml6b=0;
juml6=0;
juml8r=0;
juml8g=0;
juml8b=0;
juml8=0;
juml10r=0;
juml10g=0;
juml10b=0;
juml10=0;
for Baris = 1:tinggi
for Kolom = 1:lebar
jumlar = jumlar + abs(RGB(Baris, Kolom, 1)) / ...
Pemerolehan Fitur Tekstur 669
(jumlsr_bawah/jum_piksel) -1;
jumlag = jumlag + abs(RGB(Baris, Kolom, 2)) / ...
(jumlsg_bawah/jum_piksel) -1;
jumlab = jumlab + abs(RGB(Baris, Kolom, 3)) / ...
(jumlsb_bawah/jum_piksel) -1;
jumla = jumla + abs(GR(Baris, Kolom)) / ...
(jumls_bawah/jum_piksel) -1;
juml2r = juml2r + (RGB(Baris, Kolom, 1) / ...
(jumlsr_bawah/jum_piksel) -1)^2;
juml2g = juml2g + (RGB(Baris, Kolom, 2) / ...
(jumlsg_bawah/jum_piksel) -1)^2;
juml2b = juml2b + (RGB(Baris, Kolom, 3) / ...
(jumlsb_bawah/jum_piksel) -1)^2;
juml2 = juml2 + (GR(Baris, Kolom) / ...
(jumls_bawah/jum_piksel) -1)^2;
juml4r = juml4r + (RGB(Baris, Kolom, 1) / ...
(jumlsr_bawah/jum_piksel) -1)^4;
juml4g = juml4g + (RGB(Baris, Kolom, 2) / ...
(jumlsg_bawah/jum_piksel) -1)^4;
juml4b = juml4b + (RGB(Baris, Kolom, 3) / ...
(jumlsb_bawah/jum_piksel) -1)^4;
juml4 = juml4 + (GR(Baris, Kolom) / ...
(jumls_bawah/jum_piksel) -1)^4;
juml6r = juml6r + (RGB(Baris, Kolom, 1) / ...
(jumlsr_bawah/jum_piksel) -1)^6;
juml6g = juml6g + (RGB(Baris, Kolom, 2) / ...
(jumlsg_bawah/jum_piksel) -1)^6;
juml6b = juml6b + (RGB(Baris, Kolom, 3) / ...
(jumlsb_bawah/jum_piksel) -1)^6;
juml6 = juml6 + (GR(Baris, Kolom) / ...
(jumls_bawah/jum_piksel) -1)^6;
juml8r = juml8r + (RGB(Baris, Kolom, 1) / ...
(jumlsr_bawah/jum_piksel) -1)^8;
juml8g = juml8g + (RGB(Baris, Kolom, 2) / ...
(jumlsg_bawah/jum_piksel) -1)^8;
juml8b = juml8b + (RGB(Baris, Kolom, 3) / ...
(jumlsb_bawah/jum_piksel) -1)^8;
juml8 = juml8 + (GR(Baris, Kolom) / ...
(jumls_bawah/jum_piksel) -1)^8;
juml10r = juml10r + (RGB(Baris, Kolom, 1) / ...
(jumlsr_bawah/jum_piksel) -1)^10;
juml10g = juml10g + (RGB(Baris, Kolom, 2) / ...
(jumlsg_bawah/jum_piksel) -1)^10;
juml10b = juml10b + (RGB(Baris, Kolom, 3) / ...
(jumlsb_bawah/jum_piksel) -1)^10;
juml10 = juml10 + (GR(Baris, Kolom) / ...
(jumls_bawah/jum_piksel) -1)^10;
end
end
H.lsr = (jumlsr_atas / jum_piksel) / ...
(jumlsr_bawah / jum_piksel)^2 - 1;
H.lsg = (jumlsg_atas / jum_piksel) / ...
(jumlsg_bawah / jum_piksel)^2 - 1;
670 Pengolahan Citra Teori dan Aplikasi
H.lsb = (jumlsb_atas / jum_piksel) / ...
(jumlsb_bawah / jum_piksel)^2 - 1;
H.ls = (jumls_atas / jum_piksel) / ...
(jumls_bawah / jum_piksel)^2 - 1;
H.lar = jumlar / jum_piksel;
H.lag = jumlag / jum_piksel;
H.lab = jumlab / jum_piksel;
H.la = jumla / jum_piksel;
H.l2r = sqrt(juml2r / jum_piksel);
H.l2g = sqrt(juml2g / jum_piksel);
H.l2b = sqrt(juml2b / jum_piksel);
H.l2 = sqrt(juml2 / jum_piksel);
H.l4r = (juml4r / jum_piksel)^(1/4);
H.l4g = (juml4g / jum_piksel)^(1/4);
H.l4b = (juml4b / jum_piksel)^(1/4);
H.l4 = (juml4 / jum_piksel)^(1/4);
H.l6r = (juml6r / jum_piksel)^(1/6);
H.l6g = (juml6g / jum_piksel)^(1/6);
H.l6b = (juml6b / jum_piksel)^(1/6);
H.l6 = (juml6 / jum_piksel)^(1/6);
H.l8r = (juml8r / jum_piksel)^(1/8);
H.l8g = (juml8g / jum_piksel)^(1/8);
H.l8b = (juml8b / jum_piksel)^(1/8);
H.l8 = (juml8 / jum_piksel)^(1/8);
H.l10r = (juml10r / jum_piksel)^(1/10);
H.l10g = (juml10g / jum_piksel)^(1/10);
H.l10b = (juml10b / jum_piksel)^(1/10);
H.l10 = (juml10 / jum_piksel)^(1/10);
Akhir Program
Contoh penggunaan fungsi lacunarity:
>> Img = imread('C:\Image\lapangan.png');
>> G = lacunarity(Img)
G =
scalar structure containing the fields:
lsr = 0.241901390093493
lsg = 0.309382645500090
Pemerolehan Fitur Tekstur 671
lsb = 0.330578855094647
ls = 2.62283837310405
lar = 2.26230885876551e-016
lag = -6.26450950373207e-015
lab = 1.98432322425409e-015
la = 5.19464568545421e-013
l2r = 0.491834718267793
l2g = 0.556221759283250
l2b = 0.574959872595208
l2 = 1.61951794466923
l4r = 0.624600061772115
l4g = 0.712312444691126
l4b = 0.754989005910267
l4 = 1.92692968430085
l6r = 0.703270891746616
l6g = 0.810362947598715
l6b = 0.864331218749092
l6 = 2.11922715098243
l8r = 0.753937245024470
l8g = 0.872513094744670
l8b = 0.932269246020702
l8 = 2.23333538990262
l10r = 0.789310933422419
l10g = 0.914539454662371
l10b = 0.977728062526614
l10 = 2.30607817570218
>>
Perlu diketahui:
lsr berarti Ls untuk komponen R;
lsg berarti Ls untuk komponen G;
672 Pengolahan Citra Teori dan Aplikasi
lsb berarti Ls untuk komponen B;
ls berarti Ls untuk aras keabuan;
lar berarti La untuk komponen R;
lag berarti La untuk komponen G;
lab berarti La untuk komponen B;
la berarti La untuk aras keabuan;
l2r berarti L2 untuk komponen R;
l2g berarti L2 untuk komponen G;
l2b berarti L2 untuk komponen B;
l2 berarti L2 untuk aras keabuan;
l4r berarti L4 untuk komponen R;
l4g berarti L4 untuk komponen G;
l4b berarti L4 untuk komponen B;
l4 berarti L4 untuk aras keabuan;
l6r berarti L6 untuk komponen R;
l6g berarti L6 untuk komponen G;
l6b berarti L6 untuk komponen B;
l6 berarti L6 untuk aras keabuan;
l8r berarti L8 untuk komponen R;
l8g berarti L8 untuk komponen G;
l8b berarti L8 untuk komponen B;
l8 berarti L8 untuk aras keabuan;
l10r berarti L10 untuk komponen R;
l10g berarti L10 untuk komponen G;
l10b berarti L10 untuk komponen B;
l10 berarti L10 untuk aras keabuan.
13.6 GLCM
Gray Level Co-occurrence Matrices (GLCM) pertama kali diusulkan oleh
Haralick pada tahun 1973 dengan 28 fitur untuk menjelaskan pola spasial
(Kulkarni, 1994). GLCM menggunakan perhitungan tekstur pada orde kedua.
Pengukuran tekstur pada orde pertama menggunakan perhitungan statistika
Pemerolehan Fitur Tekstur 673
didasarkan pada nilai piksel citra asli semata, seperti varians, dan tidak
memperhatikan hubungan ketetanggaan piksel. Pada orde kedua, hubungan
antarpasangan dua piksel citra asli diperhitungkan (Hall-Beyer, 2007).
Misalkan, f(x, y) adalah citra dengan ukuran Nx dan Ny yang memiliki
piksel dengan kemungkinan hingga L level dan 𝑟 ⃗⃗ adalah vektor arah ofset spasial.
𝐺𝐿𝐶𝑀𝑟 (𝑖, 𝑗) didefinisikan sebagai jumlah piksel dengan 𝑗 ∈ 1, . . , 𝐿 yang terjadi
pada ofset 𝑟 ⃗⃗ terhadap piksel dengan nilai 𝑖 ∈ 1, . . , 𝐿, yang dapat dinyatakan
dalam rumus (Newsam dan Kammath, 2005):
𝐺𝐿𝐶𝑀𝑟 (𝑖, 𝑗) = #{(𝑥1,𝑦1),(𝑥2,𝑦2) ∈ (𝑁𝑥 ,𝑁𝑦) × (𝑁𝑥 ,𝑁𝑦)|𝑓(𝑥1,𝑦1) =
𝑗𝑟 = (𝑥2 − 𝑥1,𝑦2 − 𝑦1)⃗⃗ ⃗⃗ ⃗⃗ ⃗⃗ ⃗⃗⃗ ⃗⃗ ⃗⃗ ⃗⃗ ⃗⃗ ⃗⃗ ⃗⃗ ⃗⃗ ⃗⃗⃗ ⃗⃗ ⃗⃗ ⃗⃗ ⃗⃗ ⃗} (13.16)
Dalam hal ini, ofset 𝑟 ⃗⃗ dapat berupa sudut dan/atau jarak. Sebagai contoh, gambar
berikut memperlihatkan empat arah untuk GLCM.
Gambar 13.8 Contoh arah untuk GLCM
dengan sudut 0o, 45o, 90o, dan 135o
Untuk kepentingan ilustrasi, ketetanggaan piksel dapat dipilih ke arah
timur (kanan). Salah satu cara untuk merepresentasikan hubungan ini yaitu berupa
(1,0), yang menyatakan hubungan dua piksel yang berjajar horizontal dengan
piksel bernilai 1 diikuti dengan piksel bernilai 0. Berdasarkan komposisi tersebut,
jumlah kelompok piksel yang memenuhi hubungan tersebut dihitung. Hal ini
diilustrasikan pada Gambar 13.9.
674 Pengolahan Citra Teori dan Aplikasi
Gambar 13.9 Penentuan awal matriks GLCM berbasis pasangan dua piksel
Matriks pada Gambar 13.9(c) dinamakan matrix framework. Matriks ini
perlu diolah menjadi matriks yang simetris dengan cara menambahkan dengan
hasil transposnya, sebagaimana diperlihatkan pada Gambar 13.10.
Gambar 13.10 Contoh pembentukan matriks GLCM yang simetris
0 0 1 1
0 0 1 1
0 2 2 2
2 2 3 3
0 1 2 3
0
1
2
3
0,0 0,1 0,2 0,3
1,0 1,1 1,2 1,3
2,0 2,1
2,2 2,3
3,0 3,1 3,2 3,3
0 1 2 3
0
1
2
3
(a) Citra asli (a) Komposisi Piksel
(c) Jumlah pasangan piksel
2 2 1 0
0 2 0 0
0 0
3 1
0 0 0 1
0 1 2 3
0
1
2
3
Komposisi piksel 0 dengan 0
Komposisi piksel 3
dengan 3
Pemerolehan Fitur Tekstur 675
Untuk menghilangkan ketergantungan pada ukuran citra, nilai-nilai elemen
GLCM perlu dinormalisasi sehingga jumlahnya bernilai 1. Dengan demikian,
contoh di depan akan menjadi seperti berikut:
[ 4
24
2
24
1
24
0
242
24
4
24
0
24
0
241
24
0
24
6
24
1
240
24
0
24
1
24
2
24]
Untuk mendapatkan fitur GLCM, hanya beberapa besaran yang diusulkan
Haralick yang dipakai. Misalnya, Newsam dan Kammath (2005) hanya
menggunakan lima besaran untuk GLCM, berupa angular second moment (ASM),
contrast, inverse different moment (IDM), entropi, dan korelasi.
ASM yang merupakan ukuran homogenitas citra dihitung dengan cara
seperti berikut:
𝐴𝑆𝑀 = ∑ ∑ (𝐺𝐿𝐶𝑀(𝑖, 𝑗)2𝐿𝑗=1
𝐿𝑖=1 (13.17)
Dalam hal ini, L menyatakan jumlah level yang digunakan untuk komputasi.
Kontras yang merupakan ukuran keberadaan variasi aras keabuan piksel
citra dihitung dengan cara seperti berikut:
𝐾𝑜𝑛𝑡𝑟𝑎𝑠 = ∑ 𝑛𝐿𝑛=1
2{∑ 𝐺𝐿𝐶𝑀(𝑖, 𝑗)|𝑖−𝑗|=𝑛 } (13.18)
Fitur IDM digunakan untuk mengukur homogenitas. IDM dihitung dengan
cara seperti berikut:
𝐼𝐷𝑀 = ∑ ∑ (𝐺𝐿𝐶𝑀(𝑖,𝑗)2
1+(𝑖−𝑗)2𝐿𝑗=1
𝐿𝑖=1 (13.19)
Entropi menyatakan ukuran ketidakteraturan aras keabuan di dalam citra.
Nilainya tinggi jika elemen-elemen GLCM mempunyai nilai yang relatif sama.
676 Pengolahan Citra Teori dan Aplikasi
Nilai rendah jika elemen-elemen GLCM dekat dengan nilai 0 atau 1. Rumus
untuk menghitung entropi:
𝐸𝑛𝑡𝑟𝑜𝑝𝑖 = − ∑ ∑ (𝐺𝐿𝐶𝑀(𝑖, 𝑗)log (𝐺𝐿𝐶𝑀(𝑖, 𝑗)𝐿𝑗=1
𝐿𝑖=1 (13.20)
Korelasi yang merupakan ukuran ketergantungan linear antarnilai aras
keabuan dalam citra dihitung dengan menggunakan rumus:
𝐾𝑜𝑟𝑒𝑙𝑎𝑠𝑖 =∑ ∑ (𝑖𝑗)(𝐺𝐿𝐶𝑀(𝑖,𝑗)−𝐿
𝑗=1𝐿𝑖=1 𝜇𝑖
′𝜇𝑗′
𝜎𝑖′𝜎𝑗
′ (13.21)
dengan
𝜇𝑖′ = ∑ ∑ 𝑖 ∗ 𝐺𝐿𝐶𝑀(𝑖, 𝑗)𝐿
𝑗=1𝐿𝑖=1 (13.22)
𝜇𝑗′ = ∑ ∑ 𝑗 ∗ 𝐺𝐿𝐶𝑀(𝑖, 𝑗)𝐿
𝑗=1𝐿𝑖=1 (13.23)
𝜎𝑗2 = ∑ ∑ 𝐺𝐿𝐶𝑀(𝑖, 𝑗)(𝑖 − 𝜇𝑖
′)2𝐿𝑗=1
𝐿𝑖=1 (13.24)
𝜎𝑖2 = ∑ ∑ 𝐺𝐿𝐶𝑀(𝑖, 𝑗)(𝑖 − 𝜇𝑖
′)2𝐿𝑗=1
𝐿𝑖=1 (13.25)
Implementasi GLCM untuk mendapatkan beberapa fitur yang telah
dijelaskan khusus untuk jarak satu ditunjukkan di bawah ini.
function [G0, G45, G90, G135] = glcm(F)
% GLCM Menghasilkan fitur GLCM.
% Masukan: F = Citra berskala keabuan
% Keluaran: Fitur = fitur GLCM untuk beberapa sudut.
[tinggi, lebar] = size(F);
% --- Bentuk GLCM
GLCM0 = zeros(256, 256);
total_piksel0 = 0;
GLCM45 = zeros(256, 256);
total_piksel45 = 0;
Program : glcm.m
Pemerolehan Fitur Tekstur 677
GLCM90 = zeros(256, 256);
total_piksel90 = 0;
GLCM135 = zeros(256, 256);
total_piksel135 = 0;
for y=2: tinggi-1
for x=2: lebar-1
% -- Sudut 0
a = F(y, x);
b = F(y, x+1);
GLCM0(a+1, b+1) = GLCM0(a+1, b+1) + 1;
total_piksel0 = total_piksel0 + 1;
% -- Sudut 45
a = F(y, x);
b = F(y-1, x+1);
GLCM45(a+1, b+1) = GLCM45(a+1, b+1) + 1;
total_piksel45 = total_piksel45 + 1;
% -- Sudut 90
a = F(y, x);
b = F(y-1, x);
GLCM90(a+1, b+1) = GLCM90(a+1, b+1) + 1;
total_piksel90 = total_piksel90 + 1;
% -- Sudut 135
a = F(y, x);
b = F(y-1, x-1);
GLCM135(a+1, b+1) = GLCM135(a+1, b+1) + 1;
total_piksel135 = total_piksel135 + 1;
end
end
GLCM0 = GLCM0 / total_piksel0;
GLCM45 = GLCM45 / total_piksel45;
GLCM90 = GLCM90 / total_piksel90;
GLCM135 = GLCM135 / total_piksel135;
% --- Hitung ASM
asm0 = 0.0;
asm45 = 0.0;
asm90 = 0.0;
asm135 = 0.0;
for a=0 : 255
for b=0 : 255
asm0 = asm0 + (GLCM0(a+1, b+1) * GLCM0(a+1, b+1));
asm45 = asm45 + (GLCM45(a+1, b+1) * GLCM45(a+1, b+1));
asm90 = asm90 + (GLCM90(a+1, b+1) * GLCM90(a+1, b+1));
asm135 = asm135 + (GLCM135(a+1, b+1) * GLCM135(a+1, b+1));
end
end
% --- Hitung kontras
kontras0 = 0.0;
kontras45 = 0.0;
kontras90 = 0.0;
kontras135 = 0.0;
678 Pengolahan Citra Teori dan Aplikasi
for a=0 : 255
for b=0 : 255
kontras0 = kontras0 + (a-b)*(a-b)*(GLCM0(a+1,b+1));
kontras45 = kontras45 + (a-b)*(a-b)*(GLCM45(a+1,b+1));
kontras90 = kontras90 + (a-b)*(a-b)*(GLCM90(a+1,b+1));
kontras135 = kontras135 + (a-b)*(a-b)*(GLCM135(a+1,b+1));
end
end
% --- Hitung IDM
idm0 = 0.0;
idm45 = 0.0;
idm90 = 0.0;
idm135 = 0.0;
for a = 0: 255
for b = 0 : 255
idm0 = idm0 + (GLCM0(a+1, b+1) / (1+(a-b)*(a-b)));
idm45 = idm45 + (GLCM45(a+1, b+1) / (1+(a-b)*(a-b)));
idm90 = idm90 + (GLCM90(a+1, b+1) / (1+(a-b)*(a-b)));
idm135 = idm135 + (GLCM135(a+1, b+1) / (1+(a-b)*(a-b)));
end
end
% --- Hitung entropi
entropi0 = 0.0;
entropi45 = 0.0;
entropi90 = 0.0;
entropi135 = 0.0;
for a=0 : 255
for b=0 : 255
if (GLCM0(a+1, b+1) ~= 0)
entropi0 = entropi0 - (GLCM0(a+1, b+1) * ...
(log(GLCM0(a+1, b+1))));
end
if (GLCM45(a+1, b+1) ~= 0)
entropi45 = entropi45 - (GLCM45(a+1, b+1) * ...
(log(GLCM45(a+1, b+1))));
end
if (GLCM90(a+1, b+1) ~= 0)
entropi90 = entropi90 - (GLCM90(a+1, b+1) * ...
(log(GLCM90(a+1, b+1))));
end
if (GLCM135(a+1, b+1) ~= 0)
entropi135 = entropi135 - (GLCM135(a+1, b+1) * ...
(log(GLCM135(a+1, b+1))));
end
end
end
% -- Hitung kovarians
% -- Hitung px [] dan py [] dulu
korelasi0 = 0.0;
px0 = 0;
py0 = 0;
reratax0 = 0.0;
reratay0 = 0.0;
Pemerolehan Fitur Tekstur 679
stdevx0 = 0.0;
stdevy0 = 0.0;
korelasi45 = 0.0;
px45 = 0;
py45 = 0;
reratax45 = 0.0;
reratay45 = 0.0;
stdevx45 = 0.0;
stdevy45 = 0.0;
korelasi90 = 0.0;
px90 = 0;
py90 = 0;
reratax90 = 0.0;
reratay90 = 0.0;
stdevx90 = 0.0;
stdevy90 = 0.0;
korelasi135 = 0.0;
px135 = 0;
py135 = 0;
reratax135 = 0.0;
reratay135 = 0.0;
stdevx135 = 0.0;
stdevy135 = 0.0;
for a=0 : 255
for b=0: 255
px0 = px0 + a * GLCM0 (a+1, b+1);
py0 = py0 + b * GLCM0 (a+1, b+1);
px45 = px45 + a * GLCM45 (a+1, b+1);
py45 = py45 + b * GLCM45 (a+1, b+1);
px90 = px90 + a * GLCM90 (a+1, b+1);
py90 = py90 + b * GLCM90 (a+1, b+1);
px135 = px135 + a * GLCM135 (a+1, b+1);
py135 = py135 + b * GLCM135 (a+1, b+1);
end
end
% Hitung deviasi standar
for a=0 : 255
for b=0 : 255
stdevx0 = stdevx0 + (a-px0) * (a-px0) * GLCM0(a+1, b+1);
stdevy0 = stdevy0 + (b-py0) * (b-py0) * GLCM0(a+1, b+1);
stdevx45 = stdevx45 + (a-px45) * ...
(a-px45) * GLCM45(a+1, b+1);
stdevy45 = stdevy45 + (b-py45) * ...
(b-py45) * GLCM45(a+1, b+1);
stdevx90 = stdevx90 + (a-px90) * ...
(a-px90) * GLCM90(a+1, b+1);
stdevy90 = stdevy90 + (b-py90) * ...
(b-py90) * GLCM90(a+1, b+1);
680 Pengolahan Citra Teori dan Aplikasi
stdevx135 = stdevx135 + (a-px135) * ...
(a-px135) * GLCM135(a+1, b+1);
stdevy135 = stdevy135 + (b-py135) * ...
(b-py135) * GLCM135(a+1, b+1);
end
end
% Hitung korelasi
for a = 0 : 255
for b = 0 : 255
korelasi0 = korelasi0 + ((a-px0)*(b-py0)* ...
GLCM0 (a+1, b+1)/(stdevx0*stdevy0));
korelasi45 = korelasi45 + ((a-px45)*(b-py45)* ...
GLCM45 (a+1, b+1)/(stdevx45 * stdevy45));
korelasi90 = korelasi90 + ((a-px90)*(b-py90)* ...
GLCM90 (a+1, b+1)/(stdevx90 * stdevy90));
korelasi135 = korelasi135 + ((a-px135)*(b-py135)* ...
GLCM135 (a+1, b+1)/(stdevx135 * stdevy135));
end
end
G0.asm = asm0;
G0.kontras = kontras0;
G0.idm = idm0;
G0.entropi = entropi0;
G0.korelasi = korelasi0;
G45.asm = asm45;
G45.kontras = kontras45;
G45.idm = idm45;
G45.entropi = entropi45;
G45.korelasi = korelasi45;
G90.asm = asm90;
G90.kontras = kontras90;
G90.idm = idm90;
G90.entropi = entropi90;
G90.korelasi = korelasi90;
G135.asm = asm135;
G135.kontras = kontras135;
G135.idm = idm135;
G135.entropi = entropi135;
G135.korelasi = korelasi135;
Akhir Program
Contoh penggunaan fungsi glcm :
>> Batik = rgb2gray(imread('C:\Image\batik.png'));
>> [G0, G45, G90, G135] = glcm(Batik)
G0 =
Pemerolehan Fitur Tekstur 681
scalar structure containing the fields:
asm = 6.5150e-004
kontras = 537.71
idm = 0.10643
entropi = 8.4453
korelasi = 6.8221e-004
G45 =
scalar structure containing the fields:
asm = 5.6409e-004
kontras = 778.22
idm = 0.085559
entropi = 8.5749
korelasi = 5.8479e-004
G90 =
scalar structure containing the fields:
asm = 6.6484e-004
kontras = 350.20
idm = 0.10536
entropi = 8.3458
korelasi = 7.5820e-004
G135 =
scalar structure containing the fields:
682 Pengolahan Citra Teori dan Aplikasi
asm = 5.8796e-004
kontras = 705.20
idm = 0.092194
entropi = 8.5474
korelasi = 6.1446e-004
>>
Pada contoh di atas, G0, G45, G90, dan G135 secara berturut-turut berisi lima
buah fitur tekstur pada arah 00, 450, 900, dan 1350.
Perlu diketahui, fitur GLCM bergantung pada rotasi. Oleh karena itu,
pendekatan yang dapat dilakukan adalah dengan meratakan nilai fitur untuk
keempat sudut.
1. Jelaskan kegunaan tekstur untuk kepentingan analisis.
2. Jelaskan pengertian istilah- istilah berikut.
(a) Tekstur teratur
(b) Mikrotekstur
(c) Makrotekstur
(d) Tekstur stokastik
(e) Tekstur struktural
3. Cobalah berikan ilustrasi tentang texton.
4. Apa kelebihan dan kelemahan tekstur yang berbasis histogram?
5. Jelaskan istilah- istilah berikut yang berhubungan dengan tekstur.
(a) Entropi
(b) Energi
(c) Skewness
(d) Kurtosis
Latihan
Pemerolehan Fitur Tekstur 683
6. Gambarkan tiga cadar berukuran 1x3 yang digunakan oleh Laws untuk
mendapatkan energi tekstur. Apa kegunaan setiap cadar?
7. Apa yang dimaksud lacunarity? Bagaimana perumusannya?
8. Mengapa GLCM digolongkan sebagai tekstur statistis berorde dua?
9. Implementasikan fungsi untuk menghitung skewness dan kurtosis berdasarkan
PDF yang dibahas di Subbab 13.3. Ujilah pada tiga citra yang menurut Anda
berbeda dalam tekstur.
10. Modifikasilah fungsi lacunarity agar dapat dipakai untuk menghitung fitur
tekstur citra berskala keabuan.
11. Tulislah fungsi untuk mengeksplorasi rumus
p
M
m
N
n
p
M
k
N
lkl
mnp
PMN
PMN
L
/1
1 1
1 1
11
1
dengan menjadikan p sebagai argumen.
12. Lakukan eksperimen untuk memotret suatu objek yang mengandung suatu
pola. Kemudian lakukan pemutaran dengan berbagai sudut. Hitunglah nilai
rerata fitur-fitur yang didasarkan pada GLCM untuk empat sudut (0o, 45o, 90o,
dan 135o) untuk setiap citra. Apakah hasilnya mirip?
13. Kembangkan fungsi GLCM yang bisa mengukur pada jarak lebih dari 1
piksel.