Сначала вы должны прочитать ваши данные из текстового файла в матрицу в MATLAB.Поскольку я не знаю, в каком формате находится ваш текстовый файл, я могу только предположить, что вам, вероятно, понадобится использовать функцию fscanf
для чтения всех ваших значений (возможно, типа uint16
), тогда вам, вероятно, придется преобразовать значения в матрицу изображения N-by-M, используя функцию reshape
.
Предположим, высделали все это, и теперь у вас есть матрица N-by-M img
из 16-разрядных целых чисел без знака.Во-первых, вы можете использовать функцию bitand
, чтобы извлечь биты для красного, зеленого и синего компонентов, чьи позиции в 16-битном целом числе показаны здесь:
![alt text](https://i.stack.imgur.com/tn8CG.gif)
Далее вы можете использовать функцию 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-Матрица изображения RGB размером 3 на 3, затем сохраните изображение в файл растрового изображения RGB24, используя функцию imwrite
:
imgRGB = cat(3, imgR, imgG, imgB); % Concatenate along the third dimension
imwrite(imgRGB, 'myImage.bmp'); % Output the image to a file
ПРИМЕР:
Используя случайно сгенерированную матрицу 100 на 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');
![alt text](https://i.stack.imgur.com/LX3L1.png)