Stap 2: Inzicht in de comparagram is de sleutel tot het begrijpen van HDR
Zodra u de comparagram te begrijpen, ben je goed op uw manier aan het inzicht van het fundamentele concept achter HDR en achter comparametric sensing in het algemeen. Comparagrams zijn de sleutel tot het begrijpen van de relatie tussen verschillend belichte opnames via een sensing apparatuur van elk willekeurig-vormige responscurve.
Het eerste ding om te proberen te begrijpen is het verband tussen twee afbeeldingen, v1 en v2, en later tussen meer dan twee afbeeldingen, door te overwegen ze paarsgewijs. We krijgen dit begrip door het berekenen van de comparagram tussen paren van beelden. Een comparagram is een gezamenlijke histogram van twee records die alleen in blootstelling verschillen. Berekenen van de comparagram van de twee bovenstaande foto's. U kunt schrijven van uw eigen programma om dit te doen, of gebruikt u een van onze VideoOrbits-toolkit, http://wearcam.org/orbits/v1.23.tgz
Als alternatief, ervan uitgaande dat u gebruikmaakt van GNU Linux (zoals meest sane doe-het-zelvers), u kan berekenen een comparagram in octaaf als volgt:
CG = full(sparse(v1+1,v2+1,1,256,256));
Veronderstellend hebt u twee greyscale beelden dat elk 256 grijswaarden waarden hebben.
Een computationeel meer efficiënte manier om de berekening te doen is het gebruik van een externe C-taal bestand, een zogenaamd van Octave. Hier is een eenvoudige Octave bestand dat efficiënter (sneller) comparagrams in Octave berekent: http://wearcam.org/comparagram.cc
Compileer het als volgt:
$ mkoctfile comparagram.cc
U moet mogelijk liboctave-dev installeren als u het volgende bericht krijgt:
Het programma 'mkoctfile' is momenteel niet geïnstalleerd. Om uit te voeren 'mkoctfile' vraag uw beheerder om te installeren van het pakket 'liboctave-dev'
Als u bent eigen beheerder (zoals de meeste GNU Linux DIY liefhebbers zijn), dan het te installeren:
$ sudo apt-get install liboctave-dev
Hier, in ons geval krijgt aangezien de beelden kleur (RGB zijn) u 3 kanalen van comparagram gegevens, die vergelijkt het rode kanaal van v1 met het rode kanaal van v2, het volgende kanaal vergelijken de groene kanalen en het derde kanaal vergelijken de blauwe kanalen, waardoor de comparagram zelf een RGB-entiteit. U kunt ook de afbeeldingen converteren naar grijswaarden en de comparagram zal dus slechts één kanaal, aangezien de reactie-functie van de camera ongeveer hetzelfde voor elk van de drie kanalen is.
Hier is een leerboek definitie van de comparagram:
"De comparagram tussen twee afbeeldingen is een matrix van grootte M door N, waar M is het aantal grijsniveaus in de eerste afbeelding en N is het aantal grijsniveaus in de tweede afbeelding. De comparagram, welke wordt verondersteld zich blootgesteld foto's van hetzelfde onderwerp anders worden overgenomen, is een generalisatie van het concept van een histogram aan een gezamenlijke histogram bin graaf van overeenkomstige pixels in elk van de twee beelden. De Conventie is dat de pixelwaarde van elke uit de eerste afbeelding uitgezet op de eerste (dat wil zeggen, "x") as, tegen de tweede corresponderende pixel (bijvoorbeeld op dezelfde coördinaten) van de tweede afbeelding wordt weergegeven op de tweede as (dat wil zeggen, de "y"-as). Aangezien het aantal grijsniveaus in beide afbeeldingen is meestal hetzelfde (dat wil zeggen, 256), is de comparagram meestal een vierkante matrix (dat wil zeggen, van afmetingen 256 door 256)." [Intelligente Image Processing, S. Mann, 2001].
Als je gaat om te schrijven van uw eigen comparagram-programma (die ik stel voor u, zodat u meer informatie over het beter, en ook in de ware DIY geest), hier is een mooi zeer eenvoudig voorbeeld om u te helpen de slag:
Houd rekening met twee foto's die elke 3 pixels hoog en 4 pixels breed:
v1 = [
1 3 2 3;
3 2 1 2;
0 0 2 0
]
en
v2 = [
2 3 3 3;
2 2 2 2;
0 1 3 0
].
De comparagram is een twee dimensionale array van grootte M n M is het aantal grijze waarden in de eerste afbeelding, waarbij N staat voor het aantal grijze waarden in het tweede beeld, waar vermelding C [m, n] is een telling van hoe vaak een pixel in afbeelding 1 is greyvalue m en de corresponderende pixel in afbeelding 2 is greyvalue n. In dit geval beide beelden hebben 4 grijs waarden, dus de comparagram een matrix van 4 bij 4 is, gegeven door:
CG=full(sparse(v1+1,v2+1,1,4,4))
% (boven lijn hebt getypt in het octaaf of Matlab):
CG = [
2 1 0 0;
0 0 2 0;
0 0 2 2;
0 0 1 2
].
Optellen in rijen van de comparagram geeft het histogram van de eerste afbeelding: h1 = [3 2 4 3] en het histogram van de tweede afbeelding verticaal in kolommen van de compragram geeft samenvatting: h2 = [2 1 5 4]. Samenvatting van alle items in de comparagram geeft 12, dat is het totale aantal pixels.
Een eenvoudige oefening om te helpen u meer inzicht in comparagrams, wat ze kunnen doen en hoe ze te gebruiken:
Hier is een eenvoudige oefening die zal u helpen begrijpen van de comparagrams. Deze eenvoudige oefening en ik kan beloven een nieuwe wereld van inzicht, een soort "aha" moment, dat voor veel van mijn studenten heeft markeerde het begin van een nieuwe manier van kijken naar de wereld van comparametric sensing.
Het nemen van een afbeelding, zoals bij de bovenkant van deze pagina.
Ga naar een foto-editor zoals GIMP (ik liever Open Source GNU Linux) en selecteer "Curves" uit het menu "Kleuren".
Zo kunt u "Passen kleur Curves".
Aangezien de afbeelding grijswaarden (ik stel voor te beginnen met een afbeelding met grijstinten) bent u eenvoudig greylevels aan te passen.
Welke vorm die u wilt, op de curve maken.
Sla nu het resultaat onder een nieuwe bestandsnaam.
Berekenen van de comparagram van dit nieuwe beeld tegen de oorspronkelijke afbeelding.
Wat u krijgt (zie hierboven) is de curve die u hebt gemaakt.
Met andere woorden, de comparagram (herstelt) haalt de curve van de afbeeldingsgegevens.
Merk op dat in de literatuur de "x-as" (eerste as) uitgevoerd van links naar rechts en de "y-as" loopt van onder naar boven, terwijl u in de computer bestanden (matrices in de programmeertaal C) index met de "x-as" (eerste as) gaan van boven naar beneden, en de "y-as" gaan links naar rechts, zodat u de comparagram 90 graden draaien om het te krijgen om de lijn wellicht omhoog met de curven.
Probeer dit een paar keer met een paar anders gevormde rondingen.
U kunt nu de comparagram begrijpen als een fundamenteel instrument voor het begrijpen van de relatie tussen beelden van identiek onderwerp dat die alleen verschillen in tonaliteit of grijswaarden. Anders blootgesteld beelden exposeren wijzigingen in tonaliteit, die duidelijk in de coparagram. De comparagram geeft de essentie van twee dingen tegelijk:
- Een camera's reactie functie;
- Het verschil in fotografische blootstelling op meerdere bestanden.