8位彩色图像矩阵表示

本人刚开始自学图像处理,用的是MATLAB。我一直在让自己熟悉基本的图像操作。当我阅读下面的图像(分辨率:225x300)时,它应该是一个 8 位彩色图像,我希望得到的矩阵有 3 个维度,每个维度为 RGB。一个关于8 位彩色图像的简单网络搜索将我带到了维基百科,其中包含以下信息:

通常称为 8 位真彩色的最简单量化形式是简单地将 3 位分配给红色、3 位分配给绿色和 2 位分配给蓝色(人眼对蓝光不太敏感)以创建 3-3-2。

因此,我希望图像矩阵具有 225x300x3 维度,具有上述黑白 RGB 位分布。但是在我检查了图像矩阵的维度后,我发现它是 225x300 unit8,这是人们对 8 位灰度图像的期望。但是图像是彩色图像,任何图像查看器都可以看到。那么我缺乏知识或做错了什么?我阅读图像的方式有问题吗?

此外,我发现 uint8 是最小的无符号整数类。那么我们如何才能表示和创建 4、8、10 等位的彩色图像呢?

我的代码:

>> I_8bit = imread('input_images8_bit.png');
>> size(I_8bit)
ans =
   225   300
>> class(I_8bit)
ans =
    'uint8'
>> I_24bit = imread('input_images24_bit.png');
>> size(I_24bit)
ans =
   225   300     3
>> class(I_24bit)
ans =
    'uint8'

(来源:https : //en.wikipedia.org/wiki/Color_depth#/media/File : 8_bit.png)

回答

Matlab 支持多种类型的图像,包括

  • RGB 图像,允许任意颜色,以 R、G、B 分量存储。图像由 3D m× n×3数组定义
  • 索引图像,其中每个像素由颜色图的索引定义。图像由一个 2D m×n数组和一个c×3颜色图定义,其中csi 是颜色的数量。

您正在加载的图像似乎已编入索引。所以你需要两个输出版本imread来获取二维数组和颜色图:

[I_8bit, cmap] = imread('input_images8_bit.png');

To display the image you need to specify the 2D array and the colormap:

imshow(I_8bit, cmap)

You can see the effect of changing the colormap, for example

cmap_wrong = copper(size(cmap, 1)); % different colormap with the same size
imshow(I_8bit, cmap_wrong)

To convert to an RGB image, use ind2rgb:

I_8bit_RGB = ind2rgb(I_8bit, cmap);

which then you can display as

imshow(I_8bit_RGB)


以上是8位彩色图像矩阵表示的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>