Pokaż wyniki od 1 do 10 z 72

Wątek: #22 Liniowość matrycy i co z tego wynika

Mieszany widok

  1. #1
    Pełne uzależnienie
    Dołączył
    Jul 2004
    Miasto
    Staszów
    Wiek
    52
    Posty
    1 709

    Domyślnie

    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.

  2. #2
    Pełne uzależnienie Awatar minek
    Dołączył
    Jan 2005
    Miasto
    Łódź
    Wiek
    47
    Posty
    1 386

    Domyślnie

    Cytat Zamieszczone przez Tomasz Urbanowicz Zobacz posta
    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)
    Kod:
    /* 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.

    Cytat Zamieszczone przez Tomasz Urbanowicz Zobacz posta
    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!

  3. #3
    Pełne uzależnienie Awatar Tomasz Golinski
    Dołączył
    Jul 2004
    Miasto
    Białystok
    Wiek
    46
    Posty
    8 623

    Domyślnie

    Cytat Zamieszczone przez minek Zobacz posta
    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ą,
    30D | 85/1.8 | 135/2 | 70-200/4 | T17-50/2.8 | 100-300/4.5-5.6 | 50/1.4 | 650 | 430EX | Sherpa 600r
    Zdjęcia - Iran, folk, jazz, wątek galeriowy


    FoFot.pl
    Canon IRC

Uprawnienia umieszczania postów

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •