8 位彩色图像矩阵表示

8-bit color image matrix representation

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

The simplest form of quantization frequently called 8-bit truecolor is to simply assign 3 bits to red, 3 to green and 2 to blue (the human eye is less sensitive to blue light) to create a 3-3-2.

因此,我希望图像矩阵具有 225x300x3 的维度,并具有上述 b/w RGB 位分布。但是我检查了图像矩阵的尺寸后,发现它是 225x300 unit8,这是人们对 8 位灰度图像的期望。但图像是彩色图像,正如任何图像查看器所看到的那样。那么我缺乏知识或做错了什么?是我读图的方式有问题吗?

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

我的代码:

>> I_8bit = imread('input_images_bit.png');
>> size(I_8bit)
ans =
   225   300
>> class(I_8bit)
ans =
    'uint8'
>> I_24bit = imread('input_images_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 支持several types of images,包括

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

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

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

要显示图像,您需要指定二维数组和颜色图:

imshow(I_8bit, cmap)

可以看到改变colormap的效果,例如

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

要转换为 RGB 图像,请使用 ind2rgb:

I_8bit_RGB = ind2rgb(I_8bit, cmap);

然后你可以显示为

imshow(I_8bit_RGB)