我有一个调色板,所以有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字节)。
当您需要解压缩图像时,有两种可能性:
我确定您提出的问题,第一种选择是正确的(您无需为颜色图存储其他“位”)。
为了使思考更有趣,我编写了以下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);
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)