如何在MATLAB中转换RGB565和RGB24图像格式?

时间:2010-08-26 18:28:51

标签: image matlab rgb image-manipulation image-formats

我从微处理器获取RGB矩阵,输出RGB565格式的图像。我想将其读入MATLAB,将其转换为RGB24格式,然后输出图像。我该怎么做?

2 个答案:

答案 0 :(得分:9)

首先必须将文本文件中的数据读入MATLAB中的矩阵。由于我不知道您的文本文件的格式,我只能建议您可能需要使用函数fscanf来读取所有值(可能是类型uint16),那么您可能需要使用函数reshape将值重塑为N-by-M图像矩阵。

假设你已经完成了所有这些,现在你有一个N-by-M矩阵img无符号16位整数。首先,您可以使用函数bitand来提取红色,绿色和蓝色分量的位,这些位在16位整数中的位置如下所示:

alt text

接下来,您可以使用函数bitshift并乘以比例因子将红色,绿色和蓝色值缩放到0到25​​5的范围,然后使用它们将它们转换为无符号的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图像矩阵中,然后使用函数{{3将图像保存为RGB24位图文件}}:

imgRGB = cat(3, imgR, imgG, imgB);  % Concatenate along the third dimension
imwrite(imgRGB, 'myImage.bmp');     % Output the image to a file

示例:

使用随机生成的100 x 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

答案 1 :(得分:2)

RGB565表示5位红色,6位绿色和5位蓝色。 RGB24由8位红色,8位绿色和8位蓝色组成。

使用bitget和bitset可以转换数据。

http://www.mathworks.de/access/helpdesk/help/techdoc/ref/bitget.html