Есть 4 возможных цвета, поэтому вам нужно 2 бита на пиксель.
Ваша первоначальная мысль верна, 2 ^ 2 = 4, и 2 бита могут представлять 4 различных значения: в двоичном виде: 00, 01, 10, 11 (в десятичном виде: 0, 1, 2, 3).
Каждое значение представляет индекс в цветовой карте .
Цветовая карта используется для сопоставления от 0 до (255, 255, 255), 1 тп (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 (истинный цвет):
Индексированное изображение только с 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 бит).