Доброго дня! Я заметил, что хороший и, главное, востребованный софт рождается не просто так, а из возникающих необходимостей решить ту или иную задачу. Не знаю как у других, а у меня постоянно так и происходит. И эта история — не исключение. Однажды на одном развесёлом графическом форуме у меня случайно завязался спор с одним чувачком, который утверждал примерно следующее: «Невозможно получить изображение пустой Красной Площади днём». Само собой, утверждение дико спорное: да, людей там дофига днём, но можно же всех попросить удалиться. Теоретически это возможно. У простого смертного, конечно, ничего не получится, однако, если вы — какой-нибудь Путин, то, очень постаравшись и позвонив кому надо, вы сможете организовать подобное. Да и что значит «изображение» пустой Красной Площади? Изображение — не фотография, изображение пустой Красной Площади я могу и на бумажке от руки нарисовать. В общем, за давностью лет всех деталей спора не припомню, но он был дико жаркий и мы, буквоеды чёртовы, пришли к такому уточнённому утверждению (примерно): «Из-за огромного количества людей на Красной Площади невозможно, прибегнув только к фото- и видеотехнике, получить в светлое время суток в тёплый туристический сезон (например, лето) фотореалистичное изображение (фотографию) Красной Площади без единого человека на ней с ракурса стоящего в полный рост человека, будучи простым человеком, не имеющим рычагов влияния на правительство». Ну и уточнение! Буквально, юридическое. Теперь всё стало на свои места. Качественно удалить человека с фото — это долго и нудно. Оппонент утверждал, что сделать такую фотографию можно только прибегнув к Photoshop (или иной программе редактирования изображений) с целью удаления с фотографии Красной Площади всех людей. Процедура эта долгая и кропотливая, и чтобы получить приличный кадр, необходимо будет трудиться как минимум часа три-четыре опытному редактору. Да, несомненно, он прав, это сделать можно. Но если бы этот человек (по профессии художник и фотограф) хоть мало-мальски бы знал математику или представлял бы себе возможности элементарного программирования, то он бы никогда не взялся утверждать такое. Тем более на спор. И я доказал ему обратное. Если вы хоть раз в жизни держали в руках фотоаппарат, а, тем более, делали снимки, то, наверное, знаете что такое экспозиция. Если совсем просто (для людей, снимащих на iPhone в режиме «авто») — это продолжительность времени снятия кадра. Наверняка у вас не раз получались «смазанные» фото в движении. Вот! Это как раз экспозиция неправильно была настроена: была слишком большая. А если вдруг фото слишком тёмное получилось, то, скорей всего, экспозиция была слишком мала. Это я совсем уж детским языком рассказываю, чтоб всем было понятно: не касаюсь сейчас настроек диафрагмы и прочих тонкостей съёмки. Так вот, именно подумав об экспозиции мне пришла в голову идея решения этой задачи-спора. Time lapse long exposure: самое вкусное на 01:50. Я подумал: что, если делать очень-очень-очень-оооочень долгую (огромная экспозиция) фотографию Красной Площади, но при сильно-сильно-сильно-сиииильно закрытой диафрагме (чтобы не было пересвета). Ведь тогда люди, ходившие в кадре, просто смажутся, а постоянные детали (строения, Кремль, площадь) останутся на месте. Да! Это ключ к решению. Надо бы как-то попробовать сделать это. Но как? У меня ведь нет возможности попасть на Красную Площадь. Не только ради эксперимента, но вообще, не говоря уже про «ради эксперимента». Ладно, для проверки подойдёт любая другая площадь, это не проблема. Проблема в том, что мой фотоаппарат Canon 550D, который я покупал миллион лет назад, может делать снимки с максимальной экспозицией в 30 секунд, а это очень мало для эксперимента. Покупать новый фотоаппарат ради эксперимента я тоже не могу. Нужна экспозиция реально длинная, где-то минут 30. Для чего? Чтобы повысить шанс того, что люди, находящиеся на площади, точно поменяют свою позицию и уйдут с тех мест, где находились в начале кадра. Грубо говоря, за 30 минут в каждую точку кадра должно попасть больше площади, чем людей. Я стал думать как же малой кровью решить проблему фотографирования? Но мы не лыком шиты! Ведь у нас есть в руках мощнейшее средство, доступное немногим — программирование! Я решил: можно создать «виртуальный» фотоаппарат, который бы просто фотографировал экран с любой произвольной выдержкой. Знаете все эти программы для записи с экрана: SnagIt, BandiCam, FRAPS... только она записывала бы не один кадр (фото) или последовательность кадров (видео), а накапливала бы информацию (как при длинной экспозиции, что, по сути, и является экспозицией, только электронной), и в конце записи бы усредняла полученную информацию. Тогда, если на экране просто воспроизводить запись с камеры с площади, то это и будет требуемым снимком! Ура! Проблема решена... теоретически. Осталось только создать нужный софт и найти видео с неподвижной камеры, которая бы пол часа снимала площадь. Хорошо, что запросы к программе пустяковые, и я легко реализовал требуемое за вечер. С видео тоже не возникло вопросов, так как оных сущий миллиард. Подходят любые мало-мальски хорошие записи с web-камер или камер наблюдения, так как они преимущественно закреплены и на протяжении ролика не двигаются. Итак, начались эксперименты. Перед вами time-lapse видеозапись с Красной Площади. Но не спешите удивляться, если не видите на видео знакомые места. Красная Площадь в мире не одна (как и Санкт-Петербург и другие до боли знакомые названия), их порядка двадцати. Представленная на видео Красная Площадь находится возле Универсистета Вашингтона. Это очень людное место, являющееся достопримечательностью Университета и даже города. На площади постоянно находятся большое количество студентов, туристов, путешественников, абитуриентов, преподавателей и просто прохожих. Кстати, интересный факт: наша Красная Площадь «красная» потому, что слово «красная» в древности означало «красивая» (а сама площадь изначально строилась белая, из белого кирпича), а Красная Площадь возле Университета Вашингтона «красная» именно потому, что сделана из красноватого камня. Кстати, вот вам и ирония: в споре с этим типчиком мы не уточняли, какая именно Красная Площадь имеется в виду. Просто подразумевалась наша родная. Так как в мире несколько Красных Площадей, может быть среди них и нашлась бы такая немноголюдная, на которой в определённые моменты дня не было бы людей. Тогда и фотографию можно сделать, тогда я выигрываю спор автоматически. Ну, долой лирические отступления и иронии. Вот что получилось после усреднения Красной Площади (прокрутите ползунок вправо):
Сравните теперь сколько человек на видео и сколько на фото. А сколько бы я мучался в фотошопе, вырезая людей и ища кадры, на которых в вырезанных фрагментах людей нет, чтобы вставить эти фрагменты в пустые части, и, к тому же, вставка получилась бы рваной, так как от кадра к кадру даже фоновое освещение меняется из-за теней облаков, погрешности записи и так далее. А мой ekspozzer сделал это всего за 17 секунд; получилось плавненько и без особого труда. Круто? Круто! И это только начало! Вернёмся же к нашей Красной Площади. Я так и не нашёл достаточно хорошее и длинное видео, снятое с самой площади с помощью неподвижной камеры. Даже time lapse: там вообще ребята всё время наровят плавненько подвигать камеру. Нашёл только вот такое видео:
И куда девались машины после усреднения? Правильно: исчезли. Зацените какая чистенькая картинка получилась. Ну разве можно такой кадр днём поймать? Конечно, у любого метода есть погрешности. Так и у моего: нет-нет, да и останутся кое-где «призраки» машин или людей. На самом деле матемаика тут довольно простая. Если в видео из 100 кадров человек встречается в 5 кадрах, то он будет призрачен на 100 – 5 = 95 процентов. То есть 95 процентов информации будет получено с площади, а 5 — с человека. При такой пропорции его практически не видно. А так как люди и машины вообще постоянно движутся, то процент и того меньше! Просто шоколад! Идём дальше, берём самую густозаполненную площадь в мире - Нью-Йоркскую Таймс Сквер:
... и ещё кучу призрачных разводов на улице слева. Ну что ж, это и есть неидеальность метода. Ещё:
Тут всё ясно: чем короче экспозиция и медленней движутся объекты, тем больше будут выражены призраки. И наоборот: чем длиннее экспозиция и быстрее движутся объекты, тем лучше будет виден фон. В таком случае идеальны длинные time lapse видео, снятые неподвижной камерой. Что ж, таких роликов превеликая тыщща. Начинаем смотреть другие результаты. Вот видео с камеры наружнего наблюдения за перекрёстком, на котором происходит ДТП:
А вот как раз тот самый идеальный экземпляр: длинное time lapse видео, запись с людной улицы в Арнсберге, Германия:
Ну и куда ж без Эйфелевой башни!
Ну а дальше можно просто поиграться и поусреднять неусредняемое. Например, есть такое видео, где тип, путешествуя, фоткает себя каждый день. Давайте-ка посмотрим, что из этого выйдет.
Можно попробовать усреднить нечто такое, что движется всецело, целиком. Получатся интересные результаты. Например, небо:
Ба! Да ведь с этой штукой можно заглянуть под воду!! Вот что я имею в виду: когда море колышется, волны преломляют рисунок дна. Если, конечно, оно видно. Тогда, взяв усреднённый искажённый рисунок с большой экспозицией получим изображение дна без влияния воды. Круто! Выбираем классное длинное видео, на котором сквозь волнующуюся воду видно дно и смотрим:
А если усреднить движение, снятое из окна какого-нибудь транспортного средства, то можно получить эффект стремительного движения вперёд. Берём видео с поездов и усредняем буквально по 1 секунде! Получаются неплохие эффекты! Отлично. Я стал экспериментировать с разными видео и получать интересные результаты. Но когда набаловался, мне этого показалось как-то маловато. Круто, но маловато. И тут ко мне пришла ещё одна интересная идея. Когда я смотрел и усреднял видео, снятое из окон движущихся поездов (для эффекта стремительного движения), я понял какой функциональности не хватает моей маленькой программке! А пусть она начнёт ещё и панорамы снимать! Да, с панорамами всё довольно просто. Поезд движется, картинка в окне меняется, необходимо только брать последовательность изображений из окна с определённым смещением и подклеивать одно к другому слева направо или справа налево. Тогда получится огромное пано с изображением всего того, что проехало за окном. Я тут же начал экспериментировать. Написал интеллектуальный склейщик с детектором границ, но получалось очень плохо! Всё время мешал эффект бочки и скачущая от фрагмента к фрагменту освещённость. Я понял, что до таких гигантов, как, например, Autopano Giga, моей программке не дотянуть практически никогда, и стал хитрить. Выдумывать. Как сделать склейку панорамы плавной и непрерывной. Первая идея, которая пришла ко мне в голову, и стала решающей: необходимо склеивать каждый кадр, а не фрагменты, причём каждый кадр добавлять по одному столбцу в результирующую картинку. Мы берём первый кадр, вырезаем оттуда тонкую вертикальную полосу изображения, берём следующий кадр, вырезаем такую же тонкую полосу и подклеиваем к первой вырезанной полосе. Слева или справа — в зависимости от направления движения камеры, которое можно указать явно. Так как второй кадр отличается от первого на некоторое смещение, то и изображение в двух подклеенных полосах будет представлять из себя нечто вроде развертки панорамы. Эдакий дешёвый аналог slit-камеры (раз, два, три). Получилось? Поехали! Для начала мне нужно видео, в котором бы неподвижная камера снимала бы некий движущийся объект на неподвижном фоне. Тогда, если объект довольно длинный, его можно «отсканировать» целиком! На роль таких видео идеально подходят движущиеся машины и поезда. Вот такого красавца я собрал, смотрите:
Получилось неожиданно здорово! Правда, программа снимает панораму жутко сплюснутую по горизонтали, и, чтобы вернуть правильные пропорции, приходится сильно сжимать полученное изображение по вертикали, отчего оно получается маленьким. Это недостаток пожалуй и программы, и подаваемого на вход видео: если бы поезд на нём двигался ооочень медленно, то и пропорции были бы нормальные. Давайте же соберём ещё одну картинку, но на этот раз из окна движущегося поезда.
И тут с недостатками всё понятно: сильные искажения объектов. Движущиеся объекты ближе к поезду пролетают кадр быстрей, движущиеся дальше от поезда — медленней. Закон параллакса. Значит, объекты переднего плана будут сильно сплюснутыми по горизонтали, а объекты заднего плана сильно вытянутыми. Тут приходится настраиваться на какую-то определённую одну плоскость (дальность объектов от камеры) восприятия. В данном случае — на дома вдалеке. Они получились вполне «собранными». Всё, что ближе (деревья, провода, столбы) будет сильно сплюснуто, всё, что дальше — растянуто. Идеального изображения во всех плоскостях с помощью слит-сканирования получить не удастся. Берём следующий пример и собираем перрон вокзала в Кисловодске: Здесь видим непропорционально сплюснутые фонари. Каюсь, моя ошибка: так как мы собирали именно перрон, а фонари находятся прямо в центре перрона, то они должны были по идее получиться абсолютно ровненькими. Берём теперь и собираем панораму из другого видео:
Тут я принебрёг деревьями и настроился на отдалённо стоящие хатки. Давайте теперь ещё одно, с пригородом Питера:
Почему бы не попробовать машины, а не поезда? Я нашёл интересное видео с парада на площади, где неподвижная камера снимала проезжающие на параде машины:
Наигравшись, я стал тупо баловаться.
Чарующе! =) И на последок ещё более чарующее: панорама показывает плавное изменение цвета неба в вечернее время. Тут тоже всё довольно просто:
Всё, баста! Я наигрался! Теперь можете поиграться и вы, скачав эту маленькую и прикольную программу. Я дарю её вам! |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
© Андрей МИРОНОВ
|