MATLAB中的初学者矩阵访问

时间:2014-06-03 06:35:30

标签: matlab matrix matlab-guide

现在首先,我甚至不确定这被称为矩阵,我是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!

1 个答案:

答案 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矩阵,但是这个领域的人们将它表示为两者之一,因为它实际上是一系列图像/帧堆叠在一起。