Matlab MeanSquareError μεταξύ πινάκων διαφορετικού μεγέθου??

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

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

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

Matlab MeanSquareError μεταξύ πινάκων διαφορετικού μεγέθου??

Δημοσίευση από katerinaaa » 08 Ιουν 2010 20:08

Γεια σας,
έχω 1 αρχείο mat το οποίο αντιπροσωπεύει μια εικόνα.
Όταν κάνω load εμφανίζεται ένας πίνακας με όνομα Rose του οποίου οι διαστάσεις είναι 256*256*3 uint8

Συμπιέζω αυτή την εικόνα με διάφορα έτοιμα αρχεία και προκύπτει μια εικόνα 256*256.


Μετά μου ζητείται να βρω το μέσο τετραγωνικό σφάλμα.
Οπότε, ο κώδικάς μου είναι :

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

main.m
[MseRose4]  = MseCompute(Rose,indexedRose4);

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

MseCompute.m
function [MSE] = MseCompute(image1,image2)
   MSE = sum( sum((image1 - image2).^2));
   MSE = MSE/(size(image1, 1)* size(image2, 2));
end

Rose --> 256*256*3uint8
indexedRose4 --> 256*256

To error που παίρνω είναι :
MSE = sum( sum((Rose - indexedRose4).^2));
??? Error using ==> minus
Integers can only be combined with integers of the same class, or scalar doubles.


Ξέρει κανείς πως μπορώ να λύσω το πρόβλημά μου ?
Ευχαριστώ εκ των προτέρων

nbc
Honorary Member
Δημοσιεύσεις: 526
Εγγραφή: 05 Σεπ 2009 20:12
Επικοινωνία:

Matlab MeanSquareError μεταξύ πινάκων διαφορετικού μεγέθου??

Δημοσίευση από nbc » 08 Ιουν 2010 20:36

Το πρόβλημά σου είναι η τελεία πριν το ^2

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

Matlab MeanSquareError μεταξύ πινάκων διαφορετικού μεγέθου??

Δημοσίευση από katerinaaa » 08 Ιουν 2010 20:46

nbc έγραψε:Το πρόβλημά σου είναι η τελεία πριν το ^2
Δεν είναι η τελεία το πρόβλημα. Υπάρχει γενικά στο συντακτικό της matlab.
Ευχαριστώ πάντως για την προσπάθεια

nbc
Honorary Member
Δημοσιεύσεις: 526
Εγγραφή: 05 Σεπ 2009 20:12
Επικοινωνία:

Matlab MeanSquareError μεταξύ πινάκων διαφορετικού μεγέθου??

Δημοσίευση από nbc » 08 Ιουν 2010 22:19

Έχεις δίκιο, sorry, άλλα κοιτούσα και άλλα σκεφτόμουν... :oops:

Σύμφωνα με το error message, παραπονιέται γιατί τα στοιχεία των πινάκων που αφαιρείς δεν είναι του ίδιου τύπου. Η Rose, όπως γράφεις, είναι uint8. Η indexedRose4 θα είναι κάτι άλλο, πιθανώς, double (ο default τύπος).

Μπορείς να δεις τον τύπο με τη whos, πχ, >> whos Rose

Δοκίμασε αν με casting λειτουργεί:

double(image1) - double(image2)

ή φρόντισε τα στοιχεία να είναι έχουν τον ίδιο τύπο.

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

Matlab MeanSquareError μεταξύ πινάκων διαφορετικού μεγέθου??

Δημοσίευση από katerinaaa » 08 Ιουν 2010 22:37

Πρέπει να είναι θέμα διαστάσεων.

Ο πίνακας Rose έχει διαστάσεις --> 256*256*3
και ο indexedRose --> 256*256

indexedRose =
1 1 1 2 1 1 1 .....
3 4 4 3 2 1 1 ......
.........................


Οπότε, εξαιτίας διαφορετικών διαστάσεων δε μπορεί να γίνει η αφαίρεση.

Αυτό που ήθελα να πω είναι αν διαθέτω και έναν πίνακα έστω Α στον οποίο δείχνει το indexed και αντιπροσωπεύει τιμές RGB.
Δηλαδή,

Α = 54 64 13
34 22 12
11 21 23

Διαστάσεις Α = 4*3


Ουσιαστικά πως μπορώ τον indexedRose να τον κάνω να γράφει
54 64 13
54 64 13
54 64 13
34 22 12
.....

nbc
Honorary Member
Δημοσιεύσεις: 526
Εγγραφή: 05 Σεπ 2009 20:12
Επικοινωνία:

Matlab MeanSquareError μεταξύ πινάκων διαφορετικού μεγέθου??

Δημοσίευση από nbc » 09 Ιουν 2010 11:16

Οι διαστάσεις των πινάκων είναι ένα άλλο θέμα για το οποίο όμως υπάρχει διακριτό error message. Πιθανώς, αν λύσεις το ζήτημα του data type, να σου του βγάλει. Δεν θυμάμαι αν είναι εφικτή η αφαίρεση πινάκων με διαφορετικές διαστάσεις αλλά και να είναι δεν ξέρω το αποτέλεσμα σε τι εξυπηρετεί.

Για να είμαι ειλικρινής, δεν έχω καταλάβει τι προσπαθείς να κάνεις... Δηλαδή, βλέπω ότι αφαιρείς ένα indexed image από ένα true color αλλά αδυνατώ να κατανοήσω τη χρησιμότητα του αποτελέσματος, αν υποθέσουμε ότι η πράξη εκτελείται. Πιθανώς, αν γνώριζα πως προέκυψαν οι πίνακες να καταλάβαινα. Στεκόμενος, όμως, στο ότι προσπαθείς να υπολογίσεις το MSE (Mean Square Error), νομίζω πως πρέπει να μετατρέψεις την indexed σε RGB ή την RGB σε indexed με ίδιο colormap. Δεδομένου ότι ο αλγόριθμος θέλει την αφαίρεση των pixels που έχουν μετασχηματιστεί (είτε λόγω compression είτε από κάποιο linear filter) από τα αρχικά.

Σε αυτήν την περίπτωση, δηλαδή εφόσον η indexedRose4 αφορά μετασχηματισμό της Rose, νομίζω πως πρέπει να κάνεις χρήση της ind2rgb(indexedRose4, cmap) (ή της αντίστροφης rgb2ind που φαντάζομαι την έχεις ήδη χρησιμοποιήσει). Έτσι, λύνεις και το διαστασιακό και το data type και την ουσία του MSE. Αν κάνω λάθος, συμπάθα με... Πάνε χρόνια που τα έχω αφήσει και έχω σκουριάσει :D

Απάντηση

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

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

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