对于我正在从事的一个项目,我正在加载大型图像文件,Matlab 将其输入为 uint8 的 LxWx3 数组。我有一个函数可以将这些组件按顺序连接到 uint32 的 LxWx1 数组中,但我无法找到一种方法来执行相反的操作而不使用嵌套 for 循环,这对于我正在使用的矩阵来说太慢了。 p>
有人可以推荐一种有效完成此任务的方法吗?基本上,给定一个 uint32 的 LxW 矩阵,我想返回一个 uint8 的 LxWx3 矩阵,其中 (x, y,1:3) 分量是相应 uint32 中的三个最高有效字节。
最佳答案
您可以使用 typecast
来做到这一点:
A = uint32([2^16 2^30; 256 513]);
B = permute(reshape(typecast(A(:), 'uint8'), [], size(A,1), size(A,2)), [2 3 1]);
B = flipdim(B, 3); %// flip 3rd dim to bring MSB first, if needed (depends on computer)
B = B(:,:,2:4);
示例:A = uint32([2^16 2^30; 256 513]);
A =
65536 1073741824
256 513
结果是
B(:,:,1) =
1 0
0 0
B(:,:,2) =
0 0
1 2
B(:,:,3) =
0 0
0 1
关于image - 将大矩阵中的 int32 分解为 int8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29020355/