function [ r_bwimage, r_was_split ] = split(i_bwimage)
%SPLIT
%   Funkce rozdělí dvojici dotýkajících se buněčných jader na binarním
%   snímku i_bwimage a výsledek vrátí ve snímku r_bwimage.
%   i_bwimage - matice vstupního binárního snímku
%   r_bwimage - výsledná matice binárního snímku
%   r_was_split (boolean) - indikuje, zda došlo k dělení
    
    r_was_split = false;
    boundaries = bwboundaries(i_bwimage);
    boundary = boundaries{1};
    points = get_boundary_points( boundary );
    split_index_1 = 0;
    split_index_2 = 0;
    split_stat    = 0;
    n = size(points,1);
    if n < 10
       return; 
    end
    for s=1:n     
        for t=5:n-5
            step = mod(s+t,n);
            if step == 0;
               step = n; 
            end
            dist = abs(step-s);
            elipse1=zeros(dist+1,2);
            elipse2=zeros(n-dist+1,2);
            if step < s
                elipse1(1:dist+1,:)=points(step:s,:);
                elipse2(1:step,:) = points(1:step,:);
                elipse2(step+1:end,:) = points(s:n,:);
            else
                elipse1(1:dist+1,:)=points(s:step,:);
                elipse2(1:s,:) = points(1:s,:);
                elipse2(s+1:end,:) = points(step:n,:);
            end
            elipse1_par = fitellipse(elipse1(:,2),elipse1(:,1));
            elipse2_par = fitellipse(elipse2(:,2),elipse2(:,1));
            elipse1_stat = get_max_dist(elipse1_par,elipse1);
            elipse2_stat = get_max_dist(elipse2_par,elipse2);
            if (s==1 && t==5)||((elipse1_stat + elipse2_stat)<split_stat)
                split_stat = elipse1_stat + elipse2_stat;
                split_index_1 = s;
                split_index_2 = step;
            end
        end
    end
    split_point_1 = points(split_index_1,:);
    split_point_2 = points(split_index_2,:);
    r_bwimage = draw_line( i_bwimage, split_point_1, split_point_2 );
    r_was_split = true;
end

