function [pozice_preruseni,img_pozice] = detection_missegmented_points(data)
%Funkce pro detekci potenciálně chybně segmentovaných kostí. Vstup
%představují binární masky získány segmentací kortikálních kostí. Výstup je
%buňkové pole obsahující pozice napříč celým objemem, kde pozice jsou
%seřazeny také dle kontur. A 4D obraz se zakreslenými pozicemi pro vizuální
%kontrolu.

pocet = size(data,3); %počet řezů
img_pozice = zeros(512,512,3,pocet); %alokace paměti pro zakreslení vysledku
pozice_preruseni = cell(1,pocet); %alokace paměti pro pozice detekovaných bodů
for i=1:pocet %pro všechny řezy
    img_pozice(:,:,1,i) = data(:,:,i); %naplnění obrazu
    img_pozice(:,:,2,i) = data(:,:,i);
    img_pozice(:,:,3,i) = data(:,:,i);
    [L,num] = bwlabel(data(:,:,i),4); %označení regionů
    if num~=0 %pokud je nalezen aspoň jeden region
        souradnice = cell(1,num); % alokace souřadnice detekovaných bodů pro obraz
        for j=1:num % pro všechny regiony
            img_r = bwmorph(L==j,'remove'); %odstranění vnitřních pixelů
            [row column] = find(img_r); %souřadnice pixelů kontury
            [~,poz] = max(row); %pozice startovního pixelu
            contour = bwtraceboundary(img_r,[row(poz) column(poz)],'W'); %sledování kontury
            contour = contour'; %transponováni matice
            con_img = zeros(512,512); %alokace paměti pro obraz kontury
            for k=1:length(contour) %naplnění obrazu konturou
                con_img(contour(1,k), contour(2,k)) = 1;
            end        
            pozice = []; %prealokace paměti pro pozice
            if size(contour,2)>50 %u kontury delší než 50px detekce pomocí CWT a kumulativní úhlove funkce
                [~,G] = cumanglefun(contour); %kumulativní úhlova funkce
                [pozice,~] = cwtdetectpoints(G,15,'bior1.5'); %detekce pozic přerušených úseku
            else %jinak pomoci max a min u funkce popisující směrnici tečny
                phi_tan = atan2(contour(1,:),contour(2,:)); %funkce popisující směrnici tečny
                [~,pozice(1)] = max(phi_tan); %detekce pozice chybně segmentovaného místa
                [~,pozice(2)] = min(phi_tan); %detekce pozice chybně segmentovaného místa
            end
            body_pom = []; %pomocna proměnná pro detekovane body v kontuře
            for k=1:length(pozice) %zakreslení pozic do obrazu
                body_pom = [body_pom; contour(1,pozice(k)) contour(2,pozice(k));];
                if contour(1,pozice(k))>1 && contour(1,pozice(k))<512 && contour(2,pozice(k))>1 && contour(2,pozice(k))<512
                    img_pozice(contour(1,pozice(k))-1:contour(1,pozice(k))+1,contour(2,pozice(k))-1:contour(2,pozice(k))+1,1,i) = 1;
                    img_pozice(contour(1,pozice(k))-1:contour(1,pozice(k))+1,contour(2,pozice(k))-1:contour(2,pozice(k))+1,2:3,i) = 0;
                end
            end
            souradnice{j} = body_pom; %uložení bodů kontur do buňky
        end
    end
    pozice_preruseni{i} = souradnice; %uložení bodů obrazu do buňky
end
end

