Jak wygląda nieprzetworzony plik RAW?

84

Wiem, że ludzie używają fantazyjnego oprogramowania, takiego jak Lightroom lub Darktable, do późniejszego przetwarzania swoich plików RAW. Ale co jeśli nie? Jak wygląda plik, wiesz, RAW ?

mattdm
źródło
21
Macierz. Wygląda jak matryca.
Hueco
2
Związane z; Pliki RAW przechowują 3 kolory na piksel, czy tylko jeden? i dlaczego czerwony, zielony i niebieski to podstawowe kolory światła? co wyjaśnia, w jaki sposób czujniki aparatu cyfrowego zmieniają sposób, w jaki oczy lub mózgi postrzegają kolor, który w pewnym sensie nie istnieje w sposób, w jaki często go zakładamy.
Michael C
3
@ Hueco, być może macierz Bayera.
Mark
Przeniosłem dyskusję na temat tego, jak najlepiej sobie z tym poradzić jako kanoniczne pytanie do rozmowy . Kontynuujmy to tutaj, abyśmy nie mieli hałasu w komentarzach, niezależnie od tego, jaka będzie decyzja.
AJ Henderson
1
To, co nie wygląda, to „prosty obraz z aparatu”, który wielu ludzi wydaje się, że ma, kiedy otwierają plik obrazu surowego w aplikacji do przetwarzania surowego. To jest podstawa tego pytania.
Michael C

Odpowiedzi:

183

Istnieje narzędzie o nazwie dcraw, które odczytuje różne typy plików RAW i wyodrębnia z nich dane pikseli - w rzeczywistości jest to oryginalny kod na samym dole wielu otwartych źródeł, a nawet komercyjnego oprogramowania do konwersji RAW.

Mam plik RAW z mojego aparatu i użyłem dcraw w trybie, który każe mu utworzyć obraz przy użyciu dosłownych, nieskalowanych 16-bitowych wartości z pliku. Przekształciłem to w 8-bitowy plik JPEG do udostępniania, używając percepcyjnej gamma (i skalowałem w dół do przesyłania). To wygląda tak:

dcraw -E -4

Oczywiście wynik jest bardzo ciemne, choć jeśli kliknij, aby rozwinąć, a jeśli monitor jest przyzwoity, widać pewną podpowiedź coś .

Oto kolorowy JPEG poza aparatem renderowany z tego samego pliku RAW:

JPEG poza aparatem

(Nawiasem mówiąc: moja córka, nawiasem mówiąc, używa mojego aparatu).

W końcu nie całkiem ciemno. Szczegółowe informacje na temat tego, gdzie dokładnie kryją się wszystkie dane, najlepiej można znaleźć w szczegółowym pytaniu , ale w skrócie potrzebujemy krzywej, która rozszerza dane w zakresie ciemności i światła dostępnych w 8-bitowym pliku JPEG na typowym ekranie .

Na szczęście program dcraw ma inny tryb, który konwertuje na bardziej „użyteczny”, ale wciąż słabo przetworzony obraz. To dostosowuje poziom najciemniejszej czerni i najjaśniejszej bieli oraz odpowiednio skaluje dane. Może również ustawić balans bieli automatycznie lub z ustawień aparatu zapisanych w pliku RAW, ale w tym przypadku powiedziałem, aby tego nie robić, ponieważ chcemy zbadać możliwie najmniejsze przetwarzanie.

Nadal istnieje korespondencja jeden-do-jednego między zdjęciami na czujniku a pikselami na wyjściu (chociaż ponownie przeskalowałem to do przesłania). To wygląda tak:

dcraw -d -r 1 1 1 1

Teraz jest to oczywiście bardziej rozpoznawalne jako obraz - ale jeśli powiększymy to (tutaj, więc każdy piksel jest powiększony 10 ×), zobaczymy, że to wszystko ... dotty:

10-krotny zoom i kadrowanie

Dzieje się tak, ponieważ matryca jest zakryta przez szereg filtrów kolorów - małe kolorowe filtry wielkości każdego zdjęcia. Ponieważ mój aparat jest aparatem Fujifilm, wykorzystuje on wzór, który Fujifilm nazywa „X-Trans”, który wygląda następująco:

10 × xtrans

Jest kilka szczegółów na temat konkretnego wzoru, które są dość interesujące, ale ogólnie nie jest to zbyt ważne. Większość aparatów obecnie używa czegoś zwanego wzorem Bayera (który powtarza się co 2 × 2 zamiast 6 × 6). Oba wzory mają więcej witryn z zielonym filtrem niż czerwone lub niebieskie. Ludzkie oko jest bardziej wrażliwe na światło w tym zakresie, dlatego użycie większej liczby pikseli pozwala uzyskać więcej szczegółów przy mniejszym hałasie.

W powyższym przykładzie środkowa sekcja jest plamą nieba, która jest odcieniem cyjanu - w RGB jest dużo niebieskiego i zielonego bez dużej ilości czerwieni. Tak więc ciemne kropki to strony z czerwonym filtrem - są ciemne, ponieważ obszar ten nie ma tyle światła na długości fali, która przechodzi przez ten filtr. Ukośny pasek w prawym górnym rogu jest ciemnozielonym liściem, więc chociaż wszystko jest trochę ciemne, możesz zobaczyć zieleń - większe bloki 2 × 2 z tym wzorem czujnika - są stosunkowo najjaśniejsze w tym obszarze.

Tak czy inaczej, oto sekcja 1: 1 (po kliknięciu, aby uzyskać pełną wersję, jeden piksel na obrazie będzie jednym pikselem na ekranie) w JPEG poza aparatem:

Widok 1: 1 przycięcia obrazu spoza aparatu

... a oto ten sam obszar z powyższej konwersji szybkiej skali szarości. Możesz zobaczyć stippling ze wzoru X-Trans:

1: 1 kadr wersji dcraw -d -r 1 1 1 1

Możemy to zrobić i pokolorować piksele, aby te odpowiadające zieleni w tablicy były mapowane na poziomy zieleni zamiast szarości, czerwieni na czerwono i niebieskiego na niebieski. To daje nam:

1: 1 z koloryzacją xtrans

... lub dla pełnego obrazu:

pełny obraz z dcraw -d -r 1 1 1 1 z kolorowaniem xtrans

Zielona obsada jest bardzo widoczna, co nie jest zaskoczeniem, ponieważ jest o 2 × × więcej zielonych pikseli niż czerwony lub niebieski. Każdy blok 3 × 3 ma dwa czerwone piksele, dwa niebieskie piksele i pięć zielonych pikseli. Aby temu przeciwdziałać, stworzyłem bardzo prosty program skalujący, który zamienia każdy z tych bloków 3 × 3 w pojedynczy piksel. W tym pikselu zielony kanał to średnia z pięciu zielonych pikseli, a czerwony i niebieski to średnia odpowiadających dwóch czerwonych i niebieskich pikseli. To daje nam:

xtrans pokolorowane, naiwny blokowy demaskowanie

... co nie jest wcale takie złe. Balans bieli jest wyłączony, ale ponieważ celowo postanowiłem nie dostosowywać się do tego, nie jest to zaskoczeniem. Wciśnięcie „automatycznego balansu bieli” w programie do obrazowania kompensuje to (tak jak pozwoliłoby to programowi dcraw ustawić to w pierwszej kolejności):

xtrans pokolorowane, naiwne blokowanie usuwania błędów + automatyczne poziomy

Szczegóły nie są świetne w porównaniu z bardziej wyrafinowanymi algorytmami stosowanymi w aparatach i programach przetwarzających RAW, ale wyraźnie są podstawy. Lepsze podejścia umożliwiają tworzenie pełnokolorowych obrazów poprzez ważenie różnych wartości wokół każdego piksela zamiast przechodzenia przez duże bloki. Ponieważ kolor zwykle zmienia się stopniowo na fotografiach, działa to całkiem dobrze i powoduje, że obraz jest pełny, bez zmniejszania wymiarów pikseli. Istnieją również sprytne sztuczki, aby zmniejszyć artefakty krawędziowe, hałas i inne problemy. Ten proces nazywa się „odkażaniem”, ponieważ wzór kolorowych filtrów wygląda jak mozaika kafelkowa.

Podejrzewam, że ten widok (w którym tak naprawdę nie podejmowałem żadnych decyzji, a program nie zrobił nic inteligentnego automatycznie) mógł zostać zdefiniowany jako „standardowy domyślny wygląd” pliku RAW, kończąc w ten sposób wiele internetowych argumentów. Ale nie ma takiego standardu - nie ma takiej zasady, że ta szczególna „naiwna” interpretacja jest wyjątkowa.

I nie jest to jedyny możliwy punkt wyjścia. Wszystkie rzeczywiste programy przetwarzające RAW mają własne pomysły na podstawowy stan domyślny, który można zastosować do świeżego pliku RAW podczas ładowania. Muszą coś zrobić (inaczej mielibyśmy tę mroczną, bezużyteczną rzecz na początku tego postu) i zwykle robią coś mądrzejszego niż moja prosta ręczna konwersja, co ma sens, ponieważ to i tak daje lepsze wyniki.

mattdm
źródło
4
Piękne zdjęcie. I świetna odpowiedź.
Marc.2377
10

To naprawdę bardzo duża siatka liczb. Wszystko inne jest przetwarzane.

WolfgangGroiss
źródło
Komentarze nie są przeznaczone do rozszerzonej dyskusji; ta rozmowa została przeniesiona do czatu .
AJ Henderson
7

Wiem, że mattdm już na nie odpowiedział, ale pomyślałem, że ten artykuł może Cię zainteresować:

Genetyka danych: jak działają aparaty cyfrowe

W przypadku, gdy link przestanie działać, oto podsumowanie:

Oko ludzkie jest najbardziej wrażliwe na kolory w obszarze zielonej długości fali (zbieg okoliczności z tym, że nasze słońce emituje najintensywniej w zielonym obszarze).

Oko aparatu (CCD) lub półprzewodnik z tlenkiem metalu (CMOS) jest wrażliwy tylko na natężenie światła, a nie na kolor.

Filtry optyczne służą do odfiltrowywania różnych długości fal światła. Na przykład zielony filtr przepustowy przepuszcza tylko zielone światło.

Filtry optyczne stosowane w aparatach cyfrowych mają wielkość poszczególnych czujników pikseli i są ułożone w siatkę pasującą do matrycy czujników. Stosowane są filtry czerwony, zielony i niebieski (podobnie jak nasze komórki stożkowe). Ponieważ jednak nasze oczy są bardziej wrażliwe na kolor zielony, filtr macierzowy Bayera ma 2 filtry zielonych pikseli na każdy czerwony i niebieski piksel. Tablica Bayera ma zielone filtry tworzące wzór szachownicy, podczas gdy filtry czerwony i niebieski zajmują naprzemienne rzędy.

Wracając do pierwotnego pytania: jak wygląda nieprzetworzony plik RAW?

Wygląda jak czarno-biała kratka oryginalnego obrazu.

Fantazyjne oprogramowanie do przetwarzania końcowego plików RAW najpierw stosuje filtr Bayera. Po tym wygląda bardziej na rzeczywisty obraz, z kolorem we właściwej intensywności i lokalizacjach. Jednak nadal istnieją artefakty siatki RGB z filtra Bayera, ponieważ każdy piksel ma tylko jeden kolor.

Istnieje wiele metod wygładzania pliku RAW oznaczonego kolorem. Wygładzanie pikseli jest jednak podobne do rozmycia, więc zbyt duże wygładzanie może być złą rzeczą.

Niektóre metody demozaikacji są krótko opisane tutaj:

Najbliższy sąsiad: Wartość piksela (jednego koloru) jest stosowana do innych kolorowych sąsiadów i kolory są łączone. W tym procesie nie są tworzone „nowe” kolory, tylko kolory, które były początkowo postrzegane przez czujnik aparatu.

Interpolacja liniowa: na przykład uśrednia dwie sąsiednie wartości niebieskie i stosuje średnią wartość niebieskiego do zielonego piksela pomiędzy sąsiednimi niebieskimi pikselami. Może to zacierać ostre krawędzie.

Interpolacja kwadratowa i sześcienna: podobna do interpolacji liniowej, przybliżenia wyższego rzędu dla koloru pośredniego. Wykorzystują więcej punktów danych, aby uzyskać lepsze dopasowanie. liniowy patrzy tylko na dwa, kwadratowy na trzy, a sześcienny na cztery, aby wygenerować kolor pośredni.

Splajn Catmull-Rom: podobny do sześciennego, ale uwzględnia gradient każdego punktu w celu wygenerowania koloru pośredniego.

Pół cosinus: stosowany jako przykład metody interpolacji, tworzy pół cosinusa między każdą parą podobnych kolorów i ma gładką krzywą fleksyjną między nimi. Jednak, jak zauważono w artykule, nie oferuje żadnych korzyści dla matryc Bayera ze względu na rozmieszczenie kolorów. Jest to równoważne z interpolacją liniową, ale przy wyższych kosztach obliczeniowych.

Oprogramowanie do obróbki końcowej wyższej klasy ma lepsze metody demaskowania i sprytne algorytmy. Na przykład mogą rozpoznać ostre krawędzie lub zmiany o wysokim kontraście i zachować swoją ostrość podczas łączenia kanałów kolorów.

Jreese
źródło
-6

Myślę, że wiele osób wyobraża sobie, że nieprzetworzone pliki to po prostu tablica wartości pikseli prosto z matrycy aparatu. Są przypadki, w których tak naprawdę jest, i musisz podać informacje o czujniku, aby oprogramowanie mogło zinterpretować obraz. Ale wiele kamer konsumenckich zwykle podaje „surowe pliki”, które w rzeczywistości są mniej więcej zgodne ze specyfikacją pliku TIFF (w niektórych przypadkach kolory mogą być wyłączone). Można spróbować po prostu zmienić rozszerzenie pliku na „.tif” i zobaczyć, co się stanie podczas otwierania pliku. Myślę, że niektórzy z was zobaczą dobry obraz, ale nie wszyscy, ponieważ istnieją różnice między tym, jak różne kamery rozwiązują to.

Plik TIFF zamiast „prawdziwego pliku raw” jest dobrym rozwiązaniem. Plik TIFF może mieć 16 bitów na kolor. To wystarczy dla wszystkich aparatów, które znam.

Ed: Zastanawiam się, dlaczego ta odpowiedź została odrzucona. Odpowiedź jest zasadniczo poprawna (z zastrzeżeniem, że producenci aparatów nie muszą używać struktur TIFF, ale wielu z nich tak robi).

Jeśli chodzi o część dotyczącą matrycy pikseli prosto z czujnika, nie jest śmieszne oczekiwać czegoś takiego. Ponieważ tak działa wiele czujników poza rynkiem kamer konsumenckich. W takich przypadkach musisz dostarczyć osobny plik opisujący czujnik.

Nawiasem mówiąc, używa się słowa „RAW”, ponieważ powinno to oznaczać, że otrzymujemy nieprzetworzone dane z czujnika. Ale rozsądne jest, że producenci kamer używają w rzeczywistości formatu strukturalnego zamiast nieprzetworzonych plików. W ten sposób fotograf nie musi znać dokładnych danych czujnika.

Ulf Tennfors
źródło
2
I nie miał zastosowania do odzyskiwania plików, które „odzyskane” pliki .CR2 jako TIFF. Pliki te nie otworzyłyby się przy użyciu aplikacji, która może współpracować z TIFF. Zmiana rozszerzeń plików z powrotem na .cr2 sprawiła, że ​​doskonale nadają się one do użytku.
Michael C
5
Nie oznacza to, że pliki RAW często nie używają kontenerów w formacie TIFF - to absolutnie poprawne. Tyle, że to, co prawdopodobnie widzisz, nie jest danymi „RAW” w takim sensie, jakiego szukam.
mattdm
2
Ok, aby wyjaśnić, plik używa struktur z formatu pliku TIFF. Ponieważ jednak nie działa dokładnie tak, jak mówi specyfikacja TIFF, nie jest to ścisły plik TIFF. Ale chodzi o to, że do odczytu pliku można użyć biblioteki TIFF. Nie trzeba robić wszystkiego od zera, aby odczytać ten plik.
Ulf Tennfors
5
Nikt w żadnym sensie nie spodziewałby się, że plik RAW będzie danymi bezpośrednio z czujnika bez jakichkolwiek metadanych, takich jak czas, informacje z aparatu itp. Fakt, że formaty podobne do TIFF są przydatne do strukturyzacji danych, nie jest tak naprawdę ważne, nie zmniejsza też konceptualnej zasady, że dane te są „prosto” z czujnika bez przetwarzania końcowego.
whatsisname
3
TIFF to kontener, a nie format obrazu. możesz przechowywać dane w TIFF i nadal mieć nieprzetworzone dane z czujnika zamiast obrazu, którego mógłby użyć każdy bez wiedzy kamery.
ths