Obecnie utknąłem na projekcji wideo ze zdjęć.Wybierz jasność (ekspozycję) z obrazu HDR
Problem:
jestem wydobycia zdjęć z UE4, z powodu błędu, nie wszystkie światła są brane pod uwagę podczas renderowania ekranu. Wyjście to obrazy HDR. Chcę uzyskać lepszą jasność, ponieważ wyeksportowane zdjęcie jest bardzo ciemne, tak jak pierwsza ekspozycja.
Korzystanie z „Odchylenie ekspozycji” parametr w UE4 jestem w stanie rzeczywistym dobrej jasności mojej scenie, ale nie można zastosować ten parametr do renderowania Zrzut ekranu:
Tries:
Stosując algorytm Tonemapper (speciafically cv::TonemapDrago
) jestem w stanie uzyskać lepszy efekt obrazu:
Głównym problemem, dla mojego przypadku, algorytmu Tonemap jest to, że globalna jasność zmienia się w zależności od jasności obszarów: na drugim obrazie okno dodaje dużo światła, więc algorytm obniża całą jasność, aby dostosować oznaczać. Na wyświetlanym wideo zmiana światła jest bardzo brutalna.
Próbowałem zmienić brightness i nasycenie bez powodzenia. Zmodyfikowałem kod TonemapDrago
próbując użyć stałych dla jakiegoś steps algorytmu.
Pytanie:
chciałbym "wybrać czas naświetlania" z obrazu HDR. Tonemap opiera się na kilku czasach naświetlania tego samego obrazu, co nie jest interesujące w moim przypadku.
Każdy inny pomysł jest mile widziany.
EDIT:
głębokość CV :: Mat to 5, typ jest CV_32FC3
cout << mat.step
mi dać 19200
Oto 2 próbki i używać, aby spróbować rozwiązać mój problem:
Edit 2:
nie można otworzyć obraz .hdr z gimp, zdarzenia z wtyczki "explosure blend". Jestem w stanie osiągnąć wystarczająco dobry wynik przy użyciu Photoshopa. Masz pomysł na algorytm? Każdy z 6 alg Tonemap przez OpenCV pozwala wybrać korektę ekspozycji.
EDIT 3:
Mam następnie algorytm wyjaśnić w tym tuto dla OpenGL, który daje to C + kod do mnie:
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;
}
Stosując tę algo na moim. Obraz HDR uzyskałem bardzo jasny wynik nawet z korektą 1 i 1 dla gamma i ekspozycji:
Czytanie kodu, coś jest nie tak, ponieważ 1 i 1 jako argument nie powinny modyfikować obrazu. Naprawiono to, odpowiedź została zaksięgowana. bardzo dziękuję @ user3896254 (Ge również to zauważył)
Jaki format obrazu wyjściowego w? Jeśli nie ma wystarczającej głębi bitowej, odzyskanie utraconych danych może nie być możliwe. –
@MarkRansom Format piksela .hdr otwarty z opencv to CV_32FC3 – Marcassin
Jeśli prześlesz gdzieś przykład tego obrazu - łatwiej nam będzie Ci pomóc. Możesz zrzucić surowy bufor obrazu do pliku binarnego i powiedzieć rozdzielczość obrazu, aby inni mogli z niego korzystać. – alexisrozhkov