% Φορτώνω τα δεδομένα από το cardia.mat
load('cardia.mat');
%Βάζω στο τέλος του πίνακα, ως 31η εικόνα, την πρώτη
%για να αποφύγω if συνθήκες κατά την παρεμβολή
V2=cat(3, V1, V1(:, :, 1));

% Δημιουργώ ένα μηδενικό πίνακα 120x120x120 ο οποίος θα
% περιέχει τις 120 τελικές εικόνες (30 αρχικές + 90 απο παρεμβολή
V=zeros(120, 120, 120);

% Διατρέχω τις 30 εικόνες των δεδομένων που έχω, και ανα δύο
% εικόνες δεδομένων παρεμβάλω ανάμεσά τους άλλες 3 νέες
% με ένα γραμμικό πολυώνυμο.
for i=1:30
    %Εικόνες που χρησιμοποιώ στην παρεμβολή
    cur = V2(:, :, i);
    next = V2(:, :, i+1);

    for t=1:4
        est = cur*(1-0.25*t) + next*t*0.25;
        % Βάζω την νέα εικόνα στον τελικό πίνακα
        V(:, :, 4*(i-1)+t) = est;
    end
end

%------------------------------------------------------------
% Στο σημείο αυτό έχω όλες τις εικόνες και μένει
% με έναν γραμμικό μετασχηματισμό να προσαρμώσω τις
% τιμές των pixel στο διάστημα [0, 255].
%------------------------------------------------------------
% 1ος τρόπος

% Κανονικοποιώ τις τιμές ώς προς τη μέγιστη τιμή των pixel
% κι έπειτα τις πολλαπλασιάζω επι 255.
% Με αυτό τον τρόπο, κάνω ένα γραμμικό scaling τιμές και τις
% περιορίζω στο διάστημα [0, 255]
% Ταυτόχρονα μετατρέπω τις τιμές του πίνακα από int16 σε uint8
% για να υπάρχει συμβατότητα με το  που θέλω να δημιουργήσω.
V1 = uint8(V/max(max(max(V)))*255);

% Uncomment για να φανεί η ακολουθία των εικόνων στο MATLAB

% for i=1:120
%     figure(1); imshow(V1(:,:, i));
% end

%------------------------------------------------------------
% 2ος τρόπος

% Μετατρέπω αμέσως τον πίνακα με τις εικόνες από int16 που ήταν σε uint8.
% Όλες οι τιμές που ήταν έξω από το διάστημα [0, 255] προσαρμόζονται
% έτσι στο κοντινότερο άκρο. Δηλαδή όλες οι τιμές που ήταν μεγαλύτερες
% του 255, θα πάρουν την τιμή 255.
% Ωστόσο έτσι θα έχουμε μεγαλύτερες απώλειες.

V2 = uint8(V);

% Uncomment για να φανεί η ακολουθία των εικόνων στο MATLAB
% for i=1:120
%     figure(2); imshow(V2(:,:, i));
% end

%------------------------------------------------------------
% Στο αρχείο CheckMethods.m γίνεται εκτενής ανάλυση μεταξύ
% των δύο τρόπων μελετώντας στατιστικά τις τιμές των pixel.
%------------------------------------------------------------

% Γράφω τις εικόνες σε ένα αρχείο GIF με DelayTime=0.5 ώστε να διαρκέσει
% 1 λεπτό όλη η διαδοχή των εικόνων και με άπειρο αριθμό επαναλήψεων του gif.

imwrite(V1(:, :, 1), 'MRIlin05.gif', 'DelayTime', 0.5, 'LoopCount', inf);
for i=2:120
    imwrite(V1(:, :, i), 'MRIlin05.gif', 'DelayTime', 0.5, 'WriteMode', 'append');
end

imwrite(V2(:, :, 1), 'MRIcut05.gif', 'DelayTime', 0.5, 'LoopCount', inf);
for i=2:120
    imwrite(V2(:, :, i), 'MRIcut05.gif', 'DelayTime', 0.5, 'WriteMode', 'append');
end