Компенсация экспозиции OpenCV без необходимости сшивания изображений

У меня есть куча изображений с разной экспозицией, и я хочу сшить их вместе:

Изображения в оттенках серого, преобразованные в цветовую карту JET для иллюстрации

В OpenCV есть пример Stitcher, но он основан на сопоставлении функций между изображениями, и они должны перекрываться друг с другом.

Мои изображения не перекрываются, НО они соединены друг с другом непрерывно (как если бы я разделил панораму на несколько частей), и я хочу соединить их вместе и исправить их экспозицию.

Как я могу сделать это в OpenCV Python? По крайней мере, класс Compensator нуждается:

compensator.feed(corners=corners, images=images_warped, masks=masks_warped)

images_warped может быть просто обычным вводом images, а masks_warped может быть двумерным массивом единиц, но я не знаю, как значение corners должно быть задано вручную?

достаточно простого примера, спасибо.

Отдельные изображения

введите здесь описание изображения введите здесь описание изображения введите здесь описание изображения


person Cypher    schedule 31.01.2020    source источник
comment
Было бы полезно, если бы вы предоставили отдельные изображения без буферов между ними. Попробуйте np.hstack(). См. docs.scipy.org/doc/numpy/reference/generated /numpy.hstack.html   -  person fmw42    schedule 31.01.2020
comment
@ fmw42 О ... Буферы предназначены только для демонстрационных целей, а изображение представляет собой скриншот из миниатюр изображений в проводнике Windows. Между реальными изображениями нет буфера: просто необработанные отдельные изображения.   -  person Cypher    schedule 31.01.2020
comment
Я прошу вас предоставить исходные изображения, чтобы мы могли продемонстрировать код с вашими изображениями.   -  person fmw42    schedule 31.01.2020
comment
@ fmw42 Я добавил их в конец вопроса. Спасибо. а также, пожалуйста, знайте, что ответ от nathancy не то, что я имел в виду.   -  person Cypher    schedule 01.02.2020
comment
Что представляют собой эти изображения? Похоже на карту глубины с примененной цветовой картой. Конечно, вы могли бы использовать многополосное смешивание. Но если у вас есть необработанная карта глубины, я бы сначала сшил, а затем применил карту цветов к панораме.   -  person Catree    schedule 01.02.2020
comment
@Catree Как вы сказали: необработанные карты глубины с примененной цветовой картой JET (только для целей иллюстрации). Как я могу использовать многополосное смешивание? Можете ли вы предоставить некоторые рекомендации или пример кода, пожалуйста? Спасибо.   -  person Cypher    schedule 02.02.2020
comment
@Cypher Я имел в виду панораму, разные изображения сняты с разной экспозицией. Здесь я думаю, что карта цветов берет максимальное и минимальное необработанные значения глубины и преобразует их в карту цветов. Поскольку максимальное и минимальное значения различаются для трех карт глубины, вы видите эти разрывы. Но если вы примените цветовую карту позже, вы не увидите разрывов. В противном случае это означает, что три карты глубины имеют разрывы, и вы действительно можете использовать методы смешивания из поля обработки панорамы.   -  person Catree    schedule 02.02.2020


Ответы (2)


Предполагая, что каждое из ваших изображений имеет одинаковые размеры, и поскольку изображения OpenCV представляют собой массивы Numpy, мы можем использовать np.concatenate, np.hstack или cv2.hconcat< /а>.

import cv2
import numpy as np

# Load images
image1 = cv2.imread('1.png')
image2 = cv2.imread('2.png')
image3 = cv2.imread('3.png')

# Method #1
hstack = np.hstack((image1, image2, image3))

# Method #2
concatenate = np.concatenate((image1, image2, image3), axis=1)

# Method #3
hconcat = cv2.hconcat([image1, image2, image3])

cv2.imshow('hstack', hstack)
cv2.imshow('concatenate', concatenate)
cv2.imshow('hconcat', hconcat)
cv2.waitKey()

Результат должен быть таким же

введите здесь описание изображения

person nathancy    schedule 31.01.2020
comment
Как видите, есть вертикальные линии, соединяющие каждую секцию с другой, и эти вертикальные линии нежелательны. Класс компенсатора экспозиции OpenCV устраняет эти проблемы непрерывности, и мой вопрос заключается в том, как использовать этот класс с такими изображениями (у которых нет перекрывающихся секций). - person Cypher; 01.02.2020

Я бы создал перекрывающийся раздел, продублировав на каждом изображении небольшую часть соседнего изображения. Затем нужно немного поработать, чтобы обработать это как обычный процесс сшивания.

person Pilip38    schedule 25.05.2020