Compression 图像压缩
我有一个调色板,这样有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位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种可能的颜色,所以每个像素需要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位。