Pradžiai apie įrankius kuriuos naudojau. Kadangi fotografija nėra mano profesija, o tik hobis, tai mokėti rimtus pinigus už rimtas programas a la Adobe Photoshop kažkaip ranka nekyla. Nelegalus instaliaviamas arba vagystė palieka tokį pošlykštį diskomforto jausmą, todėl jau senokai tuom neužsiiminėju. Taip, dažniausiai naudoju GIMP'ą, bet šiuo atveju jį išmečiau iš galimų variantų dėl per mažo tikslumo - jo vidiniai algoritmai naudoja tik aštuonių bitų koduotę. Todėl vėl pasirinkau nemokamų programų paketo ImageMagick šešiolikos bitų instaliaciją. To paties, kurį naudojau pirmoje dalyje skirtumui matuoti. Toks komandinės eilutės įrankio pasirinkimas turi netgi šiokį tokį privalumą - į komandinį failą (.cmd, .bat ar .sh - skonio reikalas) surašius komandų seką, dviem klavišų paspaudimais gauni pakoreguotą vaizdą ir iškart pamatavimą, kiek jis artimas etalonui. Bet čia manęs pasirodo laukė "spąstai", kurie prarijo visą pagrindinį laiką skirtą šiam įrašui: tuos komandinius failus teko sukti nežinau kiek šimtų kartų, kol išspaudžiau kažkokį maksimumą iš kiekvieno vaizdo.
Kol neperėjom prie konkrečių vaizdų, įspėjimas: nebandykite to kartoti namuose - užmušit labai daug laiko :) Reikia pripažinti, kad pagrindinis mano eksperimento rezultatas - iki maksimalaus panašumo etalonui išspaustas vaizdelis - mažai pritaikomas praktikoje. Nes jeigu turite galimybę palyginti - vadinasi turit gerą kadrą ir tą prastąjį galit mesti lauk - kam prie jo vargti? O jeigu turit tik nenusisekusį, tai vis tiek geriau jį taisyti su įprasta vaizdų redagavimo programa, kurioje galit iš kart pamatyti - patinka ar ne jums rezultatas.
Taigi, jeigu neatmušiau noro toliau skaityti, pradinis vaizdelis:
Prie viršutinio kadro bandysim pritempti tą paskutinį, patį tamsiausią. Būtent tai ir krinta į akis - jis per tamsus. Logiškas žingsnis - šviesinam. Kažkiek pasikankinęs, sustojau prie štai šios komandų rikiuotės:
-gamma 0.41667 -contrast-stretch 0.5%
-channel R -level 0%,84%
-channel RGB -gamma 3.5 -normalize
su štai tokiu rezultatu:-channel R -level 0%,84%
-channel RGB -gamma 3.5 -normalize
Channel distortion: PSNR
red: 28.4126
green: 29.9785
blue: 29.5257
all: 29.2547
Priminsiu: iš RAW daryto JPG PSNR metrika buvo... ~30,1dB - beveik pasiekėm iš RAW daryto JPG lygį! Trumpai paanalizuokim, kokiais veiksmais tą pasiekiau: neutralizavau JPG gammą korekciją, tada tiesiškai ištempiau reikšmes per visą diapazoną, nukirsdamas po 0.5% iš abiejų pusių, sumažinau raudonos spalvos lygį, vėl sukoregavau gamma, kad būtų panaši į etalono, ir dar kartą ištempiau spalvų reikšmes nuo 0 iki maksimumo. Pažiūrim pradinio, visos šitos abrakadabros rezultato ir etalono histogramas:Per vidurį matom tipiškai po JPG šviesinimo gaunamą "ežiuką". Tarpai tarp "spygliukų" reiškia, kad nuotraukoje nėra pakankamai tarpinių reikšmių, todėl gradientuose gali pasimatyti pastebimi šuoliukai tarp skirtingų atspalvių. Beje, nors ir labai dantyta, bet koreguoto JPG histograma žaliame ir raudonuose kanaluose gavosi panaši į etaloninė nuotraukos histogramą apačioje. Tačiau mėlynas kanalas atrodė, kaip sakoma, nei į tvorą, nei į mietą. Šis faktas man ir pakišo mintį, kad reikia optimizuoti kiekvieną kanalą atskirai. Kuom ir užsiėmiau - išskaidyti nuotrauką į atskirų kanalų vaizdus, surasti optimalias reikšmes kiekvienam iš kanalų, o tada vėl rekonstruoti "tobuliausią" priartėjimą. Taip pasididinau sau darbą šešis kartus. Nes suoptimizavęs grynąjį JPG, nusprendžiau padaryti tą patį padaryti ir JPG'ui iš RAW. Kadangi bedarydamas mokaisi, tai man dar teko šiuos veiksmus pakartoti bent kokias tris iteracijas su įvairiomis komandų kombinacijomis. Taip nejučia prabėgo beveik visas mėnuo.
Žinoma, jums skaityti, kaip aš čia artėjau prie galutinių skaičių, bus visai neįdomu. Todėl, daug netempiant - rezultatai. Vėlgi, pradėsiu nuo komandų kurias naudojau galutiniam rezultatui pasiekti:
Komanda\Kanalas | R JPG | G JPG | B JPG | R RAW | G RAW | B RAW |
-contrast-stretch | 0x0.01% | 0x0.01% | 0x0.01% | 0.3x0% | 0.2x0% | 1x0.004% |
-gamma | 1.2 | 1.2 | 1.3 | 1.04 | 0.98 | |
-sigmoidal-contrast | 3.9x4% | 4x5% | 2.7x5% | 1.2x30% | ||
+sigmoidal-contrast | 1.1x41% | 0.6x35% | ||||
+level | 0,92% | 0,95% | 0,96% | 0,99.4% | 0,99% | 0,97% |
-selective-blur | 5x9+4% | 3x4+5% | 6x4+7% | 8x12+9% | 4x7+5% | 7x10+7% |
-blur | 0x0.9 | 0x0.8 | 0x0.9 | 0x0.9 | 0x0.7 | 0x0.9 |
-quality | 98 | 98 | 98 | 98 | 97 | 98 |
Arba pažingsniui:
- Pradžioje ištempiame nuotraukos spalvų reikšmes taip, kad jos užimtų visą reikšmių diapazoną nuo 0 iki 255 (contrast-stretch). Gauname, kaip ir nuotraukos pašviesėjimą.
- JPG naudoja netiesinę sRGB spalvų erdvę, dėl ko tenka pritaikyti gama korekciją (gamma) - šiek tiek perskirstome pustonius.
- Šiek tiek padidinamas arba sumažinamas kontrastas - pritaikomas dar vienas netiesinis filtras (sigmoidal-contrast).
- Šiek tiek sumažinamos - patamsinamos - kanalo reikšmės, kadangi etaloninio kadro spalvų kanalai nepasiekia 100% (level).
- Pašviesinus nuotraukas išryškėja triukšmai - tarytum būčiau fotografavęs su užkelta ISO jautrumo reikšme. Todėl pritaikomi triukšmo valymo filtrai (selective-blur ir blur).
- Dalį triukšmų galima nufiltruoti tiesiog išsaugant JPG su žemesne kokybę (quality) - nusifiltruoja tie erdvinio signalo dažniai, kurių lygis yra labai žemas. Iš esmės ten tik triukšmas.
Legenda: kanalo spalva pažymėtas koreguotas variantas; balta spalva - kur sutapo koreguotas ir etaloninis; kitos spalvos - etalono histograma nesutampanti su koreguotu vaizdu. |
Dabar jau galiu atskleisti ir kokį PSNR pavyko pasiekti kiekvieno kanalo atveju. Primenu - lyginau JPG su JPG variantu, o RAW su RAW etalonu:
R JPG | G JPG | B JPG | R RAW | G RAW | B RAW | |
PSNR | 32.6335 | 35.4521 | 33.8193 | 33.8543 | 39.0363 | 35.5384 |
Ir galutinis PSNR pamatavimas, sujungus atskirus kanalus į vieną vaizdelį:
JPG | RAW | |
PSNR | 33.7562 | 35.5939 |
Deja, bet skaitine prasme galutinis rezultatas mane šiek tiek nuvylė - jis visiškai neypatingas: skirtumas nepilni du decibelai arba kokie 26%. Tiesa, su RAW buvo pasiektas vis tiek geresnis rezultatas. Bet ar tikrai toks, kad pagrįstų RAW naudojimą? Paliksiu tai nuspręsti jums patiems. O, kad būtų lengviau tai padaryti, pridėsiu štai šiuos vaizdelius, kuriuose matyti visi kanalai iš galutinio rezultato:
Hint: išsididine iki 100% ieškokite matomų "dėmių", ten kur turėtų būti tolydus perėjimas (gradientas), pvz. tamsesniajame bliūdelio šone arba lentynos gilumoje.
Mano akimis - RAW liko nenugalėtas.
2 comments:
Aina šikt... O dar sakai, kad hobis ;)
Aš abejoju ar yra daug profesionalų, kurie sugalvotų tokius testus atlikti...
Žinoma, jie laiko neturi, jiems ten vestuves reik važiuot fotkint viską... :)
Tai jau taip - profesionalai arba vestuves (ir visą kt.) fotkina, arba ... gyvena iš panašių testų darymo ir review'ų :)
Rašyti komentarą