Ciclo parfor, max di una matrice

di il
3 risposte

Ciclo parfor, max di una matrice

Buogiorno a tutti,
ho ho in problema con l'utilizzo del ciclo parfor.
Vi riassumo velocemente di cosa si tratta.
Sto tentando di studiare in matlab una serie di immagini termiche con lo scopo di plottare l'andamento della temperature massima nel tempo di determinate aree dell'immagine.
Ho a disposizione 865 frame, ognuno di questi viene rappresentato con una matrice 512x640 (pixels).
Data la quantita' di tempo richiesto per gestire tutte queste immagini con in ciclo for, ho potato per l'utilizzo di in ciclo parfor.
Con il mio codice, ad ora, e' possibile selezionare la parte di imagine desiderata e plottarne l' andamento della temperature massima rispetto al tempo (ai frame). Cio' che vorrei fare ad ora e' trovare la posizione del pixel con la temperature massima per ogni istante. Sto usando il seguente ragionamento:

A=matr; %singolo frame
maximum=max(max(A)); %trovo la massima temperatura in un frame
[x,y]=find(A==maximum); % mi restituisce le coordinate di dove e' stato individuate il valore max di temperatura

dato che dovrei fare cio' per ogni frame (istante) devo inserire questo ragionamento nel ciclo parfor, ma ci deve essere qualche problema con la sintassi con cui ho tentato di implementare questo ragionamento.
Ho provato:

parfor kk = 1:MaxNumMAT
%...parte di load dei 865 frame...%
MaxT(kk) = max(max(VideoIR{kk}.DataTemp(x14:x24,y14:y24))); % la sottocartella DataTemp e' la nostra matrice A
%x14,x24,y14,y24 sono le coordinate della sezione di imagine che si vuole studiare
[x(kk),y(kk)]=find(VideoIR{kk}.DataTemp(x14:x24,y14:y24)==MaxT(kk))
end

Questo da' errore: "Undefined function or variable 'kk'." anche se uso le parentesi grafe maxT{kk}.
Spero che qualcuno sia in grado di aiutarmi!!

3 Risposte

  • Re: Ciclo parfor, max di una matrice

    In quale riga del codice viene generato il messaggio di errore?
    Hai provato ad eseguire il programma in modalità debug ed a verificare il contenuto delle variabili?
  • Re: Ciclo parfor, max di una matrice

    Il messaggio errore e' riferito alla riga:
    [x(kk),y(kk)]=find(VideoIR{kk}.DataTemp(x14:x24,y14:y24)==MaxT(kk))
    non capisco perche' non riconosca kk che e' l'indice del ciclo parfor.
  • Re: Ciclo parfor, max di una matrice

    Sono riuscita a ridurre il problema studiando solo i picchi della temperature, quindi ora dovrei riuscire ad implementare il ragionamento:

    A=matr; %singolo frame
    maximum=max(max(A)); %trovo la massima temperatura in un frame
    [x,y]=find(A==maximum); % mi restituisce le coordinate di dove e' stato individuate il valore max di temperature

    con un semplice ciclo for.
    La scrittura:

    for kk=1:num_peak
    %...load matrici...%
    mx(kk) = max(max(AllDatatemp1(x14:x24,y14:y24,kk))); %vettore delle temperature solo delle matrici collegate ad un istante in cui si ha un picco
    [p(kk),q(kk)]=find(AllDatatemp1(x14:x24,y14:y24,kk)==mx(kk)); %posizione x,y di tali punti in ogni frame
    end

    da errore nell' ultima riga di codice 'Unable to perform assignment because the left and right sides have a different number of elements.'
    Come dovrei scrivere gli indici dell'ultima riga?
Devi accedere o registrarti per scrivere nel forum
3 risposte