3.7.3. Практическое DCTУравнения (3.0) легко переводятся на любой язык программирования высокого уровня. Однако, имеется несколько возможностей для существенного ускорения вычисления этих величин. Эти формулы лежат в самом «сердце» метода JPEG, поэтому ускорение вычислений просто необходимо. Опишем несколько полезных приемов. 1. Независимо от размера изображения, используется только 32 значения функции косинус (см. следующий абзац). Их можно один раз вычислить и использовать много раз в операциях над единицами данных 8x8. Тогда вычисление выражения будет состоять всего из двух операций умножения. Двойная сумма (3.9) потребует (Аргументы функции косинус, используемые в DCT, имеют вид 2. Анализ двойной суммы (3.9) позволяет переписать ее в виде произведения матриц а В итоге, вычисление одного элемента матрицы Напомним, что цветное изображение состоит из трех компонент (обычно это RGB, которое преобразуется в YCbCr или в YPbPr). Каждая компонента преобразуется отдельно, что дает общее число операций равное 3. Другой путь ускорения DCT состоит в выполнении арифметических вычислений над числами, представленными в форме с фиксированной точкой, а не в форме с плавающей точкой. Для многих компьютеров операции над числами с фиксированной точкой делаются существенно быстрее операций с плавающей точкой (некоторые высоко производительные компьютеры, вроде CDC 6400, CDC 7600 и различные системы CRAY являются заметными исключениями). Бесспорно, лучший алгоритмом для DCT описан в [Feig, Linzеr 90]. Для него требуется всего 54 умножения и 468 сложений и сдвигов. На сегодняшний день имеются различные специализированные микросхемы, которые выполняют эти процедуры очень эффективно. Интересующийся читатель может познакомиться в [Loeffler et al. 89] с быстрым алгоритмом одномерного DCT, использующим всего 11 умножений и 29 сложений.
|