HDR glasögon: från cyborg svetsning hjälmar till Wearable beräkning i vardagen (2 / 6 steg)
Steg 2: Förstå comparagram är nyckeln till att förstå HDR
När du förstår comparagram, är du på god väg att förstå det grundläggande konceptet bakom HDR, och bakom comparametric avkänning i allmänhet. Comparagrams är nyckeln till att förstå förhållandet mellan olikt exponerade inspelningar genom en avkänning apparatur av något godtyckligt formade responskurvan.
Den första sak att försöka förstå är relationen mellan två bilder, v1 och v2, och senare mellan fler än två bilder, genom att betrakta dem pairwise. Vi får denna förståelse genom computing comparagram mellan par av bilder. En comparagram är ett gemensamt histogram över två poster som skiljer sig bara i exponering. Beräkna comparagram av de två bilderna ovan. Du kan skriva dina egna program för att göra detta, eller använda en från vår VideoOrbits toolkit, http://wearcam.org/orbits/v1.23.tgz
Alternativt, förutsatt att du använder GNU Linux (som mest sane gör-det-självare), du kan beräkna en comparagram i Octave enligt följande:
CG = full(sparse(v1+1,v2+1,1,256,256));
förutsatt att du har två gråskalebilder som varje har 256 gråskalevärden.
Ett mer beräkningsmässigt effektiv sätt att göra uträkningen är att använda en extern fil C-språk, kallas från Octave. Här är en enkel Octave fil som mer effektivt (snabbare) beräknar comparagrams i Octave: http://wearcam.org/comparagram.cc
Kompilera den enligt följande:
$ mkoctfile comparagram.cc
Du kan behöva installera liboctave-dev om du får följande meddelande:
Programmet "mkoctfile" är inte installerat. Att köra "mkoctfile" vänligen fråga administratören installera paketet "liboctave-dev"
Om du är din egen administratör (som de flesta GNU Linux DIY entusiaster är), sedan installera det:
$ sudo lämplig-få installera liboctave-dev
Här, i vårt fall får eftersom bilderna är i färg (RGB) du 3 kanaler av comparagram data, som jämför den röda kanalen i v1 med den röda kanalen i v2, den nästa kanal jämföra de gröna kanalerna och den tredje kanalen jämföra den blå kanaler, vilket gör comparagram sig en RGB-enhet. Du kan även konvertera bilder till gråskala och comparagram således endast en kanal, eftersom funktionen svar av kameran är ungefär densamma för varje av de tre kanalerna.
Här är en lärobok definition av comparagram:
"Comparagram mellan två bilder är en matris av storlek M av N, där M är antalet grånivåer i den första bilden och N är antalet grånivåer i den andra bilden. Comparagram, som antas tas över olika exponerade bilder av samma ämne, är en generalisering av ett histogram till gemensamma histogram bin räkna till motsvarande pixlar i varje av de två bilderna. Konventionen är att ha varje pixelvärde från den första bilden på först (dvs, "x") axel, mot den andra motsvarande pixeln (t.ex. på samma koordinater) av den andra bilden är ritade på den andra axeln (dvs, "y"-axeln). Eftersom antalet grånivåer i båda bilderna är oftast samma (dvs. 256), är comparagram vanligtvis en kvadratisk matris (dvs. av dimensioner 256 av 256)." [Intelligent bildbehandling, S. Mann, 2001].
Om du ska skriva din egen comparagram-program (som jag föreslår att du gör, så du lär dig om det bättre, och också i sanna DIY ande), här är ett trevligt mycket enkelt exempel att hjälpa dig att komma igång:
Betrakta två bilder som är varje 3 pixlar hög och 4 pixlar bred:
V1 = [
1 3 2 3.
3 2 1 2.
0 0 2 0
]
och
v2 = [
2 3 3 3.
2 2 2 2.
0 1 3 0
].
Comparagram är ett två dimensionell matris med storlek M av N där M är antalet grå värden i den första bilden, och N är antalet grå värden i den andra bilden, där posten C [m, n] är en beräkning av hur många gånger en pixel i bild 1 har greyvalue m och den motsvarande pixeln i bild 2 har greyvalue Nilsson. I detta fall båda bilderna har 4 grå värden, så comparagram är en 4 av 4 matris, ges av:
CG=full(sparse(v1+1,v2+1,1,4,4))
% (ovanför linjen skrev i Octave eller Matlab):
CG = [
2 1 0 0;
0 0 2 0;
0 0 2 2.
0 0 1 2
].
Summera i raderna av comparagram ger histogrammet av den första bilden: h1 = [3 2 4 3] och summera kolumnvis av compragram ger den andra bilden histogrammet: h2 = [2 1 5 4]. Summera alla transaktioner i comparagram ger 12, vilket är det totala antalet pixlar.
En enkel övning som hjälper dig att förstå comparagrams, vad de kan göra och hur de används:
Här är en enkel övning som hjälper dig att förstå comparagrams. Denna enkla övning och jag kan lova en ny värld av insikt, ett slags "aha" ögonblick som för många av mina elever har markerade början på ett nytt sätt att se på världen comparametric avkänning.
Ta en bild, som den överst på denna sida.
Gå in en bild redaktör som GIMP (jag föredrar öppen källkod GNU Linux) och välj "Kurvor" från menyn "Färger".
Här kan du "Justera färg kurvor".
Eftersom bilden är gråskala (jag föreslår att starta med en gråskala bild) justerar du enkelt greylevels.
Skapa vilken form du vill, på kurvan.
Nu spara resultatet under ett nytt filnamn.
Beräkna comparagram av denna nya bild mot den ursprungliga bilden.
Vad du får (se ovan) är den kurva som du skapat.
Med andra ord, comparagram extrakt (återställer) kurvan från bilddata.
Observera att i litteraturen "X-axeln" (första axel) går från vänster till höger och den "Y-axel" går från botten till toppen, medan i dator filer (matriser i programspråket C) index med x-"axeln" (första axel) går uppifrån och ned, samt "Y-axeln" kommer vänster till höger, så du kan rotera comparagram 90 grader för att få det till linje med kurvor.
Prova detta ett par gånger med ett par olika sätt formade kurvor.
Nu kan du förstå comparagram som ett grundläggande verktyg för att förstå förhållandet mellan bilder av identiska föremål som endast avviker i tonalitet eller gråskala. Annorlunda exponerade bilder uppvisar förändringar i tonalitet, vilket blir tydligt i coparagram. Comparagram fångar essensen av två saker samtidigt:
- En kamera svar funktion;
- Skillnaden i fotografisk exponering över flera bilder.