Оглавление Дополнительное чтение Учебник «Компьютерная графика» Что такое линия. Кривая Пеано Технология, побеждающая воображение

Увидеть «невидимое»

Совсем недавно на полках книжных магазинов появились книги и журналы со странными картинками, при этом продавцы утверждают, что на них, кроме беспорядочно разбросанных пятен, можно увидеть еще что-то. Попотев с полчаса над этими картинками и следуя указаниям, данным в журнале, вы, наконец, увидите скрытый образ и не пожалеете о затраченных усилиях. Далее мы расскажем, как можно их смотреть, как они получаются, а также предлагаем программу, строящую такие изображения, а так же алгоритм этой программы.

В 60-е годы доктор Белла Юдеш, пытаясь постичь казусы и закономерности человеческого восприятия, создал с помощью компьютера трехмерные изображения на бумаге — картинки, состоящие из хаотически расположенных точек. Хаотическими они казались лишь на первый неподготовленный взгляд. После некоторой тренировки из хаоса проступали очертания предмета. Но только спустя тридцать лет, благодаря широкому распространению компьютеров, бум картинок со скрытым изображением охватил весь мир.

Как научиться видеть «невидимое»?

Что бы научиться смотреть картинки такого рода экрана монитора недостаточно. Лучше конечно начинать учиться смотреть такие картинки на листе бумаги. Есть хороший способ. Возьмите в руки лист (это может быть книга, газета, или что-то еще) и приблизьте его максимально близко к лицу так, чтобы он касался кончика носа. Не пытайтесь сфокусировать ваш взгляд на изображении. Представте себе, что перед вами нет никакого листа с картинкой — ничего, и смотрите как бы сквозь стекло окна (вы ведь не замечаете стекла, когда смотрите в окно, но отчетливо видите пейзаж за стеклом). Расслабьте ваши глаза и постепенно начинайте двигать от носа эту картинку, но, повторяю, не фокусируйте взгляд на картинке. Пусть изображение будет мутным. Двигайте картинку, пока ваши глаза не сфокусируются на какой-то конкретной точке рисунка. После этого проделывайте эту операцию заново до тех пор, пока примерно на расстоянии 20-30 см ваши глаза перестанут фокусироваться в какой-то конкретной точке картинки (это произойдет далеко не сразу — будьте терпеливы). Если у вас это получится, то есть вы сможете смотреть сквозь нее, когда она находится на расстоянии 30-ти см, прдолжайте находиться в таком положении. Постепенно изображение начнет проявляться, но глаза не будут смотреть в одну точку. Это нам и надо — левый глаз должен смотреть на одну точку, а правый — правее на несколько сантиметров. После этого, когда изображение прояснится, а глаза будут смотреть на «разные» (удаленные друг от друга на некоторое расстояние) точки, перед вами появится настоящее объемное изображение.

Для начала можно попробовать с простого упражнения: возьмите карандаш или ручку, держите его за нижний конец вертикально на расстоянии 15-20 см от кончика носа так, чтобы верхний конец карандаша был на уровне глаз. Теперь посмотрите на какой-нибудь удаленный предмет, вы увидите, что карандаш как бы раздвоился, если, конечно, вы не перевели взгляд на него. Если вы научились легко «раздваивать» карандаш, попробуйте выполнить другое задание: нарисуйте на листе бумаги две точки, расположенные на одной горизонтали на расстоянии 2-3 см друг от друга. Попытайтесь смотреть как бы сквозь лист так, чтобы каждая точка раздваивалась точно так же, как это происходило с карандашом. Поскольку каждая точка раздвоилась, вы можете увидеть четыре точки. Легко заметить, что расстояние между средними точками зависит от того, насколько глубоко погружен ваш взгляд. Попробуйте сделать так, чтобы средние точки слились. Как только вам это удалось, вы готовы к рассматриванию картинок со скрытым изображением. В нем роль точек будут играть повторяющиеся элементы картинки.

Как это сделано?

Алгоритм построения стерео-картинок достаточно прост. Человек, имеющий два глаза, может оценить расстояние до предмета и среди нескольких вещей выделить более приближенные и более отдаленные. Это связано со свойством человеческих глаз, а точнее, восприятием мозга положения глаз. Другими словами, если из каждого глаза «провести два луча», которыми посмотреть на предмет, то в точке, на которую смотрят глаза, эти «лучи» пересекутся. Мозг, сопоставляя углы поворота этих «лучей», делает соответствующие выводы о расстоянии до предмета. А если попробовать обмануть глаза (мозг)? Именно это и происходит, когда смотришь на такую картинку.

А как глаза находят точку, в которой надо «пересечь лучи»? Очень просто — в каждом глазу формируется своя картинка. Обе они похожи друг на друга, но отличия есть — один глаз может видеть какой-то фрагмент, а другому в этот момент может мешать какое-нибудь препятствие. Мозг максимально похожие фрагменты этого рисунка пытается совместить в один, но для этого в каждой точке ему приходится менять углы «лучей», иначе эти фрагменты не совпадут. На стерео-картинке такими фрагментами являются пиксели, а точнее их цвета.

Давайте взглянем на рис. 33.1. Представьте, что это вы. Точка c находится ближе точки d. Мозг это понимает, сравнивая углы AcB и AdB. Не зря мы упомянули и о том, что в глазах немного разные картинки, и что мозг меняет углы для нахождения похожих участков. Так как точка d одна, а глаза два, то в каждом глазе она и будет являться тем фрагментом, в котором надо пересечь «лучи», то есть в одном глазу ее изображение будет похоже и на изображение ее же в другом глазу (это же одна и та же точка).

рис. 33.1

Теперь попробуем обмануть мозг. Поставим перед собой картинку, которую следует превратить в стерео. Как надо расставить на ней точки, чтобы обмануть глаза? Обратите внимание на точки a b и e g. Чтобы глаз увидел подобные участки (точки), они должны быть одинаковы (хотя иногда и это правило можно обойти, но довольно сложно сделать, хотя вполне реально, ведь мозг ищет подобные фрагменты не только по цвету, но и по форме). Смотря на данную книжку, видишь точку c дальше поверхности листа, а точку d еще дальше. Таким образом, на плоском листе бумаги (экране монитора) появляется объемное изображение, находящееся как бы за листом бумаги. Это-то нам и надо. Получается, что чем ближе друг к другу расположены одинаковые точки (или целые фрагменты), тем они кажутся нам ближе в пространстве. Еще раз взгляните на рисунок и посмотрите, где пересекают лучи лист бумаги, где в последствии они сами пересекутся, и какое при этом будет расстояние точек пересечения лучей с бумагой. Надеемся, что вам понятен основной принцип обмана человеческих глаз и мозга.

Вы можете скачать программу MagicEye, создающую такие картинки. Программа MagicEye предназначена для создания стерео-картинок, используя два графических файла — черно-белую картинку в формате BMP («исходный объем» — ИО) и длинную тонкую полоску в формате BMP, но уже в цвете — текстуру (Background — БГ). После ввода пользователем имен этих файлов в специальных диалоговых окошках программа выполняет трансформацию их в одну — стерео-картинку. Для того, чтобы программа работала корректно, важно правильно использовать ее возможности. ИО должен быть в формате BMP и иметь 256 цветов. Палитра должна быть черно-белая, то есть чем светлее точка, тем ее номер должен быть больше. Это нужно для простоты создания картинок. Чем светлее точка, тем она будет ближе в стерео-картинке. Также для создания стерео-картинок необходим и другой графический файл — БГ. Собственно из размноженного БГ и получается требуемое изображение. Он, как и ИО, должен иметь формат BMP и 256 цветов, но уже с произвольной палитрой. Подробнее о БГ и других вещах читайте в файле readme.txt, который идет в составе программы.

Алгоритм

Теперь рассмотрим алгоритм, по которому программа строит картинки. Для простоты обозначим «исходный объем» за ИО, а Background за БГ. Прежде всего надо создать поле для рисования (сдвига точек для образования стерео). Роль такого поля будет выполнять рисунок, получившийся в результате размножения БГ. Таким образом мы получим уже стерео-картинку, но только с задним (самым удаленным) фоном. Ширину БГ будем называть периодом. Сдвигать можно с любой стороны, а можно от центра, но для простоты объяснения будем это делать слева направо. Обработаем одну точку ИО. Не зря БГ должен иметь черно-белую палитру: это нужно для алгоритма построения — чем светлее точка, тем ее номер должен быть больше. Читаем точку из ИО. Запоминаем ее номер (обозначим его буквой Н). Затем обращаемся к строке рисунка размноженного БГ. Начинаем сдвиг: первую точку, соответствующую положению той же точки в ИО, не трогаем, а точку, взятую через период, сдвигаем влево на Н точек. Затем сдвигаем точку, взятую через два периода на Н точек, через три и так далее до конца строки.

Таким образом, мы получаем строку точек, расставленных на одном расстоянии друг от друга, но только две точки расположены ближе друг к другу, нежели остальные. Проделываем эту операцию со следующими точками, тем самым получаем стерео-строку. Проделываем то же самое с точками в следующей строке и так далее. Получаем стерео-картинку.

Наибольшего эффекта скрытое изображение достигает не в тех случаях, когда оно сложно и замысловато, а в тех, когда его смысл связан с фоном или другими явными элементами изображения. Именно игра на двух смыслах, скрытом и видимом сразу, дает возможность создавать остроумные сюжеты.

Щелкнув по этой ссылке, вы войдете в галерею изображений, построенных по принципу «третьего глаза».

Что такое линия. Кривая Пеано Технология, побеждающая вообра...