pfstools 2.2.0 <12.08.2021>

This is mostly a bug-fix release with many fixes allowing to work with newer version of libraries. Several compilation issues have been resolved on Ubuntu 18.04, 20.04 and Cygwin. The HDR merging (pfshdrcalibrate) uses now better, noise-optimal weights, which should reduce noise for darker image parts.

	* Added: v210 format in pfsinyuv
	* Fixed: memleak in pfssize
	* Fixed: Fix format-security errors with Octave 5.1 (thanks to Orion Poplawski)
	* Added: pfs_automerge
	* Fixed: typos in the documentation (thanks to Andreas Metzler)
	* Added: simple deghosting in pfshdrcalibrate (-d option)
	* Fixed: pfsalign now uses free AKAZE feature detector, avoiding issues with missing non-free OpenCV classes
	* Fixed: Updated installation instruction for Ubuntu 18.04
	* Fixed: Fixed a number of compiler warnings from g++ 7.4.0
	* Fixed: Octave interface upgraded to Octave-6 (thanks to Michal)
	* Fixed: pfstmo_durand02 - reversed the old fix that made images over-saturated. Now 99.5th percentile is mapped to white. 
	* Removed: pfsinjpeghdr, pfsoutjpeghdr (discontinued)
	* Fixed: compilation fails with GCC11/std=c++17, duplicate "clamp" definition (thanks to Stefan)
	* Added: pfshdrcalibrate now performs exposure merging in a noise-optimal manner
	* Added: pfsindcraw now calls libraw's dcraw_emu instead of dcraw if the former is available


pfstools - README 
-------------------------------------------------------------------     

For issues related to Ubuntu installation - see README.Ubuntu

For issues related to Mac OSX installation - see README.OSX

For issues related to Windows installation - see README.Cygwin

For specific notes on Matlab installation - see README.matlab

For compilation with Visual Studio (experimental) - see README.VisualStudio

pfstools is a set of command line (and two GUI) programs for reading,
writing, manipulating and viewing high-dynamic range (HDR) images and
video frames. All programs in the package exchange data using unix
pipes and a simple generic HDR image format (pfs). The concept of the
pfstools is similar to netpbm package for low-dynamic range images.

pfstools offers also a good integration with GNU Octave and
matlab. pfstools can serve as a matlab or Octave toolbox for reading
and writing HDR images.

pfs in not just another format for storing HDR images. It is more an attempt to 
integrate the existing HDR image formats by providing a simple data format that can 
be used to exchange data between applications. 

If you use the software for your research work, please consider citing
the paper:

Rafal Mantiuk, Grzegorz Krawczyk, Radoslaw Mantiuk and Hans-Peter Seidel.
High Dynamic Range Imaging Pipeline: Perception-motivated Representation
of Visual Content.
In: Proc. of Human Vision and Electronic Imaging XII. 649212.

@inproceedings{mantiuk:2007:hvei,
 author = {Mantiuk, Rafa{\l} and Krawczyk, Grzegorz and Mantiuk, Rados{\l}aw and Seidel, Hans-Peter},
 editor = {Rogowitz, Bernice E. and Pappas, Thrasyvoulos N. and Daly, Scott J.},
 title = {High Dynamic Range Imaging Pipeline: Perception-motivated Representation of Visual Content},
 booktitle = {Human Vision and Electronic Imaging XII},
 publisher = {SPIE},
 year = {2007},
 volume = {6492},
 number = {649212},
 series = {Proceedings of SPIE},
 address = {San Jose, USA},
 month = {February},
}

The paper is an introduction to both pfstools and HDR imaging in
general. It can be downloaded from:

http://pfstools.sourceforge.net/papers/mantiuk07hdr_pipeline.pdf
        
1. Compilation
-------------------------------------------------------------------
Is is strongly recommended to compile into an out-of-source directory:

cd <pfstools_dir>
mkdir build
cd build
cmake ../
make 

If the compilation fails because of a missing library, you can disable the offending component by setting WITH_<component_name> to false. For example:

cmake -DWITH_MATLAB=false ../

to disable matlab support. 

If you encounter any problems during compilation, run the make again with the option:

make VERBOSE=1

or, if you use nmake on Windows:

nmake /S

and report the problem with the complete error message to the google discussion group:

https://groups.google.com/forum/#!forum/pfstools

2. Directory Layout
-------------------------------------------------------------------

doc - documentation
src - all sources go there
  pfs          - pfs library (used by all tools)
  fileformat   - readers and writters for various file formats
  filter       - a range of "filters" from resize to changing color space
  octave       - GNU Octave scripts and libraries
  matlab       - matlab mex sources and functions
  pfsview      - qt application for viewing hdr images and other data
                 that can be stored in the pfs stream
  pfsglview    - similar as pfsview, but uses OpenGL & GLUT instead of Qt
  tmo          - contains tone-mapping operators (formerly pfstmo package)
  camera       - contains HDR merging and camera calibration tools
                 (formerly pfscalibration)
  hdrhtml      - makes HTML5 web-pages with viewable HDR images
  getopt       - used on Windows to compile using Visual Studio
  debian       - scripts to create Debian distro package. The scripts has not been updated and currently is not 
                 working.


3. Dependencies
-------------------------------------------------------------------

pfstools relies on a large number of libraries and other dependencies. However, the build script was designed to succeed even if some dependencies are missing. In that case, the tools that rely on those dependencies will not be compiled. If building with a certain dependency causes problems, it is possible to manually switch off that component by passing -DWITH_??=false to cmake.

Note that the development packages must be installed for all dependencies. They usually have '-dev' suffix. 

Below is the list of all dependencies requires for pfstools. They are more or less given on an order of importance.

OpenEXR 
	CMake switch: WITH_OpenEXR
	Tools: pfsinexr, pfsoutexr	
	
ImageMagick
	CMake switch: WITH_ImageMagick
	Tools: pfsinimgmagick, pfsoutimgmagick
	Used to read/write most LDR files. Required for 16-bit file support. "pfsin"/"pfsout" will use NetPBM if ImageMagick is not available
	
NetPBM
	CMake switch: WITH_NetPBM
	Tools: pfsinppm, pfsoutppm, (pfsindcraw)
	Alternative method of reading/writing LDR images. Note that this package is also required for pfsindcraw as ImageMagick cannot handle files read from unix pipes.

TIFF	
	CMake switch: WITH_TIFF
	Tools: pfsintiff, pfsouttiff
	TIFF images can also be read with pfsinimgmagick. This is a custom reader/writer, which supports LogLuv TIFF HDR image format.

QT 5
	CMake switch: WITH_QT
	Tools: pfsview
	"pfsview" is a primary HDR image viewer.
	If Qt library is not found, you need to specify the path to its cmake configuration files:

		cmake -D "CMAKE_PREFIX_PATH=~/Qt5location/qt5/5.7/gcc_64/" ../

OpenGL, GLUT (or FreeGLUT)
	CMake switch: WITH_pfsglview
	Tools: pfsglview
	pfsglview is a "backup" or alternative viewer. It is missing some features of pfsview, but offers faster zooming.

Matlab (mex)
	CMake switch: WITH_MATLAB
	Tools: all matlab scripts in src/matlab
	Note that you need to set matlab path to <install_dir>/share/pfstools/matlab

Octave	
	CMake switch: WITH_Octave
	Tools: All Octave scripts in src/octave
	There are still some unresolved issues running Octave scripts under cygwin. 
	
FFTW
	CMake switch: WITH_FFTW
	Tools: acceleration in pfstmo_durand02 (the TMO will be *very* slow otherwise)

GSL
	CMake switch: WITH_GSL
	Tools: pfstmo_mantiuk08
	The GSL math library is required for this TMO.

OpenCV	
	CMake switch: WITH_OpenCV
	Tools: pfsalign	
	Note that pfsalign requires SURF features, which are available on "nonfree" part of the library. Since part of the library is currently not included in most Linux distributions, so you will need to compile OpenCV from sources.

libraw
	CMake switch: none
	Tools: pfsindcraw
	From 2.2.0 libraw is used instead of dcraw, if it is available. libraw has better support for newer cameras. 

libexif
        Used in pfsalign.

3. Documentation
-------------------------------------------------------------------

First check the list of frequently asked questions in
./doc/faq.txt. Then browse relevant manual pages, which accompany each
program. The documentation for the pfs library API can be generated
with DoxyGen or found in the header files. If you want to include
reading or writing of pfs streams in your applications, refer to
./doc/pfs_format_spec.pdf.
