首先,我什至不确定这是否称为矩阵,而且我是 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,:)
但这似乎不起作用。
附注我知道这些并不是真正的行,所有这些的术语也将不胜感激
另外,它可能与此无关,但我也使用 MATLAB GUI,并且“矩阵”存储如下:
handles.mat(:,:,n)
我认为这与我的实际问题没有任何关系,但可能所以我将其放在这里
-谢谢!
最佳答案
在开始之前我想先说明一点: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 矩阵,但该领域的人们将其表示为两者之一,因为它实际上是彼此堆叠的图像/帧序列。
关于matlab - MATLAB 中的矩阵访问初学者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24008541/