md: Алёнка, ph: Kostya Romantikov
Так получилось, что в самом начале лета 2023 я очень сильно травмировал голеностоп. Месяц ходил в бандаже, и еще очень долго хромал. Только недавно (середина октября 2023) смог, впервые после травмы, отходить час на беговой дорожке в режиме «пересеченная местность». Понятно, что ни бегать, ни присесть на корточки, или подпрыгнуть я не могу до сих пор. И, если моя профессиональная деятельность от функционирования голеностопа зависит мало, то моё фото-хобби вылетело в трубу на весь период ограниченной подвижности.
Что бы не терять время зря - решил поэкспериментировать с уже отснятыми фотографиями. Давно хотел попробовать экстраполяцию. Сейчас объясню, в чём суть моей задумки.
md: Алёнка, ph: Kostya Romantikov
Многие из тех, кто выкладывает фото на различные сайты, наверняка обращали внимание, что после этого качество снимков сильно снижается. Я и сам не раз замечал, что пока обрабатываешь портреты - на экране видишь, например, каждую бровинку, каждую ресничку. А когда выложил, с ужасом обнаруживаешь, что брови с ресницами превращаются в чёрные полоски. Всё дело в том, что снимок из фотоаппарата ещё не подвергался сжатию, и размеры его просто огромные (4000 х 6000 точек, под 30 МБ объём каждого файла). После выкладывания в Интернет размеры уменьшаются, иногда в 10 раз, а само изображение подвергается жесткому, а порой и жестокому сжатию различными алгоритмами компрессии, что бы места занимали минимум, скачивались быстро, а смотрелись «ну, более-менее, сойдет». И это меня не устраивает в корне.
md: Алёнка, ph: Kostya Romantikov
А так как фото-материала у меня завались, и по профессии я - IT-шник, решил подойти к вопросу профессионально и провести автоматический эксперимент, обработав один и тот же снимок десятками сотнями тысячами разных способов. И сравнить - при каких режимах обработки снимок будет смотреться приемлемо, даже будучи сжат. Я, как раз, недавно в домашнем сервере обновил процессор и теперь у меня появились свободные вычислительные мощности.
md: Алёнка, ph: Kostya Romantikov
Использовал я ImageMagick. Написал для него bash-скрипт, который перебирая определенные параметры генерировал изображения из одного единственного кадра. Причем, так как генерация одного изображения занимает секунд 30, а параметров было столько, что процесс должен был повториться тысячи раз, я реализовал в скрипте многопотоковость: он не просто запускал генерацию и ждал, когда она завершится, а смотрел на то, как нагружен CPU (процессор) в системе и, если остались ещё свободные ядра - запускал следующую генерацию, не дожидаясь завершения предыдущей. И опять смотрел - есть-ли свободные ресурсы. И так снова и снова, так что одномоментно из всех имевшихся в наличии ядер CPU, у меня свободными от генерации изображений оставались только 2, на карманные расходы.
md: Алёнка, ph: Kostya Romantikov
Да, в процессе я обнаружил, что система охлаждения CPU не годится для такого - пришлось озаботиться новым куллером. Ничего жидкостного и навороченного, всё же это обычный домашний сервер для всяких экспериментов. Но всё же, нужно создавать воздушный поток достаточный, что бы длительное время охлаждать и сам CPU и компоненты, находящиеся поблизости от него. И при этом, что бы не ревел как Карлсон на форсаже. И всё получилось.
md: Алёнка, ph: Kostya Romantikov
В результате, спустя много часов, я получил огромное количество изображений вот этой фотографии с Алёнкой, каждое из которых было обработано чуть иначе. Пришлось долго и придирчивой пройтись по каждому, оценивая, как успехи, так и неудачи при использовании тех, или иных значений в параметрах. В результате была определена примерная область, при значениях внутри которой снимок не портится, даже будучи растянутым. Причём - сильно растянутым. Да-да, в процессе я экспериментировал и с тем, а что будет, если изображение шириной 4000 точек растянуть до 8000? А до 12000? А до 25000? Вот тут был самый вычислительный смак - ImageMagick в одном прогоне сразу увеличивал изображение (экстраполировал), давил шумы, поднимал резкость на контрастных переходах, ... и много чего ещё.
md: Алёнка, ph: Kostya Romantikov
В результате выяснилось, что ещё при 8000 точек в ширину всё более-менее работает, а вот при 10.000 основные популярные фото-хостинги уже сходят с ума и не могут из этого изображения сгенерить даже простенькую превьюшку. Или, могут, но делают это очень долго. Так что я остановился на 8000 точках. Главный минус подхода в том, что каждый обработанный снимок, даже будучи сжат, «весит» больше, чем оригинал. Но, даже будучи пережатым с 8000 до 800 точек (как снимки в этой статье), они продолжают радовать мой придирчивый взгляд.
md: Алёнка, ph: Kostya Romantikov
Способ этот не универсальный, к сожалению - очень зависит от исходной зернистости снимка. Эту фотосессию я снимал в 2016 году ещё на старенький Canon EOS 50D , кроп , выдававший сырые RAW-файлы 3.100 х 4.700. Но, зная, что у него зернистость на ИСО выше 400 я старался не поднимать его выше 200. В итоге, при экстраполяции бороться с зерном снимка практически не пришлось. В дальнейшем, я пробовал подобный подход на снимках уже с более нового Canon EOS 6D Mark III, полного кадра. Там и на ИСО 2000 нет шума, думал я. И жестко просчитался - шума нет при интерполяции (уменьшении), а вот на экстраполяции шум лезет. Хотя, там и размер исходника больше, 4.100 х 6.200.
md: Алёнка, ph: Kostya Romantikov
В общем, я считаю, что лето 2023, хоть и провёл без единой съёмки, а прошло не зря. Я очень люблю в своей профессии именно то, когда удаётся выжать из компьютерного железа максимум, при этом - с пользой.
А ниже я хочу показать вам итоговый результат. Заинтриговал же, наверняка, ради чего всё это затевалось, да? :) Не побоюсь, даже, весьма вероятной вашей реакции «и что тут такого?» :) Не забываем мой главный принцип в фотографии: главное, что бы снимок нравился мне самому :) Под превьюшками ниже - изображения в максимальном разрешении после экстраполяции. Будьте осторожны - очень большие размеры файлов.