Skocz do zawartości

Sygnał, szum, kalibracja - teoria kontra praktyka


Rekomendowane odpowiedzi

Cześć,

 

Mam dziś do podzielenia się bardzo fajne wyniki samodzielnie napisanego programu do obróbki zdjęć.

(Na razie tylko RAW z Canona i potrafi stackować i odejmować biasy :D)

 

Zrobiłem taki eksperyment: ustawiłem aparat na statywie, nocą, i pocykałem kilka fotek podwórka.

Oto różnica, jaką robi czas naświetlania:

wynik_fragment_podpis.png.1da3fb1380bc3f9adc1b657b6360ea2f.png

Proszę zwrócić uwagę na prawie jednakowy poziom luminancji (wyciągnięte suwakami) jednocześnie na czytelność napisów i ogólnie klarowność obrazu.

 

 

Dodatkowo, garść wykresów ilustrująca wpływ odejmowania biasów na parametry zdjęcia.

Liczyłem statystyki przed odjęciem biasa, po odjęciu biasa i dla małego fragmentu o jednolitej barwie:

 

wynik_wykresy.png.72a4d3a74b3860945e55de6754bcc64a.png

 

Wnioski nasuwają się same:

- Odjęcie biasa samo w sobie nie zmienia odchylenia standardowego, tylko przesuwa średnią

- Odjęcie biasa "naprawia" wykres SNR, który jest przekłamany, gdy do sygnału dodawany jest wysoki poziom biasa

- przy jednolicie oświetlonych fragmentach - wydaje się - SNR podkręcić się już w pewnym momencie nie da przez "dodawanie" fotonów.

 

Mam nadzieję, że pomoże to wątpiącym lub nakłoni do jakiejś ciekawej dyskusji :)

Pozdrawiam

 

  • Lubię 6
Odnośnik do komentarza
Udostępnij na innych stronach

Cześć, garść pytań na początek. 

 

Jak okreslasz/wyliczasz ilość szumu? 

Dlaczego SNR bez biasa ma odwrotną charakterystykę? 

Ile klatek zestackowales do master_bias? 

Debayeryzujesz przed czy po stackowaniu? Napisałeś sam debayera? 

Czy ja dobrze rozumiem, ze masz 2000 ADU samego biasu, a tylko 1000 ADU sygnału przy 8s?

Edytowane przez Sebo_b
Odnośnik do komentarza
Udostępnij na innych stronach

1 godzinę temu, Sebo_b napisał:

Cześć, garść pytań na początek. 

 

Jak okreslasz/wyliczasz ilość szumu? 

Dlaczego SNR bez biasa ma odwrotną charakterystykę? 

Ile klatek zestackowales do master_bias? 

Debayeryzujesz przed czy po stackowaniu? Napisałeś sam debayera? 

Czy ja dobrze rozumiem, ze masz 2000 ADU samego biasu, a tylko 1000 ADU sygnału przy 8s?

1. Szum obliczam jako odchylenie standardowe z wartości pikseli.

2. SNR to średnia/odchylenie. Wykresy tłumaczą to zachowanie: bez biasa "sygnał" nie zaczyna się w zerze, a powinien

3. Master bias to jeden bias, zrobię potem ze stackowaniem, ale jeszcze nie miałem czasu. Na pewno będzie coś ciekawego ;)

4. Debayer z cv2 jakiś. Nie jestem zadowolony, nie robi się też żaden balans bieli z Rawa, ale to nie ma wpływu na SNR.

 

5. Też jestem zaskoczony. Średni poziom biasa na ISO 100 w moim canonie 700d to ok. 2000ADU z 16384 dostępnych ...

No, ale to jest wartość średnia, a zdjęcie jest zasadniczo ciemne: krakowskie podwórko nocą:)  Lampy są oczywiście prześwietlone, ale tego nie widać na wykresie, bo to tylko kilka punktów na zdjęciu. Zdjęcia całego wolałem nie publikować, bo RODO ;)

 

PS

Furgonetka na zdjęciu nie jest moja 

Edytowane przez Behlur_Olderys
Odnośnik do komentarza
Udostępnij na innych stronach

8 hours ago, Behlur_Olderys said:

1. Szum obliczam jako odchylenie standardowe z wartości pikseli.

2. SNR to średnia/odchylenie. Wykresy tłumaczą to zachowanie: bez biasa "sygnał" nie zaczyna się w zerze, a powinien

Masz na to jakieś "papiery", bo nie widziałem nigdzie takiej metody...

 

1. Intuicja podpowiada mi, że odchylenie pokaże zróżnicowanie obrazu a nie szum. Szczególnie, że każda jaśniejsza ciężarówka będzie miała większe wartości kwadratów, niż szum.

2. Średnia / odchylenie to po prostu odwrotność współczynnika zmienności - znowu, pokazuje (tym razem względnie) jak zróżnicowany jest sygnał=obraz.

 

8 hours ago, Behlur_Olderys said:

3. Master bias to jeden bias, zrobię potem ze stackowaniem, ale jeszcze nie miałem czasu. Na pewno będzie coś ciekawego ;)

Każde z opracowań jakie czytałem mówi o co najmniej kilkudziesięciu klatkach - inaczej będzie więcej innego szumu niż biasu. Wg. opisu superbiasu z Pixinsight trzeba by zebrać ponad 200 klatek, żeby efekt superbiasu uzyskać z czystego stackowania. Więc jedna klatka nic nie mówi...

 

8 hours ago, Behlur_Olderys said:

5. Też jestem zaskoczony. Średni poziom biasa na ISO 100 w moim canonie 700d to ok. 2000ADU z 16384 dostępnych ...

Sprawdź czy dobrze to liczysz... powinno być szaro. EDIT: No i oznacza to, że masz rozpiętość (pomijając szum) 11 bitów a nie 16 - brzmi niewiarygodnie.

 

Edytowane przez Sebo_b
Odnośnik do komentarza
Udostępnij na innych stronach

2 godziny temu, Sebo_b napisał:

Sprawdź czy dobrze to liczysz... powinno być szaro. No i oznacza to, że masz rozpiętość (pomijając szum) 11 bitów a nie 16 - brzmi niewiarygodnie.

Po pierwsze, nie 16, a 14 bit to max. Po drugie, po odjeciu 2000 ADU zostaje nam 13,8 a nie 11 bitów :)

Niemniej te 2k to faktycznie wysoka wartość. 

 

Zgadzam się natomiast, że pomiar odchylenia nie ma sensu na zmiennym tle. Trzeba by powtórzyć bez biasa dla fragmentu. 

Edytowane przez MateuszW
  • Lubię 1
Odnośnik do komentarza
Udostępnij na innych stronach

20 minutes ago, MateuszW said:

Po pierwsze, nie 16, a 14 bit to max. Po drugie, po odjeciu 2000 ADU zostaje nam 13,8 a nie 11 bitów :)

Niemniej te 2k to faktycznie wysoka wartość. 

Tak masz rację, pospieszylem sie z tymi 16 bitami, jest 14. Ponieważ to jest "floor" a nie szum, też nie ma sensu odejmować bitów tylko wartosci, zostanie wiec dokładnie 13.8 stopów. 

 

Przy jednolitym tle odchylenie będzie dobrą miarą, ale ja rozumiem, że tutaj jest liczone z całego zdjecia. 

Odnośnik do komentarza
Udostępnij na innych stronach

Godzinę temu, Sebo_b napisał:

Przy jednolitym tle odchylenie będzie dobrą miarą, ale ja rozumiem, że tutaj jest liczone z całego zdjecia. 

Muszę się nie zgodzić, choć to nie do końca intuicyjne ;)

 

Wyobraź sobie, że całe zdjęcie jest robione tym samym obiektywem, tym samym aparatem tylko umieszczonym np. 100km dalej. Wtedy to cała scena mieści się na jednym, jednolicie oświetlonym (z pozoru) pikselu. Także moim zdaniem nie ma tu wielkiego błędu. Ale to taka ciekawostka. Trzeci z przedstawionych wykresów pokazuje statystykę fragmentu zdjęcia ukazującego ścianę. Może w weekend uzupelnię dane ;)

 

1 godzinę temu, MateuszW napisał:

Odchylenie to miara szumi, ale tylko jak weźmiemy je z jednolitego fragmentu. 

Jednolitość to tylko kwestia skali, tak jak mówiłem powyżej ;)

 

Jeśli  cały Jowisz zmieści się na jednym pikselu, to jest to jednolity fragment ;)

 

4 godziny temu, Sebo_b napisał:

Każde z opracowań jakie czytałem mówi o co najmniej kilkudziesięciu klatkach - inaczej będzie więcej innego szumu niż biasu

Właśnie to mam zamiar wkrótce sprawdzić. Kiedy grzebie się w surowych danych te wszystkie opracowania trzeba odłożyć trochę na bok i stawiać eksperyment jako źródło nadrzędne ;)

 

Przede wszystkim zaś ja używam biasa żeby wyeliminować offset. To widać na wykresach. Z tego co pamiętam moje biasy mają swoje odchylenie standardowe na poziomie kilku ADU.

 

4 godziny temu, Sebo_b napisał:

Sprawdź czy dobrze to liczysz... powinno być szaro. 

Zdjęcia - fragmenty z ciężarówką - są po odjęciu biasa. To nie zmienia faktu, że prawdopodobnie wywoływanie RAW-a ręcznie (jak ja) to trochę co innego, niż jak robić to profesjonalnym programem...

 

Jeszcze pamiętaj: zdjęcie jest ogólnie ciemne, ciężarówka i latarnie to jedyne jasne punkty. *Średnio* jest ciemno ;) ale na 8s zdjęciu latarnie są prześwietlone.

 

 

Tak czy inaczej, wykresy średniej i odchylenia zachowują się tak, jak można przewidywać, więc zakładam że nie popełniłem jakichś rażących błędów.

 

 

PS jak chcecie to mam kod, mogę przesłać tylko muszę zastanowić się nad licencją ;) Same pomiary może powtórzyć każdy...

Edytowane przez Behlur_Olderys
Odnośnik do komentarza
Udostępnij na innych stronach

5 hours ago, Behlur_Olderys said:

Muszę się nie zgodzić, choć to nie do końca intuicyjne ;)

Przepraszam ale w ogóle nie rozumiem Twojego rozważania o oddalaniu i skali Jowisza na jednym pikselu. Moim zdaniem jakoś pokrętnie to argumentujesz - i uważam, że błędnie.

 

Odchylenie standardowe na niejednolitym tle pokaże jak niejednolite jest to tło - szum będzie tylko drobnym ułamkiem tego odchylenia. Żeby to bardziej obrazowo pokazać, wyobraź sobie, że masz kamerę bezszumową i robisz zdjęcie szachownicy. Połowa pikseli będzie miała wartość 0, druga połowa 16384. Średnia i odchylenie wyniosą 8192, a współczynnik zmienności 100% - a przypominam, że masz kamerę bezszumową. Jeśli tą samą kamerą zrobisz zdjęcie jednolitego tła, to odchylenie wyniesie 0 a wsp. zmienności 0%.

 

5 hours ago, Behlur_Olderys said:

Właśnie to mam zamiar wkrótce sprawdzić. Kiedy grzebie się w surowych danych te wszystkie opracowania trzeba odłożyć trochę na bok i stawiać eksperyment jako źródło nadrzędne ;)

 

Przede wszystkim zaś ja używam biasa żeby wyeliminować offset. To widać na wykresach. Z tego co pamiętam moje biasy mają swoje odchylenie standardowe na poziomie kilku ADU.

Nie obraź się (włączam tryb żartu) - ale tak mi się przypomniała jedna osoba na forum (już zbanowana), która uważała że wiedza na bok i to co pokazują oczy jest prawdą - no i krzywizny te oczy nie widziały :D

 

Załącz proszę swojego biasa to zobaczymy czy z biasem ma on coś wspólnego. Moim zdaniem bias nie powinien wprowadzać jakiegoś znaczącego offsetu - bias jest chyba najsłabszym z szumów, jeśli masz w nim taki offset to bym podejrzewał np. nagrzaną matrycę. U mnie średnia na master-biasie wynosi 0.002 (w skali 0-1).

 

5 hours ago, Behlur_Olderys said:

prawdopodobnie wywoływanie RAW-a ręcznie (jak ja) to trochę co innego, niż jak robić to profesjonalnym programem

Główny problem jest z porządną debayeryzacją - dlatego o to pytałem.

 

5 hours ago, Behlur_Olderys said:

*Średnio* jest ciemno

Nie wiem ile ta ciężarówka zajmuje powierzchni...

 

5 hours ago, Behlur_Olderys said:

Tak czy inaczej, wykresy średniej i odchylenia zachowują się tak, jak można przewidywać, więc zakładam że nie popełniłem jakichś rażących błędów.

Correlation is not causation :D

 

5 hours ago, Behlur_Olderys said:

PS jak chcecie to mam kod, mogę przesłać tylko muszę zastanowić się nad licencją ;) Same pomiary może powtórzyć każdy...

Powszechnie wiadomo, że czytanie kodu jest trudniejsze niż jego pisanie ;)

Odnośnik do komentarza
Udostępnij na innych stronach

30 minut temu, Sebo_b napisał:

Przepraszam ale w ogóle nie rozumiem Twojego rozważania o oddalaniu i skali Jowisza na jednym pikselu. Moim zdaniem jakoś pokrętnie to argumentujesz - i uważam, że błędnie.

 

Odchylenie standardowe na niejednolitym tle pokaże jak niejednolite jest to tło - szum będzie tylko drobnym ułamkiem tego odchylenia. Żeby to bardziej obrazowo pokazać, wyobraź sobie, że masz kamerę bezszumową i robisz zdjęcie szachownicy. Połowa pikseli będzie miała wartość 0, druga połowa 16384. Średnia i odchylenie wyniosą 8192, a współczynnik zmienności 100% - a przypominam, że masz kamerę bezszumową. Jeśli tą samą kamerą zrobisz zdjęcie jednolitego tła, to odchylenie wyniesie 0 a wsp. zmienności 0%.

 

 

Szum fotonowy to nie kwestia kamery (bezszumowej) ale fotonów, samej ich egzystencji. Tego, że nie wpadają równym rządkiem na sensor, tylko dosyć chaotycznie (rozkład Poissona o ile się nie mylę).

Jeśli nawet idealną, bezszumową kamerą zrobię zdjęcie - na unity gain dla uproszczenia - jednolitego tła o średniej ADU = 10000 to szum fotonowy *będzie* równy 100. 

Odchylenie będzie równe 100, a SNR = 100. Ale nie nieskończoność. Podkreślam - kamera nie ma znaczenia. Zgadzamy się? :)

 

Teraz wróćmy do szachownicy:

Powiedzmy, że mamy szachownicę o kratkach tak małych, że jedna kratka mieści się na jednym pikselu.

połowa pikseli będzie miała sygnał 0 i szum 0: idealna czerń, żadnych fotonów.

druga połowa pikseli będą miała sygnał S=10000 i szum N=100. SNR=S/N = 100

Zdjęcie całej szachownicy (M pikseli) będzie miało *całkowity* sygnał (M/2)*S i *całkowity* szum = sqrt(M/2)*N

SNR = sqrt(M/2)*S/N 

 

Teraz wyobraź sobie, że skalę zmieniasz na 2x mniejszą (zmniejszasz ogniskową x2 przy tej samej aperturze)

Zatem na matrycę wpadają *dokładnie* te same fotony, tylko gęściej.

Na jeden piksel teraz wpadają 4 pola szachownicy: dwa czarne i dwa białe, ale obrazowane są jako jeden.

Sygnał per piksel wynosi teraz 2*S, szum per pixel sqrt(2)*N

Pikseli całej szachownicy jest teraz 4x mniej (M/4),  a cała szachownica jest teraz "jednolitym tłem".

całkowity sygnał to (M/4) * (2*S) = (M/2)*S

całkowity szum to sqrt(M/4)*sqrt(2)*N = sqrt(M/2)*N

Jak widać, SNR to dalej sqrt(M/2)*S/N

 

Czy czujesz się przekonany? Mówiłem, że to kontr-intuicyjne. Jestem dobry w takich rozkminach, uwierz mi :)

 

 

 

 

 

 

Edytowane przez Behlur_Olderys
Odnośnik do komentarza
Udostępnij na innych stronach

6 minut temu, Behlur_Olderys napisał:

Czy czujesz się przekonany?

Dobrze, więc wyjaśnij mi to:

image.thumb.png.f1e50aafd086504dd6d167e897f358e7.pngimage.thumb.png.399a5c666425e8dc5934b1bd225aa088.png

Na jednolitym tle mam STD = 44, a na niejednolitym, z gwiazdami 148. Jakoś przeczy mi to Twojej rozkminie, że zawartość zdjęcia nie ma znaczenia na pomiar :) Myślę, że @Sebo_b właśnie o to chodzi - że mając jakieś "obiekty" w obszarze wyliczania odchylenia, znacznie zawyżamy jego wartość.

Odnośnik do komentarza
Udostępnij na innych stronach

11 minut temu, MateuszW napisał:

mając jakieś "obiekty" w obszarze wyliczania odchylenia, znacznie zawyżamy jego wartość.

 

Nie wiem, czy cały czas dyskutujemy o tym samym.

Ja tylko próbuję Was przekonać, że dla pokazania na wykresie, że SNR rośnie jak pierwiastek z czasu naświetlania można wziąć średnią i odchylenie standardowe wszystkich pikseli obrazu

Oczywiście, biorąc różne fragmenty obrazu będę miał różne wartości SNR, ale trend (pierwiastkowy) będzie taki sam.

 

Ale tylko jeśli wcześniej odejmiemy biasa (inaczej: offset) bo w przeciwnym razie offset będzie doliczany do sygnału i zafałszuje wyniki.

 

Ogólnie chciałem pokazać właśnie to: pierwiastkowy trend.

Odnośnik do komentarza
Udostępnij na innych stronach

1 minutę temu, Behlur_Olderys napisał:

Oczywiście, biorąc różne fragmenty obrazu będę miał różne wartości SNR, ale trend (pierwiastkowy) będzie taki sam.

Dobra, to chyba łapię :) W takim razie zgoda, że kształt wykresu będzie ok, choć wartości totalnie z czapy.

  • Dziękuję 1
Odnośnik do komentarza
Udostępnij na innych stronach

31 minutes ago, Behlur_Olderys said:

Szum fotonowy to nie kwestia kamery (bezszumowej) ale fotonów, samej ich egzystencji. Tego, że nie wpadają równym rządkiem na sensor, tylko dosyć chaotycznie (rozkład Poissona o ile się nie mylę).

Jeśli nawet idealną, bezszumową kamerą zrobię zdjęcie - na unity gain dla uproszczenia - jednolitego tła o średniej ADU = 10000 to szum fotonowy *będzie* równy 100. 

Odchylenie będzie równe 100, a SNR = 100. Ale nie nieskończoność. Podkreślam - kamera nie ma znaczenia. Zgadzamy się? :)

Tutaj się zgadzamy, choć ja dla przykładu przyjąłem, że szum fotonowy Cię nie interesuje. (i tak ma rozkład Poissona i wartość sqrt(sygnału) ).

 

4 minutes ago, Behlur_Olderys said:

dla pokazania na wykresie, że SNR rośnie jak pierwiastek z czasu naświetlania można wziąć średnią i odchylenie standardowe wszystkich pikseli obrazu

 

2 minutes ago, MateuszW said:

Dobra, to chyba łapię :) W takim razie zgoda, że kształt wykresu będzie ok, choć wartości totalnie z czapy.

Teraz też rozumiem o co chodzi. Mamy te same obrazy - więc i taką samą zmienność samego obrazu, to co się zmienia to dodana nad to zmienność szumu. Niby tak, ale zmienność obrazu przy różnych czasach nie będzie taka sama - przy krótkich czasach histogram zetnie się z jednej strony, przy długich z drugiej - chyba, że zadbasz żeby tak nie było. Nie mam pojęcia na ile to wpłynie na wykres.

 

PS: pokażesz tego biasa?

Odnośnik do komentarza
Udostępnij na innych stronach

W dniu 24.05.2019 o 23:23, Sebo_b napisał:

PS: pokażesz tego biasa?

 

Link do pojedynczego biasa:

https://drive.google.com/file/d/1CQRuEaeD1vQQGteV6TB9ecnQMTAAneO1/view?usp=sharing

 

Link do przykładowej fotki:

https://drive.google.com/file/d/1d3E1WGG3QbBZN8MJ1rLHkW7_suWhRO6P/view?usp=sharing

 

Jak otwieram te pliki w pythonie (rawpy, numpy) to nie ma zmiłuj się - 2000 jako offset, konsystentnie.

 

Mam podejrzenie, że coś się dzieje przy wywoływaniu RAW-ów....

 

Edytowane przez Behlur_Olderys
Odnośnik do komentarza
Udostępnij na innych stronach

2 godziny temu, MateuszW napisał:

Ciekawe. Jak otwieram w Maximie, to mam tło ok 26:

 

omg omg nie wiedziałem, a teraz już wiem!

 

http://www.clarkvision.com/articles/canon.raw.processing1/

 

Czyli 2048 to jest normalnie jeszcze "dodatkowy" offset.

Tymczasem dostępny max to - najprawdopodobniej - coś około 15303 (ale wydaje się, że to zależy od iso, no i na pewno od aparatu - ja mam Canona 700d)

 

Tutaj można sobie sprawdzić swój aparat.

Później te wartości są mapowane (liniowo) do zakresu 0-16384. Ale to oszustwo trochę, bo w takim razie nie ma prawdziwego 14b, tylko 13.69b (13253 wartości)

Może nieduża różnica, ale mieć a nie mieć....? 
 

Wiedzieliście o tym wszystkim? 

 

EDITED:

tu są wartości do sprawdzenia dla innych aparatów (wartości empiryczne z biblioteki rawtherapee)

https://fossies.org/linux/rawtherapee/rtengine/camconst.json

 

 

Edytowane przez Behlur_Olderys
Odnośnik do komentarza
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.