User Tools

Site Tools


doc:appunti:hardware:canoscan_9000f_mark_ii_positive_scan

This is an old revision of the document!


Photo scan with GNU/Linux and Canon CanoScan 9000F Mark II

See the page Canon CanoScan 9000F Mark II.

Considering the scanner capabilities (A4 scan surface, 9600 dpi, 48 bit), you should consider to have a proper software suite to hanle all the workflow. Debian 10 ships Gimp 2.10, which is capable of handling TIF images with 16 bit per color channel. Also you need a 64 bit system to handle very huge files, 8 Gb of RAM is the bare minimum you should consider. The Imagemagick 6.9 suite can handle color profiles and is capable of 48 bit.

Using scanimage

With the command below, you will get a full-page scan ad 1200 dpi and 48 bit color (16 bit per color channel). The RGB values received from the sensor are stored as RAW values inside the TIFF image, without any specific interpretation of color space. By adding the --icc-profile to the scanimage invocation, we are just asking to embed the color profile into the image, wihout altering the pixel data values. That color profile will be eventually used by the software (e.g. GIMP) to correctly interpretate the image colors.

#!/bin/sh
 
FORMAT='tiff'
RESOLUTION='1200'
SCANNER_PROFILE='/usr/local/share/color/icc/canon9000fmarkii.icc'
FILENAME="$(date +%Y-%m-%d_%H%M%S)"
 
scanimage --device-name "pixma:04A9190D" \
    --source 'Flatbed' \
    --resolution "$RESOLUTION" \
    --format "$FORMAT" \
    --mode '48 bits color' \
    --icc-profile "$SCANNER_PROFILE" \
    > "${FILENAME}-${RESOLUTION}.$FORMAT"

When you will open the image into GIMP, you will asked if you want to convert the pixel values from the custom Canon color space, to the standard sRGB color space. Keeping the image into its original format (16 bit and original color space) is the best option if you want to keep all the numerical data for future image manipulation. Converting to another color space (sRGB is the one suggested by GIMP) will speed-up the handling of the image, but it is an lossy one-way operation due numerical approximation errors and due differences in color space extensions.

The GIMP is rather good in handling various image formats with custom color profiles, but beware that not all the viewers are equally capable. E.g. the Geeqie 1.4 image viewer does not apply custom ICC profiles to JPEG images, so it will display images as RAW data (bad colors). Images for the web generally do not embed a custom color profile, they are expected to be into the sRGB color space, compressed as JPEG 24 bit (8 bit per channel).

The Canon 9000F ICC profile

An ICC Profile specifies a set of rules to transform the graphics data (the color values of each pixel) from the source (the scanner in our case) to a target (e.g. the scren). The mappings may be specified using tables, to which interpolation is applied, or through a series of parameters for function transformations.

A color profile for a scanner can be build using a color chart and a calibration software. A very poular color chart is the ColorChecker (known also as the Macbeth ColorChecker, now X-Rite), of which there are also many imitations. In the GNU/Linux world you can use the darktable-chart tool provided by the darktable package.

An ICC profile is generally shipped as a file with the ICC or ICM extension (which are actually the same file format).

For the Canon CanoScan 9000F Mark II there is, available on the net, a color profile made by an unknown author, here you can find a copy: canon_9000f_mark_ii_icc.tgz. Originally I found the file on archive.org.

Imagemagick tools

The Imagemagick package provides several tools that can be used for several tasks:

  • Inspect the file format.
  • Convert to and from various formats.
  • Apply, change or strip color profiles.

Inspect a file

This command display the image format, bit depth, colorspace, embeddedd ICC profile, max and min values of the color components, etc.

identify -verbose image.tiff
Image: image.tiff
  ...
  Colorspace: sRGB
  ...
  Depth: 16-bit
  ...
  Channel statistics:
    Pixels: 1572864
    Red:
      min: 1024  (0.0156252)
      max: 64005 (0.976654)
      mean: 22070.8 (0.336779)
      standard deviation: 20844.1 (0.318061)
      ...

When you convert an image from a colorspace to another, you can check how much the max and min values for each channel have changed, etc.

You can also extract just the parameter you need:

convert image.tiff -print "%[colorspace]\n" null:
convert image.tiff -print "%[profiles]\n" null:
convert image.tiff -print "%[profile:icc]\n" null:

Remove the color profile from an image

This command will strip any comment and profile from a source image, it does not alter the pixel data values (WARNING: it will remove the Exif.Photo.UserComment comment too):

convert image.tiff -strip image-no-profile.tiff

Add a color profile to an image

This command will strip any comment and profile from a source image, then it adds a color profile from an ICC file, embedding it into the image, without altering the pixel data values (WARNING: it will remove the Exif.Photo.UserComment comment too):

convert image.tiff -strip -profile canon9000fmarkii.icc image-profile-canon.tiff

Convert an image to another color profile

The following command will ignore any embedded profile (-strip), apply the Canon custom profile, than convert the image to the standard sRGB color profile (color space). Finally it removes from the resulting image any metadata about profile:

convert image.tiff -strip -profile canon9000fmarkii.icc -profile sRGB.icc -strip image-srgb.tiff

The resulting image will not have any metadata about color profile, so the sRGB will be assumed by default. The pixel data values are converted from the original Canon colorspace to the sRGB one (one-way lossy operation). NOTICE: you have to provide the canon9000fmarkii.icc file (see above) and the sRGB.icc one; the Debian package colord-data provides le latter into /usr/share/color/icc/colord/.

Extract the embedded color profile from an image

This command will extract the ICC file embedded into a file:

convert image.tiff image-color-profile.icc

It is not possible to extract the ICC file if the colorspace is just declared into the metadata, but not embedded as a profile. In this case you can search instead into the /usr/share/color/icc/colord/ folder for well-known ICC files installed by the colord-data package.

Set a different colorspace

This command will change the colorspace of an image. Just the metadata is changed, no data conversion is performed:

convert image.tiff -set colorspace RGB    image_rgb.png
convert image.tiff -set colorspace CIELab image_lab.tiff

While the source image is into the sRGB colorspace, the created files will be into the RGB and CIELab ones:

convert image.tiff     -print "%[colorspace]\n" null:
# >>> sRGB
convert image_rgb.png  -print "%[colorspace]\n" null:
# >>> RGB
convert image_lab.tiff -print "%[colorspace]\n" null:
# >>> CIELab

NOTICE that some combinations of image format and colorspace are not allowed, e.g. you cannot create a TIFF file into the RGB colorspace, or a PNG file into the CIELab colorspace.

Convert to a different colorspace

This command will update metadata about the used colorspace, pixel data values are transformed into the new colorspace:

convert image.tiff -colorspace CIELab image_lab.tiff

Some known colorspaces are: CIELab, sRGB.

An ICC color profile is not embedded into the file, so the software used to open the resulting file must be aware of that colorspace by itself.

doc/appunti/hardware/canoscan_9000f_mark_ii_positive_scan.1577860928.txt.gz · Last modified: 2020/01/01 07:42 by niccolo