image - 将大矩阵中的 int32 分解为 int8

标签 image matlab matrix

对于我正在从事的一个项目,我正在加载大型图像文件,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/

相关文章:

c++ - DirectX 转换不工作

ruby-on-rails - 如何制作 Rails Assets 管道 Gzip 图像

javascript - 背景图像水平拉伸(stretch)

javascript - 使用 JavaScript 动态编辑 Base64 编码图像

matlab - 在matlab中删除3d矩阵中所有全0行

arrays - 矢量化- Matlab

php - 方形缩略图前进

matlab - 将唯一元素的索引存储在矩阵中

ruby - 如何求和两个矩阵?

python - 使用 numpy 将数组元素添加到矩阵的每一列