pfshdrcalibrate - Create an HDR image or calibrate a response curve from a set of differently exposed images supplied in PFS stream.
pfshdrcalibrate [--response <type>] [--calibration <type>] [--gauss <val>] [--response-file <filename.m>] [--save-response <filename.m>] [--multiplier <val>] [--bpp <val>] [--luminance] [--samples <val>] [--saturation-offset <val>] [--deghosting <val>] [--noise-parameters <val>] [--help] [--verbose]
Create an HDR image or calibrate a response curve from a set of differently exposed images supplied in PFS stream.
When used with 8bit images, luminance in the output HDR image corresponds to real world values in [cd/m^2] provided that hdrgen script contained correct information on exposure time, aperture and iso speed. Note that sometimes ISO speed indicated by camera does not correspond to standard (ISO-100 is in fact ISO-125).
The accuracy of absolute calibration has not been thoroughly tested with different camera models, however one can expect the relative measurement error below 8%. Use pfsabsolute in case of systematic error.
The merging of multiple exposures is done in a noise-optimal manner, as explained in the paper:
Hanji, Param,
Fangcheng Zhong, and Rafal K. Mantiuk.
âNoise-Aware Merging of High Dynamic Range Image
Stacks without Camera Calibration.â
In Advances in Image Manipulation (ECCV Workshop), 2020.
http://arxiv.org/abs/2009.07975.
--response <type>, -r <type>
Allows one to choose from predefined response curves. This can be used either to apply this response or use it as an initialization for automatic self-calibration. Predefined response curves are: "linear", "gamma", "log". Default is "linear". This option can be used only with Robertson method.
--calibration <type>, -c <type>
Type of
automatic self-calibration method used for recovery of the
response curve and/or type of method used for HDR merging.
Accepted types include: "robertson",
"mitsunaga". "robertson" is the default
and recommended algorithm (see commends in the Bugs section
below). More infomation on the algorithms can be found in:
M.A. Robertson, S. Borman and R.L. Stevenson
Dynamic range improvement through multiple exposures
In: Proc. of International Conference on Image Processing
1999 (ICIP 99), pp 159-163 vol.3
and
T. Mitsunaga
and S. K. Nayar
Radiometric Self Calibration
In: Proc on IEEE Conf. on Computer Vision and Pattern
Recognition (CVPR’99). Volume 1, p. 1374
--gauss <val>, -g <val>
Sigma value for the Gaussian used as a weighting function (in the range 0-1). Applies to Robertson02 algorithm. Default value: 0.2
--response-file <filename.m>, -f <filename.m>
Use response curve saved in the matlab format file. Turns off automatic self-calibration. Uses Robertson02 or Mitsunaga99 model to apply the response curve (see -c option).
--save-response <filename.m>, -s <filename.m>
Saves the response curve calculated during automatic self-calibration stage in a matlab format file. Can be later reused for set of images captured with given camera. Also works fine for plotting with gnuplot.
--multiplier <val>, -m <val>
Input multiplier value. Can be used to manipulate the range of source exposures. Default value for Robertson method is 256 since LDR images are by default scaled to 0..1. This value is set to 1.0 for Mitsunaga method.
--bpp <val>, -b <val>
Number of bits per pixel in input data from the camera. Default value is 8.
--samples <val>, -p <val>
Number of samples used during the self-calibration in Mitsunaga algorithm. Default is 50000.
--saturation-offset <val>, -o <val>
Pixels are considered saturated if their value exceeds max_val * (1-sat_offset), where max_val is the maximum pixel value (e.g. 255 or 65535) and sat_offset is the percentage of the maximum value. The default value is 0.01. Use this if you can see banding or wrong colors in the regions in which one of the exposures is saturated.
--noise-parameters <val>, -n <val>
Measured noise parameters for the specific camera used. This can be specified in 2 ways. The first is using a comma separated list of 5 values (3 color coefficients, std_readout and std_adc). Alternatively, some presets have been defined and can be used by specifying the camera name. Cameras currently supported: SonyA7r1, CanonT1, SonyA7r3
--deghosting, -d [<val>]
EXPERIMENTAL. Try to use a simple rejection criterion to reduce ghosting artifacts due to movement. If the option is specified, the pixel values that <val> standard deviations of the noise away from the reference exposure are rejected. When the option is missing from the argument list, the deghosting is disabled. When the option is specified without any value, 2 standard deviations are used.
--luminance, -Y
Recovery of response curve will be performed for luminance channel only.
--verbose
Print additional information during program execution.
--help |
Print list of command line options. |
pfsinme *.JPG | pfshdrcalibrate -v -s response.m | pfsview
Recover the response curve from set of all JPEG files in the current directory and save it to response.m file. To view the response curve, use pfsplotresponse command.
pfsinme *.CR2 | pfssize --maxx
1200 | pfshdrcalibrate -r linear -v
--bpp 16 | pfsout result.exr
Read Camera RAW images (from Canon), resize them so that the image width is equal or less 1200 pixels, merge them into an HDR image using all 16 bits and save as an Open EXR image.
pfsinhdrgen sample.hdrgen | pfshdrcalibrate -x -f response.m | pfsview
Create an HDR image from exposures defined in sample.hdrgen using the response curve "response.m" and view it. Fix the problem with black values given to overexposed pixels.
pfsinhdrgen sample.hdrgen | pfshdrcalibrate | pfsview
Create an HDR image from exposures defined in sample.hdrgen using the default self-calibration method and view it.
pfsinhdrgen sample_dcraw.hdrgen
| pfshdrcalibrate -b 16 -r linear -c
none | pfsview
Given that the script sample_dcraw.hdrgen refers to camera RAW files (see pfsindcraw), this example will generate an HDR image assuming a linear response.
pfsinhdrgen sample.hdrgen | pfshdrcalibrate | pfsview
Create an HDR image from exposures defined in sample.hdrgen using the default self-calibration method and view it.
pfsinhdrgen sample.hdrgen |
pfshdrcalibrate -c mitsunaga -samples
100000 -s resp_mitsunaga.m >/dev/null
Create an HDR image from exposures defined in sample.hdrgen using the mitsunaga self-calibration method with 100000 samples and save it to "resp_mitsunaga.m".
pfsplotresponse(1) pfsinhdrgen(1) jpeg2hdrgen(1) pfsview(1) pfsindcraw(1) pfsabsolute(1) pfsglview(1)
Currently Mitsunaga and
Nayar’s method does not produce reliable camera
response curves. Robertson’s method should be used
instead.
Pink pixels may appear in saturated areas of outdated
version of DCRAW is used. It is recommended to install
libraw instead of DCRAW (which is discontinued).
Robertson’s method may produce banding or wrong colors
in saturated areas. For best results, there should be a
sufficient numbers of exposures in which no pixels is over-
or under-saturated in all the exposures. It is possible to
fix these issues with some heuristics (as most HDR merging
software does), but it is currently not done in this
release. pfscalibration was meant to be used for research
purposes and getting accurate result is more important than
generating good looking images. The heuristics could hide
the well visible artifacts, but would also introduce error
to the measurements.
For any other issues please report bugs and comments on
implementation to the discussion group
http://groups.google.com/group/pfstools