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

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

3. Gray-Level Co-Occurrence Matrix (GLCM) dengan pixel distance = 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. 144 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

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 )

Google+ photo

You are commenting using your Google+ 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 )

w

Connecting to %s

%d bloggers like this: