

%%
%
% Diplomova prace 
% Martin Krupicka
% FEL CVUT
% leden 2017
%
% Zjisteni bitoveho toku rady JPEG XT kodovanych souboru.
%
% Jak teoreticka, tak prakticka cast teto prace 
% vychazi z materialu vypracovanych v ramci magisterskeho
% predmetu Projekt individualni (A2M37IND) [1].
%
%
%%

close all;
clear all; 
clc;

%% uzivatelska nastaveni

% 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_souboru = koncovy_soubor - pocatecni_soubor + 1;

% pocet expozic v puvodni LDR serii
pocet_expozic = 3;

% expozicni rozdil mezi LDR snimky v puvodni LDR serii
krok_deltafstops = 5;

% TMO pouzity pri kodovani
TMO = 'Drago';

% parametr kvality zakladni vrstvy, zakladne jedna typicka hodnota,
% pokud bychom chteli vyuzit vice ruznych hodnot, nebyl by problem
% realizovat to podobne jako u velkeho Q
q = 75;

% parametr kvality rezidualni vrstvy
% u toho pracujeme s rozsahem hodnot
Q_pocatek = 19; 
Q_konec = 99;
Q_krok = 20;
Q = Q_pocatek:Q_krok:Q_konec; % tento radek jen pro zjisteni poctu uzivanych hodnot Q
% s vyuzitim pri inicializaci tabulky bitovych toku v dalsim prikazu

%% hlavni cast

% inicializace tabulky vystupnich dat podle poctu zpracovavanych souboru
tabulka_bit_rate = zeros(size(Q,2),2+pocet_souboru*2); % q, Q, bitovy tok a velikost souboru

% pomocna promenna pro indexaci sloupce
index_sloupce = 1;

for i=pocatecni_soubor:koncovy_soubor

% pomocna promenna pro indexaci radku
index_radku = 1;

% pro prvni soubor ulozim hodnotu bitoveho toku do sloupce 3, pro dalsi
% soubory vzdy posun o +2
index_sloupce = index_sloupce + 2;

% zjisteni velikosti JPEG XT kodovaneho souboru a vypocteni bitovych toku

for Q=Q_pocatek:Q_krok:Q_konec

% zjisteni zakladnich informaci o souboru, vcetne velikosti v bajtech
jpeg_xt_kodovany_soubor_info = dir(['out' int2str(i) '_LDR_slozeny_uniform_REFERENCE_bezeztratova_deltafstops_' num2str(krok_deltafstops) '_' TMO '_q_' int2str(q) '_Q_' int2str(Q) '.jpg']);

% pomocna promenna pro nacteni obrazku pro zjisteni rozliseni
img_kodovany = imread(['out' int2str(i) '_LDR_slozeny_uniform_REFERENCE_bezeztratova_deltafstops_' num2str(krok_deltafstops) '_' TMO '_q_' int2str(q) '_Q_' int2str(Q) '.jpg']);

% zjisteni velikosti, poctu pixelu
[vyska, sirka, dimenze] = size(img_kodovany); 
pocet_pixelu = vyska * sirka; % pro vypocet bpp bits per pixel

% zjisteni poctu bitu JPEG XT kodovaneho souboru
pocet_bajtu_kodovany = jpeg_xt_kodovany_soubor_info.bytes;
pocet_bitu_kodovany = pocet_bajtu_kodovany*8; 

% zjisteni bitovych toku JPEG XT kodovanych souboru
bitovy_tok_kodovany = pocet_bitu_kodovany/pocet_pixelu;

% ulozeni uzitecnych ziskanych hodnot do prehledove tabulky
tabulka_bit_rate(index_radku, 1) = q;
tabulka_bit_rate(index_radku, 2) = Q;
tabulka_bit_rate(index_radku, index_sloupce) = bitovy_tok_kodovany;
tabulka_bit_rate(index_radku, index_sloupce+1) = pocet_bajtu_kodovany;

index_radku = index_radku + 1;

end

end

% ulozeni vysledku, vysledne tabulky bitovych toku, do MAT souboru
save('bitove_toky_a_velikosti_serie_JPEG_XT_souboru.mat','tabulka_bit_rate');


%% vykresleni ziskanych vysledku pro dva vstupni soubory

% zavislost velikosti bitoveho toku na Q
figure(1)
plot(tabulka_bit_rate(:,2),tabulka_bit_rate(:,3),'LineWidth',2) 
hold on
plot(tabulka_bit_rate(:,2),tabulka_bit_rate(:,5),'LineWidth',2) 
legend('in1', 'in2', 'Location', 'north')
ylabel('bitový tok [bpp]')
xlabel('parametr kvality rezidualni vrstvy Q [-]')
title('Bitový tok v závislosti na Q')
set(gca, 'FontSize', 15)
hold off






