-
Notifications
You must be signed in to change notification settings - Fork 0
Rendering algorithms
- Rendering algorithms: Linearization: Gamma, backlight correction, scanner exposure and dark point compensation
- Rendering algorithms: Determining luminosity of each color patch
- Rendering algorithms: Viewing screen superposition
- Rendering Modes: Different algorithms used to render the image
- Color models: Different models of colors of dyes of the original process
Scan of original negative![]() |
Infrared scan of original transparency![]() |
RGB scan of original transparency![]() |
|
Linearization and inverting negative to positive |
Linearization |
Linearization and channel mixing |
Linear grayscale transparency![]() |
||
Viewing screen registration![]() |
||
| linear RGB image with viewing screen (see viewing screen superposition) ![]() |
||
| Determining luminosity of each color patch (optional) |
||
Blocky linear RGB image (similar to RAW from digital camera)![]() |
||
| Demosaicing using bicubic interpolation (optional) |
||
Smooth but unsharp linear RGB image![]() |
||
| Combining predicted and original data (optional) |
||
linear RGB image![]() |
||
| Simulation dyes of viewing screen and conversion to output color profile |
||
Digital color rendering
|
||
Realistic simulation of what happens when negative is copied to a transparency in laboratory involves simulating sensitivity curve of the black and white emulsion used. At the moment this step is not implemented in a satisfactory way and we rely on other tools (such as vuescan) to do this job for us. We yet need to understand how typical sensitivity curves were and what kind of user-interface we want to implement here. Ideally we should do this based on scans of existing negative-transparency pairs.
When only RGB scan of a color transparency is available, it is possible to estimate the original black and white transparency by mixing RGB channels to grayscale with a certain weights.
In theory it is possible to recover the infrared channel of the scan using the RGB data.
During digitization light passes from the light source through the filters and the emulsion (which is assumed to be close to neutral density filter) and color filters used on the top of the scanner CCD. Knowing RGB values of the scanner's response to the red, green and blue filters of the color screen it is possible possible to produce 3 equations which makes it possible to compute from scanned RGB value the density of the emulsion. mix_weights.red, mix_weights.green and mix_weights.blue are solution to the equations. Value is further compensated by mix_dark, which should ideally be (0,0,0) but it is practical to offset it in some situation (such as when the value is computed using the actual infrared channel).
The simulated infrared channel is computed as:
ir=(r-mix_dark.red)mix_weights.red+(g-mix_dark.green)mix_weights.green+(b-mix_dark.blue)mix_weights.blue.
Here r, g and b are linearized RGB values of the pixel inspected.
Meaningful of mix_dark are values are in range (-1,1). mix_red, mix_green and mix_blue can be both positive and negative.
Screen-coordinates of Paget or Finlay screen.
In this step the screen-coordinates is mapped to the scan-coordinates. This is done by several parameters:
- Affine transformation
-
screen_shift x yspecifies that screen-coordinate (0,0) is (x,y) scan-coordinate. -
coordinate_x xx xyis the x coordinate vector of the basis of linear transformation. Screen-coordinate (1,0) maps to (x+xx,y+xy) scan-coordinate. -
coordinate_y yx yyis the y coordinate vector of the basis of linear transformation. Screen-coordinate (0,1) maps to the coordinate (x+yx,y+yy) scan-coordinate.
-
- Perspective correction
-
tilt_x txx txyspecifies tilt of the scanned image in the horizontal scan-axis. The rotation is in degrees if the image was scanned screen-distance 1 of the surface of image (thus not very meaningul) -
tilt_y tyx tyyspecifies tild of the scanned image in the vertical scan-axis. For scanners with fixed lens this should always be same astilt_x. However for scanners with moving lens only one oftilt_xandtilt_yshould be non-zero and it should correspond to the axis in which the sensor is fixed.
-
- Lens distortion correction
-
k1 pspecifies the lens correction parameter for the Brown-Conrady lens distortion model. Other parameters are not implemented (yet?) since it seems that quality macro lenses suitable for digitization of additive color screen processes typically have relatively mild (but sometimes still important) geometric distortions.
-
Parameters are specified by hand using the GUI application. This gets laborious since they needs to be specified very precisely. For this reasons we plan to implement image analysis which will detect the dot pattern in the scanned image and help to (partly) automate this process.
Legacy scanners with moving sensor suffers from additional errors caused by inprecisions of the stepping motors. This is visible in final rendering and thus we need to implement compensation for this problem. Main question is how to set an user-interface which makes it possible to specify such corrections. We hope that after implementing image analysis we will be able to make this more automatic, too.







