В настоящее время я застрял на видеопроекте из фотографий.
Проблема:
Извлекаю картинки из UE4, из-за бага не все огни учитываются при рендеринге скриншота. На выходе получаются HDR-изображения. Я хочу получить лучшую яркость, потому что экспортированное изображение очень темное, как и первая экспозиция.
Используя параметр «смещение экспозиции» в UE4, я могу получить действительно хорошую яркость моей сцены, но не могу применить этот параметр к рендерингу скриншота:
Попытки:
Используя алгоритм Tonemapper (в частности, cv::TonemapDrago
), я могу получить лучший результат изображения:
В моем случае основная проблема алгоритма Tonemap заключается в том, что глобальная яркость изменяется в зависимости от яркости областей: на втором изображении окно добавляет много света, поэтому алгоритм уменьшает всю яркость, чтобы настроить среднее значение. В отрендеренном видео изменение света очень резкое.
Я пытался изменить яркость и насыщенность без успех. Я изменил код TonemapDrago
, пытаясь использовать константы для некоторых этапы алгоритма.
Вопрос:
Я хотел бы «выбрать время экспозиции» из изображения HDR. Тональная карта основана на нескольких временах экспозиции одного и того же изображения, что в моем случае неинтересно.
Любая другая идея приветствуется.
ИЗМЕНИТЬ:
CV::Глубина коврика равна 5, тип CV_32FC3.
cout << mat.step
дайте мне 19200
Вот 2 примера, которые я использую, чтобы попытаться решить мою проблему:
Редактировать 2:
Невозможно открыть изображение .HDR с помощью gimp, событие с плагином «explosure blend». Я могу получить достаточно отличный результат с помощью Photoshop. Любое представление об алгоритме, стоящем за этим? Любой из 6 алгоритмов Tonemap от OpenCV позволяет выбрать коррекцию экспозиции.
ИЗМЕНИТЬ 3:
Я следовал алгоритму, описанному в этом уроке для openGL, который дает этот C+ код мне:
cv::Mat exposureTonemap (cv::Mat m, float gamma = 2.2, float exposure = 1)
{
// Exposure tone mapping
cv::Mat exp;
cv::exp( (-m) * exposure, exp );
cv::Mat mapped = cv::Vec3f(1.0) - exp;
// Gamma correction
cv::pow(exp, 1.0f / gamma, exp);
cv::imshow("exposure tonemap", exp );
cv::waitKey();
return exp;
}
Применив этот алгоритм к моему изображению .HDR, я получил очень яркий результат даже с коррекцией 1 и 1 для гаммы и экспозиции:
Читая код, что-то не так, потому что 1 и 1 в качестве аргумента не должны изменять изображение. Исправлено, ответ опубликован. Большое спасибо @user3896254 (Ge тоже видел это в комментарии)