Алгоритмічні основи комп'ютерної графіки

Побачити «невидиме»

Зовсім недавно на полицях книжкових магазинів з'явилися книги і журнали з дивними картинками, при цьому продавці стверджують, що на них, крім безладно розкиданих плям, можна побачити ще щось. Попотівши з півгодини над цими картинками і виконуючи вказівки, даними в журналі, ви, нарешті, побачите прихований образ і не пошкодуєте про витрачені зусилля. Далі ми розповімо, як можна їх дивитися, як вони виходять, а також пропонуємо програму, яка будує такі зображення, а так само алгоритм цієї програми.

У 60-ті роки доктор Белла Юдеш, намагаючись осягнути казуси і закономірності людського сприйняття, створив за допомогою комп'ютера тривимірні зображення на папері # 151; картинки, що складаються з хаотично розташованих точок. Хаотичними вони здавалися лише на перший непідготовлений погляд. Після деякого тренування з хаосу проступали контури предмета. Але тільки через тридцять років, завдяки широкому розповсюдженню комп'ютерів, бум картинок з прихованим зображенням охопив весь світ.

Як навчитися бачити «невидиме»?

Що б навчитися дивитися картинки такого роду екрану монітора недостатньо. Краще звичайно починати вчитися дивитися такі картинки на аркуші паперу. Є хороший спосіб. Візьміть в руки лист (це може бути книга, газета, або щось ще) і наблизьте його максимально близько до обличчя так, щоб він стосувався кінчика носа. Не намагайтеся сфокусувати ваш погляд на зображенні. Представте собі, що перед вами немає ніякого листа з картинкою # 151; нічого, і дивіться як би крізь скло вікна (ви ж не помічаєте скла, коли дивитеся у вікно, але чітко бачите пейзаж за склом). Розслабте ваші очі і поступово починайте рухати від носа цю картинку, але, повторюю, не фокусуйте погляд на зображенні. Нехай зображення буде каламутним. Рухайте картинку, поки ваші очі не сфокусуються на якійсь конкретній точці малюнка. Після цього проробляти цю операцію заново доти, поки приблизно на відстані 20-30 см ваші очі перестануть фокусуватися в якійсь конкретній точці картинки (це станеться далеко не відразу # 151; Будьте терплячі). Якщо у вас це вийде, то є ви зможете дивитися крізь неї, коли вона знаходиться на відстані 30-ти см, прдолжайте перебувати в такому положенні. Поступово зображення почне проявлятися, але очі не будуть дивитися в одну точку. Це нам і треба # 151; ліве око повинен дивитися на одну точку, а правий # 151; правіше на кілька сантиметрів. Після цього, коли зображення проясниться, а очі будуть дивитися на «різні» (віддалені один від одного на деяку відстань) точки, перед вами з'явиться справжнє об'ємне зображення.

Для початку можна спробувати з простого вправи: візьміть олівець або ручку, тримайте його за нижній кінець вертикально на відстані 15-20 см від кінчика носа так, щоб верхній кінець олівця був на рівні очей. Тепер подивіться на який-небудь віддалений предмет, ви побачите, що олівець як би роздвоївся, якщо, звичайно, ви не перевели погляд на нього. Якщо ви навчилися легко «роздвоювати» олівець, спробуйте виконати інше завдання: намалюйте на аркуші паперу дві точки, розташовані на одній горизонталі на відстані 2-3 см один від одного. Спробуйте дивитися як би крізь лист так, щоб кожна точка роздвоювалася точно так же, як це відбувалося з олівцем. Оскільки кожна точка роздвоїлась, ви можете побачити чотири точки. Легко помітити, що відстань між середніми точками залежить від того, наскільки глибоко занурений ваш погляд. Спробуйте зробити так, щоб середні точки злилися. Як тільки вам це вдалося, ви готові до розглядання картинок з прихованим зображенням. У ньому роль точок гратимуть повторювані елементи картинки.

Як це зроблено?

Алгоритм побудови стерео-картинок досить простий. Людина, яка має два очі, може оцінити відстань до предмета і серед кількох речей виділити більш наближені і більш віддалені. Це пов'язано з властивістю людських очей, а точніше, сприйняттям мозку положення очей. Іншими словами, якщо з кожного ока «провести два променя», якими подивитися на предмет, то в точці, на яку дивляться очі, ці «промені» перетнуться. Мозок, зіставляючи кути повороту цих «променів», робить відповідні висновки про відстані до предмета. А якщо спробувати обдурити очі (мозок)? Саме це і відбувається, коли дивишся на таку картинку.

А як очі знаходять точку, в якій треба «перетнути промені»? Дуже просто # 151; в кожному оці формується своя картинка. Обидві вони схожі один на одного, але відмінності є # 151; одне око може бачити якийсь фрагмент, а іншому в цей момент може заважати яке-небудь перешкоду. Мозок максимально схожі фрагменти цього малюнка намагається поєднати в один, але для цього в кожній точці йому доводиться міняти кути «променів», інакше ці фрагменти не співпадуть. На стерео-картинці такими фрагментами є пікселі, а точніше їх кольору.

Давайте поглянемо на рис. 33.1. Уявіть, що це ви. Точка c знаходиться ближче точки d. Мозок це розуміє, порівнюючи кути AcB і AdB. Не дарма ми згадали і про те, що в очах трохи різні картинки, і що мозок змінює кути для знаходження схожих ділянок. Так як точка d одна, а очі два, то в кожному оці вона і буде тим фрагментом, в якому треба перетнути «промені», тобто в одному оці її зображення буде схоже і на зображення її ж в іншому оці (це ж одна і та ж точка).

Тепер спробуємо обдурити мозок. Поставимо перед собою картинку, яку слід перетворити в стерео. Як треба розставити на ній точки, щоб обдурити очі? Зверніть увагу на точки a b і e g. Щоб око побачив подібні ділянки (точки), вони повинні бути однакові (хоча іноді і це правило можна обійти, але досить складно зробити, хоча цілком реально, адже мозок шукає подібні фрагменти не тільки за кольором, але і за формою). Дивлячись на цю книжку, бачиш точку c далі поверхні листа, а точку d ще далі. Таким чином, на плоскому аркуші паперу (екрані монітора) з'являється об'ємне зображення, що знаходиться як би за аркушем паперу. Це-то нам і треба. Виходить, що чим ближче один до одного розташовані однакові точки (або цілі фрагменти), тим вони здаються нам ближче в просторі. Ще раз погляньте на малюнок і подивіться, де перетинають промені аркуш паперу, де надалі вони самі перетнуться, і яке при цьому буде відстань точок перетину променів з папером. Сподіваємося, що вам зрозумілий основний принцип обману людських очей і мозку.

Тепер розглянемо алгоритм, за яким програма будує картинки. Для простоти позначимо «вихідний обсяг» за ІВ, а Background за БГ. Перш за все треба створити поле для малювання (зсуву точок для освіти стерео). Роль такого поля буде виконувати малюнок, що вийшов в результаті розмноження БГ. Таким чином ми отримаємо вже стерео-картинку, але тільки з заднім (найвіддаленішим) фоном. Ширину БГ будемо називати періодом. Зрушувати можна з будь-якого боку, а можна від центру, але для простоти пояснення будемо це робити зліва направо. Опрацюємо одну точку ІВ. Не дарма БГ повинен мати чорно-білу палітру: це потрібно для алгоритму побудови # 151; чим світліше точка, тим її номер повинен бути більше. Новомосковський точку з ІВ. Запам'ятовуємо її номер (позначимо його буквою Н). Потім звертаємося до рядка малюнка розмноженого БГ. Починаємо зрушення: першу точку, що відповідає положенню тієї ж точки в ІС, не чіпаємо, а точку, взяту через період, зрушуємо вліво на Н точок. Потім зрушує точку, взяту через два періоду на Н точок, через три і так далі до кінця рядка.

Таким чином, ми отримуємо рядок точок, розставлених на однаковій відстані одна від одної, але тільки дві точки розташовані ближче один до одного, ніж інші. Проробляємо цю операцію з наступними точками, тим самим отримуємо стерео-рядок. Проробляємо те ж саме з точками в наступному рядку і так далі. Отримуємо стерео-картинку.

Найбільшого ефекту приховане зображення досягає не в тих випадках, коли воно складно і хитромудро, а в тих, коли його зміст пов'язаний з фоном або іншими явними елементами зображення. Саме гра на двох сенсах, прихованому і видимому відразу, дає можливість створювати дотепні сюжети.

Натиснувши на посилання. ви ввійдете в галерею зображень, побудованих за принципом «третього ока».