图像压缩

问题描述 投票:1回答:1

我有一个调色板,所以有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 rgb bit
1个回答
0
投票

有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');   %Read input RGB image.
RGB = imresize(RGB, [64, 64]); %Reduce size to 64x64 (jsut for the example).

%Convert image to indexed image with 4 color.
[X, cmap] = rgb2ind(RGB, 4);
J = ind2rgb(X, cmap);

%Replace indices of color map:
cmap(1, 1:3) = [255, 255, 255]/255; %Fist color is white (255, 255, 255)
cmap(2, 1:3) = [0, 255, 0]/255; %Second color is green (0, 255, 0)
cmap(3, 1:3) = [255, 255, 0]/255; %Second color is yellow (255, 255, 0)
cmap(4, 1:3) = [255, 120, 0]/255; %Second color is orange (255, 120, 0)

K = ind2rgb(X, cmap);

figure;imshow(RGB);
figure;imshow(J);
figure;imshow(K);

RGB输入图像(真彩色):enter image description here

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

将颜色替换为白色,绿色,黄色和橙色(任意顺序)后的图像:enter image description here

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)
© www.soinside.com 2019 - 2024. All rights reserved.