clear all; close all; clc

r = 16; % veľkosť vzoriek
h_o = 2; % poloha horného okraja vzoriek

h_r = 2; % horizontálny rozostup vzoriek
v_r = 2; % vertikálny rozostup vzoriek

h_p = 9; % počet vzoriek horizontálne
v_p = 9; % počet vzoriek vertikálne
n_v = h_p*v_p; % počet vzoriek v jednom obr.

datab_triedy = cell(9,1);
% načítanie sád obrazov

data = cell(9,1);
data{1,1} = imread('D4.gif');
data{2,1} = imread('D16.gif');
data{3,1} = imread('D19.gif');
data{4,1} = imread('D24.gif');
data{5,1} = imread('D29.gif');
data{6,1} = imread('D53.gif');
data{7,1} = imread('D68.gif');
data{8,1} = imread('D77.gif');
data{9,1} = imread('D79.gif');

[s1,s2] = size(data{1,1});
sd = size(data);
% prazdne b. pole pre výber 4 výrezov z každého obr. v definovanej hĺbke
dVzoriek = cell(n_v,9);

% cyklus pre výber stĺpca databázy (každý stĺpec iný gél)
for i = 1:9;
    obr = data{i,1}; % výber obrázku z databázy
    obr = obr(s1/2+1:s1, 1:s2); %I = I(1:320, 1:640); pre class
        riadok = 1; % počítadlo pre ukladanie na konkrétnej pozícii

        % m*n = počet vzoriek z jedného obrazu
        for m = 1:h_p; % horizontálny posun
            for n = 1:v_p % vertikálny posun
            A = h_o + (n-1)*(r + v_r);
            B = (((m-1)*(r + h_r))+1);
            vzorka = obr(A : A + r-1, B : B + r-1); 

            dVzoriek{riadok,i} = vzorka;
            riadok = riadok+1;
            end
        end
end

sV = size(dVzoriek);

% %% výpočet vektrou čŕt databázy tried - prvých 20 parametrov
for n = 1:sV(2) % stĺpec po stĺpci pre každý gél
    k = 1;
    c = cell(sV(1), 4); % prázdne bunkové pole pre uloženie co-oc matíc
    for o = 1:sV(1)
        D = 1; % vzdialenosť medzi pixelmi v co-oc matici
        % 4 co-oc matice pre 4 rôzne smery
        c{k,1} = graycomatrix(dVzoriek{o,n},'NumLevels',255,'Offset', [0 D], 'G', []);
        c{k,2} = graycomatrix(dVzoriek{o,n},'NumLevels',255,'Offset', [-D D], 'G', []);
        c{k,3} = graycomatrix(dVzoriek{o,n},'NumLevels',255,'Offset', [-D 0], 'G', []);
        c{k,4} = graycomatrix(dVzoriek{o,n},'NumLevels',255,'Offset', [-D -D], 'G', []);
        k=k+1;
    end
    d = zeros(sV(1),24); % prázdna matica pre uloženie vektoru čŕt pre všetky gély

    for p = 1:sV(1)
        for q = 1:4 % postupne pre 4 smery
            stats = graycoprops(c{p,q}, {'Energy', 'Correlation', 'Homogeneity', 'Contrast'});
            stats = struct2cell(stats); % prevod struct na cell array
            stats = cell2mat(stats); % prevod cell array na maticu
            stats = stats.';
            ent = entropy(c{p,q});
            d(p,1+(q-1)*5:4+(q-1)*5) = stats;
            d(p,5+(q-1)*5) = ent;
        end
    end
    
%     %% výpočet výkonového spektra 4 frekv. pásem - zvyšné 4 parametre
    for o = 1:sV(1)
    s = fft2(dVzoriek{o,n}); % spektrum
%     imshow(spektrum);
    ss = size(s);
    s = abs(fftshift(s));
    ps = s.^2; %(výkonové spektrum)
    osm = floor(r/8); % osmina veľkosti vzorky
    stred = ss(1)/2;

    s1 = sum(sum(ps(stred+1-osm:stred+osm, stred+1-osm:stred+osm)));
    s2 = sum(sum(ps(stred+1-osm*2:stred+osm*2, stred+1-osm*2:stred+osm*2)));
    s3 = sum(sum(ps(stred+1-osm*3:stred+osm*3, stred+1-osm*3:stred+osm*3)));
    s4 = sum(sum(ps));

    % výkonové spektrum vo frekvenčných pásmach p1 - p4
    p1 = s1;
    p2 = s2 - s1;
    p3 = s3 - s2;
    p4 = s4 - s3;

    param = zeros(1,4);
    param(1,1) = p1/s4*100;%*0.0625; % zakomentovaná pomerná veľkosť plochy z celkového výkonového spektra
    param(1,2) = p2/s4*100;%*0.1875;
    param(1,3) = p3/s4*100;%*0.3125;
    param(1,4) = p4/s4*100;%*0.4375;
    
    d(o,21:24) = param;
%     sucet = perc1+perc2+perc3+perc4;

%     imshow(log(spektrum),[]);% zobrazenie amplitudoveho spektra
%     break
    end
    
    datab_triedy{n,:} = d;
end

save('databaza_tried_co_oc_br.mat','datab_triedy')