%% METODA FQR - AUTOR: MAREK ROUSEK

%% CAST UZIVATESLKEHO PROSTREDI - code se vygeneruje sam po nastaveni GUI - bez komentářů

function varargout = metoda_FQR(varargin)
%METODA_FQR M-file for metoda_FQR.fig
%      METODA_FQR, by itself, creates a new METODA_FQR or raises the existing
%      singleton*.
%
%      H = METODA_FQR returns the handle to a new METODA_FQR or the handle to
%      the existing singleton*.
%
%      METODA_FQR('Property','Value',...) creates a new METODA_FQR using the
%      given property value pairs. Unrecognized properties are passed via
%      varargin to metoda_FQR_OpeningFcn.  This calling syntax produces a
%      warning when there is an existing singleton*.
%
%      METODA_FQR('CALLBACK') and METODA_FQR('CALLBACK',hObject,...) call the
%      local function named CALLBACK in METODA_FQR.M with the given input
%      arguments.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help metoda_FQR

% Last Modified by GUIDE v2.5 11-Jan-2016 11:44:07

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @metoda_FQR_OpeningFcn, ...
                   'gui_OutputFcn',  @metoda_FQR_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 metoda_FQR is made visible.
function metoda_FQR_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   unrecognized PropertyName/PropertyValue pairs from the
%            command line (see VARARGIN)

% Choose default command line output for metoda_FQR
handles.output = hObject;

handles.data.start = 1;
handles.data.konec = 0;
handles.data.step = 1;

set(handles.text_progress, 'String',0);
axes(handles.axes1);
[graf] = progress_bar(-1);
imshow(graf)

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes metoda_FQR wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = metoda_FQR_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;


% --- Executes on button press in pushbutton_najit_ref.
function pushbutton_najit_ref_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton_najit_ref (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
[filename_R, pathname_R, filterindex] = uigetfile('*.avi', 'Najít referenční videosekvenci', [cd]);
handles.data.ref_name=[pathname_R filename_R];
set(handles.text_cesta_ref, 'String',[filename_R]);


guidata(hObject, handles);

% --- Executes on button press in pushbutton_najit_test.
function pushbutton_najit_test_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton_najit_test (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
[filename_T, pathname_T, filterindex] = uigetfile('*.mp4', 'Najít testovanou videosekvenci', [cd]);
handles.data.test_name=[pathname_T filename_T];
set(handles.text_cesta_test, 'String',[filename_T]);

guidata(hObject, handles);

% --- Executes on button press in pushbutton_najit_ROI.
function pushbutton_najit_ROI_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton_najit_ROI (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
[filename_R, pathname_R, filterindex] = uigetfile('*.txt', 'Najít matici ROI', [cd]);
handles.data.ROI_name=[pathname_R filename_R];
handles.data.ROI_name=handles.data.ROI_name(1:end-15);
set(handles.text_cesta_ROI, 'String',[handles.data.ROI_name]);

guidata(hObject, handles);

function edit_Startframe_Callback(hObject, eventdata, handles)
% hObject    handle to edit_Startframe (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
start = str2double(get(hObject, 'String'));
if isnan(start)
    set(hObject, 'String', 1);
    errordlg('Vstupem musí být číslo','Chyba');
end

handles.data.start = start;
guidata(hObject,handles)

% Hints: get(hObject,'String') returns contents of edit_Startframe as text
%        str2double(get(hObject,'String')) returns contents of edit_Startframe as a double

function edit_Endframe_Callback(hObject, eventdata, handles)
% hObject    handle to edit_Endframe (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
konec = str2double(get(hObject, 'String'));
if isnan(konec)
    set(hObject, 'String', 0);
    errordlg('Vstupem musí být číslo','Chyba');
end

handles.data.konec = konec;
guidata(hObject,handles)

% Hints: get(hObject,'String') returns contents of edit_Endframe as text
%        str2double(get(hObject,'String')) returns contents of edit_Endframe as a double

function edit_Step_Callback(hObject, eventdata, handles)
% hObject    handle to edit_Step (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
step = str2double(get(hObject, 'String'));
if isnan(step)
    set(hObject, 'String', 1);
    errordlg('Vstupem musí být číslo','Chyba');
end

handles.data.step = step;
guidata(hObject,handles)
% Hints: get(hObject,'String') returns contents of edit_Step as text
%        str2double(get(hObject,'String')) returns contents of edit_Step as a double

% --- Executes on button press in pushbutton_START.
function pushbutton_START_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton_START (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
set(handles.text_progress, 'String',0);
set(handles.text_FQR, 'String',0);
metoda_FQR;

%% CAST SAMOTNEHO ALGORTIMU VYPOCTU METODY (autorova práce) 
%(primo souvisi s textem prace a popisem výpočtu - ideální mít při ruce pro pochopení)

%% NASTAVENÍ POČÁTEČNÍCH VSTUPŮ
endframe = handles.data.konec; % VSTUP: poslední načtený frame ( <= 0 - všechny ve videu, jiné číslo = výběr uživatelem)
startframe = handles.data.start; % VSTUP: počáteční frame (výběr uživatelem)
kolik = handles.data.step; % VSTUP: kolikátý každý frame se má hodnotit (zrychlení výpočtu)
ref_file = handles.data.ref_name; % VSTUP: cesta k referenčnímu videu
de_file = handles.data.test_name; % VSTUP: cesta k testovanému videu
obr_matice = handles.data.ROI_name; % VSTUP: cesta ke slozce s maticemy pro nacteni masek

if get(handles.button_ORIGINAL,'Value') % VÝBĚR POČÍTANÉ METRIKY - SSIM ORIGO
   vyber=1;
elseif get(handles.button_MATLAB,'Value') % VÝBĚR POČÍTANÉ METRIKY - SSIM MATLAB
   vyber=0; 
end

axes(handles.axes1); %zobrazení postupu výpočtu
set(handles.text_progress, 'String',1); % text - kolik procent probehlo
[graf] = progress_bar(1); % progress bar
imshow(graf); % zobrazení baru

%% NACTENI VIDEA

ref_file = VideoReader(ref_file); %načtení referenční videosekvence funkcí videoreader
ref = read(ref_file); %nacteni referenční videosekvence do matice 4D

de_file = VideoReader(de_file); %načtení testované videosekvence funkcí videoreader
de = read(de_file); %nacteni referenční videosekvence do matice 4D

[Height Width Color nFrames] = size(de); %určení rozměrů 4D matice (VÝŠKA x ŠÍŘKA x BARVA x POČET SNÍMKŮ)
m=Height; % výška obrazu
n=Width; %šířka obrazu

%% ZAJISTENI PROTI CHYBAM

if startframe >= nFrames % zajištění proti chybám při chybném vstupu
   startframe = nFrames;
end

if startframe <= 0 % zajištění proti chybám při chybném vstupu
   startframe = 1;
end

if endframe >= nFrames || endframe <= 0 % zajištění proti chybám při chybném vstupu
   pomoc = nFrames;
   endframe = nFrames;
else
   pomoc = nFrames; % zajištění proti chybám při chybném vstupu
   nFrames=endframe;
end

if startframe >= endframe
   startframe = endframe;
end

if kolik <= 0 % zajištění proti chybám při chybném vstupu
   kolik = 1;
end

if kolik >= nFrames % zajištění proti chybám při chybném vstupu
   kolik = nFrames;
end

axes(handles.axes1); %zobrazení postupu výpočtu
set(handles.text_progress, 'String',5); % text - kolik procent probehlo
[graf] = progress_bar(5); % progress bar
imshow(graf); % zobrazení baru

%% NACTENI MASEK (popis v m-filu kompletmaska.m)

[obr_ref1, obr_ref2, obr_ref3, obr_de1, obr_de2, obr_de3, framenorm, maska] = kompletmaska(Height, Width, nFrames, startframe, kolik, ref, de, obr_matice, pomoc);

axes(handles.axes1); %zobrazení postupu výpočtu
set(handles.text_progress, 'String',25); % text - kolik procent probehlo
[graf] = progress_bar(25); % progress bar
imshow(graf); % zobrazení baru

%% ROI 1 (odstranění redundantní informace v každém POUŽITÉM snímku ROI1)
if vyber == 0 % VÝBĚR POČÍTANÉ METRIKY - SSIM MATLAB
    
parfor frame=1:framenorm %PARFOR cyklus - pro všechny HODNOCENÉ snímky
ymax=1; xmax=1; ymin=n; xmin=m;  %konstanty - nastavení pro výběr okna
for i=1:m %pro všechny pixely ve sloupci
    for ii=1:n %pro všechy pixely v řádku
        if obr_ref1(i,ii,1,frame)~=0; %pokud není daný pixel redundantní iformace = zapamatuj si jeho hodnotu
            if i>xmax
                xmax=i;
            end
            if ii>ymax
                ymax=ii;
            end
            if i<xmin
                xmin=i;
            end
            if ii<ymin
                ymin=ii;
            end
            X1{frame} = obr_ref1(xmin:xmax,ymin:ymax,:,frame); %vytvoření buněk - 1 bunka = nová ŠÍŘKA x nová VÝŠKA x BARVA
            Y1{frame} = obr_de1(xmin:xmax,ymin:ymax,:,frame); %počet buněk = počet HODNOCENYCH snímků
        end
    end
end
end

elseif vyber == 1 % VÝBĚR POČÍTANÉ METRIKY - SSIM ORIGO
    
parfor frame=1:framenorm % PARFOR cyklus - pro všechny HODNOCENÉ snímky
    X1{frame} = obr_ref1(:,:,:,frame); %vytvoření buněk - 1 bunka = ŠÍŘKA x VÝŠKA x BARVA
    Y1{frame} = obr_de1(:,:,:,frame); %počet buněk = počet HODNOCENYCH snímků
end

end

axes(handles.axes1); %zobrazení postupu výpočtu
set(handles.text_progress, 'String',35); % text - kolik procent probehlo
[graf] = progress_bar(35); % progress bar
imshow(graf); % zobrazení baru

%% MSSIM 1 MATLAB výpočet pro ROI 1 (používá se SSIM origo)
if vyber == 0  % VÝBĚR POČÍTANÉ METRIKY - SSIM MATLAB
    
ssimval1M=NaN(framenorm,1); %připravení vektoru pro zápis hodnot
parfor i=1:framenorm %pro každý HODNOCENÝ  snímek
    [ssimvalM(i)] = ssimM(X1{i}(:,:,:),Y1{i}(:,:,:)); %SSIM index (viz ssimM.m)
    ssimval1M(i)=ssimvalM(i); %zapsat výsledek do připraveného vektoru
    ssimvalM(i)=NaN; %připravení pro nový výpočet
end

%% MSSIM 1 ORIGO výpočet pro ROI 1
elseif vyber == 1   % VÝBĚR POČÍTANÉ METRIKY - SSIM ORIGO

ssimval1O=NaN(framenorm,1); %připravení vektoru pro zápis hodnot
parfor i=1:framenorm %pro každý HODNOCENÝ  snímek
    XA{i}= 0.2126*X1{i}(:,:,1)+0.7152*X1{i}(:,:,2)+0.0722*X1{i}(:,:,3) % jasová rovnice - BARVA = JEDNA
    YA{i}= 0.2126*Y1{i}(:,:,1)+0.7152*Y1{i}(:,:,2)+0.0722*Y1{i}(:,:,3) % jasová rovnice - BARVA = JEDNA
    [ssimvalO(i)] = ssimO(XA{i}(:,:,:),YA{i}(:,:,:)); %SSIM index (viz ssimO.m)
    ssimval1O(i)=ssimvalO(i); %zapsat výsledek do připraveného vektoru
    ssimvalO(i)=NaN; %připravení pro nový výpočet
end

end

axes(handles.axes1); %zobrazení postupu výpočtu
set(handles.text_progress, 'String',40); % text - kolik procent probehlo
[graf] = progress_bar(40); % progress bar
imshow(graf); % zobrazení baru

%% ROI 2 (odstranění redundantní informace v každém POUŽITÉM snímku ROI2)
if vyber == 0 % VÝBĚR POČÍTANÉ METRIKY - SSIM MATLAB
    
parfor frame=1:framenorm %PARFOR cyklus - pro všechny HODNOCENÉ snímky
ymax=1; xmax=1; ymin=n; xmin=m;  %konstanty - nastavení pro výběr okna
for i=1:m %pro všechny pixely ve sloupci
    for ii=1:n %pro všechy pixely v řádku
        if obr_ref2(i,ii,1,frame)~=0; %pokud není daný pixel redundantní iformace = zapamatuj si jeho hodnotu
            if i>xmax
                xmax=i;
            end
            if ii>ymax
                ymax=ii;
            end
            if i<xmin
                xmin=i;
            end
            if ii<ymin
                ymin=ii;
            end  
            X2{frame} = obr_ref2(xmin:xmax,ymin:ymax,:,frame); %vytvoření buněk - 1 bunka = nová ŠÍŘKA x nová VÝŠKA x BARVA
            Y2{frame} = obr_de2(xmin:xmax,ymin:ymax,:,frame); %počet buněk = počet HODNOCENYCH snímků
        end
    end
end
end

elseif vyber == 1 % VÝBĚR POČÍTANÉ METRIKY - SSIM ORIGO
    
parfor frame=1:framenorm % PARFOR cyklus - pro všechny HODNOCENÉ snímky
    X2{frame} = obr_ref2(:,:,:,frame); %vytvoření buněk - 1 bunka = ŠÍŘKA x VÝŠKA x BARVA
    Y2{frame} = obr_de2(:,:,:,frame); %počet buněk = počet HODNOCENYCH snímků
end

end

axes(handles.axes1); %zobrazení postupu výpočtu
set(handles.text_progress, 'String',70); % text - kolik procent probehlo
[graf] = progress_bar(70); % progress bar
imshow(graf); % zobrazení baru

%% MSSIM 2 MATLAB výpočet pro ROI 2 (používá se SSIM origo)
if vyber == 0; % VÝBĚR POČÍTANÉ METRIKY - SSIM MATLAB
    
ssimval2M=NaN(framenorm,1); %připravení vektoru pro zápis hodnot 
parfor i=1:framenorm %pro každý HODNOCENÝ  snímek
       [ssimvalM(i)] = ssimM(X2{i}(:,:,:),Y2{i}(:,:,:));  %SSIM index (viz ssimM.m)
       ssimval2M(i)=ssimvalM(i); %zapsat výsledek do připraveného vektoru
       ssimvalM(i)=NaN; %připravení pro nový výpočet
end

%% MSSIM 2 ORIGO výpočet pro ROI 2
elseif vyber == 1 % VÝBĚR POČÍTANÉ METRIKY - SSIM ORIGO
    
ssimval20=NaN(framenorm,1); %připravení vektoru pro zápis hodnot 
parfor i=1:framenorm %pro každý HODNOCENÝ  snímek
       XB{i}= 0.2126*X2{i}(:,:,1)+0.7152*X2{i}(:,:,2)+0.0722*X2{i}(:,:,3) %jasová rovnice - BARVA = JEDNA
       YB{i}= 0.2126*Y2{i}(:,:,1)+0.7152*Y2{i}(:,:,2)+0.0722*Y2{i}(:,:,3) %jasová rovnice - BARVA = JEDNA
       [ssimvalO(i)] = ssimO(XB{i}(:,:,:),YB{i}(:,:,:)); %SSIM index (viz ssimO.m)
       ssimval2O(i)=ssimvalO(i); %zapsat výsledek do připraveného vektoru
       ssimvalO(i)=NaN; %připravení pro nový výpočet
end

end

axes(handles.axes1); %zobrazení postupu výpočtu
set(handles.text_progress, 'String',80); % text - kolik procent probehlo
[graf] = progress_bar(80); % progress bar
imshow(graf); % zobrazení baru

%% ROI3 (u ROI3 nelze odstranit žádná redundantní informace)

parfor frame=1:framenorm % PARFOR cyklus - pro všechny HODNOCENÉ snímky
    X3{frame} = obr_ref3(:,:,:,frame); %vytvoření buněk - 1 bunka = ŠÍŘKA x VÝŠKA x BARVA
    Y3{frame} = obr_de3(:,:,:,frame); %počet buněk = počet HODNOCENYCH snímků
end

axes(handles.axes1); %zobrazení postupu výpočtu
set(handles.text_progress, 'String',85); % text - kolik procent probehlo
[graf] = progress_bar(85); % progress bar
imshow(graf); % zobrazení baru

%% MSSIM 3 MATLAB výpočet pro ROI 3 (používá se SSIM origo)
if vyber == 0 % VÝBĚR POČÍTANÉ METRIKY - SSIM MATLAB
    
ssimval3M=NaN(framenorm,1); %připravení vektoru pro zápis hodnot 
parfor i=1:framenorm %pro každý HODNOCENÝ  snímek
    [ssimvalM(i)] = ssimM(X3{i}(:,:,:),Y3{i}(:,:,:)); %SSIM index (viz ssimM.m)
    ssimval3M(i)=ssimvalM(i); %zapsat výsledek do připraveného vektoru
    ssimvalM(i)=NaN; %připravení pro nový výpočet
end

%% MSSIM 3 ORIGO pro ROI3
elseif vyber == 1  % VÝBĚR POČÍTANÉ METRIKY - SSIM ORIGO

ssimval3O=NaN(framenorm,1); %připravení vektoru pro zápis hodnot 
parfor i=1:framenorm %pro každý HODNOCENÝ  snímek
    XC{i}= 0.2126*X3{i}(:,:,1)+0.7152*X3{i}(:,:,2)+0.0722*X3{i}(:,:,3) %jasová rovnice - BARVA = JEDNA
    YC{i}= 0.2126*Y3{i}(:,:,1)+0.7152*Y3{i}(:,:,2)+0.0722*Y3{i}(:,:,3) %jasová rovnice - BARVA = JEDNA
    [ssimvalO(i)] = ssimO(XC{i}(:,:,:),YC{i}(:,:,:)); %SSIM index (viz ssimO.m)
    ssimval3O(i)=ssimvalO(i); %zapsat výsledek do připraveného vektoru
    ssimvalO(i)=NaN; %připravení pro nový výpočet
end

end

axes(handles.axes1); %zobrazení postupu výpočtu
set(handles.text_progress, 'String',95); % text - kolik procent probehlo
[graf] = progress_bar(95); % progress bar
imshow(graf); % zobrazení baru

%% NORMOVANI MSSIM hodnot

% 1. PROCENTA ZASTOUPENÍ (zaroven je provedeno otoceni osy v kazdem kroku)

size1 = cell2mat( cellfun(@(A) [size(A,1),size(A,2)], X1(:), 'Uniform', 0) ); %velikost bunek pro výpočet normované MSSIM1
size2 = cell2mat( cellfun(@(B) [size(B,1),size(B,2)], X2(:), 'Uniform', 0) ); %velikost bunek pro výpočet normované MSSIM2

for i=1:framenorm %pro každý HODNOCENÝ  snímek
percent1(i) = 1/(m*n)*((size1(i,1)))*(size1(i,2)); %procenta zastoupení MSSIM1 podle ROI1
percent2(i) = 1/(m*n)*((size2(i,1)))*(size2(i,2)); %procenta zastoupení MSSIM2 podle ROI2

if vyber == 0 % VÝBĚR POČÍTANÉ METRIKY - SSIM MATLAB
    MSSIM1sM(i) = (1-ssimval1M(i))*percent1(i); %Výpočet procentuálního zastoupení MATLAB ROI1
    MSSIM2sM(i) = (1-ssimval2M(i))*percent2(i); %Výpočet procentuálního zastoupení MATLAB ROI2
    MSSIM3sM(i) = (1-ssimval3M(i));             %Výpočet procentuálního zastoupení MATLAB ROI3
elseif vyber == 1 % VÝBĚR POČÍTANÉ METRIKY - SSIM ORIGO
    MSSIM1sO(i) = (1-ssimval1O(i))*percent1(i); %Výpočet procentuálního zastoupení ORIGO ROI1
    MSSIM2sO(i) = (1-ssimval2O(i))*percent2(i); %Výpočet procentuálního zastoupení ORIGO ROI2
    MSSIM3sO(i) = (1-ssimval3O(i));             %Výpočet procentuálního zastoupení ORIGO ROI3
end

end

% 2. JEDNOTNE MSSIM pro vsechny snimky (1 hodnota MSSIM pro jednu oblast ROI v celé videosekvenci)
if vyber == 0 % VÝBĚR POČÍTANÉ METRIKY - SSIM MATLAB
    MSSIM1M = nansum(MSSIM1sM/framenorm); %ROI1 MATLAB
    MSSIM2M = nansum(MSSIM2sM/framenorm); %ROI2 MATLAB
    MSSIM3M = nansum(MSSIM3sM/framenorm); %ROI3 MATLAB
elseif vyber == 1 % VÝBĚR POČÍTANÉ METRIKY - SSIM ORIGO
    MSSIM1O = nansum(MSSIM1sO/framenorm); %ROI1 ORIGO
    MSSIM2O = nansum(MSSIM2sO/framenorm); %ROI2 ORIGO
    MSSIM3O = nansum(MSSIM3sO/framenorm); %ROI3 ORIGO
end
%% VYPOCTENE PARAMETRY

if vyber == 0 % VÝBĚR POČÍTANÉ METRIKY - SSIM MATLAB
    AM=[71.0017490627563]; BM=-0.594768074633546; CM=1; kM=2396.77384715569; %parametry MATLAB
elseif vyber == 1 % VÝBĚR POČÍTANÉ METRIKY - SSIM ORIGO
    AO=53.8106502568338; BO=1; CO=3.66380724799290; kO=477.011953586679; %parametry ORIGO
end
%% VYSLEDEK FQR METODY

if vyber == 0 % VÝBĚR POČÍTANÉ METRIKY - SSIM MATLAB
    FQRM = kM*((AM*MSSIM1M)^2+BM*MSSIM2M+CM*MSSIM3M); % VYSLEDEK MATLAB
    set(handles.text_FQR, 'String',FQRM); %zobrazení VÝSLEDKU
elseif vyber == 1 % VÝBĚR POČÍTANÉ METRIKY - SSIM ORIGO
    FQRO = kO*((AO*MSSIM1O)^2+BO*MSSIM2O+CO*MSSIM3O); % VYSLEDEK ORIGO
    set(handles.text_FQR, 'String',FQRO); %zobrazení VÝSLEDKU
end

axes(handles.axes1); %zobrazení postupu výpočtu
set(handles.text_progress, 'String',100); % text - kolik procent probehlo
[graf] = progress_bar(100); % progress bar
imshow(graf); % zobrazení baru

%AUTOR - MAREK ROUSEK, SSIM ALGORITMY PREVZATE Z:
%ORIGO - https://ece.uwaterloo.ca/~z70wang/research/ssim/ssim_index.m
%MATLAB - http://www.mathworks.com/help/images/ref/ssim.html?refresh=true
