Я не уверен, что кто-то еще объяснил, почему магическое число кажется точно 1: 2, а не, например, 1: 1.1 или 1:20.
Одна из причин заключается в том, что во многих типичных случаях почти половина оцифрованных данных представляет собой шум , и шум (по определению) не может быть сжат.
Я сделал очень простой эксперимент:
Я взял серую карту . Для человеческого глаза это выглядит как обычный нейтральный кусок серого картона. В частности, нет информации .
А потом я взял обычный сканер - именно то устройство, которое люди могли бы использовать для оцифровки своих фотографий.
Я отсканировал серую карту. (На самом деле, я отсканировал серую карту вместе с открыткой. Открытка была там для проверки работоспособности, чтобы я мог убедиться, что программное обеспечение сканера не делает ничего странного, например, автоматически добавляет контраст, когда он видит безликую серую карту.)
Я обрезал часть серой карты размером 1000x1000 пикселей и преобразовал ее в оттенки серого (8 бит на пиксель).
То, что мы имеем сейчас, должно быть довольно хорошим примером того, что происходит, когда вы изучаете безликую часть отсканированной черно-белой фотографии , например, чистое небо. В принципе, там точно не на что смотреть.
Однако при большем увеличении это выглядит так:
Нет четко видимого рисунка, но он не имеет однородного серого цвета. Частично это, скорее всего, вызвано несовершенством серой карты, но я бы предположил, что большая часть этого - просто шум, создаваемый сканером (тепловой шум в сенсорной ячейке, усилителе, аналого-цифровом преобразователе и т. Д.). Очень похоже на гауссовский шум; Вот гистограмма (в логарифмическом масштабе):
Теперь, если мы предположим, что каждый пиксель имеет свой оттенок, выбранный из этого распределения, сколько энтропии у нас будет? Мой скрипт на Python сказал мне, что у нас целых 3,3 бит энтропии на пиксель . И это много шума.
Если бы это действительно было так, это означало бы, что независимо от того, какой алгоритм сжатия мы используем, битовая карта 1000x1000 пикселей будет в лучшем случае сжиматься в файл размером 412500 байт. И что происходит на практике: я получил PNG-файл размером 432018 байт, довольно близко.
Если мы немного преувеличим, кажется, что независимо от того, какие черно-белые фотографии я отсканирую с помощью этого сканера, я получу сумму следующего:
- «полезная» информация (если есть),
- шум, ок. 3 бита на пиксель.
Теперь, даже если ваш алгоритм сжатия сжимает полезную информацию в << 1 бит на пиксель, вы все равно будете иметь до 3 бит на пиксель несжимаемого шума. И несжатая версия составляет 8 бит на пиксель. Таким образом, степень сжатия будет в пределах 1: 2, независимо от того, что вы делаете.
Другой пример, с попыткой найти чрезмерно идеализированные условия:
- Современная камера DSLR, использующая самую низкую чувствительность (минимум шума).
- Сфокусированный снимок серой карты (даже если на серой карте была какая-то видимая информация, она была бы размыта).
- Преобразование файла RAW в 8-битное изображение в оттенках серого без добавления контраста. Я использовал типовые настройки в коммерческом конвертере RAW. Конвертер пытается уменьшить шум по умолчанию. Более того, мы сохраняем конечный результат в виде 8-битного файла - по сути, мы отбрасываем биты младшего разряда необработанных показаний датчика!
И каков был конечный результат? Это выглядит намного лучше, чем то, что я получил от сканера; шум менее выражен, и ничего не видно. Тем не менее, гауссовский шум есть:
А энтропия? 2,7 бит на пиксель . Размер файла на практике? 344923 байта для 1M пикселей. В действительно лучшем сценарии с некоторыми изменениями мы увеличили степень сжатия до 1: 3.
Конечно, все это не имеет ничего общего с исследованиями TCS, но я думаю, что хорошо иметь в виду, что действительно ограничивает сжатие оцифрованных данных в реальном мире. Достижения в разработке более изящных алгоритмов сжатия и сырых ресурсов процессора не помогут; если вы хотите сохранить весь шум без потерь, вы не можете сделать намного лучше, чем 1: 2.