Matlab:3 uint8&到两个12位数

时间:2015-07-24 17:53:15

标签: matlab frame-grab

我有一个帧抓取器,它返回R,G,B矩阵(所以,X,Y,{R,G,B})

但我需要将数据切分为2个12位向量;我不确定如何快速完成这项工作(将所有内容转换为字符串非常糟糕)。

如果有人可以帮助我,我会很感激;谢谢大家!

[编辑]这就是我的意思: 我有一个数据对象是4-D - X,Y,RGB,FrameNumber。

例如,如果我这样做: 数据(1,1,1,1),我得到第1行,第1列,红色通道,第1帧。

问题是我的相机是红外线,实际上吐了2个12位数字(它完全是自定义的)。所以我需要这样做: 数据(1,1,1,1),数据(1,1,2,1),数据(1,1,3,1),连接它们,并返回给用户2x12位数。

使用字符串:

data(1,1,1,1) = 0x40
data(1,1,2,1) = 0x37
data(1,1,3,1) = 0x4F

Concatentation给了我:

0x40374F

对于此像素,我需要返回给用户: [403,74F]

[关于我的例子的道歉:我试图在matlab中快速提出一个4D矩阵,而且我已经使用它已经很久了,我需要一段时间来弄明白它实际上看起来像构建它!]

1 个答案:

答案 0 :(得分:0)

也许这就是你要找的东西。我假设基础数据是十进制的,而不是字符串,反过来你的输出是十进制数,而不是字符串。

data(1,1,1,1)=hex2dec('40');
data(1,1,2,1)=hex2dec('37');
data(1,1,3,1)=hex2dec('4F');

%convert three numbers to one large one
x=[256^2 256 1]*squeeze(data(1,1,:,1));
%split it in two
out(1)=floor(x/4096);
out(2)=x-out(1)*4096;

%check
fprintf('upper 12 bits in hex: %s\n',dec2hex(out(1)));
fprintf('lower 12 bits in hex: %s\n',dec2hex(out(2)));