Масштабирование изображений

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

Масштабирование векторных рисунков выполняется просто и без потери качества, так как объекты векторной графики создаются по их описаниям, то для изменения масштаба векторного объекта, достаточно изменить его описание. Например, чтобы увеличить в два раза векторный объект, следует удвоить значение, описывающее его размер.

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

1. Одновременное изменение размеров всех пикселов (в большую или меньшую сторону).

2. Добавление или убавление пикселов из рисунка для отражения производимых в нем изменений, называемое выборкой пикселов в изображении.

Простейший способ изменения масштаба растрового рисунка состоит в изменении размера всех его пикселов. Так как внутри самого рисунка пикселы не имеют размера и приобретают его уже при выводе на внешнее устройство, то изменение размера пиксе­лов растра в сильной степени похоже на масштабирование векторных объектов – необ­ходимо сменить только описание пиксела, а остальное выполнит устройство вывода.

Устройство вывода для создания пиксела определенного физического размера ис­пользует столько своих минимальных элементов, сколько сможет. При масштабировании изображения количество входящих в него пикселов не меняется, а изменяется коли­чество создаваемых устройством вывода элементов, идущих на построение отдельно­го пиксела изображения.

Выборка растрового рисунка может быть сделана двумя различными способами.

1. По первому способу просто дублируется или удаляется необходимое количество пик­селов. При этом в результате масштабирования, как правило, ухудшается качество изоб­ражения. Например, при увеличении размера рисунка возрастают его зернистость и дис­кретность. При уменьшении размера рисунка потери в качестве не столь заметны, одна­ко при последующем восстановлении уменьшенного рисунка до прежнего размера опять возрастают зернистость и дискретность. Это связано с тем, что при уменьшении разме­ра рисунка часть пикселов была удалена из исходного изображения и потеряна безвоз­вратно, а при последующем восстановлении размеров рисунка недостающие пикселы дублировались из соседних.

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

4.4. Сжатие изображений

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

- групповое сжатие;

- кодирование методом Хаффмана;

- сжатие по схеме LZW;

- арифметическое сжатие;

- сжатие с потерями;

- преобразование цветов RGB в цвета YUV.

В основе большинства схем сжатия лежит использование одного из следующих свойств графических данных: избыточность, предсказуемость и необязательность. В частности, групповое кодирование (RLE) основано на использовании первого свойства. Кодирование по методу Хаффмана и арифметическое кодирование, основанные на ста­тистической модели, используют предсказуемость, предлагая более короткие коды для более часто встречающихся пикселов. Алгоритмы сжатия с потерями основаны на из­быточности данных.

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

 

Рассмотрим подробнее несколько алгоритмов сжатия.

Групповое сжатие

Групповое сжатиепредставляет собой одну самых простых схем сжатия файлов. Суть его заключается в том, что серия повторяющихся величин заменяется единственной ве­личиной и ее количеством. На примере можно заметить выгоду в длине между «aabbbbbbbcdddeeeeaaa» и «2а7b1c3d4e3a». Данный алгоритм прост в реализации и хо­рошо сжимает графические файлы с большими однотонными областями. Групповое коди­рование используется во многих форматах растровых файлов, таких как TIFF, PCX и т. д.

Кодирование методом Хаффмана

Смысл метода Хаффманазаключается в замене данных более эффективными кода­ми. Более короткие коды используются для замены более часто появляющихся вели­чин. Например в выражении abbbcccddeeeeeeeeef есть шесть уникальных величин, с частотами появления: а:1, b:3, c:3, d:2, e:9, f:l. Для образования минимального кода используется двоичное дерево. Алгоритм объединяет в пары элементы, появляющиеся наименее часто, затем пара объединяется в один элемент, а их частоты объединяются. Это действие повторяется до тех пор, пока элементы не объединятся в пары. В данном примере надо объединить а и f – это первая пара, а присваивается нулевая ветвь, a f – 1-я. Это означает, что 0 и 1 будут младшими битами кодов для а и f соответственно. Более старшие биты будут получены из дерева по мере его построения.

Суммирование частот дает в итоге 2. Теперь самая низкая частота – 2, поэтому пара а и f объединяется с d (которая тоже имеет частоту 2). Исходной паре присваивается нулевая ветвь, a d – ветвь 1. Таким образом, код для а заканчивается на 00; для f на 01, d заканчивается на 1 и будет на один бит короче по сравнению с кодами для а и f.

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