Image 8位彩色图像矩阵表示法
我刚刚开始自学图像处理,我正在使用MATLAB。我已经熟悉了基本的图像操作。当我阅读下面的图像(res:225x300)时,这应该是一个8位彩色图像,我希望生成的矩阵有3个维度,每个维度对应一个RGB。通过一个关于8位彩色图像的简单网络搜索,我找到了维基百科,其中包含以下信息: 最简单的量化形式(通常称为8位真彩色)是简单地将3位分配给红色,3位分配给绿色,2位分配给蓝色(人眼对蓝光不太敏感),以创建3-3-2 因此,我期望图像矩阵具有225x300x3维,具有上述b/w RGB位分布。但在我检查了图像矩阵的尺寸后,我发现它是225x300 unit8,这是人们对8位灰度图像的期望。但是,正如任何图像查看器所看到的那样,该图像是彩色图像。那么,我缺乏知识或做错了什么呢?我如何阅读图像有问题吗 此外,我还想到uint8是最小的无符号整数类。那么,我们怎样才能得到4,8,10等的彩色图像,比特的表示和创建呢 我的代码:Image 8位彩色图像矩阵表示法,image,matlab,image-processing,rgb,Image,Matlab,Image Processing,Rgb,我刚刚开始自学图像处理,我正在使用MATLAB。我已经熟悉了基本的图像操作。当我阅读下面的图像(res:225x300)时,这应该是一个8位彩色图像,我希望生成的矩阵有3个维度,每个维度对应一个RGB。通过一个关于8位彩色图像的简单网络搜索,我找到了维基百科,其中包含以下信息: 最简单的量化形式(通常称为8位真彩色)是简单地将3位分配给红色,3位分配给绿色,2位分配给蓝色(人眼对蓝光不太敏感),以创建3-3-2 因此,我期望图像矩阵具有225x300x3维,具有上述b/w RGB位分布。但在我检
>> I_8bit = imread('input_images\8_bit.png');
>> size(I_8bit)
ans =
225 300
>> class(I_8bit)
ans =
'uint8'
>> I_24bit = imread('input_images\24_bit.png');
>> size(I_24bit)
ans =
225 300 3
>> class(I_24bit)
ans =
'uint8'
(来源:)Matlab支持,包括
- RGB图像,允许以R、G、B分量存储任意颜色。图像由3D
×m
×n
数组定义3
- 索引图像,其中每个像素由彩色贴图的索引定义。图像由2D
×m
数组和n
×c
colormap定义,其中3
si为颜色数c
[I_8bit, cmap] = imread('input_images\8_bit.png');
imshow(I_8bit, cmap)
要显示图像,需要指定2D阵列和颜色贴图:
[I_8bit, cmap] = imread('input_images\8_bit.png');
imshow(I_8bit, cmap)
例如,您可以看到更改颜色贴图的效果
cmap_wrong = copper(size(cmap, 1)); % different colormap with the same size
imshow(I_8bit, cmap_wrong)
要转换为RGB图像,请使用:
然后可以显示为
imshow(I_8bit_RGB)
要有225x300x3图像,您应该有三个通道的彩色图像,其中每个通道使用unit8表示。您可以从该链接看到,颜色可以使用一个通道8位颜色范围来表示。“那么,我们如何能得到4、8、10等的彩色图像,并表示和创建位?”4位图像使用每个像素一个字节(8位)进行存储。这可以减少到存储到文件的字节数的一半,但不值得在内存中这样做,因为这会使一切变得更加困难。图像处理库通常只处理内存中的8位、16位等图像。对于表示为16位图像的10位或12位图像也是如此。实际上,我们是否不使用这些4位、10位和12位图像,而是使用8位和16位图像,因为在存储4位和8位图像时,它们都表示为8位图像?