Matlab: от 3 uint8 до двух 12-битных чисел

У меня есть фрейм-граббер, который возвращает матрицы R, G, B (Итак, X, Y, {R,G,B})

Но мне нужно разделить данные на 2 12 битных векторов; Я не уверен, как это сделать быстро (конвертировать все в строки ужасно).

Если бы кто-то мог мне помочь, я был бы признателен; Спасибо всем!

[Edit] вот что я имею в виду: у меня есть объект данных, который 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

Конкатенация дает мне:

0x40374F

Мне нужно вернуться к пользователю, для этого пикселя: [403,74F]

[Извинение за мой пример: я пытался быстро придумать матрицу 4D в Matlab, и я так долго ее использовал, что мне понадобится время, чтобы понять, как это выглядит на самом деле!]

1 ответ

Может быть, это то, что вы ищете. Я предполагаю, что лежащие в основе данные являются десятичными, а не строкой, и, в свою очередь, ваши выходные данные представляют собой десятичное число, а не строку.

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)));
Другие вопросы по тегам