534 lines
27 KiB
JSON
Executable File
534 lines
27 KiB
JSON
Executable File
/*
|
|
|
|
DO NOT EDIT THIS FILE!
|
|
|
|
All changes made here will be lost on software update.
|
|
If you want to add custom values or changes existing ones,
|
|
create a "camconst.json" file next to your personal "options" file.
|
|
Its values will then override and/or complete the ones of this file.
|
|
|
|
If you add values for your own camera and are okay to share them with
|
|
RawTherapee's community, please drop a link on the user's forum
|
|
|
|
IMPORTANT:
|
|
----------
|
|
|
|
1. If you set the dcraw matrix in your user file for an already existing entry
|
|
in RT's file (same camera, same model), your values will replace RT's ones.
|
|
2. If you set the Black level(s) values in your user file for an already existing
|
|
entry in RT's file, your values will replace RT's ones, even if RT's ones are
|
|
more complete and/or detailed. You might want to copy/paste RT's levels first
|
|
(if provided) to your user's file and complete/modify it.
|
|
|
|
Same for the White level(s), independently from the Black level(s).
|
|
|
|
|
|
----------------------------------------------------------------------------------
|
|
|
|
|
|
This file is in JSON format and contains camera constants which RawTherapee uses
|
|
when parsing raw files.
|
|
|
|
Raw files themselves unfortunately do not contain all information needed for making
|
|
a raw conversion, typically color response information and black/white levels are
|
|
missing. That's why this file is needed.
|
|
|
|
It's read once during startup, so if the file is updated you need to restart
|
|
RawTherapee in order to take effect. The file is not intended for modification by
|
|
the casual user, but advanced users can add missing camera information to this file.
|
|
If you do so please report at http://code.google.com/p/rawtherapee/issues so we can
|
|
extend the distributed version of this file so your provided camera information
|
|
becomes available to all.
|
|
|
|
RawTherapee uses DCRAW as the raw format parser. DCRAW contains hard-coded camera
|
|
constants, but not for all cameras and not always accurate information. For example
|
|
DCRAW only support one white level, while some cameras have different white levels
|
|
per channel and per ISO. If a camera is not listed in this file the constants from
|
|
DCRAW will be used, if listed here this information will override any constants in
|
|
DCRAW (if any).
|
|
|
|
Some cameras may only have partial information here, for example if the raw file
|
|
itself contains a color matrix it's not entered here. A camera whose black level
|
|
is measured on special pixels in the raw file should only have white levels here
|
|
etc.
|
|
|
|
Examples:
|
|
|
|
{
|
|
// make and model separated with single space, must match make
|
|
// and model as provided by dcraw (case-insensitive).
|
|
"make_model": "ManufacturerA ModelB",
|
|
// ColorMatrix with D65 Calibration Illuminant, in dcraw format
|
|
"dcraw_matrix": [ 7530, -1942, -255, -4318, 11390, 3362, -926, 1694, 7649 ],
|
|
// black and white level same for all colors at all ISOs
|
|
"ranges": { "black": 10, "white": 1000 },
|
|
// crop away masked sensor borders, 10 pixels left, 20 pixels top, resulting image width/height 4000x3000
|
|
// instead of width/height you can write a negative number which specifies how much of right/bottom border
|
|
// that should be removed
|
|
"raw_crop": [ 10, 20, 4000, 3000 ],
|
|
// same as MaskedAreas DNG tag, used for black level measuring here two areas defined
|
|
"masked_areas": [ 51, 2, 3804, 156, 51, 5794, 3804, 5792 ],
|
|
},
|
|
|
|
{
|
|
"make_model": "ManufacturerA ModelB",
|
|
"dcraw_matrix": [ 7530,-1942,-255,-4318,11390,3362,-926,1694,7649 ],
|
|
// black and white levels per ISO per channel
|
|
// this example only two ISOs, normally the list should be more populated.
|
|
// When RawTherapee asks for black/white levels for a specific ISO the closest
|
|
// match is picked.
|
|
"ranges": {
|
|
"black": [
|
|
{ "iso": 100, "levels": 10 }, // here only one level, same level for all channels
|
|
{ "iso": 3200, "levels": [ 50, 60, 50 ] } // 3 levels, G2 same as G1
|
|
],
|
|
"white": [
|
|
{ "iso": 100, "levels": [ 10000, 11000, 10000, 12000 ] }, // 4 levels, G1 and G2 different
|
|
{ "iso": 3200, "levels": [ 11000, 11000, 10000, 12000 ] }
|
|
]
|
|
}
|
|
}
|
|
|
|
How to measure white levels:
|
|
----------------------------
|
|
|
|
Dcraw which provides the default values to RawTherapee often provides too high
|
|
white levels, and only provides a single value regardless of color channel, ISO
|
|
or aperture. If you open an image with a large clipped area and that is
|
|
rendered in a pink/magenta color rather than white it usually means that the
|
|
white level constant is too high. You can fix this by adjusting the
|
|
"Raw White Point" in the raw tab inside RawTherapee, or permanently fix it by
|
|
measuring and providing a more exact white level in camconst.json so
|
|
RawTherapee gets to know from start where the camera actually clips.
|
|
|
|
Providing a complete and detailed white-level profile can be a quite large
|
|
and complicated effort. As an alternative you can provide a simpler profile.
|
|
We suggest one of the following alternatives in rising difficulty (and
|
|
generally diminishing return):
|
|
|
|
A) Provide a single white-level value measured on the native ISO (base ISO).
|
|
For many cameras this will actually be complete information, those that
|
|
don't vary on channel, ISO or aperture.
|
|
B) Check through all ISOs and if there are differences in white level provide
|
|
an array with white level per ISO.
|
|
C) In addition to ISO, check for aperture scaling and add that.
|
|
D) In addition to ISO and aperture scaling check for color channel
|
|
differences and add that.
|
|
|
|
Doing A) is often better than nothing, as dcraw's default is often too high.
|
|
B) can also be worthwhile for some cameras (or else you'll get pink highlights
|
|
for some ISOs), while C) and D) can generally be seen as fine-tuning.
|
|
|
|
Here follows a guide how to measure white levels (clipping levels):
|
|
|
|
Shoot with your camera into a bright light source, such as a lamp, and make
|
|
sure the shutter speed is long enough to get overexposure (we want
|
|
clipping!). Preferably overexpose lightly, say 1 or 2 stops if you can. The
|
|
reason for this is that some cameras with fuzzy white levels may look less
|
|
fuzzy than they actually are if over-exposure is heavy.
|
|
|
|
Use f/5.6 or smaller aperture (=larger f-number) to avoid any raw scaling
|
|
the camera might have for large apertures.
|
|
|
|
Open the file in a raw analyzer such as Rawdigger and check the pixel values
|
|
for the clipped areas (if you are using Rawdigger, make sure you have disabled
|
|
"subtract black" in preferences or else sample values can be wrong). In this
|
|
stage we always look at white level before black level subtraction! White
|
|
levels can be different on color channel (R, G1, B, G2, note the two greens,
|
|
most often both green channels have the same white level though) and vary
|
|
depending on ISO setting, so if you want to provide a complete profile make
|
|
one shoot for each ISO (even 1/3 steps, so yes it can be quite a lot of
|
|
pictures to shoot and check).
|
|
|
|
In addition, many cameras scale the raw values for large apertures. It's
|
|
generally not that important to cover this, but if you want to extract most
|
|
out of the camera you should cover this too. Then you need to shoot with a
|
|
wide aperture lens (ideally the widest available from the manufacturer) and
|
|
test each aperture (1/3 steps) from the widest (say f/1.2) until the camera
|
|
stops scaling the raw values (usually f/2.8 or f/4.0). If the camera also
|
|
have ISO scaling you need to shoot at these different ISOs to detect any
|
|
differences in scaling, there can be a bit of variation. If you don't have
|
|
access to the widest lens available for the system (say only an f/1.8 lens
|
|
instead of an f/1.2) it can still be valuable to have the values down to
|
|
what you can provide. Brands known to have models that have aperture scaling
|
|
of white levels include Canon and Nikon. Note that if white levels are not
|
|
scaled the camera may have raw scaling anyway (Sony for example), but as
|
|
such scaling will not affect raw decoding we don't need to care about that.
|
|
|
|
PROVIDE CONSERVATIVE VALUES. Most cameras have a little noise at the white
|
|
level, and some can have a lot. In your raw analyzer, move around and look at
|
|
the values in the clipped areas to get a sense of the variation, and/or look
|
|
at the histogram. While it's common to with very little variation, say only
|
|
+/-2 units, some can have +/-500 or more (some may have different variation
|
|
depending on ISO). There can also be camera-to-camera variation.
|
|
|
|
If the white level is set too high RawTherapee will not think the pixels are
|
|
clipped and you can get discoloured highlights (usually pink), this is what
|
|
we want to avoid. If white level is set too low RawTherapee will clip early, ie
|
|
you lose a little highlight detail, but the color is rendered correctly and
|
|
highlight reconstruction can work properly, so this is not as bad. This is why
|
|
we want conservative values.
|
|
|
|
By conservative values we mean that if you see a white level of most often
|
|
15760 and occassionally 15759 (ie very small variation of white level which
|
|
is a common case), you set the white level 10 - 20 units below, say at 15750 in
|
|
this example, this way we get a little margin from noise and camera variation.
|
|
Since sensor raw values are linear you lose in this example log2(1-10/15760) =
|
|
-0.001 stop of detail, ie irrelevant. Thus it's better to provide RawTherapee
|
|
with knowledge where the image clips rather than keeping that last 0.001 stop
|
|
of highlight information and risking that clipping will not be detected
|
|
properly.
|
|
|
|
If you have a fuzzy white level look at the linear histogram; you will probably
|
|
see a normal/gaussian distribution (bell shape) noise peak at clipping and
|
|
probably also a peak at a hard raw data clip level usually at or close to a
|
|
power of two - 1, such as 4095 or 16383. Then you pick a value just before the
|
|
bell shape rises, ie to the left of the bell meaning that you cut away the
|
|
whole fuzzy noise peak. If a little of the starting edge of the noise will be
|
|
included it's not harmful, but 99% of it should be above.
|
|
|
|
If you have used Adobe's DNG Converter and analyzed it's output you may have
|
|
noticed that it's very conservative regarding white levels, ie it cuts away
|
|
quite a lot from the top. While we also recommend to be conservative, you can
|
|
generally be a little bit less so than Adobe's DNG Converter. RawTherapee is
|
|
meant to max out what you can get from your camera, and the white levels should
|
|
mirror that, within reason.
|
|
|
|
The aperture scaling feature is meant to raise the white level to not miss out
|
|
on highlight detail when the camera has scaled the raw values (and thus
|
|
raised white levels). Many cameras do this, but not all, and can only do it
|
|
for lenses that report aperture to the camera (ie you see it in the EXIF
|
|
data). Providing proper aperture scaling values is a bit more advanced task,
|
|
so if you are unsure we recommend to skip that part.
|
|
|
|
Beware that the raw format may have a ceiling so that it clips scaled values,
|
|
for example the Canon 5D mark II maxes out at 16383 which happens at f/1.8
|
|
for ISOs with the white level at 15750, but for ISO160 when the white level
|
|
is 12800 it does not max out. If there is such a raw limit it must also be
|
|
provided ("ranges":"white_max"). Usually you will not need a margin on
|
|
white_max as it clips there as a result of an in-camera math operation.
|
|
|
|
Note that aperture scaling can be quite small, for the 5D mark II it's only
|
|
0.1 stop down to f/1.4 and then it can be discussed if it's worthwhile to care.
|
|
The "worst" cameras scale about 0.6 stops though, and then it's more
|
|
valuable to compensate. If you skip aperture scaling RawTherapee will clip the
|
|
files a little bit too early and you miss that last fraction of highlight
|
|
detail, but you get no processing problems. Setting unconservative scale
|
|
factors can on the other hand cause a too high whitelevel and break highlight
|
|
processing, so be careful.
|
|
|
|
Scaling can vary sligthly depending on ISO (if white levels vary) so make
|
|
sure to provide conservative scalings so regardless of ISO you don't get a
|
|
too high white level. We recommend to keep a wider margin here than on the
|
|
white levels, ie 0.5-1% lower or so. For example if base (conservative!)
|
|
white level is 15750 and the scaled is 16221 we have a scaling factor of
|
|
16221/15750=1.0299 ie +2.9% we set the factor to 1.02 or +2% to keep a
|
|
margin.
|
|
|
|
The scale factor you provide here is applied on the white level before black
|
|
level subtraction (if any), ie directly on the white level value you provide in
|
|
the camconst.json file. Black level (if provided) is not scaled. Please report
|
|
to us if you come across a camera which scales black levels, then we can add
|
|
that as an option. Usually the camera applies an offset to shift back the
|
|
black level to the standard level after scaling.
|
|
|
|
If RawTherapee doesn't find an entry for the aperture used in the image, it
|
|
will pick the closest above. Ie if the apertures 1.0 and 2.0 is in the table
|
|
and the image has aperture 1.2, it will pick scaling for 2.0, even if 1.0 is
|
|
the closer aperture. The reason for always checking the closest above is that
|
|
we rather get a bit too low white level than too high, as discussed before.
|
|
|
|
Some cameras have different white levels on different color channels. When
|
|
this is the case the difference is often so small so you can just provide a
|
|
single value instead, ie a conservative value based on the lowest clipping.
|
|
|
|
What we know at the time of writing about different brands/models (not
|
|
complete info):
|
|
|
|
- Canon CR2: typically same clipping per channel, but significant variations
|
|
on ISO and aperture. Maxes out at 16383, black level measured on masked
|
|
black pixels, ie don't provide that.
|
|
- Nikon NEF: sometimes different clipping per color (most often negligible
|
|
though). Will do aperture and ISO scaling, but often to a lesser extent
|
|
than Canon files, ie not as much to gain.
|
|
- Sony ARW2: no scaling. Generally black level around 512, and white level
|
|
16350.
|
|
|
|
Note that some raw formats may go through a certain amount of pre-processing
|
|
based on meta data, such as curve and levels adjustments and various
|
|
calibrations. The Phase One IIQ is one example, and this means that if you
|
|
look at the data in a raw analyzer such as RawDigger it may perform a
|
|
different type of preprocessing than RawTherapee's loader does, and you may
|
|
end up providing incompatible black/white levels.
|
|
|
|
You can use RawTherapee for analysis too, it's safer as you are using it's
|
|
own raw decoder but it's not as user-friendly: enable verbose mode in options
|
|
so you get output on the console (you need to start RT from a console to see
|
|
the output). When you load a file you will see a message of current black
|
|
and white levels and if they came from dcraw or camconst.json. If you're
|
|
adjusting an existing camconst.json value you can just read what it is in
|
|
the file and not need to enable verbose output.
|
|
|
|
Reset exposure sliders to neutral, and zoom in on a large clipped highlight.
|
|
Move around the mouse pointer within, it should show stable 100% on R G B. If
|
|
so, the white level is not too high, it could however be too low. To test that,
|
|
go to the raw tab and adjust the "whitepoint linear correction factor", reduce
|
|
it until one of the channels is no longer 100%, and then increase in steps of
|
|
0.01 until all are 100 again. Usually you play around in the range 0.90 to
|
|
0.99, ie a very small adjustment. When you've found this factor you should
|
|
apply it on the old white level to find a new larger one. As RT's "whitepoint
|
|
linear correction factor" work after blacklevel subtraction and camconst.json
|
|
want values without it we need to do some math:
|
|
|
|
BL = black level (typically something near 0, 256, 512 or 1024, find it in the
|
|
verbose output or if available in camconst.json)
|
|
F = whitepoint linear correction factor you just found out (typically in the
|
|
range 0.90 to 0.99 if you need to increase white level, 1.01 to 1.10 if
|
|
decrease)
|
|
oldWL = old white level, found in verbose output or in camconst.json if
|
|
available.
|
|
|
|
new white level = BL + (oldWL - BL) / F
|
|
|
|
Note that if black level is 0 which it is for many cameras, the formula
|
|
simplifies to: new white level = oldWL / F.
|
|
|
|
Here's an example from a Canon 1000D: black level is 256, old white level is
|
|
3651, whitepoint correction factor becomes 0.90, then new white level is
|
|
256 + (3651 - 256) / 0.9 = 4028.
|
|
|
|
If your camera have different black levels per channel use the one which
|
|
yields the smallest white level (can be the largest or smallest, test!).
|
|
|
|
This new white level you then enter in your camconst.json file. The same
|
|
procedure can be used if the white level is too high, ie if you see pink
|
|
highlights, then increase the correction factor above 1.0 until you just start
|
|
seeing stable 100% on all channels, you use the same formula to calculate the
|
|
new smaller white level.
|
|
|
|
About black levels:
|
|
-------------------
|
|
|
|
Unlike for white levels it's much more common that black levels can be
|
|
derived from the format. Either it's simply 0 (typical for Nikon cameras), or
|
|
it can be derived from masked pixels (typical for Canon cameras) or otherwise
|
|
be extracted from some tag. Some formats are have built-in subtraction
|
|
information and are pre-processed by DCRaw to end up at a black level of zero
|
|
(Phase One's IIQ). In all, you typically should not care about the black
|
|
level in camconst.json: any information that can be derived from the raw file
|
|
itself should not be specified in camconst.json! Sony's ARW2 is one of the
|
|
few exceptions (which has a single black level around 512), but DCraw
|
|
generally has good constants for these already.
|
|
|
|
Currently we have chosen not to provide any guide how to measure black levels
|
|
as we don't think it will be a common task (it's also more difficult to do
|
|
than measure white levels). If you experience a black level issue it's more
|
|
likely due to a format parsing bug which should be fixed in DCRaw and/or
|
|
RawTherapee's raw format parser.
|
|
|
|
How does a black level issue look? If the image has a color cast and is
|
|
possibly duller than normal it's likely that black levels are off. The color
|
|
cast is typically stronger in darker colors but it can be hard to see, it's
|
|
more often experienced as a cast over the whole image.
|
|
|
|
*/
|
|
{"camera_constants": [
|
|
|
|
/*
|
|
|
|
When adding camera constants please set a quality level so we know the status for future updates
|
|
|
|
Quality A: complete information, no need to add more, to the best of our knowledge
|
|
Quality B: not complete, but very little to gain from adding more
|
|
Quality C: complementing with additional information would provide significant gain
|
|
Quality X: unknown, ie we knowing to little about the camera properties to know if
|
|
we have enough info or not.
|
|
|
|
*/
|
|
|
|
|
|
{ // quality A (only aperture scaling for f/1.2 missing)
|
|
"make_model": "Canon EOS 5D Mark II",
|
|
"dcraw_matrix": [ 4716,603,-830,-7798,15474,2480,-1496,1937,6651 ],
|
|
"ranges": {
|
|
// black levels are read from raw masked pixels
|
|
// white levels are same for all colors, but vary on ISO
|
|
"white": [
|
|
{ "iso": 50, "levels": 15750 }, // typical: 15760
|
|
{ "iso": 100, "levels": 15750 },
|
|
{ "iso": 125, "levels": 15750 },
|
|
{ "iso": 160, "levels": 12800 },
|
|
{ "iso": 200, "levels": 15750 },
|
|
{ "iso": 250, "levels": 15750 },
|
|
{ "iso": 320, "levels": 12800 }, // typical: 12810
|
|
{ "iso": 400, "levels": 15750 },
|
|
{ "iso": 500, "levels": 15750 },
|
|
{ "iso": 640, "levels": 12800 },
|
|
{ "iso": 800, "levels": 15750 },
|
|
{ "iso": 1000, "levels": 15750 },
|
|
{ "iso": 1250, "levels": 12800 },
|
|
{ "iso": 1600, "levels": 15750 },
|
|
{ "iso": 2000, "levels": 15750 },
|
|
{ "iso": 2500, "levels": 15750 },
|
|
{ "iso": 3200, "levels": 15750 },
|
|
{ "iso": 4000, "levels": 15750 },
|
|
{ "iso": 5000, "levels": 15750 },
|
|
{ "iso": 6400, "levels": 16370 }, // typical: 16383
|
|
{ "iso": 12800, "levels": 16370 },
|
|
{ "iso": 25600, "levels": 16370 }
|
|
],
|
|
"white_max": 16383,
|
|
"aperture_scaling": [
|
|
/* note: no scale factors known for f/1.2 and f/1.0 (had no lenses to test with), but the
|
|
typical 15750 white level maxes out at "white_max" for f/1.8 and below anyway. */
|
|
{ "aperture": 1.4, "scale_factor": 1.077 },
|
|
{ "aperture": 1.6, "scale_factor": 1.054 },
|
|
{ "aperture": 1.8, "scale_factor": 1.039 },
|
|
{ "aperture": 2.0, "scale_factor": 1.031 },
|
|
{ "aperture": 2.2, "scale_factor": 1.021 },
|
|
{ "aperture": 2.5, "scale_factor": 1.016 },
|
|
{ "aperture": 2.8, "scale_factor": 1.010 },
|
|
{ "aperture": 3.2, "scale_factor": 1.0046 },
|
|
{ "aperture": 3.5, "scale_factor": 1.0031 }
|
|
]
|
|
}
|
|
},
|
|
{ // quality B, more aperture scalings desired
|
|
"make_model": "Canon EOS 5D Mark III",
|
|
"dcraw_matrix": [ 6722,-635,-963,-4287,12460,2028,-908,2162,5668 ],
|
|
"ranges": {
|
|
// black levels are read from raw masked pixels
|
|
// white levels are same for all colors, but vary on ISO
|
|
"white": [
|
|
{ "iso": 50, "levels": 15270 }, // typical: 15282
|
|
{ "iso": 100, "levels": 15270 },
|
|
{ "iso": 125, "levels": 15270 },
|
|
{ "iso": 160, "levels": 13300 }, // typical: 13306
|
|
{ "iso": 200, "levels": 15270 },
|
|
{ "iso": 250, "levels": 15270 },
|
|
{ "iso": 320, "levels": 13300 },
|
|
{ "iso": 400, "levels": 15270 },
|
|
{ "iso": 500, "levels": 15270 },
|
|
{ "iso": 640, "levels": 13300 },
|
|
{ "iso": 800, "levels": 15270 },
|
|
{ "iso": 1000, "levels": 15270 },
|
|
{ "iso": 1250, "levels": 13300 },
|
|
{ "iso": 1600, "levels": 15270 },
|
|
{ "iso": 2000, "levels": 15270 },
|
|
{ "iso": 2500, "levels": 13300 },
|
|
{ "iso": 3200, "levels": 15270 },
|
|
{ "iso": 4000, "levels": 15270 },
|
|
{ "iso": 5000, "levels": 13300 },
|
|
{ "iso": 6400, "levels": 15270 },
|
|
{ "iso": 8000, "levels": 15270 },
|
|
{ "iso": 10000, "levels": 13300 }, // no data, guessed
|
|
{ "iso": 12800, "levels": 15270 },
|
|
{ "iso": 16000, "levels": 15270 },
|
|
{ "iso": 20000, "levels": 15270 },
|
|
{ "iso": 25600, "levels": 16300 },
|
|
{ "iso": 32000, "levels": 16300 },
|
|
{ "iso": 40000, "levels": 16300 },
|
|
{ "iso": 51200, "levels": 16300 },
|
|
{ "iso": 102400, "levels": 16300 }
|
|
],
|
|
"white_max": 16383,
|
|
"aperture_scaling": [
|
|
// limited scaling info available, please provide more
|
|
{ "aperture": 2.0, "scale_factor": 1.024 },
|
|
{ "aperture": 2.8, "scale_factor": 1.010 }
|
|
]
|
|
}
|
|
},
|
|
|
|
{ // quality B, lacks aperture and ISO scaling, known to exist, but little to gain as the levels are so close to white_max
|
|
"make_model": "Nikon D7000",
|
|
"dcraw_matrix": [ 7530,-1942,-255,-4318,11390,3362,-926,1694,7649 ], // matrix provided by Tanveer(tsk1979)
|
|
"ranges": {
|
|
// measured at ISO 100. ISO differences not measured, but known to exist
|
|
"white": [ 16370, // 16383 typical
|
|
15760, // 15778 typical
|
|
16370 // 16383 typical
|
|
],
|
|
"white_max": 16383
|
|
// aperture scaling not measured, but known to exist, at f/1.8 the G channels hits white_max
|
|
}
|
|
},
|
|
|
|
{ // quality A
|
|
"make_model": "Sony SLT-A77",
|
|
"dcraw_matrix": [ 5126,-830,-261,-4788,12196,2934,-948,1602,7068 ], // matrix provided by Colin Walker
|
|
// note: Sony ARW2 file format gets 14 bit values, not 12 bit like in dcraw 9.19
|
|
"ranges": { "black": 512, "white": 16350 }
|
|
},
|
|
{ // quality A
|
|
"make_model": [ "Sony SLT-A99", "Sony SLT-A99V" ],
|
|
"dcraw_matrix": [ 6344,-1612,-462,-4863,12477,2681,-865,1786,6899 ],
|
|
"ranges": { "black": 512, "white": 16350 }
|
|
},
|
|
|
|
/* Phase One: color matrices borrowed from Adobe DNG Converter, black/white levels tested on actual raw files.
|
|
Note: the dcraw decoder makes black level subtraction and various corrections to the raw values based on
|
|
metadata embedded in the IIQ format, so what we see here is the result after that, ie black level is 0,
|
|
and white level is typically at or close to 65535. However sensors vary a bit and can be noisy around clip
|
|
so we cut away 0.05 stop from top down to 63300 to be a bit conservative. */
|
|
{ // quality A
|
|
"make_model": [ "Phase One P40+", "Phase One IQ140", "Phase One P65+", "Phase One IQ160", "Phase One IQ260" ],
|
|
"dcraw_matrix": [ 8035,435,-962,-6001,13872,2320,-1159,3065,5434 ],
|
|
"ranges": { "black": 0, "white": 63300 }
|
|
},
|
|
{ // quality A
|
|
"make_model": [ "Phase One IQ180", "Phase One IQ280" ],
|
|
"dcraw_matrix": [ 6294,686,-712,-5435,13417,2211,-1006,2435,5042 ],
|
|
"ranges": { "black": 0, "white": 63300 }
|
|
},
|
|
{ // quality A
|
|
"make_model": [ "Phase One P20", "Phase One P20+", "Phase One P25", "Phase One P25+" ],
|
|
"dcraw_matrix": [ 2905,732,-237,-8135,16626,1476,-3038,4253,7517 ],
|
|
"ranges": { "black": 0, "white": 63300 }
|
|
},
|
|
{ // quality A
|
|
"make_model": [ "Phase One P21", "Phase One P21+" ],
|
|
"dcraw_matrix": [ 6516,-2050,-507,-8217,16703,1479,-3492,4741,8489 ],
|
|
"ranges": { "black": 0, "white": 63300 }
|
|
},
|
|
{ // quality A
|
|
"make_model": [ "Phase One P30", "Phase One P30+"],
|
|
"dcraw_matrix": [ 4516,-244,-36,-7020,14976,2174,-3206,4670,7087 ],
|
|
"ranges": { "black": 0, "white": 63300 }
|
|
},
|
|
{ // quality A
|
|
"make_model": [ "Phase One P45", "Phase One P45+" ],
|
|
"dcraw_matrix": [ 5053,-24,-117,-5685,14077,1703,-2619,4491,5850 ],
|
|
"ranges": { "black": 0, "white": 63300 }
|
|
},
|
|
|
|
{ // Quality B, only raw crop fix here, dcraw hard-coded seems to handle the rest just fine
|
|
"make_model": [ "Hasselblad CFV-50" ],
|
|
"raw_crop": [ 44, 4, 8196, 6152 ]
|
|
},
|
|
|
|
// dummy test entry to test the parser and show the format with all entries active
|
|
{
|
|
"make_model": "DummyMake DummyModel",
|
|
"dcraw_matrix": [ 7530,-1942,-255,-4318,11390,3362,-926,1694,7649 ],
|
|
"raw_crop": [ 10, 20, 4000, 3000 ],
|
|
"masked_areas": [ 51, 2, 3804, 156, 51, 5794, 3804, 5792 ],
|
|
"ranges": {
|
|
"aperture_scaling": [
|
|
{ "aperture": 1.2, "scale_factor": 1.1 },
|
|
{ "aperture": 1.4, "scale_factor": 1.08 }
|
|
],
|
|
"black": [
|
|
{ "iso": 100 , "levels": [ 10, 20, 10, 20 ] },
|
|
{ "iso": [100, 200] , "levels": [ 30, 40, 30 ] },
|
|
{ "iso": 3200, "levels": [ 50, 60, 50, 60 ] }
|
|
],
|
|
"white": [
|
|
{ "iso": 100 , "levels": [ 10000, 11000, 10000, 11000 ] },
|
|
{ "iso": 3200, "levels": [ 11000, 11000, 10000, 11000 ] }
|
|
],
|
|
"white_max": 16383
|
|
}
|
|
}
|
|
]}
|