NAME
pfstmo_mantiuk08 - Display adaptive tone mapping
SYNOPSIS
pfstmo_mantiuk08 [--display-function <df-spec>] [--display-size=<size-
spec>] [--color-saturation <float>] [--contrast-enhancement <float>]
[--white-y=<float>] [--temporal=<pass>] [--output-tone-curve=<file
name>] [--verbose] [--help]
DESCRIPTION
This command applies the display adaptive tone mapping, which attempts
to preserve contrast of an input (HDR) image as close as possible given
the characteristic of an output display. Use this tone mapping operator
if you want to preserve original image appearance, or slightly enhance
contrast (-e option) while maintaining the natural look of images. The
operator can also compensate for ambient light reflections on a screen,
and for varying dynamic range and brightness of a display.
More details can be found in:
Rafal Mantiuk, Scott Daly and Louis Kerofsky.
Display Adaptive Tone Mapping.
In: ACM Transactions on Graphics 27 (3), 2008.
http://www.mpi-inf.mpg.de/resources/hdr/datmo/
If you find this TMO useful in your research project, please cite the
paper above.
This operator also employs color correction mechanism from:
Radoslaw Mantiuk, Rafal Mantiuk, Anna Tomaszewska, Wolfgang
Heidrich.
Color Correction for Tone Mapping.
In: Computer Graphics Forum (Proc. of EUROGRAPHICS’09), 28(2),
2009.
http://zgk.wi.ps.pl/color_correction/
The result of this TMO does not require gamma correction.
OPTIONS
--display-function <df-spec>, -d <df-spec>
To adapt tone-mapping to different displays, this operator must
be provided a display function. The display function describes
how output luminance of a display changes with pixel values. If
no parameter is given, the command assumes -df pd=lcd (see Pre-
defined display below). There are several ways to specify the
display function:
Gamma-gain-black-ambient display model
g=<float>:l=<float>:b=<float>:k=<float>:a=<float>[:n=<float>]
Gamma-gain-black-ambient model can approximate a range of
displays and is a compact way to specify a display function. It
assumes that a display function has the following form:
L_d(I) = (l-b)*I^gamma + b + k/pi*a
The parameters are as follows:
g - gamma or exponent of a display function (default 2.2,
usually from 1.8 to 2.8)
l - peak luminance of a display in cd/m^2 (default 100, from
80 for CRTs to 500 or more for newer displays)
b - black level, which is luminance of a black pixel when the
display is on (default 1, usually from 0.3 to 1 cd/m^2)
k - reflectivity of a screen (assuming that it is diffuse)
(default 0.01, usually about 0.01 (1%) for LCD displays,
more for CRTs)
a - ambient illumination in lux. Typical values are:
50 lux Family living room (dim, default)
400 lux
A brightly lit office
32000 lux
Sunlight on an average day (min.)
100000 lux
Sunlight on an average day (max.)
Pre-defined display
pd=<display_type>
Use pre-defined display type. This options are for convenience
only and they do not mean to accurately model the response of a
particular display. The following display types are recognized:
lcd_office (g=2.2, l=100, b=0.8, k=0.01, a=400 )
lcd set to "office" mode seen in bright environment
lcd (g=2.2, l=200, b=0.8, k=0.01, a=60 )
typical lcd seen in dim environment (default)
lcd_bright (g=2.6, l=500, b=0.5, k=0.01, a=10 )
newer LCD TV seen in dark environment
crt (g=2.2, l=80, b=1, k=0.02, a=60 )
CRT monitor seen in dim environment
The parameters in the parenthesis are the same as for the gamma-
gain-black-ambient model explained above.
Lookup-table
lut=<file>
This is the most accurate specification of the display response
function, but requires measuring it with a luminance meter. The
lookup table should account also for ambient light, so that it
is recommended to use the luminance meter that can measure
screen luminance from a distance, such as Minolta LS-100 (as
opposed to those that use rubber tube touching a display that
eliminates the influence of ambient light). The <file> must be a
comma-separated text file in a format (CSV) with two columns:
first column represents pixel values (from 0.0 to 1.0) and the
second physical luminance in cd/m^2. Both the pixel value and
the luminance should increase in each raw.
--display-size=<size-spec>, -s=<size_spec>
Specifies how large the image appears to a viewer and what is
the viewing distance. If no parameter is given, -s ppd=30 is
assumed. Since this tone-mapper is global, display size has
moderate effect on the resulting images and thus skipping this
parameter should not do much harm. There are two ways to specify
image size:
vres=<lines>:vd=<screen_heights>[:d=<meters>]
vres - screen’s vertical resolution in lines, for
example 1024.
vd - viewing distance specified as multiplies of
screen height. For example if the display is seen
from 0.5m and the height of its screen is 25cm,
vd=2.
d - (optional) viewing distance in meters. This is
to account for lower eye’s sensitivity for larger
viewing distances (although the effect is
negligible). By default -d=0.5 is assumed.
ppd=<pixels_per_visual_degree>[:d=<meters>]
ppd - how many pixels spans one visual degree.
d - (optional) viewing distance in meters. This is
to account for lower eye’s sensitivity for larger
viewing distances (although the effect is
negligible). By default -d=0.5 is assumed.
--color-saturation <float>, -c <float>
Decrease or increase color saturation after tone mapping.
Default value -c=1 attempts to preserve color appearance of the
original image. Use values >1 to increase and <1 to decrease
color saturation.
--contrast-enhancement <float>, -e <float>
By default this tone-mapper attempts to preserve contrast of an
input image (-e=1). This parameter controls whether the contrast
of an input image should be enhanced before tone-mapping. For
example -e=1.15 boosts contrast by 15%. Note that if a target
display does not offer sufficient dynamic range, contrast may be
enhanced only for selected tone-values (those that dominate in
an image) or not enhanced at all.
--white-y=<float>, -y=<float>
Tells the tone-mapper what luminance level in the input image
should be mapped to the maximum luminance of a display. Since
HDR images contain only relative luminance information, tone-
mapper does not know how bright should be the scene. This option
is meant to fix this problem by providing tone-mapper with the
information what luminance level in an input image should be
perceived as a diffuse white surface. Default is none, which
means that no such mapping will be enforced and tone-mapper is
free to find an optimal brightness for a given image. This is a
recommended setting for HDR images. Setting --white-y could be
necessary for dark scenes, which could be made too bright by the
tone-mapper. The value of this parameter can be also passed in
pfsstream as a tag WHITE_Y. pfstools 1.7 and newer sets set this
tag automatically for LDR images. The command line option
overrides the value of the pfstream tag.
--temporal=<pass>, -t=<pass>
Use temporal filtering of the tone-curve to tone-map video
sequence. This option should be used for video sequences to
avoid flickering. Since the temporal filter requires knowledge
of at least 25 frames in advance, the filtering must be
performed in two passes, similar to MPEG video encoding. In the
first pass (pass=1) tone-curves are calculated for each frame
and stored in a temporary file (datmo_tone_curves.tmp in the
current directory). In the second pass (pass=2) the tone-curves
are read from that file, filtered and used to tone-map video
sequence. The tone-mapper does not produce any output (frames)
in the first pass. See below an example how to use two-pass
filtering. Note that the same set of tone mapping options must
be provided for both passes.
--output-tone-curve=<file name>, -o=<file name>
Write tone-curves to a text file. This option is mainly for
debugging purposes, but can be used to visualize computed tone-
curves. The tone-curve data is stored in a comma separated text
file (CSV), consisting of three columns: frame number, log10 of
input luminance factor, log10 of the resulting display
luminance, and the pixel value (0-1).
--verbose, -v
Print additional information during program execution.
--quiet, -q
Do not display progress report.
--help, -h
Print list of commandline options.
EXAMPLES
pfsin memorial.hdr | pfstmo_mantiuk08 -d pd=crt | pfsout memorial.png
Tone map memorial image for a CRT display and store the result
in the PNG format.
pfsin memorial.hdr | pfstmo_mantiuk08 -d g=2.6:l=500:b=0.5:k=0.01:a=10
| pfsview
Tone map memorial image for a display that has a 2.2 gamma, the
peak luminance of 500 cd/m^2, the black level of 0.5 cd/m^2, the
panel reflectivity of 1% (0.01) and is seen under the
illumination of 10 lux.
pfsin bridge.jpg --linear | pfsclamp --min 0.007 | pfstmo_mantiuk08 -v
| pfsview
Enhance the low-dynamic range image ’bridge’ and view the
result. pfsclamp command reduces noise for low code values.
pfsin frame%05d.exr | pfstmo_mantiuk08 -d pd=lcd_bright -t 1
pfsin frame%05d.exr | pfstmo_mantiuk08 -d pd=lcd_bright -t 2 | pfsout
out_frame%04d.png
Tone-map video sequence using 2-pass temporal filtering to avoid
flicker.
pfsin *.exr | pfstmo_mantiuk08 | pfsview
Tone-map and display *.exr HDR images in the current directory.
pfsin *.exr | pfstmo_mantiuk06 | pfsgamma -g 0.8 | pfstmo_mantiuk08 |
pfsview
It is possible to stack a TMO that sharpens images
(pfstmo_mantiuk06) with the contrast preserving TMO
(pfstmo_mantiuk08) to get new interesting results.
SEE ALSO
pfsin(1) pfsout(1) pfsview(1)
BUGS
Please report bugs and comments to the pfstools discussion group
(http://groups.google.com/group/pfstools).
pfstmo_mantiuk08(1)