Texture Analysis – Gray-Level Co-Occurrence Matrix (GLCM) – GUI Matlab


Analisis tekstur merupakan salah satu jenis ekstraksi ciri yang didasarkan pada ciri statistik citra. Analisis tekstur dapat dilakukan dengan metode ekstraksi ciri orde satu, ekstraksi ciri orde dua, filter gabor, transformasi wavelet, dsb.

Berikut ini merupakan pemrograman gui matlab untuk analisis tekstur menggunakan metode Gray-Level Co-Occurrence Matrix (GLCM) yang merupakan ciri statistik orde dua. Ekstraksi ciri dilakukan berdasarkan parameter contrast, correlation, energy, dan homogeneity.

Tampilan GUI Matlab untuk analisis tekstur citra menggunakan metode Gray-Level Co-Occurrence Matrix (GLCM) adalah sebagai berikut:

1. Gray-Level Co-Occurrence Matrix (GLCM) dengan pixel distance = 1
1

2. Gray-Level Co-Occurrence Matrix (GLCM) dengan pixel distance = 2 2

3. Gray-Level Co-Occurrence Matrix (GLCM) dengan pixel distance = 3 3
Source code dan citra untuk ekstraksi ciri tekstur menggunakan metode GLCM dapat diunduh pada laman berikut ini: Source Code

Sedangkan tampilan source code nya adalah:

function varargout = Texture_Analysis(varargin)
% TEXTURE_ANALYSIS MATLAB code for Texture_Analysis.fig
% TEXTURE_ANALYSIS, by itself, creates a new TEXTURE_ANALYSIS or raises the existing
% singleton*.
%
% H = TEXTURE_ANALYSIS returns the handle to a new TEXTURE_ANALYSIS or the handle to
% the existing singleton*.
%
% TEXTURE_ANALYSIS('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in TEXTURE_ANALYSIS.M with the given input arguments.
%
% TEXTURE_ANALYSIS('Property','Value',...) creates a new TEXTURE_ANALYSIS or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before Texture_Analysis_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to Texture_Analysis_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help Texture_Analysis

% Last Modified by GUIDE v2.5 11-Aug-2015 10:46:06

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
    'gui_Singleton', gui_Singleton, ...
    'gui_OpeningFcn', @Texture_Analysis_OpeningFcn, ...
    'gui_OutputFcn', @Texture_Analysis_OutputFcn, ...
    'gui_LayoutFcn', [] , ...
    'gui_Callback', []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before Texture_Analysis is made visible.
function Texture_Analysis_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to Texture_Analysis (see VARARGIN)

% Choose default command line output for Texture_Analysis
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);
movegui(hObject,'center');

% UIWAIT makes Texture_Analysis wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = Texture_Analysis_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;


% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
[filename,pathname] = uigetfile({'*.*'});

if ~isequal(filename,0)
    Info = imfinfo(fullfile(pathname,filename));
    if Info.BitDepth == 1
        msgbox('Citra masukan harus citra RGB atau Grayscale');
        return
    elseif Info.BitDepth == 8
        Img = imread(fullfile(pathname,filename));
        axes(handles.axes1)
        cla('reset')
        imshow(Img)
        title('Grayscale Image')
    else
        Img = rgb2gray(imread(fullfile(pathname,filename)));
        axes(handles.axes1)
        cla('reset')
        imshow(Img)
        title('Grayscale Image')
    end
else
    return
end

handles.Img = Img;
guidata(hObject,handles);

% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
Img = handles.Img;
pixel_dist = str2double(get(handles.edit1,'String'));
GLCM = graycomatrix(Img,'Offset',[0 pixel_dist; -pixel_dist pixel_dist; -pixel_dist 0; -pixel_dist -pixel_dist]);
stats = graycoprops(GLCM,{'contrast','correlation','energy','homogeneity'});

Contrast = stats.Contrast;
Correlation = stats.Correlation;
Energy = stats.Energy;
Homogeneity = stats.Homogeneity;

data = get(handles.uitable1,'Data');
data{1,1} = num2str(Contrast(1));
data{1,2} = num2str(Contrast(2));
data{1,3} = num2str(Contrast(3));
data{1,4} = num2str(Contrast(4));
data{1,5} = num2str(mean(Contrast));

data{2,1} = num2str(Correlation(1));
data{2,2} = num2str(Correlation(2));
data{2,3} = num2str(Correlation(3));
data{2,4} = num2str(Correlation(4));
data{2,5} = num2str(mean(Correlation));

data{3,1} = num2str(Energy(1));
data{3,2} = num2str(Energy(2));
data{3,3} = num2str(Energy(3));
data{3,4} = num2str(Energy(4));
data{3,5} = num2str(mean(Energy));

data{4,1} = num2str(Homogeneity(1));
data{4,2} = num2str(Homogeneity(2));
data{4,3} = num2str(Homogeneity(3));
data{4,4} = num2str(Homogeneity(4));
data{4,5} = num2str(mean(Homogeneity));

set(handles.uitable1,'Data',data,'ForegroundColor',[0 0 0])

function edit1_Callback(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit1 as text
% str2double(get(hObject,'String')) returns contents of edit1 as a double


% --- Executes during object creation, after setting all properties.
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end

Save

Posted on August 11, 2015, in Pengenalan Pola, Pengolahan Citra and tagged , , , , , , , , , , , , , , , , , , , , , , , , , , . Bookmark the permalink. 67 Comments.

  1. Assalamu’alaikum mas adi, glcm ini bisa dipakai unt ekstraksi fitur kan ya ? Trus glcm ini dipakainya tepat setelah grayscaling atau pra-process dulu trus di grayscaling lagi mas ? Terima kasih mas adi atas jawabannya.

    • Waalaikumsalam Wr. Wb.
      GLCM merupakan metode untuk ekstraksi ciri tekstur statistik orde kedua
      Masukan dari GLCM adalah citra grayscale
      Jika citra asli adalah citra RGB maka harus dikonversi terlebih dahulu menjadi grayscale
      Jika citra kualitas citra grayscale belum baik, maka harus di pre-processing terlebih dahulu agar kualitasnya menjadi lebih baik
      Tetapi jika kualitas citra grayscale sudah baik, maka tidak perlu dilakukan pre-processing
      Penjelasan lebih lanjut bisa dipelajari pada laman berikut https://pemrogramanmatlab.wordpress.com/pengenalan-pola/
      Semoga membantu

    • Lalu dari ke empat parameter diatas, yg bisa dijadikan input untuk jst yg mana ya ? Apa semuanya bisa ? Ada ketentuan khusus ga ?

    • Secara umum, keempat ciri tsb dapat digunakan sbg masukan jst
      Ciri yg dapat digunakan sebagai masukan jst adalah ciri yang dapat membedakan antara kelas yg satu dengan kelas yg lain secara signifikan
      Diperlukan kajian khusus untuk memilih ciri yang tepat untuk digunakan sbg masukan jst, kajian tsb bisa dipelajari dalam materi ‘feature selection’

  2. Oke, terima kasih banyak mas adi🙂

  3. assamualaikum, mas ada gak proses perhitungan ciri dengan GLCM secara manualnya?,
    lagi butuh untuk referensi tugas akhir,, kalo ada tolong d share ya mas,,

  4. assamualaikum, bang kalau paper nya ada..
    kalau ada tolong d share ya bang,,

  5. ka saya mau tanya, saya coba source code di atas tapi masih ada erorr itu kenapa ya ?

  6. terima kasih ka

  7. ka maaf saya ada pertanyaan lagi, saya ingin mengambil tekstur dari suatu citra tapi ukuran pixel citra cita berbeda- beda apakah itu berpengaruh pada hasil penghitungan tekstur nya ? dan bagaimana kalau saya menyamakan semua pixel citra yang akan saya hitung tekstur nya. terima kasih

  8. ka bisa penjelasan secara detail nya ga pengaruhnya di bagian mana ?
    terima kasih

    • pembentukan matriks kookurensi dalam operasi glcm dilakukan pada setiap piksel citra grayscale, oleh karena itu, agar jumlah piksel yang akan diolah sama, maka ukuran citra grayscale harus seragam

  9. terima kasih atas jawabannya ka, ka saya boleh minta perhitungan gclm secara manual ka ?

  10. mas, cara normalisasi GLCM bagaimana ya?
    boleh minta source code normalisasi GLCM?

  11. untuk variabel x dan y nya menunjukkan apa ya mas?

  12. y data hasil normalisasi
    x data asli sebelum dinormalisasi

  13. xmin xmax dan ymin ymax bisa didapat darimana ya?

    • xmin nilai minimal dari data asli
      xmax nilai maksimal dari data asli
      ymin nilai minimal dari data normalisasi
      ymax nilai maksimal dari data normalisasi

  14. jadi kan gini mas, ukuran citra grayscale yang akan dianalisis tekstur tidak seragam, dan tidak memungkinkan untuk diterapkan fungsi imresize. Oleh karena itu, diperlukan normalisasi matriks GLCM untuk menyeragamkan ukuran piksel sebelum dihitung contrast, correlation, energy, homogeneity.
    Mungkin mas punya referensi / paper tentang normalisasi matriks GLCM.
    Terima kasih.

  15. Seperti yg sdh saya jelaskan sebelumnya, masukan dari glcm adalah citra grayscale dg ukuran yg seragam, jika ukuran citra tdk seragam, maka harus diseragamkan dg cara diresize atau dicropping
    Jika masukan glcm adalah citra dg ukuran yg tidak seragam, maka akan diperoleh tingkat akurasi yg rendah dlm proses pengenalan

  16. Assalamualaikum Wr. Wb
    Mas adi, saya sedang mengerjakan tugas akhir.
    saya mau tanya. setelah semua citra di pre-process untuk mendapatkan hasil citra yg baik yg kemudian akan dilanjutkan ke tahap pengolahan pola “GLCM” u/ mendapatkan nilai Co-ocurrence. nah kenapa saat inputannya sebuah “citra” itu tidak bisa di proses. sedangkan ketika nilai matriks pada citra tersebut disalin ke file exel dan inputannya menjadi .xls dia bisa memproses dan mendapatkan nilai koocurrenc nya. terimaksih
    mohon bimbingannya mas.

    • Waalaikumsalam Wr. Wb.
      Yunia Mentari,
      Masukan dari metode GLCM adalah berupa citra grayscale
      Karena citra grayscale merupakan representasi dari matriks 2D
      Maka masukan dari GLCM dapat dikatakan adalah sebuah matriks yg merepresentasikan citra grayscale
      Baik menggunakan matlab maupun menggunakan excel, keluaran dari GLCM adalah berupa matriks kookurensi yang kemudian dapat kita ekstrak cirinya berdasarkan parameter ciri statistik orde dua seperti kontras, homogenitas, energi, entropi, dll

  17. Yunia Mentari

    Oh begitu, terimakasih ya mas adi. atas penjelasannya🙂

    • Yunia Mentari

      mas mau tanya lagi, saya udah dapat nilai coocurrenc nya. lalu saya masukkan code (mengikuti referensi)
      D =(glcm1+glcm2+glcm3+glcm4)
      MatKook = D/4
      I=[1:258];
      sumX=sum(MatKook)
      sumY=sum(MatKook’);

      MeanX=sumX*I’; MeanY=sumY*I’;
      StdX=sqrt((I-MeanX).^2*SumX’);
      StdY=sqrt((I-MeanY).^2*SumY’);

      CiriASM=sum(sum(MatKook.^2));

      Maksud dari ” I = [1:258] itu apaya mas. soalnya prosesnya error karena matrik dimensinya berbeda.

      Matrik Kookurensinya 8×8

  18. Teguh Esa Putra

    Asslammualaikum. gan untuk source code perhitungan manual nya ada ?.

    kalo ada share dong gan. atau bisa kirim ke email ane ? umbyteguh@gmail.com

    untuk Tugas Akhir gan.

  19. Mas mau bertanya tentang ekstraksi ciri glcm. Nah yang mau saya tanyakan, misalnya kita memiliki 16 data (contrast_0, corr_0, homogenity_0, energy_0, contrast_45, cor_45…..dst) dari 1 gambar, untuk proses pelatihan menggunakan backpropagation bagusnya untuk satu gambar dibagi menjadi 4 data per pattern (setiap pattern mewakili 1 sudut sehingga ada 4 pattern) atau menggunakan 16 data tersebut sebagai inputan backpropagation mas? Terima kasih

  20. slamat malam mas. apa boleh sya minta cara hitung manual ciri statistik GLCMx ?

  21. Mas saya mau tanya, kalau untuk ekstraksi ciri wajah kira-kira cocok ga ya kalo pake metode GLCM ? Thx

    • Ekstraksi ciri wajah bisa dilakukan melalui analisis tekstur dg metode glcm
      Saya pernah melakukan penelitian pengenalan wajah dg segmentasi menggunakan algoritma viola-jones, ekstraksi ciri melalui analisis tekstur dg metode glcm, dan klasifikasi menggunakan algoritma jaringan syaraf tiruan probabilistik (pnn)
      Akurasi yg diperoleh sistem tersebut untuk mengenali wajah cukup tinggi
      Yang perlu diperhatikan dalam sistem tsb adalah faktor pencahayaan saat proses akuisisi citra, sebaiknya usahakan intensitas cahaya di tempat akuisisi citra selalu homogen

  22. mohon maaf gan, mau tanya apakah bisa GLCM digunakan dari hasil deteksi tepi LOG yang sudah di thresholding terlebih dahulu sebelumny?

    • GLCM merupakan singkatan dari Gray Level Co-occurence Matrix yang merupakan metode ekstraksi ciri tekstur dari citra gray level/ grayscale. GLCM hanya dapat digunakan untuk menganalisis citra grayscale, tidak bisa untuk citra rgb atau biner.
      Ada dua macam hasil keluaran segmentasi citra dg metode deteksi tepi yaitu citra grayscale dan citra biner. Jika citra grayscale hasil keluaran deteksi tepi dianalisis teksturnya dg metode GLCM, maka hal tsb dapat dilakukan meskipun tidak umum. Sedangkan jika citra biner hasil keluaran deteksi tepi digunakan untuk mengcropping citra grayscale asli, sehingga diperoleh citra grayscale hasil segmentasi, maka dapat dilakukan analisis tekstur dg metode GLCM

  23. assalamualaikum mas adi. mohon bantuannya mas, untuk berkenan mengirim perhitungan manualnya mas. invers.uuk@gmail.com
    terimakasih🙂

  24. benar, d merupakan jarak antara suatu piksel dengan piksel tetangganya yang berorientasi sudut tertentu. Secara teori, semakin dekat jarak yang digunakan maka matriks kookurensi yang dihasilkan akan semakin mencirikan tekstur objek. Secara praktek pun akurasi yang dihasilkan sistem dalam mengklasifikasikan citra akan lebih tinggi ketika menggunakan jarak 1 piksel dibandingkan menggunakan jarak lainnya.

  25. Untuk informasi, modul tsb bukan saya yang membuat
    Sudah saya cek kembali perhitungan pada modul tsb tidak ada yang salah
    Bisa dicek kembali perhitungan yang sudah uuk lakukan

  26. mungkin mas adi bila berkenan memberikan masukan terhadap hasil percobaan glcm yang telah saya lakukan, berikut juga telah saya cantumkan referensi dari beberapa jurnal dan modul
    https://drive.google.com/open?id=0B10F25wzXuhjY1A2MXp4T1BjS00

  27. Mas adi, bitdepth pada sebuah image apakah berpengaruh pada proses ekstraksi fitur pada glcm ?

  28. jika pengelompokkan tekstur menggunakan fuzzy c-means bisa kah? untuk coding nya apakah hampir sama?

  29. maaf sebelumnya mas, boleh minta sumber untuk coding algoritma fcm jika ada?
    terima kasih

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: