Man Linux: Main Page and Category List


       macbethcal - compute color compensation based on measured Macbeth chart


       macbethcal [ -d debug.hdr ][ -p xul yul xur  yur  xll  yll  xlr  ylr  ]
       scannedin.hdr [ ]
       macbethcal -c [ -d debug.hdr ] [ measured.xyY [ ] ]


       Macbethcal  takes  a  scanned  image  or  measurement  set of a Macbeth
       ColorCheckerTM color rendition  chart  and  computes  a  color  mapping
       function suitable as input to pcomb(1).

       In  the first form, macbethcal takes a scanned image of a Macbeth chart
       that  has  been  converted  into  a  Radiance  picture  using  a  fixed
       procedure.   When  used  properly  as  input  to  pcomb,  the  computed
       calibration file will adjust the brightness and color of any  similarly
       scanned  and  converted image so as to best match the original.  If the
       lighting conditions are carefully controlled  (as  in  the  case  of  a
       flatbed  scanner),  it  is  even  possible  to get reliable reflectance
       values this way, at least within 10% or so.  The input picture is named
       on  the  command  line.  The output calibration file will be written to
       the standard output if no file name is given on the command line.

       In the second form, the input is from a file containing measured values
       for each Macbeth color.  This file must contain entries of the form:

       N    x    y    Y

       Where N is the number of the corresponding Macbeth color.  (See back of
       ColorChecker chart for color  names  and  indexing,  but  it  basically
       starts from the upper left with 1 and proceeds in English text order to
       the lower right, which is 24.)  The values x, y and Y are the 1931  CIE
       (x,y)  chromaticity  coordinates  followed  by  the  luminance for that
       color, which can be in any units.  If a  white  value  is  known  (i.e.
       maximum  output  level),  then  it may be given as entry number 0.  The
       entries may be in any order, and comments may be included delimited  by
       a  pound  sign  (’#’)  and  continuing  to  the  end  of  line.   It is
       recommended that measurements be done for all 24 colors, but  the  only
       required  entries  are  the  6  neutral values on the bottom row of the

       Computing a mapping from measured colors  is  usually  more  convenient
       when  calibrating  a particular output device.  This is accomplished by
       printing the picture  macbeth_spec.hdr  (which  may  be  found  in  the
       standard  RADIANCE  library  directory  in  the  lib  subdirectory) and
       measuring the output with a chroma meter or spectrophotometer.

       For a scanned image, the locations of the 24  Macbeth  patches  in  the
       input picture must be known.  If the chart borders are not at the edges
       of the input picture, or the chart has been reversed or rotated  or  is
       uncentered  or at an oblique angle, then it is necessary to specify the
       pixel locations of the corners of the chart with the  -p  option.   The
       corner  postions  (x,y  pixel  addresses  as given by the ximage(1) "p"
       command) are ordered on  the  command  line:  upper-left,  upper-right,
       lower-left,   lower-right   (i.e.   English   text   ordering).   These
       coordinates should be the outside corner  positions  of  the  following

       upper-left     = 1. dark skin
       upper-right    = 6. bluish green
       lower-left     = 19. white
       lower-right    = 24. black

       If  the  chart  has  been  flipped  or  rotated,  simply give the pixel
       positions of the appropriate patch corners, wherever they  are  in  the
       image.  (Note: if the Radiance picture has been flipped or rotated with
       pflip(1) or protate(1), ximage will report the original pixel positions
       if the -c option was not used by the reorienting program(s).  This will
       be wrong, so be sure to use the -c option.)  Macbethcal  can  handle  a
       chart  with  any  orientation  or  perspective  warping  if  the corner
       coordinates are given correctly.  The debug picture output is the  best
       way to check for consistency.  (See the -d option, below.)

       The  -d  option may be used to specify an additional output file, which
       will be a picture comparing the scanned image  processed  according  to
       the computed mapping against the standard Macbeth colors.  It is a good
       idea to use the debug option to check that the color patches are  being
       located  correctly,  and  to  see  how well macbethcal does at matching
       colors.  The center of each patch will show the target color; the  left
       side  of  each  patch  will show the original color, and the right side
       will show the corrected value.  If the  match  works  well,  the  debug
       picture  should  have a sort of "notch on the left" look in each patch.
       Macbeth colors that could not be matched because they were out of gamut
       on  this  device  are  indicated  with diagonal lines drawn through the
       associated target colors.


       Macbethcal computes the color mapping in two stages.  The  first  stage
       uses  the  six neutral color patches at the bottom of the Macbeth chart
       to compute a piecewise linear approximation to the  brightness  mapping
       of each RGB primary.  The second stage looks at all the colors that are
       within the device’s gamut to compute a least-sqaures fit for  a  linear
       color transformation from the measured space into the standard Radiance
       RGB space (as defined by the three primaries in src/common/color.h).

       Thanks to the nature of  inverse  mappings,  this  method  should  work
       either  for  converting  scanned  data  to  match  the original, or for
       preconditioning pictures to be sent to  specific  output  devices.   In
       other  words,  the  same  calibration  file works either for correcting
       scanned images OR precorrecting images before printing.

       A warning is printed if some unsaturated colors are  determined  to  be
       out of gamut, as this may indicate a poor rendition or improper picture
       alignment.  The debug picture will show which colors were  excluded  by
       drawing diagonal lines through their entries.


       It is very important that the same settings be applied when scanning or
       printing other images to be calibrated  with  the  computed  file.   In
       particular,  all  exposure adjustments should be fixed manually, and no
       tweaking of the settings should be  done  along  the  way.   The  final
       result  will  be  best if the original scanned image is not too far off
       from what it should be.  In the case of slide and negative scanners, it
       is  best to apply the recommended calibration file for the type of film
       used, so long as this calibration is fixed and not adjusted on  a  per-
       image basis.


       The  Macbeth  chart is available at most photographic supply stores, or
       may be ordered directly from Macbeth:

       Munsell Color
       405 Little Britain Rd.
       New Windsor, NY  12553-6148
       tel. 1-800-622-2384 (USA)
       fax. 1-914-561-0267

       The chart sells for under $50 US at the time of this writing.


       To compute a  calibration  for  a  FunkyThing  scanner  and  check  the

         ra_tiff -r mbscan.tif mbscan.hdr
         macbethcal -d debug.hdr mbscan.hdr
         ximage debug.hdr

       To apply this computed calibration to another scanned image:

         ra_tiff    -r   another.tif   |   pcomb   -f   -   >

       To compute a calibration file for  the  BigWhiz  film  recorder,  after
       taking measurements of a slide made from macbeth_spec.hdr:

         macbethcal -c macbeth_spec.xyY

       To prepare a picture prior to output on the same film recorder:

         pcomb -f standard.hdr > toprint.hdr

       To use pcond(1) to also adjust the image for human response:

         pcond -f -h standard.hdr > toprint.hdr


       Greg Ward
       Paul Heckbert supplied code for perspective projective mapping


       icalc(1), pcomb(1), pcond(1), pfilt(1), ximage(1)