JPEG - наиболее распространенный алгоритм сжатия изображений с потерями. Фактически он является стандартом полноцветных изображений. Алгоритм разработан группой экспертов в области фотографии (JPEG - Joint Photographic Expert Group - подразделение в рамках ISO - Международной организации по стандартизации) специально для сжатия 24-битных изображений.
Формат JPEG представляет собой сжатие с потерями, то есть сжатое изображение получается близким к исходному, но не абсолютно с ним совпадает. Существуют методы сжатия без потерь (BMP, PNG, ...), которые сохраняют изображение до последнего бита (хотя и там есть тонкости, связанные с переходам к палитрам).
Величина потерь и качество получаемого изображения задаются параметром q (Quality), лежащим в пределах от 1 до 100. Единственное исключение, - программы фирмы Adobe. Они почему-то делят q на 10 и считают, что качество - это число от 0.1 до 10.
Другой популярный стандарт - JPEG2000 - аналог и замена JPEG. Сжатие по стандарту JPEG2000 основано на алгоритме пирамидального вейвлет-преобразования.
Основным параметром в стандарте JPEG2000 является k - уровень сжатия, показывающий отношение размера сжатого изображения к размеру исходного, то есть лежит в пределах от 0 до 1.
К сожалению не все графические программы понимают этот формат.
Если справа вы видите картинку, то ваш броузер файлы JPEG2000 (расширение jp2) понимает.
Если нет - увы.
Поэтому все остальные jp2-файлы на этой странице заменены на файлы формата png. Это формат без потерь и они в точности соответствуют тому, как должны выглядеть jp2-файлы, правда их (png) размер во много раз больше, чем у jp2. |
Погрешности JPEG2000-изображения носят совершенно другой характер, чем у JPEG. Поэтому сравнивать качество сжатия с JPEG довольно трудно. В целом, при среднем уровне сжатия (10-100 раз по сравнению с несжатым изображением) JPEG2000 дает примерно на 15-20\% меньший размер файла при аналогичном качестве. Но при сильном уровне сжатия (более, чем в 100 раз) JPEG2000 существенно лучше (хотя в этом случае в обоих форматах о "качестве" можно говорить лишь условно).
Качество сжатого изображения можно описывается "расстоянием" от точного изоражения до приближенного. Изображения предполагаются одинакового размра (mx*my), поэтому каждое из них описывается вектором из 3*mx*my чисел. "Расстояние" между такими изображениями чаще всего понимают в самом обычном смысле - как квадратный корень из суммы квадратов разностей соотвествующих координат. Для того, чтобы результат не зависел от размеров изображения, полученную величину поделим на mx*my. Это и будем назвать среднеквадратичным расстоянием между изображениями (MSE, Mean Square Error).
Большое распространение получила также величина PSNR (Пиковое отношение сигнала к шуму, Peak Signal-to-Noise Ratio) - стандартная величина для измерения погрешностей изображений в компьютерной графике и видео:
PSNR измеряется в децибелах. То есть, если PSRN для двух избражений (точного и приближенного) равен 40, то говорят, что величина шума равна 40 децибел.
Следует помнить, что среднеквадратичное отклонение далеко не всегда являтся адекватной мерой погрешности, тем не менее, его использование во многих случаях вполне оправдано.
Сравним результаты сжатия JPEG и JPEG2000 при различных параметрах.
Возьмем некоторое изображение хорошего качества, например
Коэффициент сжатия (k) показывает количество бит на одну точку изображения. Пары подобраны так, чтобы коэффициент k был по возможности одинаковый для jpeg и jpeg2000.
JPEG | JPEG2000 |
---|---|
file=100.jpg q=100 k=7.90 PSNR=36.42 MSE= 3.85 |
file=1180.jp2 q= - k=7.88 PSNR=44.64 MSE= 1.49 |
Покажем также вырезанные справа кусочки этих изображений, увеличенные в 4 раза.
JPEG | JPEG2000 |
---|---|
file=100.jpg q=100 k=7.90 PSNR=36.42 MSE= 3.84 |
file=1180.jp2 q= - k=7.89 PSNR=44.64 MSE= 1.49 |