将uint32s分解为大矩阵中的uint8s

时间:2015-03-12 21:17:32

标签: image matlab matrix

对于我正在进行的项目,我正在加载大型图像文件,Matlab将其输入为ux8的LxWx3阵列。我有一个函数将这些组件连接到uint32s的LxWx1数组中,但是我无法在不使用嵌套for循环的情况下找到相反的方法,这对我正在使用的矩阵来说太慢了。

有人能推荐一种方法来有效地完成这项工作吗?基本上,给定一个Ux32的LxW矩阵,我想返回一个ux8的LxWx3矩阵,其中(x,y,1:3)分量是相应uint32中三个最重要的字节。

1 个答案:

答案 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