Avkoda Canons metadata med Exiftool

Exchangeable image file format, Exif, är en öppen standard som innebär att kameratillverkaren bäddar in viktig data i bildfilen. Exempelvis vilket fabrikat och vilken kameramodell. Även kamerainställningar som bländare/ISO/slutartid, datum/tid och geografisk position. Utöver det finns det även någonting som heter MakerNote.

I MakerNote får kameratillverkaren själv bestämma sina egna metadatataggar. Inte heller behöver kameratillverkaren berätta vad taggarna innebär eller är till för och kan t.o.m. välja att kryptera taggarna.

Varför en kameratillverkare inte publicerar en lista över vad taggarna i MakerNote betyder är en gåta. Speciellt när vissa delar innehåller viktig information som exempelvis black level, d.v.s. den förskjutning man måste göra med råfilen för att den inte ska få färgstick.

Black level 2048 till vänster vs black level 0 till höger.

Att felsöka andras kameraproblem försvåras också när man inte vet vilka specifika inställningar som använts eller vilka temperaturer kameran haft.

Det verkar bra märkligt att från kameratillverkarens sida bädda in en mängd information såsom slutarläge, exponeringsräknare eller flimmerreducering för att sedan aldrig låta fotograferna ta del av dem.

Exiftool

Ett populärt program för att analysera metadata är Exiftool och med programmet kan man själv försöka sig på att avkoda just sådana metadatataggar i fältet MakerNote som fortfarande är okända. Exiftool har för Canon en förteckning över vilka taggar som är avkodade. Tänk på att de inte behöver stämma till 100%. Exempelvis taggen som döps till Measured EV 2 som man trodde hade med uppmätt exponeringsvärde att göra har med nyare kameror värden som är helt uppåt väggarna.

Exiftool för Linux

Ladda ned senaste version, packa upp och lägg filen exiftool och dess mapp lib i din lokala användarmapp Hem>.local>bin. Se till att visa dolda filer är ikryssad.

Öppna terminalen någonstans och kontrollera att det är senaste version du har genom att skriva:

$ exiftool -ver

Nu kan du börja analysera dina råfiler. Med kommandot -U visas okända taggar och om man lägger till kommandot -G får man reda på om det rör sig om Exif, MakerNotes eller Composite (taggar som Exiftool själv skapar genom att kombinera vissa befintliga taggar).

Exempel där * syns är vad som kallas för wildcard. Har man 100 råfiler i CR2-format behöver man inte beskriva alla vid namn utan alla filer som har CR2 i slutet kommer användas. Fungerar i Linux men ej i Windows.

$ exiftool -U -G *CR2

För att få ned allt till textfiler kan man lägga till -w för write.

out är mappnamnet och  %f_%e.txt innebär att varje textfil får samma namn som råfilens namn.

exiftool -U -G -w out/%f_%e.txt *CR2

Linux: diff i Terminalen

Öppna Terminalen i den mapp där du har dina textfiler och välj två som du vill analysera skillnaden hos.

$ diff _M7D0195_CR2.txt _M7D0196_CR2.txt
Kommandot diff i Linux för att jämföra skillnader.

För att exportera allt till en textfil lägger man till följande i slutet:

$ diff _M7D0195_CR2.txt _M7D0196_CR2.txt > Ny-textfil.txt

Windows: fc i CMD

För att jämföra textfilernas skillnad kan man öppna kommandotolken, CMD, i den mapp man har sina textfiler liggandes. Därefter skriver man när man jämför textfilerna:

fc _M7D0195_CR2.txt _M7D0196_CR2.txt
Kommandot fc i Windows för att jämföra skillnader.

För att exportera allt till en textfil lägger man till följande i slutet:

fc _M7D0195_CR2.txt _M7D0196_CR2.txt > Ny-textfil.txt

Exempel från verkligheten

R6 flimmerreducering

Jag tog totalt 40 bilder med flimmerreduceringen från en R6 av/på.

Därefter jämförde jag de okända taggarna och kunde se att en tagg, Canon File Info 0x0020, ändrade sig i takt med att jag aktiverade och inaktiverade flimmerreduceringen. Genom att lägga till kommandot nedan kunde jag isolera taggen för att få en enklare överblick.

 |grep "File Info 0x0020"

Det blev rätt tydligt att taggen hade med flimmerreduceringen att göra.

exiftool -U /home/macgyver/Publikt/Canon/Exiftool/0x0020/*CR3 |grep "File Info 0x0020"


Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 0
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1
Canon File Info 0x0020          : 1

Därefter postade jag informationen i Exiftools forum och bidrog till att taggen accepterades av Exiftool.

Mappa bort laserskadade pixlar med RawTherapee

Kamerasensorer är känsliga för laser och det räcker med en kort exponering för att det ska bli en permanent skada som kräver att sensorn byts ut.

Med en ny kamera kan det vara värt att betala för att byta sensor, men har man en äldre kanske det är både enklare och mer ekonomiskt att ersätta den med en begagnad likvärdig kamera.

Är skadorna på sensorn begränsade skulle man kunna fortsätta använda kameran bara genom att mappa bort, d.v.s. gömma, de defekta pixlarna.

Råkonverteraren RawTherapee har just en sådan funktion. Med hjälp av en textfil kan man skriva in de defekta pixlarnas koordinater och därmed svartlista dem från att användas. Textfilen måste döpas till samma namn som det som RawTherapee visar.

Exempel med Canon EOS 5D IV

I manualen till RawTherapee står följande:

RawTherapee can correct a list of bad pixels (pixels that are always black or white or stuck at one color) for your particular camera model. To do this, you need to write a text file with the absolute raw coordinates of these pixels: each line specifies a pixel with x<space>y<return> positions.

Man behöver alltså identifiera de trasiga pixlarna och skriva in dem i en textfil. Textfilen ska ha samma namn som det namn som visas i RawTherapee.

I detta fall blir det alltså:

Canon EOS 5D Mark IV.badpixels

Eftersom RawTherapee dessutom beskär råfilen något, 4 pixlar med Bayer-sensor och 7 pixlar för X-Trans-sensor (Fujifilms egna sensor) behöver man skriva in förskjutningen på den första raden i textfilen. I mitt fall rör det sig om en Canon EOS 5D IV som använder den vanliga Bayer-sensorn vilket innebär att jag sätter 4 överst. Därefter börjar man skriva in de skadade pixlarnas positioner.

Det kan underlätta att stänga av vitbalansen i RawTherapee.

Positionerna får man lättast genom att öppna råfilen i RawTherapee och välja en neutral profil. Under Demosaicing väljer man Mono eller None. Ute till vänster får man positionerna i x och y. Skriv in dessa i textfilen.

Testa nu att det fungerar. Spara textfilen och se till att den ligger i en mapp dit Dark-frames directory pekar. Starta om RawTherapee varje gång du uppdaterat textfilen.

Råfiler från Dpreview-användaren ash92, inklusive textfil.

Tips och tricks

Fotografera någonting som är rosa för att få en jämnare övergång mellan de olika pixlarna. Märks när man stänger av vitbalansen och väljer None i Demosaicing. Mer detaljer hur man går till väga finns på engelska här.

För laserskador som sträcker sig över hela linjer och kolumner kan man använda Excel eller LibreOffice för att lägga in de två första koordinaterna och sedan dra ned fältet för att generera tusentals positioner på några sekunder.

Fördelar och nackdelar med DNG

DNG står för Digital Negative och är Adobes filformat. Det tillkom 2004 i ett försök att standardisera råfiler. Någonting som delvis lyckats. Kameratelefoner och drönare är exempel där DNG slagit igenom helt medan stora kameratillverkare som Canon, Nikon och Sony fortsätter att köra med sina egna format.

Från Adobes whitepaper 2004 som riktades till kameratillverkarna:

”Today, there is no accepted standard for storing raw camera files; not only do camera manufacturers create their own formats, but these formats often vary among cameras created by a single manufacturer.

”I dag finns det ingen vedertagen standard för lagring av råfiler; inte nog med att kameratillverkarna skapar sina egna format, utan dessa format varierar ofta mellan kameror från en och samma tillverkare.”

Problemet finns än i dag där kameratillverkarna släpper sina råformat men sedan helt vägrar att släppa fritt hur rådatan och metadatan ska utläsas, undantaget GoPro. Nikon valde att vara värst genom att kryptera vitbalansfältet i metadatan för att stänga ute tredjepartsprogram. Nikons svar var att utvalda aktörer fick tillgång till hur man bearbetar Nikons råformat. Då ska man känna till att Nikon själv förstört sina användares råfiler med dåligt kodade program. Lärdomen är att aldrig använda ett program som ändrar i själva råfilen.

Adobe DNG Converter

Det finns mängder av program som kan konvertera råfiler till DNG-filer. Det mest kända är Adobe DNG Converter som finns för Windows och OS X.

Som utgångsläge konverterar det en råfil till en komprimerad DNG-fil med rådata. Rådatan ska dock vara densamma.

Optiska svartfält precis som Canons originalfil. Samma pixeldimension. Behöver färginterpoleras.

Väljer man däremot förstörande komprimering sparas ingen rådata längre i DNG-filen. Dessutom beskärs bilden något och man kan snarare betrakta den färdiga filen som en JPEG i stället.

Förstörande komprimering där artefakter syns i himlen. Optiska svartfält är borta. Ingen färginterpolering behövs då filen redan är så gott som färdig.

Adobe DNG Converter klarar inte av att konvertera alla råfiler från exempelvis Canons Dual Pixel Raw (två råfiler i en CR2-fil eller CR3-fil) eller Canon Raw Burst (flera råfiler i en CR3-fil).  DNGLab klarar det men måste konvertera till enskilda DNG-filer.

Jämförelse av metadata mellan CR3 och konverterad DNG

Med Canons nya CR3-format följer enbart en bråkdel av metadatan med vid en konvertering av Adobe DNG Converter till DNG. En CR3-fil från R6 innehåller 9400 rader metadata medan en konverterad till DNG innehåller 160 rader metadata.

Fördelar med DNG

  • Ett öppet format som vem som helst kan använda. Stöds av många råkonverterare
  • Det finns en inbyggd hash för att kunna kontrollera om filen är hel
  • Ändringar kan skrivas i filen. Enklare filhantering, men kan också bädda för skrivfel. Att ha en sidofil med inställningarna är säkrare

Nackdelar med DNG

  • Vid konvertering kan man gå miste om viktig metadata
  • Kameratillverkarnas programvara, exempelvis Canon Digital Photo Professional stöder ej konverterad DNG
  • Det är inte uppenbart för den genomsnittlige användaren om en DNG-fil innehåller rådata eller ej
  • Vissa tävlingar vill kunna granska ursprungsfilen, och då duger inte konverterad DNG
  • Specialfiler såsom Dual Pixel Raw eller Canon Raw Burst måste konverteras till enskilda DNG-filer

 

 

Svårigheten med att identifiera rätt objektiv för Canon

Har du tagit en bild för att sedan i datorn upptäcka att objektivet som syns där inte stämmer med verkligheten? Det beror på att objektividentifiering tidigare varit ett träsk där ingen standard funnits.

I fallet Canon har olika modeller av objektiv fått samma identifieringsnummer och tredjepartsobjektiv har åkt snålskjuts på Canons befintliga identifieringsnummer.  Mellanringar rapporteras inte alls och teleförlängare med samma optiska uppbyggnad klumpats ihop. Först under senare tid har det börjat klarna upp.

Lite historia

Canons EF-objektiv började 1987 och varje modell numrerades digitalt, se kronologin för objektiven hos EFLens.com eller hos Canon Lens Museum. De olika numren finns samlade hos exiv2. Canons första EF-objektiv EF 50/1.8 börjar med nr 1. Numren verkar inte slaviskt följa tiden för när de släpptes.

EF-objektiven släpptes innan Canon hade skapat någon digital systemkamera som först kom 1995. Då i samarbete med Kodak där Canon stod för kamera och Kodak för det digitala bakstycket. En av kamerorna från 1995 var Canon EOS DCS 3c. I dess bildfiler hittar man inga identifieringsnummer utan enbart brännvidd.

Brännvidden i millimeter.

1998 släpptes Canon EOS D2000 som också den var ett samarbete mellan Kodak och Canon. I dess bildfiler finner man också där enbart brännvidden.

Från Kodak DCS 520c, i praktiken samma kamera som Canon EOS D2000.

Vill man se hur Canons version av kameran, EOS D2000, och inte enbart Kodaks, DCS 520c, sparade sina data finns en råfil hos raw.pixls.us inklusive Exif.

Först år 2000 släppte Canon sin helt egna digitala systemkamera, Canon EOS D30. I Exif hade då även MakerNotes dykt upp där tillverkaren själv fick ha egna fält fyllda med egna data. I Canons MakerNotes ingår en stor mängd information inklusive numret på det objektiv som används och då under taggen LensType.

Under taggen LensType står nr 190
Här har LensType, samt alla andra taggar gjorts läsliga i programmet exiv2

Några år senare blev det åter dags att skapa en ny tagg. Denna gång med namnet LensModel där objektivet eller objektivet plus teleförlängaren står i klartext.

Problematik

Att objektiven numreras i taggen Lenstype borde innebära att varje objektiv går att identifiera. Tyvärr har olika modeller blandats ihop som exempelvis flertalet av modellerna EF 75-300/4-5.6 där vissa modeller fått samma LensType-nummer. Inte ens Canon själv klarar av att särskilja dem åt om man ser till hur Canons program Digital Photo Professional hanterar bilderna.

Utöver det begagnar tredjepartstillverkare som Sigma och Tamron redan befintliga och upptagna LensType-nummer för sina egna modeller.

Canon EF 85/1.2L USM som har LensType-nummer 137 delar samma nummer med följande objektiv från tredjepartstillverkare:

  • Sigma 18-50mm f/2.8-4.5 DC OS HSM
  • Sigma 50-200mm f/4-5.6 DC OS HSM
  • Sigma 18-250mm f/3.5-6.3 DC OS HSM
  • Sigma 24-70mm f/2.8 IF EX DG HSM
  • Sigma 18-125mm f/3.8-5.6 DC OS HSM
  • Sigma 17-70mm f/2.8-4 DC Macro OS HSM | C
  • Sigma 17-50mm f/2.8 OS HSM
  • Sigma 18-200mm f/3.5-6.3 DC OS HSM [II]
  • Tamron AF 18-270mm f/3.5-6.3 Di II VC PZD
  • Sigma 8-16mm f/4.5-5.6 DC HSM
  • Tamron SP 17-50mm f/2.8 XR Di II VC
  • Tamron SP 60mm f/2 Macro Di II
  • Sigma 10-20mm f/3.5 EX DC HSM
  • Tamron SP 24-70mm f/2.8 Di VC USD
  • Sigma 18-35mm f/1.8 DC HSM | A
  • Sigma 12-24mm f/4.5-5.6 DG HSM II
  • Sigma 70-300mm f/4-5.6 DG OS

Den programvara man använder för att fixa till bilderna behöver alltså inte enbart klara av att läsa vilket LensType-nummer som objektivet har utan även ha en lista med tredjepartsobjektiv som delar numren med Canons objektiv. För att avgöra vilket det rör sig om kan programvaran läsa av maximal bländaröppning och brännviddens ändlägen för att kunna matcha rätt objektiv.

För Canons vita teleobjektiv använde Canon fram till EF 800/5.6L IS USM som släpptes 2008 samma LensType-nummer för själva objektivet såväl som för objektivet tillsammans med teleförlängare. Vad innebär det i praktiken? Jo, att programvaran man efteråt använder behöver ta hänsyn till vilken brännvidd som också registreras. Tyvärr kommer inte programvaran kunna avgöra vilken version det är på teleförlängaren varför fel objektivkorrigeringsprofil kan komma att väljas. Exempel:

  • EF 800/5.6L IS USM har LensType 249
  • EF 800/5.6L IS USM + x1.4 har LensType 249
  • EF 800/5.6L IS USM + x1.4 III har LensType 249
  • EF 800/5.6L IS USM + x2 har LensType 249
  • EF 800/5.6L IS USM + x2 III har LensType 249

Först med EF 70-200/2.8L IS II USM från 2010 rättades problemet nästan till där olika kombinationer av objektiv och teleförlängare fick egna LensType-nummer, även om Canon inte tog hänsyn till versionerna på teleförlängarna. Exempel:

  • EF 70-200/2.8L IS II USM har LensType 251
  • EF 70-200/2.8L IS II USM +x1.4 har LensType 252
  • EF 70-200/2.8L IS II USM +x1.4 III har LensType 252
  • EF 70-200/2.8L IS II USM +x2 har LensType 253
  • EF 70-200/2.8L IS II USM +x2 III har LensType 253

LensModel

Med Canon EOS 5D introducerades en ny Canontagg, LensModel. Till skillnad från LensType som bara har ett nummer står det i klartext i taggen LensModel. Här har det blivit lättare för tredjepartstillverkare då de kan skriva Sigma eller Tamron i detta fält.

RFLensType

Med Canons senaste RF-fattning introducerades även en ny tagg i fältet Makernotes. Alla RF-objektiv har ett eget RFLensType-nummer men delar på ett gemensamt LensType-nummer som är 61182.

Canon RF 50/1.2L USM har det gemensamma LensType-numret 61182 och det individuella RFLensType-numret 287. Detta kan ställa till det för program som inte är uppdaterade och som därför tror det ska använda 61182 oavsett vliket RF-objektiv det än rör sig om. Det kan även bli som så att programmet börjar titta efter maximal bländaröppning och brännvidd för att gissa sig till vilket objektiv det är.

Mellanringar

Rapporteras ej vidare till bildfilerna vilket innebär att man inte kan veta om en mellanring använts eller ej. Det går därmed ej heller att applicera rätt objektivkorrigering då vinjetteringen blir annorlunda.

Vad kan man själv göra?

Ofta inte så mycket mer än att själv ändra i bildfilernas metadata. Men, med exempelvis exiv2 som darktable använder kan man via en konfigurationsfil se till att få rätt namn på objektivet.

Exempel med Sigma 500/4.5 APO EX DG HSM:

Detta objektiv rapporterar 500mm och använder LensType-nummer 172. Med hjälp av konfigurationsfilen .exiv2 i hemmappen i Linux eller exiv2.ini i användarmappen i Windows kan man se till att skriva LensType-numret och vad det nya namnet ska vara, exempelvis 172=Sigma 500/4.5 APO EX DG HSM.