% Tento skript provede segmentaci meziobratlovych plotenek v CT datech
% na zaklade aktivnich kontur. Metoda je inspirovana metodou popsanou
% Wongem et al. v roce 2009: Intervertebral Disc Segmentation and Volumetric
% Reconstruction From Peripheral Quantitative Computed Tomography Imaging.
% Metoda vsak vyuziva jine implementace metody aktivnich kontur vyuzivajici
% stejnou energetickou funkci (Mumford-Shah). Tato metoda byla popsana
% Chanem a Vesem v roce 2002: A Multiphase Level Set Framework for Image
% Segmentation Using the Mumford and Shah Model. Tato implementace rovnez
% pracuje s daty jineho charakteru nez metoda Wonga et al. Pracujeme zde s
% daty s mensim obsahem sumu, takze neni nutny multi-skalovy bilateralni
% pristup popsany v puvodnim clanku.

close all; clear all; clc;
%% Načtení složek se snímky

data_directory = 'data\CT';

image_db = func.get_image_db(data_directory);

element = strel('disk', 10, 0);

for ii = 1:length(image_db)
    
    close all
    
    tic
    
    obraz = image_db(ii).img;
    
%     multiscale_obraz(:, :, 1) = image_db(ii).img;
%     for t = 2:3
%         smoothing = mean(multiscale_obraz(:, :, 1), 'all')^t;
%         spatial_sigma = 2^t;
%         multiscale_obraz(:, :, t) = imbilatfilt(multiscale_obraz(:, :, t-1), smoothing, spatial_sigma);
% %         J = imbilatfilt(I,degreeOfSmoothing,spatialSigma)
%     end
    
    segmentace = func.chan_vese.chenvese(obraz, 'whole', 2000, 0.05, 'multiphase');
%     segmentace = func.chan_vese.chenvese(multiscale_obraz, 'whole', 2000, 0.06, 'vector');
    
    segmentace = segmentace == 2;
    
    segmentace = imfill(segmentace, 'holes');
    segmentace = imopen(segmentace, element);
    segmentace = bwareafilt(segmentace, 1, 'largest');
    
    imshow(segmentace)
    
    %% Výsledky
    image_db(ii).segmented = segmentace;
    
    image_db(ii).time = toc;
    
end

%% Statistické veličiny
% Vyhodnocení kvality
[image_db, mean_dice, mean_jaccard, mean_time] = func.evaluate_results(image_db, 'ct');

