- 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.
Если кто-нибудь сам изучал эту тему, посоветуйте каких-нибудь методичек.
Результаты:
Как работает JPEG я знал давно - дискретное косинусное преобразование блоков 8х8 пикселов, квантование, сжатие методом Хаффмана.
Но какие параметры у каждых из этих операций? Сколько двоичных разрядов требуется для хранения чисел при каждой операции? Как сделать все это не с плавающей точкой, а с фиксированной?
Пока что прочел это http://algolist.manual.ru/compress/image/jpeg.php
И написал на питоне такое: http://pastebin.com/SWGTBuAS
Хотел сначала написать на Tcl, но для Tcl нет аналога numpy. Поэтому хотя я не знал (и не знаю сейчас) питон, решил написать на нем.
Эта программа выполняет ДКП с плавающей запятой, квантует значения и запихивает их в байтовый список, после чего кодирует повторы нулевых байтов (RLE).
Сжатие получилось примерно в 8 раз.
Но этот скрипт работает очень медленно, особенно операции без использования матриц numpy.
Если кто-нибудь сам изучал эту тему, посоветуйте каких-нибудь методичек.
Результаты: