Примечание. Возможно, это связано с компьютерной организацией, а не с программным обеспечением.Как хранятся матрицы в памяти?
Я пытаюсь понять что-то, связанное с сжатием данных, например, для 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 и другие кодировщики изображений требуют экономии места, используя алгоритмы, чтобы сделать матрицу изображения менее плотной, как это дополнительное пространство реализуется на моем жестком диске?
Приветствие
Следующий раздел статьи в Википедии «Энтропийное кодирование» касается именно этого. Вы можете просмотреть этот раздел и спросить о том, чего не понимаете. –
ОК, поэтому на самом деле он будет храниться в этом цикле зигзага. Теперь мой вопрос будет использовать 8 бит на запись, или мы могли бы перейти вниз, чтобы сказать 6? – JDS
Кодирование Хаффмана может обрабатывать шаблоны зигзага, поскольку это зависит от частоты возникновения, а не от того, что они являются последовательными. – rasmus