Однажды на одном развесёлом графическом форуме у меня случайно завязался спор с одним чувачком, который утверждал примерно следующее: «Невозможно получить изображение пустой Красной Площади днём». Само собой, утверждение дико спорное: да, людей там дофига днём, но можно же всех попросить удалиться. Теоретически это возможно. Да и что значит «изображение» пустой Красной Площади? Изображение — не фотография, изображение пустой Красной Площади я могу и на бумажке от руки нарисовать. В общем, за давностью лет всех деталей спора не припомню, но он был дико жаркий и мы, буквоеды чёртовы, пришли к такому уточнённому утверждению (примерно): «Из-за огромного количества людей на Красной Площади невозможно, прибегнув только к фото- и видеотехнике, получить в светлое время суток в тёплый туристический сезон (например, лето) фотореалистичное изображение (фотографию) Красной Площади без единого человека на ней с ракурса стоящего в полный рост человека, будучи простым человеком, не имеющим рычагов влияния на правительство». Ну и уточнение! Буквально, юридическое. Теперь всё стало на свои места.
Оппонент утверждал, что сделать такую фотографию можно только прибегнув к Photoshop (или иной программе редактирования изображений) с целью удаления с фотографии Красной Площади всех людей. Процедура эта долгая и кропотливая, и чтобы получить приличный кадр, необходимо будет трудиться как минимум часа три-четыре опытному редактору. Да, несомненно, он прав, это сделать можно.
Я подумал: что, если делать очень-очень-очень-оооочень долгую (огромная экспозиция) фотографию Красной Площади, но при сильно-сильно-сильно-сиииильно закрытой диафрагме (чтобы не было пересвета). Ведь тогда люди, ходившие в кадре, просто смажутся, а постоянные детали (строения, Кремль, площадь) останутся на месте. Да! Это ключ к решению. Ведь у нас есть в руках мощнейшее средство, доступное немногим — программирование! Я решил: можно создать «виртуальный» фотоаппарат, который бы просто фотографировал экран с любой произвольной выдержкой. Знаете все эти программы для записи с экрана: SnagIt, BandiCam, FRAPS... только она записывала бы не один кадр (фото) или последовательность кадров (видео), а накапливала бы информацию (как при длинной экспозиции, что, по сути, и является экспозицией, только электронной), и в конце записи бы усредняла полученную информацию. Тогда, если на экране просто воспроизводить запись с камеры с площади, то это и будет требуемым снимком! Ура! Проблема решена... теоретически. Осталось только создать нужный софт и найти видео с неподвижной камеры, которая бы пол часа снимала площадь.
Хорошо, что запросы к программе пустяковые, и я легко реализовал требуемое. Вернёмся же к нашей Красной Площади. Я так и не нашёл достаточно хорошее и длинное видео, снятое с самой площади с помощью неподвижной камеры. Даже time lapse: там вообще ребята всё время наровят плавненько подвигать камеру. Нашёл только вот такое видео youtu.be/fnpEAEaWN84 — Обратите внимание на огромное количество машин на Большом Каменном Мосту.
Получилось очень приятно и гладенько, несмотря на пляшущие тени от облаков.
И куда девались машины после усреднения? Правильно: исчезли. Зацените какая чистенькая картинка получилась. Ну разве можно такой кадр днём поймать? Конечно, у любого метода есть погрешности. Так и у моего: нет-нет, да и останутся кое-где «призраки» машин или людей. На самом деле математика тут довольно простая. Если в видео из 100 кадров человек встречается в 5 кадрах, то он будет призрачен на 100 – 5 = 95 процентов. То есть 95 процентов информации будет получено с площади, а 5 — с человека. При такой пропорции его практически не видно. А так как люди и машины вообще постоянно движутся, то процент и того меньше! Просто шоколад!
Идём дальше, берём самую густозаполненную площадь в мире - Нью-Йоркскую Таймс Сквер. youtu.be/BMl8A8jnF50 — Здесь всё буквально кишит людьми и машинами.
А на выходе получили только стоящую одиноко полицейскую тачку... и ещё кучу призрачных разводов на улице слева. Ну что ж, это и есть неидеальность метода. И теперь оживлённая Wall Street: youtu.be/AK6WNFNBGvk
Результат впечатляет. Чисто! Значит, почти все движутся и мало стоят на месте. Тут всё ясно: чем короче экспозиция и медленней движутся объекты, тем больше будут выражены призраки. И наоборот: чем длиннее экспозиция и быстрее движутся объекты, тем лучше будет виден фон. В таком случае идеальны длинные time lapse видео, снятые неподвижной камерой. Что ж, таких роликов превеликая тыщща. Начинаем смотреть другие результаты. Вот видео с камеры наружнего наблюдения за перекрёстком, на котором происходит ДТП. youtu.be/kmucKlpU_Z8 — Усредялось с 20 по 40 секунду, всего 20 секунд.
Неплохой чистенький перекрёсточек с призраком белой машины. Ну и куда ж без Эйфелевой башни! youtu.be/miCealqx_iE — Этот time lapse длится почти сутки! Идеальный вариант, но как поведёт себя усреднение при переходе с дня в ночь и наоборот?
Получилось очень даже сносно и загадочно. Какое-то неопределённое время суток. Ну а дальше можно просто поиграться и поусреднять неусредняемое. Например, есть такое видео, где тип, путешествуя, фоткает себя каждый день — youtu.be/5ky6vgQfU24. Давайте-ка посмотрим, что из этого выйдет.
Получилось весьма психоделично. Мне кажется, или он смахивает на Иисуса. Или сам Иисус — это некий усреднённый образ?
Ба! Да ведь с этой штукой можно заглянуть под воду!! Вот что я имею в виду: когда море колышется, волны преломляют рисунок дна. Если, конечно, оно видно. Тогда, взяв усреднённый искажённый рисунок с большой экспозицией получим изображение дна без влияния воды. Круто! Выбираем классное длинное видео, на котором сквозь волнующуюся воду видно дно и смотрим. youtu.be/PCuzgXdm3R8 — Попробуйте застать ровную поверхность воды. Не выйдет!
Усреднятор усредняет колебания поверхности воды, усредняя тем самым преломление. Видим рисунок дна и гладкую как зеркало поверхность воды! А если усреднить движение, снятое из окна какого-нибудь транспортного средства, то можно получить эффект стремительного движения вперёд. Берём видео с поездов и усредняем буквально по 1 секунде! youtu.be/4_GEx9iKI9o
Получаются неплохие эффекты! Отлично. Я стал экспериментировать с разными видео и получать интересные результаты. Но когда набаловался, мне этого показалось как-то маловато. Круто, но маловато. И тут ко мне пришла ещё одна интересная идея. Когда я смотрел и усреднял видео, снятое из окон движущихся поездов (для эффекта стремительного движения), я понял какой функциональности не хватает моей маленькой программке! А пусть она начнёт ещё и панорамы снимать!
Да, с панорамами всё довольно просто. Поезд движется, картинка в окне меняется, необходимо только брать последовательность изображений из окна с определённым смещением и подклеивать одно к другому слева направо или справа налево. Тогда получится огромное пано с изображением всего того, что проехало за окном. Я тут же начал экспериментировать. Первая идея, которая пришла ко мне в голову, и стала решающей: необходимо склеивать каждый кадр, а не фрагменты, причём каждый кадр добавлять по одному столбцу в результирующую картинку. Мы берём первый кадр, вырезаем оттуда тонкую вертикальную полосу изображения, берём следующий кадр, вырезаем такую же тонкую полосу и подклеиваем к первой вырезанной полосе. Слева или справа — в зависимости от направления движения камеры, которое можно указать явно. Так как второй кадр отличается от первого на некоторое смещение, то и изображение в двух подклеенных полосах будет представлять из себя нечто вроде развертки панорамы.
Для начала мне нужно видео, в котором бы неподвижная камера снимала бы некий движущийся объект на неподвижном фоне. Тогда, если объект довольно длинный, его можно «отсканировать» целиком! На роль таких видео идеально подходят движущиеся машины и поезда. youtu.be/ulMBxkrxrF0 — Поезд проходит с 01:57 по 03:17. Вот такого красавца я собрал, смотрите:
Разная длина вагонов получилась из-за меняющейся скорости движения поезда. Получилось неожиданно здорово! Правда, программа снимает панораму жутко сплюснутую по горизонтали, и, чтобы вернуть правильные пропорции, приходится сильно сжимать полученное изображение по вертикали, отчего оно получается маленьким. Это недостаток пожалуй и программы, и подаваемого на вход видео: если бы поезд на нём двигался ооочень медленно, то и пропорции были бы нормальные. Давайте же соберём ещё одну картинку, но на этот раз из окна движущегося поезда. youtu.be/DycvNb3Ul0k — Панорама собиралась с 02:43.
Дальние дома чуть растянуты, ближние чуть сплюснуты. Систему не сломаешь. Почему бы не попробовать машины, а не поезда? Я нашёл интересное видео с парада на площади, где неподвижная камера снимала проезжающие на параде машины. youtu.be/2gDKkn8XhM4 — Качество видео ужасное, ваб-камера снимает с очень низким FPS.
Отсюда вытекает и качество финальной панорамы. Однако, строй парадной колонны читается вполне естественно. Всё, баста! Я наигрался! Теперь можете поиграться и вы, скачав эту маленькую и прикольную программу. Не забывайте делиться своими результатами!
Управление в режиме усреднения: выбираем режим «усреднение». Подводим мышь к левому верхнему углу видео и зажимаем "[" — программа запоминает верхний левый угол. Не обязательно, чтобы в этот момент было активно приложение, показывающее видео; может быть активно любое приложение. Подводим мышь к правому нижнему углу видео и жмём "]" — программа запоминает правый нижний угол и, тем самым, все координаты рамки с видео полностью. Запускаем видео. Начинаем усреднять, в любой момент времени зажав "/" на цифровой клавиатуре справа. Во время усреднения программа отчитывается о количестве усредненных кадров. Одинаковые соседние кадры не усредняются, а игнорируются (таким образом, при застывшем видео программа не испортит результат). Усредняем выборочное количество времени. Для завершения усреднения зажимаем "*" на цифровой клавиатуре справа. Результат пишется в ту же папку, где лежит Ekspozzer.
Управление в режиме панорамирования: выбираем режим «панорама». Выбираем стрелочку влево, если камера на видео «летит» влево (тобишь картинка движется вправо); или вправо, если камера на видео «летит» вправо (тобишь картинка движется влево). Выбираем ширину панорамы в пикселях. Подводим мышь к верхнему краю видео (примерно в центре) и зажимаем "[" — программа запоминает верхний левый угол. Подводим мышь к нижнему краю видео, чуть-чуть отступив вправо, и жмём "]" — программа запоминает правый нижний угол и, тем самым, координаты «щели», через которую из видео будет собираться панорама. Запускаем видео. Начинаем собирать панораму, в любой момент времени зажав "/" на цифровой клавиатуре справа. Результат пишется в ту же папку, где лежит Ekspozzer.
Прошу не бить: программа изначально создавалась «на коленке» и для себя, юзабилити в программе нет. Всё вышенаписанное является сугубо развлекательным научно-популярным экспериментом. Да и первый пост!