[sane-devel] EPSON 3490, calibration and raw data

Krzysztof Halasa khc at pm.waw.pl
Sat Feb 11 12:54:22 UTC 2006


Please forgive my ignorance, I've just started using EPSON 3490.

I'm especially interested in scanning negative 35 mm films (yes, I know
it's low-end, it's like an experiment).

Reading the sources to snapscan backend I got the impression that:
a) before the actual scanning the scanner performs white level calibration
   (and, with TPU, black level calibration).
   and the scanner just scans 16 lines of open area behind the actual
   film (and respectively 48 lines for black calibration, not sure where).

   The images are either 8-bit or 16-bit, but I'm not sure all bits are
   used (details?).

b) the scanned "calibration image" is averaged and a single line is sent
   Not sure about 16-bit, does the values differ from 8-bit mode?

c) eventually the "analog" gamma information is uploaded to the scanner
   as well (not yet sure about details, someone?).

What do I need? I need to obtain "raw" scan data, without any calibration
or gamma correction at scanning time.

Now I have disabled READ/READ_CALIBRATION* command and the whole averaging
etc. and I'm doing SEND/READ_CALIBRATION* with the following data:
- for white: 255 0 0 0 ...
- for black: 0 0 0 0 ...

Does it disable the calibration and related calculations? The following
code fragments suggests so but the algorithm seems a bit strange (for black
and white but it essentially the same for RGB):

        /* now make averages */
        for (k = 0; k < num_bins; k++) {
            bins[k] /= cal_lines;
            /* also divide by 64 for 16bit mode */
            if (bytes_per_bin == 2)
              bins[k] /= 64;

and then:

            g = 0;
            for (k = 0; k < num_bins; k++) {
                *pbuf++ = bins[k] - g;
                g = bins[k];

Why the /64? Does the calibration data in 16-bit mode consist of 8-bit
samples shifted left by 6 bits (i.e., 14-bit samples with lower 6 bits

Next thing, "analog" gamma - does setting it to 1.0 prevents scanner
firmware from doing any calculations?

Is this scanner really 48-bit (3 * 16 bit)? Can I really get full 16-bit
data from it?

Do you think adding "get raw data" option and possibly "get calibration
data" (for further processing with general image-manipulation programs)
to this backend would make sense?

Any help will be appreciated.
Krzysztof Halasa

More information about the sane-devel mailing list