[Openicc] [Gimp-print-devel] Drop size calibration

Robert Krawitz rlk at alum.mit.edu
Sat Feb 2 13:39:11 PST 2008


   Date: Sun, 27 Jan 2008 21:05:33 -0500
   From: Robert Krawitz <rlk at alum.mit.edu>

      Date: Sun, 27 Jan 2008 17:37:23 -0800
      From: "Roy Harrington" <roy at harrington.com>

      As far as I can tell your method is matching the density of a 10%
      large dot with say a 20% small dot.  But in a real print the
      transition from small dot to large dot happens at a much higher
      percentage -- say 100% small to 50% large.  So while it would seem
      that mathematically its the same thing, the non-linearity of dot
      gain makes a difference.  Small dots have more relative dot gain
      than larger dots because the circumference to area ratio is larger.
      I suspect this is a least one factor causing your "larger" small
      dots.

      I think you can use the same idea but make the constant strip 100%
      small dot and the gradient strip the large dot.  This is basically
      what I measure.  I like your idea about making the different ranges
      for each dot size, I may have to try something similar.  (I've been
      using an environment variable to force single dots but this
      requires 3 print jobs not 1).

   OK, I just tried it (this new way of doing things is *so much faster*
   than it used to be).

   At 1440x1440 DPI, the crossover from medium to large is at about 0.40
   and from medium to large, at about 0.77.  The crossover from small to
   large is at about 0.325 (interpolating).  It should be about 0.308.
   That's within about 5%.

   At 720 DPI, the crossover from medium to large is at about 0.40, and
   from small to medium, at about 0.30.  The crossover from small to
   large is at about 0.14 (it should be around 0.12).

   At 1440x1440 DPI, these numbers are an almost perfect match for what I
   got from the 10% dark method, and are very different from what we
   previously came up with.  At 720 DPI, it's not such a perfect match,
   but it's closer to what I'd expect.

   This implies that the small drop sizes are 1.5, 2.0, and ~4.5 pl.  The
   large drop sizes are 1.5, 3.75, and somewhere between 10.5 and 12 pl.
   That's a lot different from what we came up with.

   However, we believe that the large drop size in the small set is the
   same as the medium drop size in the large set (the small set is drop
   sizes 1, 2, 3 and the large set is 1, 3, 5).  This is off by almost
   20%.

   I'm going to have to try this, and compare it with 5760x1440, where
   only the smallest drop size is used.  If it works better, then we have
   a bit of a problem: do we go back and retune existing printers, or
   just use this going forward?

Just to follow up on this: I changed the segmented dither algorithm so
that if the bits to be printed are 0, it treats the value (shifted
left appropriately) as input to a normal ordered dither.  This lets me
directly compare multiple drop sizes against one drop size, so I can
do something like this:

xpattern 0.75 1.0 1.0;
xpattern 0.0 0.24999 1.0;

to compare the use of large drops only (top row) with all drops
(second row).

Upshot: the numbers 0.315, 0.4, 1.0 are much better than the current
setting of 0.23, 0.37, 1.0, but they aren't perfect, either.  The best
numbers I got when using the above comparison were 0.34, 0.4, 1.0 (so
comparing small/large and medium/large worked better than comparing
small/medium and medium/large).  The match isn't absolutely perfect,
but it's very close.

The actual file I used is below.  What this one does is compare 0~0.75
using all drops against 0~0.6 through 0~1.0 using only large drops.
By selectively turning off drop sizes 1 and 2, I can easily calibrate
both drop sizes separately (for drop size 1 I look for a close match
in the highlights; for drop size 2 I look in the midrange).  Errors
are easily visible as fine bands in the highlights or midrange.  The
upper part of the output pattern compares 0~1 in both large drops only
and in all drop sizes, so I can compare the exact choice of drop size.

Incidentally, I'm seeing only the faintest sign of the dot gain
problems we have been theorizing about, suggesting that there's
actually little need for a 3-level dither, at least on the paper I
used for my test.

So it looks like the workflow is:

1) Use the previous pattern I came up with for a rough calibration.
   It got me to within 5%.  Depending upon how good the quality
   control of the nozzles really is, that may be sufficient,
   particularly on lower end printers.

2) Use this vernier-like technique for a final calibration.  It takes
   a bit longer, but it appears to yield more accurate results (since
   it directly compares large drops against all drops).

I will retry this at 720 DPI, using the larger drop set, when I next
have an opportunity.  I don't know how well the vernier technique will
work with larger drops, but I'll try it and see.  I might need to use
wider bands because of the lower resolution.

printer "escp2-rx580";
hsize 1.0;
vsize 0.05;
left 0.0;
top 0.35;
mode gray 16;
steps 200;
blackline 0;
parameter "DitherAlgorithm" "Segmented";
parameter "ColorCorrection" "Raw";
parameter "Resolution" "1440x1440ov";
parameter "InkType" "PhotoCMYK";
parameter "PrintingMode" "BW";
parameter_float "DropSize1" 0.0;
parameter_float "DropSize1" 0.34;
parameter_float "DropSize2" 0.0;
parameter_float "DropSize2" 0.4;

xpattern 1.0 1.0 1.0;
xpattern 0.75 1.0 1.0;
xpattern 0.0 0.24999 1.0;
xpattern 0.75 1.0 1.0;
xpattern 0.0 0.24999 1.0;
xpattern 0.75 1.0 1.0;
xpattern 0.0 0.24999 1.0;
xpattern 0.75 1.0 1.0;
xpattern 0.0 0.24999 1.0;
xpattern 0.75 1.0 1.0;
xpattern 0.0 0.24999 1.0;
xpattern 0.75 1.0 1.0;
xpattern 0.0 0.24999 1.0;
xpattern 0.75 1.0 1.0;
xpattern 1.0 1.0 1.0;
xpattern 0.0 00.18749 1.0;
xpattern 0.75 0.9 1.0;
xpattern 0.0 00.18749 1.0;
xpattern 0.75 0.905 1.0;
xpattern 0.0 0.18749 1.0;
xpattern 0.75 0.91 1.0;
xpattern 0.0 0.18749 1.0;
xpattern 0.75 0.915 1.0;
xpattern 0.0 0.18749 1.0;
xpattern 0.75 0.92 1.0;
xpattern 0.0 0.18749 1.0;
xpattern 0.75 0.925 1.0;
xpattern 0.0 0.18749 1.0;
xpattern 0.75 0.93 1.0;
xpattern 0.0 0.18749 1.0;
xpattern 0.75 0.935 1.0;
xpattern 0.0 0.18749 1.0;
xpattern 0.75 0.94 1.0;
xpattern 0.0 0.18749 1.0;
xpattern 0.75 0.945 1.0;
xpattern 0.0 0.18749 1.0;
xpattern 0.75 0.95 1.0;
xpattern 0.0 0.18749 1.0;
xpattern 0.75 0.955 1.0;
xpattern 0.0 0.18749 1.0;
xpattern 0.75 0.96 1.0;
xpattern 0.0 0.18749 1.0;
xpattern 0.75 0.965 1.0;
xpattern 0.0 0.18749 1.0;
xpattern 0.75 0.97 1.0;
xpattern 0.0 0.18749 1.0;
xpattern 0.75 0.975 1.0;
xpattern 0.0 0.18749 1.0;
xpattern 0.75 0.98 1.0;
xpattern 0.0 0.18749 1.0;
xpattern 0.75 0.985 1.0;
xpattern 0.0 0.18749 1.0;
xpattern 0.75 0.99 1.0;
xpattern 0.0 0.18749 1.0;
xpattern 0.75 0.995 1.0;
xpattern 0.0 0.18749 1.0;
xpattern 0.75 1.0 1.0;
xpattern 1.0 1.0 1.0;

-- 
Robert Krawitz                                     <rlk at alum.mit.edu>

Tall Clubs International  --  http://www.tall.org/ or 1-888-IM-TALL-2
Member of the League for Programming Freedom -- mail lpf at uunet.uu.net
Project lead for Gutenprint   --    http://gimp-print.sourceforge.net

"Linux doesn't dictate how I work, I dictate how Linux works."
--Eric Crampton


More information about the openicc mailing list