【问题标题】:How can I convert between RGB565 and RGB24 image formats in MATLAB?如何在 MATLAB 中转换 RGB565 和 RGB24 图像格式?
【发布时间】:2011-04-04 10:39:19
【问题描述】:

我从一个微处理器中得到一个 RGB 矩阵,它以 RGB565 格式输出图像。我想将其读入 MATLAB,将其转换为 RGB24 格式,然后输出图像。我该怎么做?

【问题讨论】:

  • 您是否尝试过使用 IMREAD 将 RGB565 图像读入 MATLAB?执行此操作时,Xmap 会列出哪些信息?:[X,map] = imread('your_file.bmp'); whos
  • 没有file.bmp。这是来自 uP 的原始 RGB 值
  • 好的,那么您如何将这些值输入 MATLAB?如果您已经设法将它们放入变量中,那么该变量类型是什么?是 uint16 吗?
  • uP到底是什么,它是如何与Matlab通信的?
  • @Jonas:我相信它的意思是“微处理器”。

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


【解决方案1】:

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

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

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

【讨论】:

  • 所以一旦我将它转换为RGB24,我怎样才能让matlab将它显示为图像?
【解决方案2】:

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

假设你已经完成了所有这些,现在你有一个 N×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×M×3 RGB图像矩阵,然后使用函数imwrite将图像保存为RGB24位图文件:

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');

【讨论】:

  • 哇很好的答案!真的很有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多