Примечание. Может быть, в большей степени связано с организацией компьютера, чем с программным обеспечением, не уверен.
Я пытаюсь понять что-то, связанное со сжатием данных, скажем, для фотографий JPEG.По сути, очень плотная матрица преобразуется (посредством дискретных косинусных преобразований) в гораздо более разреженную матрицу.Предположительно, именно эта разреженная матрица хранится.Взгляните на эту ссылку:
http://en.wikipedia.org/wiki/JPEG
Сравнение исходного примера изображения субблока 8x8 с матрицей "B", которая преобразована, чтобы иметь общие более низкие значения амплитуды и намного больше нулейна протяжении.Как матрица B хранится так, что она сохраняет намного больше памяти по сравнению с исходной матрицей?
Исходная матрица явно нуждается в 8x8 (количество записей) x 8 бит / запись, поскольку значения могут варьироваться случайным образом от 0 до 255. Хорошо, поэтому я думаю, что совершенно очевидно, что для этого нам нужно 64 байта памяти.Матрица B, с другой стороны, хммм.Наилучший сценарий, о котором я могу подумать, это то, что значения варьируются от -26 до +5, поэтому для записи (например, -26) самое большее требуется 6 бит (5 битов для формирования 26, 1 бит для знака, я думаю).Тогда вы можете хранить 8x8x6 бит = 48 байтов.
Другая возможность, которую я вижу, состоит в том, что матрица хранится в «зигзагообразном» порядке сверху слева.Затем мы можем указать начальный и конечный адрес и просто хранить по диагонали, пока у нас не останутся только нули.Допустим, это 32-битная машина;тогда 2 адреса (начало + конец) составят 8 байтов;скажем, для других ненулевых записей по 6 битов нам нужно пройти почти все верхние диагонали, чтобы сохранить сумму из 28 элементов.Всего эта схема займет 29 байтов.
Подводя итог моему вопросу: если JPEG и другие кодировщики изображений утверждают, что они экономят пространство, используя алгоритмы, чтобы сделать матрицу изображений менее плотной, как реализуется это дополнительное пространство на моем жестком диске?
Приветствия