Как я могу конвертировать между форматами изображения RGB565 и RGB24 в MatLab?
-
01-10-2019 - |
Вопрос
Я получаю матрицу RGB из микропроцессора, который выводит изображение в формате RGB565. Я хочу прочитать это в MatLab, преобразуйте его в формат RGB24 и выведите изображение. Как мне это сделать?
Решение
Сначала вы должны прочитать ваши данные из текстового файла в матрицу в MatLab. Поскольку я не знаю, в каком формате ваш текстовый файл находится, я могу только предположить, что вам, вероятно, нужно будет использовать функцию fscanf
Чтобы прочитать во всех ваших ценностях (возможно, типа uint16
), тогда вам, вероятно, придется изменить значения в матрицу изображения N-BY-M, используя функцию reshape
.
Давайте предположим, что вы сделали все это, и теперь у вас есть матрица N-BY-M-M img
из неподписанных 16-битных целых чисел. Во-первых, вы можете использовать функцию bitand
Чтобы извлечь биты для красных, зеленых и синих компонентов, позиции которых в 16-битном целочислех поясятся здесь:
Далее вы можете использовать функцию bitshift
и умножение по шкале коэффициента для масштабирования красных, зеленых и синих значений в диапазоне от 0 до 255, затем преобразуйте их в беззнаковую 8-битное целое число с помощью функции uint8
. Отказ Это даст вам три цветных матрица компонентов одинакового размера, что и img
:
imgR = uint8((255/31).*bitshift(bitand(img, 63488), -11)); % Red component
imgG = uint8((255/63).*bitshift(bitand(img, 2016), -5)); % Green component
imgB = uint8((255/31).*bitand(img, 31)); % Blue component
Теперь вы можете использовать функцию cat
Чтобы поставить три цветных компонента в матрицу изображения N-BY-M-BY-3 RGB, а затем сохраните изображение в файл растровых изображений RGB24 с помощью функции imwrite
:
imgRGB = cat(3, imgR, imgG, imgB); % Concatenate along the third dimension
imwrite(imgRGB, 'myImage.bmp'); % Output the image to a file
ПРИМЕР:
Используя случайно генерируемую 100-минную матрицу значения UINT16 и применение вышеуказанных преобразований, вот результаты:
img = randi([0 65535], 100, 100, 'uint16');
% Perform the above conversions to get imgRGB
subplot(1, 2, 1);
imshow(img);
title('Random uint16 image');
subplot(1, 2, 2);
imshow(imgRGB);
title('Corresponding RGB image');
Другие советы
RGB565 означает 5 бит красный, 6 бит зеленый и 5-битный синий. RGB24 изготовлен из 8 бит-красных, 8-битных зеленых и 8-битных синий.
Используя Bitget и BitSet, вы можете преобразовать ваши данные.
http://www.mathworks.de/access/helpdesk/help/techdoc/ref/bitget.html.