Linux printer color calibration

Linux printer color calibration

Using a scanner to create an ICC profile

Printer Calibration

I print pictures on my color laser printer (Canon LBP612CDW). When I needed to print a passport photo I found that the skin tones were off; there was a strong red shift in the skin.

In order to create better prints I calibrated my printer profile with the aid of a flat-bed scanner.

I work in Linux (Ubuntu 22.04) and preformed this calibration using ArgyllCMS, a freely available color calibration tool for Linux. ArgyllCMS was available directly from the Ubuntu repository.

The goal was to have a resonable physical copy of an image for submission with a passport application. First I show a scan of the first print, then a scan of the photo printed with a custom ICC profile, followed by the commands I used to generate an ICC calibration for the printer in Linux.

Photo not color corrected
Scanned un-calibrated passport photo. Note that my skin is strongly red tinted.
It can be difficult to see the difference on a screen, here is its historgram.
Un-corrected histogram
A histogram of the un-corrected photo. Note the gap between the red and green peaks. This gap is largely reduced in the histogram for the calibrated print. (shown later)
Here are the same image following printer calibration.
Color calibrated photo
Following generation and application of an ICC profile my skin had more natural colors.
Color corrected histogram
A histogram of the scanned color corrected photo shows the gap between the red and green peaks is lessened.

The ICC profile applied to the image print greatly improved the print. The steps I used to create the profile follow.

Argyll's documentation indicates this is not recommended method for calibration, but it served my purpose and greatly improved the quality of the color prints on my laser printer.

The first step was to install ArgyllCMS. This software was available in the standard ubuntu repositories. Once installed I could generate images to use for calibration with a scanner. The following two commands were executed. (documentation for the programs can be found on the Argyll website linked at the top)

targen -v -d2 -f1924 Canon612
printtarg -v -s -iSS -pLetterR Canon612

These command result in a Letter sized postscript document for printing with two pages (-d2), "Canon612.ps". Additional outputs included "Canon612_01.cht" and "Canon612_02.cht" which are needed in a later command. These additional files correspond to the two different pages in the print file. "Canon612" is an identifier for the files that I chose arbitrarily.

"Canon612.ps" is printed on the target printer. These pages contain rectangular color patches that the software will interpret to adjust the colors. These two prints need to be scanned for the changes in color between the prints and orginal document to be interpreted. The printed and scanned files were named "Canon612_1.tiff" and "Canon612_2.tiff". There is one image for each page of the original document.

I used a work-arround for my lack of scanner profile in the next step. I just assumed the calibration of my scanner was reasonable and substituted a reference calibration from Argyll for my scanner's profile, “/usr/share/color/argyll/ref/sRGB.icm”. The first page files use “-c” option and the second page uses “-ca”.

scanin -v -c Canon612_1.tiff Canon612_01.cht /usr/share/color/argyll/ref/sRGB.icm Canon612
scanin -v -ca Canon612_2.tiff Canon612_02.cht /usr/share/color/argyll/ref/sRGB.icm Canon612

These commands used the scanned pages, the chart files generated in the first step, and the substitute scanner "icm" file to generate an intermediate file used by the last command, "colprof".

colprof -v -D”Canon 612C” -qm -S /usr/share/color/argyll/ref/sRGB.icm -cmt -dpp Canon612

The last command generated the final calibration file, “Canon612.icc”. The name displayed in linux, "Canon 612C", was supplied in the final comand. The final ICC profile was added for the printer in the desktop environment, in my case KDE.

Previous Post Next Post