Formats d'image - RAW

Cette page est en cours d'élaboration.

 

:: Accueil

:: Formats d'image

Introduction

Le format Raw (en français, brut) est un format d’image dans lequel les valeurs sortant du capteur sont directement stockées.

Il permet de récupérer une image n'ayant subi aucun traitement de la part de l'appareil photo. On peut notemment citer le dématricage, la balance des blancs, le contraste, la réduction de bruit ou même une compression à perte telle que le JPEG.

En général, ces images ne peuvent pas être directement visualisées. Il faut en effet un autre logiciel qui effectue la conversion nécessaire pour donner une image correcte. Parmi ces logiciels, on citera notemment :

Ce dernier point ne sera pas traité ici et on ne s'interessera qu'à la lecture de ces images.

Les formats Raw

Il n'y a pas un format Raw unique. Au contraire, chaque constructeur possède son (ou ses) propre format.

Ceci ne serait pas trop problématique si chaque constructeur publiait le format de ses images, mais ce n'est pas le cas ! Chaque constructeur garde jalousement son format et il est alors necessaire d'effectuer un reverse engineering sur chaque fichier.

Dave Coffin (l'auteur de DCRaw) a fait à ce propos un travail énorme, et beaucoup d'éditeurs de logiciels se sont inspirés de son travail.

On peut retenir que beaucoup de constructeur ont utilisé un format TIFF comme base pour leur format propre. C'est le cas de Canon (cr2) et de Nikon (nef).

Adobe, concerné par ce problème dans Camera Raw, a créé une spécification pour un nouveau format Raw, le DNG.

Canon Raw v1(CRW)

Il s’agit d’un format ancien utilisé pour le 10D et le 300D.

Il ne contient pas d’Exif (et donc pas de MakerNote).

Cependant les fichiers CRW sont toujours générés accompagnés d’un fichier THM. Ces fichiers sont au format JPEG et contiennent l’Exif complet.

Quand ces fichiers sont absents, il est tout de même possible de récupérer quelques informations dans les metadonnées contenues dans le fichier CRW (format CIFF).

Canon Raw v2(CR2)

Les appareils les plus récents de chez Canon utilisent ce format.

Il s’agit d’un fichier TIFF qui contient 4 IFD.

Des informations de version et un pointeur vers l'image Raw sont placés entre l'entête TIFF et le premier IFD. L'entête de ce type de fichier est donc :

CR2 File header
        
0x00    2    Byte Order 
               - 'II' for Little Endian (Intel byte order)
               - 'MM' for Big Endian (Motorola byte order)
0x02    2    TIFF Magic word (0x002A)
0x04    4    First TIFF IFD offset (0x00000010)
0x08    2    CR2 Magic word ('CR')
0x0A    1    CR2 Major version
0x0B    1    CR2 Minor version
0x0C    4    RAW IFD offset
        

Une entête typique d'un fichier CR2 est donc la suivante :

4949 2A00 1000 0000 4352 0200           | II*.....CR..

Le premier IFD contient une image RGB moyenne résolution (environ 1/4 de la taille réelle) compressée en JPEG ainsi que l'EXIF et le MakerNote.

Le deuxième IFD contient une image RGB réduite (par ex., 160x120 pixels) compressée en JPEG.

Le troisième IFD contient une image RGB réduite (par ex., 384x256 pixels) non compressée (malgré le tag TIFF Compression qui indique une compression JPEG) et sur laquelle la balance des blancs n'a pas été appliquée.

Le quatrième IFD contient l'image RAW compressée en JPEG LossLess. L'offset RAW IFD contenu dans l'entête du fichier pointe vers le début de cet IFD. Cette image, une fois décodée, peut éventuellement être découpée en bandes verticales (c'est le cas par exemple, du 350D ou du 5D). Chaque bande est alors codée une par une de gauche à droite. C'est le tag 0xc640 de l'IFD RAW qui indique cette spécificité. Si ce tag est absent, l'image est d'un seul bloc (par exemple, le 20D). S'il est présent, il indique le nombre de bandes verticales et les largeurs de celles-ci. Voici deux exemples :

Tag 0xC640 de l'IFD RAW du 1DsMarkII
        
2  1680  1748

Ceci indique que l'image sera découpée en trois bandes verticales:
  - les deux premières de 1680 pixels de large,
  - la dernière de 1748 pixels de large.
        
Tag 0xC640 de l'IFD RAW du 350D
        
1  1758  1758

Ceci indique que l'image sera découpée en deux bandes verticales:
  - la première de 1758 pixels de large,
  - la dernière de 1758 pixels de large.
        

Nikon Electronic Image Format (NEF)

Il s’agit d’un fichier TIFF qui contient 1 IFD principal et 2 subIFDs.

L'IFD principal contient la thumbnail (une image RGB réduite) non compressée ainsi que l'EXIF et le MakerNote.

Le premier subIFD contient l'image RGB complète compressée en JPEG.

Le deuxième subIFD contient l'image RAW compressée en JPEG Lossless (ou non compressée suivant l'option de sauvegarde selectionnée sur l'appareil).

Minolta Raw File (MRW)

Ce format est composé de différentes sections :

  • 'MRM' : Entête du fichier,
  • 'PRD' : Picture Raw Dimensions,
  • 'WBG' : White Balance Gains,
  • 'RIF' : Requested Image Format,
  • 'TTW' : TIFF Tags W?,

Les valeurs sont stockées dans le byte order Big Endian (Motorola order).

MRM : Raw File Header
        
0x00    4    '\0MRM' Magic word
0x04    4    Raw image offset from the beginning of the file
        
'PRD' : Picture Raw Dimensions
        
0x00    4     '\0PRD' Magic word
0x04    4     Size of the following data (0x18)
0x08    8     String that identify the camera body
0x10    2     Sensor size Y in pixels
0x12    2     Sensor size X in pixels
0x14    2     Image size Y in pixels
0x16    2     Image size X in pixels
0x18    1     Data bit precision (12 or 16 whether image is packed or not)
0x19    1     Pixel bits precision (always 12 bits)
0x1A    1     Storage method
0x1B    1     Unknown
0x1C    2     Unknown
0x1E    2     Bayer pattern (0x0001:RGGB, 0x0004:GBRG)
        
'WBG' : White Balance Gains
        
0x00    4     '\0WBG' Magic word
0x04    4     Size of the following data (0x0C)
0x08    4*1   Factors F (R,G1,G2,B)
0x0C    4*2   Gains Gr (R,G1,G2,B)

To compute floating values Gf from integer values :
    Gf = Gr / 2^(6+F)
        
'RIF' : Requested Image Format
        
0x00    4     '\0RIF' Magic word
0x04    4     Size of the following data (0x40)
0x08    1     Unknown        
0x09    1     Saturation [-3;+3]
0x0A    1     Contrast [-3;+3]       
0x0B    1     Sharpness
              -1 : Soft
              0  : Normal
              +1 : Hard
0x0C    1     White Balance Mode
              0 : Auto
              1 : Daylight
              2 : Cloudy
              3 : Tungsten
              4 : Fluorescent
0x0D    1     Subject Program
              0 : None
              1 : Portrait
              2 : Text
              3 : Night Portrait
              4 : Sunset
              5 : Sports Action
0x0E    1     CCD Sensitivity in APEX unit
0x0F    1     Color Mode
              0 : Normal color
              1 : B&W
              2 : Vivid color
              3 : Solarization
              4 : AdobeRGB       
0x10    48    Unknown
0x40    1     Color Filter [-3;+3]        
0x41    1     BW Filter [0;+10]           
0x42    6     Unknown
        
'TTW' : Tiff Tags W?
        
0x00    4     '\0TTW' Magic word
0x04    4     Size of the following data
0x08    x     Exif binary block ala JPEG (TIFF Image)
        
'PAD' : PADding
        
0x00    4     '\0PAD' Magic word
0x04    4     Size of the following data
0x08    x     Padding data for alignment of image data.
        

L'image RAW peut être stockée sous deux formes : Packed ou Unpacked.

En mode 'Packed', les douze bits de données sont mis bout à bout. Par exemple, les pixels 0x123 et 0x456 seront stockés sur 3 octets 0x123456.

En mode 'UnPacked', les douze bits de données sont écrits dans des mots de 16 bits. Les deux pixels précédents 0x123 et 0x456 seront donc stockés sur 4 octets 0x01230456.

Fuji Raw File (RAF)

Ce format RAW est généré par les appareils Fuji. Il s'agit d'un format propriétaire (pas de TIFF).

Il commence toujour par une entête globale.

RAF File Header
        
0x00    16    'FUJIFILMCCD-RAW ' Magic word
0x10    4     '020x' Format version 
              0200: Fuji S2
              0201: Fuji S3
0x14    8     Camera number ID
0x1C    32    Camera body name
        

Juste après ceci, suit une autre entête qui dépend de l'appareil (ou plutot de la version du fichier).

La version 01.00 de celle-ci se retrouve dans les fichiers du Fuji S3 Pro par exemple.

RAF File subHeader (01.00)
        
0x00    4     '0100' Version 
0x04    5*4   Unknown
0x18    4     Jpeg Image data offset
0x0C    4     Jpeg Image data byte size
0x20    4     First RAW image header offset
0x00    4     First RAW image header byte size;
0x00    4     First RAW image data offset
0x00    4     First RAW image data byte size
0x00    3*4   Unknown
0x20    4     Second RAW image header offset
0x00    4     Second RAW image header byte size;
0x00    4     Second RAW image data offset
0x00    4     Second RAW image data byte size
0x00    3*4   Unknown
        

Le Fuji S3 est un appareil particulier dans le sens où il possède un capteur bien spécifique, le SuperCCD SR, qui contient deux photodiodes par pixel, la première étant utilisé pour les faibles lumières et la deuxième pour capter les hautes. De plus ce capteur est tourné de 45° ce qui fait qu'il faudra effectuer une rotation sur l'image lue dans le fichier.

Cet appareil présente deux modes de capture. Dans le mode 'Basic', seule la moitié des photodiodes est utilisée. L'image est alors indexée par la première série d'offsets (First Raw image). Dans le mode 'Enhanced', la totalité des photodiodes est utilisée et deux images raw sont alors générées : la première (First RAW Image) contiendra les basses lumières et la seconde (Second RAW Image) contiendra les hautes lumières.

La version 01.59 de cette entête se retrouve dans les fichiers du Fuji S2 Pro par exemple.

RAF File subHeader (01.59)
        
0x00    4     '0159' Version 
0x04    5*4   Unknown
0x18    4     Jpeg Image data offset
0x0C    4     Jpeg Image data byte size
0x20    4     RAW image header offset
0x00    4     RAW image header byte size;
0x00    4     RAW image data offset
0x00    4     RAW image data byte size
        

Les entêtes des images RAW (RAW image header) sont formées d'une suite de tags donnant diverses informations que je n'ai pas encore identifiées. Les 4 premiers octets de ces entêtes donnent le nombre de ces tags. Elles ont donc le format suivant :

Raw image header
        
0x00    4     Number of tags in this header 
0x04    x     N*Tag


Tag format

0x00    2     ID
0x02    2     N = Size of the following data in bytes
0x04    N     N bytes of data
        

Digital Negative (DNG)

Mise à jour : 13/01/2006
Valid XHTML 1.1!
Valid CSS!