将图像数组重塑为列向量,对每个图像逐行排序
Reshape array of images into a column vector, sorted row by row for each image
尊敬的 Matlab 专家,您好,
我有一个图像数组,比方说一个 2 x 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
...
依此类推。我可以用一堆 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
我想知道是否可以用一些 reshape
和 permute
操作来代替这堆丑陋的循环。我想是的,但我很难找到正确的顺序。我用过这些方法几次,但仅限于二维矩阵。从文档中我可以得出结论,重塑将进行 'column first',所以这与我需要的相反。
感谢您的帮助,
阿德里安
这应该是正确的顺序 -
lightFieldVector = reshape(permute(lightField,[4 3 2 1]),[],1)
这里的全剧都是关于linear indexing
and permute
在MATLAB中的了解。
逆过程-
R = resolution
lightField = permute(reshape(lightFieldVector,R(4),R(3),R(2),R(1)),[4 3 2 1])
尊敬的 Matlab 专家,您好,
我有一个图像数组,比方说一个 2 x 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
...
依此类推。我可以用一堆 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
我想知道是否可以用一些 reshape
和 permute
操作来代替这堆丑陋的循环。我想是的,但我很难找到正确的顺序。我用过这些方法几次,但仅限于二维矩阵。从文档中我可以得出结论,重塑将进行 'column first',所以这与我需要的相反。
感谢您的帮助, 阿德里安
这应该是正确的顺序 -
lightFieldVector = reshape(permute(lightField,[4 3 2 1]),[],1)
这里的全剧都是关于linear indexing
and permute
在MATLAB中的了解。
逆过程-
R = resolution
lightField = permute(reshape(lightFieldVector,R(4),R(3),R(2),R(1)),[4 3 2 1])