function [ obr_seg ] = segmentace( obr, bar_slozka, ladit_prahy)
% funkce provadi segmentaci obrazku pomoci prahovani
% vstupy
% ladit_prahy - doladění prahových hodnot získaných z kalibrace
% obr - obrazek a to bud v rgb barevnem prostoru (0), nebo sedotonovem (1)
% bar_slozka - jakou barevnou slozku pouziji (v pripade VIS oblasti):
%           nR - hodnota 1, kombinace nR&nG&nB - hodnota 2
%           Cr - hodnota 3, kombinace Cr&Cb - hodnota 4
%           nR&Cr - hodnota 5
%           IR - hodnota 0
% vypln - vyplnit diry a uprav objekty - hodnota 1,  
% vystup
% obr_seg - vysegmentovany obrazek
% autor: Jan Netopil

switch bar_slozka %rozhodovaci strom
    case 0 %IR oblast - jednoduche prahovani dle kalibracnich hodnot
        load('Kalibrace_IR.mat');
        obr_seg=rgb2gray(obr);
        obr_seg(obr_seg<tresh_v_IR(1)-ladit_prahy)=0; %zvetseni prahovych hodnot
        obr_seg(obr_seg>tresh_v_IR(2)+ladit_prahy)=0; %aby se do intervalu veslo vice hodnot
        obr_seg(obr_seg>0)=1;
    case 1 %nRGB prostor - slozka nR (rychlejsi nez vsechny slozky)
        load('Kalibrace_barev.mat');
        %nutne osetreni nul pro deleni
        null_var=0.001; %hodnota misto nuly pro dalsi vypocty (z duvodu deleni nulou)
        img_null=obr(:,:,1);img_null(img_null==0)=null_var;obr(:,:,1)=img_null;
        %normovany rgb pro slozku R
        rgb_norm_r=obr(:,:,1)./(obr(:,:,1)+obr(:,:,2)+obr(:,:,3));
        %prahovani
        rgb_norm_r(rgb_norm_r<tresh_colors(1,1)-ladit_prahy)=0;
        rgb_norm_r(rgb_norm_r>tresh_colors(1,2)+ladit_prahy)=0;
        rgb_norm_r(rgb_norm_r>0)=1; % zbylym pixelum se priradi 1
        obr_seg=rgb_norm_r;
        %vyplneni der
    case 2 %nRGB slozky nR&nG&nB
        load('Kalibrace_barev.mat');
        %osetreni nul
        null_var=0.001; %hodnota misto nuly pro dalsi vypocty (z duvodu deleni nulou)
        img_null=obr(:,:,1);img_null(img_null==0)=null_var;obr(:,:,1)=img_null;
        img_null=obr(:,:,2);img_null(img_null==0)=null_var;obr(:,:,2)=img_null;
        img_null=obr(:,:,3);img_null(img_null==0)=null_var;obr(:,:,3)=img_null;
        %normovany rgb
        rgb_norm_r=obr(:,:,1)./(obr(:,:,1)+obr(:,:,2)+obr(:,:,3));
        rgb_norm_g=obr(:,:,2)./(obr(:,:,1)+obr(:,:,2)+obr(:,:,3));
        rgb_norm_b=obr(:,:,3)./(obr(:,:,1)+obr(:,:,2)+obr(:,:,3));
        %prahovani
        rgb_norm_r(rgb_norm_r<tresh_colors(1,1)-ladit_prahy)=0;
        rgb_norm_r(rgb_norm_r>tresh_colors(1,2)+ladit_prahy)=0;
        rgb_norm_r(rgb_norm_r>0)=1;
        rgb_norm_g(rgb_norm_g<tresh_colors(2,1)-ladit_prahy)=0;
        rgb_norm_g(rgb_norm_g>tresh_colors(2,2)+ladit_prahy)=0;
        rgb_norm_g(rgb_norm_g>0)=1;
        rgb_norm_b(rgb_norm_b<tresh_colors(3,1)-ladit_prahy)=0;
        rgb_norm_b(rgb_norm_b>tresh_colors(3,2)+ladit_prahy)=0;
        rgb_norm_b(rgb_norm_b>0)=1;
        %kombinace barevnych slozek
        obr_seg=rgb_norm_r.*rgb_norm_g.*rgb_norm_b; 
    case 3 %YCrCb prostor - slozka Cr
        load('Kalibrace_barev.mat');
        obr_ycbcr = rgb2ycbcr(obr); %prevod do ycbcr prostoru
        ycbcr_cr=obr_ycbcr(:,:,3);
        %prahovani
        ycbcr_cr(ycbcr_cr<tresh_colors(5,1)-ladit_prahy)=0;
        ycbcr_cr(ycbcr_cr>tresh_colors(5,2)+ladit_prahy)=0;
        ycbcr_cr(ycbcr_cr>0)=1;
        obr_seg=ycbcr_cr;
    case 4 %YCrCb prostor - slozky Cr&Cb 
        load('Kalibrace_barev.mat');
        obr_ycbcr = rgb2ycbcr(obr); %prevod do ycbcr prostoru
        ycbcr_cb=obr_ycbcr(:,:,2);
        ycbcr_cr=obr_ycbcr(:,:,3);
        %prahovani
        ycbcr_cb(ycbcr_cb<tresh_colors(4,1)-ladit_prahy)=0;
        ycbcr_cb(ycbcr_cb>tresh_colors(4,2)+ladit_prahy)=0;
        ycbcr_cb(ycbcr_cb>0)=1;
        ycbcr_cr(ycbcr_cr<tresh_colors(5,1)-ladit_prahy)=0;
        ycbcr_cr(ycbcr_cr>tresh_colors(5,2)+ladit_prahy)=0;
        ycbcr_cr(ycbcr_cr>0)=1;
        %kombinace barevnych slozek
        obr_seg=ycbcr_cb.*ycbcr_cr;
    case 5
        load('Kalibrace_barev.mat');
        % slozka nR
        %nutne osetreni nul pro deleni
        null_var=0.001; %hodnota misto nuly pro dalsi vypocty (z duvodu deleni nulou)
        img_null=obr(:,:,1);img_null(img_null==0)=null_var;obr(:,:,1)=img_null;
        %normovany rgb pro slozku R
        rgb_norm_r=obr(:,:,1)./(obr(:,:,1)+obr(:,:,2)+obr(:,:,3));
        %prahovani
        rgb_norm_r(rgb_norm_r<tresh_colors(1,1)-ladit_prahy)=0;
        rgb_norm_r(rgb_norm_r>tresh_colors(1,2)+ladit_prahy)=0;
        rgb_norm_r(rgb_norm_r>0)=1; % zbylym pixelum se priradi 1
        %slozka Cr
        obr_ycbcr = rgb2ycbcr(obr);
        ycbcr_cr=obr_ycbcr(:,:,3);
        ycbcr_cr(ycbcr_cr<tresh_colors(5,1)-ladit_prahy)=0;
        ycbcr_cr(ycbcr_cr>tresh_colors(5,2)+ladit_prahy)=0;
        ycbcr_cr(ycbcr_cr>0)=1;
        %kombinace barevnych slozek
        obr_seg=rgb_norm_r.*ycbcr_cr; 
    otherwise
        disp('Chybne zvolena hodnota vstupu !');
        obr_seg=obr;
        return
end
end

