- •Українська академія друкарства
- •Лабораторний практикум
- •«Теорія цифровИх зображень»
- •Загальні вказівки
- •Лабораторна робота № 1 Ознайомлення з алгоритмічними основами побудови елементарних зображень Основні положення
- •Растрова розгортка в реальному часі
- •Групове кодування
- •Клітинне кодування
- •Буфери кадру
- •Адресація растру
- •Зображення відрізків
- •Зображення літер
- •Заповнення багатокутників
- •Растрова розгортка багатокутників
- •Простий алгоритм із впорядкованим списком ребер
- •Більш ефективні алгоритми з упорядкованим списком ребер
- •Алгоритм заповнення по ребрах
- •Алгоритм зі списком ребер і прапорцем
- •Алгоритми заповнення з приманкою
- •Простий алгоритм заповнення з приманкою
- •Простий алгоритм заповнення
- •Порядковий алгоритм заповнення з приманкою
- •Порядок виконання роботи
- •Простий метод усунення східчастого ефекту
- •Згортка й усунення східчастості
Растрова розгортка в реальному часі
При розгорненні в реальному часі або «на льоту» сцена довільно представляється в термінах візуальних атрибутів і геометричних характеристик. Типовими візуальними атрибутами є колір, відтінок і інтенсивність, тоді як координати х, у, кути нахилу і текст відносяться до геометричних характеристик. Останні є упорядкованими по координаті y. Під час відтворення кожного кадру процесор сканує цю інформацію й обчислює інтенсивність кожного піксела на екрані. При такому розгорненні не потрібні великі обсяги пам’яті. Вимоги до пам’яті, як правило, обмежуються необхідністю зберігати дисплейний список плюс один скануючий рядок. Більше того, оскільки інформація про сцену зберігається в довільно організованому дисплейному списку, додавання або видалення інформації зі списку здійснюється легко, а це зручно для динамічних застосувань. Однак складність виведеного зображення обмежується швидкістю дисплейного процесора. Як правило, це означає, що кількість відрізків або багатокутників у картині, кількість перетинів зі скануючим рядком або число кольорів чи півтонів сірого є обмеженою.
Для одержання перетинів (якщо вони є) кожного відрізка дисплейного списку зі скануючим рядком у найпростішій реалізації методу всякий раз при зображенні рядка обробляється весь дисплейний список. При регенерації відеозображення на кожен скануючий рядок, а значить, і на обробку всього списку припадає тільки 63.5 мікросекунди. Такий малий час дозволяє використовувати даний метод тільки для рисування нескладних малюнків. Оскільки в загальному випадку не кожен відрізок у сцені перетинає кожен скануючий рядок, то кількість обчислень може бути скорочена шляхом запровадження списку активних ребер (САР). Цей список містить ті відрізки зображення, які перетинають скануючий рядок.
Для організації і управління САР можна використовувати ряд методів. Спочатку відрізки зображення сортуються по найбільшій координаті y. В одному з простих методів такого сортування використовуються два покажчики, які переміщаються у відсортованому списку. Покажчик початку використовується для позначення початку списку активних ребер, а покажчик кінця — для позначення кінця цього списку. На рис. 5.1, а представлена сцена з декількох відрізків із трьома характерними скануючими рядками. На рис. 5.1, б показаний типовий відсортований список відрізків фігури. Покажчик початку у початковому положенні встановлюється на початок цього списку, тобто на відрізок BC. Покажчик кінця встановлений на той останній відрізок у списку, який починається вище розглянутої скануючого рядка, що розглядається, тобто на відрізок BD. При скануванні зображення необхідно коректувати САР, при цьому покажчик кінця пересувають вниз, щоб включити до списку нові відрізки, які починаються на поточному скануючому рядку або вище нього. У той же самий час покажчик початку пересувають вниз, щоб виключити відрізки, які закінчуються вище поточного скануючого рядка. Це зображено на рис. 5.1 для скануючих рядків, позначених цифрами 2 і 3 на рис. 5.1, а. Рисунки 5.1, в і г ілюструють проблему, яка виникає в цьому простому алгоритмі. Порядок сортування відрізків, які починаються з однієї і тієї ж координати y, впливає на розмір списку активних ребер. Наприклад, відрізок ВC на рис. 5.1, г ніколи не залишить цей список. В результаті може оброблятися більше інформації, ніж насправді необхідно.
Рис. 5.1. Простий список активних ребер.
Цю й аналогічні проблеми можна усунути шляхом запровадження додаткової структури даних. При цьому можна спростити також обчислення перетинання кожного відрізка зображення зі скануючими рядками. Спочатку виконується групове сортування по у всіх відрізків зображення. При груповому сортуванні по y2 (рис. 5.2, б) просто створюються області або пам’яті групи для кожного скануючого рядка. Якщо, наприклад, застосовується 512 скануючих рядків, то використовується 512 груп. При перегляді відрізків у дисплейному списку інформація про кожен відрізок поміщається в групу, яка відповідає найбільшій величині координати y для відрізка. Для простого чорно-білого контурного зображення необхідно записувати тільки координату х точки перетинання з груповим скануючим рядком, х — зміна цієї координати х при переході від одного скануючого рядка до іншого, і у — кількість скануючих рядків, які перетинаються відрізком. Для простих зображень більшість з у-груп буде порожньою.
Список активних ребер для поточного скануючого рядка формується додаванням інформації з y-групи, яка відповідає цьому рядку. Координати х точок перетинання сортуються в порядку сканування, і ребра із САР перетворяться в растрову форму. Після цього для кожного відрізка із САР у зменшується на одиницю. Якщо у < 0, то відрізок виключається зі списку. І нарешті, для кожного відрізка координата х точки перетинання для нового скануючого рядка утворюється додаванням до колишнього значення величини x. Цей процес повторюється для всіх скануючих рядків. На рис. 5.2, с наведено САР для скануючих рядків 3, 5 і 7 з простої сцени на рис. 5.2, а.
Рис. 5.2. Групове сортування по y, список активних ребер і структура послідовного індексованого списку
Якщо використовується фіксований розмір y-груп, то для перетинань з кожним скануючим рядком виділяється фіксований обсяг пам’яті. Таким чином, максимальна кількість перетинань з довільним скануючим рядком визначена заздалегідь і, отже, складність зображення є обмеженою. Одним з методів, які дозволяють подолати це обмеження, може служити використання як структури даних послідовного індексованого списку. У цьому випадку кожна y-група містить тільки покажчик на розташування в структурі даних інформації для першого відрізка з групи (тобто того, який починається на цьому скануючому рядку). На рис. 5.2, г показані послідовний індексований список і структура даних для рис. 5.2, а. У цій конкретній ситуації передбачається, що дані для поточного скануючого рядка вибираються групами по три доти, доки не зустрінеться порожнє посилання або знак завершення.
Метод визначення перетинань відрізків зі скануючими рядками дає непогані результати для вертикальних і майже вертикальних відрізків. Однак для майже горизонтальних відрізків буде обчислено дуже мало точок перетинання, що приведе до неприйнятного зображення відрізка. Як простий розв’язок можна запропонувати визначати перетинання на двох послідовних скануючих рядках і активувати всі пікселі між точками перетинань, як це показано на рис. 5.3. Для горизонтальних відрізків використовуються кінцеві точки.
Рис. 5.3. Простий метод растрового розгорнення для майже горизонтальних відрізків
Оскільки все зображення обробляється для кожного відеокадру, розгорнення в реальному часі застосовується тільки для високо інтерактивної графіки. При використанні групового сортування по у відрізки можуть бути додані або вилучені з дисплейного списку простим додаванням або видаленням їх з відповідної у-групи і зв’язаної з нею структури даних. Як показано вище на рис. 5.2, б, це легше всього зробити для у-груп фіксованої довжини. Для зручності додавання і видалення відрізків у сцені використовується структура даних у вигляді зв’язного списку (рис. 5.4). Зазначимо, що для зв’язного списку на рис. 5.4, б, вимагаються ознаки кінця кожної групи даних і посилання на наступну групу для розглянутого скануючого рядка, наприклад елемент 4, а також ознака завершення зв’язку. При додаванні відрізка BD список модифікується так, як показано на рис. 5.4, г. Інформація про відрізок BD додається до кінця списку даних. Дисплейний процесор спрямовується в цю комірку за допомогою модифікованого посилання з комірки 8. Якщо тепер відрізок ВC видаляється з фігури, список модифікується так, як показано на рис. 5.4, е. Зазначимо, що посилання в комірці 4 модифіковане для того, щоб обійти комірки, які містять інформацію про відрізок ВC.
Рис. 5.4. Групове сортування по y і зв’язний список для випадку інтерактивної графіки.
Цей простий приклад ілюструє основні ідеї для модифікації зв’язного списку в інтерактивних графічних системах. Однак тут не наведені всі необхідні подробиці. Наприклад, повинно бути очевидно, що довжина списку буде постійно рости, якщо тільки «загублені» комірки (з 5 по 8 на рис. 5.4, е) не будуть знову використані або список не буде стиснутим. Додаткову інформацію про зв’язні списки і структури даних можна знайти, наприклад, у [2-12].
Оскільки алгоритм, який працює в таких жорстких обмеженнях на час обробки одного відеокадру програмно реалізувати важко, то успішні програмні реалізації використовуються, в-основному, в імітаційних системах, таких як, авіаційні тренажери, навігаційні тренажери для суден і т.п.
