% Φορτώνω τα δεδομένα από το 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