将8位数的(m×n×p)矩阵(图像)与24位数的(m×n)矩阵组合,反之亦然

时间:2015-08-31 03:09:00

标签: matlab binary

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

但是,对于分析,必须将三个8位值组合以获得24位值,并且对24位值的(m x n)矩阵进行分析。

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

我现在在做什么:

  • 迭代矩阵中的所有值
  • 将每个十进制值转换为二进制(使用dec2bin
  • 将三个二进制值组合在一起以获得24位数字(使用strcatbin2dec

代码:

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×n)个值。

问题是计算时间很长。

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

1 个答案:

答案 0 :(得分:2)

虽然我不明白为什么你要结合" 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);