我有一个尺寸为300x200x3x20的4D矩阵,其中300x200是一个视频帧的大小,3是通道数(红 - 绿 - 蓝通道),20是帧数。
我想从这个矩阵中提取所有颜色向量,并将它们存储在大小为3x1,200,000(300 x 200 x 20 = 1,200,000)的2D数组中,其中每一行代表RGB颜色空间的一个组成部分。每列包含原始矩阵中一个像素的RGB值。
此外,我想对这些数据进行按像素操作,例如提取视觉特征,但我找不到有效访问第三维矢量的方法。
如何在不使用循环的情况下有效地执行这些操作?
答案 0 :(得分:2)
试试这段代码 -
IN = your_4D_data;
OUT = reshape(permute(IN,[3 1 2 4]),3,numel(IN)/3);
答案 1 :(得分:1)
help reshape
说:
B =重塑(A,m,n,p,...)或B =重塑(A,[mnp ...])返回一个n维数组,其元素与A相同,但重新形状为大小为m- by-n-by-p-by -....指定尺寸的乘积m * n * p * ...必须与数字(A)相同。
这就是你要找的东西吗?
另外,您可以按下这样的像素:Matrix(i,j,:,k)
,它为您提供第k帧中像素i,j的3个颜色系列。