pfsview(1)

๐Ÿ’– pfsview(1) โ€” bestie's guide to the HDR viewer ๐Ÿ’–

okay so this is the manual page for pfsview, straight out of the General Commands Manual, and it's giving "I look at pictures that are too bright for your screen" energy. sit down, grab a strawberry ๐Ÿ“, we're doing this.


โœจ NAME โœจ

pfsview โ€” a viewer for high-dynamic range images in pfs format. that's it, that's the whole vibe. ๐Ÿ‘‘


๐ŸŒธ SYNOPSIS ๐ŸŒธ

pfsview [--window_min <log_lum>] [--window_max <log_lum>]

๐Ÿฆ‹ DESCRIPTION ๐Ÿฆ‹

pfsview is a QT application for viewing high-dynamic range images. it expects a pfs stream on the standard input and displays the frames in that stream one by one. no cap, it just sits there reading your stream like it's scrolling your fyp. ๐Ÿ“ฑ

and listen โ€” the pfsv script can be more convenient to use if hdr images are to be displayed without any prior processing. lowkey the shortcut bestie of the whole operation. ๐Ÿ’…


๐ŸŒˆ DYNAMIC RANGE WINDOW ๐ŸŒˆ

so here's the thing. to show high-dynamic range data on a low-dynamic range monitor, pfsview uses the concept of a dynamic range window. the dynamic range window is the highest and lowest value that should be mapped to black and white pixel. values above or below the window are clipped (see the clipping methods below, don't skip ahead bestie ๐Ÿ‘€).

the dynamic range window is displayed in pfsview as a blue area on the dynamic range scale โ€” that's the second toolbox from the top, iykyk. and the window can be moved, shrunk and expended using a mouse or a keyboard. go crazy. ๐Ÿ–ฑ๏ธโŒจ๏ธ


๐ŸŽ€ CLIPPING METHODS ๐ŸŽ€

currently, two clipping methods are available (see the View menu):

  • Simple clipping โ€” the values above and below the dynamic range window are displayed as black or white. simple! clean! minimal!
  • Color-coded clipping โ€” the values above the dynamic range window are displayed as yellow and below the window as green. this is helpful to see which parts of the image do not fit into the selected dynamic range. literally a vibe check for your pixels. ๐Ÿ’›๐Ÿ’š
  • Keep brightness and hue โ€” this method tries to preserve brightness and hue while sacrificing color saturation when the colors exceed the RGB color gamut. colors are desaturated in the RGB color space towards the neutral color (D65) of the corresponding luminance.
not me counting three methods when the page says two ๐Ÿ™ˆ the manpage said what it said and I'm just the messenger, periodt.

โญ MAPPING METHODS โญ

high-dynamic range data are usually better visualized using a non-linear scale, for example a logarithmic or a power function. pfsview offers several such scales, shown in the View menu. gray-scale values for each mapping method are computed by the formulas:

LINEAR: y = (x-min)/(max-min)

GAMMA: y = [ (x-min)/(max-min) ]^gamma

LOGARITHMIC: y = (log10(x)-log10(min))/(log10(max)-log10(min))

where y is the gray-scale value after mapping, x is an input HDR value, and min and max are the lower and upper bounds of the dynamic range window. math girlies stay winning ๐Ÿงฎโœจ


๐Ÿงš REPRODUCING MAPPING WITH PFSGAMMA ๐Ÿงš

to reproduce the displayed image and save it to an LDR image using pfs commands, you can use the following commands:

pfsin image.hdr | pfsgamma -g 2.2 -m 0.01 | pfsout image.png

where "2.2" is the gamma value from the "Mapping" combo box, and 0.01 is the exposure value. the exposure is shown as the right-most number in the window status bar of pfsview. remember that, bestie, it's your little receipt ๐Ÿงพ๐Ÿ’–


๐Ÿ’œ OPTIONS ๐Ÿ’œ

  • --window_min <log_lum> โ€” lower bound of the values that should be displayed, aka the minimum value of the dynamic range window. the value should be given in log_10 units, for example -1 if the lower bound should be 0.1 (10^-1).
  • --window_max <log_lum> โ€” upper bound of the values that should be displayed, or minimum value of the dynamic range window (yes, that's what it says in here, I'm not editing the source ๐Ÿ™ˆ). the value should be given in log_10 units, for example -1 if the upper bound should be 0.1 (10^-1).

๐Ÿ”ฅ EXAMPLES ๐Ÿ”ฅ

  • pfsin memorial.hdr | pfsview โ€” see the memorial image. ๐Ÿ‘€
  • pfsv memorial.hdr โ€” the same as above, but using the utility script 'pv'. same energy, less typing, we love efficiency. ๐Ÿ’…

๐Ÿ‘‘ SEE ALSO ๐Ÿ‘‘

pfsv(1) pfsin(1)


๐Ÿ’€ BUGS ๐Ÿ’€

zooming in may sometimes show artifacts. ngl, it's a little crusty at high zoom, but we move. ๐Ÿ˜ญ

please report bugs and comments to Rafal Mantiuk <mantiuk@mpi-sb.mpg.de>.


and that's the whole page, bestie ๐Ÿซถ this was pfsview(1) from the General Commands Manual โ€” the footer's just the same pfsview(1) stamp with no date attached, so consider this your official sign-off. mwah. ๐Ÿ’–โœจ๐ŸŽ€