2018. jan. 3.

Tényleg 3 megapixeles a 12 megapixeles kamera?

Dekonstruáljunk RAW-ot majd konstruáljunk valós felbontású képet.

Na, ez egy igazán öncélú, semmire se jó játék. Mondjuk a szilveszteri agysorvadáshoz méltó semmiség. Ne is olvassátok, tényleg nem érdemes, inkább a felhasznált réteg- és csatornatechnikák miatt lehet érdekes, ezért is csináltam belőle jegyzetet, hátha még valamikor kelleni fog.
Arra is keressük a választ, hogy egy ál 12 megapixeles RAW-ból jobb valós 3 megapixeles képet készíthetnénk e, hogyha a Bayer demozaikolását nem kellene végrehajtani.

Mert az milyen már, hogy a marketing ráírja egy 4 vagy 6 megapixeles kamerára, hogy 12 megapixel? Aztán sunyi módon felnöveli szoftveresen. Ugyanezen a logika mentén miért nem írják fel egy full HD monitorra, hogy 6,2 millió pixeles, ami már ugye majdnem 6K felbontás lenne?! Szóval megpróbálunk hozzáférni a valós pixelértékeinkhez, mindenféle demozaikolás nélkül, majd kideríteni, nyerünk, vagy tulajdonképpen veszítünk hogyha egy RAW-konverterre bízzuk a 12 megapixel előállítását.

A lényege az, hogy még demozaik előtt különválasztjuk az egyes bayer-szűrőknek megfelelő pixeleinket. Ehhez építettünk egy bayer-réteget PSben, GBRG elosztásban, hogy ennek segítségével jelölhessük ki az összes piros, kék és zöld pozícióban levő pixeleinket a demozaikolatlan RAW-ból.
Két esetet teszteltünk.

1. A RAW Therapee segítségével készítünk egy színes, demozaikolatlan képet, erre egy netről töltött tesztképet használunk. A múltkor már volt róla szó, hogy kell ezt paraméterezni. 
Tehát a mozaikos képünkre rányitjuk a bayer-szűrőnket és segítségével külön rétegekre válogatjuk az RGB színű pixeleinket. Hogyan? Hát kijelölve egy színes pixelt, majd select similar paranccsal, aztán átváltva a kép-rétegére már lehet is továbbvinni. 
Itt például a zöld pixeleket látjuk. A hiányzó pixeleket úgy hozzuk létre, hogy duplázzuk a rétegünket, és eltoljuk x,y irányba. A zöldet egyszer, a pirosat és kéket két lépésben, érthető okokból. Így gyakorlatilag egy piros pixel 4 pixelen lesz jelen, a kékekkel ugyanez a helyzet, a zöldek meg természetesen nem. 
Ha az így létrehozott rétegeink összahatását screen-re állítjuk, máris megkapjuk a színes házilag demozaikolt képet. Ami persze sokkal rosszabb, mint amit bármilyen RAW konverter készített volna, de legalább fölöslegesen dolgoztunk vele. A normális interpoláció hiánya a kontrasztos széleken jelentkezik leginkább (lásd jobboldali kép 100%-ban).

2. Na, akkor most ugyanezt nézzük meg, hogyha a mozaikolt képünk nem színes, hanem csak luminancia értékeket hordoz (hordoooz? ez is milyen kifejezés). Azt DCRaw segítségével csináljuk, mégpedig Document mode paraméterrel. 
Megnyitva  PS-ben valami ilyesmit látunk, h a Bayer réteget color összhatásmódba kapcsoljuk vele valami olyasmit kapunk, mint amit a RawTherapee készített. Nem véletlenül. A saját Bayer rétegünk segítségével ezt is különválogatjuk színek szerint. Ezennel, mivel szürkeskálásak a pixeleink, értelem szerint a Channels RGB csatornáira másoljuk azokat.
Elég sápatag. Amiatt van ez, mert az egyes csatornák nincsenek interpolálva. A hiányzó pixel-helyekre duplázzuk rá ezeket is, mielőtt a megfelelő csatornára másolnánk, akkor az eredmény ilyenre módosul:
Fehér egyensúly dolgában bizony nincs ott, mint az előző verzió, viszont nem látjuk át, a RawTherapee miket oltott még bele a képbe, a DCRaw valamivel nyersebbnek tűnik. Persze fehéregyensúllyal ez is orvosolható, viszont a házi interpoláció miatt a kontrasztos szélek itt is csapnivalóak. 

Jogosan merül fel a kérdés, hogyha a Bayer-szűrő miatt a 12 megapixeles kép gyakorlatilag 3 megapixeles Piros, 3 megapixeles Kék, illetve két 3 megapixeles Zöld csatornából áll, akkor milyen lenne ha így is kezelnénk? Vagyis azt keressük, hogy bármilyen szempontból jobb 3 megapixeles képet kapunk e, mintha interpolációval 12 megapixelesnek demozaikoljuk őket.

Ehhez trükk szükséges, ugyanis nem találtunk széles ez interneten egyetlen módszert sem, amivel az egyes színes pixelek közötti réseket figyelmen kívül hagyva, csakis a hasznos pixelekből építhetnénk 3 megapixeles képeket. Tehát a 2x2 pixeles Bayer pattern hiányzó pozícióira ugyanazt az egy pixelt másoltuk. Négy darab azonos piros pixel, négy darab azonos kék pixel. Zöld esetében két csatornát képeztünk, Zöld1 és Zöld2, amelyeket összemixeltünk. Gyakorlatilag a 12 megapixeles kép minden négy pixele egyetlen pixelnek felel meg így. Image Size 50% - preserve hard edges opcióval meg létrehozza a kívánt 3 megapixeles képet. Tádám.

A baloldali egy ACR-ben konvertált, majd ImageSize-al csökkentet kép részlete, a jobboldali pedig a fentiek szerint létrehozott valós felbontású szar kép. 100%-ban érdemes összehasonlítani, a tónusok persze különböznek, hiszen az ACR profileja, meg fehéregyensúlya stb. megtette a hatását, viszont ami durvább, hogy az általunk demozaikolt (gyakorlatilag demozaikolatlan) kép kontrasztosabb szélei durván elszíneződtek. Tehát a RAW konverterek okos algoritmusai nemcsak simán felinterpolálják a képet, hanem a szomszédos pixelek elemzésével sokkal jobb döntéseket képesek hozni a problémásabb részletek kialakításához. Mondjuk ezt sejtettük.

A fenti képrészletek pedig az ACR illetve a RAWTherapee demozaikolását mutatják. Igyekeztem minden beállítást kiiktatni. A baloldali az Adobe, kicsit kontrasztosabb, de a jobboldali amaze módszer se rossz, mindenképpen jobb, mintha csak a nyers pixelértékeket egymás mellé sorakoztatnánk.

Tehát bayer miatt, bár csatornánként nézhet úgy ki a nyers kép, mint egy ementáli, mégis van abban annyi információ, amit okosan kiaknázva jobb eredményt lehet elérni, mint ahogyan azt gondoltuk elsőre.

Nincsenek megjegyzések:

Megjegyzés küldése