4. Методы, алгоритмы и форматы файлов компьютерной графики
|
|
|
|
|
|
|
|
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
|
|
|
' . |
|
|
|
0 |
0 |
0 |
3 |
7 |
8 |
12 |
8 |
, |
- |
|
|
|
|
|
* |
|
|
|
|
|
|
|
|
" |
|
|
|
3 7 |
10 13 10 |
7 |
3 0 |
|
|
.—' |
|
|
|
|
|
|
|
|
12 |
7 |
4 |
2 |
0 |
0 |
0 |
0 |
|
|
|
|
|
|
|
|
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
|
|
а |
|
|
|
. |
|
|
|
б |
|
|
|
Рис. 4.40. Сглаживание ступенчатости с использованием части площади пикселов, покрываемой объектом:
а— исходная линия; б — градации яркости растеризованной линии
Вотличие от увеличения разрешения, когда пиксел рассматривается как геометрическая точка, при размытии линий пиксел трактуется как конечная область.
Впростейших алгоритмах сглаживания ступенчатости яркость пикселов вычисляется на основе покрытия объектом пикселов, т. е. вычисляется часть площади пиксела, которая покрывается объектом. В этом случае линия, которая
видеале имеет нулевую толщину, представляется как линия шириной в один пиксел. Предположим, что каждый пиксел имеет 16 градаций яркости (0 — черный цвет, 15 — белый цвет). На рис. 4.40 показано использование части площади пиксела, покрываемой линией толщиной один пиксел.
Геометрические вычисления, необходимые для определения степени покрытия каждого пиксела, могут занять много времени, поэтому разработано много эффективных алгоритмов, которые используют инкрементные вычисления и арифметику целых чисел, т. е. модификации алгоритма Брезенхема.
В более сложных алгоритмах сглаживания ступенчатости используется фильтрация полученных по простым алгоритмам данных, т. е. значение яркости каждого пиксела вычисляется как средневзвешенное значение соответствующего набора соседних пикселов (обычно из восьми ближайших соседей). На каждый ненулевой пиксел поочередно накладывается квадратная маска свертки некоторого фильтра, которую называют оконной функцией. Затем вес каждой клетки умножается на соответствующее значение пиксела, девять произведений складываются и образуют значение яркости обрабатываемого пиксела. На рис. 4.41 приведены примеры масок, используемых в практических алгоритмах. Во всех масках вес центрального пиксела превышает вес соседей, а веса линейно возрастают по мере движения от краев маски к ее центру. Иногда используют большие маски размером 5 х 5 и даже 7x7.
1/16 |
1/16 |
1/16 |
0 |
1/8 |
0 |
1/16 |
1/8 |
1/16 |
1/16 |
1/2 |
1/16 |
1/8 |
1/2 |
1/8 |
1/8 |
1/4 |
1/8 |
1/16 |
1/16 |
1/16 |
0 |
1/8 |
0 |
1/16 |
1/8 |
1/16 |
Рис. 4.41. Примеры масок свертки для сглаживания ступенчатости