clear all; close all; clc;

%%  Skript sloužící pro klasifikaci a segmentaci obrazu pomocí LBP (local binary pattern)

% Skládá se z funkcí pro výpočet samotné distribuce invariantní uniformní
% verze LBP na vzorcích z obrázků, které pak slouží pro natrénování
% klasifikátoru a dále následná klasifikace celého obrazu.

% Vstupem jsou 2 snímky kardiomyocytů s rozdílnou vnitřní strukturou u
% živých buněk, mrtvých buněk a u pozadí. Výstupem nasegmentovaný snímek
% vložený do původního snímku.

%% První část algoritmu

% Slouží pro výpočet LBP ze vzorků (čtverečky (41x41px) v originálních 
% snímcích)mrtvých buněk, živých buněk a pozadí. Následně na základě LBP 
% jsou vypočítány příznaky a pro lepší názornost a schopnost klasifikace
% vykresleny do boxplotů.

for x = 1:2     % x číslo snímku
    
obr = rgb2gray(imread(sprintf('%d.tif',x)));    % načtení snímku

load(sprintf('pozadi_obr%d',x));    % načtení vytvořených vzorků pro pozadí
load(sprintf('zive_obr%d',x));      % načtení vytvořených vzorků pro živé buňky
load(sprintf('mrtve_obr%d',x));     % načtení vytvořených vzorků pro mrtvé buňky

okno_f=20;      % velikost okna

% vykreslení originálního snímku
figure; 
imshow(obr,[]);
title(sprintf('Originální snímek %d',x))

% zobrazení vzorků (čtverečků) ve snímku
for i=1:70
line( [zive(i,1)-okno_f, zive(i,1)-okno_f, zive(i,1)+okno_f, zive(i,1)+okno_f, zive(i,1)-okno_f],[zive(i,2)-okno_f, zive(i,2)+okno_f,...
       zive(i,2)+okno_f,zive(i,2)-okno_f,zive(i,2)-okno_f] , 'Color', 'r');
end
for i=1:70
line( [mrtve(i,1)-okno_f, mrtve(i,1)-okno_f, mrtve(i,1)+okno_f, mrtve(i,1)+okno_f, mrtve(i,1)-okno_f],[mrtve(i,2)-okno_f, mrtve(i,2)+okno_f,...
       mrtve(i,2)+okno_f,mrtve(i,2)-okno_f,mrtve(i,2)-okno_f] , 'Color', 'g');
end
for i=1:70
line( [pozadi(i,1)-okno_f, pozadi(i,1)-okno_f, pozadi(i,1)+okno_f, pozadi(i,1)+okno_f, pozadi(i,1)-okno_f],[pozadi(i,2)-okno_f, pozadi(i,2)+okno_f,...
       pozadi(i,2)+okno_f,pozadi(i,2)-okno_f,pozadi(i,2)-okno_f] , 'Color', 'b');
end

% seskupení čtverečků (teď už výřezů) do 3D matice
for i=1:70
    kus = obr( zive(i,2)-okno_f:zive(i,2)+okno_f, zive(i,1)-okno_f:zive(i,1)+okno_f);
    group1_zive(:,:,i)=kus;
end
for i=1:70
    kus = obr( mrtve(i,2)-okno_f:mrtve(i,2)+okno_f, mrtve(i,1)-okno_f:mrtve(i,1)+okno_f);
    group2_mrtve(:,:,i)=kus;
end
for i=1:70
    kus = obr( pozadi(i,2)-okno_f:pozadi(i,2)+okno_f, pozadi(i,1)-okno_f:pozadi(i,1)+okno_f);
    group3_pozadi(:,:,i)=kus;
end

% výpočet samotného LBP a příznaků na základě výpočtu histogramu z LBP
P=8;    % počet bodů kolem centrálního pixelu
R=1;    % centrální pixel

% výpočty pro živé buňky
for i=1:70
    LBP_zive = lbp_riu2(P,R,group1_zive(:,:,i));    % funkce pro výpočet LBP
    contr_zive = contrast(P,R,group1_zive(:,:,i));  % funkce pro výpočet lokálního kontrastu
    contr2_zive = diskretizace(contr_zive, 6, -0.8924, 5.8924);     % funkce pro překvantování hodnot matice
    [histogram,pocet] = hist1D(LBP_zive, (P+2));    % funkce pro výpočet 1D histogramu
    histo_zive=histogram/pocet;     % standardizace
    [histo2_zive pocet] = hist2D(LBP_zive,contr2_zive,(P+2),6);     % funkce pro výpočet 2D histogramu
    histo2_zive = histo2_zive/pocet;    % standardizace
    [mi,sigma,g1,g2,energy,entropy] = hist_params(histo_zive);      % funcke pro výpočet příznaků z 1D histogramu
    priznaky_zive(i,:) = [mi sigma g1 g2 energy entropy];
    [energy,contras,homogenity,entropy,korel,shade,prominance] = hist2d_params(histo2_zive);    % funkce pro výpočet příznaků z 2D histogramu
    [SA,SV,SE,DV,DE] = hist2d_params2(histo2_zive);     % funkce pro výpočet příznaků z 2D histogramu
    [IMC1,IMC2] = hist2d_params3(histo2_zive);      % funkce pro výpočet příznaků z 2D histogramu
    priznaky2D_zive(i,:) = [energy contras homogenity entropy korel shade prominance SA SV SE DV DE IMC1 IMC2];
end

% výpočty pro mrtvé buňky
for i=1:70
    LBP_mrtve = lbp_riu2(P,R,group2_mrtve(:,:,i));
    contr_mrtve = contrast(P,R,group2_mrtve(:,:,i));
    contr2_mrtve = diskretizace(contr_mrtve, 6, -0.8924, 5.8924);
    [histogram,pocet] = hist1D(LBP_mrtve, (P+2));
    histo_mrtve=histogram/pocet; 
    [histo2_mrtve pocet] = hist2D(LBP_mrtve,contr2_mrtve,(P+2),6);
    histo2_mrtve = histo2_mrtve/pocet;
    [mi,sigma,g1,g2,energy,entropy] = hist_params(histo_mrtve);
    priznaky_mrtve(i,:) = [mi sigma g1 g2 energy entropy];
    [energy,contras,homogenity,entropy,korel,shade,prominance] = hist2d_params(histo2_mrtve);
    [SA,SV,SE,DV,DE] = hist2d_params2(histo2_mrtve);
    [IMC1,IMC2] = hist2d_params3(histo2_mrtve);
    priznaky2D_mrtve(i,:) = [energy contras homogenity entropy korel shade prominance SA SV SE DV DE IMC1 IMC2];
end

% výpočty pro pozadí
for i=1:70
    LBP_pozadi = lbp_riu2(P,R,group3_pozadi(:,:,i));
    contr_pozadi = contrast(P,R,group3_pozadi(:,:,i));
    contr2_zive = diskretizace(contr_pozadi, 6, -0.8924, 5.8924);
    [histogram,pocet] = hist1D(LBP_pozadi, (P+2));
    histo_pozadi=histogram/pocet; 
    [histo2_pozadi pocet] = hist2D(LBP_pozadi,contr2_zive,(P+2),6);
    histo2_pozadi = histo2_pozadi/pocet;
    [mi,sigma,g1,g2,energy,entropy] = hist_params(histo_pozadi);
    priznaky_pozadi(i,:) = [mi sigma g1 g2 energy entropy];
    [energy,contras,homogenity,entropy,korel,shade,prominance] = hist2d_params(histo2_pozadi);
    [SA,SV,SE,DV,DE] = hist2d_params2(histo2_pozadi);
    [IMC1,IMC2] = hist2d_params3(histo2_pozadi);
    priznaky2D_pozadi(i,:) = [energy contras homogenity entropy korel shade prominance SA SV SE DV DE IMC1 IMC2];
end

% vložení příznaků z obou snímků do jednotlivých matic
    if x == 1
        priznaky_zive_final(1:70,:) = priznaky_zive;
        priznaky_mrtve_final(1:70,:) = priznaky_mrtve;
        priznaky_pozadi_final(1:70,:) = priznaky_pozadi;
        
        priznaky2D_zive_final(1:70,:) = priznaky2D_zive;
        priznaky2D_mrtve_final(1:70,:) = priznaky2D_mrtve;
        priznaky2D_pozadi_final(1:70,:) = priznaky2D_pozadi;
    elseif x == 2
        priznaky_zive_final(71:140,:) = priznaky_zive;
        priznaky_mrtve_final(71:140,:) = priznaky_mrtve;
        priznaky_pozadi_final(71:140,:) = priznaky_pozadi;
        
        priznaky2D_zive_final(71:140,:) = priznaky2D_zive;
        priznaky2D_mrtve_final(71:140,:) = priznaky2D_mrtve;
        priznaky2D_pozadi_final(71:140,:) = priznaky2D_pozadi;
    end
end

% zobrazení srovnávacích boxplotů

% 1D příznaky
figure; boxplot([priznaky_zive_final(:,1); priznaky_mrtve_final(:,1); priznaky_pozadi_final(:,1)], [ones(140,1); 2*ones(140,1); 3*ones(140,1)],'Labels',{'zive','mrtve','pozadi'}); title ('Příznak: střední hodnota');
figure; boxplot([priznaky_zive_final(:,2); priznaky_mrtve_final(:,2); priznaky_pozadi_final(:,2)], [ones(140,1); 2*ones(140,1); 3*ones(140,1)],'Labels',{'zive','mrtve','pozadi'}); title ('Příznak: rozptyl');
figure; boxplot([priznaky_zive_final(:,3); priznaky_mrtve_final(:,3); priznaky_pozadi_final(:,3)], [ones(140,1); 2*ones(140,1); 3*ones(140,1)],'Labels',{'zive','mrtve','pozadi'}); title ('Příznak: šikmost');
figure; boxplot([priznaky_zive_final(:,4); priznaky_mrtve_final(:,4); priznaky_pozadi_final(:,4)], [ones(140,1); 2*ones(140,1); 3*ones(140,1)],'Labels',{'zive','mrtve','pozadi'}); title ('Příznak: křivost');
figure; boxplot([priznaky_zive_final(:,5); priznaky_mrtve_final(:,5); priznaky_pozadi_final(:,5)], [ones(140,1); 2*ones(140,1); 3*ones(140,1)],'Labels',{'zive','mrtve','pozadi'}); title ('Příznak: energie');
figure; boxplot([priznaky_zive_final(:,6); priznaky_mrtve_final(:,6); priznaky_pozadi_final(:,6)], [ones(140,1); 2*ones(140,1); 3*ones(140,1)],'Labels',{'zive','mrtve','pozadi'}); title ('Příznak: entropie');

% 2D příznaky
figure; boxplot([priznaky2D_zive_final(:,1); priznaky2D_mrtve_final(:,1); priznaky2D_pozadi_final(:,1)], [ones(140,1); 2*ones(140,1); 3*ones(140,1)],'Labels',{'zive','mrtve','pozadi'}); title ('Příznak: energie');
figure; boxplot([priznaky2D_zive_final(:,2); priznaky2D_mrtve_final(:,2); priznaky2D_pozadi_final(:,2)], [ones(140,1); 2*ones(140,1); 3*ones(140,1)],'Labels',{'zive','mrtve','pozadi'}); title ('Příznak: kontrast');
figure; boxplot([priznaky2D_zive_final(:,3); priznaky2D_mrtve_final(:,3); priznaky2D_pozadi_final(:,3)], [ones(140,1); 2*ones(140,1); 3*ones(140,1)],'Labels',{'zive','mrtve','pozadi'}); title ('Příznak: homogenita');
figure; boxplot([priznaky2D_zive_final(:,4); priznaky2D_mrtve_final(:,4); priznaky2D_pozadi_final(:,4)], [ones(140,1); 2*ones(140,1); 3*ones(140,1)],'Labels',{'zive','mrtve','pozadi'}); title ('Příznak: entropie');
figure; boxplot([priznaky2D_zive_final(:,5); priznaky2D_mrtve_final(:,5); priznaky2D_pozadi_final(:,5)], [ones(140,1); 2*ones(140,1); 3*ones(140,1)],'Labels',{'zive','mrtve','pozadi'}); title ('Příznak: korelace');
figure; boxplot([priznaky2D_zive_final(:,6); priznaky2D_mrtve_final(:,6); priznaky2D_pozadi_final(:,6)], [ones(140,1); 2*ones(140,1); 3*ones(140,1)],'Labels',{'zive','mrtve','pozadi'}); title ('Příznak: cluster shade');
figure; boxplot([priznaky2D_zive_final(:,7); priznaky2D_mrtve_final(:,7); priznaky2D_pozadi_final(:,7)], [ones(140,1); 2*ones(140,1); 3*ones(140,1)],'Labels',{'zive','mrtve','pozadi'}); title ('Příznak: cluster prominance');
figure; boxplot([priznaky2D_zive_final(:,8); priznaky2D_mrtve_final(:,8); priznaky2D_pozadi_final(:,8)], [ones(140,1); 2*ones(140,1); 3*ones(140,1)],'Labels',{'zive','mrtve','pozadi'}); title ('Příznak: souhrnný průměr');
figure; boxplot([priznaky2D_zive_final(:,9); priznaky2D_mrtve_final(:,9); priznaky2D_pozadi_final(:,9)], [ones(140,1); 2*ones(140,1); 3*ones(140,1)],'Labels',{'zive','mrtve','pozadi'}); title ('Příznak: souhrnná variance');
figure; boxplot([priznaky2D_zive_final(:,10); priznaky2D_mrtve_final(:,10); priznaky2D_pozadi_final(:,10)], [ones(140,1); 2*ones(140,1); 3*ones(140,1)],'Labels',{'zive','mrtve','pozadi'}); title ('Příznak: souhrnná energie');
figure; boxplot([priznaky2D_zive_final(:,11); priznaky2D_mrtve_final(:,11); priznaky2D_pozadi_final(:,11)], [ones(140,1); 2*ones(140,1); 3*ones(140,1)],'Labels',{'zive','mrtve','pozadi'}); title ('Příznak: diferenční rozptyl');
figure; boxplot([priznaky2D_zive_final(:,12); priznaky2D_mrtve_final(:,12); priznaky2D_pozadi_final(:,12)], [ones(140,1); 2*ones(140,1); 3*ones(140,1)],'Labels',{'zive','mrtve','pozadi'}); title ('Příznak: diferenční energie');
figure; boxplot([priznaky2D_zive_final(:,13); priznaky2D_mrtve_final(:,13); priznaky2D_pozadi_final(:,13)], [ones(140,1); 2*ones(140,1); 3*ones(140,1)],'Labels',{'zive','mrtve','pozadi'}); title ('Příznak: informační měření korelace 1');
figure; boxplot([priznaky2D_zive_final(:,14); priznaky2D_mrtve_final(:,14); priznaky2D_pozadi_final(:,14)], [ones(140,1); 2*ones(140,1); 3*ones(140,1)],'Labels',{'zive','mrtve','pozadi'}); title ('Příznak: informační měření korelace 2');

%% Trénování klasifikátoru SVM

% Nejprve dojde k výběru těch příznaků, které dostatečně oddělují pozadí,
% mrtvé buňky a živé buňky. Poté dojde k natrénování klasifikátoru na
% daných příznacích pomocí křížové validace.

% příznaky, které dostatečně oddělují pozadí, mrtvé i živé buňky:
% 1D příznaky:
% - mi, sigma, g1, g2, entropy
% 2D příznaky:
% - contrast, entropy, korel, SA, SV, SE, DV, DE, IMC1, IMC2

% vložení vybraných příznaků do jednotlivých matic
priznaky_klasifikace_zive = [priznaky_zive_final(:,1) priznaky_zive_final(:,2) priznaky_zive_final(:,3) priznaky_zive_final(:,4) priznaky_zive_final(:,6) ...
    priznaky2D_zive_final(:,2) priznaky2D_zive_final(:,4) priznaky2D_zive_final(:,5) priznaky2D_zive_final(:,8) priznaky2D_zive_final(:,9) priznaky2D_zive_final(:,10) ...
    priznaky2D_zive_final(:,11) priznaky2D_zive_final(:,12) priznaky2D_zive_final(:,13) priznaky2D_zive_final(:,14)];

priznaky_klasifikace_mrtve = [priznaky_mrtve_final(:,1) priznaky_mrtve_final(:,2) priznaky_mrtve_final(:,3) priznaky_mrtve_final(:,4) priznaky_mrtve_final(:,6) ...
    priznaky2D_mrtve_final(:,2) priznaky2D_mrtve_final(:,4) priznaky2D_mrtve_final(:,5) priznaky2D_mrtve_final(:,8) priznaky2D_mrtve_final(:,9) priznaky2D_mrtve_final(:,10) ...
    priznaky2D_mrtve_final(:,11) priznaky2D_mrtve_final(:,12) priznaky2D_mrtve_final(:,13) priznaky2D_mrtve_final(:,14)];

priznaky_klasifikace_pozadi = [priznaky_pozadi_final(:,1) priznaky_pozadi_final(:,2) priznaky_pozadi_final(:,3) priznaky_pozadi_final(:,4) priznaky_pozadi_final(:,6) ...
    priznaky2D_pozadi_final(:,2) priznaky2D_pozadi_final(:,4) priznaky2D_pozadi_final(:,5) priznaky2D_pozadi_final(:,8) priznaky2D_pozadi_final(:,9) priznaky2D_pozadi_final(:,10) ...
    priznaky2D_pozadi_final(:,11) priznaky2D_pozadi_final(:,12) priznaky2D_pozadi_final(:,13) priznaky2D_pozadi_final(:,14)];

% vložení příznaků do jedné proměnné
priznaky_klasifikace_vse(1:140,:) = priznaky_klasifikace_zive;
priznaky_klasifikace_vse(141:280,:) = priznaky_klasifikace_mrtve;
priznaky_klasifikace_vse(281:420,:) = priznaky_klasifikace_pozadi;

skupiny = [zeros(140,1);ones(140,1)];   % třídy pro klasifikace
priznaky_klasifikace_mrtve_pozadi = priznaky_klasifikace_vse(141:420,:);    % výběr příznaků mrtvých buněk a pozadí, které budou klasifikovány

% normalizace dat pomocí maximální a minimální hodnoty daného příznaku
priznaky_min=min(priznaky_klasifikace_mrtve_pozadi);
priznaky_klasifikace_mrtve_pozadi=priznaky_klasifikace_mrtve_pozadi-repmat(priznaky_min,280,1);
priznaky_max=max(priznaky_klasifikace_mrtve_pozadi);
priznaky_klasifikace_mrtve_pozadi=priznaky_klasifikace_mrtve_pozadi./repmat(priznaky_max,280,1);

% křížová validace
addpath ('LibSVM\libsvm-3.17\matlab');

cyklu = 100;    % počet cyklů pro trénování
nn = 280;   % počet vzorků
CrossValDiv = [0.3 0.7];    % rozdělení křížové validace

for i=1:cyklu
    clc;
    TP=0;
    TN=0;
    FP=0;
    FN=0;
    [Train1(:,i), Test1(:,i)] = crossvalind('Resubstitution', nn, CrossValDiv);     % křížová validace
    Train=Train1(:,i);  % trénovací množina
    Test=Test1(:,i);    % testovací množina

    % SVM (Support vector machine)
    model1 = svmtrain(skupiny(find(Train == 1)), priznaky_klasifikace_mrtve_pozadi(find(Train == 1),:),'-s 0 -t 2 -c 150 -e 0.1 -wi 10');
    
    t_pred(:,i) = svmpredict(skupiny(find(Test == 1)), priznaky_klasifikace_mrtve_pozadi(find(Test == 1),:), model1);
    
    err(:,i) = (skupiny(find(Test == 1)) - t_pred(:,i)).^2;
    tt_pred=t_pred(:,i);
    skup_tt=skupiny(find(Test == 1));
    
    % určení TP - skutečně pozitivní, TN - skutečně negativní, FN - falešně
    % negativní, FP - falešně pozitivní 
    for ii=1:length(tt_pred)
        if (tt_pred(ii) == skup_tt(ii)) && skup_tt(ii) == 1
            TP=TP+1;
        end
        if (tt_pred(ii) == skup_tt(ii)) && skup_tt(ii) == 0
            TN=TN+1;
        end
        if (tt_pred(ii) ~= skup_tt(ii)) && skup_tt(ii) == 1
            FN=FN+1;
        end
        if (tt_pred(ii) ~= skup_tt(ii)) && skup_tt(ii) == 0
            FP=FP+1;
        end
    end
    pocet_spatne = find (tt_pred ~= skup_tt);
    if isempty(pocet_spatne) == 1
        pocet_spatne = 0;
    end
    acc(i) = (sum(Test)-length(pocet_spatne)) / sum(Test);  % přesnost
    acc2(i) = (TP+TN)/(TP+FN+TN+FP);
    se(i) = TP/(TP+FN); % senzitivita
    sp(i) = TN/(TN+FP); % specificita
end

% výpočet statistických hodnot
mse=mean(err)*100;
mse_celk=mean2(err)*100
acc_celk=mean(acc)*100
acc_celk_std=std(acc)*100
acc2_celk=mean(acc2)*100
acc2_celk_std=std(acc2)*100

SE_mean=mean(se)*100
SE_std=std(se)*100
SP_mean=mean(sp)*100
SP_std=std(sp)*100

% vykreslení chyby klasifikace
figure
plot(mse, 'ro');
title('Chyba klasifikace')

%% Klasifikace celý snímek

% Poslední část algoritmu sloužící pro klasifikaci celého snímku.

% načtení daného snímku (na výběr 2 snímky)
obr = rgb2gray(imread('1.tif'));
% obr = rgb2gray(imread('2.tif'));

model2 = svmtrain(skupiny, priznaky_klasifikace_mrtve_pozadi(:,:),'-s 0 -t 2 -c 150 -e 0.1 -wi 10 -q');

okno = okno_f;  % okno pro výpočet LBP snímku stejné jako u vzorků

% vytvoření černého okraje kolem původního snímků pro možnost výpočtu
% každého pixelu původního obrazu
obr_okraj = zeros(size(obr,1)+(2*okno),size(obr,2)+(2*okno));
obr = im2double(obr);
obr_okraj((okno+1):size(obr,1)+okno, (okno+1):size(obr,2)+okno) = obr;

% vykreslení původního obrazu s okrajem
figure
imshow(obr_okraj)
title('Originální snímek s přidaným okrajem')

% vytvoření nulové matice pro ukládání výstupu
IM_seg = ones(size(obr2,1),size(obr2,2));

% for cyklus pro výpočet LBP hodnot a všech příznaků (postup stejný jako u
% výpočtu LBP u vzorků)
tic
for m = (okno+1):7:(size(obr2,1)+okno)
    for n = (okno+1):7:(size(obr2,2)+okno)
        vzorek = obr_okraj((m-okno):(m+okno),(n-okno):(n+okno));    % výběr výřezu, ve kterém probíhají výpočty LBP a příznaků

        LBP_vzorek = lbp_riu2(P,R,vzorek);
        contr_vzorek = contrast(P,R,vzorek);
        contr2_vzorek = diskretizace(contr_vzorek, 6, -0.8924, 5.8924);
        [histogram,pocet] = hist1D(LBP_vzorek, (P+2));
        histo_vzorek=histogram/pocet; 
        [histo2_vzorek pocet] = hist2D(LBP_vzorek,contr2_vzorek,(P+2),6);
        histo2_vzorek = histo2_vzorek/pocet;
        [mi,sigma,g1,g2,energy,entropy] = hist_params(histo_vzorek);
        priznaky_vzorek = [mi sigma g1 g2 energy entropy];
        [energy,contras,homogenity,entropy,korel,shade,prominance] = hist2d_params(histo2_vzorek);
        [SA,SV,SE,DV,DE] = hist2d_params2(histo2_vzorek);
        [IMC1,IMC2] = hist2d_params3(histo2_vzorek);
        priznaky2D_vzorek = [energy contras homogenity entropy korel shade prominance SA SV SE DV DE IMC1 IMC2];
        
        % uložení příznaků do jednoho vektoru
        priznaky_vse_vzorek = [priznaky_vzorek(:,1) priznaky_vzorek(:,2) priznaky_vzorek(:,3) priznaky_vzorek(:,4) priznaky_vzorek(:,6) ...
            priznaky2D_vzorek(:,2) priznaky2D_vzorek(:,4) priznaky2D_vzorek(:,5) priznaky2D_vzorek(:,8) priznaky2D_vzorek(:,9) priznaky2D_vzorek(:,10) ...
            priznaky2D_vzorek(:,11) priznaky2D_vzorek(:,12) priznaky2D_vzorek(:,13) priznaky2D_vzorek(:,14)];
        
        % normalizace příznaků
        pixel_vyber_norm = priznaky_vse_vzorek-priznaky_min;
        pixel_vyber_norm = pixel_vyber_norm./priznaky_max;
        
        % samotná klasifikace na základě vytvořeného modelu
        IM_seg((m-okno):(m-(okno-7)),(n-okno):(n-(okno-7))) = svmpredict(rand(1,1), pixel_vyber_norm, model2,'-q');

    end
end
toc

% vykreslení vysegmentovaného snímku
% pozadí - nula, bílá barva
% mrtvé buňky - jednička, černá barva
figure
imshow(IM_seg,[])
title('Nasegmentovaný snímek')

%% Vložení nasegmentovaného snímku do původního
zaklad=mat2gray(obr);

IMz = mat2gray(IM_seg);

for i = 1:size(zaklad,1)
    for k = 1:size(zaklad,2)
        if IMz(i,k) == 1
            zaklad(i,k) = zaklad(i,k);
        else zaklad(i,k) = IMz(i,k);
        end
    end
end

% Vykreslení nasegmentovaného snímku do původního
figure
imshow(zaklad)
title('Výsledný segmentovaný obraz vložený do původního')