PDA

Zobacz pełną wersję : #22 Liniowość matrycy i co z tego wynika



Janusz Body
18-07-2006, 10:05
Oczy.

Chcąc nie chcąc, żeby móc sensownie pisać o widzeniu świata przez aparat cyfrowy, trzeba zacząć od tego jak działają nasze oczy. Widzimy mały wycinek z całego zakresu fal elektromagnetycznych. Na dodatek nasze oczy mają ogromne zdolności adaptacyjne a mózg potrafi sygnały z nerwów ocznych zinterpretować w sposób nieosiągalny dla współczesnych kamer cyfrowych. W ludzkim oku są dwa typy "sensorów"". Jedne potrafią zmierzyć tylko luminancję (świeci czy nie i jak silnie) - to tak zwane pręciki (ang. rods). Drugie kolor. To czopki (ang. cones). Pobudzenie czopków jest zależne od długości fali. Podział jest zbliżony do RGB ale czopkii "zielone", "czerwone" i "niebieskie" widzą pewien zakres długości fali. Zakresy zachodzą na siebie a ich maksima przypadają w pobliżu tego co nazywamy RGB.

Sensorów od luminancji (pręcików) jest w oku od 70 do 140 milionów (różne źródła różnie podają). Czopków rozróżniających kolor jest znacznie mniej, tylko 6-7 milionów. Nasze "czujniki" koloru pozwalają nam rozróżnić od 120 do 200 odcieni dla każdego z kolorów w zależności od natężenia. Przy słabym świetle działają dobrze tylko pręciki luminancji, stąd czarno-białe widzenie w słabym świetle i "w nocy wszystkie koty są czarne". Ich czułość wielokrotnie przewyższa zdolność postrzegania kolorów. Widzimy w bardzo słabym świetle nie tak dobrze jak pies czy kot ale daleko lepiej niż się zwykle wydaje. Dodatkowo nasze oczy inaczej - lepiej widzą kolor zielony - potrafimy rozróżnić dwukrotnie więcej odcieni zieleni niż czerwieni czy błękitów. Nic dziwnego jeśli wyjrzeć przez okno latem. Według obecnej wiedzy mamy ok. 64% czerwonych, 32% zielonych i tylko 2% niebieskich czopków (tu też są różnice pomiędzy źródłami). Różnice pojawiają się w "czułości" - najbardziej czułe są "sensory"" niebieskie. Pręciki (rods) w ogóle nie widzą pasma czerwonego. To dlatego instrumenty w samochodzie, na statku czy w samolocie świecą na czerwono - nie ma to wpływu na zdolność nocnego widzenia.

Gamma i rozpiętość tonalna

Kamera cyfrowa (sensor CCD lub CMOS) widzi światło inaczej niż oczy ludzkie. Sensor kamery zlicza fotony padające na poszczególne foto-elementy i liniowo (wprost-proporcjonalnie) do tego zapisuje obraz. To zliczanie fotonów nie jest taką dużą przenośnią bo każdy foton uderzający w fotocelę powoduje powstanie jakiegoś napięcia elektrycznego. Wielkość tego napięcia jest wprost proporcjonalna do liczby fotonów. Oczy w połączeniu z przetwornikiem jakim jest nasz mózg działają inaczej. Nasze widzenie jest mocno nieliniowe. Im więcej światła pada na czopki (ang. cones) na dnie oka tym mocniej jest ono tłumione. Taki wzmacniacz o różnym współczynniku amplifikacji - im słabszy sygnał tym większe wzmocnienie a silny sygnał powoduje najpierw tłumienie a potem "zatkanie" wzmacniacza. Właściwie to "odwrotność" wzmacniacza - osłabiacz raczej. Oczy potrafią łatwiej ocenić drobne różnice przy małych poziomach sygnału. Dużo gorzej oceniamy różnice poziomów przy silnym świetle. Nasze oczy są dobre "w cieniach" i słabsze "w światłach". Błona filmowa została stworzona 'na obraz i podobieństwo' naszych oczu i w zbliżony sposób reaguje na światło. Pewnie dlatego, że to też chemia.

Kodowanie gamma to nic innego jak próba sprowadzenia obrazu zapisanego przez sensor kamery do sposobu widzenia naszych oczu. Gamma 1.0 to liniowe widzenie sensora. Nasze oczy to gamma gdzieś pomiędzy 2.0 a 3.0
Gamma to funkcja:

Output = Input ↑ Gamma

Gdzie: Input – poziom sygnału na wejściu normalizowany do przedziału <0, 1>.
a symbol ↑ oznacza "do potęgi.

Tak naprawdę funkcja jest nieco bardziej skomplikowana – zwykle przedstawiana jest jako wielomian – ale praktycznie przybliżenie tak jak wyżej w zupełności wystarczy. Jak wygląda wykres takiej funkcji to chyba wszyscy wiedzą ale „w razie czego” warto zajrzeć tu:
http://www.dpreview.com/learn/?/Glossary/Digital_Imaging/Gamma_01.htm

Skutek naszego logarytmicznego widzenia w porównaniu z kamerą cyfrową jest łatwy do przewidzenia. Liniowe widzenie kamery powoduje, że proporcjonalnie mniej bitów jest wykorzystywanych do zapisu różnych poziomów luminancji w cieniach. Stosunkowo duża część "pola widzenia" - i duża liczba bitów - poświęcona jest zapisowi świateł. Stąd już prosta droga do stwierdzenia, że cyfra jest dobra "w światłach" i słabsza "w cieniach". Około 3/4 ogółu bitów zużytych na zapis to "światła" - cienie to tylko pozostała 1/4.

Dalszą konsekwencją tego sposobu zapisu jest wniosek, że przyciemnianie obrazu cyfrowego jest dużo bezpieczniejsze od rozjaśniania. Przyciemnianie przesuwa więcej bitów w kierunku cieni, gdzie nasze oczy są bardziej czułe, niejako "scieśnia" bity i zwiększa ilość informacji w miejscu w którym oczy wspaniale to wykorzystają. Rozjaśnianie natomiast "rozciąga" niewielką ilość bitów zużytych do zapisu cieni na szersze pole bitowe zwiększając rozpiętość tonalną. Co się więc dzieje? "Produkujemy" informację, której w oryginalnym zapisie po prostu nie ma, zwiększamy tym samym szumy i posteryzację. Często pojawia się "banding" (paskowanie). Nasze oczy doskonale widzą nawet drobne różnice w cieniach więc z łatwością spostrzegamy wszystko co złe.

No i mamy całe wyjaśnienie dlaczego w fotografii cyfrowej musimy naświetlać "odwrotnie" jak w analogu. Naświetlać na światła i wywoływać na cienie.
Tak widzą nasze oczy. Półcienie leżą w środku zakresu (zaznaczone kropką)


https://canon-board.info//brak.gif
źródło (http://www.potoczek.mserwis.pl/obrazki/oczy.jpg)

A tak widzi kamera:


https://canon-board.info//brak.gif
źródło (http://www.potoczek.mserwis.pl/obrazki/kamera.jpg)

Pójdźmy teraz o krok dalej. Rozłóżmy liniowy obrazek z kamery na "czynniki pierwsze". Załóżmy, że rozpiętość tonalna matrycy wynosi 6 f-stopów. Wiem, że niektórzy powiedzą "to nieprawda, nie ma tyle...". Napisałem "załóżmy" bo chodzi o pokazanie czegoś gdzie parzysta ilość akurat ułatwia wyjaśnienia. Zresztą współczesne (2006) dSLRy mają taką rozpiętość tonalną. To, że często tego nie dostrzegamy wynika również z tego co poniżej.

Jeśli przyjąć, że kamera jednak ma te 6 f-stopów i zapisuje w 12 bitach to górna połówka (tak, tak, całe pół paska na obrazku) to jeden f-stop czyli 4096/2 = 2048 odcieni. Tylko wtrącę, że tak jest zdefiniowany f-stop. Każdy kolejny to dwukrotnie więcej (lub dwukrotnie mniej) światła. Z dolnej połówki kolejny jeden f-stop zabiera połowę to jest 1024 odcieni. I tak dalej i tak dalej. W ostatnim najniższym na cały jeden f-stop przypada tylko 64 odcienie. Ilustruje to obrazek poniżej.

Kamera w rozbiciu na f-stopy


https://canon-board.info//brak.gif
źródło (http://www.potoczek.mserwis.pl/obrazki/kamera-podzial.jpg)


Można to również przedstawić w postaci tabelki:


https://canon-board.info//brak.gif
źródło (http://www.potoczek.mserwis.pl/obrazki/Tabelka.jpg)

Tu pojawia się mały problem. Ten najniższy f-stop to TYLKO 64 odcienie. Jak się to rozciągnie na marne 256 odcieni monitora w sRGB to nie dziwota, że pojawia się posteryzacja, paskowanie, szumy i wszystko co złe.
Większość współczesnych kamer zapisuje co najmniej 12 bitów na kanał. To daje 4096 poziomów w każdym z kanałów. JPEG to 8 bitów i 256 poziomów w kanale. To szesnaście!!! razy mniej. Wyrzucasz do kubła tylko 4 bity informacji o kolorze ale aż 3840 możliwych odcieni. To bardzo ale to bardzo dużo – blisko 94%. Trochę dba o Ciebie sam aparat bo zdjęcie tak naprawdę to RAW przerabiany wewnątrz w aparacie na JPEG ale wszelka dalsza obróbka w Photoshopie, GIMPie czy innym programie zwykle powoduje katastrofalne wręcz szkody. Niestety nieodwracalne.

Nieco „przy okazji” warto zwrócić uwagę na położenie środka (półtonów) na obrazku liniowego widzenia matrycy. To wyjaśnia m. in. kwestię dlaczego balans bieli powinien być ustawiany na jasno szary wzorzec. To co my widzimy jako jasno szare leży dokładnie pośrodku zakresu tonalnego sensora. Tak właśnie zrobiony jest np. WhiBal – jego szarość wydaje się dość jasna bo leży w pobliżu „środka zakresu sensora”.

Janusz

gregor40
18-07-2006, 15:30
Opis super - jak w książce "Real world Camera Raw..." tyle że po naszemu :)

Dwie uwagi technicznie:
-potęgę oznacza się przez znaczek "^" a nie przez strzałkę.
-nasze oczy mają widzenie "wykładnicze" (dokładniej - eksponencjalne) a nie "logarytmiczne".

Pozdrawiam,

MG

Janusz Body
18-07-2006, 17:34
....
-potęgę oznacza się przez znaczek "^" a nie przez strzałkę.
-nasze oczy mają widzenie "wykładnicze" (dokładniej - eksponencjalne) a nie "logarytmiczne".



- Książka, którą wymieniasz jest jednym ze źródeł - nie jedynym zresztą a to co napisałem powstało "pod wpływem" kliku ostatnich dyskusji na forum.

- Historycznie strzałka była pierwsza :-) a "^" pojawił się w internecie stosunkowo niedawno.

- Chyba jednak widzenie "ma charakter" funkcji logarytmicznej. W ciemnosciach nie widzimy wcale, potem mamy szybki wzrost i rozróżniamy nawet małe różnice sygnału, żeby na koniec powoli przestać rozróżniać cokolwiek a chwilę póżniej i widzieć wogóle :-) Dla funkcji wykładniczej ( y = a^x ) oznaczało by to, że im jaśniej tym słabiej widzimy (dla a z przedziału 0,1) a dla a >1 to by oznaczało że łatwo rozróżniamy detale w światłach.

Janusz

gregor40
19-07-2006, 09:07
- Książka, którą wymieniasz jest jednym ze źródeł - nie jedynym zresztą a to co napisałem powstało "pod wpływem" kliku ostatnich dyskusji na forum.


Czy mozesz podac biliografie? Chetenie poczytam sobie wiecej, bo zagadnienie jest ciekawe.




- Chyba jednak widzenie "ma charakter" funkcji logarytmicznej. W ciemnosciach nie widzimy wcale, potem mamy szybki wzrost i rozróżniamy nawet małe różnice sygnału, żeby na koniec powoli przestać rozróżniać cokolwiek a chwilę póżniej i widzieć wogóle :-) Dla funkcji wykładniczej ( y = a^x ) oznaczało by to, że im jaśniej tym słabiej widzimy (dla a z przedziału 0,1) a dla a >1 to by oznaczało że łatwo rozróżniamy detale w światłach.


Przekonales mnie - masz racje :)

Pozdrawiam,

MG

Tomasz Urbanowicz
22-07-2006, 14:15
Nieco „przy okazji” warto zwrócić uwagę na położenie środka (półtonów) na obrazku liniowego widzenia matrycy. To wyjaśnia m. in. kwestię dlaczego balans bieli powinien być ustawiany na jasno szary wzorzec. To co my widzimy jako jasno szare leży dokładnie pośrodku zakresu tonalnego sensora. Tak właśnie zrobiony jest np. WhiBal – jego szarość wydaje się dość jasna bo leży w pobliżu „środka zakresu sensora”.

Przyznam, że trochę się pogubiłem. Niebardzo rozumiem, dlaczego uważasz, że balans bieli należy ustawiąc na szarość? Karta kodaka jest dwustronna - z jednej strony jest szarość 18% do poprawnej ekspozycji, z drugiej (chyba?) biała do balansu bieli. Niebardzo rozumiem rozumowania - możesz wyjaśnić?

BTW: Bardzo fajny artykuł.

Janusz Body
23-07-2006, 09:47
Przyznam, że trochę się pogubiłem. Niebardzo rozumiem, dlaczego uważasz, że balans bieli należy ustawiąc na szarość? Karta kodaka jest dwustronna - z jednej strony jest szarość 18% do poprawnej ekspozycji, z drugiej (chyba?) biała do balansu bieli. Niebardzo rozumiem rozumowania - możesz wyjaśnić?

BTW: Bardzo fajny artykuł.

Biel i czerń to tylko "szczególne przypadki" szarości. Balans bieli powinno się ustawiac na "środek" matrycy bo taki sposób minimalizuje błedy nieliniowości matrycy. Nie można ustawiać balansu na "czystą" biel bo to RGB = 255,255,255 i nie wiadomo czy któryś z kanałow nie byłby przepalony.

- Karta Kodaka nie "posiada szarości" 18% tylko odbija 18% światła. Pochłania 82% - więc raczej "posiada szarość" na poziomie tychże 82% - tak mniej więcej pokazuje światłomierz dla kartki zadrukowanej z ok. 80% fill. Nie ma gwarantowanego braku zafarbu. Została zrobiona do pomiaru światła światłomierzem.

- Druga strona karty kodaka jest biała (tez nie gwarantowany wzorzec bieli ale nie jest tragicznie). Odbija 90% światła tj. dokładnie dwa i 1/3 f-stopów więcej niż szara strona i też została zrobiona do pomiaru świetła w "trudnych warunkach". Jeśli przyjąć, że zmierzymy światło na szarą stronę i zrobimy zdjęcie białej stronie to pytanie - w którym miejscu zakresu matrycy się znajdziemy jeśli zakres tonalny wynośi 6 f-stopów? :)

- Papier fotograficzny odbija około 95% światła. Często trochę mocniej odbija UV, żeby podnieść wrażenie bieli ale dla sensorów w aparacie UV jest nieco mniej "widoczne".

Na stronach www.whibal.com jest porównanie widma odbitego przez WhiBal i karte Kodaka.


Do wyboru mamy różne wzorce za 300 USD tablice Gragtag Macbeth, za 60 USD mniejszą tablicę Gregtaga, za 30 USD WhiBal i za ok. 2 PLN kartke dobrego papieru foto. Oczywiście są i będą różnice w precyzji wzorców i różnice są proporcjonalne do ceny. Osobiście używam WhiBala bo jest poręczny i wystarczająco dokładny.

I tak pytanie czy taki super dokładny balans bieli jest naprawde potrzebny? Czy nocne zdjęcia Pragi wyglądały by lepiej gdyby były z technicznie poprawnym balansem bieli? Mnie się wydaje, że niekoniecznie a technicznie poprawny WB jest potrzebny tylko dla drukujących katalogi farb, tkanin itp.

Pozdrawiam
Janusz

bachoo
30-07-2006, 10:35
- Karta Kodaka nie "posiada szarości" 18% tylko odbija 18% światła. Pochłania 82%

mmm chyba raczej odwrotnie. pochłania 18% a odbija 82%. Bo biel odbija swiatło a czern pochlania, wiec najprosciej mowiąc jezeli cos jest jasne to bardziej odbija niz pochlania. prawda?

Janusz Body
01-08-2006, 11:51
mmm chyba raczej odwrotnie. pochłania 18% a odbija 82%. Bo biel odbija swiatło a czern pochlania, wiec najprosciej mowiąc jezeli cos jest jasne to bardziej odbija niz pochlania. prawda?

Szara strona karty kodaka odbija 18% światła. Koniec. Kropka.
Tak poprostu jest. To standard dla wszystkich światłomierzy tych wbudowanych w TTL też.

Karta Kodaka jest "dość ciemnoszara". "Podróbki" to wklejka w okładce w Szkole Fotografowania National Geographic i wkładka MIDTONE w Fotografii Cyfrowej Scotta Kelby. Zobacz proszę jak to wygląda a pozbędziesz się wątpliwości ile toto odbija światła.

Janusz

Tomasz Urbanowicz
02-08-2006, 08:07
@Janusz Body

Dawno temu zakodowałem sobie coś i po przeczyteniu tego artykułu doszedłem do wniosku, jak bardzo żyłem w nieświadomości :) Otóż...
Została tu przedstawiona w sposób niezwykle logiczny liniowość matrycy: mało bitów (odcieni) w cieniach, dużo więcej bitów (odcieni) w światłach.
Widać, że matryca w aparatach więcej odcieni zarejestruje w światłach niż w cieniach, nasze oczy jednak więcej zarejestrują w cieniach - nie wiem jak to się stało, ale kiedyś byłem przekonany (nie zastanowiłem się nad tym), że matryca lepiej "pracuje" w cieniach, znaczy to, że lepiej jest zmniejszyć ekspozycje robiąc zdjęcie żeby nie przepalić przypadkowo nieba, a i tak wyciągnie się ciemne partie rozjaśniając w programie.
Nie wiem, czy błędnie rozumuję, ale wychodzi na to, że nie należy niedoświetlać zdjęcia, gdyż rozjaśniając je potem tracimy na jakości w cieniach - no bo z pustego to i Salomon nie naleje. Z drugiej strony prześwietlając niebo, nie uratujemy jego niebieskiego odcienia - mówię tutaj o JPG. Więc jak to jest?
Drugie moje pytanie: w jaki sposób program do RAW ma możliwość korekty ekspozycji? Widząc przepalone niebo, możemy suwaczkiem zrobić korektę na minus i jest OK. Nie mogę tego pojąć, w jaki sposób jest to możliwe. Jeśli będziemy robili wszystko na -1EV co na tym tracimy wywołując potem w RAW? Będzie więcej szumów? Dlaczego?

Janusz Body
03-08-2006, 17:04
....
Nie wiem, czy błędnie rozumuję, ale wychodzi na to, że nie należy niedoświetlać zdjęcia, gdyż rozjaśniając je potem tracimy na jakości w cieniach - no bo z pustego to i Salomon nie naleje. Z drugiej strony prześwietlając niebo, nie uratujemy jego niebieskiego odcienia - mówię tutaj o JPG. Więc jak to jest?


Wątek jest o RAW więc o JPEGach nie będę pisał :) Napisałem :"...No i mamy całe wyjaśnienie dlaczego w fotografii cyfrowej musimy naświetlać "odwrotnie" jak w analogu. Naświetlać na światła i wywoływać na cienie... i tak to dokładnie jest. Histogram "do prawego", najbliżej prawego jak się da, najlepiej bez clippingu. Są oczywiście wyjątki.



Drugie moje pytanie: w jaki sposób program do RAW ma możliwość korekty ekspozycji? Widząc przepalone niebo, możemy suwaczkiem zrobić korektę na minus i jest OK. Nie mogę tego pojąć, w jaki sposób jest to możliwe. Jeśli będziemy robili wszystko na -1EV co na tym tracimy wywołując potem w RAW? Będzie więcej szumów? Dlaczego?"


Z przepalonym niebem i suwaczkiem w dół może nie jest super ale "zagęszczanie" informacji jest mało szkodliwe. To jest OK w niewielkich granicach - powiedzmy korekty o -0.5 EV są akceptowalne ale więcej to już znaczy gorzej :) Przepalony jeden kanał to jeszcze nie jest straszna tragedia bo w pozostałych dwóch zostaje conieco szczegółów. Zdecydowanie najlepiej jest naświetlić poprawnie.

W RAWie jest zapisana tylko luminancja (to jest czarno-biały obraz) więc można wartości dla każdego pixela zwiększyć o taką samą stałą co symuluje wzrost ekspozycji. To jest właściwie nieszkodliwe tylko wtedy gdy żadna z wartości nie przekracza 255 (max) lub nie spada poniżej 0 (min). Jeśli dodamy/odejmiemy za dużo to nastąpi utrata informacji i "dziura" w obrazie. Jeśli w jakimś pikselu w oryginale było zapisane 5, my podnosimy ekspozycję i dodajemy 10 to "wyciągamy" z obrazu coś czego nie ma (Zeby pasowało proporcjami do pozostałych pikseli musiało by być zapisane jako -5), czyli generujemy informację, której w oryginale nie było. Szum.

Jak zrobisz wszystko z -1EV (zakładając, że światło zostało zmierzone poprawnie) to utracisz bezpowrotne minimum 50% informacji. "Górny" f-stop to połowa całego obrazka.

PaQ
25-08-2006, 23:26
Z tego co zauważyłem ostatnio bawiąc się canonowskim programem do konwersji RAW'ów to że faktycznie matryca rejestruje jasność w sposób liniowy, ale potem soft (czy też hardware w aparacie) konwertuje to odpowiednio kompresując elementy jasniejsze i ciemniejsze niż średnia. Dzieje się to przy zapisie do JPEG w aparacie, przy konwersji do JPEG w sofcie do konwersji, a nawet przy wyświetlaniu podglądu RAW'u. W sofcie canonowskim można wybrać opcję podgladu liniowego i wtedy można "zobaczyć" jak taki widziany przez sensor obraz wygląda w rzeczywistości. Wydaje mi się również, że konwersja ta zwykle nie wykorzystuje całego zakresu oryginalnej 12-bitowej informacji RAW'a to jest możliwa właśnie nie szkodzaca bardzo jakości zdjęcia korekta +- 1EV (tutaj troche strzelam). Jeszcze większa korekta jest możliwa poprzez mniejszą kompresję pewnego zakresu (w którym przy konwersji tracono informacje o gradiencie) a większą innego.

minek
26-08-2006, 23:53
To jest właściwie nieszkodliwe tylko wtedy gdy żadna z wartości nie przekracza 255 (max) lub nie spada poniżej 0 (min).

Raw w canonach jest zazwyczaj 12 bitowy, czyli to jest obraz monochromatyczny, ale od 0 do 4095, nie 255.

Janusz Body
27-08-2006, 11:51
Raw w canonach jest zazwyczaj 12 bitowy, czyli to jest obraz monochromatyczny, ale od 0 do 4095, nie 255.

Oczywiście masz rację :) Mea culpa.

bamboos
14-09-2006, 13:21
(...)i tak to dokładnie jest. Histogram "do prawego", najbliżej prawego jak się da, najlepiej bez clippingu.

Należy jednak mieć na uwadze, że histogram wyświetlany przez aparat jest mniej lub bardziej przybliżeniem wynikającym z konwersji do JPG. W efekcie może pokazywać clipping z prawej strony, gdy w rzeczywistości go nie ma. Można o tym przeczytać w "Real World Camera Raw", albo w publikacji (white paper) "Raw Capture, Linear Gamma, and Exposure (http://www.adobe.com/digitalimag/pdfs/linear_gamma.pdf)" udostępnianej przez Adobe na swoich stronach.

Oczywiście, możliwa jest również sytuacja przeciwna, tzn. histogram nie pokazuje clippingu, a ten wystąpił. Pewność można mieć chyba tylko, gdy histogram jest wyświetlany dla każdego kanału składowego, a nie tylko dla luminacji.


Są oczywiście wyjątki.

Mógłbyś napisać kilka słów rozwinięcia?

PS. To mój pierwszy post na tym forum, dlatego "Dzień dobry wszystkim!" :)

Janusz Body
18-09-2006, 09:18
Należy jednak mieć na uwadze, że histogram wyświetlany przez aparat jest mniej lub bardziej przybliżeniem wynikającym z konwersji do JPG. W efekcie może pokazywać clipping z prawej strony, gdy w rzeczywistości go nie ma.....

Mógłbyś napisać kilka słów rozwinięcia?

PS. To mój pierwszy post na tym forum, dlatego "Dzień dobry wszystkim!" :)


1. Witamy na forum :)

2. Z histogramem masz rację tylko to co pisalem jest o liniowości matrycy w dziale Tips & Tricks (moderowanym) a nie o histogramie i jego interpretacji :) więc pozwól, że nie bedę o tym tutaj pisał. To duuuuuuży temat choć, jeśli mam być szczery, szczerze wątpię czy na histogramie wielkości 1 groszówki można dużo zobaczyć (tak jest w dSLR'ach).

3. Zupełnie nie wiem o co Ci chodzi z pytaniem o "kilka słów rozwinięcia"? Na jaki temat? W którym miejscy wątku toto jest napisane?

4. Dział T&T jest moderowany i staramy się bardzo trzymać się tematu inaczej zrobi się wątek "o wszystkim" :)

ronin
05-10-2006, 12:27
Dzieńdobry

Jako nowy pragnę prosić o wyrozumiałość jeżeli jest ten post
nie powinien się tu znaleźć.
Dopiero zaczynam uczyć się patrzyć na świat przez obiektyw.
W poszukiwaniu materiałów po przeczytaniu tego wątku natknąłem się
na ciekawą prace odnośnie luminancji, dla mnie była pomocna:
http://digitalkamera.image-engineering.de/downloads/Digital%20Cameras%20as%20Luminance%20Meters.pdf

Jeżeli umieściłem link w złym miejscu proszę wyrozumiałość i przeniesienie.

Adaminio
03-10-2007, 16:39
Cześć Wam.
Przeglądam to forum i stwierdziłem, że warto się zarejestrować bo posty są treściwe.
Mam dylemat, więc, poziomy (levels) na monitorze wyrażane są liczbami od 0 do 255. Ale, jeśli na 16 bitowym dokumencie mamy doczynienia z ~4095 poziomami luminacji, to znaczy to, że pomiędzy tym 0 a 255 znajduje się 4095 poziomów? Czy dobrze to rozumiem?

Drugie pytanie, czy moje rozumowanie jest prawidłowe... konwersja stratna z RAW do JPG nie jest widoczna gołym okiem na obrazkach małej wielkości ponieważ ludzkie oko nie widzi więcej niż 200 poziomów danej barwy, a JPEG zawiera tych poziomów 256 (z pamięci), konwersja ta zaczyna dokuczać gdy poddajemy zdjęcie obróbce, ponieważ nie dysponujemy wystarczającą nadwyżką przejść tonalnych, które zostają zaostrzone na skutek niedoskonałości obliczeń.

Dzięki z góry za odpowiedź.

Tomasz Golinski
03-10-2007, 22:03
Cześć Wam.
Przeglądam to forum i stwierdziłem, że warto się zarejestrować bo posty są treściwe.
Mam dylemat, więc, poziomy (levels) na monitorze wyrażane są liczbami od 0 do 255. Ale, jeśli na 16 bitowym dokumencie mamy doczynienia z ~4095 poziomami luminacji, to znaczy to, że pomiędzy tym 0 a 255 znajduje się 4095 poziomów? Czy dobrze to rozumiem? Monitory (takie normalne) nie wyświetlają 16bitowych dokumentów, tylko je przybliżają do 8bitowych (większość nawet dobrze nie wyświetli pełnych 8 bitów). Jakkolwiek poziomy jasności w tym dokumencie są wyrażone liczbami od 0 do 65535. (2^16-1)



Drugie pytanie, czy moje rozumowanie jest prawidłowe... konwersja stratna z RAW do JPG nie jest widoczna gołym okiem na obrazkach małej wielkości ponieważ ludzkie oko nie widzi więcej niż 200 poziomów danej barwy, a JPEG zawiera tych poziomów 256 (z pamięci), konwersja ta zaczyna dokuczać gdy poddajemy zdjęcie obróbce, ponieważ nie dysponujemy wystarczającą nadwyżką przejść tonalnych, które zostają zaostrzone na skutek niedoskonałości obliczeń. Obrazki małej wielkości mają mało detali, więc niewiele na nich widać... JPG może mieć teoretycznie pełne 16,7mln kolorów (8 bitów na kanał) czyli dużo więcej niż odróżnia ludzkie oko. Prawdą jest, że nadmiarowa ilość bitów przydaje się przy obróbce. Ponadto strata jakości w JPG jest spowodowana samym algorytmem - to jest po prostu kompresja stratna, lekko zniekształca obraz. Ustaw niską jakość jpg to zobaczysz to wyraźnie. (podobnie zresztą działa mp3)

Dzięki z góry za odpowiedź.[/QUOTE]

Adaminio
04-10-2007, 19:08
Tomku, trochę zakręciłeś mi w głowie, napisałeś:


'Monitory (takie normalne) nie wyświetlają 16bitowych dokumentów, tylko je przybliżają do 8bitowych (większość nawet dobrze nie wyświetli pełnych 8 bitów). Jakkolwiek poziomy jasności w tym dokumencie są wyrażone liczbami od 0 do 65535. (2^16-1)'

Nie rozumiem w jakim sensie monitory nie wyświetlają 16tu bitów. Czyli "czego" z owych 16tu bitów nie widać na monitorze? Ponieważ różnicy między 8 a 16 upatrywałem nie w tym co jest na ekranie a czego niema, ale w subtelności przejść tonalnych. Jeśli się mylę, to proszę o sprostowanie.

Piszesz że JPEG może mieć teoretycznie 16,7 mln kolorów, co wynika z ~256 poziomów na kanał? Czy dobrze rozumiem?


Ponadto strata jakości w JPG jest spowodowana samym algorytmem - to jest po prostu kompresja stratna, lekko zniekształca obraz. Ustaw niską jakość jpg to zobaczysz to wyraźnie.

Tu uściślam, chodziło mi o JPEGi najwyższej jakości, czy taki plik już zawiera stratę jakości, czy jest ona niewidoczna, do momentu w którym bierzemy się za obrabianie? Piszesz że jest to poprostu kompresja stratna, no właśnie, czyli co powoduje tą stratę? Przejście z 12 na 8 bitów (przypominam chodzi o najcięższe JPEGi), czyli porzucenie takiej ilości poziomów, które i tak są nierozpoznawalne dla ludzkiego oka?

Dzięki za odpowiedź. Mam nadzieję że doczekam się następnej. Pozdrawiam.

Wile
06-10-2007, 01:05
Nie rozumiem w jakim sensie monitory nie wyświetlają 16tu bitów.

Ano nie wyswietlaja. Kliknij sobie na wlasciwosci pulpitu jesli uzywasz windowsa i zobacz jaka masz palete barw. Do 16 bitow na kanal potrzeba w sumie 48bitow na pixel w RGB.


Czyli "czego" z owych 16tu bitów nie widać na monitorze? Ponieważ różnicy między 8 a 16 upatrywałem nie w tym co jest na ekranie a czego niema, ale w subtelności przejść tonalnych. Jeśli się mylę, to proszę o sprostowanie.

Nie wiem czy masz dobre wyobrazenie o tych bitach. Chyba najprosciej to odniesc do zapisu jakiejs liczby z dokladnoscia do zalozmy 8 i 16 miejsc po przecinku. Dokladnosc do 16 nie jest Ci normalnie potrzebna i 8 zupelnie wystarcza, ale jesli te liczbe bedziesz wielokrotnie mnozyl, dzielil itd (obrobka) to precyzyjniejsze rezultaty osiagniesz gdy te operacje wykonasz na tej z 16 miejscami po przecinku, mimo ze wynik znow Ci wystarczy z 8.


Piszesz że JPEG może mieć teoretycznie 16,7 mln kolorów, co wynika z ~256 poziomów na kanał? Czy dobrze rozumiem?

Tak. Dokladnie 256, nie w przyblizeniu.


Tu uściślam, chodziło mi o JPEGi najwyższej jakości, czy taki plik już zawiera stratę jakości, czy jest ona niewidoczna, do momentu w którym bierzemy się za obrabianie?

Zawiera i jest ona nie do odroznienia dla ludzkiego oka. Niemniej strata informacji jest spora i taki obraz juz sie malo nadaje do dalszej obrobki. JPEG sie stosuje do finalnych obrazow.


Piszesz że jest to poprostu kompresja stratna, no właśnie, czyli co powoduje tą stratę? Przejście z 12 na 8 bitów (przypominam chodzi o najcięższe JPEGi), czyli porzucenie takiej ilości poziomów, które i tak są nierozpoznawalne dla ludzkiego oka?

Bladzisz troche. Strata wynika z algorytmu kompresji JPEG i to mozesz wyczytac z dowolnego artykulu na ten temat. Konwersja do 8 bitow to osobny proces i tu masz strate informacji o ktorej pisalem, zapisujesz wszystko z mniejsza dokladnoscia. Po samej konwersji do 8 bitow mozesz to zapisac np jako TIFF z jakims bezstratnym algorytmem (ZIP, LZW) albo stracic kolejna porcje informacji wlasnie zapisujac do JPEG.


Dzięki za odpowiedź. Mam nadzieję że doczekam się następnej. Pozdrawiam.

Ale to wszystko juz bylo wielokrotnie omawiane, poczytaj dobrze chociazby samo to forum.

Adaminio
16-10-2007, 17:39
A więc...czy fakt, że matryca rejestruje '3/4 bitów świateł i 1/4 cieni' jest cechą właściwą matryc, i wynika z ich budowy, czy z matematyki obróbki danych (funcji gammy)?

Czyli, w praktyce, jeśli do dystpozycji mamy oświetlenie studyjne, i zależy nam na szczegółach w cieniach, lepiej jest zrobić jasne zdjęcie, a potem je ściemnić w oprogramowaniu?

Niezbyt rozumiem też stwierdzenie użyte przez Janusza, któy pisze o 'zagęszczaniu danych' do którego dochodzi przy ściemnianiu zdjęcia. Czy mógłby ktoś rozpisać to stwierdzenie w inny sposób.

Dzięki, jeśli ktoś zechce.

HuleLam
18-10-2007, 15:38
A więc...czy fakt, że matryca rejestruje '3/4 bitów świateł i 1/4 cieni' jest cechą właściwą matryc, i wynika z ich budowy, czy z matematyki obróbki danych (funcji gammy)?

Czyli, w praktyce, jeśli do dystpozycji mamy oświetlenie studyjne, i zależy nam na szczegółach w cieniach, lepiej jest zrobić jasne zdjęcie, a potem je ściemnić w oprogramowaniu?


Wynika ze sposobu widzenia świata przez człowieka (patrz Prawo Webera-Fechnera (http://pl.wikipedia.org/wiki/Prawo_Webera-Fechnera)) - czyli z tego, że człowiek postrzega bodziec "logarytmicznie", zaś przyrząd pomiarowy (komórka CMOS/CCD) - liniowo.

Oświetlenie tu nic nie pomoże - chyba że pogodzisz się z "przepalonym" pomiarem i utratą informacji w światłach. Pomógłby wzmacniacz działający logarytmicznie przed digitalizacją danych z elementu CCD/CMOS.

Adaminio
18-10-2007, 17:26
HuleLam, dzięki za że chciało ci się odpowiedzieć. Jednakże, trochę się pogóbiłem w twojej bardzo technicznej odpowiedzi. Zadam pytanie jeszcze raz, dlaczego matryca jest słaba w cieniach? Czy winika to z jej fizycznej budowy, (element światłoczuły gorzej rejestruje małe ilości fotonów w pikselu) czy raczej z matematycznej interpretacji danych z matrycy?

Czyli, funkcja gamma sprowadza się do odpowiedniego przyciemnienia zdjęcia? Funkcja ta nie wzmacnia obszarów jasnych, czy dobrze rozumiem?

piast9
18-10-2007, 19:14
Nie, to wynika z tego, że ogólnie pojęty SYGNAŁ wychodzacy z matrycy jest liniowo zależny od natężenia światła. Czyli tak, to jest związane z jej budową. W oku sygnał zależy logarytmicznie od natężenia światła - stąd różnica.

I moim zdaniem sam wzmacniacz log nie pomoże na to, tak jak sugeruje HuleLam. Gdyby to było tak proste to zostałoby zrobione. Należałoby odlinearyzować sam sensor. Krokiem w tę stronę są matryce Fuji.

Tomasz Golinski
18-10-2007, 19:30
HuleLam, dzięki za że chciało ci się odpowiedzieć. Jednakże, trochę się pogóbiłem w twojej bardzo technicznej odpowiedzi. Zadam pytanie jeszcze raz, dlaczego matryca jest słaba w cieniach? Czy winika to z jej fizycznej budowy, (element światłoczuły gorzej rejestruje małe ilości fotonów w pikselu) czy raczej z matematycznej interpretacji danych z matrycy?


Wynika z fizycznej budowy oka i matrycy - jest różna, więc trzeba to matematycznie kompensować.

gof
19-10-2007, 19:12
Zadam pytanie jeszcze raz, dlaczego matryca jest słaba w cieniach?

To nie matryca jest słaba w cieniach tylko oko jest silne w cieniach.

Matryca zamienia światło na sygnał elektryczny. Poziom sygnału z matrycy jest wprost proporcjonalny do poziomu światła (ilości fotonów zarejestrowanych w jednostce czasu) - taką zależność nazywa się zależnością liniową. Oko (i ogólnie ludzkie zmysły - np. słuch też) potrafi się dostosować do sytuacji w której jest mniej światła i "wzmocnić" sygnał ("zwiększyć ISO"). Jako ciekawostka - ta operacja zajmuje mu więcej czasu niż "zmniejszenie ISO" (przystosowanie się do warunków jasnego światła po wyjściu z cienia). Dlatego po zgaszeniu światła często zanim zobaczymy cokolwiek, widzimy ciemność, a po zapaleniu dużo szybciej przestajemy mrużyć oczy.

I teraz mamy dwa podejścia, jedno czysto proporcjonalne (poziom sygnału jest zależny wprost proporcjonalnie od poziomu światła) i drugie w uproszczeniu logarytmiczne (tak jak w oku, które w cieniach "wzmacnia bardziej" niż w światłach). Na sygnał z zakresu 0-50% (ciemność do połowy jasności) i 50%-100% (połowa jasności do max jasności) z matrycy przeznaczonych jest tyle samo bitów, więc tyle samo szczegółów będzie zarejestrowanych w obu tych zakresach.

A oko w cieniach zwiększa swoją czułość, więc widzi więcej niż matryca w tym samym zakresie (zakładając że w "jasności" widzą tyle samo). Albo w jasności widzi mniej niż matryca (zakładając że w "cieniach" widzą tyle samo).

Dlatego lepiej jest zrobić zbyt jasne zdjęcie i je potem ściemnić niż zbyt ciemne i je potem rozjaśnić. Oczywiście najlepiej jest zrobić zdjęcie prawidłowo naświetlone :)

Adaminio
28-10-2007, 14:54
Panowie dziękuję za podjęcie dyskusji. Jednakże, istota mojego pytania wciąż leży nietknięta, wraz z przeczytaniem postu golfa mam wrażenie nawet że padają tu sprzeczne dane. Gdyby informacje jakie do mnie docierają zawierały się w tym, że matryca rejestruje liniowo i że, cytując golfa:

Na sygnał z zakresu 0-50% (ciemność do połowy jasności) i 50%-100% (połowa jasności do max jasności) z matrycy przeznaczonych jest tyle samo bitów, więc tyle samo szczegółów będzie zarejestrowanych w obu tych zakresach.

Nie zadawałbym więcej pytań ale... zobaczmy co pisze Janusz.

Stąd już prosta droga do stwierdzenia, że cyfra jest dobra "w światłach" i słabsza "w cieniach". Około 3/4 ogółu bitów zużytych na zapis to "światła" - cienie to tylko pozostała 1/4.

Czy jest to sprzeczność pozorna?

Aby zadać nurtujące mnie pytanie wystarczająco jasno, muszę uciec się do opisu wyidealizowanego doświadczenia. Więc: Załóżmy, że mamy diodę w zupełnej ciemności, podłączoną do urządzenia w które pozwala na bardzo dokładną kontrolę natężenia światła przez nią emitowanego. 'Zapalamy' diodę i robimy zdjęcie w trybie M o stałych parametrach. Rezultatem, matryca rejestruje światło na poziomie 1 (z możliwych 4096). Obliczamy ilość fotonów i zapisujemy jako n1. Teraz zwiększamy natężenie światła, i na kolejnym zdjęciu światło zarejestrowane jest poziomem 2. Obliczamy ilość fotonów zebranych w pikselu jako n2, łatwo wyliczamy przyrost delta n. Teraz powtarzamy ten sam algorytm, ale po znacznym podkręceniu diody, tak iż pierwsza rejestracja wychodzi na poziomie powiedzmy 3005. I pytanie główne - czy aby podnieść rejestracje z 3005 na 3006 potrzebujemy takiego samego przyrostu fotonów delta n jak przy przejściu z poziomu 1 na 2?

Liniowość matrycy właśnie rozumiałem w ten sposób, przyrost poziomów dokonywał się liniowo, w oparciu o przyrost fotonów. Ale, dlaczego więc tabelki w stylu 1 f stop 64, 2 f stop 128 (widoczna w poście Janusza)
Czekam w nadziei że podejmiecie dyskusje.

Tomasz Golinski
30-10-2007, 20:09
Tak, matryca rejestruje liniowo w tym sensie, o jakim myślisz. Jednak obraz z matrycy nie nadaje się jeszcze do oglądania. Trzeba zastosować nieliniową transformację danych zebranych z matrycy, żeby obraz był strawny dla człowieka.

Szczerze mówiąc, to jeszcze przed chwilą to rozumiałem... A teraz sobie pomyślałem, że prawdziwym powodem jest to, że MONITOR odkręca transformację gammy. Dwukrotne zwiększenie natężenia światła powoduje 2x zwiększenie poziomu zarejestrowanego na matrycy i efekt na monitorze też musi być 2x większy! Anatomia nie ma nic do rzeczy.

Jednak praktyka programistyczna jest taka, że ustalono iż poziom 100 jest "na oko" dwa razy ciemniejszy niż 200. Jest to umowa :) Być może wygodna z pewnych względów, ale nie jest to prawo fizyki.

Tomasz Urbanowicz
04-11-2007, 17:44
To ja też napiszę co nie co....

Chciałbym zacząć od tego jak właściwie monitor w kooperacji pokojowej z komputerem wyświetla. Otóż wyświetla liniowo - wynikowa gamma z gammy monitora i systemu jest 1:

gamma winikowa = gamma monitora x gamma systemu

(źródło: Desktop Color Handbook 07 - EIZO str. 47 - akurat mam ją przed sobą).

Czyli dla PC monitor (zakładam idealne warunki) ma gamme = 2.2, system Windows nadaje w gammie = 1/2.2 co wynikowo daje gammę = 1 czyli funkcje liniową (nachyloną pod kątem 45 stopni).

Dla Mac OsX monitor gamma = 1.8, system OsX gamma = 1/1.8, co również wynikowo daje gammę jak wyżej.

Skoro tak, zapewnioną mamy liniowość, czyli np. dla luminancji od 0-120 cd/m2 liniowo będzie zależeć szarość w RGB np. od 0-255 (przykładowo dla szarości RGB=128 będzie 60 cd/m2 luminancji). Proszę zrobić sobie gradient szarości np. w PS czy GIMPie od 0-255 i zmierzyć color pickerem środek tegoż gradientu - będzie ok RGB =128 128 128.

Teraz do rzeczy...

Janusz pisze, że matryca jest liniowa. Następnie słusznie pisze, że wzrok ludzki ma charakter adaptacyjny. Jednak później pisze że wzrok ludzki ma charakter logarytmiczny z jaką tam gammą od 2-3 (zapewne chodzi o wykładnik potęgi 1/2-1/3 zamiast 2-3). Dalej piszę o jakimś przekształceniu JPG z RAW z funkcją logarytmiczną - tylko po co ta funkcja?

Na monitorze chcemy widzieć dokładnie to, co widzimy w rzeczywistości. Monitor+PC wyświetla obraz w postaci liniowej, matryca rejestruje liniowo - dlaczego jest to przekształcenie i czy ono w ogóle występuje? :)

To co dociera do naszego komputera w ostatecznym rozrachunku ma mieć postać liniową jeśli zależy nam na wierność z rzeczywistością. Proszę mi powiedzieć, w którym miejscu następuję funkcja odwrotna to tej która podobno traktuje się JPG z RAW?
Może ta funkcja o której Janusz pisze, to nic innego jak systemowa gamma (sam JPG jest liniowy)?

Podobnie przecież jest z fotografią analogową - wprawdzie negatyw posiada funkcję jakąś tam logarytmiczną, ale w procesie wywołania (pozytyw) traktowany jest funkcją w miarę odwrotną co w przybliżeniu i ostatecznym rozrachunku daje coś koło gammy = 1 (wychodzi chyba 1.4 ale to z racji chyba rozpraszania światła).

Może niektórzy będą się upierać do logarytmicznej natury naszego wzroku.
Proszę wyobrazić sobie taki przykład:

Jest artysta malarz który siedzi sobie w plenerze i maluje krajobraz (załóżmy że widzimy logarytmicznie). Dobiera odcienie, jasności farb nieliniowo. Teraz następnie chciałby sobie zrobić kopie tegoż obrazu i znów zasiada i również nieliniowo dobiera farby patrząc na oryginał obrazu. Proszę napisać, jak będzie wyglądała 5 kopia z poprzedniej kopii obrazu? :)

Zresztą jakbyśmy nie widzieli otaczający nas świat, powinna być zapewniona ostateczna liniowość...

Niektórzy pewnie z Was będą powoływać się na ten artykuł:

http://www.fotosite.pl/artykuly/fotografia/ekspozycja-na-swiatla.html

Jednak proszę zwrócić uwagę na kilka rzeczy:
1. Dlaczego drugie zdjęcie na rys. 2 jest totalnie niedoświetlone (proszę zobaczyć jak wygląda histogram).
2. Dlaczego jest inny balans bieli.
3. Dlaczego na tym niby liniowym RAWie nie ma żadnego pola jednakowo jasnego, jak na górnym obrazku?

ewg
04-11-2007, 20:32
I tu dochodzimy do relatywizmu (nie-)linowości widzenia - czytaj: do przepaści. :-)

Jeśli ktoś jest nastawiony bardziej antropocentrycznie, równie dobrze może stwierdzić, że to oko widzi liniowo a jakaś tam matryca cyfrowa "krzywo" (tylko ta krzywa jest wtedy pod prostą a nie nad - choć to też jest względne). Jednak współzależność krzywa/prosta (obojętne co jest na krzywej a co na prostej) pozostaje taka a nie inna. Przetwornik cyfrowo analogowy z matrycy daje większą gęstość danych dla świateł a oko/mózg wymaga odpowiednio większej dla cieni (i to też wyłącznie z ludzkiego punktu widzenia!) i na jakimś etapie musi zajść tłumaczenie - jeśli nie na etapie przetwornika analogowo-cyfrowego, to np. RAW-JPEG. Dopóki cyfrówki a zwłaszcza RAWy nie zagrażały globalnej sielance pt. JPEG 8-bitowy, to mało kto nawet wiedział, że zachodzi jakieś tłumaczenie bitów - cyfrowych na ludzkie.

A wiec, tak! - Antropocentrycznie malarz kopiuje własne płótna zdecydowanie liniowo, tylko przy oczywistym założeniu, że w takim rozumieniu/postrzeganiu "liniowości" również namalował swój pierwszy obraz no i że światło otaczające się nie zmieniało, albo nie padał gostek z wycieńczenia... ;-)

michalab
04-11-2007, 21:48
Jest artysta malarz który siedzi sobie w plenerze i maluje krajobraz (załóżmy że widzimy logarytmicznie). Dobiera odcienie, jasności farb nieliniowo. Teraz następnie chciałby sobie zrobić kopie tegoż obrazu i znów zasiada i również nieliniowo dobiera farby patrząc na oryginał obrazu. Proszę napisać, jak będzie wyglądała 5 kopia z poprzedniej kopii obrazu? :)

A co miałoby się stać? Przecież odcienie farb na obrazie i na próbniku widzi tak samo tzn. potraktowane tą samą funkcją.

Powiedzmy, że chcesz odrysować wykres funkcji wykonany w skali logarytmicznej, chcesz go odrysować też w skali logarytmicznej, jak będzie wyglądał wykres po 5 przerysowaniach?

Tomasz Urbanowicz
05-11-2007, 10:40
Przetwornik cyfrowo analogowy z matrycy daje większą gęstość danych dla świateł [...]

Daje tyle samo w światłach co cieniach - jest liniowy (tak z grubsza).



a oko/mózg wymaga odpowiednio większej dla cieni (i to też wyłącznie z ludzkiego punktu widzenia!) i na jakimś etapie musi zajść tłumaczenie - jeśli nie na etapie przetwornika analogowo-cyfrowego, to np. RAW-JPEG. Dopóki cyfrówki a zwłaszcza RAWy nie zagrażały globalnej sielance pt. JPEG 8-bitowy, to mało kto nawet wiedział, że zachodzi jakieś tłumaczenie bitów - cyfrowych na ludzkie.

Spytam jeszcze raz: po co to niby tłumaczenie/traktowanie JPG krzywą logarytmiczną?

Jeszcze raz może wyjaśnię :)

Zróbmy następujące założenie. Nasze ludzkie widzenie (y1) niech będzie opisane funkcją y1=x^(1/2), gdzie x niech przybiera wartości od 0 do 1.


https://canon-board.info//brak.gif
źródło (http://img212.imageshack.us/img212/1051/gamm12oc8.jpg)

Niech matryca (y2) rejestruje liniowo y2 = x gdzie x niech przybiera również wartości od 0 do 1 (niech tak będzie wyskalowana):


https://canon-board.info//brak.gif
źródło (http://img155.imageshack.us/img155/65/gamma1ne1.jpg)

Monitor+PC również wyświetla liniowo (y3=x).

Następnie wyobraźmy sobie taki przykład. Niech naszym "krajobrazem" będą 3 prostokąty ustawione przy sobie:
- czarny (x=0),
- szary (50% szarości, x=0,5),
- biały (x=1).

Nasze oczy zobaczą tak:
- czarny y1 = 0,
- szary 50% y1 = x^(1/2) = 0,7,
- biały y1 = 1.

Załóżmy że dobraliśmy idealne ekspozycje. Nasz aparat zarejestrował "krajobraz" następująco:
- czarny y2 = 0,
- szary 50% y2 = 0,5,
- biały y2 = 1.

Teraz bez żadnych przekształceń nieliniowych wyświetlamy JPG na komputerze. Monitor + PC pokaże tak:
- czarny y3 = 0,
- szary 50% y3 = 0,5,
- biały y3 = 1.

Teraz jak nasze oczy to zobaczą? Tak jak w rzeczywistości czyli:
- czarny y1 = y3^(1/2) = 0,
- szary 50% y1 = y3^(1/2) = 0.7,
- biały y1 = 1.

Czyli zachowaną mamy wierność.

Teraz co jest proponowane w tym wątku (nie przeze mnie :) ). Aby JPG potraktowany był krzywą y4 = x^(1/2). Ostatecznie na monitorze JPG będzie wyglądał nieliniowo w stosunku do rzeczywistości tj. szary 50% wyświetlony na monitorze będzie miał wartość 0,7 (a nie 0,5). Jako, że nasze widzenie jest z naszego założenia y1=x^(1/2) ostatecznie odbierzemy takiego JPG tak:

ostatecznie = y4 x y1 = x^(1/2) * x^(1/2) = x^(1/4)


https://canon-board.info//brak.gif
źródło (http://img408.imageshack.us/img408/3411/gamma14ae0.jpg)

Nasza rzeczywista szarość 50% będzie miała wartość 0,84.

Teraz pytanie.
Czy zależy nam na wierności, czy jakimś pseudo HDR który podbija sztucznie cienie? :)

ewg
05-11-2007, 12:10
Przetwornik cyfrowo analogowy z matrycy daje większą gęstość danych dla świateł [...]

Daje tyle samo w światłach co cieniach - jest liniowy (tak z grubsza).

(i to też wyłącznie z ludzkiego punktu widzenia!)

- Skomentowałeś fragment zdania odzielony od kluczowego dlań nawiasu. ;-) No i myślę, że (o ironio!) właśnie tutaj jest pies pogrzebany:

Z ludzkiego punktu widzenia matryca cyfrowa nie jest liniowa (nawet z grubsza). Dlatego też po wcześniejszym "tłumaczeniu", już na poziomie międzymordzia (interfejsu ;-)) graficznego użytkownika (czyli monitora) nie mnożą sią już dwie krzywe tylko właśnie dwie proste!, z czego powstaje kolejna identyczna prosta (mnożenie przez 1).

Przyznaję, że wywód Kolegi można chyba zaliczyć do jednych z lepszych filozoficznie twierdzeń absurdu - Dlatego - moje uznanie! Jeśli to było kontrolowane i zamierzone - tym bardziej! ;-)

Swoją drogą (kolejna ironia przypadku?) tzw. "18% szarość Kodaka", której w komputerze ponoć odpowiada 50% świetnie pasowałaby do Twojego ostatniego wykresu (tam gdzie 50%=0,84, a 18%=0,5 ;-)). - To tylko takie luźne spostrzeżenie na podstawie wykresu - nie liczb. Teoretycznie, chyba powinno to pasować do wykresu wcześniejszego, gdzie logarytmy się jeszcze nie nałożyły, ale trzeba jeszcze brać poprawkę na właściwości farb i papierów drukarskich, bo to zdaje się teoria szarości jeszcze z czasów czysto analogowego druku offsetowego. Nie bez kozery o tym wspominam bo te "18%" to chyba rzecz nie bez związku dla omawianej w tym wątku teorii widzenia? :confused:

Co tu dużo gadać, chyba wszyscy czekamy tu już na wypowiedź wielokrotnie przywoływanego, wielkiego Nieobecnego, czyli na odświeżający powiew pragmatyzmu. ;)

Tomasz Urbanowicz
05-11-2007, 21:15
Z ludzkiego punktu widzenia matryca cyfrowa nie jest liniowa (nawet z grubsza). Dlatego też po wcześniejszym "tłumaczeniu", już na poziomie międzymordzia (interfejsu ;-)) graficznego użytkownika (czyli monitora) nie mnożą sią już dwie krzywe tylko właśnie dwie proste!, z czego powstaje kolejna identyczna prosta (mnożenie przez 1).

Ale mnie nie interesuje punkt widzenia człowieka liniowości matrycy :)
O dwóch prostych przecież cały czas piszę - prosta z matrycy i prosta z monitora. Patrzymy na obraz "liniowy" w monitorze (zakładam że JPG nie potraktowany jest żadną nieliniowością) i widzimy poprzez ludzkie widzenie (np. z założenia jakie napisałem y=x^(1/2)) tak jak patrząc na otaczającą nas rzeczywistość.

Logiczność jest jedna: wynikowe przekształcenie aby zapewnić wierność odwzorowania musi być liniowe - nie ma innej możliwości. Takiego wynikowego liniowego przekształcenia nie ma przy potraktowaniu JPG z RAW nieliniowością.



Przyznaję, że wywód Kolegi można chyba zaliczyć do jednych z lepszych filozoficznie twierdzeń absurdu - Dlatego - moje uznanie! Jeśli to było kontrolowane i zamierzone - tym bardziej! ;-)

Nie wiem czy mam to traktować jako komplement czy obrazę? ;-)

Adaminio
07-11-2007, 00:33
Tomku... ale o co chodzi?

Piszesz, że Janusz napisał że do przekształceń z RAW na JPG oprogramowanie stosuje pewną funkcję 'gamma' o jakimś wykładniku. Pytasz poco jest ta funckja. Ale przecież to nie tak. Gamma to funckja interpretacji danych z matrycy w ogóle. Wszystko jest przecedzone przez gammę, RAW też do póki nie włączysz opcję liniowo w sofcie na komputerze, (canonowski soft ma tę funkcję).

Panowie, rozumiem wykresy liniowe czy nie liniowe dla matryc, gdzie na jednej osi zaznaczone jest wejście na drugiej wyjście. Ale Tomku, co znaczy x i y dla twoich wykresów widzenia oka? Nie potrafię podstawić tam żadnych wartości. Jak je rozumiesz?

Tomasz Urbanowicz
08-11-2007, 17:07
Tomku... ale o co chodzi?

Piszesz, że Janusz napisał że do przekształceń z RAW na JPG oprogramowanie stosuje pewną funkcję 'gamma' o jakimś wykładniku. Pytasz poco jest ta funckja. Ale przecież to nie tak. Gamma to funckja interpretacji danych z matrycy w ogóle. Wszystko jest przecedzone przez gammę, RAW też do póki nie włączysz opcję liniowo w sofcie na komputerze, (canonowski soft ma tę funkcję).

Tak, tylko gamma=1 to funkcja liniowa. Tutaj wyraźnie JPG jest przekształcany za pomocą gammy=2.2.



Panowie, rozumiem wykresy liniowe czy nie liniowe dla matryc, gdzie na jednej osi zaznaczone jest wejście na drugiej wyjście. Ale Tomku, co znaczy x i y dla twoich wykresów widzenia oka? Nie potrafię podstawić tam żadnych wartości. Jak je rozumiesz?

x to wartość luminancji rzeczywistej, y to jak człowiek to odbiera.
Na moim wykresie jest to uproszczone i wyskalowane od 0-1.

Pirx
09-11-2007, 00:42
Niestety, albo stety zapis liniowy z matrycy jest nieakceptowalny pod względem wizualności i domyślnie krzywa jaką zostaje poddany taki JPG jest dokładnie gamma=1/2.2 czyli wykładnik ok. 0,45.

...

Niestety moja logika nie pozwala mi na zrozumienie DLACZEGO tak to jest....

Tomku,
wyobraź sobie, że z ludzkiego punktu widzenia (bo tak jest nam łatwiej) widzimy liniowo. W zgodzie z matematyką również widzimy liniowo, ale w stosunku do logarytmu luminancji, czyli widzimy liniowo w skali logarytmicznej.

Tymczasem matryca rejestruje luminancję też liniowo, ale w skali liniowej.

Konwersja sygnału z matrycy, na obraz przeznaczony dla oka wymaga zamiany skali liniowej na logarytmiczną.
To, jak nasze oczy widzą luminancję zarejestrowaną w skali liniowej sam pokazałeś na screenie z gamma = 1.

Jeśli dobrze zrozumiałem wywód Janusza, to wyobrażam sobie, że konwersja ta polega na spotęgowaniu sygnału (wyrażonego w postaci niemianowanej od 0 do 1) odwrotnością gammy.

Takie przekształcenie daje następujące wyniki :

wej.- wyj.
0,0 - 0,00
0,1 - 0,35
0,2 - 0,48
0,3 - 0,58
0,4 - 0,66
0,5 - 0,73
0,6 - 0,79
0,7 - 0,85
0,8 - 0,90
0,9 - 0,95
1,0 - 1,00

Widać z tego, że cienie ulegną rozciągnięciu (1/3 zakresu informacji z dołu utworzy prawie 2/3 widzianych przez nas walorów), zaś światła ulegną skupieniu (2/3 zakresu utworzy trochę ponad 1/3 widzianych okiem świateł).
Dlatego, po tym przekształceniu, gęstość sygnału dla świateł jest większa, o czym pisał ewg.

Kwestii wyświetlania takiego przekształconego JPEGa przez układ PC+monitor bym do tego nie mieszał. Układ ten musi "wiedzieć" co to jest JPEG i jak go standardowo wyświetlić. A to, że możemy sobie zmieniać gammę wyświetlanego na monitorze obrazka ma niewiele wspólnego z transformacją dokonywaną przy konwersji RAW->JPEG.

Tomasz Urbanowicz
09-11-2007, 18:03
Według mnie, przekształcenie z RAW do JPG/TIFF jest liniowe. To całe zamieszanie z gammami ma związek z gammą systemu. Jak już wcześniej pisałem, aby zlinearyzować wyświetlany obraz na monitorze, system musi nadawać na gammę odwrotną do krzywej monitora - to zapewnia kalibracja i mamy liniowość.
Tak, czy siak, IMO nie występuje w samym konwerterze domyślnie żadne przekształcenie nieliniowe.
Weźmy taki oto przykład (dziękuję Jackowi Kardasiewiczowi za podsunięcie pomysłu ). Robimy byle jakie zdjęcie w JPG prawidłowo dobierając ekspozycje. Następnie wrzucamy na komputer i wyświetlamy na skalibrowanym monitorze. Następnie drukujemy zdjęcie (drukarka oprofilowana), lub wywołujemy w skalibrowanym labie. Robimy kolejne zdjęcie wywołanej fotki i znów wrzucamy na kompa (dobieramy balans bieli itp, nie ruszając gammy). Znów drukujemy i znów robimy zdjęcie wydrukowanemu zdjęciu i tak kilka razy. Zgodnie z teorią o traktowaniu JPG jakąś krzywą każde kolejne zdjęcie powinno być jaśniejsze - a tak nie jest.
Wykonałem taki test - wywołałem zdjęcie w skalibrowanym labie i zrobiłem temu zdjęciu zdjęcie (JPG). Wyświetliłem na monitorze - dobrałem balans bieli jedynie. Zdjęcie było praktycznie takie samo jak oryginał...
Robione są przecież np. kopie obrazów - nie zależy nam na rozciągnięciu cieni, a na wierności z oryginałem...

piotrgr
11-12-2008, 14:07
Myśle , że mozna by bylo w odwrotny sposób przeprowadzać konwersję A/D czyli dla sygnału 0 - czerń dać max bitów a dla bieli odwrotnie i wrócilibysmy mniej wiecej do tego co było w analogu czyli naswietlanie do lewej a nie do prawej histogramu.

HuleLam
12-12-2008, 17:00
Myśle , że mozna by bylo w odwrotny sposób przeprowadzać konwersję A/D czyli dla sygnału 0 - czerń dać max bitów a dla bieli odwrotnie i wrócilibysmy mniej wiecej do tego co było w analogu czyli naswietlanie do lewej a nie do prawej histogramu.

Chyba byłby to podobny problem co konwersja nieliniowo (logarytmicznie) - trudno byłoby zrobić mały, dobrze działający i tani element, który tę operację wykona...

piotrgr
15-12-2008, 13:00
Chyba byłby to podobny problem co konwersja nieliniowo (logarytmicznie) - trudno byłoby zrobić mały, dobrze działający i tani element, który tę operację wykona...

A jaki tu problem wystarczy inwersja bitów np. dla 8 bitowego max=11111111 po inwersji wyjdzie max=00000000 a dla min odpowiednio odwrotnie. Jak zrealizować najprościej XOR z maska 11111111. Ale takie rozwiązanie wiązało by się ze zmianą sposobu wyświetlania , drukowania itp. na całym sprzęcie, więc jest raczej nie do przeprowadzenia. Lepszym sposobem byłoby chyba zbliżenie konwersji do tego jak widzi człowiek tzn. zmiana przedziałów kwantyzacji w przetworniku A/D. Obecnie wykonywane to jest najprostszym sposobem - matryca liniowo rejestruje natężenie a przetwornik A/D przypisuje wartości poziomom napięcia z równym krokiem a można inaczej porównanie na obrazku.

https://canon-board.info//brak.gif
źródło (http://piotrgr.epwik.com.pl/przyklad.jpg)

minek
17-12-2008, 18:36
Według mnie, przekształcenie z RAW do JPG/TIFF jest liniowe.

Nie jest liniowe.


To całe zamieszanie z gammami ma związek z gammą systemu.

Gamma systemu to zupełnie inna sprawa, system wyświetla nie tylko jpegi zrobione z rawów, ale też okienka, literki, gierki, filmy i inne mniej lub bardziej potrzebne rzeczy.


Tak, czy siak, IMO nie występuje w samym konwerterze domyślnie żadne przekształcenie nieliniowe.

Występuje. To sporo komplikuje, owszem, zwłaszcza przy aplikowaniu innych przekształceń, które zazwyczaj są liniowe.
W tanich aparatach, które od razu wypluwają jpegi - to przekształcenie nie zawsze nawet przypomina funkcję wykładniczą, zależnie od sensora (lichy sensor - większa nieliniowość nieliniowości, o)


(...) Zgodnie z teorią o traktowaniu JPG jakąś krzywą każde kolejne zdjęcie powinno być jaśniejsze - a tak nie jest.

Podczas odczytu RAW należy zastosować przekształcenie podobne do gammy, właśnie po to, by ten jpeg wyglądał tak jak ten który widzisz. Bo to matryca widziała go nieco inaczej i w taki sposób zapisana została pobrana z niej informacja.
W dodatku o ile się nie mylę, nie mamy za dużego wpływu na tą konwersję, to jest ustawione w programach dla każdego sensora inaczej. Przynajmniej w ACR tego nie znalazłem. UFraw chyba domyślnie ustawia liniowo, tam widać, że trzeba sobie tą krzywą podnieść.

Tomasz Urbanowicz
19-12-2008, 08:10
@minek:
Piszesz trochę na zasadzie: dlaczego nie? Nie, bo nie.
Wiesz, na "nie, bo nie" jest argument "tak, bo tak". Na poprzednich stronach pozwoliłem sobie przedstawić mój pkt widzenia rysując wykresy, jakieś tam wyliczenia. Jako, iż faceci w większości są wzrokowcami, przedstaw mi swój pkt widzenia w podobny sposób.

minek
19-12-2008, 14:51
Dobra, to po kawałku:
Wykresów i wyliczeń nie tworzę bo nie umiem, a Janusz w pierwszym poście zamieścił wszystkie wymagane i poprawnie.
Dla uproszczenia weźmy tylko średnią szarość.
Średnia szarość to taka, która leży pomiędzy czernią a bielą przy danym oświetleniu. 100% to biel, 0% to czerń. 50% (widzialne) to średnia szarość.
Tak się składa, że aby widzieć te 50%, to powierzchnia w tym kolorze musi odbijać 18% światła (biała odbije 100%, czarna nic) Nie istotne, czy to jest jakaś tam szara scena, piasek, asfalt, czy odbitka zdjęcia zawierająca powyższe - 50% szare odbija 18% światła, koniec, korpka.

Plik graficzny monochromatyczny 8 bitowy, zawierający informację o powyższej scenie będzie czarne fragmenty opisywał wartością 0, białe 255, a szare 128.
Pliku oczywiście zobaczyć nie możemy, ale możemy go wyświetlić lub wydrukować, zatem:
- sprawą monitora jest to, by wyświetlił tak, by to szare świeciło 18% pełnej jego mocy, 100% wyemituje reprezentując biel. Do tego służy gamma monitora, która jest w postaci funkcji wykładniczej. 0.5^(2.4) =~ 0.19 (to, że gammę dobiera się nieco inną wynika zapewne też z nieliniowych charakterystyk monitora)
- problemem drukarki za to jest, aby w miejscu gdzie w pliku była wartość 128 nałożyć tyle farby na papier, aby odbiła 18% światła.

Teraz matryca, w uproszczeniu, niechaj będzie 8 bitowa monochromatyczna.
Rejestruje liniowo w 8 bitach. Przyjmijmy, że mamy warunki pozwalające ją w pełni wykorzystać, czyli bez przepaleń i bez niedoświetleń. Tam gdzie było 100% światła zarejestruje jako swoje 100% czyli 255, tam gdzie 50% - jako 128, ale tam gdzie my widzieliśmy średnio szare, czyli 18% światła - matryca zapisze jedynie wartość 46.

A przypomnijmy sobie teraz, jaką wartość powinien zawierać 8 bitowy, monochromatyczny plik, żebyśmy widzieli 50% szarość?
O ile pamiętam, to było 128. 46 będzie dla nas znacznie ciemniejsze. Zatem dane z matrycy przekształcamy funkcją zbliżoną do logarytmu x^(1/gamma), czyli upychamy całość w przedziale [0,1] i mamy: 0.18^(1/2.5) =~0.5.

Już jasne?

HuleLam
19-12-2008, 16:58
A jaki tu problem wystarczy inwersja bitów np. dla 8 bitowego max=11111111 po inwersji wyjdzie max=00000000 a dla min odpowiednio odwrotnie. Jak zrealizować najprościej XOR z maska 11111111. Ale takie rozwiązanie wiązało by się ze zmianą sposobu wyświetlania , drukowania itp. na całym sprzęcie, więc jest raczej nie do przeprowadzenia. Lepszym sposobem byłoby chyba zbliżenie konwersji do tego jak widzi człowiek tzn. zmiana przedziałów kwantyzacji w przetworniku A/D. Obecnie wykonywane to jest najprostszym sposobem - matryca liniowo rejestruje natężenie a przetwornik A/D przypisuje wartości poziomom napięcia z równym krokiem a można inaczej porównanie na obrazku.

https://canon-board.info//brak.gif
źródło (http://piotrgr.epwik.com.pl/przyklad.jpg)

Ale to, co napisałeś, nie przeczy moim słowom - z tego co wiem obecnie jest trudno (drogo) zrealizować coś takiego (nierówne /zlogarytmizowane przedziały kwantyacji). Co do negacji - chyba cała idea polega na zrobieniu tego w domenie analogowej, przed konwersją ? Tricki w stylu XOR czy negacji to możemy sobie i na pliku RAW zrobić ;) ?

Tomasz Urbanowicz
19-12-2008, 19:19
Plik graficzny monochromatyczny 8 bitowy, zawierający informację o powyższej scenie będzie czarne fragmenty opisywał wartością 0, białe 255, a szare 128.
Pliku oczywiście zobaczyć nie możemy, ale możemy go wyświetlić lub wydrukować, zatem:
- sprawą monitora jest to, by wyświetlił tak, by to szare świeciło 18% pełnej jego mocy, 100% wyemituje reprezentując biel. Do tego służy gamma monitora, która jest w postaci funkcji wykładniczej. 0.5^(2.4) =~ 0.19 (to, że gammę dobiera się nieco inną wynika zapewne też z nieliniowych charakterystyk monitora)
Tu się trochę zagalopowałeś.
Wypadkowa monitor-system ma być liniowa - tu też w zasadzie koniec i kropka. Po to kalibruje się monitor na zadaną gammę systemu, aby to zrównoważyć/zlinearyzować.

Resztę zrozumiałem - chyba wszystko jasne :)

michalab
20-12-2008, 02:47
Chyba główne założenie wywodu jest jednak błędne, bo wartość RGB=(128,128,128 ) przekłada się na CMYK=(0,0,0,50%) - tak przynajmniej pokazuje GIMP, może źle.

minek
20-12-2008, 18:11
Tu się trochę zagalopowałeś.
Wypadkowa monitor-system ma być liniowa - tu też w zasadzie koniec i kropka. Po to kalibruje się monitor na zadaną gammę systemu, aby to zrównoważyć/zlinearyzować.

Nie wiem co dokładnie rozumiesz przez wypadkowa monitor-system, ale tak, ma być liniowa _dla oka_. Czyli monitor nie może świecić liniowo, bo nie odbierał byś tego liniowo. Gamma monitora zamienia liniowy sygnał na wizyjny, tak by odbierany był prawidłowo przez człowieka (szarość nie może być równa 50% maksymalnej mocy świecenia monitora, tylko 18%)
Gamma systemu to informacja dla systemu, jak ustawiony jest monitor, by wysłać odpowiednio skorygowany sygnał, żeby wyglądał dobrze.
Myślę, że tu się jednak zgadzamy.


Chyba główne założenie wywodu jest jednak błędne, bo wartość RGB=(128,128,128 ) przekłada się na CMYK=(0,0,0,50%) - tak przynajmniej pokazuje GIMP, może źle.
W fotoszopie wygląda jeszcze inaczej, często CMY są niezerowe. To wszytko zależy od ustawionego profilu CMYK czyli zadanego sposobu generacji czerni, maksymalnej ilości farby itp.

piotrgr
20-12-2008, 18:12
Z tego co mnie wiadomo to na temat A/D to jest to możliwe do realizacji przy takim załozeniu jak na rysunku wsztkie przedziały EV z taką samą ilością poziomów - zmiast jednego 12 bitowego prztwornika jeden 9 bitowy i jeden 3 bitowy. 9 bitowy wylicza warotść w przedziale a 3 bitowy zmienia przedziały.

Tomasz Urbanowicz
20-12-2008, 20:19
Minek namieszałeś strasznie.

Po pierwsze założenie jest że matryca jest liniowa - i tego się trzymajmy.
Skoro tak, to szarość 50% trafi na matryce tak samo jak do naszego oka tj. 18% odbitego światła. Dlaczego ma do matrycy trafić inaczej?? Trafi tak samo: czy zarówno do nas, jak i do matrycy będzie przy szarości 50% - 18% odbitego światła. Po co więc ma być przekształcenie nieliniowe przy konwersji? Nie ma IMO czegoś takiego, bo to byłoby bez sensu. Sens by był wtedy, gdyby matryca wyłapała więcej niż 18% światła, ale przecież nie wyłapie, bo 50% szarość odbija tylko 18%, a matryca jest liniowa więc na "wyjśćiu" matrycy będzie również "18%".
Jeśli nadal będziesz się przy tym upierał, pokaż mi w jakimś algorytmie RAW -> JPG taką nieliniową konwersje.

Trzecia sprawa to ta gamma. Wypadkowa monitor-system jest liniowa y=x (taka ma być przy prawidłowo skalibrowanym monitorze). System nadaje z y=x^2.2, monitor jest nieliniowy (to zaszłość z CRT) i "nadaje" y=x^1/2.2. Wypadkowa jest liniowa - możesz to sprawdzić w lafocie, czy basiccolor.
Mało tego, jak zauważysz przy kalibracji basiccolor przy RGB=128 luminancja wskazywana jest na 50%.

Tomasz Golinski
20-12-2008, 21:27
Tomasz: Udowadniasz, że wszystko po kolei jest liniowe - to dlaczego 18% światła jest zapisane jako 50%?

Jest tak (w przybliżeniu) - ze źródła dane trafiają na matrycę i do rawa - liniowo. Potem są upychane nieliniowo do jpga (tu się robi z 18% wspomniane 50%). Następnie przy wyświetlaniu jpga następuje kolejna nieliniowa transformacja - aby odkręcić tą poprzednią.

PS. W przeciwieństwie do tego, od czego zaczął Janusz, jest zupełnie nieistotne jak działają nasze oczy.

Tomasz Urbanowicz
20-12-2008, 22:41
Pomijamy fakt jak widzą nasze oczy, bo to w zasadzie nieistotne.

Zanim przejdę do matrycy, przyjrzyjmy się monitorowi. Monitory CRT miały charakterystykę odwrotną w zakresie od y=x^1/1,8 do y=x^1/2,5 - tak z grubsza. M$ przyjął za średnią 2,2 i tak dobrał charakterystykę systemu, aby wypadkowa była liniowa czyli x=y. Jak wiemy gamma dla Windows jest 2.2 tj. y=x^2.2.
Apple chciałbyć oryginalny i tak produkował monitory aby miały charakterystykę zbliżoną do y=x^1/1,8 więc gamma dla systemu była 1.8 - aby nie pasowały monitory z PC itp.
Czyli wypadkowa system-monitor w każdym przypadku ma być/powinna być liniowa.
(jeśli co do tego macie wątpliwości proszę zajrzeć do x-rite i dokumentówy wystawionych na ich stronie w postaci pdf).
Skoro na tym etapie mamy zachowaną liniowość, wszystko to co trafi musi być już liniowe czyli np. JPG z aparatu - nie może być inaczej. Nie może ten JPG być jakoś ponaginany jeśli zależy nam na wierności.
Jeśli robimy zdjęcie dobierając odpowiednio ekspozycje, to to ile światła odbija jakaś tam szarość w ogóle nas nie obchodzi, bo tyle światła trafia do naszych oczu, jak i na matryce. I niech sceną będą 3 prostokąty: czerń, szarość 18%, biel 100%. Do naszych oczu trafi więc 0, 18% odbitego światła i 100% odbitego światła.
Chcemy, aby wyświetlone zdjęcie na monitorze też tak "świeciło". Matryca liniowo zarejestruje scene i to 3 prostokąty przekarze liniowo dalej do JPG, którego następnie wyświetlimy na monitorze. W JPG będziemy widzieli czarny RGB=000, szary 18% RGB=46.46.46 i biały 100% RGB=255.255.255.
Po co komplikować sprawe? Żeby zachować wierność musi być zachowana w miarę liniowość - nie ma innej możliwości.

Tomasz Golinski
20-12-2008, 22:54
Wszystko prawda, z wyjątkiem tego, że 18% jasności w jpgu zapisze się jako 50% :) RGB=128,128,128. Z powodów antropicznych.

minek
21-12-2008, 01:03
Minek namieszałeś strasznie.

Tak, Tobie w głowie (-:


Po pierwsze założenie jest że matryca jest liniowa

To nie jest założenie. To jest fakt.


Skoro tak, to szarość 50% trafi na matryce tak samo jak do naszego oka tj. 18% odbitego światła. Dlaczego ma do matrycy trafić inaczej?? Trafi tak samo: czy zarówno do nas, jak i do matrycy będzie przy szarości 50% - 18% odbitego światła.

Ale oczy nie widzą liniowo, i to jest drugi fakt.
Zacznijmy może dla utrudnienia odróżniać % dla człowieka (w tych samych zapisywać będziemy sygnał) i % natężenia światła odbitego (względnie, dla danej sceny oczywiście).
%c(złowieka) i %s(wiatła)
szarość 50%s trafi na matrycę jako 50%s, ale dla nas to będzie bardzo jasny szary, tak około 75%c.
BARDZO JASNY ODCIEŃ ZOSTANIE ZAPISANY ZALEDWIE JAKO ŚREDNI!


Po co więc ma być przekształcenie nieliniowe przy konwersji? Nie ma IMO czegoś takiego, bo to byłoby bez sensu. Sens by był wtedy, gdyby matryca wyłapała więcej niż 18% światła, ale przecież nie wyłapie, bo 50% szarość odbija tylko 18%, a matryca jest liniowa więc na "wyjśćiu" matrycy będzie również "18%".

Po to, by lepiej wykorzystać dostępną przestrzeń w pliku graficznym. Nie pytaj mnie dlaczego tak jest, ale tak jest od bardzo dawna, że informacja w pliku graficznym odpowiada mniej więcej temu, co widzi oko.
I to bardzo dobrze, bo po co marnować miejsce na rejestrowanie tysięcy zmian natężenia światła w jasnych partiach obrazu, skoro normalnie nikt ich nie widzi?
Teraz pewnie znowu Ci trochę zamieszam, ale trudno. Posłużę się mianowicie liniową skalą pomiaru natężenia światła, Luxami.
Między 0 z 1EV jest 2.5Lux, między 1 a 2EV - 5 lux, między 2 a 3 EV - 10lux, zaś między 13 a 14 EV (słoneczny dzień) jest już około 20000 luxów różnicy. Lux to skala liniowa, w takiej rejestruje matryca. Ma to sens? Nie ma, bo dla nas zmiana o 1EV to dwukrotnie jaśniej / ciemniej.
Dlatego dawno temu ktoś mądry wymyślił, że informacja w pliku graficznym jest zgodna z tym co widzi człowiek a nie sensor zliczający fotony.
Dlatego potrzebna jest ta konwersja.


Jeśli nadal będziesz się przy tym upierał, pokaż mi w jakimś algorytmie RAW -> JPG taką nieliniową konwersje.

Proszę: (fragment dcraw.c, komentarze moje)

/* przygotowanie tablicy konwersji, fragment */
white *= 8 / bright;
for (i=0; i < 0x10000; i++) {
r = i / white;
val = 256 * ( !use_gamma ? r :
#ifdef SRGB_GAMMA
r <= 0.00304 ? r*12.92 : pow(r,2.5/6)*1.055-0.055 );
#else
r <= 0.018 ? r*4.5 : pow(r,0.45)*1.099-0.099 );
#endif
if (val > 255) val = 255;
lut[i] = val;
/* (...) */
/* konwersja gamma tylko podczas zapisu 8 bit: */
for (row=0; row < height; row++, soff += rstep) {
for (col=0; col < width; col++, soff += cstep)
if (output_bps == 8)
FORCC ppm [col*colors+c] = lut[image[soff][c]];
else FORCC ppm2[col*colors+c] = image[soff][c];
if (output_bps == 16 && !output_tiff && htons(0x55aa) != 0x55aa)
swab (ppm2, ppm2, width*colors*2);
fwrite (ppm, colors*output_bps/8, width, ofp);
}

}
FORCC to po prostu define robiący for() dla wszystkich kolorów czyli najprawdopodobniej 3.
To jest fragment odpowiedzialny za konwersję do 8 bitowego wyjścia z _gammą_ czyli dla ludzi. Można też bez tego zapisać jako liniowy 16 bit. Sam sobie wtedy podciągniesz krzywą krzywymi.
Mam też inne, ale tamtych nie mogę tu wklejać (-:


Trzecia sprawa to ta gamma. Wypadkowa monitor-system (...) luminancja wskazywana jest na 50%.
Wszystko prawda. Ale przy luminancji 50% monitor emituje przy tym 18% światła.


Pomijamy fakt jak widzą nasze oczy, bo to w zasadzie nieistotne.

W zasadzie to ogromnie zajebiście bardzo cholernie mocno istotne.



(...)
Czyli wypadkowa system-monitor w każdym przypadku ma być/powinna być liniowa.
(jeśli co do tego macie wątpliwości proszę zajrzeć do x-rite i dokumentówy wystawionych na ich stronie w postaci pdf).
Skoro na tym etapie mamy zachowaną liniowość, wszystko to co trafi musi być już liniowe czyli np. JPG z aparatu - nie może być inaczej. Nie może ten JPG być jakoś ponaginany jeśli zależy nam na wierności.

Oczywiście, ze krowa.
Tzn, tak, ma być liniowa. Liniowa względem naszej percepcji. Liniowy sygnał, tak ma być, tak jest w pliku, tak i już. Masz rację.
Gamma monitora (nie systemu! Ona w monitorze jest i nic o niej nie wiesz, możesz ją tylko zmierzyć fikuśnym xritem lub innym szitem) ma za zadanie pocichutku i nic Ci nie mówiąc wyemitować tyle energii, abyś ów sygnał zobaczył tak, jak był zapisany.


(...)
Chcemy, aby wyświetlone zdjęcie na monitorze też tak "świeciło". Matryca liniowo zarejestruje scene i to 3 prostokąty przekarze liniowo dalej do JPG, którego następnie wyświetlimy na monitorze. W JPG będziemy widzieli czarny RGB=000, szary 18% RGB=46.46.46 i biały 100% RGB=255.255.255.
Po co komplikować sprawe? Żeby zachować wierność musi być zachowana w miarę liniowość - nie ma innej możliwości.
Można by tak zrobić, ale kiedyś nie było takich ilości pamięci ani mocy obliczeniowych jak dziś, i wymyślono, że po co marnować miejsce, lepiej po prostu olać informację która dla nas nie istnieje - czyli zapisujmy informację tak jak ją widzimy. Patrz wyżej. Dlatego szary 50%, czyli odbijający 18% światła zapisany jest jako 50%. Bo tak widzisz, koniec, korpka!

Tomasz Golinski
21-12-2008, 01:12
To nie jest założenie. To jest fakt.Nie, to przybliżenie tylko.


Dlatego dawno temu ktoś mądry wymyślił, że informacja w pliku graficznym jest zgodna z tym co widzi człowiek a nie sensor zliczający fotony.
Dlatego potrzebna jest ta konwersja.O, i to jest podstawa wszystkiego.


W zasadzie to ogromnie zajebiście bardzo cholernie mocno istotne.Zupełnie nie istotne. Ważne jest tylko to, że ktoś tak sobie wymyślił. Oczy są tylko motywacją,

Tomasz Urbanowicz
21-12-2008, 10:45
@minek:

Chwilka, chwilka....
Zatrzymajmy się jeszcze na samym początku tego całego procesu tj. tej liniowej rejestracji przez matrycę. Weźmy taki przykład z 3 prostokątami: czarny, szary 50% i biały 100% (scena oczywiście jest oświetlona jakoś). Od czarnego (zakładam idealny czarny) nie odbije się światło, od szarego odbije się 18%, od białego odbije się 100% padającego światła. Pomijając całkowicie fakt jak widzimy (na tym etapie) i przyjmując że nie ma żadnego przekształcenia nieliniowego, do naszych oczu jak i na matryce wpada to odbite światło od sceny: 0%, 18%, 100%. Matryca zarejestruje to liniowo (i chwała jej za to), następnie przetwornik przetworzy to na plik np. JPG który sobie wyświetlimy. Plik ten wyświetlony na monitorze wyświetli nam 3 prostokąty, które będą odpowiednio świeciły: 0%, 18%, 100% jasności monitora.
I teraz patrzymy na scenę jak i na wyświetlony plik. Do naszych oczu ze sceny docierają 3 prostokąty (z odbicia światła): 0%, 18%, 100%, a z monitora dociera "świecący" już plik: 0%, 18%, 100%. A jak człowiek widzi jest IMO mało istotne, bo oba przypadki zobaczy/zarejestruje/przetworzy przecież TAK SAMO.

Tomasz Golinski
21-12-2008, 16:05
TomaszU: Właśnie tak. Ale plik jpg będzie miał 0,0,0; 128,128,128; 255,255,255. Z powodu takiej właśnie konwencji. Ktoś sobie to tak wymyślił, że będzie lepiej i dzięki temu 255 poziomów na kanał będzie lepiej rozdysponowane.

czornyj
21-12-2008, 17:32
Monitory, drukarki i wszelkie piździastwo jest kalibrowane nieliniowo, stąd liniowo rejestrowany obraz z aparatów, skanerów i inszych przetworników musi być poddawany stosownej korekcji:

https://canon-board.info//brak.gif
źródło (http://upload.wikimedia.org/wikipedia/en/5/5a/Gamma06_600.png)

Przy 128,128,128 mamy ok. 22% jasności, bo standardowo kalibruje się monitory do gamma 2,2 i popularne przestrzenie zakładają prekompensację danych do gammy 1/2,2, gdybyśmy jednak skalibrowali monitor do TRC L* (z modelu ludzkiej percepcji CIE L*a*b), to oczywiście przy 128,128,128 dostalibyśmy nasze 18%.

Dowód: mamy monitor skalibrowany do gamma 2,2, zatem połowa zakresu jasności - 0,5 jest zatem podnoszona do potęgi 2,2 co wynikowo daje wartość 0,218. I teraz pytanie - ile cd/m^2 daje monitor skalibrowany do gamma 2,2/100cd/m^2?:

https://canon-board.info//brak.gif
źródło (http://members.chello.pl/m.kaluza/pomiar.jpg)

Tomasz Urbanowicz
21-12-2008, 18:02
Hmm... Macie racje jakoś :)
Zrobiłem test EyeOne i wyszło mi, że przy RGB=128.128.128 jest ok. 18% z jasności monitora - muszę to sobie jakoś poukładać w głowie :)

Tomasz Urbanowicz
21-12-2008, 19:20
OK, chyba powoli wszystko staje się jasne.
Proszę mi na koniec wytłumaczyć jak to jest, iż wielu fotografów obrabia swoje zdjęcia pod OsX, który raczej powinien być skalibrowany na gamme 1.8, (Windowsy na 2.2).
Wynika z tego, że inaczej ten sam JPG będzie wyglądał pod OsX a inaczej pod Windowsem i to dość znacznie. Gdzie tu jest psina pogrzebana? :)

@czornyj:
Pod Windowsem proponujesz kalibrować na gamme: L, sRGB czy też 2.2?

czornyj
21-12-2008, 21:36
OK, chyba powoli wszystko staje się jasne.
Proszę mi na koniec wytłumaczyć jak to jest, iż wielu fotografów obrabia swoje zdjęcia pod OsX, który raczej powinien być skalibrowany na gamme 1.8, (Windowsy na 2.2).
Wynika z tego, że inaczej ten sam JPG będzie wyglądał pod OsX a inaczej pod Windowsem i to dość znacznie. Gdzie tu jest psina pogrzebana? :)

@czornyj:
Pod Windowsem proponujesz kalibrować na gamme: L, sRGB czy też 2.2?

Zdjęcie zapisane w RAW zapisane jest w sposób liniowy, tj. gamma=1.0. Wywołując RAW dane są renderowane do jednej z syntetycznych przestrzeni edycyjnych, gdzie dane są już kodowane nieliniowo, tj:
dla sRGB - gamma ~2.2
dla AdobeRGB gamma 2.2
dla ProPhoto gamma 1.8
dla ECI v.1 gamma 1.8
dla ECI v.2 L*
Każda sytetyczna przestrzeń edycyjna zawiera tagi TRC, w których zawarta jest informacja, do jakiej gradacji zostały wyrenderowane dane naszego zdjęcia.

Kalibrując i oprofilowywując monitor również uzyskujemy profil zawierający informację o tym, jaka jest gradacja naszego monitora.

I teraz - moduł zarządzania barwą otwierając dane zdjęcie porównuje TRC przestrzeni zdjęcia z TRC przestrzeni monitora, a następnie dokonuje stosownych kompensacji.

Ogólnie zatem niezależnie od tego, przy pomocy jakiej gammy zakodujemy gradację jasności naszego zdjęcia, CMS zadba o to, by zostało ono poprawnie wyświetlone.

Oczywiście - w przypadku środowiska pozostającego poza CMS-em jasność zdjęcia wyrenderowanego do przestrzeni o TRC odmiennej od TRC, do której skalibrowaliśmy nasz monitor będzie zafałszowana.

Gamma 1.8 już dawno nie jest "natywną" gammą dla OS X - to pozostałość po czasach przedCMS-owych, gdy monitory Apple były kalibrowane do gamma 1.8, bo taka TRC odpowiadała TRC drukarki Apple LaserWriter. Współczesne monitory ACD są już kalibrowane do gamma 2.2. Niezależnie jednak od tego z uwagi na sposób działania współczesnych systemów CMS nie ma to większego znaczenia (przynajmniej w aplikacjach wyposażonych w moduł zarządzania barwą).

Dawno, dawno temu próbowałem znaleźć odpowiedź na filozoficzne pytanie, do której gradacji najlepiej kalibrować monitor - przeczytałem na ten temat całkiem sporo, stoczyłem wiele interesujących dyskusji i jestem jeszcze głupszy, niż byłem. Ma to mz. jednak znaczenie na bardzo wysokim poziomie abstrakcji i dla sprzętowo kalibrowanych paneli z >8 bitową matrycą i programowalną, 12-14 bitową LUT. W przypadku monitorów "cywilnych" i pracy w aplikacjach z zarządzaniem barwą kalibracja monitora do zadanej gradacji jest bez większego znaczenia, równie dobrze można go kalibrować do gradacji natywnej (tj. po prostu oprofilować bez wprowadzania korekty do LUT karty graficznej), CMS tak czy owak dokona podczas wyświetlania stosownej korekty.

airhead
22-12-2008, 17:11
przepraszam, a czy z tego wątku nie wynika przypadkiem, że nie należy niedoświetlać scen ciemniejszych niż 18%, bo tracimy dane? taka próba przełożenia akademickiej dyskusji na praktykę...

Tomasz Golinski
23-12-2008, 12:52
przepraszam, a czy z tego wątku nie wynika przypadkiem, że nie należy niedoświetlać scen ciemniejszych niż 18%, bo tracimy dane? taka próba przełożenia akademickiej dyskusji na praktykę...

Trochę tak, ale nie do końca. Ważna jest rozpiętość sceny. Grunt to nie prześwietlić świateł. Ale jeśli to nie grozi, to właśnie warto prześwietlać ciemne zdjęcia - jest to tak zwane ustawianie ekspozycji (lub histogramu ;) ) do prawej.

airhead
23-12-2008, 16:20
acha... czyli stara zasada, że czarne niedoświetlamy nie ma zastosowania na cyfrze? a te mdłe czernia trzeba potem malować na kompie?

Tomasz Golinski
23-12-2008, 19:56
I tak i nie. Korygować na kompie to trzeba każde zdjęcie, inaczej nie warto kupować lustrzanki. W takiej sytuacji poprawienie jasności całego zdjęcia jest naturalnym krokiem przy wywoływaniu rawa lub obróbce jpga.

Zasada o niedoświetlaniu często musi być jednak uwzględniana. Ponieważ mało które zdjęcie jest całe czarno-ciemne, to trzeba uważać na światła. Naświetlenie czerni jak szarości często wyjara światła.

airhead
24-12-2008, 02:00
I tak i nie. Korygować na kompie to trzeba każde zdjęcie, inaczej nie warto kupować lustrzanki. W takiej sytuacji poprawienie jasności całego zdjęcia jest naturalnym krokiem przy wywoływaniu rawa lub obróbce jpga.
To ustawiać aparat przed zrobieniem zdjęcia trzeba, bo inaczej to nie ma sensu kupować żadnego. A tak w ogóle najlepiej powiedz to reporterom ;]


Zasada o niedoświetlaniu często musi być jednak uwzględniana. Ponieważ mało które zdjęcie jest całe czarno-ciemne, to trzeba uważać na światła. Naświetlenie czerni jak szarości często wyjara światła.
Da też paskudną, burą czerń. Nie wiadomo nawet, które gorsze. Wynikają jakieś wnioski z tej technicznej dyskusji? Bo za zasadę prześwietlania czerni to dziękuję :P

czornyj
25-12-2008, 17:49
To ustawiać aparat przed zrobieniem zdjęcia trzeba, bo inaczej to nie ma sensu kupować żadnego. A tak w ogóle najlepiej powiedz to reporterom ;]


Da też paskudną, burą czerń. Nie wiadomo nawet, które gorsze. Wynikają jakieś wnioski z tej technicznej dyskusji? Bo za zasadę prześwietlania czerni to dziękuję :P

Jest rzeczą oczywistą, że ETTR jest techniką wymagającą późniejszej obróbki i optymalne rezultaty daje tylko w przypadku rejestracji zdjęć w RAW. Dla reportera, który rąbie w jpegu i nawet nie ogląda rezultatu przed wysłaniem do redakcji technika ta jest może bez znaczenia (choć graficy z przygotowalni otrzymujący potem ten materiał mogliby już mieć inne zdanie). Wysycenie czerni to kwestia przesunięcia jednego suwaczka w ACR czy innym konwerterze - trwa to 0,5 sekundy.

Wnioski z tej dyskusji są proste - wystarczy mieć elementarną wiedzę nt. fotografii i obróbki cyfrowej, uważnie wszystko przeczytać i sobie je wyciągnąć, ale podsumuję jeszcze raz:

- Matryca optymalnie rejestruje dane w zakresie świateł i półtonów. Jeśli rozpiętość tonalna sceny jest mniejsza niż rozpiętość tonalna matrycy, to należy dążyć do tego, by jak najwięcej danych zostało zarejestrowane w zakresie odpowiadającym światłom i półtonom. Metoda ta pozwala na forsowniejszą obróbkę zarejestrowanego materiału. W praktyce jej stosowanie sprowadza się do obserwacji histogramu zarejestrowanego zdjęcia i dążenia do tego, by wykres rozpoczynał się możliwie blisko prawej jego strony - stąd nazwa ETTR (Exposure To The Right - ekspozycja na prawą stronę (histogramu) ).

Oczywiście - nie dla każdego i nie zawsze jest sens ją stosować, ale np. HDR też nie (szczególnie w reportażu), a jakoś dlaczegoś HDR nikomu nie jest dziwny.

Janusz Body
02-03-2009, 13:36
... Wynikają jakieś wnioski z tej technicznej dyskusji? Bo za zasadę prześwietlania czerni to dziękuję :P


Wynikają. I nawet są opisane :)
http://www.canon-board.info/showthread.php?t=25632

spoon
16-03-2009, 14:40
zastanawia mnie czy w praktyce po naswietleniu histogramu do prawej - powiedzmy, ze cala scena miesci sie na zakresie i zostaje nawet miejsce, ok 1EV po prawej i lewej, a po naswietleniu na"do prawej" mamy okolo 1.75EV 'wolne' po lewej stronie - pozniej, przywywolaniu rawa powinienem skorygowac ekspozycje na ok. -1.75 czy raczej pociagnac to levelami (tudziez blacks'ami)?
rozumiem, ze po naswietleniu do prawej i pozniejszym obnizeniu ekspozycji w wywolywarce niejako "spycham" dane na strone cieni (lacznie z danymi o poltonach i swiatlach).

ja wiem,ze to pytanie jest na poziomie przedszkola foto, tym nie mniej jestem ciekaw jak to powinno wygladac, a chyba sam tego nie wydedukuje.
klade nacisk na 'powinno', bo po czesci zdaje sobie sprawe, ze "to zalezy".

jak wywolywac takiego 'naswietlonego do prawej' rawa?

Janusz Body
16-03-2009, 19:38
zastanawia mnie czy w praktyce po naswietleniu histogramu do prawej - powiedzmy, ze cala scena miesci sie na zakresie i zostaje nawet miejsce, ok 1EV po prawej i lewej, a po naswietleniu na"do prawej" mamy okolo 1.75EV 'wolne' po lewej stronie - pozniej, przywywolaniu rawa powinienem skorygowac ekspozycje na ok. -1.75 czy raczej pociagnac to levelami (tudziez blacks'ami)?........?

Wywoływać normalnie. :) Można "obciąć" od dołu na krzywych (jeszcze w ACR) co zwiększy wydatnie kontrast. Można pociągnąć w dół krzywą (też jeszcze w ACR) w jej "lewej" części czyli w cieniach. Ogólnie to tak jak piszesz... to zależy... ale też zasada ogólna przy obróbce (każdej) to jak najdłużej trzymać jak największą ilość danych.

Serdecznie polecam używanie Curvesów. O levelsach można zapomnieć - przydają się w mniej niż 1% okazji. Wszystko można zrobić krzywymi.

sirlukas
18-03-2009, 16:32
Ciekawy wywiad na DPreview (http://www.dpreview.com/news/0903/09031801apical.asp), myślę że w tym wątku powinien się znaleźć.

davnes
12-10-2011, 17:51
przeczytałem ten watek od początku do końca i mam pytanie.
Mozę ktoś na prostych rzeczywistych przykładach zdjęciowych pokazać i opisać jak dokładnie się wykonuje ten pomiar .