将 8 位数的 (m x n x p) 矩阵(图像)合并为 24 位数的 (m x n) 矩阵,反之亦然

Combine a (m x n x p) matrix (image) of 8 bit numbers to a (m x n) matrix of 24 bit numbers and vice versa

假设有一个 (m x n x p) 的矩阵,尤其是。具有 R G 和 B 通道的彩色图像。每个通道信息都是8位整数。

但是,为了进行分析,必须将三个 8 位值组合起来以获得 24 位值,并且分析是在 24 位值的 (m x n) 矩阵上完成的。

分析后,矩阵必须分解回三个8位通道以显示结果。

我现在在做什么:

代码:

for i=1:m for j=1:n new_img(i,j) = bin2dec(strcat(... sprintf('%.8d',str2double(dec2bin(img(i,j,1)))), ... sprintf('%.8d',str2double(dec2bin(img(i,j,2)))), ... sprintf('%.8d',str2double(dec2bin(img(i,j,3)))))); end end

为了在分析后分解回三个 8 位,执行完全相反的过程,仍然迭代 (m x n) 个值。

问题是计算时间过长。

我知道这不是正确的做法。有没有我可以做的矩阵运算来实现这一点,以便快速完成计算?

虽然我不明白你为什么要这样 "combine" rgb 平面,但这将让你在一个命令中找到你正在寻找的东西。

a = bitshift(img(:,:,1),16)+...
     bitshift(img(:,:,2,8)+...
     img(:,:,3);

要反转过程,除了向右移回之外还需要二进制掩码。

A=zeros(size(img));
A(:,:,1)=bitshift(a,-16);
A(:,:,2)=bitshift(bitand(a,2^16-2^8),-8);
A(:,:,3)=bitand(a,2^8-2^0);