[sane-devel] EPSON 3490, calibration and raw data
Krzysztof Halasa
khc at pm.waw.pl
Sat Feb 11 12:54:22 UTC 2006
Hi,
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).
This is actually READ/READ_CALIBRATION and READ/READ_CALIBRATION_BLACK
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
back using SEND/READ_CALIBRATION and SEND/READ_CALIBRATION_BLACK.
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
unused/ignored)?
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