В libjpeg Я не могу найти матрицу DCT 8x8? Если я не ошибаюсь, эта матрица всегда является константой для блока 8x8. он должен содержать 1/sqrt (8) в первой строке, но где эта матрица?Где DCT-матрица в Libjpeg?
ответ
В реальной реализации JPEG матрица DCT обычно учитывается до ее Гауссовой нормальной формы. Это дает серию матричных умножений. Однако в нормальной форме они включают только операции по диагонали и значения, смежные с диагональю. Большинство значений в нормализованных матрицах равны нулю, поэтому вы можете их опустить.
Это преобразует DCT в серию из 8 параллельных операций.
Эта книга описывает несколько способов матричные операции могут быть преобразованы:
http://www.amazon.com/Compressed-Image-File-Formats-JPEG/dp/0201604434/ref=pd_bxgy_b_img_y
Эта книга описывает тензорный подход, который теоретически более эффективен, но как правило, не так в реализации
Это не так. Или, может быть, это где-то в подлых местах, но это не имеет большого значения. Реальные реализации DCT не работают таким образом, они представляют собой очень специализированные фрагменты кода, в которых все константы жестко закодированы в них, и они не похожи на матричное умножение. Иногда полезно рассматривать преобразование как матричное умножение с теоретической точки зрения, но его можно реализовать гораздо эффективнее.
Для DCT в libjpeg см., Например, файл jfdctflt.c (или один из его друзей).
Привет, У меня есть библиотека переменного тока, которая предоставляет специализированные функции DSP, такие как матричное умножение. Я могу написать свою собственную матрицу и использовать ее в этом месте. – user40713
В теории вы могли бы, но код Libjpeg имеет тенденцию быть запутанным. У вас может возникнуть проблема с этим. Кроме того, libJpeg может объединить процесс квантования и DCT. Проблема состоит в том, что матричное умножение не является очень эффективным способом выполнения этих преобразований (если вы не учитываете и не опускаете операции умножения на нуль). – user3344003