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 contoh aplikasi 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

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

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

File source code lengkap beserta citra untuk ekstraksi ciri tekstur menggunakan metode GLCM pada materi di atas dapat diperoleh melalui halaman berikut ini: Source Code

Sedangkan tampilan source code nya adalah:

% Adi Pamungkas, S.Si, M.Si
% Website: https://pemrogramanmatlab.com/
% Email  : adipamungkas@st.fisika.undip.ac.id

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 08-May-2017 13:46:33

% 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
    set(handles.pushbutton2,'Enable','on');
    set(handles.uitable1,'Data',[])
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])

% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
axes(handles.axes1)
cla reset
set(gca,'XTick',[])
set(gca,'YTick',[])

set(handles.pushbutton2,'Enable','off')
set(handles.edit1,'String','1')
set(handles.uitable1,'Data',[])

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

Tutorial pembuatan aplikasi GUI MATLAB untuk analisis tekstur menggunakan metode Gray-Level Co-Occurrence Matrix (GLCM) bisa dilihat pada video berikut ini:

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

  1. Assalamualaikum mas adi
    saya mau bertanya, apabila saya ingin menggunakan segmentasi otsu lalu di ekstrak menggunakan GLCM apa bisa ?
    kalau tidak bisa karena gambar hasil segmentasi berupa gambar biner, apa bisa gambar biner tersebut di revert kembali menjadi grayscale agar dapat di ekstrak GLCM ? dengan catatan sudah tersegmentasi

  2. mas, mau nanya apakah ada refensi di web ini masalah algoritma labelling component ? seperti algoritma pemisahan label pada citra

  3. assalamualaikum mas adi. untuk metode GLCM sendiri apakah ukuran piksel juga akan berpengaruh bila piksel yang saya gunakan berbeda pada setiap data?
    jika dinalarkan pembentukan cooncurance sendiri mengacu pada bitDepthnya.

    • Waalaikumsalam malek
      Utk pembuatan matriks kookurensi pada glcm dg ukuran matriks masukan yg berbeda2 akan tetap menghasilkan matriks kookurensi dg ukuran yg sama tetapi nilai yg ada pada matriks kookurensi akan berbeda karena nilai tsb diperoleh dari frekuensi kemunculan intensitas piksel
      Jika ukuran matriks masukan kecil maka nilai yg ada pada matriks kookurensi akan sedikit
      Sedangkan jika ukuran matriks masukan besar maka nilai yg ada pada matriks kookurensi akan banyak

    • sip makasih banyak mas adi infonya 🙂 🙂

  4. assalamu alaikum mas adi
    rara ingin bertanya
    code sintak untuk mencari ciri tekstur pada gambar mas adi bisa kasih contohnya tidak atau solusi mungkin
    ciri tekstur yang saya menggunakan adalah local range filter

  5. assalamualaikum mas adi, saya mau tanya, kalo mau analisis tekstur RGB dan HSI gimana ya coding nya? dan kalo gambar yang dianalisis banyak gimana?

  6. Mas Adi saya mau bertanya
    Ini saya mau ekstraksi ciri menggunakan glcm, objek yang ingin di ekstraksi sudah dimasking dari citra biner. nah pertanyaan saya, setelah masking kan backgroundnya berwarna hitam, apa warna hitammnya itu masuk hitungan glcm Mas Adi ? yg saya inginkan adalah glcmnya hanya menghitung yg grayscale.
    Terimakasih sebelumnya

  7. selamat pagi mas . saya mau nanya . saya sedang menyelesaikan tugas akhir . dan saya menggunakan metode GLCM, menggunakan fitu entropi , energi ,homogenitas dan contras. nah untuk perhitungan secara manual saya sudah mencoba cuma menurut penguji saya salah di bagian entropi dan energi . mungkin mas ada contoh pehitungan manual ?

  8. Selamat siang, Mas. Saya mohon bimbingan pengerjaan tentang wavelet transform haar mulai dari tahap awal hingga akhir buat penajaman krena digabungin sama metode lain. Ada referensi, mas? Makasih sebelumnya, mas.

  9. Assalamualaikum,

    Mas mau tanya, apa ada fitur GLCm yang non haralic?
    Terima kasih

  10. Assalammualaikum mas saya mau tanya. untuk ekstraksi fitur glcm dan klasifikasi (misal menggunakan knn), apakah sebelum melakukan glcm harus melakukan segmentasi, threshold, ekstraksi (glcm), kemudian klasifikasi (misal menggunakan knn). atau seperti masnya dari grayscale kemudian ekstraksi glcm, kemudian langsung klasifikasi (knn)? Terima kasih wassalammualaikum wr wb.

    • Waalaikumsalam
      jika dalam satu citra sudah berisi objek yang ingin dianalisis teksturnya, maka tidak perlu dilakukan segmentasi
      sedangkan jika dalam satu citra, objek belum terpisahkan dengan bcakground maka perlu dilakukan segmentasi

  11. assalamualaikum mas, saya mau nanya di glcm bagaiamana caranya buat ganti gray levelnya jadi 32 level dan jaraknya?

    saya pake coding ini

    I = imread(‘001 A.png’);
    gray = rgb2gray(I);
    offsets = [0 1;-1 1;-1 0;-1 -1];
    [GLCMS,SI] = graycomatrix(gray,’Of’, offsets);
    stats = graycoprops(GLCMS,{‘contrast’,’homogeneity’,’correlation’,’energy’});

    terima kasih sebelumnya

  12. Mas, ada kode untuk membuat aplikasi menggunakan algoritma prim menggunakan matlab ?

  13. mas adi saya mau tanya, saya menggunakan ekstraksi tekstur glcm dalam penelitian saya tetapi sudut yang saya gunakan hanya pada 0 derajat, tidak saya variasikan, karna dari penelitian2 yang saya baca sudut yang bagus adlah suduh pada 0 derajat. jadi apakah tidak apa apa jika saya tidak variasikan? dan boleh tau tidak mas alasan kenapa hasil yang bagus ada pada sudut 0 derajat?

    • dalam ekstraksi ciri glcm, digunakan keempat sudut tersebut agar analisis tekstur tidak terpengaruh oleh rotasi citra
      sudut 0 derajat menyatakan posisi objek dalam arah tegak
      selama objek tidak diputar2 maka dengan menggunakan sudut 0 derajat saja, proses pengenalan dapat dikenali
      tetapi jika arah objek bermacam2 (diputar2) maka harus menggunakan keempat sudut GLCM

  14. Terimakasih untuk jawaban sebelumnya mas adi, dan saya mau bertanya lagi, pada GLCM terdapat 14 ciri namun penelitian yang banyak saya temui hanya menggunakan 4 ciri saja (dan matlabpun juga begitu). apa kelebihan dari 4 ciri tersebut dan kenapa sering digunakan mas? terimakasih.

  15. apakah ada jurnal tentang argumen tersebut mas untuk mendukung pernyataan tersebut, kalau 4 ciri citra (energy, homogenity, contrast, dan correlation) lebih baik dalam glcm jika dibandingkan dgn ciri lainnya. terimakasih banyak bantuannya mas adi.

  16. assalamualaikum mas saya mau tanya cara membedakan tekstur ikan menggunakan glcm

  17. assalamu’alaukum mas.
    saya mau tanya kalau hasil extraksi citra yang menghasilkan nilai sbb:
    Energy, Homogeneity, Contrast, Correlation, Mean, S.D, Entropy, RMS, Variance, Smoothness, Kurtosis, Skewness, IDM

    itu bagaimana ya?

  18. Assalamu’alaikum
    Mas saya masih pemula dalam bidang ini. Saya ingin menggunakan ekstraksi GLCM pada penelitian saya, namun saya ingin menggunakan satu lagi parameternya sehingga saya mencoba mencari referensi kodingan di google, dan saya menemukan postingan yang bagus. Namun, saya masih belum bisa memahami di beberapa bagian. Saya berharap mas adi bisa membantu saya untuk memberikan sedikit pencerahan….

    Saya menemukan kodingan matlab GLCM di https://www.mathworks.com/matlabcentral/fileexchange/22354-glcm-features4-m–vectorized-version-of-glcm-features1-m–with-code-changes-?focused=5150008&tab=function

    Di script tersebut, terdapat contoh penggunaan yaitu:

    GLCM2 = graycomatrix(I,’Offset’,[2 0;0 2]);
    stats = GLCM_features4(GLCM2,0)

    yang saya mau tanyakan maksud dari [2 0;0 2] apakah sama dengan nilai [0 1;-1 1;-1 0;-1 -1] yang bisa digunakan untuk menentukan angle nya atau bagaimana ya mas?

    Mohon maaf agak panjang.

    Terimakasih

    • Waalaikumsalam
      Nilai tsb merupakan pixel distance yg digunakan dalam pembentukan matriks kookurensi
      Dipelajari terlebih dahulu proses pembentukan matriks kookurensi, maka akan paham arti dari pixel distance

  19. Terimakasih mas infonya. Sangat membantu

  20. Azhrika Oktaviana

    Assalamualaikum mas.
    Mas saya mau bertanya, bagaimana cara menggunakan metode GLCM dengan tools yang sudah ada di matlab. mohon bantuannya mas, terimakasih

  21. mas kalau distance pixel untuk glcm feature gmn ya mas? karena kalau fungsi graycopcros kn tidak ada entropy , yg ada kan pda fungsi glcm feature tetapi dlam pemanggilan fungsinya sndiri mlh bnyk eror

  22. Selamat malam,
    Saya ingin mengektrasi citra papsmear pakai GLCM, namun waktu citra grayscale pap smear saya coba ekstraksi
    GLCM = graycomatrix(A, ‘Offset’ , [0 1; -1 1; -1 0; -1 -1]);

    saya dapat pesan error seperti ini;
    Error using graycomatrix
    Expected input number 1, I, to be two-dimensional.

    Error in graycomatrix>ParseInputs (line 260)
    validateattributes(I,{‘logical’,’numeric’},{‘2d’,’real’,’nonsparse’}, …

    Error in graycomatrix (line 167)
    [I, Offset, NL, GL, makeSymmetric] = ParseInputs(varargin{:});

    Soalnya saya pakai di gambar lain (citra fundus grayscale) bisa di run, tapi di gambar ini malah error. Sekiranya kenapa ya mas?

  23. assalamua’laikum.
    mas, saya ingin tahu tentang glcm. kalo ada dan boleh ingin minta materi glcm untuk memahami perhitungan manualnya.
    terimakasih

  24. assalamualaikum mas mau tanya ada source code untuk mengukur panjang, lebar dan berat dari sustu objek pada gambar dengan metode blob

  25. Permisi mas, saya boleh minta perhitungan manualnya juga mas untuk referensi? Ini email saya nafiantabudi96@gmail.com. Terima kasih.

  26. Muhammad Irfan Fathurrahman

    mas adi maaf mau tanya, kalo mau melakukan klasifikasi menggunakan jst bpnn dengan GLCM paramater apa saja yg dijadikan inputan? terima kasih

  27. Kak mau tanya
    Untuk proses klasifikasinya itu bisa pake 2 nilai ga kak?

  28. Assalamualaikum mohon maaf saya ingin bertanya ,kan GLCM tuh memiliki 14 fitur kenapa fitur tersebut tidak semuanya di gunakan dan di anta paper paper mereka juga pun berbeda satu dengan yang lainnya dalam penggunaan fitur tersebut. Mohon bantuanya soalnya saya sedang skripsi tentang dlcm

  29. Assalamualaikum mas, maaf seblmnya pengen nanya seputar GLCM ini, aku coba ikutin persis seperti di atas tp kok dapat error yh, kayak ini mas

    Error using graycomatrix
    Expected input number 3, OFFSET, to be integer-valued.

    Error in graycomatrix>ParseInputs (line 292)
    validateattributes(offset,{‘logical’,’numeric’},…

    Error in graycomatrix (line 167)
    [I, Offset, NL, GL, makeSymmetric] = ParseInputs(varargin{:});

    Error in texture_analysis>pushbutton2_Callback (line 115)
    GLCM = graycomatrix(Img,’Offset’,[0 pixel_dist; -pixel_dist pixel_dist; -pixel_dist 0; -pixel_dist
    -pixel_dist]);

    Error in gui_mainfcn (line 95)
    feval(varargin{:});

    Error in texture_analysis (line 42)
    gui_mainfcn(gui_State, varargin{:});

    Error in
    matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)texture_analysis(‘pushbutton2_Callback’,hObject,eventdata,guidata(hObject))
    Error while evaluating UIControl Callback.

  30. DeDe ViVi TaTa

    assalamu’alaikum mas, gimana ya cara menghitung Homogenity secara manual?
    saya tau cara nya cuman pingin tau contoh kasus nya

  31. assalamualikum mas adi, saya lagi mengerjakan skripsi..kebetulan saya ambil klasifikasi jenis kacang menggunakan glcm dan jst. saya binggung dgn source code nya, apakah mas bisa bantu untuk memberikan referensi codingan tersebut?
    sebelumnya terima kasih mas

  32. Assalamu’alaikum mas, saya sedang mengerjakan skripsi tahun ini, mau menanyakangan, kira – kira metode yang cocok untuk deteksi stroberi yang layak untuk di petik? terima kasih mas.

  33. Elvillia Anggraini

    mau tahya dong, saya lg buat penelitian deteksi hama daun cabai pakai computer vision. nah kalau untuk ekstraksi ciri daun cabai kira-kira cocok ga ya kalo pake metode GLCM ?

  34. mau tanya dong, saya lg buat penelitian deteksi hama daun cabai pakai computer vision. nah kalau untuk ekstraksi ciri daun cabai kira-kira cocok ga ya kalo pake metode GLCM ?

  35. Siang mas adi, maaf saya mau bertanya. Untuk menampilkan nilai pada uitable1 bagaimana ya?

  36. Assalamualaikum mas, ntuk source code ccm (color co-occurrence matrix) ada atau tidak?

    • Waalaikumsalam
      Untuk source code ccm dan glcm sama saja
      Hanya penerapannya yg berbeda
      Jika glcm untuk citra grayscale, sedangkan ccm untuk masing-masing komponen citra rgb

  37. Citra r,g,b atau citra asli ya maksudnya mas ?

  38. Maaf mas saya mau bertanya.. saya kurang paham mengenai fungsi dari aplikasi diatas. Bisa tolong di jelaskan tidak mas? Terima kasih

  39. Maaf kak saya mau bertanya, kalau tabel di atas jelasin nya gimana? Saya di suruh buat tutorial menggunakan hasil tersebut, sedangkan saya gak terlalu paham kaya gini 😅 terimakasih kak sebelum nya

  40. Assalamualikum mas adi, saya ingin bertanya apakah ekstraksi fitur glcm harus menggunakan fitur contrast,correlation,energy dan homogeinity?

  41. assalammualaikum mas,, ijin bertanya, maksudnya pixel distance = 1 apa ya ?? aakah jika pixel distance diganti apakah hasilnya tetap sama ?

    • Waalaikumsalam Wr. Wb.
      pixel distance merupakan jarak piksel yang digunakan dalam pembentukan matriks kookurensi
      bisa divariasikan sehingga mempengaruhi nilai akurasi

  42. Assalamualikum kak

    Mau tanya, untuk pembentukan matrik glcm pada code diatas pada tahap quantitasinya apakah menggunakan 8 level keabu-abuan, apakah setiap penggunaan number level kuantitasi berbeda akan menghasilkan nilai fitur berebeda? jika iya berapakah nilai level quantitasi yang baik apakah berdasarkan nilai pixel tertinggi pada citra inputan grayscalenya , atau secara langsung mengambil pixel tertinggi yaitu 255,
    Mohon bantuanya kak

  43. Mas adi
    Bagaimana jika setelah menghitung nilai contrast correlation enegry homogeneity ,ingin menghitung nilai parameter rata rata(mean) dan variance??
    Tolong penjelasannta

Leave a comment