1

R、G、B 行列を返すフレーム グラバーがあります (つまり、X、Y、{R、G、B})

しかし、データを 2 つの 12 ビット ベクトルに分割する必要があります。これをすばやく行う方法がわかりません(すべてを文字列に変換するのはひどいです)。

誰かが私を助けてくれたら、ありがたいです。皆さんありがとう!

[編集] これが私が言いたいことです: X、Y、RGB、FrameNumber の 4 次元のデータ オブジェクトがあります。

たとえば、data(1,1,1,1) とすると、1 行目、1 列目、赤チャンネル、フレーム 1 が得られます。

問題は、私のカメラが赤外線で、実際に 2 つの 12 ビットの数値を吐き出していることです (完全にカスタムです)。だから私はこれを取る必要があります: data(1,1,1,1),data(1,1,2,1),data(1,1,3,1), それらを連結し、ユーザーに返す 2x12 ビット数字。

文字列の場合:

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

連結は私に与えます:

0x40374F

このピクセルについては、ユーザーに戻る必要があります: [403,74F]

[私の例についてのお詫び: matlab で 4D 行列をすぐに考え出そうとしましたが、それを使用してからかなり時間が経っているため、実際にどのように構築されているかを理解するのに時間がかかります!]

4

1 に答える 1

0

多分これはあなたが探しているものです。基になるデータは文字列ではなく 10 進数であり、出力は文字列ではなく 10 進数であると想定しています。

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)));
于 2015-07-24T19:50:10.923 に答える