Сжатие джипега в домашних условиях

398
4
7
Мне стало интересно, получится ли сделать кодер если не MPEG видео, то хотя бы подобия Motion JPEG на российских микросхемах.
Как работает JPEG я знал давно - дискретное косинусное преобразование блоков 8х8 пикселов, квантование, сжатие методом Хаффмана.
Но какие параметры у каждых из этих операций? Сколько двоичных разрядов требуется для хранения чисел при каждой операции? Как сделать все это не с плавающей точкой, а с фиксированной?

Пока что прочел это http://algolist.manual.ru/compress/image/jpeg.php
И написал на питоне такое: http://pastebin.com/SWGTBuAS
Хотел сначала написать на Tcl, но для Tcl нет аналога numpy. Поэтому хотя я не знал (и не знаю сейчас) питон, решил написать на нем.

Эта программа выполняет ДКП с плавающей запятой, квантует значения и запихивает их в байтовый список, после чего кодирует повторы нулевых байтов (RLE).
Сжатие получилось примерно в 8 раз.

Но этот скрипт работает очень медленно, особенно операции без использования матриц numpy.
Если кто-нибудь сам изучал эту тему, посоветуйте каких-нибудь методичек.

Результаты:
h_1454607122_3277675_f033596d7d.png

h_1454607121_7515339_163be5e37c.png
h_1454607121_2345489_45eae421e3.png

h_1454607121_6598670_dcf94b0560.png
 
Сверху