
%%
%
% Diplomova prace 
% Martin Krupicka
% FEL CVUT
% leden 2017
%
% Realizace objektivniho hodnoceni kvality obrazu prostrednictvim metrik
% SNR, PSNR a MSE. Hodnoti se kvalita HDR snimku slozenych z N LDR JPEG
% snimku s ruznou kvalitou. Referenci je HDR snimek slozeny z N LDR snimku
% bez komprese. Hodnota PSNR neni v praci dale vyuzivana.
% 
% Jak teoreticka, tak prakticka cast teto prace 
% vychazi z materialu vypracovanych v ramci magisterskeho
% predmetu Projekt individualni (A2M37IND) [1].
%
%
%%

close all;
clear all;
clc;

%%

% nastaveni rozsahu poradovych cisel obrazku (index cisla v nazvu)
% Pokud nastavime stejne cislo v obou promennych, zpracuje cyklus jen jeden
% soubor. Jinak lze vice souboru najednou, pokud maji poradova cisla
% presne za sebou.
pocatecni_soubor = 1;
koncovy_soubor = 2;

% pocet zpracovavanych souboru
pocet_souboru = koncovy_soubor-pocatecni_soubor+1;

% pocet expozic v puvodni LDR serii
pocet_expozic = 3;

% pocet objektivnich metrik - zakladne 3 - MSE, SNR, PSNR - PSNR ale dale 
% v teto praci nevyuzivano
pocet_objektivnich_metrik = 3; 

% expozicni krok mezi LDR snimky ve zdrojove serii
krok_deltafstops = 5;

% parametr kvality JPEG komprese LDR souboru v serii N LDR
q_pocatecni = 19;
q_koncove = 99;
q_krok = 20;
q=q_pocatecni:q_krok:q_koncove; % pomocny krok pro zjisteni poctu uzivanych hodnot q
% pro inicializaci tabulky v nasledujicim kroku

% inicializace tabulky potrebne velikosti pro zapis vysledku
tabulka_objektivniho_hodnoceni = zeros(size(q,2), 1+pocet_souboru*pocet_objektivnich_metrik); 
% +1 pro parametr JPEG komprese q a pak pocet metrik pro kazdy soubor

% pomocny index pro pruchody cyklem
index_sloupec = -1;

for i=pocatecni_soubor:koncovy_soubor

% pomocny index pro pruchody cyklem
index_pruchodu_cyklem_radek = 1;

% prvni hodnoceni pro prvni soubor dam do sloupce 2 a pak to pro kazdy
% soubor pousouvam o +3
index_sloupec = index_sloupec + 3;
 
% reference - HDR obrazek vznikly kombinaci serie LDR snimku bez komprese
HDR_ref = hdrimread(['in' int2str(i) '_slozeny_uniform_REFERENCE_bezeztratova_deltafstops_' num2str(krok_deltafstops) '.pfm']);

% cyklus pro pruchod ruznymi Q
for q=q_pocatecni:q_krok:q_koncove

    % hodnoceny HDR snimek - HDR obrazek vznikly kombinaci serie LDR JPEG
    % snimku(s kompresi nastavene kvality)
    HDR_hodnoceny = hdrimread(['in' int2str(i) '_slozeny_uniform_JPEG_serie_q_' int2str(q) '_deltafstops_' num2str(krok_deltafstops) '.pfm']);
    
    % vypocet PSNR, SNR, MSE
    [peaksnr_HDR,snr_HDR] = psnr(HDR_hodnoceny, HDR_ref); % PSNR i SNR vychazi rovnou v dB, PSNR dale v praci nevyuzivano

    mse_HDR = immse(HDR_hodnoceny, HDR_ref);
        
    % ulozeni q, PSNR, SNR, MSE do tabulky hodnot
    tabulka_objektivniho_hodnoceni(index_pruchodu_cyklem_radek,1) = q;
    tabulka_objektivniho_hodnoceni(index_pruchodu_cyklem_radek,index_sloupec) = peaksnr_HDR;
    tabulka_objektivniho_hodnoceni(index_pruchodu_cyklem_radek,index_sloupec+1) = snr_HDR;
    tabulka_objektivniho_hodnoceni(index_pruchodu_cyklem_radek,index_sloupec+2) = mse_HDR;
       
    % inkrementace pomocneho indexu pro nastaveni noveho radku tabulky
    % vysledku
    index_pruchodu_cyklem_radek = index_pruchodu_cyklem_radek+1;
    

end

end

% ulozeni vysledku, vysledne tabulky hodnoceni, do MAT souboru
save('SNR_MSE_NLDRJPEG_slozeny_HDR_ruzne_JPEG_q.mat','tabulka_objektivniho_hodnoceni');



