W 1997 roku Debevec i Malik opublikowali interesującą pracę. Przedstawili w niej między innymi metodę pozwalającą na oszacowanie funkcji odpowiedzi systemu powstawania obrazu w oparciu o serię zdjęć wykonanych przy różnych wartościach ekspozycji. Metoda ta polega na znalezieniu funkcji minimalizującej w sensie metody najmniejszych kwadratów błąd rozwiązania układu równań liniowych wiążących wartość jasności pikseli obrazu z ekspozycją.
W celu określenia funkcji odpowiedzi cyfrowej lustrzanki Nikon D70 dla zdjęć zapisywanych przez aparat w formacie JPG wykonałem trzy serie ujęć. Każda seria składała się z jedenastu zdjęć wykonywanych dla kolejnych ustawień ekspozycji z krokiem 1EV w przedziale [-5EV, 5EV] względem właściwej wartości nastawu.
Do zdjęć zostały wybrane sceny nie zawierające elementów ruchomych i neutralne kolorystycznie. Cały kadr zawierał obiekty o szarych kolorach bez elementów o dużej saturacji. Fotografowane sceny zawierały rejony kontrastujące w jasności aby zapewnić szeroki rozkład punktów w przestrzeni [ekspozycja, jasność piksela] dla pojedynczych wartości ekspozycji. Miało to na celu poprawę jakości dopasowywania do siebie krzywych dla pojedynczych pikseli w trakcie obliczeń metodą najmniejszych kwadratów.
Przykładowe dwie serie zdjęć użyte do obliczeń przedstawione są na rysunkach poniżej.
Seria 1:
Seria 2:
Zdjęcia były wykonywane przy użyciu statywu, kolejno jedno po drugim, w odstępach czasu najkrótszych na jakie pozwalał aparat kontrolowany za pomocą kabla USB OTG przez program zdalnie wyzwalający migawkę zainstalowany na smartfonie. Wykonanie zdjęć w możliwie najkrótszym czasie było ważne żeby zapobiec zmianie warunków oświetleniowych podczas fotografowania. Wszystkie serie zdjęć zostały zrobione w pochmurny dzień przy słońcu całkowicie zasłoniętym chmurami. Zdjęcia wykonywano zachowując stałą liczbę przesłony, uzyskując zmienną wartość ekspozycji operując czasem otwarcia migawki. Pozwoliło to uniknąć problemów związanych ze zmianą głębi ostrości i winietowania. W celu zmniejszenia wkładu szumu z matrycy w rejonach o niskiej jasności, zdjęcia wykonywano przy najniższej możliwej wartości czułości 200 ISO. Wielkość zdjęć ustawiono na maksymalną.
Jako czasy otwarcia migawki uwzględnione w obliczeniach użyte zostały wartości wyświetlane przez aparat czyli np 1/500, 1/250 czy 1/125 s, pomimo tego, że Debevec i Malik sugerowali, że czasy będące wynikiem potęgowania liczby 2 (odpowiednio: 1/512, 1/256 czy 1/128 s) są bardziej zgodne z rzeczywistym czasem ekspozycji.
Z punktu widzenia stosunku jakości do wydajności obliczeń istotny jest wybór liczby pikseli obrazu dla których obliczenia będą wykonywane. Nikon D70 posiada 6 MPx matrycą, a największe zdjęcia zapisywane przez aparat w jakości JPG Fine są w rozmiarze 3008×2000 px. Ponieważ układ równań liniowych minimalizujących błąd znalezienia funkcji odpowiedzi jest rzędu N*P + Zmax-Zmin to wykorzystanie wszystkich 6.016.000 pikseli, przy serii 11 ekspozycji, dla obrazów 8-bit, wymagałoby utworzenia w pamięci tablicy o rozmiarze ok (3008*2000*11+2^8+1)*(2^8+3008*2000)*8/1000/1000/1000=3,185,066 GB pamięci RAM. Być może w przyszłości będzie można wykonywać takie obliczenia na telefonie komórkowym jednak obecnie nie są one (wg wiedzy autora) możliwe do przeprowadzenia. W rzeczywistości, żeby określić ten układ równań wystarczy uwzględnić N pikseli spełniających nierówność: N*(P-1)>(Zmax-Zmin); gdzie N – oznacza liczbę pikseli; P – liczbę ekspozycji; Zmax-Zmin to maksymalna różnica w jasności pikseli. Przy 11 ekspozycjach dla obrazu 8-bitowego, wystarczającą liczbą pikseli do obliczeń będzie: N>(2^8-1)/(11-1) czyli N>=26.
Znając wymaganą minimalna liczbę pikseli do obliczenia krzywej odpowiedzi, pozostaje jeszcze określenie sposobu próbkowania obrazu. W pracy z 1997 roku Debevec i Malik ręcznie określali które piksele miały być uwzględnione w obliczeniach. Ja zdecydowałem się na wybranie do obliczeń tablicy 600 pikseli (30×20) rozmieszczonych w jednorodnych odstępach od siebie z zachowaniem 5% marginesu od krawędzi obrazu. Ze względu na to że liczba pikseli była o rząd wielkości większa niż wymagana, układ charakteryzował się dużą redundancją, a w pamięci zajmował:
(30*20*11+2^8+1)*(2^8+30*20)*8/1000/1000=46.96MB RAM. Obliczenia na typowych komputerach były kwestią sekund.
Poniżej pokazane są wykresy otrzymanych funkcji odpowiedzi Nikona D70 dla zapisu JPG Fine dla trzech kolorów. W celu zmniejszenia wpływu skrajnych wartości jasności na oszacowanie funkcji, zastosowane zostało okno trójkątne jako funkcja określająca wagę jasności pikseli. Na ilustracjach przedstawione są także punkty w przestrzeni [ekspozycja, wartość piksela] które posłużyły do estymacji funkcji odpowiedzi.
Krzywa odpowiedzi aparatu Nikon D70 przy zapisie w formacie JPEG dla serii 1:
Krzywa odpowiedzi aparatu Nikon D70 przy zapisie w formacie JPEG dla serii 2:
Otrzymane krzywe są praktycznie identyczne. Przedstawiają poszukiwaną funkcję odpowiedzi aparatu.