现在首先,我甚至不确定这被称为矩阵,我是MATLAB的新手。但是,假设我有一个看起来像这样的“矩阵”:
for n=1:10
...
someImage = mat(:,:,n) %The "matrix"
...
end
例如,n
可以是视频中的帧,前2 ':'
是2D图像(帧)的行和列数据。
如果我只想要第一个':'
数据(行?列?元素?),我该如何只访问它?
直观地说,我认为如下:
row1 = mat(:,0,0)
row2 = mat(0,:,0)
row3 = mat(0,0,:)
但这似乎不起作用。
P.S。我知道这些不是真正的行,所有这些的术语也将非常受欢迎
此外,它可能与此无关,但我也使用MATLAB GUI,“矩阵”存储如下:
handles.mat(:,:,n)
我认为这与我的实际问题没有任何关系,但我可能会把它放在这里
-Thanks!
答案 0 :(得分:3)
我想在开始之前提出一点:MATLAB在 1 开始索引,而不是 0 。这是一个常见的错误,大多数具有C / Java / Python编程背景的人都会进入MATLAB。
此外,通过:
row1 = mat(:,1,1);
这将访问视频第一列和第一帧的所有行。请注意,这会生成M x 1
向量,其中M
表示视频中某帧的行数。
另外:
row2 = mat(1,:,1);
这将访问第一帧第一行中的所有列。请注意,这会产生1 x N
向量,其中N
表示视频中某帧的列数。
此外:
row3 = mat(1,1,:);
这将访问第1行和第1列的整个视频序列中的所有像素。您可以将其视为视频序列左上角的时间切片。请注意,这会产生1 x 1 x T
向量,其中T
是视频中的帧数。如果您只访问视频中的单个像素位置,则前两个维度是多余的,因此您可以使用squeeze
命令缩小所有单例维度,以便将其简化为T x 1
向量。换句话说,这样做:
row3 = squeeze(mat(1,1,:));
FWIW,你有正确的术语。行和列始终用于图像/视频处理。至于“矩阵”,您可以在视频处理方面将其称为时间序列或帧序列。它当然是一个3D矩阵,但是这个领域的人们将它表示为两者之一,因为它实际上是一系列图像/帧堆叠在一起。