Текст
                    & МАТЕМАТИКА
КИБЕРНЕТИКА
Новое
в жизни,
науке,
технике
Подписная
научно-
популярная
серия
Издается
ежемесячно
с 1967 г.
А. А. Веде нов
Математика

стереоизображений
1Г91


в жизни, науке, технике МАТЕМАТИКА КИБЕРНЕТИКА Подписная научно- популярная серия А. А. Веденов МАТЕМАТИКА СТЕРЕОИЗОБРАЖЕНИЙ Издается ежемесячно с 1967 г. СОДЕРЖАНИЕ Введение 3 Гл. 1. Стереовидение 3 С чего начать? 3 Исследования стереовидения 4 Стереоскопы 6 Изготовление стереопар 7 Не все так просто! 8 Гл. 2. Стереопары точно описанных объектов 9 Компьютерные стереопары 9 Трехмерный объект, для которого известно точное описание 9 Фракталы 11 Компьютерное стереокино 13 Гл. 3. Стереорисунок 15 Сканированное изображение и его трехмерная модель 15 Простейшие объекты 17 Интарсия — ушедшее искусство Возрождения 17 Сложные объекты 21 Проблема неоднозначности 30 Гл. 4. Условные стереоизображения 30 Стереоизображения невидимого 30 Стереоизображения непрозрачных объектов 30 Гл. 5. Восстановление сцены по фотостереопаре 30 Восстановление трехмерной сцены по стереопаре 30 Реконструкция сцены с выделением прямых вертикальных линий 32 Реконструкция сцены в интерактивном режиме 33 Заключение 33 Приложение 35 Москва Издательство «Знание» 1991
ББК 22.1 В 26 ВЕДЕНОВ Александр Алексеевич — доктор физико-математических наук, профессор, действительный член Академии естественных наук РСФСР. Редактор И. Г. ВИРКО В 26 Веденов А. А. Математика стереоизображений.— М.: Знание, 1991.— 48 с.— (Новое в жизни, науке, технике. Сер. «Математика, кибернетика»; № И). ISBN 5-07-002199-0 55 к. В брошюре рассказывается, какие новые возможности в стереовидении возникли с появлением персонального компьютера. Используя компьютер, можно строить стереоизображения объектов (в частности, невидимых) с известным расположением в пространстве, рисовать стереорисунки и стерео'картины, восстанавливать по стереопаре трехмерную сцену. Брошюра рассчитана на широкий круг читателей, интересующихся самыми различными проблемами изображения в науке, технике и искусстве. 1602010000 ББК 22.1 ISBN 5-07-002199-0 © Веденов А. А.
ВВЕДЕНИЕ Когда мы смотрим на книжную иллюстрацию или на экран телевизора, рассматриваем в музее картину, мы воспринимаем каждое из этих плоских изображений как объемное, но все-таки получаем более слабое впечатление объемности, глубины изображенных сцен, чем в реальной жизни. Уже около 200 лет люди ищут решение задачи: как на плоском листе, экране, холсте создать изображение, которое выглядело бы как трехмерная копия кусочка реального мира? Один из путей, по которому идут ученые и инженеры,— это стереовидение: создание стереоизображений на стерео- слайдах, различных видах стереооткрыток, развитие стереотелевидения и стереокино. Стереопара дает возможность увидеть запечатленное на плоскости (бумаге, холсте, кино- или телевизионном экране) изображение (полученное художником, фотографом, кино- или ТВ-оператором) части реальной природы так же объемно, как это мы видим в реальном мире. Эта проблема — увидеть запечатленную (уменьшенную или увеличенную) неискаженную копию кусочка трехмерного мира — возникла, по сути дела, потому, что любая форма фотографии, в соответствии с законами преломления света (или других — электронных, рентгеновских — лучей), создает в фоточувствительном материале крайне искаженную, резко сжатую в третьем измерении «копию» трехмерного объекта. Одно из решений этой проблемы и состоит в использовании стереоизображений: стереофотографий, стереоскопических электронных микрофотографий в сканирующем микроскопе и т. п. (голография, по существу, решает ту же задачу: увидеть запечатленный объект или сцену как копию реального объекта или сцены [1]). В этой брошюре рассказывается, какие новые возможности в стереовидении возникли с появлением компьютера и особенно персонального компьютера с его мощной периферией — монитором, сканером, принтером с высоким разрешением. В частности, мы расскажем о создании компьютерных стереоизображений. Используя компьютер, можно: 1) строить стереоизображения объектов, для которых точно известно их расположение в пространстве (эти объекты могут быть и невидимыми — тогда можно строить их условные стереоизображения); 2) рисовать стереорисунки и стерео- картины; 3) редактировать стереофотографии; 4) восстанавливать по фотостереопаре трехмерную сцену. ГЛ. 1. СТЕРЕОВИДЕНИЕ С чего начать! Стереопара — это два изображения одного и того же предмета, рассматривая которые одновременно с помощью стереоскопа (а при определенном навыке и без всякого приспособления), получаешь ощущение такой же глубины изображения, как и при наблюдении самого реального предмета. Изготовить простейшую стереопару самому довольно просто. Чтобы получить, например, стереоизображение прозрачного конуса, можно на белом листе плотной бумаги размером 9,5 смХ7 см дважды обвести карандашом копеечную монету, расположив центры кружков на расстоянии 6 см друг от друга и на вы- 3
и ! О | Pwc. /. Конус соте 2,5 см над нижним краем листка бумаги. Поместив две точки, смещенные соответственно вправо и влево от центров кружков на 1 мм (так, чтобы расстояние между ними составило 5,8 мм), и рассматривая листок в стандартный отечественный стереоскоп (см. описание стереоскопов ниже), мы увидим прозрачный конус: круглый ободок основания и приближенную к нам вершину. (Если стереопара изготовлена на непрозрачной бумаге, рассматривать ее нужно в рассеянном свете, проникающем в щель стереоскопа; чтобы можно было рассматривать стереопару на просвет, нужно нарисовать ее на кальке либо кусочке пергамента). Если, наоборот, раздвинуть эти две точки так, чтобы расстояние между ними составило 6,2 мм, то при рассматривании стереопары мы увидим прозрачный конус с удаленной от нас вершиной. Опыт показывает, что многие люди видят единое объемное изображение, рассматривая стереопару и без всякого стереоскопа (как этому научиться, можно прочитать, например, в [3]). Иллюстрации, приведенные в этой брошюре, можно рассматривать либо невооруженным глазом, либо с помощью стереоскопа — лорнета (см. ниже). На рис. 1 приведена стереопара конуса* . Построим еще несколько простых сте- * Лично я научился видеть помещенные здесь компьютерные стереопары довольно быстро и получил от этого большое удовлетворение. Чтобы научиться видеть стереопару невооруженным глазом, автор предлагает разрезать листок со стереопарой (например, конуса) пополам (по вертикали). Держа половинки стереопары перед собой, нужно мед- реопар, которые можно рассматривать в стандартный стереоскоп. Например, наклоненный в глубину отрезок мы получим, соединив «вершины конусов» на правой и левой половинах стереопары с одним из концов (скажем, верхним) вертикальных диаметров кружков. Усеченную пирамиду можно построить, сместив вправо и влево маленькие квадраты внутри больших. Лежащую на плоскости прямоугольную коробку можно увидеть, сместив вправо и влево квадраты, изображающие заднюю стенку коробки, относительно «передней стенки». Наконец, построив несколько наклоненных под разными углами отрезков, таких, что конец одного является началом следующего, можно сконструировать пространственную ломаную линию и даже «завязать ее узлом». Исследования стереовидения Как мы видим стереопару? Когда человек смотрит на расположенный перед ним небольшой объект Л, говорят, что наблюдатель «фиксирует предмет». Лучи, проходящие от А через хрусталики глаз и попадающие на сетчатку глаз, фокусируются на ней в областях А\ и Л2 (рис. 2). В сознании наблюдателя два образа объекта А (воспринимаемые пра- ленно сдвигать и раздвигать их, фиксируя взгляд на точку примерно в метре позади стереопар. В результате удается найти положение, когда посередине между двумя половинками стереопары появится третье изображение, которое и будет выглядеть объемным. (Примечание редактора.) 4
• Объект Б Объект Я 9 / \ i Л \ I / \ \ J / Оси зрения \\ V АЛ У \ \\ I Расстояния между изображениями различны Рис. 2. Сетчаточная диспаратность вым и левым глазом) «сливаются» в единый образ. При этом угол между «осями зрения» А — А\ и А — Лг (угол конвергенции) и разность смещений изображений А\ и Ач относительно центров сетчаток (диспаратность) служат мерой представления наблюдателя об удаленности предмета А. Лучи от второго объекта Б фокусируются на сетчатке в областях Б\ и Бг, угол конвергенции и диспаратность принимают другие значения, и наблюдатель воспринимает объект Б как удаленный на иное, нежели объект Л, расстояние. Если наблюдатель осознает, что объекты А и Б принадлежат одному предмету, то возникает естественное ощущение протяженности этого предмета в глубину. Исследования зрения человека (и животных) показали, что для восприятия глубины важны два явления — аккомодация и конвергенция. Аккомодация глаза — это его «приспособление к отчетливому видению предметов на различных расстояниях; при помощи глазных мышц хрусталик глаза изменяет свою форму так, что предмет дает отчетливое изображение на сетчатке» [26]. «Видение предметов близких заставляет глаз аккомодировать сильнее, чем это необходимо для фиксации точек, более удаленных. На основании различия в напряжении аккомодации глаза можно видеть и оценивать удаленность различных объектов и при помощи монокулярного зрения. Однако оценка расстояния при монокулярном зрении очень несовершенная и ограниченная. Для точек, удаленных больше чем на 6—8 м, глаз уже не аккомодирует вовсе. Поэтому возможность видеть и тонко оценивать большую или меньшую удаленность предметов и их частей основывается по преимуществу на зрении бинокулярном (зрении двумя глазами). При бинокулярном зрении, кроме аккомодации, видению рельефа способствуют конвергенционные движения и несоответствие изображений на обеих сетчатках. Под конверген- ционными движениями понимаются движения сведения зрительных осей обоих глаз на фиксируемом объекте. Несоответствие сетчаточных изображений обусловливается тем, что один глаз отстоит от другого на некотором расстоянии (около 63 мм) и поэтому видит объект с несколько другой точки зрения» [26]. Однако «конвергенция, как и аккомодация, в стереоскопическом видении решающей роли не играет. Последнее доказывается известным опытом Геринга с оценкой удаленности падающего шарика. Через трубу, закрывающую от нас всю окружающую обстановку, мы фиксируем обоими глазами некоторую точку (например, подвешенный на нити меловой шарик); в это время лицо, производящее опыт, бросает другой белый шарик впереди или позади фиксируемой точки. Поскольку мы смотрим бинокулярно, нам не представляет труда правильно оценить, упал ли шарик впереди или позади фиксируемой точки. Между тем время падения шарика меньше, чем то, которое требуется на произведение аккомодационных или конвергенционных движений. Следовательно, наша оценка удаленности может совершаться хорошо и без их участия» [26]. Одним из основных факторов в стереоскопическом видении является несоответствие изображений на сетчатках двух глаз. «Однако не всякое несоответствие изображений, возникающих на сетчатках, влечет за собой впечатление стереоскопичности объекта. Если это несоответствие слишком велико или если точка предмета, дающая в одном глазу изображение на левой половине сетчатки, в другом глазу дает изображение на 5
Рис. 3. Опыт с двумя спицами правой ее половине, мы получаем впечатление двойственности, видим эту точку двойной. Возьмем две спицы и поставим их одну за другой на расстоянии примерно 15 см друг от друга. Будем при этом фиксировать ближнюю спицу, находящуюся в точке с (рис. 3), тогда дальняя (находящаяся в точке а), увидится нами уже двойной в точках а' и а". При фиксировании же более удаленной спицы (в точке с) раздвоится более близкая (помещенная в точку в) и даст в свою очередь два изображения в' и в". Как можно видеть на рис. 3, в обоих случаях изображение нефикси- руемой спицы падает на разноименные половины сетчаток. Если же несоответствие не слишком велико или же оно односторонне (т. е. раздраженные несоответствующие точки сетчатки в обоих глазах лежат в правых половинах сетчаток или в обоих глазах — в левых половинах), двоения не получается, но получается впечатление третьего измерения, близости или отдаленности предмета сравнительно с фиксируемой точкой. Степень и направление видимой удаленности предмета зависят при этом от так называемого относительного бинокулярного параллакса» [26]. Бинокулярный параллакс р видимой точки А равен углу А\—А—Ач (рис. 2) и при малых значениях p<Cl p = d/L (1) где d — расстояние между зрачками глаз, / — расстояние до точки А. Относительный бинокулярный параллакс dp двух точек А и Б равен dp=d-dl/l2, (2) где dl — разница удаленностей точек А и Б. «Если разность углов, составленных в обоих глазах линией фиксации и направлением, идущим от данной (не фиксируемой) точки через узловую точку глаза, дает угол, лежащий на височной половине сетчатки, мы видим данную точку расположенной ближе, чем фиксируемая. Если же эта разность дает угол, лежащий в носовой половине сетчатки, точка кажется дальше фиксиру- мой» [26]. Как и для других органов чувств человека (например, осязания или слуха), для различения двух точек по удаленности имеется порог; обычно пороговая величина углового параллакса составляет 5 угловых секунд. Этому пороговому значению соответствует предельная дальность (так называемый радиус стереоскопического видения), за которым глаз уже не в состоянии воспринять различий рельефа. В соответствии с формулой (1) величина радиуса стереоскопического видения у разных людей составляет 1 —1,5 км. Стереоскопы Слово «стереоскоп» состоит из греческих стерео — объемный, телесный и скопо — смотрю. По-видимому, стереоскоп был изобретен около 1830 г., еще до первых дагеротипов (1839 г.) В первых стереоскопах до изобретения фотографии помещались только чертежи геометрических тел и несложные перспективные рисунки [2]. Описание различных типов стереоскопов, применявшихся в прошлые годы, можно найти, например, в [3]. В России в начале века выпускались высококачественные стереофотографии (в частности, учебные пособия по географии и зоологии), которые обычно рассматривали в стереоскоп-лорнет [3]. Современные общедоступные отечественные стереоскопы — это «Стерео- скоп-3», стереоскоп «Салют», за рубежом популярен «Viewmaster». Эти стереоскопы используются для рассматривания стереослайдов, изготовленных на цветной 6
й Рис. 4. Стереоскоп Уитстона фотопленке при стереофотосъемке видов природы, городов, памятников архитектуры, игрушечных макетов сказок, макетов технических устройств и т. п. Большая область стереоскопии — стереоскопические космические и аэрофотоснимки [4], расшифровка которых позволяет определять рельеф земной поверхности, строений, инженерных сооружений. Стереоскопические снимки используются в микроскопии [5], медицине [6]. Стереоскоп устроен так, что при рассматривании в него каждый глаз видит только одну из двух картинок стереопары. Если эти картинки соответствуют тому, что видно каждым глазом при рассматривании реального предмета, у наблюдателя возникает ощущение, что он видит реальный, протяженный в глубину объект. Первый стереоскоп изобретен Уитсто- ном в 1833 г. Он представляет собой два зеркала, стоящих под углом друг к другу (рис. 4). Перед одним из них ставится изображение предмета в той проекции, как он видится только левым глазом; перед другим ставится изображение, соответствующее тому, как этот же предмет виден правому глазу. Первое изображение, отражаясь от зеркала, попадает в левый глаз смотрящего, вторые. 5. Стереоскоп Брюстера рое — в его правый глаз. Путем некоторых передвижек изображений перед зеркалами добиваются того, чтобы центральные места изображений упали бы в обоих глазах на соответственные точки сетчаток. В таком случае одностороннее несоответствие изображений прочих частей предмета вызовет у нас впечатление рельефа. В А — В мы увидим одно стереоскопическое изображение предмета, представленного в а — b и ai — b2. Весьма распространен стереоскоп Брюстера (рис. 5). Две карточки, соответствующие проекции предмета для левого й для правого глаза, помещаются в а—б и al — pi, рассматриваются обоими глазами через линзы Р и дают стереоскопическое изображение в А — В [2а]. Стереолорнет представляет собой два стекла для очков (примерно +6 диоптрий, т. е. фокусное расстояние около 16 см), укрепленные на рукоятке так, что, поворачивая оправки стекол вокруг точки крепления к рукоятке, можно менять расстояние между центрами стекол, подбирая наиболее удобное. Изготовление стереопар И стереофотографии, и стереослайды получаются при одновременном фотогра- 7
фировании объекта двумя объективами, разнесенными примерно на 60 мм [7] — расстояние между зрачками глаз человека. Самодельную стереопару прозрачного объекта (стеклянного стакана, мотка жесткой проволоки) можно изготовить, обведя карандашом тень от этого объекта, отбрасываемую на лист бумаги при освещении обычной электрической лампочкой. Обводя тень для левой и правой половин стереопары, нужно повернуть объект примерно на 7 угловых градусов — это угол между осями зрения двух глаз при рассматривании небольшого предмета с расстояния примерно 50 см. Такая стереопара аналогична стереофотографии, ее правая и левая части при рассматривании (в стереоскоп-лорнет, или какой-либо подобный стереоскоп, или невооруженным глазом) должны быть смещены примерно на 6 см. Если уменьшить изображение на каждой из половин такой теневой стереопары до размера 29 ммХ22 мм (это размер окна рамки для стереослайдов отечественных стереоскопов), сфотографировав правое и левое изображение и воспользовавшись для уменьшения размера сканером либо ксерокопировальным аппаратом, можно рассматривать стереопару как стереослайд. Стереопару светящегося объекта, например раскаленной нити обычной лампочки накаливания, можно изготовить с помощью камеры-обскуры [8]. Простейшую камеру-обскуру мы получим, взяв два листа бумаги, расположив их параллельно в вертикальной плоскости на расстоянии в 20—30 см сбоку от 100-ваттной лампочки (лучше в темной комнате) и на расстоянии примерно 10 см друг от друга. Предварительно в листе, ближайшем к лампочке, нужно проделать маленькое (0,5—1 мм) отверстие (как наилучшим образом выбрать величину отверстия, можно прочесть в [8]). Обведя карандашом яркое изображение нити на дальнем листе, повернем ближайший к лампочке лист нашей камеры-обскуры вокруг вертикальной оси, проходящей через середину нити, так, чтобы новое изображение нити на дальнем листе отстояло от старого примерно на 6 см, и снова обведем изображение карандашом. Стереопару можно рассматривать в стереоскоп- лорнет или, если изображение нити умещается в кадр 29 ммХ22 мм, как стереослайд. Не все так просто! Еще в прошлом веке для топографических целей и в военном деле использовался телеостереоскоп Гельмголь- ца — «прибор, назначенный для определения, какие из дальних предметов находятся впереди других. Перед глазными трубочками находятся два зеркальца... на одной линии с ними направо и налево помещены другие два зеркальца, отражающие изображения предметов в первые зеркальца. В каждом из глаз составится изображение отдаленных предметов, и если линейка, на концах которой укреплены крайние зеркальца, имеет 1,5—2 метра длины, то можно судить о том, например, какая из вершин холмов, рисующихся рядом, ближе к наблюдателю» [2]. При этом, однако, «рельеф будет усиленный и может перейти в безобразный для предметов, близких к глазу» [2]. «Увеличить радиус нашего стереоскопического зрения и вообще повысить остроту различения нами рельефа мы могли бы путем увеличения относительного бинокулярного параллакса, соответствующего данным точкам предмета, которые мы хотим стереоскопически различать. По приведенной выше формуле (2), увеличив как-либо межзрачковое расстояние d, мы увеличили бы и dp. Это и достигается в так называемом телеостереоскопе Гельм- гольца» [26]. «При увеличении базы В радиус [стереоскопического зрения] увеличивается как отношение расстояния В между объективами прибора к расстоянию d между глазами. Это отношение B/d называется удельной пластикой прибора. При введении в прибор еще и увеличения w увеличиваются в w раз и предел глазного параллакса (10 угловых секунд), и полная пластика прибора». Обычно в фокальных плоскостях стереоскопических дальномеров «помещены стереоскопические снимки с ряда вех, 8
находящихся на определенных расстояниях от наблюдателя. Смотря в прибор, увидим, что вехи как бы уходят в глубь пространства, и сможем оценить удаление точек обозреваемого ландшафта в зависимости от того, близ которой из вех они придутся» [27]. В наше время приборы такого типа (называемые сейчас гиперскопами) используются для изучения восприятия человеком трехмерного пространства. «Увеличение эффективного расстояния между глазами приводит к увеличению сетчаточной диспаратности — различия в положениях изображений на сетчатках — и разности углов конвергенции, соответствующих рассматриванию разноудаленных предметов. Предположим, вы смотрите на предмет А через гиперскоп так, что предмет Б также находится в поле зрения. Новое различие в положениях предметов на сетчатках принуждает вас считать, что расстояние между предметами по глубине стало больше. Кроме того, вы воспринимаете большую глубину потому, что стала больше разница и в углах конвергенции. Гиперскоп изменяет также видимую высоту и ширину соседних предметов. При нормальных условиях зрения человек привыкает к определенному соотношению между размером изображения предмета на сетчатке и расстоянием до предмета. При наблюдении в гиперскоп предмет кажется уменьшившимся, поскольку угол конвергенции, необходимый для рассматривания его через зеркала, больше нормального значения. Многие знакомые предметы приобретают странные очертания, если рассматривать их в гиперскоп. Например, человеческое лицо утоньшается, а нос выступает вперед. Все предметы сразу же принимают свой нормальный вид, когда вы закрываете один глаз и смотрите в прибор другим глазом. В этом случае вы уже не в состоянии оценивать сетчаточ- ную диспаратность или углы конвергенции и воспринимаете глубину пространства лишь на основе признаков картинности» [9]. Эти эффекты, наблюдаемые при рассматривании в гиперскоп реальных объектов и сцен, можно видеть и в стереоскопе, рассматривая стереопары, снятые фотографом при расстоянии между объективами, превышающем расстояние между глазами человека. Надо упомянуть и об одном своеобразном использовании стереоскопа — в качестве стереокомпаратора, служащего для сравнения одинаковости двух изображений. Если, будучи помещены в установку стереоскопа, они дают одно совершенно плоское, не рельефное изображение, то сравниваемые объекты одинаковы; если же возникает впечатление двоения или. рельефа — между ними имеется различие. Так можно определять подлинность марок, денежных знаков и т. п. Стереокомпараторы позволяют также из сравнения двух снимков, сделанных с разных точек зрения, определить рельеф снятого объекта [26]. ГЛ. 2. СТЕРЕОПАРЫ ТОЧНО ОПИСАННЫХ ОБЪЕКТОВ Компьютерные стереопары С появлением персонального компьютера, снабженного сканером — прибором для оцифровки и ввода в компьютер изображения с листа бумаги — и высококачественным (размер точки 1/300 дюйма) принтером, появилась возможность конструировать компьютерные стереокарточки и стереослайды (аналогичные обычным стереофотографиям и стереослайдам). Конечно, это возможно только в том случае, когда известна трехмерная структура объекта или сцены, стереоизображение которой мы намерены построить. Трехмерный объект, для которого известно точное описание Примером такого объекта может служить любая макромолекула (молекула белка, нуклеиновой кислоты и т. п.), пространственные координаты которой (обычно найденные экспериментально путем численной обработки рентгеновских дифракционных картин от монокристаллов, выращенных из раствора таких молекул) точно известны и, как сейчас принято, хранятся на магнитных лентах так называемого Брукхейвенского 2 сер. Математика № 11 9
банка молекулярных данных. Стереоизображения таких молекул регулярно публикуются в наиболее известных научных журналах, например в журнале "Nature". В файлах Брукхейвенского банка содержатся декартовы координаты всех атомов молекулы. Однако для построения наиболее простой стереопары, дающей общее представление о сложной трехмерной структуре, к примеру молекулы миоглобина, достаточно извлечь из файла координаты лишь полутора сотен так называемых С-альфа атомов углерода, последовательно соединенных в пространственную ломаную линию, образующую «скелет» белковой молекулы. Небольшая часть этих координат (начальный участок С-альфа цепи с указанием названий аминокислот) приведена в Приложении. Пример программы ST_IMAGE на языке BASIC также приведен в Приложении. Основное преобразование, использованное в этой программе для построения стереопары по известным координатам атомов С-альфа углерода, содержится в подпрограмме STEREO. Предполагается, что мы наблюдаем молекулу вдоль оси z, проходящей через ее центр тяжести (координаты его предварительно найдены), а ось х проходит горизонтально (т. е. параллельна прямой, соединяющей зрачки глаз наблюдателя). Для упрощенного расчета координат изображений атомов С-альфа предположим, что изображение на сетчатке глаза получается подобно тому, как оно образуется в камере-обскуре, а роль отверстия камеры-обскуры играет зрачок глаза. Тогда атом с координатами х, yf z будет виден левым глазом так, как если бы он находился в плоскости х в точке с координатами xl = {x—d)L/(L—z)y (3) yl=yL/(L-z), (4) где L — расстояние до центра молекулы, d — расстояние между зрачками. Соответственно для правого глаза x2=(x+d)L/(L—z)y (5) У2=у1. (6) Поэтому одним из вариантов построения стереопары на мониторе компьютера будет изображение левой и правой точек ult v и иг, v: ul = XO + R + mm*xl, ur - XO-R + mm*x2, v = Y0-mm*y 1, где xO, yO — координаты центра монитора, R — расстояние между правой и левой половинами стереопары, mm — масштабный фактор, определяющий размер изображения. Рис. 6. Молекула миоглобина ю
Остальные части программы включают расчет координат центра тяжести, расчет координат при повороте молекулы вокруг различных осей и вывод изображения на экран. Меняя в программе расстояние между двумя половинами стереопары (строка программы с меткой 999, параметр /?), можно подобрать наиболее удобные для себя условия рассматривания. Поскольку число атомов для молекулы миоглобина довольно велико (более 200), для облегчения рассматривания можно либо соединить между собой каждый десятый (или, например, двадцатый) атом, придавая соответствующее значение параметру пп в программе, либо рассматривать ограниченный участок молекулы (рис. 6). Фракталы «Природа сыграла злую шутку с математиками. Ученым XIX в., возможно, не хватало воображения, зато у природы его было достаточно. Те патологические структуры, которые были изобретены математиками, желавшими оторваться от свойственного XIX веку натурализма, оказались основой множества хорошо знакомых, повсюду окружающих нас объектов» [10]. Это высказывание, сделанное десять лет назад известным физиком-теоретиком Ф. Дайсоном, относится к фракталам. Фрактал — это математический объект, имеющий дробную размерность, в отличие от одномерных линий или двумерных поверхностей. Термин «фрактал» был введен Б. Мандельбротом, рассмотревшим много примеров объектов дробной размерности [11]. В основании мандельбротовской теории фракталов лежат труды Ф. Хаусдор- фа (1868—1942) и А. С. Безиковича (1891 — 1970). В своей широко известной книге «Фрактальная геометрия природы» Б. Мандельброт обсуждает такие фрактальные объекты, как береговая линия (Великобритании, Австралии, Южной Африки и др.), государственная граница, рельеф местности, текстура поверхности, космические структуры, годовой расход воды в реке, броуновское движение частицы, а также множество созданных математиками и художниками изображений. После появления книги Мандельбро- та возникла лавина научных статей, авторы которых (чаще всего с полным основанием) стали находить новые примеры фракталов в природе — точнее говоря, в этих статьях утверждается, что многие природные явления и объекты удобно приближенно описывать как фрактальные [12—14]. Сейчас имеется много примеров возникновения фрактальных структур в различных реальных средах и объектах: это дендритный и коллоидный рост твердой фазы из пересыщенного раствора или расплава, так называемые «вязкие пальцы», возникающие на фронте вытеснения нефти из пористых пород водой или воздухом, двумерные «клетки» (цитотипы — эллипсы и гантели), обнаруженные М. Фишером, землетрясения, статические и динамические явления в сыпучих средах, структуры игры «жизнь», обнаруженные П. Баком и К. Ченом, структуры сетчатки глаза, галактические структуры, фрактальная форма растений. Еще одно направление науки о фракталах — это волны в средах, свойства которых случайным или закономерным образом изменяются от точки к точке: например, это электромагнитные волны на поверхности кристалла ниобата лития с нанесенными на ней параллельными штрихами, расстояние между которыми определяется последовательностью Фибоначчи; так называемые фрактоны в стеклах, полимерах, магнитах и аэрогелях. Появилось много работ, посвященных фрактальному движению: перемещение фибробластов человека представляет собой фрактальное броуновское движение: фотонный корреляционный анализ при рассеянии света частицами, внесенными в турбулентный поток жидкости, выявляет фрактальный характер турбулентности; в анизотропной задаче Кеплера (движение электрона донорной* примеси в полупроводнике) проявляются различные фрактальные сценарии динамики гамильтоновой системы. Фрактальные закономерности выяв- 2* И
ляют и суперкомпьютерные расчеты так называемых моделей Кауфмана (широко используемых в последнее время при моделировании иммунной системы) с ближним взаимодействием в применении к задаче о развитии «генетического возмущения» на больших (линейный размер до 3000 ячеек) двумерных решетках. Продолжают появляться статьи по ставшим уже традиционными во фрактальной науке темам: это фрактальная природа разрушения, диффузионно-ограниченный рост, диффузия на фрактальных структурах и электропроводность этих структур. Исследуются концепции фракталов в астрономии и космологии (например, изучается фрактальное распределение галактик), и в искусстве — ученые продолжают создавать эффектные фрактальные пейзажи и проводят фрактальный анализ музыки различных народов и эпох. Недавно была выдвинута и глобальная фрактальная идея — «фрактальная структура эволюции»: все, что мы знаем, включая физические законы и пространство с его симметрией, эволюционирует. Эволюция жизни, разума, материи подчиняется одним и тем же механизмам. В каждой из эволюции возникают самоподобные структуры, схожие со структурами фрактальной геометрии Мандель- брота. Некоторый класс фракталов тесно связан с аффинными преобразованиями. Одно или несколько аффинных преобразований координат х-+х\у у-+у\ точки на плоскости, многократно примененных к исходному относительно простому объекту, дает удивительные изображения, часто близкие к тем, что мы наблюдаем в природе. xl =a*x + b*y + e, yl=c*x + d*y + f, Фрактал «отражение / вращение». Простейший пример стереоизображения случайного фрактала приведен на рис. 7. Этот фрактал [15] строится следующим образом: выбрав начальную точку на плоскости, будем случайно чередовать две операции — отражение точки в плоском зеркале и поворот ее на некоторый постоянный угол вокруг некоторой оси, перпендикулярной выбранной плоскости. Получив новую точку и выведя ее изображение (например, зеленым цветом, если произведено отражение, и красным — если поворот) на экран компьютера, выполняем следующую операцию и т. д. Стереопару строим, помещая зеленые точки в одну плоскость, а красные — в параллельную ей, но находящуюся ближе к наблюдателю. «Папоротник Барнсли». Этот фрактал (см. [10, 16]) представляет собой результат итерации того же типа, что и для фрактала отражение / вращение, только в данном случае случайно чередуются следующие 4 аффинных преобразования х = 0, у = у*.2; х - х*.8 + у*.02, у - -х*.02 + у*.8 + 3*d; х = -х*.15 + у*.2, y = x*.2 + y*.2+1.2*d; х = х*.15-у*.2, у - х*.2 + у*.2 + 3*d, где d — масштабный фактор. Изменяя численные коэффициенты в этих преобразованиях, можно варьировать форму листа. Если ввести третье измерение (см. программу 3D_LEAF.BAS в Приложении), то лист папоротника станет объемным. Изъяв из этой программы строку с меткой 777, можно увидеть папоротник с разноцветными листочками. Стереопара папоротника Барнсли приведена на рис. 8. Идея использования аффинных преобразований для имитации изображений объектов природы была осуществлена М. Барнсли и А. Слоаном для практического представления самых различных изображений (пейзажей, портретов и др.) как набора фракталов. При этом (ценой лишь незначительной потери в точности передачи исходного изображения) достигается сжатие объема цифровой информации в сотни раз — это можно увидеть, если записать изображение папоротника Барнсли на диск и затем сравнить объем получившегося файла LEAF3.PCX (для черно-белого файла около 25 кбайт) с объемом программы 3D_LEAF.BAS (меньше 12
Рис. 7. Фрактал «отражение/вращение» 1 кбайта). Такое сжатие файла может оказаться весьма ценным для уменьшения объема магнитной памяти при хранении информации и для увеличения скорости при ее передаче [16]. «Фрактальные» деревья. Пример программы, рисующей стереоизображение «ветлы», приведен в Приложении. Программа ST_TREE.BAS состоит из нескольких вложенных друг в друга циклов, в которых рисуются ствол и ветви различных порядков (т. е. большие, средние, малые ветви и веточки): for i = 1 to n for m= 1 to nl for 1 = 1 to nl stereo next 11 next 1 next m next i где операция stereo повторяется несколько раз. Дерево строится подобно тому, как строится фрактал — координаты концов ветвей различных порядков в операции stereo являются регулярными функциями номера в циклах по /, т, I, /1 — однако для построения нашего схематического дерева достаточно лишь нескольких шагов в каждом из циклов. Правда, при этом деревья кажутся неестественными, и чтобы дерево приняло естественный вид, необходима модуляция этих регулярных функций с помощью случайных чисел. И сам вид регулярной функции, и глубина модуляции подбираются эмпирически так, чтобы изображение было естественным. Пример стереопары приведен на рис. 9. Программа FIR в Приложении рисует стереопару ели. Персональный компьютер дает еще одну возможность: если построена последовательность компьютерных стереопар, на мониторе компьютера можно наблюдать стереокино. Например, если в обсуждавшейся выше программе ST_IMAGE закомментировать строку с меткой 777', мы сможем наблюдать стереокино, изображающее вращающуюся часть молекулы мио- глобина. Такая же по сути программа ST_CUBE (также приведенная в Прило- for li = 1 to n2 Компьютерное стереокино 13
Рис. 8. «Папоротник Барнсли» Рис. 9 «Фрактальные» деревья жении) позволяет наблюдать вращение куба вокруг любой из пространственных осей: предполагается что ось х лежит горизонтально, а ось у — вертикально в плоскости, параллельной плоскости экрана, ось z перпендикулярна плоскости экрана; все эти оси проходят через центр тяжести куба. Если вместо подпрограммы STEREO 1 использовать подпрограмму STEREO, то вместо ребер вращающегося куба (рис. 10) мы увидим на экране его светящиеся вершины. Программа STCUBE в Приложении создает стереокино — последовательность стереоизображений уменьшающегося, а затем увеличивающегося куба. Помещенная там же программа BROWN создает стереокино трехмерного случайного (броуновского) движения точки, а программа LORENZ — стереокино из- 14
вестного странного аттрактора Лоренца (стереоизображение динамической фазовой траектории). Рассматривать эти фильмы можно либо невооруженным глазом, либо с помощью стереоскопа-лорнета. ГЛ. 3. СТЕРЕОРИСУНОК Сканированное изображение и его трехмерная модель Если точное числовое описание трехмерного объекта (или сцены) отсутствует, но имеется его фотография или рисунок, то это изображение может служить одной половиной стереопары (например, левой), а вторую (правую) половину можно построить, если мы знаем пространственное расположение частей объекта. Можно, конечно, поступить и иначе: считая, например, что исходное изображение представляет собой «вид спереди», рассчитать изображения для правого и левого глаза. Для расчета стереопары нужно прежде всего ввести исходное изображение в компьютер — как говорят, «оцифровать» его с помощью сканера (или видеокамеры с оцифровщиком — граббером). При обработке иллюстрации сканер освещает лист бумаги с иллюстрацией, последовательно измеряет интенсивность лучей, отраженных маленькими Рис. 10. Куб (0,1 ммХ0,1 мм) квадратами листа (таких квадратов в каждой половине нашей стереопары оказывается около 100 000), приписывает интенсивности отраженного света одно из значений в интервале от 0 до 15 и записывает результат в память компьютера. Чтобы отобразить сканированную фотографию на экране монитора, будем ставить в соответствующем каждому квадратику фотографии месте экрана черную или белую точку согласно следующему правилу. Установим некоторое значение порога, равное произвольному числу между 0 и 15, и условимся приписывать точке белый цвет, если значение интенсивности больше порога, и черный — в противоположном случае. Проверяя последовательно все значения ин- тенсивностей, записанные в память, получим изображение фотографии на экране. На рис. 11 приведено стереоизображение барана (из книги [3]) после такой компьютерной обработки сканированной иллюстрации. Для рис. И значение порога было выбрано равным 4. Если изменить это оптимальное значение порога (уменьшить или увеличить его), становится очевидным, что уменьшение числа деталей в стереопаре приводит к потере глубины изображения в различных местах нашего сложного объекта. Видно также, что различные значения интенсивности ответственны за 15
Рис 11 Фотостереоизображение барана Рис. 12. Компьютерное стереоизображение барана появление эффекта глубины изображения в различных местах. Далее, можно заметить, что потеря «понимания» (узнавания целостных частей изображения) не всегда сопровождается потерей ощущения глубины. Наконец, отметим роль «шума в изображении» — исчезновения некоторых точек на одной из половин стереопары или появления лишних точек. Причины появления шума на обработанной компьютером стереопаре многообразны. Прежде всего, при фотосъемке, проявлении, печатании фотографии, создании эскиза фотографии для рисунка в книге, изготовлении оригинала и типографской печати условия создания правой и левой половин пары могли быть несколько различными. Далее, при сканировании двум соответствующим точкам правого и левого изображения могли быть приписаны несколько отличающиеся значения интенсивностей, так что одна из них могла оказаться выше порога, а другая — ниже. Рассматривая стереопары, можно заметить, что влияние «шума» играет 16
большую разрушающую роль для эффекта глубины в стереопарах с меньшим числом элементов изображения. Для сравнения на рис. 12 приведена рассчитанная на компьютере стереопара для этого же объекта: исходным массивом здесь служила левая половина фотостереопары, а пространственное расположение животного, наблюдаемое на фотостереопаре, послужило основой для построения правой половины компьютерной стереопары. При сравнении исходной фотостереопары и построенной компьютерной стереопары видно преимущество последней. Яркости соответствующих точек на ней одинаковы, чего нельзя сказать об исходной стереопаре (различный фотоматериал, бумага, условия воспроизведения) и что резко проявляется при ее введении в компьютер с помощью сканера — различия в яркостях изображений двух половин фотостереопары на экране компьютера (результат «квантования» по координатам и по яркости при сканировании) не только легко различимы глазом, но и трудно исправимы. Таким образом, мы видим возможность редактирования и исправления фотостереопар с помощью сканера и компьютера. Простейшие объекты При конструировании компьютерной стереопары, если мы имеем дело с простым объектом, построенным, к примеру, из отрезков прямых линий, можно, используя компьютер, поступить примерно так же, как при изготовлении простейших стереопар с помощью карандаша, бумаги, циркуля и линейки. Напишем программу, которая будет строить правую половину стереопары, сдвигая отдельные точки на левой ее половине вправо и влево в зависимости от предполагаемой глубины расположения данной точки в пространстве, согласно формулам (3) — (6), и соединяя затем эти точки отрезками прямых. Таким образом можно конструировать на компьютере стереопары конуса, наклоненного к зрителю отрезка, «завязанной в узел» пространственной ломаной и любых других простых объектов, введенных в компьютер с помощью сканера. Попытка построить стереопару по картине или рисунку художника может оказаться значительно менее успешной — это в сильной степени зависит от того, использовались ли художником законы перспективы. Современное учение о перспективе зародилось в эпоху Возрождения, и использованию перспективы в искусстве уделялось в то время большое внимание. Интарсия — ушедшее искусство Возрождения [17] Интарсия, или инкрустация по дереву, была одним из основных искусств Италии во второй половине XV и первой четверти XVI столетия. Искусство, или ремесло, интарсии превратилось в середине XV века из декоративного украшения архитектурных сооружений, по существу, в искусство геометрии. Панели с интарсией часто воспроизводили уличные сцены или реальные или воображаемые архитектурные ансамбли в перспективе, как если бы они были видны в открытое окно. Многие панели размещались на дверцах шкафов. Каждая панель создает иллюзию трехмерной сцены, и это достигается соблюдением законов геометрии при построении сцены. Внезапный расцвет интарсии совпадает по времени с попытками Возрождения дать искусству математическую основу, и история ее возникновения отражает присущее Возрождению слияние искусства, математики и философии. Практическое изготовление панели требовало отобрать и вырезать большое число (около 1000) кусочков эбенового (черного) дерева, кипариса, самшита, грецкого ореха и фруктовых деревьев различного цвета и текстуры, в соответствии с предварительно выполненным рисунком. Помещенные на доску из грецкого ореха, склеенные и лакированные, иногда протравленные или обожженные для усиления контраста или иллюзии глубины, эти кусочки составляли контуры фигур. Рисунок требовал соблюдения законов перспективы. Один из создателей теории, Альберти, писал: «Я рисую прямоугольник, который я рассматриваю как 17
Удолвнноя точка Рис. 13. Перспектива по Альберти Рис. 14. Панель Фра Джиованни открытое окно, через которое виден объект, подлежащий изображению». Альберти рисует фигуру человека, принимает третью часть высоты фигуры за единицу длины, выбирает «исчезающую точку» на высоте головы человека и соединяет ее с масштабными метками на подоконнике. Далее проводится линия горизонта и на ней выбирается «удаленная точка», которая также соединяется с масштабными метками «диагоналями». Пересечение диагоналей с рамкой окна определяет горизонтальные линии, и в результате возникает сетка для изображения различных трехмерных сцен (рис. 13). Известным мастером интарсии был Фра Джиованни да Верона, фото одной из панелей которого приведено на рис. 14. Вверху изображен 72-гранник — символ архитектуры. В центре — инструменты, которые использовались геометрами и практиками интарсии: циркуль, линейка, угольник и правильный треугольник. Инкрустированная надпись на ленте (по гречески): «Таковы инструменты инкрустации». Внизу — mazzocchio, головной убор состоятельных флорентийцев и символ объемной геометрии. Конструкция этого кольца из правильных многогранников, ввиду его сложности, привлекала внимание многих теоретиков (наиболее известны работы Уччелло и Барбаро). При построении перспективы mazzocchio Барбаро использовал, по существу, метод Альберти (рис. 15, а — е). 9 а 'f^^Y V А 9 а h 16 —*г~\< \ /i h f6 9 Юа б л с 12a ei3 / f* g Рис. 15. Построение перспективы 18
Удаленная точка Исчезающая точка Вначале два равносторонних восьмиугольника помещаются на равных расстояниях от вертикальной прямой и соединяются четырьмя горизонтальными линиями, представляющими четыре плоскости mazzocchio, а вершины восьмиугольников помечаются. Далее линии 1—8, 9—16, а — Ли/ — р становятся диаметрами четырех концентрических полуокружностей, каждая из которых 19
Рис 16. Стереопара геометрически правильного mazzocchio l*4v . Рис 17. Стереопара mazzocchio Фра Джиованни делится на равные дуги, как указано на рис. 15, б; концы дуг помечаются и соединяются прямыми отрезками. В результате мы получаем вид mazzocchio сверху. Затем нужно перенести точки, полученные на втором этапе, на конструкцию первого этапа: опускаем вертикальную прямую из этих точек до пересечения с соответствующей горизонтальной линией начальной конструкции. Все точки 9—16 и а — h, например, проецируются на линию, представляющую крышку, и линию, представляющую дно mazzocchio. На следующем этапе, согласно Альберти, каждая из восьми точек 9—16 крышки mazzocchio соединяется с удаленной точкой, и через точки пересечения диагоналей с вертикалью проводятся горизонтальные прямые. Такая же процедура 20
проводится с каждым из двух концентрических многоугольников в каждой из четырех плоскостей. На следующем этапе (см. рис. 15, д) от точек начальной конструкции проводятся вертикальные линии до пересечения с линией, изображающей плоскость крышки mazzocchio, a затем — до исчезающей точки. Пересечения этих последних линий с горизонтальными прямыми предыдущего этапа дают крышку mazzocchio в перспективе; аналогично строится перспектива семи оставшихся плоскостей. Программа 3D_MAZ.BAS, рисующая mazzocchio и его стереопару, приведена в Приложении; эта стереопара изображена на рис. 16, а компьютерная стереопара mazzocchio с панели Фра Джиованни — на рис. 17. Сложные объекты Прежде всего возникает вопрос: где проходит граница между простым и сложным? Известно, что многие художники создают легко узнаваемые персонажи, рисунки различных объектов или явлений природы, обходясь минимальным числом штрихов или точек, хотя эти персонажи, объекты или явления, безусловно, по сути своей являются подчас весьма непростыми. По-видимому, дело в том, что эти персонажи и ситуации привычны, типичны, хорошо известны — и поэтому легко узнаваемы. Говоря о степени сложности изображения, можно говорить о двух ее сторонах: о сложности элементов изображения и о сложности самой сцены (конечно, такое разделение достаточно условно). Рассмотрим сначала отдельный объект и различную сложность элементов. При рассматривании обычного (не стереоскопического) рисунка объемного объекта, состоящего из небольшого числа точек, наше воображение при узнавании «достраивает» рисунок, и мы воспринимаем его как изображение именно объемного объекта, хотя это всего лишь несколько точек на плоском листе (или экране): мы можем объяснить, как расположены, по нашему впечатлению, эти точки в пространстве. Подобный же процесс происходит, когда обычный рисунок объемного объекта состоит из нескольких линий — плоские линии на листе воспринимаются как пространственные кривые. Если на рисунке объемного объекта имеются ограниченные явными линиями двумерные области (либо «пустые», либо в той или иной степени заполненные точками), эти плоские области листа воспринимаются как поверхности, расположенные в трехмерном пространстве. То же происходит, когда эти двумерные области на листе различаются текстурой, освещенностью или цветом, а явных линий, разделяющих их, нет — двумерные области и здесь будут восприниматься как поверхности трехмерных тел. Таким образом, узнавание объемного объекта позволяет воспринимать плоский узор простых или сложных элементов (точек, линий, двумерных областей) обычного (не стереоскопического) рисунка или фотографии как трехмерное тело. Что же касается не отдельного объекта, а сложной сцены, то при ее восприятии возникает иерархия образов: в различных местах трехмерного пространства расположены трехмерные тела, которые сами могут иметь сложные трехмерные составные части или детали, и т. д.— и все это многообразие трехмерных объектов составлено из элементов различной сложности — точек, линий, двумерных областей на плоском листе. Когда мы конструируем компьютерные стереопары, исходя из обычного рисунка или фотографии, мы должны составить представление о пространственной глубине каждой точки изображения, чтобы затем провести построение по формулам (3) — (6). При этом нужно иметь в виду, что между фотографией и рисунком имеется существенное различие: в фотографии всегда сохраняется перспектива, а в рисунке или картине ее может не быть. Анализом изображения художниками внешнего мира на плоском холсте или бумаге занимаются многие искусствоведы. В разные эпохи мастерами использовались разнообразные способы передачи пространственной глубины (см., например, [18]) — от геометрически правильного проецирования видимой или воображаемой трехмерной сцены на пло- 21
скость и до почти полного отказа от такого проецирования. Поэтому попытка построить стереопару по картине или рисунку художника может оказаться значительно менее успешной, чем построение стереопары по обычной (или электронной и т. п.) фотографии — это в сильной степени зависит от того, придерживается ли мастер в своей передаче сцены (или в портрете, натюрморте) законов какой- либо (параллельной, прямой, обратной и т. д.) перспективы. Подходы к анализу (или к построению) стереоизображений различны для различных сцен. Ниже мы рассмотрим примеры построения стереопар, имея в виду наиболее распространенные жанры живописи (а также и фотографии): пейзаж, натюрморт и портрет. Таким образом, конструируя стереопары сложных объектов из исходного изображения, мы должны учитывать три обстоятельства: 1) каковы элементы изображения — точки, линии, двумерные области; 2) какова внутренняя степень сложности сцены; 3) фотография это или рисунок. Пейзаж, натюрморт и портрет: стереоизображения. По-видимому, синтез стереоизображений для случая пейзажа наиболее прост. Здесь, как правило, сцену составляют отдельные объекты, которые в реальности были существенно разнесены по глубине сцены. В различных системах перспективы художники по- разному передавали глубину, и эти особенности нужно учитывать при построении стереопары. На рис. 18 приведена компьютерная стереопара, исходным изображением для которой была часть фотографии картины китайского художника Чен-Тао (XVI—XVII век) «Горный пейзаж». В работах китайских и японских художников, используется «параллельная перспектива» (аксонометрия) — своеобразный компромисс между «истиной отдельного» — предмета — и «истиной целого» — пространства. В первичной клетке, с помощью которой прежде всего выражаются пространственные отношения на плоскости — прямоугольнике,— углы скашиваются, но стороны сохраняют параллельность. В последнем можно усмотреть традицию костантного восприятия. Скошенность углов при параллельности сторон позволяет примирить принцип константности в передаче предмета с принципом связности в передаче пространства. Действительно, в китайских свитках есть общее пространство изображаемого. В отличие от древнеегипетских росписей, где масштабы фигур и предметов зависели от их символических значений, здесь появляется единый масштаб в изображении мира, основанный на представлении о равенстве предметов соответствующих классов» [18]. При построении стереопары в этом случае учтена разная степень удаленности от зрителя различных объектов пейзажа и непрерывность поверхности, на которой растут деревья. На рис. 19 приведена компьютерная стереопара, исходным изображением для которой был рисунок М. В. Добу- жинского «Санкт-Петербург» (фото из монографии [19]). При построении стереопары принималось во внимание то Рис. 18. «Горный пейзаж» 22
Рис. 19. «Санкт-Петербург» Рис. 20. «Дорога» обстоятельство, что на этом рисунке (выполненном с использованием прямой перспективы [18]), ясно видна точка перспективы. Это позволяет сделать предположение о величинах пространственных координат различных объектов, изображенных на рисунке; при этом к построению изображений зданий и, например, облаков, в силу их различной удаленности, необходим различный подход. Подобно этим двум стереопарам, построены и стереоизображения, приведенные на следующих рисунках (рис. 20— 23). Здесь представлены рисунок «Дорога», выполненный А. С. Пушкиным, «Замок» М. Эшера, «Вавилонская башня» П. Брейгеля и фрагмент внутренности разрушенного чернобыльского реактора [20]. На рис. 24 приведена стереопара иллюстрации В. А. Серова к басне И. А. Крылова «Квартет», построенная аналогично стереопейзажу; как в большинстве приведенных в настоящей брошюре компьютерных стереопар, для простоты левой половиной стереопары служит исходная фотография. Своеобразный пример «космического пейзажа» приведен на рис. 25, где изображена стереопара участка Вселенной. Исходным материалом послужила часть обычного (не стереоскопического) изображения, на которой условно изображена Вселенная. Коллекция 2 млн. галактик, собранная астрономами Оксфордского университета, выявила неоднородности распределения галактик во Вселенной, намного превышающие те, что получаются при теоретических оценках [24]. Исходное изображение состоит 23
Рис. 21. «3aiv Рис. 22. «Вавилонская башня» из тысяч пикселов (точек на экране монитора компьютера) различной яркости, причем координаты каждого пиксела однозначно соответствуют координатам некоторого участка неба, а величина яркости пиксела определяет количество видимых в данном направлении галактик: цвет черный, если галактики отсутствуют, серый — от одной до двад- Рис. 23. Чернобыльский реактор цати галактик, белый — больше двадцати галактик. Здесь при построении стереопары использовалось следующее предположение: чем меньше яркость участка неба (полученная при оцифровке фотографии сканером), тем дальше находятся галактики, дающие основной вклад в светимость этого участка неба. 24
Рис. 24. «Квартет» Рис. 25. Вселенная Рис. 26. «Роза» 25
На рис. 26 приведена стереопара, исходным изображением для которой послужила сканированная (черно-белым сканером) цветная фотография натюрморта М. А. Врубеля «Роза». При построении этой стереопары были учтены шарообразность цветка розы, цилиндрич- ность стакана, расположение стебля розы как изогнутой кривой в пространстве. Подобным же образом учитывалось расположение предметов на горизонтальной плоскости стола в другом натюрморте (Р. Фальк, «Натюрморт с фикусом»), стереопара которого приведена на рис. 27. Портрет, с точки зрения построения компьютерной стереопары,— это в некотором смысле противоположный пейзажу случай — здесь очень важно целостное, как говорят, гештальтное (gestalt по-немецки — образ) восприятие картины, с непрерывным переходом частных (также целостных) деталей друг в друга. Малейшие ошибки здесь сразу видны, поэтому при конструировании стереопары портрета необходимо при проведении преобразований координат точек по формулам (3) — (6) следить за тем, чтобы эти преобразования не создавали разрывов в изображении. На рис. 28 приведена стереопара, исходным изображением для которой послужила сканированная (черно-белым сканером) цветная фотография портрета Ф. М. Достоевского кисти В. Г. Перова. Как обстоит дело со стереопарой в случае, когда исходное изображение состоит из небольшого числа точек и линий? На рис. 29 приведена простей- Рис. 27. «Натюрморт с фикусом» Рис. 28. «Ф. М. Достоевский» 26
шая компьютерная стереопара медведя, исходным материалом для построения стереопары послужила обычная фотография. Видно, что и стереоизображение в этом случае может быть тоже простым и легко узнаваемым. На следующих рис. 30—31 представлены стереопары по картине В. А. Серова «Ида Рубинштейн» и рисунку А. Модильяни «Кариатида». Рис. 29. Медведь Рис. 30 «Ида Рубинштейн» Рис. 31. «Кариатида» 27
Шарж и карикатура. Стереокарика- тура. Говоря о портрете и стереопорт- рете, уместно сказать несколько слов о шарже и стереошарже. В [21] описан упрощенный способ получения на компьютере шаржа на какое-либо лицо, использующий преобразование схематического портрета этого лица, построенного из характерных точек лица и линий, соединяющих некоторые из этих точек. Характерные точки — это зрачки глаз (1 точка), радужные оболочки глаз (5 точек), по нескольку точек носа, губ и т. д.— всего около двухсот точек. Исходя из двух таких схематических портретов — объекта и среднестатистического портрета, строим шарж следующим образом. Каждую из характерных точек смещаем (в плоскости) на вектор, пропорциональный (коэффициент пропорциональности. 1 — 5) вектору, соединяющему эту характерную точку на портрете-объекте и на среднестатистическом портрете при их наложении, после чего соединяем нужные точки прямыми. В Приложении приведена Программа CARRY, использующая приведенный там же файл STATFACE и рисующая такое схематическое среднестатистическое лицо. Мы воспользуемся, однако, иным способом, позволяющим строить шарж непосредственно по сканированной фотографии, а именно будем применять локальные преобразования координат точек на сканированном портрете на плоскости, используя ряд таких преобразований. Полученный таким способом шарж «Премьер-министр Уинстон Черчилль» приведен на рис. 32; исходным изображением служило фото из [22]. Стереопара, полученная из этого шаржа, приведена на рис. 33. На рис. 34 приведена стереопара, исходным изображением для которой послужил шарж американского карикату- Рис. 32. Шарж «Премьер-министр Уинстон Черчилль» Рис. 33. «Стереопара «Премьер-министр Уинстон Черчилль» 28
Рис. 34. Писатель Салман Рушди Рис. 35. «Мартышка и очки» Рис. 36. Переплетенные молекулы ДНК 29
риста Д. Ливайна «Писатель Салман Рушди». На рис. 35 приведена стереопара иллюстрации В. А. Серова к басне И. А. Крылова «Мартышка и очки». Здесь при построении стереопары также были использованы представления о положении в пространстве частей тела изображенного художником животного. Проблема неоднозначности На рис. 36 приведена стереопара переплетенных кольцевых молекул ДНК, построенная по электронной микрофотографии (левая половина стереопары). Здесь отчетливо проявляется проблема неоднозначности построения стереопары: при четырех кажущихся пересечениях на фотографии имеется 16 топологически различных вариантов расположения в пространстве этих двух колец ДНК и для выбора правильного, соответствующего действительности варианта необходимы дополнительные сведения. ГЛ. 4. УСЛОВНЫЕ СТЕРЕОИЗОБРАЖЕНИЯ Стереоизображения невидимого Имеется целый ряд величин, которые, являясь невидимыми, меняются в окружающем нас трехмерном пространстве (а также и во времени), и их распределение в пространстве часто интересно для практики. Это, например, интенсивность гамма-излучения естественных или техногенных радиоактивных веществ, абсолютные значения вредных атомарных или молекулярных примесей в загрязненном воздухе, воде, земле или в растениях, распределение температуры и влажности воздуха и т. п. Часто эти величины измеряются тем или иным образом в различных точках пространства, и тогда возможна визуализация этих величин, в частности, построение для них условных стереоизображений. На рис. 37 приведена стереопара, изображающая распределение нейтронного потока в активной зоне идеализированного ядерного реактора: поток= sin (л-х/а) • sin (л-у Ь) X X sin (л-z/c), где х, t/,— декартовы координаты текущей точки, а, Ь, с — размеры активной зоны. Стереоизображения непрозрачных объектов Большое значение придается в настоящее время трехмерной визуализации в различных медицинских диагностиках, в частности в ЯМР,— рентгеновской и ультразвуковой томографии. При этом объекты, трехмерное строение которых определяется, могут иметь характер либо множества пространственных кривых, либо множества искривленных поверхностей. Если в первом случае для визуализации удобно строить обычную компьютерную стереопару, то во втором случае поверхности должны быть полупрозрачными. Пример стереоизображения двух вложенных друг в друга полупрозрачных эллипсоидов вращения («яйцо») приведен на рис. 38. Программа NEUTRON, создающая такое стереоизображение, приведена в Приложении. ГЛ. 5. ВОССТАНОВЛЕНИЕ СЦЕНЫ ПО ФОТОСТЕРЕОПАРЕ Восстановление трехмерной сцены по стереопаре До сих пор мы говорили о построении стереопар (а также о их свойствах, о возможности улучшения их качества). Есть, однако, задача, в некотором смысле обратная задаче построения стереопары,— это анализ оцифрованной фотостереопары и получение информации об изображенной на ней трехмерной сцене. Решение этой задачи нужно для дистанционного определения рельефа поверхности Земли или другой планеты, рельефа морского дна, для автономной навигации передвигающегося робота. Основная идея всех подходов к этой задаче — найти соответствующие (иногда говорят — гомологичные) точки на левой и правой половинах стереопары 30
Рис. 37. Распределение нейтронного потока в реакторе Рис. 38. Стереопара полупрозрачного «яйца» и по расстоянию между этими точками определить локальную глубину данной точки в изображении сцены. Для решения этой задачи за последнее десятилетие было предложено много алгоритмов: иерархические алгоритмы Марра— Поджио—Гримсона, алгоритм взаимного усиления точек одинаковой диспаратно- сти Праздны, ряд нейросетевых алгоритмов, алгоритмы восстановления формы по тени и по изменениям текстуры, фрактальные алгоритмы. 31 Однако задача эта очень сложна и, по-видимому, в настоящее время далека от решения — понимание сцены, изображенной на стереопаре, предполагает наличие в памяти весьма обширных знаний о мире, и возможность формального анализа стереопары без этого знания представляется в общем случае маловероятным. Это, конечно, не исключает возможность создания системы эффективного анализа стереопар для ограниченной предметной области,
например, анализа рельефа, зданий, сооружений, принадлежащих к определенным (известным заранее) категориям. Реконструкция сцены с выделением прямых вертикальных линий. При построении системы анализа стереопар чрезвычайно существенно уменьшить число элементов изображения — для облегчения нахождения соответствующих точек. В качестве примера такого уменьшения числа исследуемых элементов стереоизображения рассмотрим систему, использующую для анализа сцены только прямые линии, присутствующие на стереопаре [23]. Авторы указывают, что для многих сцен контур изображений содержит достаточную для применений информацию, и часто оказывается, что можно анализировать не всю эту информацию, а лишь сведения о прямых линиях, причем особый интерес представляют вертикальные прямые. Это относится, в частности, к сооружениям: зданиям, заводам, улицам, дорогам и т. п. Работа созданной авторами [23] системы иллюстрируется анализом расположения деталей интерьера, исходная стереопара которого (кадр, снятый бинокулярной видеокамерой с расстоянием между объективами 30 см) приведена на рис. 39. Анализ изображения на каждой из половин стереопары дает следующие параметры для каждой вертикальной линии: горизонтальную и вертикальную координату верхнего и нижнего концов линии и тип каждого из концов (рис. 40). При этом тип верхнего или нижнего конца вертикальной линии определяется изучением окрестности этого конца, конкретно — выяснением, с какими линиями граничит исследуемый конец. Наиболее важными параметрами являются координаты верхнего и нижнего концов: например, чтобы две вертикальные линии (на двух половинах стереопары) были гомологичными, необходимо, чтобы вертикальные координаты их верхних концов совпадали (то же относится и к нижним концам). Конечно, это может быть совпадение с точностью до нескольких пикселов, поскольку нужно учитывать, что при съемке двумя объективами видеокамеры и дальнейшей оцифровке изображения возможно появление некоторой ошибки. Существенна также информация о типе конца: если, например, нижний конец некоторой вертикальной линии принадлежит к определенному типу, то гомолог этой линии должен принадлежать к ограниченному набору типов, рис. 41 (точного совпадения типов у гомологов может не быть из-за того, что некоторые части сцены видны только через один объектив). Эта информация используется, если при нахождении гомологов по данным о координатах концов точности не хватает, т. е. возникает неоднозначность; в этом случае используется дополнительная информация о типах концов, облегчающая правильный выбор гомолога. После того как гомологи для всех вертикальных линий найдены, по разнице их горизонтальных координат (по диспа- ратности) определяется расстояние каждой вертикальной линии от камеры и реконструируется вся трехмерная сцена (рис. 42). fc-iiiwilii'rTifai i^L^ii ы шт i 'in ч 1йШ*3*»1 "■...■!- ... I • 4. | ^Шя*мшшШШшЫ1Ш Щштй •'Т*т*цгг Рис. 39. Стереопара интерьера, снятая видеокамерой 32
\J- ^ Ц -* L V J si Ф Л к ) ч] > _ц _\_\ Рис. 40 Типы концов вертикальных прямых Рис 41. Соответствие типов концов линий-гомологов К \ 1 \7fiM \ \ \ \ \ \ \\ 5,2м\\ \ \ > i 6,6м Рис. 42. Реконструкция трехмерной сцены интерьера Реконструкция сцены в интерактивном режиме В ряде случаев для восстановления трехмерной структуры объекта или сцены по стереопаре нужно найти не слишком большое число гомологических точек. В этом случае возможен компромисс — компьютер только помогает человеку, который и отмечает (оцифровывает, ра- Рис. 43. Опубликованная стереопара молекулы лизоцима ботая, например, с мышью) ряд важных пар точек — гомологов на фотостереопаре, выведенной на экран компьютера. Примером может служить восстановление структуры лизоцима по его опубликованной стереопаре (рис. 43); результат реконструкции (стереопара, построенная по найденным координатам для той же точки зрения, что и исходная стереопара) изображен на рис. 44. ЗАКЛЮЧЕНИЕ Обсуждая новое, не вполне осознанное, непонятное, мы часто используем (в переносном смысле) выражения, относящиеся к области зрительного восприятия. «Рассмотреть с разных сторон или с разных точек зрения», «глубинное понимание», «плоское мышление», «одностороннее освещение события» — вот лишь немногие примеры таких выражений. Можно предположить, что и другие понятия, эффекты и явления, о которых мы (в связи с восприятием стереоизображений) упоминали в этой брошюре, имеют более широкое (или глубокое?) значение для нашего мышления. Это соотношение локального и глобального в описании объектов, дефекты описания и их роль в искажении восприятия и понимания сути объектов и явлений, узнавание знакомых объектов (явлений), возможности и механизмы мысленной интерполяции и экстраполяции. Быть может, аналогия со зрительным глубинным восприятием поможет нам глубже проникать в суть вещей. 33
Рис. 44. Реконструированная стереопара молекулы лизоцима Что же касается прикладной стороны вопроса — вероятно, стереоизображения сложных (в частности, невидимых) объектов, стереорисунки и стерео- картины, полученные с помощью компьютера (равно как и стереоиллюстрация и объемное телевидение [25]), найдут широкое применение в науке, технике и искусстве.
ПРИЛОЖЕНИЕ Координаты начального участка С-альфа молекулы миоглобина a$=nmbn2.bas" open а$ for input as #2 gosub 2000 'from file gosub ctr center of gravity:>cl gosub 7000 'a(D=x(i)~xl VAL LEU SER GLU GLY GLU TRP GLN LEU VAL LEU HIS VAL TRP ALA LYS VAL GLU ALA ASP VAL ALA GLY HIS GLY GLN ASP ILE -4.097 -.754 -1.354 .670 2.215 3.552 4.679 6.661 8.479 9.257 10.663 12.600 14.693 15.064 16.393 19.258 19.561 20.066 23.191 25.007 22.600 25.346 26.361 22.807 22.313 25.303 24.464 20.854 ПРОГРАММА screen 9 key(l) on on k ey(l) qos 15.809 13.964 12.311 13.514 10.066 Ю.623 14.093 12.538 10.442 13.417 15.727 13.010 12.608 16.310 16.979 14.838 16.840 20.099 18.657 19.140 21.269 22.506 18.908 17.660 20.833 20.400 16.721 17.439 15.817 17.241 20.591 23.597 23.262 19.745 20.790 23.610 21.023 18.795 21.484 23.325 20.175 19.511 23.012 21.690 18.473 20.368 21.996 18.691 16.655 i4.328 13.469 12.920 10.880 8.565 8.068 7.140 ST__IMAGE ub 1000< 'J sss: for pp=l to 36 o0=3.14/6 if pp<6 then o=o0 else o=-o0 gosub xrot rotation gosub yrot gosub zrot gosub 8000 'x(i)=a(i)+xi delay .5 els Iane(0,0)-(640,350),15,bf gosub stereo 'C-alfa stereoimage gosub 5000 'a(i)=an(i) next pp Ю000 print "END" end xrot: со = cos(o) si = sin(o) for i=l to i3 bn(i) = b(i)*co + c(i)*si cn(i) = c(i)*co - b(i)*si an(i) = a(i) next i return yrot: со = cos(o) si = sin(o) for i=l to i3 num=300 dim x(num), y(num), z(num) dim xl(num)?x2(num),yl(num) dim ul(num)r.ur(num).v(num) dim a(num), b(num), c(num) dim an(num),bn(num)?cn(num) an(i) = a(i)*co + c(i)*si cn(i) = c(i)*co - a(i)*si bn(i) = b(i) next i return d=2 a=320 b=150 zrot: со = cos(o) si = sin(o) for i=l to i3 35
an<i)=a(i)*co+b(i)*si bn(i)=b(i)*co-a(:tf*si cn(i)=c(:tf next i return 5000 for i=l to i3 a(i) = an(i) c(i) = cn(i) b(i) = bn(i) next i return SOOO for i=l to i3 >:(i)=an(i)+xi y(i)=bn(i)+yl z(i)=cn(i)+zl next i return stereo: 999 R=100 1=400 dd=6 mm=6 for i=l to i3 xl(i)=<x(i)-dd)*l/(l-z(i)) x2(i)=(x(i)+dd)*l/(l-z(i)) yl(i)=y<i>*l/(l-z(i)) next i for i=l to i3 ul(i)=(320-R)+mfn*xl(i) ur(i)=(320+R)+mm*x2(i) v(i)=150-mm*yl(i) next i nn=l col=0 for i=l to i3—nn P=ul(i) q=v(i) r=ul(i+nn) 5=v(i+nn) line(p,q)-(r,5)?col pi=ur(i) ql=v(i) rl=ur(i+nn) sl=v(i+nn) lirie(pl,qi)-(ri.sl)-col next i return 2000 for i=i to num-i on error goto 2200 xi=x yl=y zl=z ul=d*(xl-.0*zl) vl=d*(yl-.0*zl) input #2,x input #2,у input #2?z хШ=х V(i)=y z(i)=z u=d*(x-.0*z) v=d*:(y-.0*z) if i=l then 2100 line(a-Hil,b-vlMa+u.Ib--v)j1i4 2100 next i 2200 close #2 locate 1,21 i3=i return ctr: x0=0 yO=0 z0=0 for i=l to i3 x0=x0+x(i) z0=z0+z(i) yO=yO+y(i) next i xl=x0/i3 yl=y0/i3 zl=z0/i3 ul=d*(xi-.0*zl) vl=d*(yl-.0*zi) return 7000 for i=l to i3 a(i) = x(i) - xl b(i) = y(i) - yl c(i) = z(i} - zl next i return ПРОГРАММА 3D_LEAF.BAS key(l) on on key(i) gosub Ю000 screen 9 line(0,OW650,350),15,bf d=15 ttt: r=rnd if r<-05 then gosub 1 end if if r>.5 and r<-9 then gosub 2 end if if r>.9 and r<-95 then gosub 3 end if if r>.95 then gosub 4 end if goto ttt 10000 print "END" end 1 x=0 y=y*.17 col = 11 z=x gosub stereo return r> x=x*.84962+y*.0255 y=-x*.0255+y*.84962+3*d col = 12 z=x gosub stereo return х=-х*Л554+у*.235 y=x*.19583+y*-18648+1.2*d col = 13 z=-x*1.5 gosub stereo return 36
х=х*Л554-у*.235 y=x*.19583+y*.18648+3*d col = 9 z=x*4 gosub stereo return stereo: 999 1 = ЮОО dd = 30 777 col=0 xl= (x-dd) * l/( 1-z ) yl=y * l/< 1-2 ) x2=(x+dd) * l/( 1-z ) y2=y * l/( 1-z ) pset( 100+xl, 350-yl );,col pset( 300+x2 , 350-y2 ),col return ПРОГРАММА 3D TREE key(l) on on key(l) gosub ЮООО screen 9 randomize els line(0,0)-(650?350),15?bf gosub tree ЮООО end tree: sf=.4 x=0 y=0 r5=(l*rnd+0) r6=(l*rnd+0) dx=20*(l+r5)/sf dy=-10*(l+.5*r6}/sf dz=5/sf for i=l to 5 r3=(l*rnd+0) r4=(l*rnd-K» dx=(-l)Ai*dx*<l+.3*r3)/1.3 dy=abs(dy*(l+.3*r4))/l.l dz=dz*(-l}4i u=x+dx*(i/5)-41.0 v=y+dy w=z+dz tt=.4 for s=l to 20/i >IX=M+tt*5 yy=y-tt*s UU=U+tt*S vv=v-tt*s ww=w gosub stereo dwll=0 u!2=u2+dull vl2=v2+dvll wi2=w2+dwll xx=u2 yy=v2 zz=w2 uu=ul2 vv=vl2 ww=wl2 Qosub stereo next s for ml=l to 4 rl=(l*rnd+0) r2=(l*rnd+0) du=rl*1.5*dx dv=r2*2*dy dw=dz*(-l)* m ul=u+du vl=v+dv wl=w+dw xx=u yy=V zz=w ULI=U1 vv=vl ww=wl next 11 next 1 next ml X=Ll y=v z=w next i return stereo: 999 R=1D0 1=100 dd=12 mm=-9 col=15 pil=mm*(xx-dd)*l/(l--zz) plr=mm*(xx+dd)*l/(l-zz) qi=mm*yy*l/(l-zz) gosub stereo for 1=1 to 4 r7=(l*rnd+0) r8=(i*rnd+0) dul=(-l)-^l*r7*l*dx*3/4 dvl=(iri*r8*l*dy*3/4 dwi=„5*dz*(-in u2=ul+dul v2=vl+dvl w2=wl+dwl xx=ul yy=vl zz=wl uu=u2 vv=v2 ww=w2 oosub stereo p21=mm*(uu-dd)*l/(l-ww) p2r=mm*(uu+dd)*l/(l-ww) q2=mm*vv*l/(l-ww) col=0 xl=200+pll yl=350-ql x2=200+p21 y2=350-q2 iine(xl,yl)-(x2,y2),col x3=400+plr у3=350—ql x4=400+p2r y4=350-q2 1зле(хЗ-уЗ)-(х4?у4)-со1 return for 11=1 to 6 rl7=(i*rnd+0> rl8=(l*rnd+0) dull=-(-l)^ll*rl7*l*dx*3/4 dvll=-<i)All*rlS*l*dy*3/4 37
3-D FIR for m=l to 1 key(l) on on key(l) gosub ЮООО screen 9 randomize 2—5 8 10 line(0,0)-(640,350),15,bf gosub fir ЮООО end firs* cO=to cl=ll c2=12 c3=13 a=300 b=3C0 x=0 y=0 2=0 r5=rnd r6=rnd dx=30*(l+r5) dy=-l„5*(l+.5*r6)*2 dz=(l+.5*r5)*dy for i=l to ЗО r3=rnd r4=rnd dx=(-irki*dx*(l+.3*r3)/1.3 dy=abs(dy*(l+.3*r4))/l.l dz=dy u=x+dx/100 v=y+dy w=z+dz tt=.4 for s=l to 20/i xx=x+tt*s yy=y—tt<s zz=z uu=4i+tt*s vv=v-tt*s WW—W col=to gosub stereo next s rl«rnd r2«rnd du«rl*2*dx dv«-r2*3*dy dw=dv ul«u+du vl«v+dv wl=w+dw xx«u yy«V zz-w uu=ul vv—vl ww»wl col=ll gosub stereo for 1«1 to 1 r7=rnd rB=rnd dul=(l)'4l*r7*dx*3 dvl=-(l)'4L*r8*dy*2 dwl=dvi u2=ul+dul v2=vl+dvl w2=wl+dwl xx=ul yy=vl zz=wl uu=u2 w=v2 ww=w2 col=12 gosub stereo for 11=1 to 10'14 r!7=rnd rl8=rnd dull=-<~l)-ni*rl7*l*dx*3/4 dvll=-(l)"ll$rl8*l»dy dwll=dvll$(-l)>4ll ul2=u2+dull vl2=v2+dvll wl2=w2+dwll xx=u2 yy»v2 zz=w2 uu=ul2 vv=vl2 ww=wl2 col«=13 gosub stereo next 11 next 1 38
next m x=u y«v next i return stereo: 999 R=100 1=100 dd=12 nun**.*? pll«mm*(xx-dd)*l/(l-zz) plr=mm*(xx+dd)*l/(l-zz) ql=mm * у у * l/(l-2z) p21«mm*(uu-dd)*l/U-ww) p2r=mm*(uu+dd)*l/(l-ww) q2=mm*vv*l/(l-ww) col=0 line(100+pll,300-ql)- -(100+p21,300-q2),col line(400+plr,300-ql>- -(400+p2r,300-q2),col return ПРОГРАММА ST_CUBE screen 9 key(l) on on key(l) gosub IOOOO n=8 dim x(n), y(n), z(n) dim xl(n),x2(n) dim yl(n),ul(n) dim ur(n),v(n) dim a(n), b(n), c(n) dim an(n),bn(n),cn(n) i3=8 d=2 gosub cube gosub ctr center of gravitysxl gosub 7000 a(i)=x(i)-xl line(0,0)-(650,350),15-bf 555: o0= 3.14 / 90 for pp=l to 180 if pp<90 then o=o0 else o=—oO gosub xrot 'rotation gosub yrot gosub zrot gosub 8000 'x(i)=a(i) + xl fl=0 f2=0 gosub stereol fl=15 f2=15 gosub stereol gosub 5000 'a(i) = an(i) next pp goto sss 10000 print "END" end xrot: со = cos(o) si = sin(o) for i=l to i3 Ьпф = b(i^*co+c(D*si cn(i) = c(i)*co-b(i)*si an(i) = a(i) next i return yrot: со = cos(o) si = sin(o) for i=l to i3 an(i) = a(i)*co+c(i)*si cn(i) = c(i)*co-a(i)*si bn(i) = b(i) next i return zrot: со = cos(o) si = sin(o) for i=l to i3 an(i) = a(i)*co+b(i)*si bn(i) = b(i)*co-a(i)*si cn(i) = сШ
next i return 5000 for i=l to i3 a(i) = an(i) c(i) = cn(i) b(i) = bn(i) next i return 8000 for i=l to i3 x(i)=an(i)+xl y(i)=bn(i)+yi z(i)=cn(i)+zi next i return ctr: x0=0 y0=0 z0=0 for i=l to i3 x0=x0+x(i) z0=z0+z(i) yO=yO+y(i) next i xi=x0/i3 yl=y0/i3 zl=z0/i3 ul=d*(xl-.0*zl> vl=d*(yl-.0*zl) return 7000 for i=l to i3 a(i) = x(i) - xl b(i) = y(i) - yi c(i) = z(i) - zi next i return stereo!: x00=350 R=150 1=100 dd=6 mm=2 for i=l to i3 xl(i)=(x(i)-dd)*l/(l-z(i)) x2(i)=(x(i)+dd)*l/(l-z(i» yi(i)=y(i)*l/(l-z<i» next i for i=l to 13 ul(i)=(x00+R)+mm*xl(i) ur(i)=(x00-R)+mm*x2(i) v(i)=250-mm*yl(i) next i for i=l to i3-l line(ul(i),v(i» -(uKi+l^vd+D^fl line(ur(i),v(i)) -(ur(i+l),v(i+i)),fl line(ul<l>,v<l» -(ul(4):iv(4)):,f2 line(ul(l>.,v(l» ~(и1(6)^(6))^2 lihe(ul(5)5v(5)) ~(и1(8)^(8))^2 line(ul(3),v(3)) -(и1(8)^(8))^2 line(ul(2),v(2)> -(ul(7):iy(7)),f2 line(ur(l),v(l)} -(ur(4),v(4)),f2 line(ur(l),v(l» -(ur(6),v<6)).,f2 line(ur(5),v(5)) -<ur(8),v(8))?f2 line(ur(3),v(3)) -<ur(8)?v<8)).f2 line(ur(2),v(2)) -(ur(7)5v(7»,f2 next i return cube: for i=l to i3 if i=l then x(i)=0 y(i)=0 z(i)=l end if if i=2 then x(i)=0 y(i)=l z(i^=l end if if i=3 then x(i)=l y(i)=l z(i)=l end if if i=4 then хШ=1 y(i)=0 z(i)=l end if if i=5 then x(i)=l y(i)=0 z(i)=0 end if if i=6 then x(i)=0 y(i)=0 z(i)=0 end if if i=7 then x(i)=0 y(i)=l- z(i)=0 end if if i=8 then x(tt=l y(i)=l z(i)=0 end if next i ff=20 for i=l to i3 x(i)=ff*x(i) y(i)=ff*y(i) zW=ff*z(i) next i return stereo: 999 R=100 1=100 dd=6 mm=3 for i=l to i3 xl(i)=(x(i)-dd)*l/(l-z(i)) x2(i)=(x(D+dd)*l/(l-z(i)) yl(i)=y(i)*l/(l-z(i)) next i for i=l to i3 ul(i)=(320+R)+mm*xl(i) ur(i)=(320-R)+mm#x2(i) v(i)=150-mm*yl(i) next i for i=l to i3 psetUiKi^vd)) pset(ur(D,v(i)) next i return 40
STCUBE screen 9 key(l) on on key(l) gosub ЮООО num=8 dim x(num),y(num),z(num) dim xl(num),x2(num),yl(num) dim ul(num),ur(num),v(num) dim a(num),b(num),c(num) dim an(num),bn(num),cn(num) mm=5 i3=8 d=2 gosub cube gosub ctr gosub 7000 line(0,0)-(650,350),15,bf for pp=l to 180 if pp<90 then al= 3.14 / 90 else al= - 3.14 / 90 if pp<10 then gosub xrot end if if pp>=10 then gosub yrot end if gosub 8000 coll=0 col2=0 gosub stereol if pp=25 then delay 2 els line(0,0)-(650,350),15,bf gosub small goto ЮООО end if xrot: со = cos(al) si в sin(al) for i=l to i3 bn(i)= b(i) * со + c(i) t si cn(i) = c(i) t со - b(i) * si an(i) = a(i) next i return yrot: со = cos(al) si =s sin(al) for i=l to i3 an(i) = a(i) * со + c(i) * si cn(i) = c(i) t со - a(i) * si bn(i) = Ьф next i return zrot: со = cos(al) si = sin(al) for i=l to i3 an(i) = a(i) * со + b(i) * si bn(i) = b(i) * со - a(i) * si cn(i) = c(i) next i return coll=15 col2=15 gosub stereol gosub 5000 next pp ЮООО 'print "END" end 5000 for i=l to i3 a(i) = an(i) c(i) « cn(i) b(i) = bn(i} next i. return 41
8000 for i=i to i3 x(i)=an(i)+xl y(i)=bn(i)+yl z(i)=cn(i)+zl next i return stereo: 999 R=100 x0=150 1=100 dd=6 mro=3 for i=l to i3 xl(i)=(x(i)-dd)*l/(l-z<i)) x2(i)=(x(iHdd)*l/(l-z(i)) yl<i)=y<i)*l/(l-z(i)) next i for i=l to i3 ul(i)=(xO+R)+mm*xl(i) ur(i)=(xO-R)+mm*x2<i) v(i)=150-mm*yl(i) next i for i=l to i3 pset(ul(i),v(i)) pset(ur(i),v(i)) next i return ctrs x0=0 y0=0 z0=0 for i=l to i3 xO=xO+x(i) zO=zO+z(i) yO=yO+y(i) next i xl=x0/i3 yl=y0/i3 zl=z0/i3 ul=d*(xl-.0*zl) vl=d*(yl-.0*zl) return 7000 for i=l to i3 a(i) = x(i) - xl b(i) = y(i) - yl c(i) = z(i) - zl next i return stereol: xOO=200 R=150 1=480 dd=6 'mm=5 for i=l to i3 xl(i)=(x(i)-dd)*l/<l-z(i)) x2(i)=(x(i)+dd)*l/(l-z(i)) yl(i)=y(i)*l/(l-z(i)) next i for i=l to £3 ul(i)=(x00+R)+mm*xl(i) ur(i)=(xOO-R)+mm*x2(i) v(i)=300-mm*yl(i) next i for i=l to i3-l line(ul(i),v(i» -(ul(i+l),v(i+l)),coll line(ur(i),v(i)) -(ur(i+l),v(i+l)),coll line(ul(l),v(l)) -(ul(4),v<4)),col2 line(ul(l),v(l» -(ul(6),v(6)),col2 line(ul(5),v(5)) -(ul<8),v(8)),col2 line(ul(3),v(3» -(ul(8),v(8)),col2 line(ul(2),v(2)) -(ul(7),v(7)),col2 line(ur(l),v(l)) -(ur(4),v(4)),col2 line(ur(l),v(l)) -(ur(6),v(6)),col2 line(ur(5),v(5» -<ur(8),v(8)),col2 line(ur(3),v(3» -<ur(8),v<8)),col2 line(ur(2),v(2)) . -(ur(7),v(7)),col2 next i return cube: for i=l to i3 if i=l then x(i)=0 y(i)=0 z(i)=l then if i=2 x(i)=0 y<i)«l z(i)=l end if if i=3 x(i)=l y(i)*l z(i)»l end if if i-4 x(i)«l y(«~o z(i)«l end if if i=5 x(i)=l y(i)=0 z(i)=0 end if if i=6 x(i)=0 y(i)=0 z(i)=0 end if if i=7 x(i)=0 y(i)=l z(i)=0 end if if i=8 x(i*=l y(i>=l z<i*=0 end if next i for i=l to x(i)=x(i>+.5 y<i)=y<i)+.5 z<i)=z(i)+.5 next i ff=10'20 for i=l to x(i)=ff*x(i) y(i>=ff*y(i) z(i)=ff*z(i) next i return then then then then then then small: mm=5 42
for k=l to 225 if k<100 then mm=mm/1.02 else mnv=mm*1.02 coll=0 col2=0 gosub stereol if k=100 then delay 2 coll=15 col2=15 gosub stereol next к coll=0 col2=0 gosub stereol return 3D BROWN key(l) on on key(l) gosub 10000 screen 9 randomize line(0f0M640,350),lS,bf gosub brown 10000 end browns dx=5 dy=5 for m*l to lOOO 1 rl=rnd r2«rnd r3«rnd r4=rnd r5=rnd if r3>„5 then kl«l else kl«-l if r4>.5 then k2»l else k2«-l if r5>-5 then k3=l else k3=-l du=kl*rl*dx dv=-k2*r2*dy dw»—k3*dv if sqr(du>42-t-dvy42+dw^2»3 then 1 else 2 2 ul«u+du vl^v-t-dv wl=w+dw xxeu yy*v zz»w uu=ul vv=vl ww—wl gosub stereo ueul v«=vl w=wl next m x-u yr=V return stereos 999 R=100 b=200 1«100 dd=12 mm=l-9 col«0 pll=mm*(xx-dd)*l/(l-zz) plr«mm*(xx+dd)*l/(l-zz) ql=mm*yytl/(l—zz) p21=mmt(uu-dd)tl/(l-ww) p2r=mm*(uu+dd)*l/(l-ww) q2ssmm*vvtl/(l—ww) on error goto 3 Iine(100+pll,b-ql)-(100+p21,b-q2), col on error goto 3 line(400+plr,b-qlM400+p2r, b-q2),col 3 return 3D LORENZ key(l) on on key(l) gosub ЮООО screen 9 line(0,0)-(640,350),15,bf 43
col=0 gosub lorenz ЮООО end lorenzs al=3-14/7 11=100 m=100 p=4 d=.01 r=27 s=10 b=8/3 x=.l У=-1 z=.l for k=l to 500 delay .1 xl=x+d*(-s*x+s*y) yl=y+d*(-y+r*x-x*z) zl=z+d*(-b*z+x*y) gosub pin x=xl y=yl z=zl next к return pic: со = cos(al) si = sin(al) u=x*co+y*si v = у * со - x * si pset(300+ll+p*(u+z/m), 150+p*v),col pset(300-ll+p*(u-z/m), 150+p*v),col return ПРОГРАММА 3D_MAZ.BA£ key(l) on on key(l) gosub 10000 screen 9 n=8 dim pl(2*n.S) dim pr(2*n.8) dim q(2*n.8) line(0,0)-(650,350),15,bf gosub maz gosub pp gosub qq Ю000 print "END" end maz: a=300 rl=70 al = 3.14 / 4 be = 3-14 / n for i=l to 2*n fi = i * be for j=l to 8 ro = a + rl * cos(al*j) zet = rl * sin(al*:j) x=r o* cos(f i)+50 y=ro*sin(fi)'+200 z=zet-300 gosub stereo next j next i return stereo: 999 R = 150 1 = 800 dd = 6 mm = -25 'h = -ISO xl = (x-dd)*l/(l-y) x2 = (x+dd)*l/(l-y) yl = z*l/(l-y> ul = (320+R) + mmftxl ur = (320-R) + mm*x2 v = 150 - mmfcyi pset(ul,v+h)?col pset(ur,v+h),col pl(i,j)=ul pr(i,j)=ur q(i,j)=v+h return pp: col=0 for i=l to 2*n for j=l to 7 44
linetpKiyj^qdyj)) -<pl(i,j+l),q(i,j+l)),col line(pr(i,j),q(i,j)) -(рг(д,3+1)^(:цз+1)),со1 Нпе(р1(:ц1),ЯСьД))' -(pl(i,8),q(i,8)),col line(pr(i,l),q(i,l)) ~(pr(i,8),q(i,8)),col next j next i return qq: coll=0 for i=l to 2*n-l for j=l to 8 line(pl(i,j),q(i,j)) -(pl(i+l,j),q(i+l,j)),coll lineCprdjj^qdjj» -fpr(i+l,j),q(i+l,j)),coll line(pl(l,j),q(l,j)) -(pl(2*n,j),q(2*n,j»,coll line(pr(l,j),q(l,j)) -(pr(2*n., j),q(2*n, j)),coll next j next i return CARRY key(l) on on key(l) gosub ЮООО screen 9 line(0,0)-(640,350),15,bf col=0 gosub filein gosub pic ЮООО end filein: n=0 dim num(50) dim x(50,20),y(50520) open "statface.bas" for input as #1 for 1=1 to ЗОО if eof(l) then 10=1-1 goto 1 end if input #l,u if u<20 then i=l n=n+l num(n)=u for k=l to input #l,u input #l,v l=k x(n,i)=u y(n,i)=v next к end if next 1 1 close #1 return pic: for n=l to for i=l to line(x(n,i),y< num(n) SO num(n)—1 :n,iW- -(x(n, i+l),y (n, i+1)), col p=num(n) line(x(n,p),y(n,p)) -(x(n,l),y(n,l)),col next i next n return STATFACE3AS 1 135 145 1 190 145 5 134 141 128 144 133 149 140 144 135 141 5 190 141 184 144 189 149 196 144 190 141 3 119 147 133 140 147 146 3 177 147 190 141 203 147 3 121 147 133 ISO 147 146 3 177 147 191 150 201 148 3 118 143 132 137 148 142 3 176 143 191 137 204 143 3 127 154 135 153
144 ISO 3 178 151 187 154 196 154 6 156 140 156 153 156 165 154 172 156 179 161 182 6 166 140 166 153 166 166 168 172 167 179 161 182 6 150 169 147 173 146 178 148 182 153 179 161 182 6 173 169 176 172 177 178 174 182 170 179 163 182 6 112 137 113 132 125 127 139 128 ISO 131 152 136 6 171 136 173 132 186 129 199 128 208 132 211 137 4 112 138 124 132 138 134 152 136 4 171 136 187 134 200 132 210 137 7 137 203 149 199 156 196 162 199 168 197 177 199 187 202 7 138 203 148 203 156 202 163 203 170 202 178 203 186 202 7 138 203 149 203 156 202 163 203 170 202 177 202 186 203 7 141 204 148 207 155 210 163 211 171 210 179 207 185 203 3 103 141 101 160 104 161 3 219 140 222 159 218 179 7 -99 ISO 92 144 88 149 90 160 94 174 99 187 104 184 7 224 149 231 144 234 151 232 160 230 173 224 185 219 184 11 104 181 Ю8 199 115 214 129 228 147 240 162 243 180 239 196 228 207 215 13 lOl 144 107 129 114 114 120 104 131 95 146 92 160 93 174 95 188 96 201 103 210 114 217 126 222 143 13 93 204 78 173 76 142 82 101 99 70 129 46 158 44 188 45 217 64 236 94 245 134 250 168 233 200 3 145 175 139 182 135 190 3 178 176 185 183 190 191 3 105 178 109 184 112 190 3 218 178 214 183 211 189 2 159 186 159 193 2 165 186 165 193 2 162 232 162 238 3 153 218 162 216 173 219 46
3D NEUTRON key(l) on on key(l) gosub ЮООО screen 9 line(0,0)-(640,350),15,bf gosub sphere gosub spherel next i next z return spherel: a=4SO b=150 1=40 n=128 for z=-l to 1 for i=0 to n ЮООО print ••END" end globe: line(0,0)-(640,350),15,bf a=450 b=150 1=100 col=15 for x=-l to 1 for y=-l to 1 r=sqr«x/l)y42+(y/ir2 +(2/1)л2 ) rl=rnd if rl>1.3*r then gosub stereo end if fi=2*3.14*i/n ro=sqr(l~2 -zA2 ) x=ro*sin(fi) y=ro*cos(fi) ri=rnd if rK-07 then gosub stereol end if next i next z return stereo: col=0 pset(x+a-z/5,y+b),col pset(x+a+z/5-300,y+b),col return next у next x return stereol: col=0 pset(x+a-z/5,y+b-20),col pset(x+a+z/5-300,y+b-20),col return spheres a=450 b=150 1=100 n=128 for z=-l to 1 for i=0 to n fi=2*3.14*i/n ro=sqr(l>42 -zA2 ) x=ro*sin(fi) y=ro*cos(fi) rl=rnd if rK-07 then 'pset(x+a,y+b),col gosub stereo end if
ЛИТЕРАТУРА 1. Unterseher F. et al.— Holography handbook, 1982. 2. Б р о к г а у з Ф. А., Э ф р о н И. А. Энц. слов.— Спб., 1901; статья «Спектроскоп». 3. Гуревич С. С. Объемная печатная иллюстрация.— М., 1959. В ал юс Н. А. Стереоскопия.— М.: 1962. 4. Поджио Т. В мире науки..— 1984.— № 6.— С. 58. 5. Стереоскопический микроскоп по Грену.— Л., 1938. 6. Уотерсон Д., Вернет Э. Стереоскопический анатомический атлас.— М., 1909. 7. Иванов Б. Т., Левингтон А. Л. Стереоскопическая фотография.— М., 1959; К а с с К., Касс А. Практическая стереофотография.— Минск, 1987. 8. Поль Р. В. Введение в оптику.— М.— Л., 1947.— С. 85. 9. УолкерД. В мире науки.— 1987.— № 1.~ С. 90. 10. Дайсон Ф., цит. по: Юргенс X. и др. // В мире науки.— 1990.— № 10. 11. Mandelbrot B. The fractal geometry of Nature.— H. Freeman & Co. San Francisco, 1982. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. Physica.— D. V. 38, Nos. 1—3, 1989. Computer Graphics / Ed. by D. С Evans and R. J. Athay, 1986; Peitgen H.— O. & Richter P. H. 1986. The Beauty of Fractals; The Art of Fractals. A Computer Graphical Introduction, 1988 / Ed. by H. O. Peitgen. Федер Й. Фракталы.— M., 1990; Шредер М. Фракталы, хаос, степенные законы.— W. H. Freeman & Company, N.— Y., 1991. В мире науки.— 1987.— № 1.— С. 57. В мире науки.— 1990. № 7.— С. 82. А. & J. F. Thorney. Sci. Am.— Juiy 1982, p. 116. Мочалов Л. В. Пространство мира и пространство картины.— М., 1983. Dmitrenko A. et al. Fifty russian artists.— Moscow, 1985. Природа.— 1990. № П.— С. 88. В мире науки.— 1986.— Т. 12.— С. 152. БСЭ.— Т 29.— С. 116. SPIE. V. 1153. Application of digital image processing XII (1989), p. 645. В мире науки.— 1990.— № 12.— С. 62. Окоси Т. ТИИЭР, 1980, т. 68, № 5, с. 5—24. Кравков С. «Стереоскопия».— Техническая энциклопедия. М.: 1933. Агафонов С. «Дальномеры».— Техническая энциклопедия. М.: 1933. Научно-популярное издание Веденов Александр Алексеевич МАТЕМАТИКА СТЕРЕОИЗОБРАЖЕНИЙ Зам< главного редактора Редактор И. Г. В и р к о Мл. редактор С. С. Патрикеева Художник Л. П. Ромасенко Худож. редактор М. А. Бабичева Техн. редактор И. Е. Белкина Корректор Е. К. Шарикова ИБ № 11865 Г. Г. Карвовский Сдано в набор 17.09.91. Подписано к печати 17.10.91. Формат бумаги 70ХЮ0'/|б- Бумага тип. № 2. Гарнитура литературная. Печать офсетная. Усл. печ. л. 3,90. Усл. кр.-отт. 8,12. Уч.-изд. л. 3,96. Тираж 9480 экз. Заказ 1499. Цена 55 коп. Издательство «Знание». 101835, ГСП, Москва, Центр, проезд Серова, д. 4. Индекс заказа 914311. Ордена Трудового Красного Знамени Чеховский полиграфический комбинат Государственной ассоциации предприятий, объединений и организаций полиграфической промышленности «АСПОЛ» 142300, г. Чехов Московской области 48
Индекс 70096 Адрес подписчика: Издательство «Знание» — крупнейшее в стране издательство по выпуску научно-популярной литературы. Издательство выпускает 40 серий подписных научно-популярных брошюр УЯЗШЯ- 'нйншг \ ^ \ Подписная научно- популярная серия и / J Щ^ МАТЕМАТИКА ""* КИБЕРНЕТИКА Наш адрес: 101835, Москва, Центр,