对于我正在进行的项目,我正在加载大型图像文件,Matlab将其输入为ux8的LxWx3阵列。我有一个函数将这些组件连接到uint32s的LxWx1数组中,但是我无法在不使用嵌套for循环的情况下找到相反的方法,这对我正在使用的矩阵来说太慢了。
有人能推荐一种方法来有效地完成这项工作吗?基本上,给定一个Ux32的LxW矩阵,我想返回一个ux8的LxWx3矩阵,其中(x,y,1:3)分量是相应uint32中三个最重要的字节。
答案 0 :(得分:2)
您可以使用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);
示例:for 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