function varargout = projekt(varargin)
%DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @projekt_OpeningFcn, ...
                   'gui_OutputFcn',  @projekt_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before projekt is made visible.
function projekt_OpeningFcn(hObject, eventdata, handles, varargin)
global pom_prom
handles.output = hObject;
guidata(hObject, handles);
bilo=ones(492,530);%nastavení grafu do "modu" pro zobrazovani obrazku (zmizi meritko)
axes(handles.vyber_pro_filt);
imshow(bilo);
axes(handles.vysledny_snimek);
imshow(bilo);
pom_prom=0; %pomocná proměná pro kontrolu načtení dat

% --- Outputs from this function are returned to the command line.
function varargout = projekt_OutputFcn(hObject, eventdata, handles) 
varargout{1} = handles.output;

function cesta_k_souboru_z_UZV_Callback(hObject, eventdata, handles)

% --- Executes during object creation, after setting all properties.
function cesta_k_souboru_z_UZV_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end

% --- Executes on button press in nacteni_souboru_UZV.
function nacteni_souboru_UZV_Callback(hObject, eventdata, handles)
clear nefiltrovane_norm nefiltrovane_harm
clc
global nefiltrovane_norm nefiltrovane_harm nazev_raw_souboru pocet_snimku pom_prom

%zakázání všech ovládacích prvků
set(handles.AD_vysledek_prep,'Enable','off');
set(handles.UHFM_vysledek_prep,'Enable','off');
set(handles.norm_vysledek_prep,'Enable','off');
set(handles.harm_vysledek_prep,'Enable','off');
set(handles.uloz_norm,'Enable','off');
set(handles.uloz_harm,'Enable','off');
set(handles.min_vyber_pro_filt_cislo,'Enable','off');
set(handles.max_vyber_pro_filt_cislo,'Enable','off');
set(handles.vyber_pro_vysl_cislo,'Enable','off');

%načtení souboru s příponou .clp
[nazev_raw_souboru, cesta] = uigetfile( ...
    {'*.clp','Ultrasound files (*.clp)';
    '*.*',  'All Files (*.*)'}, ...
    'Pick a file');

switch cesta %kontrola jestli byl vybrán soubor
    case 0
        pom_prom=0;
    otherwise
        cesta=[cesta,nazev_raw_souboru];
        set(handles.cesta_k_souboru_z_UZV,'String',nazev_raw_souboru);%zobrazení názvu souboru
        [nefiltrovane_norm,nefiltrovane_harm]=pkg(cesta);%prevod RAW dat do matlabu
        pocet_snimku=length(nefiltrovane_norm); %zjistení počtu snímků              
        krok_posuvniku = [1, 1] / (pocet_snimku -1);%výpočet kroku a rozsahu posuvniku       
        %nastavení posuvníku pro vyber snimku k filtraci
        set(handles.min_vyber_pro_filt,'Max',pocet_snimku,'Enable','on','SliderStep', krok_posuvniku,'Value',1 );
        set(handles.max_vyber_pro_filt,'Max',pocet_snimku,'Enable','on','SliderStep', krok_posuvniku,'Value',pocet_snimku);       
        %zobrazeni po filtraci prvniho a posledniho snimku
        obrazky =(cell2mat(nefiltrovane_norm(1)));
        axes(handles.vyber_pro_filt);
        imshow(obrazky);       
        %nastaveni hodnoty poli s aktualnima cislama snimku
        set(handles.min_vyber_pro_filt_cislo,'String',num2str(1),'Enable','on');
        set(handles.max_vyber_pro_filt_cislo,'String',num2str(pocet_snimku),'Enable','on');        
        pom_prom=1;      
end

%nastavení zobrazeného snímku a jeho číslo do textového pole po použití
%slidebaru
function min_vyber_pro_filt_Callback(hObject, eventdata, handles)
global nefiltrovane_norm
sliderValue =round( get(hObject,'Value')); %získání hodnoty posuvníku
set(handles.min_vyber_pro_filt_cislo,'String',num2str(sliderValue));%nastavení hodnoty text pole na hodnotu slidebaru
obrazky = cell2mat(nefiltrovane_norm(sliderValue));%vybrání snímku pro zobrazení
axes(handles.vyber_pro_filt);%
imshow(obrazky);%zobrazení snímku

% --- Executes during object creation, after setting all properties.
function min_vyber_pro_filt_CreateFcn(hObject, eventdata, handles)
if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor',[.9 .9 .9]);
end


%nastavení zobrazeného snímku a jeho číslo do textového pole po použití
%slidebaru
function max_vyber_pro_filt_Callback(hObject, eventdata, handles)
global nefiltrovane_norm
sliderValue = round(get(hObject,'Value'));
set(handles.max_vyber_pro_filt_cislo,'String',num2str(sliderValue));
obrazky = cell2mat(nefiltrovane_norm(sliderValue));
axes(handles.vyber_pro_filt);
imshow(obrazky);

% --- Executes during object creation, after setting all properties.
function max_vyber_pro_filt_CreateFcn(hObject, eventdata, handles)
if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor',[.9 .9 .9]);
end


%nastavení zobrazeného snímku a posunutí slidebaru po zadání čísla do text
%pole
function min_vyber_pro_filt_cislo_Callback(hObject, eventdata, handles)
global nefiltrovane_norm pocet_snimku
textValue = str2double(get(hObject,'String'));%získání hodnoty text pole

%kontrola jestli bylo zadáno číslo a jestli je v roszahu počtu snímků
if textValue<=0  % pokud je menší než 1 nastaví se hodnota na jedna
    set(hObject,'String',num2str(1));
    textValue=1;
elseif textValue<=pocet_snimku   % pokud je zadaná hodnota v pořádku nic se nezmění
else %když se zadá větší čislo než je počet snimku    
    set(hObject,'String',num2str(pocet_snimku));%nastaví se na hodnotu celkoveho poctu snímků
    textValue=pocet_snimku;
end
set(handles.min_vyber_pro_filt,'Value',textValue);%nastavení slidebaru
obrazky = cell2mat(nefiltrovane_norm(textValue));
axes(handles.vyber_pro_filt);
imshow(obrazky);

% --- Executes during object creation, after setting all properties.
function min_vyber_pro_filt_cislo_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


%nastavení zobrazeného snímku a posunutí slidebaru po zadání čísla do text
%pole
function max_vyber_pro_filt_cislo_Callback(hObject, eventdata, handles)
global nefiltrovane_norm pocet_snimku
textValue = str2double(get(hObject,'String'));
if textValue<=0
    set(hObject,'String',num2str(1));
    textValue=1;
elseif textValue<=pocet_snimku  
else
    set(hObject,'String',num2str(pocet_snimku));
    textValue=pocet_snimku;
end
set(handles.max_vyber_pro_filt,'Value',textValue);
obrazky = cell2mat(nefiltrovane_norm(textValue));
axes(handles.vyber_pro_filt);
imshow(obrazky);

% --- Executes during object creation, after setting all properties.
function max_vyber_pro_filt_cislo_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


% --- Executes on button press in filtrace.
function filtrace_Callback(hObject, eventdata, handles)
clear filtrovana_uhmf_norm filtrovana_uhmf_harm filtrovana_ad_norm filtrovana_ad_harm
global nefiltrovane_norm nefiltrovane_harm filtrovana_ad_norm filtrovana_ad_harm filtrovana_uhmf_norm filtrovana_uhmf_harm pocet_snimku_filt pom_prom

%zjištění stavu slidebaru pro výběr sekvence k filtrování
min=round(get(handles.min_vyber_pro_filt,'Value'));
max=round(get(handles.max_vyber_pro_filt,'Value'));
%vypnutí přepínačů pro zobrazení filtrovaných dat před filtrací
uhmf_check=get(handles.UHMF_chb,'Value');
ad_check=get(handles.AD_chb,'Value');
norm_check=get(handles.norm_chb,'Value');
harm_check=get(handles.harm_chb,'Value');
set(handles.AD_vysledek_prep,'Enable','off');
set(handles.UHFM_vysledek_prep,'Enable','off');
set(handles.norm_vysledek_prep,'Enable','off');
set(handles.harm_vysledek_prep,'Enable','off');
set(handles.uloz_norm,'Enable','off');
set(handles.uloz_harm,'Enable','off');
set(handles.vyber_pro_vysl_cislo,'Enable','off');
i=0;
chyba='';
%kontrola jestli je pred filtrací vsechno nastaveno
pom=max-min;
if (pom)<0
    chyba='Špatně nastavený rozsah! ';
    i=1;
end

pom=uhmf_check+ad_check;
if pom==0
    chyba=[chyba,'Vyberte metodu filtrace! '];
    i=1;
end

pom=norm_check+harm_check;
if pom==0;
    chyba=[chyba,'Vyberte typ dat pro filtraci! '];
    i=1;
end

if pom_prom==0;
    chyba=[chyba,'Nejdříve načtěte data! '];
    i=1;
end

set(handles.error,'String',chyba);%zobrazení chybové hlášky

if i==0; %pokud jsou splneny podminky muze se filtrovat
    vybr_nefilt_norm=nefiltrovane_norm(min:max);
    vybr_nefilt_harm=nefiltrovane_harm(min:max);
    pocet_snimku_filt=max-min+1;            
    if uhmf_check==1;        
        if norm_check==1;
            druh_filtrace=['Filtruji norm. data pomocí UHMF']; %nastavení textu pro waitbar
            filtrovana_uhmf_norm=filtr_UHMF(vybr_nefilt_norm,pocet_snimku_filt,druh_filtrace); %filtrace
            axes(handles.vysledny_snimek);%nastaveni vyfiltrovaneho snimku do okna pro zobrazeni filtrovanych dat
            imshow(cell2mat(filtrovana_uhmf_norm(1)));            
            set(handles.UHFM_vysledek_prep,'Enable','on','Value',1); %povolení přepínačů pro prochazeni vyfiltrovaných dat           
            set(handles.norm_vysledek_prep,'Enable','on','Value',1);
            set(handles.uloz_norm,'Enable','on');
        end
        if harm_check==1;
            druh_filtrace=['Filtruji harm. data pomocí UHMF'];
            filtrovana_uhmf_harm=filtr_UHMF(vybr_nefilt_harm,pocet_snimku_filt,druh_filtrace);
            axes(handles.vysledny_snimek);
            imshow(cell2mat(filtrovana_uhmf_harm(1)));            
            set(handles.UHFM_vysledek_prep,'Enable','on','Value',1);            
            set(handles.harm_vysledek_prep,'Enable','on','Value',1);
            set(handles.uloz_harm,'Enable','on');
        end
    end    
    if ad_check==1;        
        if norm_check==1;
            druh_filtrace=['Filtruji norm. data pomocí GPMAD-r'];
            filtrovana_ad_norm=filtr_GPMADR(vybr_nefilt_norm,pocet_snimku_filt,druh_filtrace);
            axes(handles.vysledny_snimek);
            imshow(cell2mat(filtrovana_ad_norm(1)));            
            set(handles.AD_vysledek_prep,'Enable','on','Value',1); 
            set(handles.norm_vysledek_prep,'Enable','on','Value',1);
            set(handles.uloz_norm,'Enable','on');           
        end
        if harm_check==1;
            druh_filtrace=['Filtruji harm. data pomocí GPMAD-r'];
            filtrovana_ad_harm=filtr_GPMADR(vybr_nefilt_harm,pocet_snimku_filt,druh_filtrace);
            axes(handles.vysledny_snimek);
            imshow(cell2mat(filtrovana_ad_harm(1)));          
            set(handles.AD_vysledek_prep,'Enable','on','Value',1); 
            set(handles.harm_vysledek_prep,'Enable','on','Value',1);
            set(handles.uloz_harm,'Enable','on');           
        end
    end
    
    set(handles.vyber_pro_vysl_cislo,'String',num2str(1),'Enable','on'); %nastavení textového pole pro výber vyfiltrovaneho snimku
    
    if pocet_snimku_filt>=2 
        krok_posuvniku = [1, 1] / (pocet_snimku_filt-1 ); %nastavení posuvníku
        set(handles.vyber_filtrovaneho_snimku,'Max',pocet_snimku_filt,'Min',1,'Enable','on','SliderStep', krok_posuvniku,'Value',1);
    else %pokud je jenom jeden snimek je posuvnik vyplý
        set(handles.vyber_filtrovaneho_snimku,'Enable','off');
    end   
end



% --- Executes on button press in UHMF_chb.
function UHMF_chb_Callback(hObject, eventdata, handles)


% --- Executes on button press in AD_chb.
function AD_chb_Callback(hObject, eventdata, handles)


% --- Executes on button press in norm_chb.
function norm_chb_Callback(hObject, eventdata, handles)



% --- Executes on button press in harm_chb.
function harm_chb_Callback(hObject, eventdata, handles)



%vypis chyby pokud byly spatne zadany podmínky pro filtraci
function error_Callback(hObject, eventdata, handles)
%vypis chyby pokud byly spatne zadany podmínky pro filtraci
function error_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


%vybrani vyfiltrovaneho snimku pro zobrazeni pomoci slidebaru
function vyber_filtrovaneho_snimku_Callback(hObject, eventdata, handles)
global filtrovana_uhmf_norm filtrovana_uhmf_harm filtrovana_ad_norm filtrovana_ad_harm
uhmf_check=get(handles.UHFM_vysledek_prep,'Value');%zjisteni co se má zobrazit
ad_check=get(handles.AD_vysledek_prep,'Value');
norm_check=get(handles.norm_vysledek_prep,'Value');
harm_check=get(handles.harm_vysledek_prep,'Value');

sliderValue = round(get(hObject,'Value'));
set(handles.vyber_pro_vysl_cislo,'String',num2str(sliderValue));%nastavení hodnoty text pole na číslo snímku
%vybrání matice dat pro zobrazení
if ad_check==1;
    
    if norm_check==1;
        vybrana_filt=filtrovana_ad_norm;
    end
    if harm_check==1;
        vybrana_filt=filtrovana_ad_harm;
    end
end

if uhmf_check==1;
    
    if norm_check==1;
        vybrana_filt=filtrovana_uhmf_norm ;
        
    end
    if harm_check==1;
        vybrana_filt=filtrovana_uhmf_harm;
    end
end


%zobrazeni vybraneho snimku
axes(handles.vysledny_snimek);
imshow(cell2mat(vybrana_filt(sliderValue)));


% zobrazeni vyfiltrovaneho a vybraneho snimku
function vyber_filtrovaneho_snimku_CreateFcn(hObject, eventdata, handles)
if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor',[.9 .9 .9]);
end

%zobrazeni cestky k vyfiltrovaným a uloženým datum
function cesta_k_ulozenym_souborum_Callback(hObject, eventdata, handles)
%zobrazeni cestky k vyfiltrovaným a uloženým datum
function cesta_k_ulozenym_souborum_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


%ukládání vyfiltrovaných norm dat
function uloz_norm_Callback(hObject, eventdata, handles)
global filtrovana_uhmf_norm  filtrovana_ad_norm nazev_raw_souboru
min=num2str(round(get(handles.min_vyber_pro_filt,'Value')));
max=num2str(round(get(handles.max_vyber_pro_filt,'Value')));
uhmf_check=get(handles.UHFM_vysledek_prep,'Value');%zjistení která data se mají uložit
if uhmf_check==1;
    nazev_souboru=[nazev_raw_souboru(1:end-4) '_filtrovany_UHMF_norm_snimky_' min '-' max];%generování názvu souboru
    [FileName,cesta] = uiputfile('*.mat','Ulož vyfiltrované data jako',nazev_souboru);
    switch cesta %kontrola jestli byl vybrán soubor
        case 0
        otherwise
            
            save([cesta FileName ],'filtrovana_uhmf_norm'); %uložení
    end
else
    nazev_souboru=[nazev_raw_souboru(1:end-4) '_filtrovany_GPMADR_norm_snimky_' min '-' max];
    [FileName,cesta] = uiputfile('*.mat','Ulož vyfiltrované data jako',nazev_souboru);
    switch cesta %kontrola jestli byl vybrán soubor
        case 0
        otherwise
            
            save([cesta FileName ],'filtrovana_ad_norm');
    end
    
end



%ukládání vyfiltrovaných harm dat
function uloz_harm_Callback(hObject, eventdata, handles)
global filtrovana_uhmf_harm filtrovana_ad_harm nazev_raw_souboru
min=num2str(round(get(handles.min_vyber_pro_filt,'Value')));
max=num2str(round(get(handles.max_vyber_pro_filt,'Value')));
uhmf_check=get(handles.UHFM_vysledek_prep,'Value');%zjisteni co se má zobrazit
if uhmf_check==1;
    nazev_souboru=[nazev_raw_souboru(1:end-4) '_filtrovany_UHMF_harm_snimky_' min '-' max];
    [FileName,cesta] = uiputfile('*.mat','Ulož vyfiltrované data jako',nazev_souboru);
    switch cesta %kontrola jestli byl vybrán soubor
        case 0
        otherwise
            
            save([cesta FileName ],'filtrovana_uhmf_harm');
    end
else
    nazev_souboru=[nazev_raw_souboru(1:end-4) '_filtrovany_GPMADR_harm_snimky_' min '-' max];
    [FileName,cesta] = uiputfile('*.mat','Ulož vyfiltrované data jako',nazev_souboru);
    switch cesta %kontrola jestli byl vybrán soubor
        case 0
        otherwise
           
            save([cesta FileName ],'filtrovana_ad_harm');
    end
end

%nastavení zobrazeného vyfiltrovaného snímku a posunutí slidebaru po zadání čísla do text
%pole
function vyber_pro_vysl_cislo_Callback(hObject, eventdata, handles)

global filtrovana_uhmf_norm filtrovana_uhmf_harm filtrovana_ad_norm filtrovana_ad_harm pocet_snimku_filt
uhmf_check=get(handles.UHFM_vysledek_prep,'Value');%zjisteni co se má zobrazit
ad_check=get(handles.AD_vysledek_prep,'Value');
norm_check=get(handles.norm_vysledek_prep,'Value');
harm_check=get(handles.harm_vysledek_prep,'Value');

textValue = str2double(get(hObject,'String'));
set(handles.vyber_filtrovaneho_snimku,'Value',textValue);
%výběr zvolené matice k zobrazení
if ad_check==1;
    if norm_check==1;
        vybrana_filt=filtrovana_ad_norm;
    end
    if harm_check==1;
        vybrana_filt=filtrovana_ad_harm;
    end
end
if uhmf_check==1;
    
    if norm_check==1;
        vybrana_filt=filtrovana_uhmf_norm ;   
    end
    if harm_check==1;
        vybrana_filt=filtrovana_uhmf_harm;
    end
end

if textValue<=0 %stejné jako u výběru pro nefiltrované data
    set(handles.vyber_filtrovaneho_snimku,'Value',1);
    set(hObject,'String',num2str(1));
    textValue=1;  
elseif textValue<=pocet_snimku_filt
    set(handles.vyber_filtrovaneho_snimku,'Value',textValue);
else %když se zadá větší čislo než je počet snimku
    set(handles.vyber_filtrovaneho_snimku,'Value',pocet_snimku_filt);
    set(hObject,'String',num2str(pocet_snimku_filt));
    textValue=pocet_snimku_filt;
end
axes(handles.vysledny_snimek);
imshow(cell2mat(vybrana_filt(pocet_snimku_filt)));


% --- Executes during object creation, after setting all properties.
function vyber_pro_vysl_cislo_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



%prepnutí snímku když se vybere jiný typ dat (z harm do norm)
function norm_vysledek_prep_Callback(hObject, eventdata, handles)
global filtrovana_uhmf_norm filtrovana_ad_norm
uhmf_check=get(handles.UHFM_vysledek_prep,'Value');%zjisteni co se má zobrazit
sliderValue = round(get(handles.vyber_filtrovaneho_snimku,'Value')); %nactení hodnoty slidebaru
if uhmf_check==1;% zobrazení UHMF norm
    
    axes(handles.vysledny_snimek);
    imshow(cell2mat(filtrovana_uhmf_norm(sliderValue))); %nastavení snímku pomocí hodnoty slidebaru
else %zobrazení GPMAD-r norm
    axes(handles.vysledny_snimek);
    imshow(cell2mat(filtrovana_ad_norm(sliderValue)));
end

%prepnutí snímku když se vybere jiný typ dat (z norm do harm)
function harm_vysledek_prep_Callback(hObject, eventdata, handles)

global filtrovana_uhmf_harm filtrovana_ad_harm
uhmf_check=get(handles.UHFM_vysledek_prep,'Value');%zjisteni co se má zobrazit
sliderValue = round(get(handles.vyber_filtrovaneho_snimku,'Value'));
if uhmf_check==1;
    axes(handles.vysledny_snimek);
    imshow(cell2mat(filtrovana_uhmf_harm(sliderValue)));
else
    axes(handles.vysledny_snimek);
    imshow(cell2mat(filtrovana_ad_harm(sliderValue)));
end



% --- Executes when figure1 is resized.
function figure1_ResizeFcn(hObject, eventdata, handles)


%prepnutí snímku když se vybere jiný typ filtrace(UHMF do GPMAD-r)
function AD_vysledek_prep_Callback(hObject, eventdata, handles)
global filtrovana_ad_norm filtrovana_ad_harm
norm_check=get(handles.norm_vysledek_prep,'Value');%zjisteni co se má zobrazit
sliderValue = round(get(handles.vyber_filtrovaneho_snimku,'Value'));
if norm_check==1;
    
    axes(handles.vysledny_snimek);
    imshow(cell2mat(filtrovana_ad_norm(sliderValue)));
else
    axes(handles.vysledny_snimek);
    imshow(cell2mat(filtrovana_ad_harm(sliderValue)));
end


%prepnutí snímku když se vybere jiný typ filtrace(GPMAD-r fo UHMF)
function UHFM_vysledek_prep_Callback(hObject, eventdata, handles)
global filtrovana_uhmf_norm filtrovana_uhmf_harm
norm_check=get(handles.norm_vysledek_prep,'Value');%zjisteni co se má zobrazit
sliderValue = round(get(handles.vyber_filtrovaneho_snimku,'Value'));
if norm_check==1;
    axes(handles.vysledny_snimek);
    imshow(cell2mat(filtrovana_uhmf_norm(sliderValue)));
else
    axes(handles.vysledny_snimek);
    imshow(cell2mat(filtrovana_uhmf_harm(sliderValue)));
end
