{
glClear(GL_COLOR_BUFFER_BIT, GL_DEPTH_BUFFER_BIT); display_image(i);
glAccum(GL_ACCUM, 1.0/(float)num_images);
}
Использование буфера-накопителя

9.8. Использование буфера-накопителя Мы говорим, что В есть результат свертки {convolving) изображения А матрицей свертки (фильтром) Н. Как правило, на практике используются малые значения т и п, и матрицу Н можно без особого труда представить поэлементно. Схематически процедура фильтрации показана на рис. 9.35. На каждый пиксель а„ в изображении А "накладывается" матрица свертки, и формируется взвешенная сума пикселей, окружающих а,. Значения элементов матрицы свертки - суть веса, с которыми в этой сумме учитываются соответствующие соседние пиксели.

При п=т-\ усредняется обрабатываемый пиксель и восемь его ближайших "соседей", а матрица фильтра имеет размеры 3x3. Варьируя значения элементов матрицы фильтра, можно из этих восьми элементов отбирать те, которые считаете нужными. Например, если желательно учитывать в сумме только четыре из восьми соседних элементов, используйте матрицу фильтра вида

Фильтрация и свертка

Рис. 9.35. Фильтрация и свертка

Такой фильтр помогает сгладить контуры изображения. Можно использовать и более сложный фильтр, в котором центральные элементы включаются в сумму с более высокими весами, чем угловые"images/tmpB6CA-416.png" />

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

Можно использовать и матрицы фильтров большой размерности, кхк, и накапливать к' изображений в буфере-накопителе, причем каждый раз добавлять слегка измененную версию А, варьируя коэффициент в функции д1Ассшп().

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


⇐ Предыдущая| |Следующая ⇒