У меня есть стопка фрагментов изображений (взятых с дрона), которые я хочу объединить в единое изображение. Я хочу сделать компенсацию экспозиции, чтобы уменьшить разницу в освещении между фрагментами изображения перед созданием мозаики из-за различий в каждом изображении. Я видел следующую формулу, используемую для такой задачи:
где:
p' - правильный пиксель
p — исходный нескорректированный пиксель
k - число F диафрагмы
t - время экспозиции
К - это ISO
Из моих метаданных EXIF я получаю следующие значения:
к = 2,200000078
т = 0,002007692122
К = 100
Это дает мне поправочный коэффициент 24,1072836326 (на основе приведенного выше уравнения), который, если я использую его для умножения на все пиксели (p) в изображении, приводит к резкому изменению значений пикселей (p'). Есть ли что-то, что я делаю неправильно здесь? Например, мои единицы измерения правильные?
В: «Как мне компенсировать экспозицию группы фотографий, чтобы я мог склеить их вместе?».
Я тоже не согласен с формулой, не так ли: p' = p + (p * (k^2)/(t*k)) ? [Примечание: вы хотели бы исправить «t», как указано выше в комментарии @Michael Clark.]
В любом случае, ваш «метод компенсации» состоит в том, чтобы просто сделать каждый пиксель на конкретной фотографии немного темнее или немного ярче, выровнять их, а затем сшить вместе.
Посмотрите на блок-схему демонстрации OpenCV Stitching:
Видеть? (ваш метод не даст красивых и идеальных результатов в его нынешнем виде).
Во-первых (ну, я начну с этого) вам нужны Регистрационные данные (желтый блок посередине).
Регистрационные данные идут в «Деформацию изображений», одно из которых идет в «Оценить ошибки экспозиции», а затем «Компенсировать ошибки экспозиции».
Затем деформированные и компенсированные изображения смешиваются.
Вы можете просмотреть исходный код , чтобы увидеть, как реализована формула.
Вы можете просто загрузить исполняемый файл Windows с SourceForge, чтобы не тратить время на чтение, изучение и компиляцию.
Есть много других бесплатных программ для сшивания, большинство из которых имеют исходный код.
Я предполагаю, что ваша формула даст такой результат:
Вместо этого вы, вероятно, хотите получить такой результат:
Есть ли что-то, что я делаю неправильно здесь?
Да. Вы предполагаете, что вид на каждом изображении должен иметь одинаковую среднюю яркость. Но когда вы направляете камеру в разные стороны при одинаковых условиях освещения, вы меняете композицию сцены. Возможно, вы снимаете менее яркое небо и более темный передний план. Или вы можете снимать меньше светлой травы и больше темных деревьев. Нельзя ожидать, что все изображения будут иметь одинаковую среднюю яркость, когда каждое изображение снимается с разных направлений на разные объекты.
Самый эффективный способ избежать этой проблемы — установить одинаковую экспозицию для всех кадров перед съемкой (т. е. ручная экспозиция или блокировка экспозиции ). Поскольку вы этого не сделали, лучше всего отрегулировать относительную экспозицию каждого кадра, чтобы компенсировать разницу в экспозиции при съемке изображений. То есть вам нужно выбрать значение экспозиции в одном кадре, а затем нормализовать все остальные кадры, компенсируя разницу в ISO, времени затвора и диафрагмы значением экспозиции в выбранном вами изображении.
осуллик
Майкл С
Майкл С
Ландини135