matlab - MATLAB 中的矩阵访问初学者

标签 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,:)

但这似乎不起作用。

附注我知道这些并不是真正的行,所有这些的术语也将不胜感激

另外,它可能与此无关,但我也使用 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/

相关文章:

matlab - 当 RAM 已满时中止 MATLAB 代码

python - 如何在Python中检查列表/矩阵中的所有项目是否不同

java - 透视图/变换矩阵

matlab - 如何在 MATLAB 中将鼠标光标转换为加载

matlab - Matlab 中包含未知常数的矩阵的简化行阶梯

performance - 在matlab中对矩阵元素求和的有效(最快)方法

matlab - 计算 3d 结构中的中心线

c++ - C++ 中用于打印由各种技术创建的二维整数数组的通用函数

使用 GUIDE : Want to dynamically update graphs 的 Matlab GUI

Matlab >>连接矩阵的维数不一致