W poprzednim wpisie przedstawiłem funkcję odpowiedzi aparatu Nikon D70 przy zapisie zdjęć w formacie JPG Fine. Tutaj chciałbym pokazać jak wygląda funkcja odpowiedzi w przypadku zapisu obrazu w formacie NEF, będącym natywnym formatem Nikona do zapisu danych surowych (RAW). Dane w tym formacie są zasadniczo nieprzetworzonym zapisem tego co zarejestrowała matryca aparatu. Pisząc nieprzetworzonym mam na myśli w tym przypadku brak przetworzenia w postaci konwersji gamma, czy balansu bieli. Jednak przetworzenie obrazu rejestrowanego na matrycy musi mieć miejsce już na etapie jego digitalizacji czyli przekształcenia informacji analogowej z matrycy (w postaci ładunku) na informację w postaci cyfrowej. Taka kwantyzacja ciągłej wartości wiąże się ze zmianą informacji. Ale jak donoszą niektórzy dociekliwi użytkownicy, Nikon miesza już nawet na tym etapie przetwarzając i zmieniając informację o obrazie.
W szczególności udowodniono, że zapis zdjęć w formacie NEF z bezstratną kompresją stosowany w aparacie Nikon D70, jest wbrew podawanym przez producenta informacjom stratny. W głównej mierze, strata informacji związana jest z obniżeniem rozdzielczości w jasnej części zakresu. Nikon D70 jest wyposażony w matrycę Sony ICX413AQ i 12-bitowy przetwornik analogowo-cyfrowy. Rozdzielczość 12-bitowa pozwala na zapis 2^12=4096 poziomów jasności, ale podczas konwersji do formatu RAW liczba poziomów jest limitowana do 683 i dopiero potem poddawana bezstratnej kompresji słownikowej podobnej do stosowanej w plikach ZIP. O ile kompresja rzeczywiście jest bezstratna to jednak informacja tracona jest na etapie kwantyzacji do 683 dyskretnych wartości jasności. Krzywa kwantyzacji jest zapisywana w plikach NEF. Kodowanie to zachowuje pełen zakres jasności, jednak zapis 12-bitowej informacji (4096 poziomów) w 683 dyskretnych wartościach powoduje zmniejszenie rozdzielczości w jasności. Kształt krzywej kwantyzacji, na początku liniowy, a następnie wzrastający z kwadratem, powoduje że rozdzielczość maleje wraz ze wzrostem jasności. Zastosowanie tego rodzaju konwersji miało prawdopodobnie na celu znaczne przyspieszenie (prawie o rząd wielkości) zapisu plików NEF przez aparat. Starsze modele (jak np D1H czy D100) potrafiły przetwarzać obraz przez 20-30 sekund wykonując kompresję przed zapisem. Obecne część nowych modeli aparatów posiada możliwość wyboru trybu zapisu plików NEF pomiędzy 12- i 14-bitowymi, oraz skompresowanymi i nieskompresowanymi.
Dodatkowo pewna utrata informacji w D70 związana jest z zastosowaniem optycznego filtra dolnoprzepustowego, mającego na celu usunięcie z obrazu składowych wysokoczęstotliwościowych. Matryca aparatu podczas zapisu obrazu niejako próbkuje scenę z pewną określoną częstotliwością zwaną częstotliwością próbkowania. Jeżeli w fotografowanej scenie występują jednak częstotliwości większe od połowy częstotliwości próbkowania to w rejestrowanym obrazie wystąpi zjawisko aliasingu, fotografom bądź grafikom znane pod nazwą efektu mory. Żeby przeciwdziałać temu zjawisku, producenci przez wiele lat umieszczali przed matrycą filtr rozmywający (usuwający wysokie częstotliwości) dostosowany do danej matrycy. To rozwiązanie gwarantowało, że częstotliwości wyższe niż dopuszczalne dla danej matrycy będą odfiltrowywane, a matryca zarejestruje tylko dozwolone częstotliwości. Łatwo też jest się domyślić jaka jest zależność częstotliwości próbkowania od rozmiaru matrycy (w megapikselach). Im większy rozmiar w MPx, tym większa jest częstotliwość próbkowania, czyli tym wyższe częstotliwości mogą być przez daną matrycę zarejestrowane bez ryzyka wystąpienia efektu aliasingu. Ostatnio, w związku postępem technologicznym i ciągłym wzrostem rozmiarów rejestrowanych obrazów, daje się zauważyć tendencję do usuwania tego filtru co bardzo pozytywnie wpływa na poprawę ostrości i zwiększenie szczegółowości zdjęć. Również Nikon w swoim najnowszym modelu D5300 zrezygnował z optycznego filtru dolnoprzepustowego uznając, że problem efektu mory nie jest przy rozmiarze zdjęcia 24 MPx już tak bardzo istotny.
Niemniej jednak, pomimo wspomnianych wyżej przekształceń, można by się spodziewać, że ponieważ w aparacie nie została wykonana kompresja gamma (jak w przypadku plików JPG), a matryca w Nikonie D70 to matryca CCD (dla której ładunek jest proporcjonalny do ekspozycji) to zależność odpowiedzi może być tutaj zbliżona do liniowej. I to przede wszystkim chciałem sprawdzić wykonując przedstawione poniżej obliczenia.
Przeanalizowałem dwie serie zdjęć wykonanych z różnymi ustawieniami ekspozycji. Zdjęcia były wykonane dokładnie tak samo jak opisałem w poprzednim artykule, z tą różnicą, że tym razem zapisane zostały w formacie NEF. Są to dokładnie te same sceny, sfotografowane w tych samych warunkach, ponieważ serie zdjęć NEF były wykonywane bezpośrednio przed seriami JPG.
Tak wyglądają serie zdjęć w formacie NEF:
Łatwo zauważyć, że w przypadku obydwu serii, zdjęcia w formacie NEF wyglądają na dużo ciemniejsze i o większym kontraście niż zdjęcia w formacie JPG z poprzedniego artykułu. Dzieje się tak dlatego, że zdjęcia w formacie NEF są w liniowej przestrzeni kolorów, a zdjęcia w formacie JPG w logarytmicznej. Nasz narząd wzroku podobnie jak inne nasze zmysły działa w sposób naturalny logarytmicznie. Zdjęcia w logarytmicznej przestrzeni kolorów (np wykonane przy pomocy tradycyjnej fotografii wykorzystującej kliszę fotograficzną) wyglądają dla nas naturalnie i fotorealistycznie. Dlatego aparat przed zapisem zdjęć w docelowym formacie JPG skompresował je do logarytmicznej przestrzeni kolorów wykonując przekształcenie potęgowania – tzw konwersję gamma. To spowodowało bardziej naturalnie dla nas wyglądający rozkład jasności pikseli w zdjęciach.
Faktyczna rozdzielczość bitowa w plikach NEF zapisywanych w aparacie Nikon D70 wynosi: log2(683)=9.42 bity. Żeby wykonać obliczenia przekształciłem pliki NEF w 8-bitowe pliki TIFF. W tym celu wykorzystałem napisany przez Dave Coffina program dcraw. Konwersja nie mogła wykonywać żadnych automatycznych zmian jasności (domyślnie dcraw rozciąga histogram w ten sposób, żeby 1% pikseli był wyświetlany jako biały), wykonywać konwersji gamma, repróbkować pikseli, ani ingerować w przestrzeń kolorów. Polecenie którego użyłem to: „dcraw -T -W -g 1 1 -v -j -o 0”. Zdjęcia z Nikona D70 w formacie NEF mają rozmiar 3039×2014 pikseli. Maska pikseli wybranych do obliczeń była utworzona identycznie jak w przypadku obrazów JPG, czyli tablica 30×20 pikseli równomiernie rozmieszczonych w obrazie z zachowaniem 5% marginesu od krawędzi obrazu.
Żeby poprawnie oszacować przy pomocy tej metody krzywą odpowiedzi dla np 14-bitowych plików NEF, dla serii 11 ekspozycji, zgodnie z zależnością: N*(P-1)>(Zmax-Zmin), trzeba by było wykorzystać w obliczeniach: N>(2^14-1)/(11-1) czyli przynajmniej 1639 pikseli. Tablica układu równań liniowych zajmowałaby wówczas w pamięci: (1639*11+2^14+1)*(2^14+1639)*16/1000/1000/1000 = 9.9 GB RAM. Oczywiście funkcja zaproponowana przez Debeveca i Malika musiałaby zostać zmodyfikowana w celu uwzględnienia 14-bitowej rozdzielczości: Zmax=2^14-1 i przesunięcia środka rozkładu do jasności Z=(2^14)/2-1.
Krzywe odpowiedzi dla plików NEF z aparatu Nikon D70:
Widać, że otrzymana krzywa odpowiedzi dla zapisu NEF ma bardziej stromy przebieg niż krzywa dla kodowania JPG z poprzedniego artykułu. Jednak trudno jest coś więcej powiedzieć, ponieważ na tych ilustracjach wynik jest przedstawiony na płaszczyźnie pół-logarytmicznej. Żeby dokładniej porównać obie funkcje mamy dwie możliwości: pokazać je na wykresie logarytmiczno-logarytmicznym lub na wykresie liniowo-liniowym.
Wykres o obu osiach liniowych dla serii 1:
Wykres dla obu osi logarytmicznych dla serii 1:
Na obu tych wykresach widać, że w przypadku zapisu w formacie NEF zależność aż do momentu wysycenia jest rzeczywiście liniowa.
Na wykresie log-log wątpliwości co do jakości wyniku oszacowania krzywej odpowiedzi, mogą budzić punkty zlokalizowane w lewej dolnej części wykresu. Duży rozrzut punktów wzdłuż osi X (logarytmiczna wartość ekspozycji) oraz duże odstępy pomiędzy kolejnymi wartościami na osi Y (logarytmiczna wartość jasności pikseli). Kwestia dużych odstępów wzdłuż osi Y stanie się jasna gdy tylko zdamy sobie sprawę co dokładnie powoduje transformacja skali liniowej do logarytmicznej. Skala logarytmiczna sprawia, że niskie wartości są na osi rozciągane, a wyższe coraz bardziej kompresowane. Czyli duże duże odstępy w tym rejonie to naturalna cecha przekształcenia wartości w skali liniowej do logarytmicznej. Możemy policzyć, że do połowy tego wykresu czyli do wartości 3 na osi Y, znajduje się exp(3)=20 pikseli spośród wszystkich 256. Czyli w tej skali, połowę wykresu zajmuje niecałe 8% wszystkich możliwych wartości pikseli. W skali liniowej te wartości zajmowałyby znikomą powierzchnię w lewym dolnym rogu płaszczyzny wykresu. A kwestię rozrzutu wzdłuż osi X można wyjaśnić uwzględniając fakt, że matryce CCD posiadają naturalną tendencję do rejestrowania szumu przy małych wartości ekspozycji, a połowę wykresu zajmują właśnie piksele dla najniższych 20 wartości ekspozycji. Dlatego też w procesie estymacji krzywej odpowiedzi stosowana był funkcja zmniejszająca wagę tych wartości.
Ale jak wygląda na tych wykresach zależność krzywej odpowiedzi dla zapisów JPG?
Wykres lin-lin:
Wykres log-log:
Na obu wykresach dla formatu JPEG widać dla krzywych każdego koloru charakterystyczną nieliniową zależność przypominającą transformację gamma.
Z powyższych dwóch artykułów i przedstawionych wyników można wyciągnąć wnioski dotyczące aparatu Nikon D70:
- zapis obrazów w formacie JPEG, wiąże się z zastosowaniem nieliniowego przekształcenia o profilu pokazanym na powyższych ilustracjach
- zapis w formacie NEF i wykonanie płaskiej konwersji do 8-bitowych obrazów TIFF w programie dcraw, daje obrazy z liniową (w pewnym zakresie) funkcją odpowiedzi.
This post is also available in: angielski
Comments