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)