- •Українська академія друкарства
- •Лабораторний практикум
- •«Теорія цифровИх зображень»
- •Загальні вказівки
- •Лабораторна робота № 1 Ознайомлення з алгоритмічними основами побудови елементарних зображень Основні положення
- •Растрова розгортка в реальному часі
- •Групове кодування
- •Клітинне кодування
- •Буфери кадру
- •Адресація растру
- •Зображення відрізків
- •Зображення літер
- •Заповнення багатокутників
- •Растрова розгортка багатокутників
- •Простий алгоритм із впорядкованим списком ребер
- •Більш ефективні алгоритми з упорядкованим списком ребер
- •Алгоритм заповнення по ребрах
- •Алгоритм зі списком ребер і прапорцем
- •Алгоритми заповнення з приманкою
- •Простий алгоритм заповнення з приманкою
- •Простий алгоритм заповнення
- •Порядковий алгоритм заповнення з приманкою
- •Порядок виконання роботи
- •Простий метод усунення східчастого ефекту
- •Згортка й усунення східчастості
Адресація растру
Для простоти викладу будемо вважати, що піксель у растрі або буфері кадру має двовимірні координати х і у, як це показано на рис. 5.13. Цифрова пам’ять, проте, організована в один лінійний список адресатів, і тому необхідне, таким чином, перетворення координатного представлення в лінійне. Припустимо, що початкова адреса в пам’яті не дорівнює нулю, тоді перетворення задається формулою
В обчисленні першого члена бере участь кількість рядків. Другий член додає адресу в рядку, а останній — початкову адресу. Піксель ідентифікується координатами свого лівого нижнього кута.
Рис. 5.13. Система координат растру
Приклад 5.1. Адресація растру
Розглянемо
піксель з координатами (3,2) у невеликому
растрі на рис. 5.13. Тут
,
причому перший піксель з лівого нижнього
кута зберігається в першій комірці
пам’яті; база або початкова адреса
дорівнює 1. Отже, адреса піксела
обчислюється по формулі
Даний результат можна перевірити безпосереднім підрахунком квадратів на малюнку.
Ця ж схема працює й у випадку, коли позитивна вісь х спрямована вправо, а позитивна вісь у — униз, за умови адресації піксела відносно лівого верхнього кута.
Як
правило, для заданого буфера кадру
величини
і базова адреса є постійними. Рівняння
можна переписати у вигляді
де
Обчислення адреси піксела, отже, вимагає тільки двох додавань і одного множення. При послідовній адресації пікселів для подальшого зменшення роботи, пов’язаної з визначенням адреси, можна використовувати покрокові обчислення. Зокрема,
Тут для горизонтального або вертикального приросту в растрі потрібно тільки одне додавання або віднімання, а для діагонального збільшення — тільки два додавання або віднімання. Операція множення є повністю виключеною з обчислень.
Приклад 5.2. Покрокова адресація растру
Розглянемо піксел з координатами (4.2) растра на рис. 5.13. Тут
Згадавши результат для піксела (3, 2) у попередньому прикладі і використавши покрокові обчислення, одержимо
Зображення відрізків
Подібна адресація буфера кадру дозволяє поводитися з ним як із графічним дисплеєм на запам’ятовуючій трубці. Спочатку буфер кадру очищається або встановлюється у фонову інтенсивність або колір. Замість того, щоб записувати вектори прямо на екран дисплея, для розкладання в растр відрізка застосовується або алгоритм Брезенхема, або ЦДА і відповідні піксели записуються в буфер кадру. Коли зображення або кадр є побудованими, дисплейний контролер читає буфер кадру в порядку сканування рядків і виводить результат на відеомонітор.
Вибіркове
стирання відрізків можна реалізувати
за допомогою повторного використання
алгоритму розкладання в растр і
записування відповідних пікселів з
фоновою інтенсивністю або кольором.
Проблема, яка виникає при використанні
даного методу, ілюструється на рис. 5.14.
Якщо відрізок, який видаляється, перетинає
інший відрізок, то в останньому з’явиться
розрив. На рис. 5.14, а
показані два відрізки, які перетинаються.
Якщо горизонтальний відрізок
стирається за допомогою записування
пікселів з фоновою інтенсивністю або
кольором у буфер кадру, то в результаті
в іншому відрізку з’явиться розрив у
піксела (5, 5). Знайти і заповнити розриви
не становить труднощів, треба тільки
визначити перетинання відрізка, який
видаляється, із всіма іншими відрізками
в зображенні. Дана операція для складного
зображення може зайняти багато часу.
Рис. 5.14. Вибіркове стирання відрізків у буфері кадру.
Для зменшення витрат можна використовувати оболонковий або мінімаксний тест. Цей метод проілюстрований на рис. 5.15. Відрізок ab можуть перетинати тільки ті відрізки, які проходять через намальовану пунктиром прямокутну оболонку, сформовану з мінімальних і максимальних значень координат х, у відрізка ab. Тести для кожного відрізка виглядають наступним чином:
Рис. 5.15. Оболонковий або мінімаксний тест
Мінімаксний або оболонковий тест
