-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathREADME
658 lines (450 loc) · 21 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
Copyright (C) 2004-2009 Andrew Mihal.
Copyright (C) 2009-2017 Christoph Spiel.
This file is part of Enblend.
* Programs
This packages contains the programs Enblend and Enfuse. The source
code and further information about Enblend are available at:
http://enblend.sf.net
** Enblend
Enblend is a tool for compositing images using a Burt&Adelson
multiresolution spline. This technique tries to make the seams
between the input images invisible. The basic idea is that image
features should be blended across a transition zone proportional in
size to the spatial frequency of the features. For example, objects
like trees and windowpanes have rapid changes in color. By blending
these features in a narrow zone, you will not be able to see the seam
because the eye already expects to see color changes at the edge of
these features. Clouds and sky are the opposite. These features have
to be blended across a wide transition zone because any sudden change
in color will be immediately noticeable.
Enblend expects each input file to have an alpha channel. The alpha
channel should indicate the region of the file that has valid image
data. Enblend compares the alpha regions in the input files to find
the areas where images overlap. Alpha channels can be used to
indicate to Enblend that certain portions of an input image should not
contribute to the final image.
Enblend does not align images for you. Use a tool like Hugin or
PanoTools to do this. The files produced by these programs are
exactly what Enblend is designed to work with.
** Enfuse
Enfuse is a tool for automatic exposure blending, contrast blending
and much more. It can be used to fuse an exposure bracketed step
automatically into a nicely looking image.
* Installation
GNU Make is required to build the project, because some of the
Makefiles contain pattern rules.
** Tarball
./configure YOUR-OPTIONS-IF-ANY-GO-HERE
make
make install
** Mercurial Repository
*** AutoConf/AutoMake
In the root directory of the project issue:
make --makefile=Makefile.scm
./configure YOUR-OPTIONS-IF-ANY-GO-HERE
make
make install
The package fully supports VPATH builds. Thus the following command
sequence builds in a separate directory.
cd ROOT-DIRECTORY
make --makefile=Makefile.scm
mkdir BUILD-DIR
cd BUILD-DIR
ROOT-DIRECTORY/configure YOUR-OPTIONS-IF-ANY-GO-HERE
make
make install
If a less verbose output of the Make-process is desired, pass
`--enable-silent-rules' to configure(1), or `V=0' to make(1). As out
build uses recursion make(1) reports "Entering directory" and "Leaving
directory" which can only be suppressed with passing option
`--no-print-directory' to make(1).
*** CMake
The canonical way to build Enblend and Enfuse is with Autotools, this
is, autoconf(1) and automake(1). An alternative CMake build has been
added since version 4.0.
The CMake build strives to replicate the Autotools build. It may or
may not work for you. It is currently maintained but not supported,
meaning that it could break anywhere anytime in the future.
cmake .
make
make install
Analogously to Autotools, CMake allows for VPATH builds:
mkdir BUILD-DIR
cd BUILD-DIR
cmake ROOT-DIRECTORY
make
make install
* Specific Configuration Options
Among the usual configuration options of the GNU autoconf system, the
configure(1) script offers the following options to tailor Enblend and
Enfuse. Remember that configure(1) creates a file called "config.h"
that can serve for fine-tuning the configuration.
We write the default values of all configuration options in capital
letters.
** --enable-on-demand-dynlink=CHECK/yes/no
Link Enblend and Enfuse binaries with flags that instruct the dynamic
linker to delay loading dynamic libraries until they are actually
needed. This feature slightly decreases the load-time of the
binaries.
** --enable-partially-static-linking=NO/yes
Link against static libraries if they are performance critical for
Enblend or Enfuse. Currently, these are the GSL libraries and
LittleCMS2. The performance gain is some five percent at the cost of
only slightly larger binaries. The configuration option may also be
interesting if the target system should not require GSL libraries.
If partial static linking is on, configure(1) looks for "libatlas.a"
and "libcblas.a" to replace "libgslcblas.a" and use an optimized BLAS.
** --enable-openmp=yes/NO
-DENABLE_OPENMP=ON/off (CMake)
Parallelize parts of Enblend and Enfuse with OpenMP. See
http://www.openmp.org/
If auto-detection of OpenMP misfires, set appropriate OPENMP_CXXFLAGS
during configuration. For example, CLang++ may need the argument-form
of option `-fopenmp':
-fopenmp=libiomp5
In addition OpenMP support libraries may live in non-standard places.
These too can be specified in OPENMP_CXXFLAGS, because the flags will
be used for compilation and linking.
When OpenMP support has been enabled, the utilization of special
features of the actual, underlying OpenMP implementation can be
controlled as usual with the environment variables OMP_NUM_THREADS,
OMP_NESTED and OMP_DYNAMIC. See the OpenMP specification for details
on the usage of these variables.
** --enable-opencl=YES/no
Enable parallel execution of parts of Enblend and Enfuse with OpenCL
on machines providing the proper hardware. See
http://www.khronos.org/opencl/
As Enblend and Enfuse are written in C++ we prefer the C++-header of
OpenCL, namely "cl.hpp". This file does not always come
(pre-)installed, but can be downloaded from the canonical site,
Khronos OpenCL API Registry
http://www.khronos.org/registry/cl/
Currently, we compile and test against OpenCL API version 1.2. The
header files associated with the older versions 1.0 and 1.1 are
flawed; They do not compile with some compilers (e.g. CLang++).
It is advisable to match the API versions of C-headers and the
C++-header file. On systems with multiple header hierarchies
(e.g. /usr/include and /usr/local/include) particular care must be
taken that the correct headers are used at configuration time and at
compile time.
** --enable-debug=yes/NO
Compile without optimizations and enable all debug-checking code. The
default is "no", build an optimized version without debugging symbols.
** --with-dl=CHECK/yes/no/dl/gmodule
Enable user-defined exposure weight functions in Enblend. With
argument "check", test for POSIX-compatible dynamic-loader (dl) and if
unsuccessful for GLib implementation (gmodule).
** --with-exiv2=CHECK/yes/no
Use Exiv2 library for meta-data transfer of the input images to the
result. Without this library Enblend or Enfuse will not copy any EXIF
meta data.
** --with-tcmalloc=CHECK/yes/no
-DENABLE_TCMALLOC=OFF/on (CMake)
Compile with Google's TCMalloc. This library generally improves
memory allocation performance. Enblend and Enfuse prefer TCMalloc's
functions inside OpenMP parallel regions and thereby reduce the load
of the operating system's memory allocator.
Find more information on TCMalloc at
http://goog-perftools.sourceforge.net/doc/tcmalloc.html
** --with-dmalloc=yes/NO
Compile with the debug-malloc library. The library is available at
http://www.dmalloc.com/.
** --with-openexr=CHECK/yes/no
Build with support for reading and writing OpenEXR images. See
http://www.openexr.com/ for the required libraries.
* CMake Specifics
** Configuration Options
These options only apply to CMake.
*** -DCPACK_BINARY_<SYSTEM>:BOOL=OFF/on
Create a package for the specified <SYSTEM>, where <SYSTEM> is "DEB",
"RPM", or "NSIS".
*** -DCPACK_BINARY_<SYSTEM>:BOOL=ON/off
Create other packages for the specified <SYSTEM>, where <SYSTEM> is
"TBZ2", "TGZ", "STGZ", or "TZ".
*** -DPACK_SOURCE_<SYSTEM>:BOOL=OFF/on
Create a source package for the specified <SYSTEM>, where <SYSTEM> is
"TBZ2", "TGZ", "TZ", or "ZIP".
** Configuration Example
Creating a RedHat package on OpenSuSE
cmake . \
-DDOC=ON \
-DENABLE_OPENMP=ON \
-DCPACK_BINARY_RPM:BOOL=ON
make package
This will create a package enblend-4.0.595-Linux.rpm, which you may
install with
sudo rpm -U enblend-4.0.595-Linux.rpm
** Important Configured Make(1) Targets
help List all available targets.
edit_cache If cmake-gui(1) is installed, start the GUI
to edit the "CMakeCache.txt" file.
enblend Create an Enblend executable.
enfuse Create an Enfuse executable.
man Create the manual pages for Enblend and
Enfuse.
install Install everything in the proper places.
package Create package(s) specified with the
CPACK_BINARY_<SYSTEM>:BOOL parameter of
CMake. It is preferred to create a package
and use the package manager to install it
rather than using the "install" target.
rebuild_cache In a changed environment (e.g. newly
installed packages) this is the way to
discard cached values, so that CMake again
starts searching for everything.
package_source Build a source package like autotools
"make dist".
* Extra Make(1) Variables
** Compilation
You can override Makefile variables the usual way. In addition the
build process supplies several variables, all starting with "EXTRA",
that add their value to the "usual suspects". These are
CPPFLAGS -- EXTRACPPFLAGS
CFLAGS -- EXTRACFLAGS
CXXFLAGS -- EXTRACXXFLAGS
LDFLAGS -- EXTRALDFLAGS
All these "EXTRA" are intentionally unaffected by the
Automake/Autoconf generation of the Makefiles proper. That way
developers can override configured settings in any make(1) run or
quickly build the project with new combinations of flags.
For example, to quickly add an additional define, use
make EXTRACPPFLAGS=-DDEBUG_8BIT_ONLY
To compile for coverage analysis, say
make EXTRACXXFLAGS="-O0 --coverage" EXTRALDFLAGS="--coverage"
analogously for profiling analysis
make EXTRACXXFLAGS=-pg EXTRALDFLAGS=-pg
** Documentation Generation
We have introduced the variable
DYNAMIC_TEX_PREAMBLE
to give the maintainers and packagers better control over the
generation of the documentation. The contents of the variable goes
_before_ `\documentclass' so that even the document class can be
selected dynamically.
DYNAMIC_TEX_PREAMBLE can define the argument-less macros
`\documentclassoptions' which defines LaTeX \documentclass options
(thingies within square brackets) and `\finishdynamicpreamble' which
is expanded right before `\begin{document}' and thus _after_ all
packages have been loaded.
Some possibilities for `DYNAMIC_TEX_PREAMBLE' are
\hyperreftrue
\referencemanualtrue
\usepackage[showframe]{geometry}
\def\documentclassoptions{11pt,twoside}
\def\finishdynamicpreamble{\overfullrule=2pt\relax}
* Documentation
The distribution includes the manual pages in
src/enblend.1
src/enfuse.1
After the configuration you can build documentation in PostScript,
HTML, and possibly PDF formats.
make ps
make pdf
make html
The default paper size for all non-HTML formats is DIN A4. Override
make(1) variable `PAPERSIZE' to get e.g. Letter format. The default
resolution is 600 dpi; override it with `PRINT_RESOLUTION'. The
_printed_ versions can be formatted in two different styles: the usual
LaTeX `report' and `refman' style that borrows from old reference
manuals. Pass
DYNAMIC_TEX_PREAMBLE=\referencemanualtrue
to make(1) when generating a non-HTML format to get the `refman'
style. The reference manual style does _not_ work with HTML, in other
words, hevea(1) will barf. By default only PDFLaTeX turns on
HyperRef, for all other translators (in particular if PDF is
indirectly generated) it must be enabled with
DYNAMIC_TEX_PREAMBLE=\hyperreftrue
** HTML Generation
The default target `html' builds the HTML documentation as monolithic
files, which means the single HTML file "enblend.html" for Enblend and
"enfuse.html" for Enfuse. To build split versions with one chapter
per file of each of them use the target `split-html', where the root
files will be `enblend-index.html' and `enfuse-index.html' . Install
the broken-down version with `install-split-html'.
** PDF Generation
The canonical way to reach at PDF files i.e.
make pdf
is directly, via PDFLaTeX: LaTeX -> PDF. If for some reason this path
does not work, we provide two alternatives.
*** Alternative 1: LaTeX -> DVI -> PDF
Use dvipdfmx(1) to convert the final DVI files to PDF. It is
recommended to issue a
make clean
before starting to construct the PDF files this way! Add the
following commands to DYNAMIC_TEX_PREAMBLE:
- To get correctly positioned graphics
\PassOptionsToPackage{dvipdfmx}{graphicx}
- For all the hyperref goodies (e.g. clickable cross refferences)
\PassOptionsToPackage{dvipdfmx}{hyperref}\hyperreftrue
- To get the right color associations
\PassOptionsToPackage{dvipdfmx}{color}
Sometimes
EXTRA_LATEX_FLAGS='-shell-escape'
may be required. The targets are called "enblend.dvi.pdf" and
"enfuse.dvi.pdf", rename the products if necessary. See
doc/Makefile.am for details.
*** Alternative 2: LaTeX -> DVI -> PostScript -> PDF
Use GhostScript (gs(1)) in the incarnation of ps2pdf(1) to convert the
final PostScript files to PDF. None of the hyperref goodies makes it
through dvips(1). The targets are called "enblend.ps.pdf" and
"enfuse.ps.pdf"; rename if necessary; see doc/Makefile.am for details.
** Required Tools For Building the Documentation
Note that some additional packages are required to build these
formats:
convert - ImageMagick's swiss army knife of graphics
format conversion found at
http://www.imagemagick.org/.
dvips - Convert TeX's DVI format to PostScript.
gnuplot - Render plots (.gp) in text, PNG, EPS, and PDF
formats. Check out http://www.gnuplot.info/.
hevea - Convert LaTeX to HTML. Find more information
at http://hevea.inria.fr/.
latex, pdflatex - Typeset the LaTeX documents in DVI or PDF.
makeindex - Index generation for several typesetters.
dot - Graph generation. Part of the `GraphViz' suite.
See http://www.graphviz.org/.
rsvg-convert - Convert SVG to a variety of other formats, not
only raster images, but also EPS.
Check out http://librsvg.sourceforge.net/.
The tool texloganalyser(1) is optional. Its sole use is to beautify
LaTeX output in non-verbose (V=0) mode.
* Operating System Specific Instructions and Hints
** GNU/Linux
*** High-Performance Binaries
To configure and compile high-performance versions of Enblend and
Enfuse configure SMP boxes with
--enable-openmp
and pass
EXTRACXXFLAGS="-march=native -O2"
to make(1). The resulting binaries are pretty fast, although other
configuration options or compiler flags might improve their
performance even more.
*** Xmi and Xi
To avoid direct linkage to the two X11 libraries Xmi and Xi add
"--without-x" to the parameters of configure(1).
** MacOSX
*** Compiling on MacOSX
On MacOSX you can build Enblend/Enfuse with Fink and with MacPorts.
This README only describes the MacPorts way.
**** Prerequisites
- XCode: Install the XCode version for your MacOSX version. Download it
from
http://developer.apple.com/tools/download/
- MacPorts: Install MacPorts for your MacOSX version. Download it
from
http://www.macports.org/
**** Provide necessary dependencies
From the command line:
$ sudo port install make lcms boost jpeg tiff libpng OpenEXR mercurial
Note that Enblend/Enfuse can be build via AutoConf/AutoMake and via
CMake. The latter is experimental. If you want to build via CMake,
add "cmake" to the previous command line after "mercurial" like this:
$ sudo port install make lcms boost jpeg tiff libpng OpenEXR mercurial cmake
**** Compile
As MacPorts resides in /opt/local, which is not a standard
library/binary/include path for most source packages, you need to
specify that during the configure step.
Via AutoConf/AutoMake:
cd enblend
make --makefile=Makefile.scm
mkdir build
cd build
CPPFLAGS=-I/opt/local/include LDFLAGS=-L/opt/local/lib ../configure
make
sudo make install
Via CMake:
cd enblend
make --makefile=Makefile.scm
mkdir build
cd build
CPPFLAGS=-I/opt/local/include LDFLAGS=-L/opt/local/lib cmake ..
make
sudo make install
This will install Enblend/Enfuse in /usr/local.
**** Other compilation options
Please also check the AutoConf/AutoMake and CMake variables for more
build options.
** Win
*** General
There are two different archives: one with 32-bit executables, the
other one with 64-bit executables. Both variants are compiled with
multi-threaded support (via OpenMP).
*** Compiling on Windows
**** Prerequisites
You will need to following tools for compiling:
- MS Visual C++ 2015, works also with Community Edition
(older compiler may work, but have not been tested)
- CMake, at least version 2.8
- Perl, e.g. ActiveState Perl
CMake expects all sources and libraries in one folder. So, create a
folder, e.g., "d:\src", extract Enblend/Enfuse into this folder, and
also put all libraries into this folder.
You need the following libraries for reading and writing different
image formats. We state the version and the folder name of the
libraries used as of March 2016 in square brackets.
- libtiff [libtiff-4.0.6 in tiff]
- zlib, required by libtiff [1.2.8 in zlib]
- libjpeg (optional) [jpeg-9b]
- libpng (optional) [libpng-1.6.21 in libpng]
- OpenEXR and IlmBase (optional), compiled libraries are
expected in folder "Deploy" [OpenEXR-2.2.0 and IlmBase-2.2.0]
- vigra, required, should be compiled against same
libtifff, libjpeg, libpng and OpenEXR as used for Enblend/Enfuse
[1.10.0 in vigra]
Enblend/Enfuse also depend on the following libraries:
- Boost [1.60 in boost_1_60_0]
- Only header files are used by default.
- Optionally, Enblend/Enfuse can use the Filesystem Library.
However, this library needs to compiled against STLport.
- Little-CMS2 [2.4 in lcm2-2.4]
**** Compile
1. Start cmake-gui or cmake-setup.
2. Enter path to Enblend/Enfuse source in "Where is the source code".
3. Enter path where to build the executable,
e.g. "d:\src\build-enblend". In following, it will be denoted as
<BUILDDIR>.
4. Select "Configure" when asked for a generator select the
appropriate generator.
5. Activate the appropriate options.
***** ENABLE_OPENMP=on/OFF
Parallelize parts of Enblend and Enfuse with OpenMP. See
http://www.openmp.org/
If OpenMP support has been enabled, the utilization of special
features of the actual, underlying OpenMP implementation can be
controlled as usual with the environment variables OMP_NUM_THREADS,
OMP_NESTED and OMP_DYNAMIC. See the OpenMP specification for details
on the usage of these variables.
***** ENABLE_SSE2=on/OFF
Creates executable which make use of the advanced features (SSE2) of
modern processors.
***** DOC=on/OFF
Building the documentation works also on Windows. It requires more
tools (see above). Some tools have several different variants for
Windows available, but not all work with Enblend/Enfuse documentation.
If you experience errors try another variant or version.
**** Compile (cont.)
6. Select "Configure". Maybe you need start the configuration step
several times until all dependencies are resolved.
7. Select "Generate".
8. Close CMake.
9. Open solution file <BUILDDIR>\enblend.sln.
10. Select "Release" in Solution Configuration pull-down menu, and
then choose Build > Build Solution. This step takes some time.
11. Select project "INSTALL" in Solution Explorer, and then choose
Build > Project Only > Build Only INSTALL.
12. Close Visual C++ 2008 Express Edition
13. Find the generated executables in <BUILDDIR>\INSTALLDIR\FILES.
* License
Enblend is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
Enblend is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Enblend; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Local Variables:
mode: outline
End: