Πρόβλημα εμφάνισης figures σε Matlab

Γενικά θέματα για τις γλώσσες προγραμματισμού που δεν καλύπτονται από τις άλλες περιοχές της κατηγορίας.

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
katerinaaa
Δημοσιεύσεις: 109
Εγγραφή: 28 Ιαν 2010 12:46

Πρόβλημα εμφάνισης figures σε Matlab

Δημοσίευση από katerinaaa » 15 Απρ 2010 15:44

Γεια σας,
έχω μια εργασία να κάνω στην οποία εφαρμόζω διάφορα φίλτρα σε εικόνες.
Αποφάσισα να χρησιμοποιήσω τη συνάρτηση subplot για να έχω μια καλύτερη σύγκριση.
Έτσι, ο κώδικάς μου είναι :

Κώδικας: Επιλογή όλων

subplot(3,2,[1 3 5])
imshow(a);
hold off
subplot(3,2,2)
imshow(b);
hold off
subplot(3,2,4)
imshow(c);
hold off
subplot(3,2,6)
imshow(d);
hold off
saveas(gcf,'Σύγκριση');
Μετά από τον παραπάνω κώδικα θέλω να εμφανίζω κάποιες άλλες μεμονομένες εικόνες.

Κώδικας: Επιλογή όλων

imshow(e);
saveas(gcf,'Αλλη Εικόνα');

Η matlab που δημιουργεί την πρώτη εικόνα (τη συγκριτική) κανονικά αλλά μετά μου ξαναεμφανίζει άλλο ένα αρχείο με το όνομα 'Άλλη Εικόνα' και τα περιεχόμενα της συγκριτικής.

Ξέρει κανείς τι δεν έχω προσέξει ?

Ευχαριστώ

just_steve
Δημοσιεύσεις: 11
Εγγραφή: 18 Μαρ 2010 22:54

Πρόβλημα εμφάνισης figures σε Matlab

Δημοσίευση από just_steve » 17 Απρ 2010 01:23

Καλησπέρα Κατερίνα. Νομίζω πως το πρόβλημα σου θα λυθει αν πριν την εντολή για το νεο figure δώσεις clf.

Δηλαδή:

Κώδικας: Επιλογή όλων

% 1α κάνε την figure (τo παράθυρο)
figure_1 = figure('Name', 'to-onoma-tou-figure', 'NumberTitle', 'off', 'menubar', 'none');


% 1β μέσα σε αυτό, κάνε τα subplot κ δώσε τίτλους στο καθένα απο αυτά
a = subplot(2,2,[3 4]);
    imshow(img1);
    
b = subplot(2,2,2);
    imshow(img2);

c = subplot(2,2,1); 
    imshow(img3);

title(a,'Original');
title(b,'Grayscale');
title(c,'Luminance Histogram');

saveas(gcf,'Σύγκριση');

% 2 καθάρισε το περιεχόμενο της figure_1

clf;

% 3 κάνε plot την νέα εικόνα, μέσα στο παλιο figure_1

imshow(img);
saveas(gcf,'Αλλη εικόνα');
-- Αν τρέξεις τον παραπανω κώδικα όλο μαζι, θα δεις μόνο την δεύτερη εικόνα κ όχι τα subplots (Αφου μεσολαβεί η clf) , αλλα τα saved αρχεία θα πρέπει να έιναι σωστα.

Η δομή έχει ως εξείς: Figure>Axis>η εικόνα σου.

Το πρόβλημα είναι οτι current axis του figure_1 είναι αυτοί του τελευταίου subplot (δηλ του c). Ετσι η νέα εικόνα του imshow εμφανίζεται μέσα στο subplot c. Κάνοντας clear figure (clf), καθαρίζεις όλους τους axis και η επομενη εικόνα καταλαμβάνει και παλι όλο το παράθυρο της figure (αφου δημιουργεί νέους axis).

Εναλλακτικά μπορείς να κάνεις μία νέα figure, ώστε να ανοίγουν δύο διαφορετικά παράθυρα για τα δύο figures: (αντικαθιστώντας το gcf=GetCurrentFigure με το handler της κάθε figure)

Κώδικας: Επιλογή όλων

figure_1 = figure('Name', 'to-onoma-tou-1-figure', 'NumberTitle', 'off', 'menubar', 'none');
a = subplot(2,2,[3 4]);
    imshow(img);
    
b = subplot(2,2,2);
    imshow(img);

c = subplot(2,2,1); 
    imshow(img);

saveas(figure_1,'Σύγκριση');
    
figure_2 = figure('Name', 'to-onoma-tou-2-figure', 'NumberTitle', 'off', 'menubar', 'none');
imshow(img);
saveas(figure_2,'Αλλη εικόνα');
Στην δεύτερη περίπτωση δεν θα χρειαστείς το clf - δεν χρειάζεται να ...'καθαρίσεις' καμία figure!

Αν κατάλαβα λαθος πες μου :)
Procrastinating...

katerinaaa
Δημοσιεύσεις: 109
Εγγραφή: 28 Ιαν 2010 12:46

Πρόβλημα εμφάνισης figures σε Matlab

Δημοσίευση από katerinaaa » 17 Απρ 2010 11:52

Ευχαριστώ πάρα πολύ για την απάντηση.
Ήταν ότι ακριβώς χρειαζόμουν.

Να ρωτήσω και κάτι τελευταίο επειδή σκοπεύω να αποθηκεύσω πολλές εικόνες και δε γίνεται να μου ανοίξει 150 παράθυρα στη matlab.
Υπάρχει τρόπος να το αποφύγω ??
Και να εμφανίζω μόνο 4-5 figures που θέλω.

Ευχαριστώ και πάλι για τη βοήθεια.

just_steve
Δημοσιεύσεις: 11
Εγγραφή: 18 Μαρ 2010 22:54

Πρόβλημα εμφάνισης figures σε Matlab

Δημοσίευση από just_steve » 17 Απρ 2010 13:42

Μπορείς να συνδυάσεις τα δύο παραπάνω. Να κάνεις κάποια figures (παράθυρα) και μετά να αλλάζεις μόνο το περιεχόμενο τους. Δηλαδή:

Κώδικας: Επιλογή όλων

img=imread('DataSet/testing/F.000010.bmp');

% κάνε τα figures που θα χρειαστείς. το όνομα στα αριστερα είναι το handler
% της figure (πως την αναγνωρίζει η Matlab) - το όνομα στην παρένθεση είναι
% το όνομα του παραθύρου.

prwtiFigure = figure('Name', ' Colored');
defteriFigure = figure('Name', 'Grayscale ');
tritiFIgure = figure('Name', 'All together ');

% τώρα κάθε φορά πουθέλεις να κάνεις plot ή imshow, δεν έχεις παρα να
% διαλέξεις σε ποια figure to θέλεις. Κάνεις την figure που θέλεις
% ενεργή/τρέχουσα (τώρα τρέχουσα είναι η tritiFIgure, αφού ήταν η τελευταία
% εντολή).

figure(defteriFigure);

% Και την γεμίζεις ό,τι θέλεις.

imshow(img);

% τώρα μπορείς να σώσεις πχ με saveas

% Έπειτα επιλέγεις μία άλλη figure για να βάλεις κάτι άλλο.

figure(prwtiFigure);

a = subplot(2,2,1); 
    imshow(img);

% Η defteriFigure θα παραμείνει ανοικτή (το παράθυρο) καθώς κ ό,τι έχει
% μέσα. Η prwtiFigure που ήταν άδεια, θα γεμίσει μόνο το αριστερα κ πανω
% τμήμα της (subplot). τώρα μπορείς να γεμίσεις πχ την tritiFIgure ή να
% συμπληρώσεις σε κάποιο σημείο της prwtiFigure:

a = subplot(2,2,2); 
    imshow(img2);

% ///////////////////////////////////////////////////////////
% για να αδειάσεις μία figure καλείς κλασικά την clf ΑΦΟΥ ΕΠΙΛΈΞΕΙΣ την
% figure που θέλεις να 'καθαρίσεις'.

figure(defteriFigure);
clf;

 % και μετά μπορείς να την γεμίσεις με ό,τι θέλεις. Έτσι δεν θα ανοίξουν
 % πολλά παράθυρα και επισης μπορείς να χρησιμοποιήσεις το saveas όπου
 % θέλεις. τις παραπάνω εντολές μπορείς να τις τρέξεις κ σαν scriptάκι,
 % ώστε να περάσεις 'γρήγορα' κ αυτόματα τις πολλές εικόνες που θα έχεις.
xm.. κάντα copy-paste στη matlab γιατι δεν ξεχωρίζουν τα comments.

Συνοπτικά μπορείς ανεξάρτητα να δημιουργήσεις όσα figure θέλεις. Και να κάνεις ενεργό κάθε φορά όποιο θέλεις προκειμένου να plotάρεις μέσα σε αυτό κ μετά να σώσεις. Ωραία κ αυτόματα. (μετά απο το savas κάνεις και clf οπότε είναι έτοιμη για τα επόμενα data!)
Procrastinating...

katerinaaa
Δημοσιεύσεις: 109
Εγγραφή: 28 Ιαν 2010 12:46

Πρόβλημα εμφάνισης figures σε Matlab

Δημοσίευση από katerinaaa » 17 Απρ 2010 14:54

Ευχαριστώ πάρα πάρα πολύ για όλα !

just_steve
Δημοσιεύσεις: 11
Εγγραφή: 18 Μαρ 2010 22:54

Πρόβλημα εμφάνισης figures σε Matlab

Δημοσίευση από just_steve » 17 Απρ 2010 15:08

Anytime.
Procrastinating...

Απάντηση

Επιστροφή στο “γλώσσες προγραμματισμού - γενικά”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες