КГ_1глава (1024098), страница 5
Текст из файла (страница 5)
WORD bfReserved2 — зарезервировано, пока что равно 0.
DWORD bfOffBits — адрес битового массива в данном файле.
Далее в файле следует еще один заголовок— BITMAPINFOHEADER, в котором хранится описание размеров растра и цветового формата пикселов. Здесь имеются такие поля:
DWORD biSize — размер заголовка, равен 40.
LONG biWidth — ширина растра в пикселах.
LONG bffleight — высота растра в пикселах.
WORD biPlanes — должно быть равно 1.
WORD biBitCount — бит на пиксел, может быть 1, 4, 8, 16, 24 или 32.
DWORD biCompression — равно нулю.
DWORD biSizelmage — размер в байтах битового массива растра.
LONG biXPelsPerMeter — разрешение по X в пикселах на метр.
LONG biYPelsPerMeter — разрешение по Y в пикселах на метр.
DWORD biClrUsed — если равно 0, то используется макс, число цветов.
DWORD biCIrlmportant — равно 0, если biClrUsed = 0.
Затем в файле помещается палитра в виде записей RGBQUAD. Каждая запись содержит четыре поля.
BYTE rgbBlue — цветовая компонента В, от 0 до 255.
BYTE rgbGreen — компонента G.
BYTE rgbRed — компонента R.
BYTE rgbReserved — не используется, равно 0.
Количество записей RGBQUAD равно количеству используемых цветов. Палитра отсутствует, если число бит на пиксел равно 24. Также палитра не нужна и для некоторых цветовых форматов 16 и 32
Здесь приняты такие обозначения для типов полей:
BYTE — однобайтовое целое число без знака. I WORD — двухбайтовое целое число без знака.
DWORD — четырехбайтовое целое число без знака.
LONG — четырехбайтовое целое число со знаком.
После палитры (если она есть) в файле BMP записывается растр в виде битового (а точнее, байтового массива). В битовом массиве последовательно записываются байты строк растра. Количество байт в строке должно быть кратно четырем, поэтому если количество пикселов по горизонтали не соответствует такому условию, то справа в каждую строку дописывается некоторое число битов (выравнивание строк на границу двойного слова).
Сжатие изображений в файлах BMP отсутствует, однако подобный формат (Device Independent Bitmap) описания растровых изображений также используется и для файлов типа DIB, где применяются простейшие алгоритмы сжатия RLE (Run Length Encoding) [61]. Алгоритмы RLE также используются и в других популярных растровых графических форматах, например PCX.
Описание других графических форматов можно найти в литературных источниках, например [2], а также в сети Internet.
1.4. Методы улучшения растровых изображений
Рассмотрим некоторые из существующих методов улучшения качества изображений, которые основываются на субъективном восприятии разрешающей способности и количества цветов. При одних и тех же значениях технических параметров устройства графического вывода можно создать иллюзию увеличения разрешающей способности или количества цветов. Причем субъективное улучшение одной характеристики происходит за счет ухудшения другой.
Устранение ступенчатого эффекта
В растровых системах при невысокой разрешающей способности (меньше 300 dpi) существует проблема ступенчатого эффекта (aliasing). Этот эффект особенно заметен для наклонных линий — при большом шаге сетки растра пикселы образуют как бы ступени лестницы.
Рассмотрим это на примере отрезка прямой линии. Вообще говоря, растровое изображение объекта определяется алгоритмом закрашивания пикселов, соответствующих площади изображаемого объекта. Различные алгоритмы могут дать существенно отличающиеся варианты растрового изображения одного и того же объекта. Можно сформулировать условие корректного закрашивания следующим образом — если в контур изображаемого объекта попадает больше половины площади ячейки сетки растра, то соответствующий пиксел закрашивается цветом объекта (С), иначе— пиксел сохраняет цвет фона (Сф).
На рис. 1.32 показано растровое изображение толстой прямой линии, на которое для сравнения наложен идеальный контур исходной линии.
Устранение ступенчатого эффекта называется по-английски antialiasing. Дня того чтобы растровое изображение линии выглядело более гладким, можно цвет угловых пикселов "ступенек лестницы" заменить на некоторый оттенок, промежуточный между цветом объекта и цветом фона. Будем вычислять цвет пропорционально части площади ячейки растра, покрываемой идеальным контуром объекта. Если площадь всей ячейки обозначить как S, а часть площади, покрываемой контуром, — Sx, то искомый цвет равен
На рис. 1.33 показано сглаженное растровое изображение, построенное указанным выше методом.
Методы получения сглаженных растровых изображений можно разделить на J. две группы. Первую группу составляют алгоритмы генерации сглаженных изображений отдельных простейших объектов — линий, фигур. Некоторые f из таких алгоритмов описаны в [33].
Другую группу методов сглаживания составляют методы обработки уже нарисованного изображения. Для сглаживания растровых изображений часто используют алгоритмы цифровой фильтрации. Один из таких алгоритмов — локальная фильтрация. Она осуществляется путем взвешенного суммирования яркостей пикселов, расположенных в некоторой окрестности текущего обрабатываемого пиксела. Можно представить себе, что в ходе обработки по растру скользит прямоугольное окно, которое выхватывает пикселы, используемые для вычисления цвета некоторого текущего пиксела. Если окрестность симметрична, то текущий пиксел находится в центре окна (рис. 1.34).
Базовую операцию такого фильтра можно представить так:
где Р — значение цвета текущего пиксела, F— новое значение цвета пиксела, К— нормирующий коэффициент, М— двумерный массив коэффициентов, который определяет свойства фильтра (обычно этот массив называют маской).
Размеры окна фильтра: (jmax - jmin + 1) по горизонтали и (imax – imin + l)— по вертикали. При imin,jmin=-1 и imax,jmax=+1 имеем фильтр с окном 3x3, который часто используется на практике.
Для обработки всего растра необходимо произвести указанные выше вычисления для каждого пиксела. Если в ходе обработки новые значения цвета пикселов записываются в исходный растр и вовлекаются в вычисления для очередных пикселов, то такую фильтрацию называют рекурсивной. При нерекурсивной фильтрации в вычисления вовлекаются только прежние значения цвета пикселов. Нерекурсивность можно обеспечить, если новые значения записывать в отдельный массив.
На рис. 1.35 представлены результаты работы двух вариантов сглаживающего нерекурсивного фильтра с окном (маской) 3x3.
Значение нормирующего коэффициента здесь выбрано равным сумме элементов маски. Этим обеспечивается сохранение масштаба яркости преобразованного растра. Заметьте, что маска — это не матрица, а массив коэффициентов, располагающихся соответственно пикселам окна. Средний фильтр можно задать и маской 2x2 — отбросить нулевые коэффициенты.
При сглаживании цветных изображений можно использовать модель RGB и производить фильтрацию по каждой компоненте.
С помощью локальной цифровой фильтрации можно выполнять достаточно разнообразную обработку изображений— повышение резкости, выделение контуров и многое другое [31, 34].
Дизеринг
Хорошо, когда растровое устройство отображения может прямо воссоздавать тысячи цветов для каждого пиксела. Не так давно это было проблемой даже для компьютерных дисплеев (а точнее -— для видеоадаптеров). Современные растровые дисплеи достаточно качественно отображают миллионы цветов, (благодаря чему без проблем можно отображать цветные фотографии. Но для 1 растровых устройств, которые печатают на бумаге, положение совсем дру-I гое. Устройства печати обычно имеют высокую разрешающую способность j'(dpi), часто на порядок большую, чем дисплеи. Однако нельзя непосредственно воссоздать даже сотню градаций серого для пикселов черно-белых фотографий, не говоря уже о миллионах цветов. Вы можете возразить, что в ! любой газете или журнале мы видим иллюстрации. Возьмите лупу и посмотрите, например, на изображение любой напечатанной фотографии. В большинстве случаев можно увидеть, что оттенки цветов (для цветных изображений) или полутоновые градации (для черно-белых) имитируются комбинированием, смесью точек. Чем качественнее полиграфическое оборудование, тем меньше отдельные точки и расстояние между ними.
Иногда отдельные точки на фотографии нельзя различить даже с помощью лупы, что может быть в таких случаях — или нам посчастливилось увидеть печать многими сотнями красок, или разрешающая способность устройства печати очень высокая. Оба варианта пока что не встречаются. Однако, безусловно, с течением времени будут изобретены способы печати если не многими тысячами красок (что маловероятно), то хотя бы красками, которые плавно изменяют свой цвет, или будет изобретена бумага с соответствующими свойствами [51].
Для устройств печати на бумаге проблема количества красок достаточно важна. В полиграфии для цветных изображений обычно используют три цветных краски и одну черную, что в смеси дает восемь цветов (включая черный и белый цвет бумаги). Встречаются образцы печати большим количеством красок — например, карты, напечатанные с использованием восьми красок, однако такая технология печати намного сложнее. Состояние дел с цветной печатью можно оценить также на примере относительно простых офисных принтеров. Недавно появились струйные принтеры с шестью цветными красками вместо трех. В таких принтерах в состав обычных CMYK-красок добавлены бледно-голубая, бледно-пурпурная и бледно-желтая краски (семицветные принтеры). В шестицветных принтерах отсутствует бледно-желтая краска [43]. Увеличение количества красок значительно улучшило качество печати, однако и этого пока явно мало.
Если графическое устройство не способно воссоздавать достаточное количество цветов, тогда используют растрирование — независимо от того, растровое это устройство или не растровое. В полиграфии растрирование известно давно [14, 21]. Оно использовалось несколько столетий тому назад для печати гравюр. В гравюрах изображение создается многими штрихами, причем полутоновые градации реализованы или штрихами различной толщины на одинаковом расстоянии, или штрихами одинаковой толщины с переменной густотою расположения. Такие способы используют особенности человеческого зрения и в первую очередь— пространственную интеграцию. Если достаточно близко расположить маленькие точки различных цветов, то они будут восприниматься как одна точка с некоторым усредненным цветом. Если на плоскости густо расположить много маленьких разноцветных точек, то будет создана визуальная иллюзия закрашивания плоскости некоторым усредненным цветом. Однако если увеличивать размеры точек и (или) расстояние между ними, то иллюзия сплошного закрашивания исчезает — включается другая система человеческого зрения, обеспечивающая нашу способность различать отдельные объекты, подчеркивать контуры. В компьютерных графических системах часто используют эти методы. Они позволяют увеличить количество оттенков цветов за счет снижения пространственного разрешения растрового изображения. Иначе говоря— это обмен разрешающей способности на количество цветов. В литературе по компьютерной графике такие методы растрирования получили название dithering (дрожание, разрежение).
Простейшим вариантом дизеринга можно считать создание оттенка цвета парами соседних пикселов.
Если рассмотреть ячейки из двух пикселов (рис. 1.36), то ячейка номер 1 дает оттенок цвета