Compression 图像压缩

Compression 图像压缩,compression,rgb,bit,Compression,Rgb,Bit,我有一个调色板,这样有4种颜色。这些颜色是白色、绿色、黄色和橙色。这些颜色的RBG值分别为(255、255、255)(0、255、0)(255、120、0)(255、255、0)。图像是8 x 8像素的RGB图像。我想计算一下存储这个压缩图像需要多少位 我不确定,因为我们有四种颜色,是否需要2或3位来存储代码。我原本以为是2,因为2^2=4,但现在因为橙色和黄色不是确定的RGB颜色,我们需要3位 从那时起,我知道了如何进行压缩计算,我只想解释一下存储代码需要多少位,因为有4种可能的颜色,所以每个

我有一个调色板,这样有4种颜色。这些颜色是白色、绿色、黄色和橙色。这些颜色的RBG值分别为(255、255、255)(0、255、0)(255、120、0)(255、255、0)。图像是8 x 8像素的RGB图像。我想计算一下存储这个压缩图像需要多少位

我不确定,因为我们有四种颜色,是否需要2或3位来存储代码。我原本以为是2,因为2^2=4,但现在因为橙色和黄色不是确定的RGB颜色,我们需要3位


从那时起,我知道了如何进行压缩计算,我只想解释一下存储代码需要多少位,因为有4种可能的颜色,所以每个像素需要2位

您最初认为它是正确的,2^2=4,2位可以代表4个不同的值: 二进制:00、01、10、11(十进制:0、1、2、3)

每个值表示颜色映射中的索引
颜色映射用于将0映射到(255,255,255)、1 tp(0,255,0)2映射到(255,120,0)和3映射到(255,255,0)

图像为8x8像素,因此所需的总位为8*8*2=128位(16字节)

当您需要解压缩图像时,有两种可能:

  • 第一个选项:解码器预先知道4种颜色-无需将颜色映射与压缩图像一起存储
  • 第二个选项:您需要将颜色映射与压缩图像一起存储,因此需要额外的位来存储颜色映射
当你的问题被表述出来时,我确信第一个选项是正确的(你不需要为彩色地图存储额外的“位”)


为了使思考更有趣,我编写了以下MATLAB示例:

RGB=imread('peppers.png');%读取输入的RGB图像。
RGB=imresize(RGB[64,64]);%将大小减少到64x64(以jsut为例)。
%将图像转换为具有4种颜色的索引图像。
[X,cmap]=rgb2ind(RGB,4);
J=ind2rgb(X,cmap);
%替换彩色地图的索引:
cmap(1,1:3)=[255,255,255]/255;%拳头颜色为白色(255、255、255)
cmap(2,1:3)=[0,255,0]/255;%第二种颜色是绿色(0,255,0)
cmap(3,1:3)=[255,255,0]/255;%第二种颜色是黄色(255,255,0)
cmap(4,1:3)=[255,120,0]/255;%第二种颜色是橙色(255、120、0)
K=ind2rgb(X,cmap);
图形imshow(RGB);
图形imshow(J);
图形imshow(K);
RGB输入图像(真彩色):

只有4种颜色的索引图像(“压缩”图像):

将颜色替换为白色、绿色、黄色和橙色后的图像(任意顺序):

带有4种颜色的8x8图像的图示,如8x8矩阵:

3,3,3,3,3,3,3,3
3,3,3,3,3,0,3,3
3,0,0,0,0,0,0,0
3,0,0,2,2,2,1,1
1,2,1,2,2,1,1,1
1,1,2,1,0,1,1,2
1,0,0,3,3,3,3,2
3,3,3,3,3,3,3,3
彩色地图插图:

0 -->    (255   255   255)
1 -->    (  0   255     0)
2 -->    (255   255     0)
3 -->    (255   120     0)

为了存储颜色映射,需要4*3*8=96位(假设像255这样的值需要8位)

有4种可能的颜色,因此每个像素需要2位

您最初认为它是正确的,2^2=4,2位可以代表4个不同的值: 二进制:00、01、10、11(十进制:0、1、2、3)

每个值表示颜色映射中的索引
颜色映射用于将0映射到(255,255,255)、1 tp(0,255,0)2映射到(255,120,0)和3映射到(255,255,0)

图像为8x8像素,因此所需的总位为8*8*2=128位(16字节)

当您需要解压缩图像时,有两种可能:

  • 第一个选项:解码器预先知道4种颜色-无需将颜色映射与压缩图像一起存储
  • 第二个选项:您需要将颜色映射与压缩图像一起存储,因此需要额外的位来存储颜色映射
当你的问题被表述出来时,我确信第一个选项是正确的(你不需要为彩色地图存储额外的“位”)


为了使思考更有趣,我编写了以下MATLAB示例:

RGB=imread('peppers.png');%读取输入的RGB图像。
RGB=imresize(RGB[64,64]);%将大小减少到64x64(以jsut为例)。
%将图像转换为具有4种颜色的索引图像。
[X,cmap]=rgb2ind(RGB,4);
J=ind2rgb(X,cmap);
%替换彩色地图的索引:
cmap(1,1:3)=[255,255,255]/255;%拳头颜色为白色(255、255、255)
cmap(2,1:3)=[0,255,0]/255;%第二种颜色是绿色(0,255,0)
cmap(3,1:3)=[255,255,0]/255;%第二种颜色是黄色(255,255,0)
cmap(4,1:3)=[255,120,0]/255;%第二种颜色是橙色(255、120、0)
K=ind2rgb(X,cmap);
图形imshow(RGB);
图形imshow(J);
图形imshow(K);
RGB输入图像(真彩色):

只有4种颜色的索引图像(“压缩”图像):

将颜色替换为白色、绿色、黄色和橙色后的图像(任意顺序):

带有4种颜色的8x8图像的图示,如8x8矩阵:

3,3,3,3,3,3,3,3
3,3,3,3,3,0,3,3
3,0,0,0,0,0,0,0
3,0,0,2,2,2,1,1
1,2,1,2,2,1,1,1
1,1,2,1,0,1,1,2
1,0,0,3,3,3,3,2
3,3,3,3,3,3,3,3
彩色地图插图:

0 -->    (255   255   255)
1 -->    (  0   255     0)
2 -->    (255   255     0)
3 -->    (255   120     0)

为了存储颜色映射,需要4*3*8=96位(假设像255这样的值需要8位)

谢谢,这有助于我的理解。因此,这是否意味着3种颜色也需要2位来存储代码?是的,要存储3种不同的颜色,您至少需要2位(4种组合中仅使用3种)。当然,有比索引图像更复杂的压缩方法,能够利用只有3种颜色的事实。主题与数据的主题相关。我不是专家。。。。对于索引图像,3种颜色需要2位。谢谢,这有助于我的理解。因此,这是否意味着3种颜色也需要2位来存储代码?是的,要存储3种不同的颜色,您至少需要2位(4种组合中仅使用3种)。当然,有比索引图像更复杂的压缩方法,能够利用只有3种颜色的事实。主题与数据的主题相关。我不是专家。。。。对于索引图像,3种颜色确实需要2位。