Склеить 3 фото: Склеивание фото — Онлайн фотошоп Croper.ru
Склеиваем несколько фотографий в одну длинную с помощью компьютерного зрения / Хабр
В предыдущих статьях был описан шеститочечный метод разворачивания этикеток и как мы тренировали нейронную сеть. В этой статье описано, как склеить фрагменты, сделанные из разных ракурсов, в одну длинную картинку.
Этикетки заранее сегментированы и развернуты нейронной сетью, описанной в предыдущей статье.
Как вообще работает склеивание? Нужно взять две картинки с нахлестом, посчитать взаимный сдвиг и наложить одну на другую. Звучит довольно просто, но давайте рассмотрим каждый из шагов.
Чтобы посчитать взаимный сдвиг, нужно найти какие-то объекты, которые присутствуют на обоих изображениях и вычислить каким-то образом преобразование точек с одной картинки на другую. Этот сдвиг может быть представлен матрицей преобразования, где элементы матрицы кодируют сразу несколько трансформаций — масштабирование, перенос и вращение.
Есть отличная таблица в википедии, где показано, как и какие элементы влияют на трансформацию.
Как видно на картинке ниже, общих объектов вполне хватает:
Но выбранными объектами есть проблема — их сложно детектировать алгоритмически. Вместо этого, принято искать более простые объекты — так называемые “уголки” (“corners”), они же дескрипторы (“descriptors”, “features”).
Есть отличная статья в документации OpenCV, почему именно уголки — если вкратце, то определить линию легко, но она дает только одну координату. Поэтому нужно детектировать еще и вторую (не параллельную) линию. Если они сходятся в точке, то это место и есть идеальное для поиска дескриптора, он же является уголком (хотя реальные дескрипторы не являются уголками в геометрическом смысле этого слова).
Одним из алгоритмов по поиску дескрипторов, является SIFT (Scale-Invariant Feature Transform). Несмотря на то, что его изобрели в 1999, он довольно популярен из-за простоты и надежности. Этот алгоритм был запатентован, но патент истёк этой весной (2020). Тем не менее, его не успели перенести в основную сборку OpenCV, так что нужно использовать специальный non-free билд.
Так давайте же найдем похожие уголки на обоих изображениях:
sift = cv2.xfeatures2d.SIFT_create() features_left = sift.detectAndCompute(left_image, None)
features_right = sift.detectAndCompute(left_image, None)
Воспользуемся сопоставителем дескрипторов Flann (Flann matcher) — у него хорошая производительность даже, если количество дескрипторов велико.
KNN = 2 LOWE = 0.7 TREES = 5 CHECKS = 50 matcher = cv2.FlannBasedMatcher({'algorithm': 0, 'trees': TREES}, {'checks': CHECKS}) matches = matcher.knnMatch(left_descriptors, right_descriptors, k=KNN) logging.debug("filtering matches with lowe test") positive = [] for left_match, right_match in matches: if left_match.distance < LOWE * right_match.distance: positive.append(left_match)
Желтые линии показывают, как сопоставитель нашёл совпадения.
Как хорошо видно — правильных совпадений примерно только половина. Однако, если правильные совпадения всегда дают одно и то же преобразование, то неправильные показывают хаотично новое направление. Т.е. теоретически, их можно как-то отделить друг от друга:
Одним из алгоритмов, чтобы найти правильное преобразование, является RANSAC. Этот алгоритм отлично работает, если нужно отделить хорошие значения от шумов — как раз наш случай.
К счастью, в OpenCV уже есть функции, которые найдут матрицу преобразования по совпадениям, используя RANSAC, т.е. фактически, ничего писать не придется.
Воспользуемся функцией estimateAffinePartial2D которая ищет следующие преобразования: поворот, масштабирование и перенос (4 степени свободы).
H, _ = cv2.estimateAffinePartial2D(right_matches, left_matches, False)
Когда матрица преобразования найдена, мы можем трансформировать правое изображение для склейки.
Левый фрагмент:
Правый фрагмент:
Для начала давайте воспользуемся простейшим способом склейки фрагментов, когда каждый пиксель их пересечения вычисляется, как среднее. К сожалению, результат получается так себе — изображение заметно двоится, особенно возле линии склейки.
На анимации различие между двумя кадрами видны более наглядно:
Это не удивительно — фотографии были сделаны под разными углами, нейронная сеть также развернула их слегка по-разному, и в итоге получились небольшие расхождения.
Для бесшовной склейки, необходимо компенсировать нелинейные искажения. Искажение можно представить в виде векторного поля того же разрешения, что и исходное изображение, только вместо цвета, в каждом пикселе будет закодирован сдвиг. Такое векторное поле называется “оптический поток”.
Вообще, есть разные методики вычисления оптического потока — некоторые из них встроены прямо в OpenCV, а есть и специальные нейронные сети.
В нашем же случае, конкретную методику я опущу, но опубликую результат:
Но компенсацию нужно осуществлять пропорционально обоих фрагментов. Для этого разделим его на две матрицы:
Левый фрагмент будет компенсироваться слева направо по нарастающей, в то время, как правый — наоборот.
Теперь оба фрагмента накладываются один на другой практически идеально:
Теперь наложение геометрически корректно, но мы наблюдаем весьма заметный скачок яркости на швах:
Эту проблему легко исправить, если вместо средних значений, накладывать их с градиентом:
С таким подходом, шва вообще не видно:
В принципе, есть еще и другие методики склейки, например, multiband blending, которые используют для склейки панорам, но они плохо работают с текстом — только компенсация оптического потока способно полностью убрать двоения на тексте.
Теперь склеиваем полное изображение:
Финальный вариант:
Дальнейшими улучшениями могут быть компенсация эффекта тени (правая сторона изображения), либо еще большая пост-обработка цвета и контрастности. Также видно, что слегка пострадала глобальная геометрия — линии справа чуть уползли вверх. Это проблему теоретически тоже можно исправить добавлением глобальной коррекцией масштабирования, но это тоже не совсем тривиальная задача.
Мы рассмотрели, как работает склейка, готовое решение доступно здесь в виде REST API, также рекомендую посмотреть следующие ссылки:
- SIFT explained
- OpenCV homography explained
- Panorama Autostitching
- OpenPano
- Google Photo Scanner
«Как соединить 2 разные фотки?» — Яндекс Кью
Популярное
Сообщества
ФотографииФотошопФоторедакторы
Анонимный вопрос
·
1,2 K
ОтветитьУточнитьMovavi
7
Видео — это просто · 23 нояб 2020 · movavi.ru
Отвечает
Инга
Если вы хотите соединить в одном изображении два фото или заменить фон в картинке, для этих задач прекрасно подойдёт Picverse от Movavi. С этой программой вы также сможете скорректировать цвета на снимке, удалить ненужные объекты, сделать ретушь и многое другое.
Объединение фотографий или замена фото займёт всего несколько шагов.
Загрузите фотографию в программу
Нажмите кнопку Открыть файл и выберите изображение, которое вы собираетесь редактировать, либо просто перетащите его из папки в окно Picverse.
Отметьте объекты на переднем плане
Сначала откройте вкладку Замена фона. Чтобы выделить объекты вручную, используйте зеленую кисть. Затем отметьте изображение сзади красной кистью для фона. Вы также можете воспользоваться инструментом Лассо, чтобы выделить объекты для удаления. Просто установите начальную точку, затем перемещайте инструмент вокруг объекта; линия будет точно отмечать его края. Отмеченные объекты будут выделены рамкой. Затем нажмите кнопку Следующий шаг. Если вы хотите оставить на фото только людей, нажмите кнопку Автовыделение – программа автоматически обведет фигуры по контуру и перейдет к следующему шагу.
Уточните границы
Когда объект выделен, проведите кистями-масками по контуру, чтобы добавить нужные или вычесть лишние области. Используйте инструмент Выделение волос, чтобы уточнить мелкие детали. Если результат вас устраивает, еще раз нажмите Следующий шаг.
Замените фон или добавьте второе изображение
Нажмите Добавить изображение. Выберите картинку из встроенной коллекции фонов или нажмите Загрузить, чтобы использовать собственное фото. Нажмите Применить, чтобы сохранить изменения.
Сохраните отредактированное изображение
Чтобы сохранить фотографию, нажмите на значок дискеты в правом верхнем углу окна программы, выберите желаемый формат изображения и нажмите OK.
Готово!
Комментировать ответ…Комментировать…
Vladimir Kanivetc
8
17 нояб 2020
Только фотошоп. Это если нужно еще что-то подрезать, подогнать, подкрасить и тд
Если по проще, просто наложить к примеру фон и пнг картинки, то крутой инструмент canva
Комментировать ответ…Комментировать…
Вы знаете ответ на этот вопрос?
Поделитесь своим опытом и знаниями
Войти и ответить на вопрос
Предметы для хранения архивов и фотографий
Зарегистрированные пользователи
Если у вас есть учетная запись, пожалуйста, войдите в систему.
Оформление заказа в качестве гостя
Если вы оформляете заказ в качестве гостя, введите адрес электронной почты, чтобы получить подтверждение вашего заказа и информацию об отправке.
Требуется действительный адрес электронной почты. Я согласен с Политикой конфиденциальности — Обязательно Подпишитесь на рекламные акции и рассылку по электронной почтеПОЛИТИКА КОНФИДЕНЦИАЛЬНОСТИ
Х ЗАКРЫТЬ
Эта политика вступает в силу после ее принятия для новых пользователей и будет применяться ко всем существующим пользователям в дальнейшем. Ниже описано, как ваша личная информация собирается, используется и передается, когда вы посещаете или совершаете покупку на нашем веб-сайте.- Наша приверженность конфиденциальности
- Какую информацию мы собираем?
- Как мы используем информацию, которую вы нам предоставляете?
- Как мы используем информацию, которую собираем из файлов cookie?
- Уведомление о новых услугах и изменениях
- Как обеспечить безопасность передачи информации?
- Как мы защищаем вашу информацию?
- Как вы можете получить доступ к своей информации и исправить ее?
- Раскрываем ли мы информацию внешним сторонам?
- Как насчет раскрытия информации по закону?
- А как насчет других сайтов, связанных с нашим сайтом?
1 Наша приверженность конфиденциальности
Наша Политика конфиденциальности была разработана как продолжение нашего стремления сочетать продукты и услуги высочайшего качества с высочайшим уровнем честности в отношениях с нашими клиентами и партнерами. Политика предназначена для того, чтобы помочь вам понять, как мы собираем, используем и защищаем личную информацию, которую вы нам предоставляете, а также чтобы помочь вам принимать обоснованные решения при использовании нашего сайта, наших продуктов и услуг. Это заявление будет постоянно оцениваться с точки зрения новых технологий, методов ведения бизнеса и потребностей наших клиентов.
Наверх
2 Какую информацию мы собираем?
Когда вы посещаете наш веб-сайт, вы можете предоставить нам два типа информации: личную информацию, которую вы сознательно решили раскрыть, которая собирается на индивидуальной основе, и информацию об использовании веб-сайта, собранную на совокупной основе, когда вы и другие лица просматриваете наш веб-сайт.
Личная информация, которую вы решили предоставить:
ИНФОРМАЦИЯ О КРЕДИТНОЙ КАРТЕ
Если вы решите приобрести продукты или услуги у нас или у наших партнеров, вам может потребоваться предоставить личную информацию. Например, вам может потребоваться предоставить следующую информацию:
ИНФОРМАЦИЯ ПО ЭЛЕКТРОННОЙ ПОЧТЕ
В дополнение к предоставлению вышеуказанной информации нашим партнерам, если вы решите продолжать переписку с нами по электронной почте, мы можем сохранить содержимое ваших сообщений электронной почты вместе с вашим адресом электронной почты и нашими ответами. Мы обеспечиваем те же средства защиты для этих электронных сообщений, которые мы используем при хранении информации, полученной по почте и телефону.
Информация об использовании веб-сайта:
Подобно другим коммерческим веб-сайтам, наш веб-сайт использует стандартную технологию, называемую «куки» 9.0010 (см. пояснение ниже «Что такое файлы cookie?») и журналы веб-сервера для сбора информации об использовании нашего веб-сайта. Информация, собранная с помощью файлов cookie и журналов веб-сервера, может включать дату и время посещений, просмотренные страницы, время, проведенное на нашем веб-сайте, а также веб-сайты, посещенные непосредственно перед нашим веб-сайтом и сразу после него. Эта информация собирается на агрегированной основе. Ни одна из этих сведений не связана с вами как с физическим лицом.
Наверх
3 Как мы используем информацию, которую вы нам предоставляете?
В целом, мы используем личную информацию для целей управления нашей коммерческой деятельностью, предоставления обслуживания клиентов от точки продажи до доставки заказа. Иногда мы также можем использовать собираемую нами информацию, чтобы уведомлять вас о важных изменениях на нашем веб-сайте, новых услугах и специальных предложениях, которые, по нашему мнению, могут оказаться для вас ценными. Списки, используемые для отправки вам предложений продуктов и услуг, разрабатываются и управляются в соответствии с нашими традиционными корпоративными стандартами, призванными обеспечить безопасность и конфиденциальность личной информации наших клиентов.
Вернуться к началу
4 Как мы используем информацию, которую собираем из файлов cookie?
Что такое файлы cookie? Файлы cookie — это функция программного обеспечения веб-браузера, которая позволяет веб-серверам распознавать компьютер, используемый для доступа к веб-сайту. Файлы cookie — это небольшие фрагменты данных, которые веб-браузер пользователя сохраняет на жестком диске пользователя. Файлы cookie могут запоминать, к какой информации пользователь обращается на одной веб-странице, чтобы упростить последующее взаимодействие с этим веб-сайтом того же пользователя или использовать эту информацию для оптимизации транзакций пользователя на связанных веб-страницах. Это облегчает пользователю переход с веб-страницы на веб-страницу и выполнение коммерческих транзакций через Интернет. Файлы cookie должны сделать вашу работу в Интернете более удобной и персонализированной.
Мы используем программные инструменты браузера веб-сайта, такие как файлы cookie и журналы веб-сервера, для сбора информации о действиях пользователей на нашем веб-сайте, чтобы постоянно улучшать наш веб-сайт и лучше обслуживать наших клиентов. Эта информация помогает нам разрабатывать и упорядочивать наши веб-страницы наиболее удобным для пользователя образом, а также постоянно улучшать наш веб-сайт, чтобы лучше удовлетворять потребности наших клиентов и потенциальных клиентов. Файлы cookie помогают нам собирать важную деловую и техническую статистику. Информация в файлах cookie позволяет нам отслеживать пути, по которым пользователи переходят на наш веб-сайт при переходе с одной страницы на другую. Журналы веб-сервера позволяют нам подсчитать, сколько людей посещает наш веб-сайт, и оценить посещаемость нашего веб-сайта. Мы не используем эти технологии для захвата вашего индивидуального адреса электронной почты или какой-либо идентифицирующей вас информации, хотя они позволяют нам отправлять вам целенаправленные рекламные баннеры в Интернете или другие подобные ответы.
Вернуться к началу
5 Уведомление о новых услугах и изменениях
Иногда мы также можем использовать собираемую нами информацию, чтобы уведомлять вас о важных изменениях на нашем веб-сайте, новых услугах и специальных предложениях, которые, по нашему мнению, могут быть вам полезны. Как наш клиент, вам будет предоставлена возможность уведомить нас о своем желании не получать эти предложения, щелкнув поле ответа, когда вы получите такое предложение, или отправив нам запрос по электронной почте по адресу mail@archivalmethods. com.
Вернуться к началу
6 Как мы защищаем передачу информации?
Когда вы отправляете нам конфиденциальную информацию о личной кредитной карте на нашем веб-сайте, защищенное серверное программное обеспечение, лицензированное нами, шифрует всю введенную вами информацию перед ее отправкой нам. Информация шифруется в пути и расшифровывается, когда попадает на наш веб-сайт. Другая электронная почта, которую вы можете отправить нам, может быть небезопасной, если только мы не сообщим вам о принятии мер безопасности до передачи вами информации. По этой причине мы просим вас не отправлять нам конфиденциальную информацию, такую как номер социального обеспечения или номера счетов (включая информацию о кредитной карте), по незащищенной электронной почте.
Вернуться к началу
7 Как мы защищаем вашу информацию?
Информационная безопасность. Мы используем программное обеспечение для шифрования/защиты для защиты конфиденциальности личной информации, которую мы собираем, от несанкционированного доступа или раскрытия, а также от случайной потери, изменения или уничтожения. Оценка методов защиты информации. Периодически наши операции и методы ведения бизнеса проверяются на соответствие корпоративным политикам и процедурам, регулирующим безопасность, конфиденциальность и качество нашей информации. Доступ сотрудников, обучение и ожидания. Наши корпоративные ценности, этические стандарты, политика и практика направлены на защиту информации клиентов. В целом наша деловая практика ограничивает доступ сотрудников к конфиденциальной информации, а также ограничивает использование и раскрытие такой информации уполномоченным лицам, процессам и транзакциям.
Вернуться к началу
8 Как вы можете получить доступ к своей информации и исправить ее?
Вы можете запросить доступ ко всей информации, позволяющей установить вашу личность, которую мы собираем в Интернете и храним в нашей базе данных, отправив электронное письмо по адресу mail@archivalmethods. com или просто войдя в систему, чтобы просмотреть и обновить данные своей учетной записи.
Вернуться к началу
9 Раскрываем ли мы информацию третьим сторонам?
Мы предоставляем информацию третьим сторонам по мере необходимости, чтобы лучше обслуживать наших клиентов. Например, адресная информация, необходимая для доставки через UPS, FedEx, USPS . Мы также используем Google Analytics , чтобы понять, как клиенты взаимодействуют с нашим сайтом. Чтобы узнать больше о политике Google , нажмите здесь . В рекламных и маркетинговых целях — Google Adwords, Mail Chimp, Reseller Rating и Stamped — это авторизованные сервисы, которые мы используем для предоставления персонализированной рекламы, а также для предоставления вам возможности отправлять отзывы клиентов. От нас также может потребоваться обмен информацией в соответствии с применимыми законами, но только для того, чтобы соблюдать правила в ответ на повестку в суд, ордер на обыск или другие законные запросы.
Чтобы отказаться, следуйте приведенным ниже ссылкам для получения конкретных инструкций:- Google Analytics — (отказ с помощью надстройки браузера)
- Google Ads – (отказ от участия путем изменения настроек персонализации)
- Маркетинг по электронной почте — (Отказ от рассылки путем изменения настроек электронной почты вашей учетной записи — войдите здесь, если это еще не сделано)
Вернуться к началу
10 Как насчет законного раскрытия информации?
Мы можем раскрывать информацию, когда мы обязаны это сделать по закону, другими словами, когда мы добросовестно считаем, что этого требует закон или для защиты наших законных прав.
Вернуться к началу
11 А как насчет других веб-сайтов, связанных с нашим веб-сайтом?
Мы не несем ответственности за методы, применяемые веб-сайтами, на которые есть ссылки на наш веб-сайт или с нашего веб-сайта, а также за информацию или содержание, содержащееся на нем. Это относится к любым реферальным сайтам с купонами или деловым рефералам. Часто ссылки на другие веб-сайты предоставляются исключительно как указатели на информацию по темам, которые могут быть полезны пользователям нашего веб-сайта.
Вернуться к началу
Х ЗАКРЫТЬ
слоев — Gimp: как совместить два изображения рядом
Начните с холста нужного размера, затем переместите/обрежьте/масштабируйте оба изображения на этот холст
В большинстве случаев вы получите желаемое целевой размер выходного изображения, и вы хотите, чтобы два изображения хорошо вписались в него.
Запустите GIMP и создайте пустой холст (Ctrl + N) нужного размера. Предположим, наша цель 1280×720 (720p):
У нас остается пустой белый холст:
Теперь давайте импортируем изображения, которые мы хотим добавить на этот холст, в виде слоев.
Для этого нажмите:
Ctrl + Alt + O
и выберите оба изображения.
В результате наш список слоев внизу сейчас состоит из трех слоев:
- love.png
- Будай.jpg
- Фон
Теперь все, что нам нужно сделать, это либо:
- Переместить (М)
- Шкала. Вы захотите использовать Правый клик -> Слой -> Масштабировать слой вместо Shift + S, потому что Shift + S делает края изображения прозрачными: Как предотвратить превращение краев слоя без прозрачности в полупрозрачные при масштабировании с помощью Shift+S в GIMP?
- А чтобы использовать слой Масштаб, вы можете захотеть получить высоту меньшего слоя, чтобы она соответствовала другому слою. Это также можно получить, зайдя в меню «Масштабировать слой» другого изображения, но не внося никаких изменений
- Обрезать, как показано на: GIMP: Как обрезать слой?
- Выбор прямоугольника (R)
- Слой > Обрезать по выделенному
- Возможно, вы захотите обрезать до точного размера на основе другого слоя, это можно сделать численно из меню выбора, как показано по адресу: https://superuser. com/questions/463585/how-to-set-a-custom. -размерный-прямоугольник-выбрать-область-в-GIMP
- И после того, как вы введете желаемый размер выделения, вы можете захотеть переместить выделение в интересующую область: GIMP: Как переместить выделение в слое?
Просто помните, что вы должны сначала выбрать слой, над которым хотите работать, из списка слоев: будет затронут только этот слой!
Делая это, я начинаю с грубого приближения, а затем уточняю его.
Например, эта любовь слишком велика для холста, поэтому я сначала уменьшаю ее до высоты 720p:
Теперь мы видим, что она будет слишком широкой, поэтому давайте обрежем прямоугольник пополам. общей шириной 640 пикселей и переместите его в левый верхний угол.
Мы можем обрезать прямоугольник точной ширины, указав размер выделения в числовом виде, как указано по адресу: https://superuser.com/questions/463585/how-to-set-a-custom-sized-rectangle-select-area. -in-gimp
Обратите внимание, что мне даже не нужно устанавливать точную высоту, просто проще использовать очень большую высоту, чтобы не обрезать изображение по вертикали.
Затем я перемещаю выделение влево в нужное положение с помощью мыши, и после кадрирования мы имеем:
Наконец, я начинаю работать над правильным изображением.
Этот недостаточно высокий, поэтому нам придется увеличить его до 720 пикселей, что не идеально, но мы ничего не можем с этим поделать.
Самое классное, что мне даже не нужно резать второй слой, так как он уже находится за верхним слоем. Я могу просто двигать его, пока он не будет хорошо выглядеть.
Это дает окончательный результат:
Использованные тестовые изображения:
budai.jpg 1067×600
love.png 1920×1080
Протестировано на GIMP 2.10.18, Ubuntu 20.10.
Если изображения не нужно редактировать, просто используйте ImageMagick из командной строки
Если вы используете GIMP, вам, вероятно, потребуется обрезать/масштабировать изображения, чтобы сделать их разумной композицией.
Но для конкретного случая, когда вы этого не сделаете, ImageMagick из командной строки, безусловно, является самым простым вариантом, как указано в https://stackoverflow.