将图像阵列重新整形为列向量,逐行对每个图像进行排序

时间:2015-03-02 21:11:03

标签: image matlab matrix reshape permute

亲爱的Matlab专家,您好

我有一系列图像,让我们说一个2乘3的图像网格(6幅图像)。每张图像的分辨率为4 x 4(为简单起见)。让我们说图像是灰度的。

我将图像加载到尺寸为2 x 3 x 4 x 4的4D矩阵中。现在我想创建一个带有条目的列向量

1:图像1,1中第一行的第一个像素

2:图像1,1中第一行的第二个像素

3:......

16:图像1,1中最后一行的最后一个像素

17:图像2,1中第一行的第一个像素,1

...

等等模式。我可以使用一堆for循环成功创建它:

for imageX = 1 : resolution(2)
   for imageY = 1 : resolution(1)
      for pixelX = 1 : resolution(4)
         for pixelY = 1 : resolution(3)

               % linear index for 4D indices
               row = ((imageY - 1) * resolution(2) + imageX - 1) * resolution(3) * resolution(4) + ...
                   (pixelY - 1) * resolution(4) + pixelX;

               lightFieldVector(row) = lightField(imageY, imageX, pixelY, pixelX);
         end
      end
   end
end

我想知道这些丑陋的循环是否可以被一些reshapepermute操作取代。我想是这样,但我找不到合适的订单。我使用这些方法几次,但只使用2D矩阵。从文档中我可以得出结论,重塑将首先排在第一列,所以这将是我需要的相反。

感谢您的帮助, 阿德里安

1 个答案:

答案 0 :(得分:4)

这应该是正确的顺序 -

lightFieldVector = reshape(permute(lightField,[4 3 2 1]),[],1)

这里的整个过程是关于在MATLAB中了解linear indexingpermute


相反的过程 -

R = resolution
lightField = permute(reshape(lightFieldVector,R(4),R(3),R(2),R(1)),[4 3 2 1])