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 分量存储。图像由一个3D
m
×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)
刚开始自学图像处理,正在用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 分量存储。图像由一个3D
m
×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)