Баланс контрастности и яркости между совмещенными изображениями

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


person JavaCake    schedule 20.12.2012    source источник


Ответы (2)


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

Извините, если это уже очевидно для вас, но ваш общий вопрос приводит меня к общему ответу.

person dvhamme    schedule 21.12.2012
comment
Можете ли вы случайно показать мне практический пример? Я понимаю концепции, но реализация в OpenCV немного потеряна. - person JavaCake; 22.12.2012

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

Компенсация экспозиции выполняется в 3 этапа:

  1. Создайте свой компенсатор экспозиции

    Ptr<ExposureCompensator> compensator = ExposureCompensator::createDefault(expos_comp_type);

  2. Вы вводите все свои изображения вместе с верхними левыми углами каждого из них. Вы можете оставить маски полностью белыми по умолчанию, если вы не хотите указать определенные части изображения для работы.

    compensator->feed(corners, images, masks);

  3. Теперь у него есть вся информация о том, как изображения перекрываются, вы можете компенсировать каждое изображение по отдельности.

    compensator->apply(image_index, corners[image_index], image, mask);

Компенсированное изображение будет сохранено в image

person DevGoldm    schedule 09.01.2013
comment
Не могли бы вы поделиться кодом. Я пробовал это и не мог заставить его работать! - person user65721; 28.07.2013
comment
Я тоже пытаюсь это сделать. Для получения дополнительной информации это реализовано в примере stitching_detailed.cpp из примеров проектов cpp. - person Sergio Basurco; 09.10.2013
comment
Интересно, углы всегда могут быть (0,0) или что-то еще. - person user1098761; 10.11.2015