Arrays Matlab从多维数组访问向量

Arrays Matlab从多维数组访问向量,arrays,image,matlab,matrix,vectorization,Arrays,Image,Matlab,Matrix,Vectorization,我有一个大小为300x200x3x20的4D矩阵,其中300x200是一个视频帧的大小,3是通道数(红-绿-蓝通道),20是帧数 我想从这个矩阵中提取所有颜色向量,并将它们存储在大小为3x1200000(300 x 200 x 20=1200000)的2D数组中,其中每行表示RGB颜色空间的一个组件,每列包含原始矩阵中一个像素的RGB值 此外,我想对这些数据执行像素级操作,例如提取视觉特征,但我找不到有效访问三维向量的方法 在不使用循环的情况下,我如何有效地执行这些操作?帮助重塑说: B=整形(

我有一个大小为300x200x3x20的4D矩阵,其中300x200是一个视频帧的大小,3是通道数(红-绿-蓝通道),20是帧数

  • 我想从这个矩阵中提取所有颜色向量,并将它们存储在大小为3x1200000(300 x 200 x 20=1200000)的2D数组中,其中每行表示RGB颜色空间的一个组件,每列包含原始矩阵中一个像素的RGB值

  • 此外,我想对这些数据执行像素级操作,例如提取视觉特征,但我找不到有效访问三维向量的方法


  • 在不使用循环的情况下,我如何有效地执行这些操作?

    帮助重塑说: B=整形(A,m,n,p…)或B=整形(A,[m n p…])返回一个n维数组,该数组的元素与A相同,但经过整形后大小为m-by-n-by-p-by-。。。。指定尺寸的乘积m*n*p*..必须与numel(A)相同

    这就是你要找的吗

    此外,您还可以这样处理像素:
    矩阵(i,j,:,k)
    它为您提供了帧k中像素i,j的3个颜色通道。

    试试这段代码-

    IN = your_4D_data;
    OUT = reshape(permute(IN,[3 1 2 4]),3,numel(IN)/3);
    

    重塑()似乎不起作用,因为它首先逐列遍历矩阵,即从第二维度提取向量,而我需要的是它沿着第三维度进行。您也可以使用它来解决这一问题。我希望对矩阵第三维度中的所有RGB向量执行相同的操作。不需要访问每个单独的像素。请指定“沿三维有效访问向量”是什么意思,有效我指的是不使用循环。至于第三维度,它是像素颜色向量所在的位置。ben建议的shiftdim()和permute()之间有什么区别吗?假设两者可以达到相同的效果?shiftdim主要用于“挤压”维度,若其中一个是1。PERMUTE重新排列输入的维度,使它们按照向量顺序作为第二个参数指定的顺序排列。关于这些的官方文档可能会帮助您更好地了解它们,以及为什么您需要PERMUTE。所以,它们是两个完全不同的东西。