CFA LogoCFA Logo Computer
Загрузка поиска
Новости Компьютеры Прайс-лист [Новое] Прайс-лист [Б/У] Для ноутбуков Конфигуратор ПК Заказ, Оплата, Доставка Сервис объявления Драйвера Статьи Как нас найти Контакты
Новости
RSS канал новостей
То, что энтузиасты ждали так долго, наконец-то случилось, и компания NVIDIA анонсировала свой новый ...
Официальный анонс графического ускорителя GeForce GTX 1080 Ti состоялся 1 марта, и партнеры NVIDIA ...
Компания ASRock представила мировой общественности материнскую плату H110-STX MXM, которая рассчитана ...
Компания MSI в рамках серии Arsenal Gaming представляет пользователям материнские платы линейки ...
По данным наших коллег, в этом месяце компания Huawei официально представит свой новый смартфон. ...
Самое интересное
Программаторы 25 SPI FLASH Адаптеры Optibay HDD Caddy Драйвера nVidia GeForce Драйвера AMD Radeon HD Игры на DVD Сравнение видеокарт Сравнение процессоров

АРХИВ СТАТЕЙ ЖУРНАЛА «МОЙ КОМПЬЮТЕР» ЗА 2003 ГОД

Небо в клетку

Александр ОЛЕЙНИК sasha_oleinik@mail.ru

За последний год-два наступление цифровой фотографии приобрело ошеломляющую стремительность. Цена на дешевую полуторамегапиксельную камеру сравнима с ценой хорошей «мыльницы». В то же время преимущества цифровой съемки перед пленочной очевидны. Все любительские «цифровики», а также большинство профессиональных камер используют JPEG как основной формат записи изображений. Уже через год после покупки фотоаппарата и привычке поснимать хотя бы на выходных обнаруживается, что счет вашей коллекции JPEG’ов идет на тысячи. Если представить себе все эти совокупные миллиарды пикселей, заполненных силуэтами жен, детей, тещ и любимых девушек в каком-нибудь другом безобидном формате, например, в TIFF, то становится страшно за свой винчестер. Ну, в крайнем случае, ваша квартира будет усеяна CD-дисками с надписями типа «январь 2003». В общем, хорошо, что есть такой формат — JPEG. Да вот только что мы знаем о нем?

Более-менее подготовленный пользователь, иногда работающий с графикой или цифровыми изображениями, скорее всего не сможет объяснить принципиальных отличий JPEG от BMP или TIFF. А при этом разница-то огромна. Запись изображений в формате TIFF примерно так же тривиальна, как изготовление пельменей с помощью скалки и железки с отверстиями. В то же время алгоритм JPEG напоминает раскладывание затейливого пасьянса по хитроумным правилам. Происходит интереснейший многоэтапный процесс обработки информации: изменение цветового пространства, пофрагментный анализ изображения, отсев информации по определенным принципам, с учетом строения человеческого глаза, математического кодирования.

Большинство статей по этому вопросу или очень сложны, или поверхностны. Первые обычно пишутся математиками, которые назло читателю щедро пересыпают текст длинными формулами и специальными терминами. Фраза типа «дискретно-косинусное кодирование есть ни что иное, как один из видов преобразования Фурье», безотказно отбивает охоту к дальнейшему чтению. Второй тип статей обычно содержит много эмоций, мало интересных фактов и не дает конкретных рекомендаций по использованию формата с учетом его особенностей. В этой статье попытаемся преодолеть все эти недостатки.

А кому он был нужен, этот JPEG?

Кризис. Так можно сказать о состоянии полиграфии на базе компьютерных систем в восьмидесятых годах. Хорошо загруженные работой фирмы по допечатной подготовке, которые за свои несколько компьютеров, профессиональный барабанный сканер и остальную спецтехнику выложили тучу денег, столкнулись с тем, что какой-то хилый десяток заказов, делающихся на их компьютерах, пожирает все доступное дисковое пространство, успешно превращая его в недоступное. А диски тогда были, по сегодняшним меркам, очень малой емкости — какие там гигабайты! А притом, должен сказать, один журнальный разворот с большой картинкой-постером занимает в TIFF’е 30—50 Мб. Двадцать-тридцать таких файлов — и гигабайта как небывало. На всяких там стримерах текущие заказы хранить не выйдет, это ведь не архивы, тут нужен быстрый доступ. Вот так вопрос и назрел.

Тут любопытно заметить, что формат JPEG изначально создавался для полиграфистов, но именно они теперь его особенно не любят и стараются не использовать.

Итак, кризис в полиграфии не остался незамеченным такой влиятельной международной организацией как ISO (International Organization for Standartization) — в ее-то недрах и сообразили, как решить, наконец, эту проблему. Вторым идейным вдохновителем создания нового революционного формата считается International Telecommunication Union Standardization Sector (ITU). Этими организациями и были сформулированы общие принципы разработки нового формата. Поручили ее Первому Объединенному Техническому Комитету (JTC1), который в свою очередь создал в составе своего подкомитета №29 Первую Рабочую Группу, которая и стала называться JPEG (Объединенная экспертная группа по полиграфии), но это только красивое название для масс, на самом же деле ее название —JTC1/SC29/WG1.

Основное задание группы экспертов было таким: принципиально сократить размеры файлов, содержащих полутоновые (фотографические) изображения. Принципиально — это не менее чем в 10—15 раз, без заметной потери качества. Формат должен быть кроссплатформенным, иметь регулируемую степень сжатия. Здесь нужно напомнить, что все предыдущие алгоритмы сжатия уплотняли полутоновые изображения не более чем в 3—4 раза, и то при определенных условиях.

Было абсолютно ясно, что поставленных задач тривиальными методами не решить, и нужно чем-то жертвовать. Но чем? И решили в первую очередь пожертвовать цветом. Именно с цветом создатели формата расправились самым бесцеремонным образом.

Интересно, что к 1987 году группой JPEG была предложена дюжина вариантов кодирования изображений, из которых выбрали три, наиболее удовлетворяющих поставленным требованиям. После дальнейших исследований остановились на формате, дающем наибольшее сжатие при одинаковых потерях качества. К 1990 году работа над новым форматом была окончена.

JPEG как наследник цветного телевидения

Как ни странно, но JPEG — это скорее сын цветного телевидения, чем компьютерных технологий. В начале 60-х годов велись самые интенсивные исследования, готовящие переход от черно-белого телевидения к цветному. Тогдашние титаны электронной индустрии RCA, Philco, Hazeltine Electrical Corporation приложили все усилия к тому, чтобы сохранить совместимость черно-белых телевизоров с новыми стандартами цветного телевидения. Нужно было, не меняя вид передаваемого черно-белого телевизионного сигнала, добавить к нему как можно более сжатую информацию о цвете. Было решено передавать цвет в гораздо более грубой, нечеткой форме и сократить ее в четыре раза по сравнению с черно-белой картинкой. Идея состояла в том, чтобы четкое черно-белое изображение подкрашивать так, чтобы не очень вдаваться в мелкие цветные детали. Этот подход стал краеугольным камнем и при создании JPEG.

О физиологии зрения

Конечно же, такое смелое игнорирование тремя четвертыми информации о цвете было обосновано исследованиями в области физиологии зрения. Доказали, что для нашего глаза в первую очередь важна четкая информация о яркости объекта, цвет же воспринимается в гораздо более обобщенной форме, особенно это заметно на мелких объектах. Это просто проверить, рассматривая мелкие или сильно удаленные объекты. Вы заметите, что не можете достаточно уверено определить их цвет. Синий кажется почти черным, зеленый тяготеет к серому, желтый белеет, лишь ярко-красный достаточно хорошо различим на мелких деталях. Кстати, именно поэтому разного рода предупредительные огни делают алыми.

Кодирование

После того как вы создали какое-нибудь замечательное произведение в Photoshop’е, или отсканировали фотографию, или нажали на спуск цифрового фотоаппарата, вы получите данные о каждой точке изображения в виде информации о количестве каждого из трех основных цветов — красного (R), зеленого (G) и синего (B). Это так называемая цветовая модель RGB. Но она мало пригодна для последующего сжатия, так как вся информация в каждом из цветовых каналов равноценна. А вот при записи изображения в JPEG первое, что происходит, это переход в другую цветовую модель —Lab, еще ее называют YСbCr. Эта модель содержит принципиально разные каналы. Первый, L-канал — это черно-белая полутоновая картинка, два других — информация о цвете. Информация в первом канале L важнее для восприятия, чем информация в каналах a и b. На Рис. 1, 1а мы видим изначальную фотографию. На Рис 2, 2а в режиме Lab удалено по 80% информации из каналов a и b. На Рис. 3, 3а удалено 80% информации из одного канала (зеленого). Видно, что в первом случае (Рис. 2) картинка сохранила четкость, так как канал яркости не был затронут, но цвета сильно обобщены, немного потеряна сочность, что хорошо заметено на увеличенном фрагменте (Рис. 2а). При этом изображение осталось приемлемым. Во втором случае (Рис. 3, 3а) снижение четкости зеленого канала в режиме RGB привело к получению абсолютно неприемлемого изображения как по резкости, так и по цветопередаче.

Первый этап при кодировании в JPEG — это отделение черно-белой (яркостной) информации от цветовой. Дальнейшие преобразования цветной и черно-белой информации будут совпадать, с той лишь разницей, что цвет будет обобщаться гораздо сильнее.

Второй этап обработки начинается с разделения изображения на квадраты 88 пикселей. В основном это делается для ускорения процесса кодирования-декодирования. В дальнейшем каждый квадрат обрабатывается независимо, именно поэтому границы пиксельных групп почти всегда заметны.

Интересно, что каждый такой массив 88 пикселей обрабатывается не построчно, как в большинстве других форматов, а зигзагом, по диагонали, начиная от верхнего левого угла и заканчивая нижним правым (Рис. 4). Сделано это в основном для того, чтобы уравнять качество передачи вертикальных и горизонтальных линий.

Далее происходит следующее: первый пиксель группы назначается базовым, абсолютное же значение второго пикселя заменяется информацией о том, насколько он отличается от первого, для третьего пикселя указывается, насколько он отличается от второго, и так далее до шестьдесят четвертого. Так мы получим цепочку коэффициентов, описывающих разницу между пикселями.

Рис. 1, 2, 3.   Рис. 1а, 2а, 3а.

Рис. 4.   Рис. 5.

Все эти сложности с коэффициентами мотивированы тем, что с точки зрения математики их можно описать более короткими «словами», чем истинные значения яркости и цвета. Под короткими словами тут нужно понимать что-то вроде 01, а под длинными —111001110010110. Сокращая длину таких «слов», мы сокращаем, в свою очередь, и размер файла. А это и есть наша основная задача.

Тут хочу обратить внимание на такие очевидные вещи. Если фрагмент изображения достаточно однородный, с плавной сменой яркости и цвета, то коэффициенты в группе будут в основном одинаковы, так как каждый следующий пиксель будет отличаться от соседнего примерно на одну и ту же величину. Если фрагмент изображения одного цвета и тона, то коэффициенты будут также одинаковы. Если же изображение насыщено деталями, коэффициенты в пределах группы будут отличаться друг от друга тем сильнее, чем больше деталей в изображении, так как соседние пиксели будут здорово отличаться друг от друга, причем отличаться по-разному.

Интересно заметить, что истинными, прямыми потомками первоначального изображения при кодировании в JPEG остается меньше 2% пикселей (Рис. 5), от них потом и ведутся все построения при заполнении ячеек 88. Все же остальные пиксели — это приблизительные вариации на тему главного пикселя, написанные по воспоминаниям соседей. Процесс подмены истинных значений яркости или цвета пикселей на коэффициенты называют дискретно-косинусным кодированием.

Закручиваем гайки

А вот теперь настала пора принять по-настоящему крутые меры по сокращению данных в нашем изображении. Дело в том, что все наши предыдущие действия подготовили для этого самую благодатную почву. Настала пора избавиться от солидной части информации, но так, чтобы это не было сильно заметно для глаза. Для этого рассмотрим полученные нами группы коэффициентов. Они достаточно точно описывают изменения изображения. Мы же можем многие из сходных коэффициентов округлить до одинаковых значений. Округлить можно слабо — например, 7;6;9;7 заменить на 7;7;7;7, а можно и сильно — например, 4;60;12;40;12 заменить на 25;25;25;25;25. Именно округлением коэффициентов вы руководите, когда указываете в Фотошопе степень качества при сохранении в JPEG. Специалисты называют этот этап квантованием. Нетрудно заметить, что такие округления приводят к потере четкости и размазыванию изображения. Поэтому эксперты разработали специальные правила округления для различных степеней сжатия. Их основной смысл в том, чтобы округлять информацию в каналах цвета гораздо сильнее, чем в канале яркости. Как это происходит, видно на Рис. 6—9. Исходное изображение было сохранено Фотошопом с установкой «хорошее качество». При этом четкость в канале яркости практически не изменилась, а вот цветовые каналы сильно упростились, мелкие детали проигнорировались. Стали заметны границы пиксельных групп, но благодаря особенностям нашего зрения эти дефекты остались незаметными на итоговом изображении.

Правила округления коэффициентов называют матрицами округления или матрицами квантования. Замечу, что округление проводится для уменьшения количества разных «слов», описывающих пиксельные группы.

Рис. 6, 7, 8, 9.

Курс на финиш

На последнем этапе JPEG-кодирования все полученные коэффициенты обрабатываются таким образом, чтобы определить, какие значения повторяются чаще всего, а какие реже. На основе этого статистического исследования наиболее часто повторяемому коэффициенту присваивается самое короткое «имя», самому же редко встречаемому достанется самое длинное описание. После чего наши данные будут состоять из максимума коротких «слов» и минимума длинных. Теперь осталось пойти на последнюю хитрость: очевидно, что нет смысла двадцать раз повторять одно и тоже слово, достаточно просто указать, сколько раз его нужно будет повторить. Это так называемое кодирование энтропии или кодирование по методу Хофмана.

Очевидные и менее очевидные выводы

Вот наконец-то мы через заросли теорий добрались до главного — практических рекомендаций по использованию формата, а все предыдущее повествование нам поможет отнестись к ним серьезно и вдумчиво.

Если вы используете JPEG, то первое, чего вы от него ждете, это хорошего сжатия. Тут главное усвоить, что оно зависит от характера изображения гораздо больше, чем от выбираемой вами силы компрессии. JPEG’у небезразлично, что вы рисуете или снимаете, и если у вас на фото какой-нибудь морской пейзаж, то сжатие в 20—30 раз ему мало повредит, а если это, скажем, портрет на фоне исторической каменной стены с тьмой швов и трещин, то результат будет раз в пять «тяжелее», и это при одинаковых показателях качества. При определенном опыте сжимаемость сюжета можно определять на глаз. Очевидно, что более мягкие фотографии с нерезкими переходами сжимаются гораздо лучше, чем идеально резкие. Не следует также ожидать хорошего сжатия после применения фильтров, наводящих резкость, таких как unsharp mask и sharpen, так как они затрудняют квантование. А вот применение эффектов, удаляющих муар, следы от пыли и царапин весьма способствуют сжатию. Удивительно, но обычное кадрирование может быть губительным для качества картинки, так как оно смещает границы пиксельных групп, а главные пиксели теряют свое первоначальное место. В результате происходит полный пересчет изображения с нарастанием потерь качества. Но самое опасное занятие — это редактирование JPEG поочередно в двух разных программах. Дело в том, что каждая программа применяет разные матрицы квантования, всякий раз по-своему округляя уже округленные коэффициенты. Результат может быть самым непредсказуемым — от сильнейшей потери резкости до появления муара и разнообразных полос.

Казалось, хорошо было бы перед редактированием перевести JPEG в TIFF или PSD, а после обработки опять конвертировать рисунок в JPEG. На самом деле это не так. Если вы не меняете все изображение, а редактируете только фрагменты, например, ретушируете или что-нибудь дорисовываете, то временно перебрасывать его в другой формат не нужно. Если же картинка меняется полностью, например, вы корректируете уровни черного и белого, гамму, или изменяете размер изображения путем интерполяции, то переброска в другой формат вполне оправдана, так как не остается ни одного фрагмента, который не нужно было бы заново перекодировать.

После съемки цифровым фотоаппаратом очень часто требуется подстройка уровней и коррекция цвета. Во-первых, это нужно делать за один раз, чтобы накопление искажений было минимальным, во-вторых, это нужно делать в редакторе, который не спрашивает при сохранении о степени сжатия, а понимает, каким оно было изначально. И еще: после сканирования изображений с журналов, каталогов и книг обязательно применяйте фильтр Despeckle — в противном случае вы не будете довольны ни качеством картинки, ни результатом кодирования, ни степенью сжатия.

Перспективы развития

Некоторые недостатки формата JPEG побудили экспертов продолжить исследования, после чего был предложен формат JPEG2000, основанный на других принципах — например, вместо дискретно-косинусного кодирования применяется Wavelet-преобразование. Но из-за различных патентных ограничений он может и не найти широкой поддержки у создателей графических программ.

Рекомендуем ещё прочитать:






Данную страницу никто не комментировал. Вы можете стать первым.

Ваше имя:
Ваша почта:

RSS
Комментарий:
Введите символы: *
captcha
Обновить






Рейтинг@Mail.ru
Хостинг на серверах в Украине, США и Германии. © www.sector.biz.ua 2006-2015 design by Vadim Popov