2016-08-16 17 views
12

Czy możliwe jest przetwarzanie (filtrowanie) obrazów HDR za pomocą Core Image? Nie mogłem znaleźć wiele dokumentacji na ten temat, więc zastanawiałem się, czy ktoś może mieć odpowiedź na to. Ja wiem, że jest to możliwe do wykonania obliczeń przestrzeni roboczej z RGBAh kiedy zainicjować CIContext, więc pomyślałem, że jeśli możemy zrobić z obliczeń zmiennoprzecinkowych formatów obrazu punktu, że powinno być możliwe ..Obrazy HDR poprzez Core Image?

Co, jeśli w nie jest to możliwe, czy istnieją alternatywy, jeśli chcesz produkować efekty HDR na iOS?

EDYCJA: Pomyślałem, że postaram się być nieco bardziej zwięzły. Rozumiem, że obrazy HDR mogą być zaciśnięte i zapisane jako .jpg, .png i inne formaty obrazu poprzez zaciśnięcie wartości pikseli. Jednak bardziej interesuje mnie mapowanie tonów poprzez obraz rdzenia na obrazie HDR, który nie został jeszcze przekonwertowany. Problem polega na kodowaniu CIImage z obrazem HDR, podobno z rozszerzeniem .hdr.

EDIT2: Może warto byłoby użyć CGImageCreate wraz z CGDataProviderCreateWithFilename?

Odpowiedz

3

Mam nadzieję, że masz podstawową wiedzę na temat działania HDR. Plik HDR jest generowany przez przechwytywanie 2 lub więcej obrazów przy różnych ekspozycjach i łączenie ich. Więc nawet jeśli istnieje coś takiego jak plik .HDR, byłby to format kontenera z więcej niż jednym plikiem jpg. Z technicznego punktu widzenia nie można podać dwóch plików obrazów jednocześnie jako danych wejściowych do ogólnego narzędzia CIFilter.

W przypadku iOS, jak pamiętam, nie jest możliwy dostęp do oryginalnego zestawu zdjęć HDR, ale przetworzonego wydruku końcowego. Nawet gdybyś mógł, musiałbyś ręcznie wykonać proces HDR i wygenerować pojedynczy HDR png/jpg tak czy inaczej przed dostarczeniem go do CIFiltera.

+0

Po połączeniu, wynikowy plik nie może być w żaden sposób wykorzystywany do dostarczania informacji o pikselach? Być może mamy taki plik na zewnątrz, stąd rozszerzenie .hdr, które widziałem używane w przykładowym kodzie MATLAB do mapowania tonów, nie można po prostu dostarczyć tego pliku i zakodować wynikowy obraz do CIImage? Może nie jest to celem Core Image, aby robić odwzorowanie tonów na zdjęciach HDR? Chociaż technicznie jest to możliwe, za pomocą własnych filtrów. –

+0

@DavidSacco pierwszy problem polega na tym, że w systemie iOS nie ma dostępu do oryginalnie przechwyconych obrazów, które mają różne ekspozycje. A po ostatecznym przetworzeniu HDR nie przechowuje informacji o pikselach plików źródłowych, ponieważ technicznie niemożliwe jest przechowywanie takich danych w 3 kanałach RGB. W przypadku obrazów w systemie iOS "HDR" są to tylko pliki JPEG, które zostały już przetworzone przy użyciu wielu zdjęć z różnymi ekspozycjami. – sleepwalkerfx

+0

Dzięki, tak, z mojego własnego google-fu jest to również to, czego się nauczyłem. Zastanawiam się, czy którykolwiek z nowych elementów iOS 10 dotyczących obrazów .RAW może pomóc. Nauczyłem się również, że obrazy HDR można zapisywać w postaci zmiennoprzecinkowej.Plik TIFF, w którym można zachować wysokie intensywności, wystarczy, że użytkownik będzie musiał dostarczyć wspomniany obraz, jeśli chce użyć mapowania tonalnego. Możliwe jest również, że twój kontekst jest obliczany w precyzji zmiennoprzecinkowej za pomocą opcji 'kCIContextWorkingFormat'. –

1

Ponieważ są ludzie, którzy proszą o algorytm CI HDR, postanowiłem udostępnić mój kod na github. Zobacz:

https://github.com/schulz0r/CoreImage-HDR

Jest to algorytm Robertson HDR, więc nie można korzystać z obrazów RAW. Zobacz testy jednostki, jeśli chcesz wiedzieć, jak uzyskać odpowiedź kamery i uzyskać obraz HDR. CoreImage nasyca wartości pikseli poza [0.0 ... 1.0], więc HDR jest skalowany do wspomnianego przedziału czasowego. Kodowanie za pomocą metalu zawsze powoduje dla mnie bałaganiarski kod, więc zdecydowałem się użyć MetalKitPlus, który musisz uwzględnić w swoim projekcie. Można go znaleźć tutaj:

https://github.com/LRH539/MetalKitPlus

Myślę, że trzeba sprawdzić gałąź dev/v2.0.0. Połączę to z mistrzem w przyszłości.

Powiązane problemy