#22 Liniowość matrycy i co z tego wynika

Zwiń
X
 
  • Czas
  • Pokaż
Wyczyść wszystko
new posts
  • michalab
    Pełne uzależnienie
    • 2006
    • 1580

    #31
    Zamieszczone przez Tomasz Urbanowicz
    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?
    Zapraszam

    Komentarz

    • Tomasz Urbanowicz
      Pełne uzależnienie
      • 2004
      • 1709

      #32
      Zamieszczone przez ewg
      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).

      Zamieszczone przez ewg
      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.


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


      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)


      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?
      Ostatnio edytowany przez Tomasz Urbanowicz; 458.

      [email protected]

      Komentarz

      • ewg
        Pełne uzależnienie
        • 2006
        • 1079

        #33
        Zamieszczone przez ewg
        Przetwornik cyfrowo analogowy z matrycy daje większą gęstość danych dla świateł [...]
        Zamieszczone przez Tomasz Urbanowicz
        Daje tyle samo w światłach co cieniach - jest liniowy (tak z grubsza).
        Zamieszczone przez ewg
        (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?

        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.

        Komentarz

        • Tomasz Urbanowicz
          Pełne uzależnienie
          • 2004
          • 1709

          #34
          Zamieszczone przez ewg
          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ą.

          Zamieszczone przez ewg
          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ę? ;-)

          [email protected]

          Komentarz

          • Adaminio

            #35
            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?

            Komentarz

            • Tomasz Urbanowicz
              Pełne uzależnienie
              • 2004
              • 1709

              #36
              Zamieszczone przez Adaminio
              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.

              Zamieszczone przez Adaminio
              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.

              [email protected]

              Komentarz

              • Pirx
                Początki nałogu
                • 2006
                • 485

                #37
                Zamieszczone przez Tomasz Urbanowicz
                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.
                Pozdrawiam,
                Pirx

                Komentarz

                • Tomasz Urbanowicz
                  Pełne uzależnienie
                  • 2004
                  • 1709

                  #38
                  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...

                  [email protected]

                  Komentarz

                  • piotrgr
                    Bywalec
                    • 2005
                    • 164

                    #39
                    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.
                    __________________
                    30D 8) + KIT, EF 28/2.8, EF 50/1.8, S APO SMII 70-300/4-5.6, 420 EX, Sherpa 250R i RUP-43

                    Komentarz

                    • HuleLam
                      Pełne uzależnienie
                      • 2006
                      • 1641

                      #40
                      Zamieszczone przez piotrgr
                      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...
                      Fotograf platoniczny

                      Komentarz

                      • piotrgr
                        Bywalec
                        • 2005
                        • 164

                        #41
                        Zamieszczone przez HuleLam
                        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.
                        __________________
                        30D 8) + KIT, EF 28/2.8, EF 50/1.8, S APO SMII 70-300/4-5.6, 420 EX, Sherpa 250R i RUP-43

                        Komentarz

                        • minek
                          Pełne uzależnienie
                          • 2005
                          • 1386

                          #42
                          Zamieszczone przez Tomasz Urbanowicz
                          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ść.

                          Komentarz

                          • Tomasz Urbanowicz
                            Pełne uzależnienie
                            • 2004
                            • 1709

                            #43
                            @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.

                            [email protected]

                            Komentarz

                            • minek
                              Pełne uzależnienie
                              • 2005
                              • 1386

                              #44
                              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?

                              Komentarz

                              • HuleLam
                                Pełne uzależnienie
                                • 2006
                                • 1641

                                #45
                                Zamieszczone przez piotrgr
                                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.
                                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ć ?
                                Fotograf platoniczny

                                Komentarz

                                Pracuję...