Acesso à matriz para iniciantes no MATLAB
-
20-12-2019 - |
Pergunta
Primeiro, nem tenho certeza se isso se chama matriz e sou novo no MATLAB.Mas digamos que eu tenha uma "matriz" parecida com esta:
for n=1:10
...
someImage = mat(:,:,n) %The "matrix"
...
end
onde n
podem ser os frames de um vídeo, por exemplo, e os 2 primeiros ':'
são os dados de linha e coluna da imagem 2D (o quadro).
Se eu quisesse apenas o primeiro ':'
de dados (a linha?coluna?elemento?), como eu acessaria apenas isso?
Intuitivamente, penso algo como:
row1 = mat(:,0,0)
row2 = mat(0,:,0)
row3 = mat(0,0,:)
mas isso não parece estar funcionando.
P.S.Eu sei que estas não são realmente linhas, a terminologia para tudo isso também seria muito apreciada
Além disso, pode não ter nada a ver com isso, mas também estou usando uma GUI do MATLAB, e a "matriz" é armazenada assim:
handles.mat(:,:,n)
Não acho que tenha algo a ver com a minha pergunta real, mas pode ser que vou colocá-la aqui
-Obrigado!
Solução
Um ponto que gostaria de salientar antes de começar:MATLAB inicia a indexação em 1, e não 0.Este é um erro comum que a maioria das pessoas com experiência em programação C/Java/Python comete ao entrar no MATLAB.
Além disso, fazendo:
row1 = mat(:,1,1);
Isso acessa todas as linhas da primeira coluna e do primeiro quadro do seu vídeo.Esteja ciente de que isso produzirá um M x 1
vetor, onde M
denota o número de linhas de um quadro em seu vídeo.
Também:
row2 = mat(1,:,1);
Isso acessa todas as colunas na primeira linha do primeiro quadro.Esteja ciente de que isso produzirá um 1 x N
vetor, onde N
denota o número de colunas de um quadro em seu vídeo.
Também:
row3 = mat(1,1,:);
Isso acessa todos os pixels no inteiro sequência de vídeo na linha 1 e coluna 1.Você pode pensar nisso como uma fatia temporal no canto superior esquerdo da sua sequência de vídeo.Esteja ciente de que isso produzirá um 1 x 1 x T
vetor, onde T
é o número de frames do seu vídeo.Se você acessar apenas a localização de um único pixel em seu vídeo, as duas primeiras dimensões serão supérfluas e, portanto, você poderá usar o squeeze
comando para reduzir todas as dimensões singleton para que simplifique para um T x 1
vetor.Em outras palavras, faça isso:
row3 = squeeze(mat(1,1,:));
FWIW, você tem a terminologia correta.Linhas e colunas são usadas no processamento de imagem/vídeo o tempo todo.Quanto à "matriz", você pode chamá-la de Sequência temporal ou um sequência de quadros em termos de processamento de vídeo.Certamente é uma matriz 3D, mas as pessoas neste domínio a denotam como uma das duas, pois é na verdade uma sequência de imagens/quadros empilhados uns sobre os outros.