Автор статьи: Андрей Рогов
О чем задание №7
Мы постоянно сталкиваемся с кодирование изображений и звука, отправляя голосовые сообщения или фотографируя на смартфон. Чтобы справиться с заданием № 7, нужно знать теоретическую базу этих процессов.
Это задание продолжает тему кодирования информации, начатую в заданиях 4 и 11. На на этот раз ключевым элементом является дискретизация, т. е. разбиение информационного объекта на отдельные элементы — в нашем случае кодирование изображений и звука. Помимо этого, необходимо понимать, как информация передаётся.
Отдельно отметим, что каждый год появляются немного отличающиеся формулировки заданий. Поэтому стоит уделить особое внимание не нарешиванию прототипов, а изучению теории.
Как закодировать изображения
Вся информация для компьютера представляется в виде двоичного кода. Но в окружающем нас мире она представлена совершенно не так. В реальности информация непрерывна, то есть существует в виде аналогового сигнала.
Например, можно сказать, что существует бесконечное количество цветов. А ограничения на их количество появляются тогда, когда мы говорим о том, кто именно их воспринимает. Кошки различают 6 основных цветов и порядка $25$ оттенков серого. Для лошадей доступны цветовые вариации синего и зеленого, но они не видят красный цвет.
Поскольку компьютеры предназначены для человека, за основу для кодирования цветов взят глаз человека. Цветовое зрение человека основывается на работе трех типов колбочек (фоторецепторов), воспринимающих три базовых цвета: красный (red), зеленый (green) и синий (blue). Все остальные цвета получаются путем комбинирования трех базовых цветов в разных пропорциях (теория цвета Юнга-Гельмогольца). Поэтому работа излучающих свет устройств (мониторы, экраны смартфонов, телевизоры, светодиодные ленты) основана на модели RGB.
Чтобы закодировать цвет, достаточно указать, чему равна каждая составляющая. Рассмотрим простой случай, когда для каждого цвета два варианта: либо есть, либо нет. Обозначим отсутствие цвета нулем, а наличие единицей. Тогда цвета можно кодировать цепочкой из трёх бит. Цвет $111$ (есть все три составляющие) будет белым. А $100$ (в порядке RGB) будет красным. Всего можно получить $8$ различных цветов.
Формула, которая связывает длину двоичного кода цвета и количество цветов для кодирования, та же самая, что связывает мощность алфавита и вес одного символа из задания № 11:
$N=2^i$, где $N$ — количество цветов, $i$ — глубина цвета (количество бит).

В рамках заданий ЕГЭ не рассматривается кодирование изображений с палитрой, поэтому остановимся на этом способе кодирования.
Чтобы представить изображение в компьютере, закодировать цвет недостаточно. Необходим ещё способ кодирования частей изображения. Существует несколько видов компьютерной графики: растровая, векторная, фрактальная, 3Д графика и др. Нас интересует только растровая графика.
В этом способе кодирования изображение разбивается на отдельные элементы, которые называются пиксели. Для каждого пикселя можно независимым образом задать свой цвет. При этом пиксель является минимальным неделимым элементом изображения.
Когда говорят о размере изображения, указывают количество пикселей по горизонтали и вертикали — это разрешение изображения, например, $800 \times 600$. Ниже вы можете увидеть три изображения в разных разрешениях.

Мы вплотную подошли к тому, как закодировать изображение. С помощью двоичного кода можно записать цвет пикселя. Всё изображение можно разбить на пиксели. Значит, можно записать коды цветов всех пикселей изображения., а вес изображения в битах определить по формуле:
$I = k \cdot i,$ где $I$ — вес изображения в битах, $k$ — количество пикселей, а $i$ — вес одного пикселя в битах.
Часто в задачах встречаются производные единицы измерения информации: байты, Килобайты, Мегабайты. Напомним их соотношение.
- $1$ байт = $8$ бит
- $1$ Кбайт = $1024$ байта = $2^{10}$ байт
- $1$ Мбайт = $1024$ Кбайт = $2^{10}$ Кбайт
Для вычислений будет полезно использовать калькулятор или Python Shell.
Далее разберем, как применить эту теорию на практике — для решения задания № 7 в ЕГЭ по информатике.
Задача 1

В задаче указано, что в изображение могут использоваться $64$ цвета — это количество обозначается $N$. Размер изображения $640 \times 320$ — это общее количество пикселей в изображении, обозначается $k.$
Вопрос задачи — общий размер изображения, $I$.
Формула $I = k \cdot i$. Нам неизвестна $i$, но можно её найти по другой формуле: $N = 2^i$. $64=2^6$, $i=6$ бит.
$I = 640 \cdot 320 \cdot 6 = 1\,228\,800 \text{ бит} = 150$ Кбайт
Задача 2

Сначала разберёмся с тем, какие величины нам даны. $320$ Кбайт — это размер всего изображения, обозначается буквой $I$. $1280 \times 960$ — произведение двух чисел, количество пикселей по горизонтали ($1280$) и по вертикали ($960$). Само произведение — общее количество пикселей, т. е. $k$.
Формула, которая связывает эти две величины, $I = k \cdot i$, из которой мы сможем найти количество бит на один пиксель. Поскольку i всегда измеряется в битах, $I$ тоже необходимо перевести в биты.
$i=I/k$
$i = \frac{320 \cdot 1024 \cdot 8}{1280 \cdot 960} = 2.1(3)$ бит
По условию задачи, размер изображения не может превышать $320$ Кбайт. Если мы округлим результат вычислений в большую сторону, то итоговый размер изображения превысит максимальную величину. Поэтому округляем в меньшую сторону.
$i=2$ бита
Чтобы определить количество цветов, воспользуемся формулой $N=2^i$
$N = 2^2 = 4$ цвета.
Задача 3

Основное отличие этой задачи — наличие сжатия. $50$ Кбайт из условия — это объем сжатого файла. $55\%$ можно записать как коэффициент, на который необходимо умножить размер сжатого файла, чтобы получить оригинальный.
$I_{сж} \cdot 1.55 = I_{ориг}$
Формула объёма изображения теперь может быть записана следующим образом:
$I_{сж} \cdot 1.55 = k \cdot i$
Аналогично предыдущей задаче, сначала найдём глубину цвета, затем количество цветов.
$i = \frac{50 \cdot 1024 \cdot 8 \cdot 1.55}{320 \cdot 512} = 3.875$ бита
$N = 2^3 = 8$ цветов
Задача 4

Помимо информации о цвете пикселя также есть информация о прозрачности. Сначала найдём объём информации для одного пикселя.
$i = I / k$
$i = \frac{600 \cdot 1024 \cdot 8}{640 \cdot 480} = 16$ бит
Для кодирования $64$ уровней прозрачности потребуется $2^6 = 64 \to 6$ бит. Следовательно, под цвет останется $16 - 6 = 10$ бит.
Количество цветов $N = 2^{10} = 1024$ цвета.
Задача 5

Чтобы найти ответ на вопрос в этом задании, можно использовать несколько способов решения. Мы поступим следующим образом: найдём объём одной картинки до сжатия, объём после сжатия, а их разность умножим на $100$.
$I_{до} = 1024 \cdot 768 \cdot 23 = 18\,087\,936 \text{ бит}$
$I_{после} = 800 \cdot 600 \cdot 22 = 10\,560\,000 \text{ бит}$
$Экономия = (18\,087\,936 - 10\,560\,000) \cdot 100 = 752\,793\,600 \text{ бит} = 91\,893.75 \text{ Кбайт}$
Поскольку в ответе просят записать целую часть числа, укажем $91893$.
Заключение
Задание № 7 не представляет сложности, если знать нужную теоретическую базу. В этой статье мы рассмотрели задачи на кодирование изображений — но на экзамене могут встретиться другие варианты. В следующих статьях мы разберём задачи на кодирование звука и передачу информации.
Напоследок предлагаем решить подборку задач, чтобы закрепить навыки.