Annons

Varför blir det olika storlekar i RAW, D80?

Produkter
(logga in för att koppla)
maxzomborszki skrev:
De sensorer som sitter i de allra flesta digitalkamerorna registrerar ETT ljusvärde per pixel och vilken färg de registrerar beror på mönstret på sensorn. Detta typ av sensor kallas även för Bayersensor och interpoleringen från detta mönster kan göras på lite olika sätt, det är därför som olika RAW-konverterare ger lite olika resultat.
En bayersensor består av 4 sensorelement per pixel och rådatan innehåller datan från vart och ett av sensorelementen. Bildpixlar, blir det inte förrän efter interpolering, alltså det som RAW-konverteraren gör för att skapa en bitmap genom att applicera olika demosaicing filter. Läs din egen länk till wikipedia om bayerfilter. Råfilen levererar RGBG, dvs. 4 olika kanaler och detta interpolerar konverteraren ned till RGB vilket består av 3 kanaler.

Jag misstänker faktiskt att vi menar samma sak, bara det att vi talar om varandra. För visst håller du med om att RGB är tre kanaler, givetvis med värden för varje kanal, och att RGBG kan ses som 4 kanaler med sina värden för varje kanal?
 
steelneck skrev:
En bayersensor består av 4 sensorelement per pixel och rådatan innehåller datan från vart och ett av sensorelementen.

Du har naturligtvis en poäng här, men eftersom den terminologi du använder avviker från ungefär alla andras är det på plats med en varning.

Alltså, en typisk 6-megapixels DSLR, t.ex. EOS10D, EOS300D eller Nikon D70 har (ungefär) sex miljoner ljussensorer. Av dessa är hälften gröna (som i sin tur kan delas upp i två olika gröna smaker) och en fjärdedel vardera röda och blå. Eftersom varje sådan ljussensor ger 12 bitar (1,5 byte) ut, blir den totala datamängden i en bild c:a 9 Mbyte.

Man kan naturligtvis hävda att detta betyder att de kameror jag räknade upp bara är 1,5 Mpx-kameror, eftersom de bara registrerar fullständig färginformation för 1,5 miljoner pixlar, och då skulle ditt resonemang stämma.
 
steelneck skrev:
Spara en 3008x2000 bitmap med 8-bits färgdjup okomprimerat så får du se, och jag köper inte att okomprimerad 12-bitars rådata skulle vara en mindre datamängd än 8-bitar bitmap.
En 3008x2000 bitmap med 8-bitars färgdjup i RGB blir:

3008*2000*3*8 = 144384000 bitar = 18048000 byte = 17,2 Mb

Så långt har du rätt.

Skulle du spara den i CMYK istället har du fyra färgkanaler (cyan, magenta, gult och svart) och då blir det:

3008*2000*4*8 = 192512000 bitar = 24064000 byte = 22,9 Mb

Sparar du den i 16 bitar per kanal och CMYK har du:

3008*2000*4*16 = 385024000 bitar = 48128000 byte = 45,9 Mb

Men en råfil från en Bayersensor innehåller EN "färgkanal" och i fallet D70 12 bitar "per kanal" och blir då:

3008*2000*1*12 = 72192000 bitar = 9024000 byte = 8,6 Mb

Alla räkneexempel förutsätter enbart bilddatat och ingen metadata.

Så, ja, en okomprimerad råfil från en vanlig digitalkamera tar mindre plats än den bitmap du senare interpolerar fram.

En bayersensor består av 4 sensorelement per pixel och rådatan innehåller datan från vart och ett av sensorelementen.
Tyvärr Magnus, här har du lärt dig fel. Bayersensorns element läser EN färg och "lånar" färginformation från de närligande pixlarna, det är detta som kallas interpolering. En kamera med bayersensor och 6 megapixels har 6 miljoner fotodioder INTE fyra gånger så många. Jag ska göra några förklarande bilder och bifoga.
 
Tyvärr blev länken i ett av mina tidigare inlägg till Photozone korrupt. Korrekt länk är: http://www.photozone.de/3Technology/digital_3.htm. Titta på bilden Bayer Interpolation (simplified) under "Bayer"-type Image sensors.

Där ser du också att man inte behöver FYRA gånger så många fotodioder utan det räcker faktiskt med bara några få extra, detta då pixlarna i bilden delar fotodioder.

Jag har gjort en egen variant på hans bild och bifogar nedan. De färgade fälten ska representera de riktiga fysiska fotodioderna och färgerna på fälten visar vilken färg de registrerar. De runda cirklarna som ligger ovanpå visar bildens pixlar och vilka fotodioder de hämtar sina värden från vid en simpel naiv interpolering.

Titta på pixeln märkt "A". Man kan tänka sig att dess "riktiga" fotodiod är den blå fotodioden som finns i dess övre högra hörn och att den "lånar" informationen från de övriga tre fotodioder (de två gröna uppe till höger och nere till vänster samt den röda nere till höger) vid interpoleringen. Ser man det på detta vis så behöver du x+1 samt y+1 fotodioder för att få en sensor som kan leverera bilder med dimensionerna x gånger y, dvs du behöver bara en rad och en kolumn mer fotodioder. Inte fyra gånger så många!

Min fiktiva sensor nedan har 64 (8 gånger 8) fotodioder och ger ifrån sig en bild på 49 pixlar (7 gånger 7). Av de 64 fotodioderna är 32 gröna, 16 blå och 16 röda.

Detta med extra fotodioder som inte "syns" som pixlar i bild kan man läsa om när man läser de tekniska specifikationerna för en sensor. Då står ofta att den har "effective pixels" (antalet pixlar i bilden) och något i stil med"real/physical pixels" (antalet fotodioder).

Pixel A delar den blå fotodiodens värde med pixel 1, 2 och 4, den övre gröna fotodiodens värde med pixel 2, 3 och 5, den nedre gröna fotodiodens värde med pixel 4, 6 och 7 samt den röda fotodiodens värde med pixel 5, 7 och 8.

Detta är ett problem med interpoleringen. Varje pixel delar information med närliggande pixlar. I fallet med naiv interpolationsmetod de åtta närliggande pixlarna. Detta gör att detaljer som är mycket små, storleksordningen en pixel i bilden, lätt "smetas ut" och blir suddiga. Dessutom kan du lätt få moiréeffekter, både till ljushet och färg då interpoleringen sker efter ett visst mönster. Sammanfaller det olyckligt med ett mönster i bilden (staket, tegelväggar, takpannor etc) uppträder moiré. Ett knep för att undvika moiré är att sudda till bilden, men det vill man sällan så då får man ta till bättre interpoleringsmetoder istället och vips har vi en marknad för bra råkonverterare.
 

Bilagor

  • bayer_2.gif
    bayer_2.gif
    23.3 KB · Visningar: 119
Jag har ytterligare en animation, det är ett ursnitt på 50x50 bildpunkter av en råbild från en Nikon D1.

Den första, grå bilden, är rådatat när man framkallar bilden med dcraw och flaggan -d vilket betyder att bilden är i svartvitt utan interpolering. Så här i efterhand borde jag kanske ha använt flaggan -D som dessutom inte skalar om kanalerna, vilket gör att datat verkligen är rådata. Men det är lätt att vara efterklok...

I den andra bilden har jag lagt över en matris med bayermönster i Photoshop. Detta ska inte ses som en indikation på hur bildens färger blir utan bara som en illustration för att visa hur de olika mörka pixlarna i den grå bilden hör samman med en färg på bayermönstret.

Den tredje bilden är den färdiga bilden som dcraw gav ifrån sig (med flaggan -q 3 (interpoleringsmetoden Adaptive Homogeneity-Directed, AHD, beskriven i PDF och PDF).

Den fina bilden jag nämnde tidigare i tråden såg ungefär ut så här men hade "rätt" färger på den andra delbilden. Jag får leka lite mer i Photoshop någon dag och se om jag orkar fixa det.

Hoppas detta klargjort lite.
 

Bilagor

  • dsc_0489_anim.gif
    dsc_0489_anim.gif
    64.2 KB · Visningar: 119
maxzomborszki skrev:
Men en råfil från en Bayersensor innehåller EN "färgkanal" och i fallet D70 12 bitar "per kanal" och blir då:

3008*2000*1*12 = 72192000 bitar = 9024000 byte = 8,6 Mb
Det bör också nämnas att eftersom man drar ned på antalet nivåer i en komprimerad NEF, precis som nämns i Majids blogg som länkats till tidigare i tråden, kommer man inte upp i dessa 8,6Mb. Sensorn levererar kanske 12 bitar men det reduceras (förstörande).

Enligt Majid så mappas 4096 nivåer (2^12) om till 683 nivåer (ungefär 2^9,4), dvs ungefär 9,4 bitar.

Detta innebär att räkneexemplet efter kvantiseringssteget men innan kompressionen ser ut som följande:

3008*2000*1*9,4 = 56550400 bitar = 7068800 byte = 6,7 Mb.

Därefter appliceras kompressionen som brukar få ned filstorleken till strax över 5 Mb inklusive metadata och inbäddad JPEG-tumnagel. Kompressionen är tydligen en variabellängdskodning (precis som Huffmankodningen jag nämnde tidigare).

Med kompression kan man inte generellt förutspå hur mycket det komprimeras, det beror helt och hållet på indatat. Indata som saknar mönster och upprepningar (man brukar prata om "Information entropy" för att mäta detta) går dåligt att komprimera. En bild däremot som är helt kolsvart eller kritvit går att komprimera väldigt mycket. Därav är det svårt att utöka räkneexemplet att även ta med kompressionen.
 
Jag lekte också med dcraw för ett tag sen fast använde -D flaggan, dvs så "rått" det kan bli. Processade sedan bilderna i Matlab.

Först bilden som den ser ut normalt efter interpolation (100% zoom).
 

Bilagor

  • original.jpg
    original.jpg
    12 KB · Visningar: 109
Sedan RAW-bilden baserat på rådata, med gråskalerepresentation. Jag har sträckt histogrammet annars är bilden nästan svart.
 

Bilagor

  • raw_raw.jpg
    raw_raw.jpg
    59.4 KB · Visningar: 108
Här har jag tilldelat röda, gröna och blå färger till alla pixlar enligt Bayermasken:
 

Bilagor

  • raw.jpg
    raw.jpg
    95.2 KB · Visningar: 107
steelneck skrev:
Spara en 3008x2000 bitmap med 8-bits färgdjup okomprimerat så får du se, och jag köper inte att okomprimerad 12-bitars rådata skulle vara en mindre datamängd än 8-bitar bitmap.

Du får nog läsa på om hur bitplan fungerar. Kan du visa formeln du använder för att få fram dina siffor? Eftersom du har 8 bitar för varje pixel så blir formeln 3008*2000*8.
 
maxzomborszki skrev:
En 3008x2000 bitmap med 8-bitars färgdjup i RGB blir:

3008*2000*3*8 = 144384000 bitar = 18048000 byte = 17,2 Mb

Vi måste skilja på 8 bitar totalt eller 8 bitar per färgkanal, vilket då blir 24 bitar. Vilket var vad du skrev Max.

3008*2000*8 = 5.7 MB

3008*2000*24 = 17.2 MB

Nikon D70 använder 12 bitar totalt, alltså inte per färgkanal.
 
Senast ändrad:
maxzomborszki skrev:
Jag har gjort en egen variant på hans bild och bifogar nedan.

Hittade ingen vit flagga bland mina bilder att bifoga till detta inlägg... Du hade en mycket pedagogisk bild som fick mig att inse att jag var ute å cyklade.
 
Tidy skrev:
Vi måste skilja på 8 bitar totalt eller 8 bitar per färgkanal, vilket då blir 24 bitar. Vilket var vad du skrev Max.
Precis, jag specificerade att det var 8 bitar i RGB (alltså tre kanaler). Jag hade först några olika exempel på vanliga bitmaps för att visa att det finns flera sätt att spara information på och att filstorleken skiljer ganska kraftigt, därefter kom räkneexemplet för D70-råbilden.

En råbild som de vi diskuterat är ju inte RGB utan möjligtvis R, G eller B, dvs motsvarar "en kanal" fast olika färger på de olika pixlarna i kanalen. Någon form av information i filen (metadata) berättar om det är RGGB, BGGR, RGBE eller något annat.

Nikon D70 använder 12 bitar totalt, alltså inte per färgkanal.
Exakt, jag hade det räkneexemplet lite längre ned i det citerade inlägget.
 
ANNONS
Götaplatsens foto – en riktig fotobutik.