doc:appunti:hardware:canoscan_9000f_mark_ii
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
doc:appunti:hardware:canoscan_9000f_mark_ii [2014/11/18 20:55] – [Invert and color balance] niccolo | doc:appunti:hardware:canoscan_9000f_mark_ii [2019/12/23 09:36] (current) – [Negative scan with GNU/Linux] niccolo | ||
---|---|---|---|
Line 41: | Line 41: | ||
</ | </ | ||
- | ===== The first negative | + | ===== Negative |
- | I purchased | + | See the page **[[canoscan_9000f_mark_ii_negative_film]]**. |
- | After starting the **xsane** program, from the preview window, I selected the area of negatives rails (about 70 x 240 mm). You can add a preset area using the context menu, which add the following section into **'' | + | ===== Photo scan with GNU/Linux ===== |
- | < | + | See the page **[[canoscan_9000f_mark_ii_positive_scan]]**. |
- | " | + | |
- | " | + | |
- | " | + | |
- | 4795735 | + | |
- | " | + | |
- | 423738 | + | |
- | " | + | |
- | 4587520 | + | |
- | " | + | |
- | 15728640 | + | |
- | </ | + | |
- | + | ||
- | {{ .: | + | |
- | + | ||
- | Then I selected // | + | |
- | + | ||
- | A standard 135 mm negative acquired at **2400 dpi** produces an image of about 3400 x 2200 pixels (i.e. about **7 Mpixels**), the result is very light, as you can see. The scanner is capable up to 9600 dpi. | + | |
- | + | ||
- | ===== Xsane and medium definition ===== | + | |
- | + | ||
- | See the Xsane documentation about **[[http:// | + | |
- | + | ||
- | With the Xsane program it is possible to set varius levels for gamma correction, luminosity and contrasts or choose from some presets, including some brand of negative films. It is also possible to define new profiles, e.g. to get best results with this scanner and some type of negatives. | + | |
- | + | ||
- | Neverthless it seems that none of that controls influence the way the scanner acquire from the transparency unit, so it is preferible to acquire without any correction (sort of //raw// scanning), and do postprocessing later, with some software. | + | |
- | + | ||
- | ===== PIXMA backend options for transparencies ===== | + | |
- | + | ||
- | Sane PIXMA backend allows several options to be passed using **scanimage**, | + | |
- | + | ||
- | < | + | |
- | scanimage --device-name pixma: | + | |
- | </ | + | |
- | + | ||
- | this is a summary (run the command to get some extra explanation): | + | |
- | + | ||
- | < | + | |
- | Scan mode: | + | |
- | --resolution auto||75|150|300|600|1200|2400|4800dpi [75] | + | |
- | --mode auto|Color|Gray|48 bits color|16 bits gray|Lineart [Color] | + | |
- | --source Flatbed|Transparency Unit [Flatbed] | + | |
- | --button-controlled[=(yes|no)] [no] | + | |
- | Gamma: | + | |
- | --custom-gamma[=(auto|yes|no)] [yes] | + | |
- | --gamma-table auto|0..255, | + | |
- | --gamma auto|0.299988..5 [2.2] | + | |
- | Geometry: | + | |
- | -l auto|0..216.069mm [0] | + | |
- | -t auto|0..297.011mm [0] | + | |
- | -x auto|0..216.069mm [216.069] | + | |
- | -y auto|0..297.011mm [297.011] | + | |
- | Buttons: | + | |
- | --button-update | + | |
- | --button-1 <int> [0] [read-only] | + | |
- | --button-2 <int> [0] [read-only] | + | |
- | --original <int> [0] [read-only] | + | |
- | --target <int> [0] [read-only] | + | |
- | --scan-resolution <int> [0] [read-only] | + | |
- | Extras: | + | |
- | --threshold auto|0..100% (in steps of 1) [inactive] | + | |
- | --threshold-curve auto|0..127 (in steps of 1) [inactive] | + | |
- | </ | + | |
- | + | ||
- | **WARNING: | + | |
- | + | ||
- | I was mainly interested into **gamma** and **color correction**, | + | |
- | + | ||
- | We can assume that this scanner (at least with libsane 1.0.24) does a **raw scan** of transparencies, | + | |
- | + | ||
- | ===== Scanning from command line and benchmarking ===== | + | |
- | + | ||
- | **WARNING**! The order of parameters passed to '' | + | |
- | + | ||
- | **WARNING**! With images acquired at 4800 dpi, **64 bit software** is probably required (Imagemagick, | + | |
- | + | ||
- | With this command we will scan the entire transparency surface, containing **two strips of 135 mm negatives**: | + | |
- | + | ||
- | < | + | |
- | scanimage --device-name pixma: | + | |
- | --source ' | + | |
- | --resolution 2400 \ | + | |
- | --format tiff \ | + | |
- | --mode Color \ | + | |
- | -l 76 -x 66 \ | + | |
- | > negative.tiff | + | |
- | </ | + | |
- | + | ||
- | In the following table we report the scan time and the size of the resulting file, using different resolutions: | + | |
- | + | ||
- | ^ Resolution | + | |
- | ^ 1200 | 0m 48s | 3118 x 11840 | 212M | 1692 x 1128 | ~ 2 | | + | |
- | ^ 2400 | 2m 39s | 6236 x 23680 | 845M | 3384 x 2256 | ~ 7 | | + | |
- | ^ 4800 | 5m 54s | 12473 x 47360 | 3.4G | 6768 x 4512 | ~ 29 | | + | |
- | ===== Infrared ===== | + | |
- | + | ||
- | {{.: | + | |
- | + | ||
- | The CanoScan 9000F Mark II scanner has an infrared sensor, useful to remove scratches and dust from the scanned image. With xsane it is possible to acquire the infrared image, just select // | + | |
- | + | ||
- | ===== Batch processing ===== | + | |
- | + | ||
- | ==== Acquire ==== | + | |
- | + | ||
- | The scanner accomodates two stripes of 135 mm negatives. This is the script used to acquire them: | + | |
- | + | ||
- | <code bash> | + | |
- | #!/bin/sh | + | |
- | filename=" | + | |
- | resolution=' | + | |
- | format=' | + | |
- | scanimage --device-name pixma: | + | |
- | --source ' | + | |
- | --resolution " | + | |
- | --format " | + | |
- | --mode Color \ | + | |
- | -l 76 -x 66 \ | + | |
- | > " | + | |
- | </ | + | |
- | ==== Strip cut and rotate ==== | + | |
- | + | ||
- | Then we used this script to cut the two stripes and rotate them by 270 degrees. The png compression seems to be the best lossless method: | + | |
- | + | ||
- | <code bash> | + | |
- | # | + | |
- | # Cut two strips from a 135 mm negative scan, CanoScan 9000F Mark II | + | |
- | + | ||
- | filename=" | + | |
- | resolution=' | + | |
- | format=' | + | |
- | + | ||
- | case " | + | |
- | 1200) | + | |
- | strip1=' | + | |
- | strip2=' | + | |
- | ;; | + | |
- | 2400) | + | |
- | strip1=' | + | |
- | strip2=' | + | |
- | ;; | + | |
- | 4800) | + | |
- | strip1=' | + | |
- | strip2=' | + | |
- | ;; | + | |
- | *) | + | |
- | echo " | + | |
- | exit 1 | + | |
- | ;; | + | |
- | esac | + | |
- | + | ||
- | # To avoid "the PNG file specifies an offset" | + | |
- | set -x | + | |
- | convert " | + | |
- | -crop " | + | |
- | -rotate 270 \ | + | |
- | +repage \ | + | |
- | " | + | |
- | + | ||
- | convert " | + | |
- | -crop " | + | |
- | -rotate 270 \ | + | |
- | +repage \ | + | |
- | " | + | |
- | </ | + | |
- | ==== Invert and color balance ==== | + | |
- | + | ||
- | This is an empirical recipe to invert and balance colors from a scanned negative strip. It is based on a three pass process: **negate**, **gamma correction** and **color level adjust**. The parameters of gamma correction and color adjust, make a specific profile suitable only for one make/model of negative. | + | |
- | + | ||
- | Scanner softwares often contain several negative profiles based only on color adjust. Gamma correction is defined for each RGB channel along the black and white point. We instead prefer to apply an uniform gamma correction before color level adjust, so we can deal with under-exposed or over-exposed frames just touching a single pre-process parameter. | + | |
- | + | ||
- | First of all we make several test from a negative scan, setting different gamma correction: | + | |
- | + | ||
- | <code bash> | + | |
- | !/bin/sh -x | + | |
- | test_values=" | + | |
- | for gamma in $test_values; | + | |
- | convert -colorspace RGB " | + | |
- | -negate -gamma $gamma \ | + | |
- | " | + | |
- | done | + | |
- | </ | + | |
- | + | ||
- | We choose by visual inspection the best value for gamma. | + | |
- | + | ||
- | The we open with Gimp a sample photo, we need a shot with a good **black**, **gray** and **white** spots. The process is: | + | |
- | + | ||
- | - Apply a **pixelize blur filter** on the black, gray and white spots. Make it large enough so you can easly pick the color from it in the next steps. | + | |
- | - From menu //Colors//, // | + | |
- | - From //All Channels//, click //Pick gray point// and then click on the gray spot. | + | |
- | - From //Channel// select //Red//, click //Pick black point// and click on the black spot. Click //Pick white point// and click on the white spot. | + | |
- | - Repeat the above step for //Green// and //Blue//. | + | |
- | - Annotate the value of **black point**, **gamma**, and **white point** for each channels. | + | |
- | ==== Cutting frames using the GIMP ==== | + | |
- | + | ||
- | Now we have several strips of frames, acquired with batch procedures and very few manual work. The last step indeed requires some manual work and human intervention: | + | |
- | + | ||
- | We use the **[[http:// | + | |
- | + | ||
- | - Save the file **'' | + | |
- | - Save the file **'' | + | |
- | - Assign a keyboard shortcut the the //Export selections as jpeg// plugin, eg. **'' | + | |
- | + | ||
- | Now the workflow will be: | + | |
- | + | ||
- | - Open the strip image | + | |
- | - Press **R** to activate the //Rectangle select tool//. | + | |
- | - From the //Tool Options// dialog, click //Restore Tool Preset// and choose "135 mm frame select @2400" (there is a bug? You may need to choose it two times): you see the **fixed size** for selection. | + | |
- | - Select the frame you want to save (the preset will force you with the fixed size). | + | |
- | - Press **'' | + | |
- | - Repeat the last two steps. | + | |
- | + | ||
- | + | ||
- | ===== Web references ===== | + | |
- | + | ||
- | * [[http:// | + | |
- | * [[http:// | + | |
- | * [[https:// | + |
doc/appunti/hardware/canoscan_9000f_mark_ii.1416340521.txt.gz · Last modified: 2014/11/18 20:55 (external edit)