Accesso alla matrice per principianti in Matlab
-
20-12-2019 - |
Domanda
Ora Prima di tutto, non sono nemmeno sicuro che questa sia chiamata matrice e sono nuovo a Matlab.Ma diciamo che ho una "matrice" che assomiglia a questo:
for n=1:10
...
someImage = mat(:,:,n) %The "matrix"
...
end
.
DOVE n
potrebbe essere i fotogrammi in un video, ad esempio, e i primi 2 ':'
sono i dati di riga e colonna per l'immagine 2D (il telaio).
Se volevo solo il primo ':'
dei dati (la riga? colonna? Elemento?), Come avrei accesso solo a questo?
intuitivamente, penso a qualcosa del genere:
row1 = mat(:,0,0)
row2 = mat(0,:,0)
row3 = mat(0,0,:)
.
Ma questo non sembra funzionare.
P.S.So che questi non sono realmente righe, la terminologia per tutto ciò sarebbe anche molto apprezzato
Inoltre, potrebbe non avere nulla a che fare con questo, ma sto usando anche una GUI Matlab e la "Matrice" è memorizzata come questa:
handles.mat(:,:,n)
.
Non penso che abbia qualcosa a che fare con la mia domanda reale, ma potrebbe quindi metterlo qui
-thanks!
Soluzione
Un punto che vorrei fare prima di iniziare: Matlab inizia ad indicizzare a 1 e non 0 . Questo è un errore comune che la maggior parte delle persone che hanno uno sfondo di programmazione C / Java / Python si avvicina a Matlab.
Inoltre, facendo:
row1 = mat(:,1,1);
.
Questo accede a tutte le righe per la prima colonna e il primo fotogramma del tuo video. Tieni presente che questo produrrà un vettore M x 1
, in cui M
denota il numero di righe per una cornice nel tuo video.
ANCHE:
row2 = mat(1,:,1);
.
Questo accede a tutte le colonne nella prima riga del primo fotogramma. Tieni presente che questo produrrà un vettore 1 x N
, in cui N
denota il numero di colonne per una cornice nel tuo video.
ANCHE:
row3 = mat(1,1,:);
.
Questo accede a tutti i pixel nell'intero Intero Sequenza video alla riga 1 e nella colonna 1. Puoi pensare a questo come una fetta temporale nell'angolo in alto a sinistra della sequenza video. Tieni presente che questo produrrà un vettore 1 x 1 x T
, in cui T
è il numero di fotogrammi nel tuo video. Se si accede a una posizione solo di un singolo pixel nel tuo video, le prime due dimensioni sono superflue e quindi è possibile utilizzare il comando squeeze
per ridurre tutte le dimensioni Singleton in modo che sia semplifica di un vettore T x 1
. In altre parole, fai questo:
row3 = squeeze(mat(1,1,:));
.
fwiw, hai la terminologia giusta. Le righe e le colonne sono utilizzate in elaborazione immagine / video tutto il tempo. Per quanto riguarda la "Matrice", puoi chiamare questa una sequenza temporale o una sequenza di frame in termini di elaborazione video. È certamente una matrice 3D, ma le persone in questo dominio lo indicano come uno dei due come è davvero una sequenza di immagini / fotogrammi impilati uno sopra l'altro.