我有一个调色板,有四种颜色。这些颜色有白色、绿色、黄色和橙色。这些颜色的RBG值分别为(255、255、255) (0、255、0) (255、120、0) (255、255、0)。图像是8x8像素的RGB图像。我想要计算存储这个压缩图像所需的比特数。
我不确定,因为我们有四种颜色,如果需要2或3位来存储代码。我原本以为是2因为2^2=4,但现在因为橙色和黄色不是确定的RGB颜色,我们需要3位?
从那时起,我知道如何进行压缩计算,我只想解释需要多少位来存储代码。
发布于 2019-11-02 22:23:16
有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);RGB输入图像(真实颜色):

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

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

8x8图像的4种颜色的插图,如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位)。
https://stackoverflow.com/questions/58674731
复制相似问题