Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры к экзамену.doc
Скачиваний:
6
Добавлен:
27.04.2019
Размер:
511.49 Кб
Скачать

9.Ступенчатый эффект и дизеринг растрового изображения.

Устранение ступенчатого эффекта – антиалиасинг (antialiasing). Растровые изображения очень чувствительны к уменьшению и увеличению. При уменьшении растрового изображения несколько соседних точек преобразуются в одну, и поэтому теряется четкость мелких деталей изображения. При увеличении растрового изображения точки добавляются, в результате нескольким соседним точкам назначается одинаковый цвет, и появляется ступенчатый эффект, который является серьёзной проблемой. Представим растр в виде плотно прижатых друг к другу квадратных ячеек-пикселей, каждая из которых имеет площадь S. Для того, чтобы растровое изображение линии выглядело более гладким, можно цвет угловых пикселей заменить на некоторый оттенок, промежуточный между цветом объекта и цветом фона. Будем вычислять цвет пропорционально части площади ячейки растра Sx, покрываемой идеальным контуром объекта. Формула для расчёта цвета такова:

Здесь C – одна из компонент цвета линии, Cf – аналогичная компонента цвета фона. На рисунке показано увеличенное растровое изображение толстой прямой линии с включенным эффектом антиалиасинга, на которое для сравнения наложен идеальный контур исходной линии. Формула применяется ко всем трём компонентам цвета, например, в палитре RGB.

Для сглаживания растровых изображений обычно используют алгоритмы цифровой фильтрации. Один из таких алгоритмов – локальная фильтрация. Она осуществляется путём взвешенного суммирования яркостей пикселей, расположенных в некоторой окрестности текущего обрабатываемого пикселя (окошко, движущееся по растру). Базовую операцию такого фильтра можно представить так: где P – значение компоненты цвета текущего пикселя, F – новое значение цвета пикселя, К – нормирующий коэффициент, М – двумерный массив коэффициентов, который определяет свойства фильтра (обычно этот массив называют маской). Размеры окна фильтра (jmax-jmin+1) по горизонтали и (imax-imin+1) по вертикали. Если в ходе обработки новые значение цвета пикселей записываются в исходный растр, то они вовлекаются в вычисления для очередных пикселей и такую фильтрацию называют рекурсивной. При нерекурсивной фильтрации просчитываются только исходные значения компонент цвета пикселей.

Эмуляция оттенков цвета – дизеринг (dithering) В компьютерной графике дизеринг используется для создания иллюзии глубины цвета для изображений с относительно небольшим количеством цветов в палитре. Отсутствующие цвета составляются из имеющихся путем их «перемешивания». Метод Дизеринга-для борьбы с нехваткой цветов. Способы реализации м.дизеринга

1.Каждый пиксел заменяется ячейкой из m*n пикселов. Это самое точное преобразование цветов, но размер растра при этом увеличивается и становится равным mp*nq, где p и q – это исходный размеры растра.

2.Размер растра в пикселах не изменяется, если пиксел растра отображения образуется след.образом: 1)опр-ся координаты пиксела для преобразуемого растра. 2)находит цвет пиксела. 3)по цвету пиксела находит номер ячейки, наиболее адекватно представляющий этот цвет. 4)по координатам пиксела, полученным на первом шаге, вычисляют координаты пиксела внутри ячейки. 5)находят цвет пиксела ячейки с координатами, получаемыми на 4м шаге. 6)записывают в растровое отображения пиксел с цветом, найденном на 5м шаге.

10.Особенности преобразования вектор-растр. Алгоритмы прочерчивания отрезков прямых. Пусть заданы координаты (x1,y1) и (x2,y2) концов отрезка прямой линии. Для вывода линии необходимо закрасить в определенный цвет все пикселы вдоль линии. Для того чтобы закрасить каждый пиксел, необходимо знать его координаты.

Наиболее просто нарисовать отрезок горизонтальной линии (y1=y2): для x от x1 до x2 с шагом 1 закрашиваются соседние пикселы (x, y1). (Эта операция достаточно проста и применяется в алгоритмах закрашивания полигонов.)

Аналогично изображается отрезок вертикальной линии.

Горизонтали и вертикали представляют собой частный случай линий. Рассмотрим линию общего вида. Известно несколько методов расчета координат точек линии.

Прямое вычисление координат. Пусть заданы координаты конечных точек отрезка. Координаты внутренней точки отрезка вычисляются следующим образом:

x=f(y): x=x1+(y-y1)(x2-x1)/(y2-y1)

или

y=F(x): y=y1+(x-x1)(y2-y1)/(x2-x1).

В зависимости от угла наклона прямой выполняется цикл по оси x (если |x2-x1|>|y2-y1|) или по оси y (в противном случае).

Для того чтобы свести к минимуму вычисления в цикле, все операции над константами выносятся из тела цикла:

k=(y2-y1)/(x2-x1), yy=y1-x1*k.

В цикле вычисляется y=yy+x*k.

Если учесть, что вычисления выполняются как итеративный процесс, где x на каждом шаге увеличивается на единицу, то вычисления в данном алгоритме еще более упрощаются:

k=(y2-y1)/(x2-x1), y=y1.

Для x от x1 до x2 с шагом 1 вычисляется y=y+k.

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

Положительные черты алгоритма прямого вычисления координат:

*простота, ясность построения алгоритма;

*возможность работы с нецелыми значениями координат отрезка.

Недостатки:

*использование операций с дробными числами или целочисленных операций умножения и деления обуславливает малую скорость;

*при вычислении координат путем добавления приращений может накапливаться ошибка.

Инкрементные алгоритмы. Брезенхэм предложил подход, позволяющий разрабатывать так называемые инкрементные алгоритмы растеризации. Основной целью разработки таких алгоритмов было построение циклов вычисления координат на основе только целочисленных операций сложения/вычитания без использования умножения и деления. Уже известны инкрементные алгоритмы не только для отрезков прямых, но и для кривых линий.

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

Один из вариантов алгоритма Брезенхэма

xerr:=0; yerr:=0;

dx:=x2-x1; dy:=y2-y1;

Если dx>0, то incX:=1;

dx=0, то incX:=0;

dx<0, то incX:=-1;

Если dy>0, то incY:=1;

dy=0, то incY:=0;

dy<0, то incY:=-1;

dx:=|dx|; dy:=|dy|;

Если dx>dy, то d:=dx иначе d:=dy;

x:=x1; y:=y1;

Закрасить пиксел с координатами (x, y);

Выполнить d раз цикл:

xerr:=xerr+dx;

yerr:=yerr+dy;

Если xerr>=d, то xerr:=xerr-d, x:=x+incX;

Если yerr>=d, то yerr:=yerr-d, y:=y+incY;

Закрасить пиксел с координатами (x, y).

Рассмотрим пример работы приведенного выше алгоритма Брезенхэма для отрезка (2;3) - (8;6). Этот алгоритм восьмисвязный, т.е. при вычислении приращений координат для перехода к соседнему пикселу возможны восемь случаев: Известны также четырехсвязные алгоритмы. Они более просты, но генерируют менее качественное изображение линий за большее количество тактов работы. Для приведенного примера четырехсвязный алгоритм работает 10 тактов, а восьмисвязный - только 7:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]