diff -Nru enblend-enfuse-4.1.3+dfsg/aclocal.m4 enblend-enfuse-4.1.4+dfsg/aclocal.m4 --- enblend-enfuse-4.1.3+dfsg/aclocal.m4 2014-03-22 12:47:01.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/aclocal.m4 2015-10-03 11:18:53.000000000 +0000 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.14.1 -*- Autoconf -*- +# generated automatically by aclocal 1.15 -*- Autoconf -*- -# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Copyright (C) 1996-2014 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -180,7 +180,62 @@ fi[]dnl ])# PKG_CHECK_MODULES -# Copyright (C) 2002-2013 Free Software Foundation, Inc. + +# PKG_INSTALLDIR(DIRECTORY) +# ------------------------- +# Substitutes the variable pkgconfigdir as the location where a module +# should install pkg-config .pc files. By default the directory is +# $libdir/pkgconfig, but the default can be changed by passing +# DIRECTORY. The user can override through the --with-pkgconfigdir +# parameter. +AC_DEFUN([PKG_INSTALLDIR], +[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) +m4_pushdef([pkg_description], + [pkg-config installation directory @<:@]pkg_default[@:>@]) +AC_ARG_WITH([pkgconfigdir], + [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, + [with_pkgconfigdir=]pkg_default) +AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) +m4_popdef([pkg_default]) +m4_popdef([pkg_description]) +]) dnl PKG_INSTALLDIR + + +# PKG_NOARCH_INSTALLDIR(DIRECTORY) +# ------------------------- +# Substitutes the variable noarch_pkgconfigdir as the location where a +# module should install arch-independent pkg-config .pc files. By +# default the directory is $datadir/pkgconfig, but the default can be +# changed by passing DIRECTORY. The user can override through the +# --with-noarch-pkgconfigdir parameter. +AC_DEFUN([PKG_NOARCH_INSTALLDIR], +[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) +m4_pushdef([pkg_description], + [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) +AC_ARG_WITH([noarch-pkgconfigdir], + [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, + [with_noarch_pkgconfigdir=]pkg_default) +AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) +m4_popdef([pkg_default]) +m4_popdef([pkg_description]) +]) dnl PKG_NOARCH_INSTALLDIR + + +# PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, +# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# ------------------------------------------- +# Retrieves the value of the pkg-config variable for the given module. +AC_DEFUN([PKG_CHECK_VAR], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl + +_PKG_CONFIG([$1], [variable="][$3]["], [$2]) +AS_VAR_COPY([$1], [pkg_cv_][$1]) + +AS_VAR_IF([$1], [""], [$5], [$4])dnl +])# PKG_CHECK_VAR + +# Copyright (C) 2002-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -192,10 +247,10 @@ # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.14' +[am__api_version='1.15' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.14.1], [], +m4_if([$1], [1.15], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -211,14 +266,74 @@ # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.14.1])dnl +[AM_AUTOMAKE_VERSION([1.15])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) +# Copyright (C) 2011-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_AR([ACT-IF-FAIL]) +# ------------------------- +# Try to determine the archiver interface, and trigger the ar-lib wrapper +# if it is needed. If the detection of archiver interface fails, run +# ACT-IF-FAIL (default is to abort configure with a proper error message). +AC_DEFUN([AM_PROG_AR], +[AC_BEFORE([$0], [LT_INIT])dnl +AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl +AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([ar-lib])dnl +AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false]) +: ${AR=ar} + +AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface], + [AC_LANG_PUSH([C]) + am_cv_ar_interface=ar + AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])], + [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD' + AC_TRY_EVAL([am_ar_try]) + if test "$ac_status" -eq 0; then + am_cv_ar_interface=ar + else + am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&AS_MESSAGE_LOG_FD' + AC_TRY_EVAL([am_ar_try]) + if test "$ac_status" -eq 0; then + am_cv_ar_interface=lib + else + am_cv_ar_interface=unknown + fi + fi + rm -f conftest.lib libconftest.a + ]) + AC_LANG_POP([C])]) + +case $am_cv_ar_interface in +ar) + ;; +lib) + # Microsoft lib, so override with the ar-lib wrapper script. + # FIXME: It is wrong to rewrite AR. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__AR in this case, + # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something + # similar. + AR="$am_aux_dir/ar-lib $AR" + ;; +unknown) + m4_default([$1], + [AC_MSG_ERROR([could not determine $AR interface])]) + ;; +esac +AC_SUBST([AR])dnl +]) + # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -263,15 +378,14 @@ # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], -[dnl Rely on autoconf to set up CDPATH properly. -AC_PREREQ([2.50])dnl -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` +[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2013 Free Software Foundation, Inc. +# Copyright (C) 1997-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -302,7 +416,7 @@ Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -493,7 +607,7 @@ # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -569,7 +683,7 @@ # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -659,8 +773,8 @@ # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl @@ -734,6 +848,9 @@ AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi +dnl The trailing newline in this macro's definition is deliberate, for +dnl backward compatibility and to allow trailing 'dnl'-style comments +dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not @@ -763,7 +880,7 @@ done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -774,7 +891,7 @@ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -if test x"${install_sh}" != xset; then +if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; @@ -784,7 +901,7 @@ fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2013 Free Software Foundation, Inc. +# Copyright (C) 2003-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -805,7 +922,7 @@ # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -855,7 +972,7 @@ # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2013 Free Software Foundation, Inc. +# Copyright (C) 1997-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -894,7 +1011,7 @@ # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -923,7 +1040,7 @@ AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -970,7 +1087,7 @@ # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -989,7 +1106,7 @@ # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1070,7 +1187,7 @@ rm -f conftest.file ]) -# Copyright (C) 2009-2013 Free Software Foundation, Inc. +# Copyright (C) 2009-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1130,7 +1247,7 @@ _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1158,7 +1275,7 @@ INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2013 Free Software Foundation, Inc. +# Copyright (C) 2006-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1177,7 +1294,7 @@ # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2013 Free Software Foundation, Inc. +# Copyright (C) 2004-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff -Nru enblend-enfuse-4.1.3+dfsg/ar-lib enblend-enfuse-4.1.4+dfsg/ar-lib --- enblend-enfuse-4.1.3+dfsg/ar-lib 1970-01-01 00:00:00.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/ar-lib 2015-10-03 11:18:55.000000000 +0000 @@ -0,0 +1,270 @@ +#! /bin/sh +# Wrapper for Microsoft lib.exe + +me=ar-lib +scriptversion=2012-03-01.08; # UTC + +# Copyright (C) 2010-2014 Free Software Foundation, Inc. +# Written by Peter Rosin . +# +# This program 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, or (at your option) +# any later version. +# +# This program 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 this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + + +# func_error message +func_error () +{ + echo "$me: $1" 1>&2 + exit 1 +} + +file_conv= + +# func_file_conv build_file +# Convert a $build file to $host form and store it in $file +# Currently only supports Windows hosts. +func_file_conv () +{ + file=$1 + case $file in + / | /[!/]*) # absolute file, and not a UNC file + if test -z "$file_conv"; then + # lazily determine how to convert abs files + case `uname -s` in + MINGW*) + file_conv=mingw + ;; + CYGWIN*) + file_conv=cygwin + ;; + *) + file_conv=wine + ;; + esac + fi + case $file_conv in + mingw) + file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` + ;; + cygwin) + file=`cygpath -m "$file" || echo "$file"` + ;; + wine) + file=`winepath -w "$file" || echo "$file"` + ;; + esac + ;; + esac +} + +# func_at_file at_file operation archive +# Iterate over all members in AT_FILE performing OPERATION on ARCHIVE +# for each of them. +# When interpreting the content of the @FILE, do NOT use func_file_conv, +# since the user would need to supply preconverted file names to +# binutils ar, at least for MinGW. +func_at_file () +{ + operation=$2 + archive=$3 + at_file_contents=`cat "$1"` + eval set x "$at_file_contents" + shift + + for member + do + $AR -NOLOGO $operation:"$member" "$archive" || exit $? + done +} + +case $1 in + '') + func_error "no command. Try '$0 --help' for more information." + ;; + -h | --h*) + cat < Max Lyons Andrew Mihal + Thomas Modes Christoph Spiel Brent Townshend @@ -10,9 +11,8 @@ Win32 porting: Joe Beda Mark - mjz - Thomas Modes - Ryan Sleevi + Ryan Sleevi CMake maintanance: - Kornel Benko + Kornel Benko diff -Nru enblend-enfuse-4.1.3+dfsg/CMakeLists.txt enblend-enfuse-4.1.4+dfsg/CMakeLists.txt --- enblend-enfuse-4.1.3+dfsg/CMakeLists.txt 2013-01-18 09:01:29.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/CMakeLists.txt 2015-08-07 12:47:33.000000000 +0000 @@ -1,7 +1,7 @@ # This file is part of enblend/enfuse. # Licence details can be found in the file COPYING. # -# Copyright(c) 2009-2010, Kornel Benko +# Copyright(c) 2009-2015, Kornel Benko # , Ryan Sleevi # , Harry van der Wolf # Original file from lyx-project, heavily modified diff -Nru enblend-enfuse-4.1.3+dfsg/compile enblend-enfuse-4.1.4+dfsg/compile --- enblend-enfuse-4.1.3+dfsg/compile 2014-03-22 12:47:03.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/compile 2015-10-03 11:18:55.000000000 +0000 @@ -3,7 +3,7 @@ scriptversion=2012-10-14.11; # UTC -# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Copyright (C) 1999-2014 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify diff -Nru enblend-enfuse-4.1.3+dfsg/config.guess enblend-enfuse-4.1.4+dfsg/config.guess --- enblend-enfuse-4.1.3+dfsg/config.guess 2014-03-22 12:47:03.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/config.guess 2015-10-03 11:18:55.000000000 +0000 @@ -1,8 +1,8 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2013 Free Software Foundation, Inc. +# Copyright 1992-2015 Free Software Foundation, Inc. -timestamp='2013-06-10' +timestamp='2015-08-20' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -24,12 +24,12 @@ # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # -# Originally written by Per Bothner. +# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # -# Please send patches with a ChangeLog entry to config-patches@gnu.org. +# Please send patches to . me=`echo "$0" | sed -e 's,.*/,,'` @@ -50,7 +50,7 @@ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2013 Free Software Foundation, Inc. +Copyright 1992-2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -149,7 +149,7 @@ LIBC=gnu #endif EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac @@ -168,20 +168,27 @@ # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ + /sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || \ + echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; + earmv*) + arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` + endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` + machine=${arch}${endian}-unknown + ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) + arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ @@ -197,6 +204,13 @@ os=netbsd ;; esac + # Determine ABI tags. + case "${UNAME_MACHINE_ARCH}" in + earm*) + expr='s/^earmv[0-9]/-eabi/;s/eb$//' + abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` + ;; + esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need @@ -207,13 +221,13 @@ release='-gnu' ;; *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" + echo "${machine}-${os}${release}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` @@ -235,6 +249,9 @@ *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; + *:Sortix:*:*) + echo ${UNAME_MACHINE}-unknown-sortix + exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) @@ -579,8 +596,9 @@ else IBM_ARCH=powerpc fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` + if [ -x /usr/bin/lslpp ] ; then + IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | + awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi @@ -826,7 +844,7 @@ *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; - i*:MSYS*:*) + *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) @@ -932,6 +950,9 @@ crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; + e2k:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; @@ -969,10 +990,10 @@ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; - or1k:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + openrisc*:Linux:*:*) + echo or1k-unknown-linux-${LIBC} exit ;; - or32:Linux:*:*) + or32:Linux:*:* | or1k*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) @@ -1020,7 +1041,7 @@ echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} @@ -1260,16 +1281,26 @@ if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - case $UNAME_PROCESSOR in - i386) UNAME_PROCESSOR=x86_64 ;; - powerpc) UNAME_PROCESSOR=powerpc64 ;; - esac + if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi fi + elif test "$UNAME_PROCESSOR" = i386 ; then + # Avoid executing cc on OS X 10.9, as it ships with a stub + # that puts up a graphical alert prompting to install + # developer tools. Any system running Mac OS X 10.7 or + # later (Darwin 11 and later) is required to have a 64-bit + # processor. This is not true of the ARM version of Darwin + # that Apple uses in portable devices. + UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; @@ -1361,154 +1392,6 @@ exit ;; esac -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi - cat >&2 <. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. @@ -68,7 +68,7 @@ version="\ GNU config.sub ($timestamp) -Copyright 1992-2013 Free Software Foundation, Inc. +Copyright 1992-2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -117,7 +117,7 @@ case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os @@ -255,16 +255,18 @@ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ + | ba \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ - | epiphany \ - | fido | fr30 | frv \ + | e2k | epiphany \ + | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ + | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ @@ -282,8 +284,10 @@ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ + | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ @@ -295,14 +299,14 @@ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ - | open8 \ - | or1k | or32 \ + | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ + | riscv32 | riscv64 \ | rl78 | rx \ | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ @@ -310,6 +314,7 @@ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | visium \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) @@ -324,7 +329,10 @@ c6x) basic_machine=tic6x-unknown ;; - m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) + leon|leon[3-9]) + basic_machine=sparc-$basic_machine + ;; + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; @@ -369,18 +377,20 @@ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ + | ba-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ + | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ + | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ @@ -400,8 +410,10 @@ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ @@ -413,16 +425,18 @@ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ + | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ + | riscv32-* | riscv64-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ @@ -430,6 +444,7 @@ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ + | visium-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ @@ -506,6 +521,9 @@ basic_machine=i386-pc os=-aros ;; + asmjs) + basic_machine=asmjs-unknown + ;; aux) basic_machine=m68k-apple os=-aux @@ -767,6 +785,9 @@ basic_machine=m68k-isi os=-sysv ;; + leon-*|leon[3-9]-*) + basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` + ;; m68knommu) basic_machine=m68k-unknown os=-linux @@ -822,6 +843,10 @@ basic_machine=powerpc-unknown os=-morphos ;; + moxiebox) + basic_machine=moxie-unknown + os=-moxiebox + ;; msdos) basic_machine=i386-pc os=-msdos @@ -1354,7 +1379,7 @@ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* | -aros* \ + | -aos* | -aros* | -cloudabi* | -sortix* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ @@ -1367,14 +1392,14 @@ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ + | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) @@ -1592,9 +1617,6 @@ mips*-*) os=-elf ;; - or1k-*) - os=-elf - ;; or32-*) os=-coff ;; diff -Nru enblend-enfuse-4.1.3+dfsg/configure enblend-enfuse-4.1.4+dfsg/configure --- enblend-enfuse-4.1.3+dfsg/configure 2014-03-22 12:47:04.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/configure 2015-10-03 11:18:56.000000000 +0000 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for enblend-enfuse 4.1.3. +# Generated by GNU Autoconf 2.69 for enblend-enfuse 4.1.4. # # Report bugs to . # @@ -580,8 +580,8 @@ # Identity of this package. PACKAGE_NAME='enblend-enfuse' PACKAGE_TARNAME='enblend-enfuse' -PACKAGE_VERSION='4.1.3' -PACKAGE_STRING='enblend-enfuse 4.1.3' +PACKAGE_VERSION='4.1.4' +PACKAGE_STRING='enblend-enfuse 4.1.4' PACKAGE_BUGREPORT='https://bugs.launchpad.net/enblend' PACKAGE_URL='' @@ -677,6 +677,8 @@ GREP CXXCPP RANLIB +ac_ct_AR +AR am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE @@ -746,6 +748,7 @@ docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -845,6 +848,7 @@ sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -1097,6 +1101,15 @@ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1234,7 +1247,7 @@ for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1347,7 +1360,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures enblend-enfuse 4.1.3 to adapt to many kinds of systems. +\`configure' configures enblend-enfuse 4.1.4 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1387,6 +1400,7 @@ --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -1421,7 +1435,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of enblend-enfuse 4.1.3:";; + short | recursive ) echo "Configuration of enblend-enfuse 4.1.4:";; esac cat <<\_ACEOF @@ -1550,7 +1564,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -enblend-enfuse configure 4.1.3 +enblend-enfuse configure 4.1.4 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2231,7 +2245,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by enblend-enfuse $as_me 4.1.3, which was +It was created by enblend-enfuse $as_me 4.1.4, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2610,7 +2624,7 @@ -am__api_version='1.14' +am__api_version='1.15' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or @@ -2782,8 +2796,8 @@ ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in @@ -2802,7 +2816,7 @@ $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi -if test x"${install_sh}" != xset; then +if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; @@ -3096,7 +3110,7 @@ # Define the identity of the package. PACKAGE='enblend-enfuse' - VERSION='4.1.3' + VERSION='4.1.4' cat >>confdefs.h <<_ACEOF @@ -3130,8 +3144,8 @@ # mkdir_p='$(MKDIR_P)' -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' @@ -4620,6 +4634,178 @@ fi + +if test -n "$ac_tool_prefix"; then + for ac_prog in ar lib "link -lib" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar lib "link -lib" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi + +: ${AR=ar} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5 +$as_echo_n "checking the archiver ($AR) interface... " >&6; } +if ${am_cv_ar_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + am_cv_ar_interface=ar + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int some_variable = 0; +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 + (eval $am_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -eq 0; then + am_cv_ar_interface=ar + else + am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 + (eval $am_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -eq 0; then + am_cv_ar_interface=lib + else + am_cv_ar_interface=unknown + fi + fi + rm -f conftest.lib libconftest.a + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5 +$as_echo "$am_cv_ar_interface" >&6; } + +case $am_cv_ar_interface in +ar) + ;; +lib) + # Microsoft lib, so override with the ar-lib wrapper script. + # FIXME: It is wrong to rewrite AR. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__AR in this case, + # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something + # similar. + AR="$am_aux_dir/ar-lib $AR" + ;; +unknown) + as_fn_error $? "could not determine $AR interface" "$LINENO" 5 + ;; +esac + if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 @@ -6286,7 +6472,6 @@ - ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -8349,14 +8534,6 @@ fi -ac_fn_cxx_check_header_mongrel "$LINENO" "boost/logic/tribool.hpp" "ac_cv_header_boost_logic_tribool_hpp" "$ac_includes_default" -if test "x$ac_cv_header_boost_logic_tribool_hpp" = xyes; then : - -else - as_fn_error $? "Boost \"tribool\" header file is required to compile Enblend." "$LINENO" 5 -fi - - ac_fn_cxx_check_header_mongrel "$LINENO" "boost/math/special_functions.hpp" "ac_cv_header_boost_math_special_functions_hpp" "$ac_includes_default" if test "x$ac_cv_header_boost_math_special_functions_hpp" = xyes; then : @@ -11042,7 +11219,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by enblend-enfuse $as_me 4.1.3, which was +This file was extended by enblend-enfuse $as_me 4.1.4, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -11108,7 +11285,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -enblend-enfuse config.status 4.1.3 +enblend-enfuse config.status 4.1.4 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -Nru enblend-enfuse-4.1.3+dfsg/configure.ac enblend-enfuse-4.1.4+dfsg/configure.ac --- enblend-enfuse-4.1.3+dfsg/configure.ac 1970-01-01 00:00:00.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/configure.ac 2015-10-03 11:18:49.000000000 +0000 @@ -0,0 +1,591 @@ +AC_PREREQ(2.59) +AC_INIT(enblend-enfuse, + [m4_esyscmd([tr -d '\n' < VERSION])], + [https://bugs.launchpad.net/enblend]) +AC_CONFIG_SRCDIR([src/enblend.cc]) +AC_CONFIG_AUX_DIR([.]) +AC_CONFIG_MACRO_DIR(m4) +AM_INIT_AUTOMAKE([-Wall]) +AC_CONFIG_HEADER([config.h]) + +# Checks for programs/compilers. +# avoid default CXXFLAGS, they trigger a compiler error with g++ 4.2 +CXXFLAGS_ORIG=$CXXFLAGS +AC_PROG_CXX +CXXFLAGS=$CXXFLAGS_ORIG +AC_PROG_CC +AM_PROG_AR +AC_PROG_RANLIB +AC_LANG(C++) + +AC_C_BIGENDIAN + +# Checks for libraries. +AC_CHECK_LIB([m], [sqrt]) +AC_CHECK_LIB([gslcblas], [cblas_dgemm]) +AC_CHECK_LIB([gsl], [gsl_blas_dgemm]) + +AC_CHECK_LIB(z, gzopen, + [], + AC_MSG_NOTICE([Compiling without libz.]), []) +AC_CHECK_LIB(jpeg, jpeg_finish_compress, + [LIBS="-ljpeg ${LIBS}"; AC_DEFINE(HasJPEG, 1, [Define if you have the jpeg library])], + AC_MSG_NOTICE([Compiling without support for jpeg files.]), []) +AC_CHECK_LIB(png, png_init_io, + [LIBS="-lpng ${LIBS}"; AC_DEFINE(HasPNG, 1, [Define if you have the png library])], + AC_MSG_NOTICE([Compiling without support for png files.]), []) +AC_CHECK_LIB(tiff, TIFFOpen, + [LIBS="-ltiff ${LIBS}"; AC_DEFINE(HasTIFF, 1, [Define if you have the tiff library])], + AC_MSG_ERROR([libtiff is required to compile Enblend.]), []) +AC_CHECK_LIB(lcms2, cmsCreateTransform, + [], + AC_MSG_ERROR([liblcms2 is required to compile Enblend.]), []) + +AC_MSG_CHECKING([for Vigra import/export-library]) +LIBS="-lvigraimpex $LIBS" +AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], + [[vigra::impexListFormats()]])], + AC_MSG_RESULT(yes), + [AC_MSG_RESULT(no) + AC_MSG_ERROR([libvigraimpex is required to compile Enblend.])]) +AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], + [[vigra::ImageImportInfo info("image.tif"); info.setImageIndex(99)]])], + AC_MSG_RESULT(yes), + [AC_MSG_RESULT(no) + AC_MSG_ERROR([Vigra was found, but it was not recent enough.])]) + +AC_MSG_CHECKING([if OpenEXR is wanted]) +AC_ARG_WITH([openexr], + [AS_HELP_STRING([--with-openexr], + [use OpenEXR @<:@default=check@:>@])], + [], + [with_openexr=check]) +AS_IF([test "$with_openexr" = no], + [AC_MSG_NOTICE([disabling OpenEXR]) + have_exr=no], + [if test "$with_openexr" = yes || test "$with_openexr" = check; then + AC_MSG_RESULT(yes) + PKG_CHECK_MODULES(OPENEXR, OpenEXR >= 1.0, + [AC_DEFINE(HasEXR, 1, [Define if you have EXR library]) + have_exr=yes], + [AC_MSG_WARN("OpenEXR support disabled: " $OPENEXR_PKG_ERRORS) + have_exr=no]) + LIBS="${OPENEXR_LIBS} $LIBS" + CFLAGS="${OPENEXR_CFLAGS} $CFLAGS" + CXXFLAGS="${OPENEXR_CFLAGS} $CXXFLAGS" + else + AC_MSG_RESULT(no) + have_exr=no + fi]) + +if test "$GXX" = yes; then + # Fixes SourceForge bug id 2121647 on some systems with newer GCCs. + CXXFLAGS="$CXXFLAGS --param inline-unit-growth=60" +fi + +AC_ARG_VAR(OPENGL_CFLAGS, [C compiler flags for OpenGL]) +AC_ARG_VAR(OPENGL_LIBS, [Linker flags and libraries for OpenGL]) +gpu_support_default="yes" +AC_ARG_ENABLE([gpu-support], + AC_HELP_STRING([--enable-gpu-support], + [GPU support for Enblend @<:@default=check@:>@]), + [gpu_support=$enableval], + [gpu_support=$gpu_support_default]) +AC_ARG_WITH([apple-opengl-framework], + [AC_HELP_STRING([--with-apple-opengl-framework], + [force usage of Apple OpenGL framework (Mac OS X only)])]) +can_use_gpu=no +no_gpu_reason= +if test "$gpu_support" = yes; then + missing_for_gpu= + if test "$with_apple_opengl_framework" = yes; then + AC_DEFINE([HAVE_APPLE_OPENGL_FRAMEWORK], [1], + [Use the Apple OpenGL framework.]) + GL_LIBS="-framework OpenGL -framework AGL" + GLUT_CFLAGS="$GLU_CFLAGS" + GLUT_LIBS="-framework GLUT -lobjc $GL_LIBS" + AC_SUBST([GL_CFLAGS]) + AC_SUBST([GL_LIBS]) + AC_SUBST([GLU_CFLAGS]) + AC_SUBST([GLU_LIBS]) + AC_SUBST([GLUT_CFLAGS]) + AC_SUBST([GLUT_LIBS]) + no_gl="" + no_glu="" + no_glut="" + else + AX_CHECK_GL + AX_CHECK_GLU + AX_CHECK_GLUT + fi + if test "$no_gl" = yes; then + missing_for_gpu="$missing_for_gpu GL" + AC_MSG_WARN([[GL not found, disabling GPU mode]]) + elif test "$no_glu" = yes; then + missing_for_gpu="$missing_for_gpu GLU" + AC_MSG_WARN([[GLU not found, disabling GPU mode]]) + elif test "$no_glut" = yes; then + missing_for_gpu="$missing_for_gpu GLUT" + AC_MSG_WARN([[GLUT not found, disabling GPU mode]]) + else + # GLUT_LIBS and GLU_LIBS include GL_LIBS implicitly + OPENGL_LIBS="${GLU_LIBS} ${GLUT_LIBS}" + OPENGL_CFLAGS="${GL_CFLAGS}" + AC_CHECK_LIB(GLEW, glewInit, + [can_use_gpu=yes + OPENGL_LIBS="-lGLEW ${OPENGL_LIBS}" + AC_DEFINE(HAVE_LIBGLEW, 1, [Define if you have the GLEW library])], + [missing_for_gpu="$missing_for_gpu GLEW" + AC_MSG_WARN([[GLEW not found, disabling GPU mode]])], + []) + fi + if test $can_use_gpu = no; then + no_gpu_reason=", because of missing$missing_for_gpu" + fi +else + no_gpu_reason=", because it was disabled" +fi + +# Memory allocation debug support +AC_MSG_CHECKING([if malloc debugging is wanted]) +AC_ARG_WITH(dmalloc, + [ --with-dmalloc use dmalloc, as in + http://www.dmalloc.com/dmalloc.tar.gz], + [if test "$withval" = yes; then + AC_MSG_RESULT(yes) + AC_DEFINE(WITH_DMALLOC, 1, + [Define if using the dmalloc debugging malloc package]) + if test $acx_pthread_ok = yes; then + LIBS="$LIBS -ldmallocthcxx" + enable_dmalloc="yes (thread aware)" + else + LIBS="$LIBS -ldmalloccxx" + enable_dmalloc=yes + fi + LDFLAGS="$LDFLAGS -g" + AC_DEFINE(DMALLOC, 1, + [Define to enable malloc debugger library]) + AC_DEFINE(DMALLOC_FUNC_CHECK, 1, + [Define to enable malloc debugger function checking]) + else + AC_MSG_RESULT(no) + enable_dmalloc=no + fi], + [AC_MSG_RESULT(no) + enable_dmalloc=no]) + +# Checks for header files. +AC_HEADER_DIRENT +AC_HEADER_STDC + +AC_CHECK_HEADERS([fenv.h limits.h stdlib.h string.h unistd.h]) + +AC_CHECK_HEADER(tiffio.h, [], + AC_MSG_ERROR([libtiff-devel header files are required to compile Enblend.])) +AC_CHECK_HEADER(jpeglib.h, [], + AC_MSG_ERROR([libjpeg-devel header files are required to compile Enblend.])) +AC_CHECK_HEADER(png.h, [], + AC_MSG_ERROR([libpng-devel header files are required to compile Enblend.])) + +AC_LANG_SAVE +AC_LANG_CPLUSPLUS +AC_CHECK_HEADER(vigra/basicimage.hxx, [], + AC_MSG_ERROR([Vigra "basicimage.hxx" header file is required to compile Enblend.])) +AC_CHECK_HEADER(boost/algorithm/string/case_conv.hpp, [], + AC_MSG_ERROR([Boost "case_conv" header file is required to compile Enblend.])) +AC_CHECK_HEADER(boost/algorithm/string/trim.hpp, [], + AC_MSG_ERROR([Boost "trim" header file is required to compile Enblend.])) +AC_CHECK_HEADER(boost/algorithm/string/erase.hpp, [], + AC_MSG_ERROR([Boost "erase" header file is required to compile Enblend.])) +AC_CHECK_HEADER(boost/assign/list_inserter.hpp, [], + AC_MSG_ERROR([Boost "list_inserter" header file is required to compile Enblend.])) +AC_CHECK_HEADER(boost/assign/list_of.hpp, [], + AC_MSG_ERROR([Boost "list_of" header file is required to compile Enblend.])) +AC_CHECK_HEADER(boost/functional/hash.hpp, [], + AC_MSG_ERROR([Boost "hash" header file is required to compile Enblend.])) +AC_CHECK_HEADER(boost/lambda/algorithm.hpp, [], + AC_MSG_ERROR([Boost "algorithm" header file is required to compile Enblend.])) +AC_CHECK_HEADER(boost/lambda/bind.hpp, [], + AC_MSG_ERROR([Boost "bind" header file is required to compile Enblend.])) +AC_CHECK_HEADER(boost/lambda/construct.hpp, [], + AC_MSG_ERROR([Boost "construct" header file is required to compile Enblend.])) +AC_CHECK_HEADER(boost/lambda/if.hpp, [], + AC_MSG_ERROR([Boost "if" header file is required to compile Enblend.])) +AC_CHECK_HEADER(boost/lambda/lambda.hpp, [], + AC_MSG_ERROR([Boost "lambda" header file is required to compile Enblend.])) +AC_CHECK_HEADER(boost/math/special_functions.hpp, [], + AC_MSG_ERROR([Boost "special_functions" header file is required to compile Enblend.])) +AC_CHECK_HEADER(boost/optional.hpp, [], + AC_MSG_ERROR([Boost "optional" header file is required to compile Enblend.])) +AC_CHECK_HEADER(boost/pool/pool.hpp, [], + AC_MSG_ERROR([Boost "pool" header file is required to compile Enblend.])) +AC_CHECK_HEADER(boost/random/uniform_real.hpp, [], + AC_MSG_ERROR([Boost "uniform_real" header file is required to compile Enblend.])) +AC_CHECK_HEADER(boost/random/variate_generator.hpp, [], + AC_MSG_ERROR([Boost "variate_generator" header file is required to compile Enblend.])) +AC_CHECK_HEADER(boost/scoped_ptr.hpp, [], + AC_MSG_ERROR([Boost "scoped_ptr" header file is required to compile Enblend.])) +AC_CHECK_HEADER(boost/static_assert.hpp, [], + AC_MSG_ERROR([Boost "static_assert" header file is required to compile Enblend.])) +AC_CHECK_HEADER(boost/system/error_code.hpp, [], + AC_MSG_ERROR([Boost "error_code" header file is required to compile Enblend.])) +AC_CHECK_HEADER(boost/unordered_set.hpp, [], + AC_MSG_ERROR([Boost "unordered_set" header file is required to compile Enblend.])) +AC_CHECK_HEADER(gsl/gsl_errno.h, [], + AC_MSG_ERROR([GNU Scientific Library (GSL) header file "gsl_errno" is required to compile Enblend.])) +AC_CHECK_HEADER(gsl/gsl_min.h, [], + AC_MSG_ERROR([GNU Scientific Library (GSL) header file "gsl_min" is required to compile Enblend.])) +AC_CHECK_HEADER(gsl/gsl_multimin.h, [], + AC_MSG_ERROR([GNU Scientific Library (GSL) header file "gsl_multimin" is required to compile Enblend.])) +AC_CHECK_HEADER(gsl/gsl_rng.h, [], + AC_MSG_ERROR([GNU Scientific Library (GSL) header file "gsl_rng" is required to compile Enblend.])) +AC_CHECK_HEADER(gsl/gsl_vector.h, [], + AC_MSG_ERROR([GNU Scientific Library (GSL) header file "gsl_vector" is required to compile Enblend.])) + +LIBS="-lboost_system $LIBS" +AC_MSG_CHECKING([for new Boost system library]) +AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include "boost/system/error_code.hpp"]], + [[boost::system::generic_category(); + boost::system::system_category()]])], + [AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no) + AC_MSG_CHECKING([for old Boost system library]) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include "boost/system/error_code.hpp"]], + [[boost::system::get_generic_category(); + boost::system::get_system_category()]])], + [AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no) + AC_MSG_ERROR([Boost "system" library is required to compile Enblend.])])]) + +AC_ARG_WITH([boost-filesystem], + [AS_HELP_STRING([--with-boost-filesystem], + [use Boost filesystem library @<:@default=check@:>@])], + [], + [with_boost_filesystem=check]) +AS_IF([test "$with_boost_filesystem" = no], + [AC_MSG_NOTICE([disabling use of Boost "filesystem" library])], + [AS_IF([test "$with_boost_filesystem" = yes], + [AC_MSG_NOTICE([forcing use of Boost "filesystem" library]) + AC_DEFINE(HAVE_BOOST_FILESYSTEM, 1, + [Define if you have boost/filesystem.hpp]) + EXTRA_LIBS="-lboost_filesystem ${EXTRA_LIBS}"], + [AC_CHECK_HEADER(boost/filesystem.hpp, + [], + AC_MSG_NOTICE([Boost "filesystem" header is missing.])) + if test "$ac_cv_header_boost_filesystem_hpp" = yes; then + found_boost_filesystem_lib=no + candidates="-lboost_filesystem" + if test "$acx_pthread_ok" = yes; then + candidates="-lboost_filesystem-mt $candidates" + fi + if test "$with_boost_filesystem" != check; then + candidates="$with_boost_filesystem $candidates" + fi + LIBS_ORIG=$LIBS + for x in $candidates; do + LIBS="$LIBS_ORIG $x" + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +#include +#include "boost/filesystem.hpp" +]], +[[ +#if BOOST_FILESYSTEM_VERSION <= 2 +typedef boost::filesystem::basic_path basic_path; +basic_path p("foo/bar/baz.oo"); +p.branch_path().string(); +p.leaf(); +#else +typedef boost::filesystem::path basic_path; +basic_path p("foo/bar/baz.oo"); +p.parent_path(); +p.filename(); +#endif +basename(p); +extension(p); +]] +)], + [EXTRA_LIBS="$x $y ${EXTRA_LIBS}" + found_boost_filesystem_lib=yes + AC_MSG_NOTICE([compiling with Boost's generic filename parsing support.]) + break]) + done + LIBS=$LIBS_ORIG + fi + if test "$ac_cv_header_boost_filesystem_hpp" = yes && + test "$found_boost_filesystem_lib" = yes; then + AC_DEFINE(HAVE_BOOST_FILESYSTEM, 1, + [Define if you have boost/filesystem.hpp]) + else + AC_MSG_NOTICE([Boost "filesystem" header or library not found. Using built-in support.]) + fi + ] ) dnl AS_IF($with_boost_filesystem = yes) + ] ) dnl AS_IF($with_boost_filesystem = no) + +AC_LANG_RESTORE +AC_SUBST(EXTRA_LIBS) + +AC_CHECK_HEADER(lcms2.h, [], + AC_MSG_ERROR([lcms2 header files are required to compile Enblend.])) + +# Checks for typedefs, structures, and compiler characteristics. +AC_HEADER_STDBOOL +AC_C_CONST +AC_C_INLINE +if test "$ac_cv_c_inline" != no; then + AC_DEFINE(HAVE_INLINE, 1, [Define if functions can be declared `inline'.]) + AC_SUBST(HAVE_INLINE) +fi + +AC_TYPE_OFF_T +AC_TYPE_SIGNAL +AC_TYPE_SIZE_T + +AC_CHECK_TYPES([ptrdiff_t]) + +# Checks for library functions. +AC_FUNC_CLOSEDIR_VOID +AC_FUNC_FSEEKO +# AC_FUNC_MALLOC dnl unused and harmful when cross compiling +AC_FUNC_SETVBUF_REVERSED +AC_FUNC_STRERROR_R +AC_FUNC_STRTOD + +AC_CHECK_FUNCS([fesetround floor \ + memset mkstemp \ + pow \ + sqrt strchr strcspn strdup strerror strrchr strtok_r strtol strtoul]) + +# lrint and lrintf +AC_C99_FUNC_LRINT +AC_C99_FUNC_LRINTF + +AX_WITH_PROG(PERL, perl, false, []) +if test "$PERL" = false; then + AC_MSG_ERROR(cannot find perl) +fi +AX_PROG_PERL_MODULES(Sys::Hostname, [], + AC_MSG_ERROR(missing Perl module Sys::Hostname)) +AX_PROG_PERL_MODULES(Time::Zone, [], + AC_MSG_WARN(missing Perl module Time::Zone)) + +# Documentation +if test "$cross_compiling" = no; then + AM_MISSING_PROG(HELP2MAN, help2man) +else + HELP2MAN=: +fi + +can_build_doc=yes +AX_PROG_PERL_MODULES(File::Basename, [], + [AC_MSG_WARN(missing Perl module File::Basename) + can_build_doc=no + missing_for_doc="$missing_for_doc File::Basename"]) +AX_PROG_PERL_MODULES(IO::File, [], + [AC_MSG_WARN(missing Perl module IO::File) + can_build_doc=no + missing_for_doc="$missing_for_doc IO::File"]) +AX_PROG_PERL_MODULES(IO::Handle, [], + [AC_MSG_WARN(missing Perl module IO::Handle) + can_build_doc=no + missing_for_doc="$missing_for_doc IO::Handle"]) + +AX_WITH_PROG(GNUPLOT, gnuplot, false, []) +if test "$GNUPLOT" = false; then + AC_MSG_WARN(cannot find gnuplot; will not be able to build documentation) + can_build_doc=no + missing_for_doc="$missing_for_doc gnuplot" +fi + +AC_ARG_WITH([raster-dir], + AC_HELP_STRING([--with-raster-dir=], + [set raster image subdirectory @<:@default=raster@:>@]), + [RASTER_DIR="$withval"], + [RASTER_DIR=raster]) +AC_SUBST(RASTER_DIR) + +AC_CHECK_PROG(FIG2DEV, + fig2dev, + fig2dev, + false) +if test "$FIG2DEV" = false; then + AC_MSG_WARN(cannot find fig2dev; will not be able to build documentation) + can_build_doc=no + missing_for_doc="$missing_for_doc fig2dev" +fi + +AC_CHECK_PROG(CONVERT, + convert, + convert, + false) +if test "$CONVERT" = false; then + AC_MSG_WARN(cannot find convert; will not be able to build documentation) + can_build_doc=no + missing_for_doc="$missing_for_doc convert" +fi + +AC_PROG_SED + +# These variables are mentioned in the AutoMake documentation as being +# influential to the documentation build process. +AC_CHECK_PROG(MAKEINFO, + makeinfo, + makeinfo, + false) +if test "$MAKEINFO" = false; then + AC_MSG_WARN(cannot find makeinfo; will not be able to build documentation) + can_build_doc=no + missing_for_doc="$missing_for_doc makeinfo" +fi + +AC_CHECK_PROG(TIDY, + tidy, + tidy, + false) +if test "$TIDY" = false; then + AC_MSG_WARN(cannot find tidy; will not be able to build XHTML documentation) + can_build_doc=no + missing_for_doc="$missing_for_doc tidy" +fi + +AC_CHECK_PROG(XMLLINT, + xmllint, + xmllint, + false) +if test "$XMLLINT" = false; then + AC_MSG_WARN(cannot find xmllint; will not be able to build XHTML documentation) + can_build_doc=no + missing_for_doc="$missing_for_doc xmllint" +fi + +AM_CONDITIONAL([BUILD_DOC], [test "$can_build_doc" = yes]) +if test "$can_build_doc" = no; then + no_doc_reason=", because of missing$missing_for_doc" +fi + +AC_MSG_CHECKING([checking whether split documentation files]) +split_doc_default="yes" +AC_ARG_ENABLE([split-doc], + AC_HELP_STRING([--enable-split-doc], + [split documentation @<:@default=yes@:>@]), + [split_doc=$enableval], + [split_doc=$split_doc_default]) +if test "$split_doc" = yes; then + AM_MAKEINFOFLAGS="$AM_MAKEINFOFLAGS" + AM_MAKEINFOHTMLFLAGS="$AM_MAKEINFOHTMLFLAGS" + AC_MSG_RESULT(yes) + split_doc=yes +else + AM_MAKEINFOFLAGS="$AM_MAKEINFOFLAGS --no-split" + AM_MAKEINFOHTMLFLAGS="$AM_MAKEINFOHTMLFLAGS --no-split --no-headers" + AC_MSG_RESULT(no) + split_doc=no +fi +AC_SUBST(AM_MAKEINFOFLAGS) +AC_SUBST(AM_MAKEINFOHTMLFLAGS) + +AC_MSG_CHECKING(whether to enable debugging) +debug_default="no" +AC_ARG_ENABLE(debug, + AC_HELP_STRING([--enable-debug], + [turn on debugging @<:@default=no@:>@]), + [enable_debug=$enableval], + [enable_debug=$debug_default]) +if test "$enable_debug" = yes; then + CXXFLAGS="$CXXFLAGS -g -DDEBUG -Wall" + AC_MSG_RESULT(yes) + enable_debug=yes +else + CXXFLAGS="$CXXFLAGS -O2 -DNDEBUG -Wall" + AC_MSG_RESULT(no) + enable_debug=no +fi + +AC_MSG_CHECKING(whether to enable image cache) +image_cache_default="yes" +AC_ARG_ENABLE(image_cache, + AC_HELP_STRING([--enable-image-cache], + [allow for processing of large images @<:@default=yes@:>@]), + [enable_image_cache=$enableval], + [enable_image_cache=$image_cache_default]) +if test "$enable_image_cache" = yes; then + AC_DEFINE(CACHE_IMAGES, 1, + [Define if you want to compile Enblend and Enfuse with image cache]) + AC_MSG_RESULT(yes) + enable_image_cache=yes +else + AC_MSG_RESULT(no) + enable_image_cache=no +fi + +AC_MSG_CHECKING(whether to compile with OpenMP) +openmp_default="no" +AC_ARG_ENABLE(openmp, + AC_HELP_STRING([--enable-openmp], + [compile with OpenMP @<:@default=no@:>@]), + [enable_openmp=$enableval], + [enable_openmp=$openmp_default]) +if test "$enable_openmp" = yes; then + AC_MSG_RESULT(yes) + AX_OPENMP([enable_openmp=yes]) + CFLAGS="$CFLAGS $OPENMP_CFLAGS" + CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" +fi +if test -z "$OPENMP_CXXFLAGS"; then + AC_MSG_RESULT(no) + enable_openmp=no +else + if test "$enable_image_cache" = yes; then + AC_MSG_WARN([[image cache and OpenMP support are mutually exclusive]]) + AC_MSG_WARN([[only configure like this if you want to develop a reentrant image cache]]) + warnings=`echo -e "$warnings\n WARNING: Image cache and OpenMP are both enabled! You are a developer, aren't you?"` + fi + enable_openmp=yes +fi + +AC_CONFIG_FILES([doc/entropy.gp + doc/entropy-cutoff.gp + doc/exposure-cutoff.gp + doc/gaussian.gp + doc/laplacian-of-gaussian.gp + doc/sharp-edge.gp + doc/smooth-edge.gp]) + +AC_CONFIG_FILES([Makefile + include/Makefile + include/vigra_ext/Makefile + src/Makefile + src/layer_selection/Makefile + doc/Makefile]) +AC_OUTPUT + +# AC_OUTPUT has created "config.h" +AC_MSG_NOTICE([creating config-h.texi]) +perl -ne 'if (s/^\s*#define\s+(\S+)\s+"?([^"]*)"?/\@set CFG::$1 $2/) {chomp; print "$_\n"}' \ + < config.h \ + > config-h.texi + +AC_MSG_RESULT([ + enblend-enfuse now configured for ${host} + Source directory: ${srcdir} + Installation directory: ${prefix} + C++ compiler: ${CXX} + CFLAGS: ${CFLAGS:-} + OPENGL_CFLAGS: ${OPENGL_CFLAGS:-} + CXXFLAGS: ${CXXFLAGS:-} + LDFLAGS: ${LDFLAGS:-} + LIBS: ${LIBS:-} + OPENGL_LIBS: ${OPENGL_LIBS:-} + EXTRA_LIBS (optional): ${EXTRA_LIBS:-} + + raster subdirectory: ${RASTER_DIR} + can build all documentation: ${can_build_doc}${no_doc_reason} + + feature selection: + split *.info and *.xhtml files: ${split_doc} + enable debugging support: ${enable_debug} + enable malloc debugging: ${enable_dmalloc} + OpenEXR image format ${have_exr} + use image cache: ${enable_image_cache} + build GPU acceleration: ${can_use_gpu}${no_gpu_reason} + use OpenMP: ${enable_openmp} +${warnings}]) diff -Nru enblend-enfuse-4.1.3+dfsg/configure.in enblend-enfuse-4.1.4+dfsg/configure.in --- enblend-enfuse-4.1.3+dfsg/configure.in 2014-03-22 12:47:00.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/configure.in 1970-01-01 00:00:00.000000000 +0000 @@ -1,592 +0,0 @@ -AC_PREREQ(2.59) -AC_INIT(enblend-enfuse, - [m4_esyscmd([tr -d '\n' < VERSION])], - [https://bugs.launchpad.net/enblend]) -AC_CONFIG_SRCDIR([src/enblend.cc]) -AC_CONFIG_AUX_DIR([.]) -AC_CONFIG_MACRO_DIR(m4) -AM_INIT_AUTOMAKE([-Wall]) -AC_CONFIG_HEADER([config.h]) - -# Checks for programs/compilers. -# avoid default CXXFLAGS, they trigger a compiler error with g++ 4.2 -CXXFLAGS_ORIG=$CXXFLAGS -AC_PROG_CXX -CXXFLAGS=$CXXFLAGS_ORIG -AC_PROG_CC -AC_PROG_RANLIB -AC_LANG(C++) - -AC_C_BIGENDIAN - -# Checks for libraries. -AC_CHECK_LIB([m], [sqrt]) -AC_CHECK_LIB([gslcblas], [cblas_dgemm]) -AC_CHECK_LIB([gsl], [gsl_blas_dgemm]) - -AC_CHECK_LIB(z, gzopen, - [], - AC_MSG_NOTICE([Compiling without libz.]), []) -AC_CHECK_LIB(jpeg, jpeg_finish_compress, - [LIBS="-ljpeg ${LIBS}"; AC_DEFINE(HasJPEG, 1, [Define if you have the jpeg library])], - AC_MSG_NOTICE([Compiling without support for jpeg files.]), []) -AC_CHECK_LIB(png, png_init_io, - [LIBS="-lpng ${LIBS}"; AC_DEFINE(HasPNG, 1, [Define if you have the png library])], - AC_MSG_NOTICE([Compiling without support for png files.]), []) -AC_CHECK_LIB(tiff, TIFFOpen, - [LIBS="-ltiff ${LIBS}"; AC_DEFINE(HasTIFF, 1, [Define if you have the tiff library])], - AC_MSG_ERROR([libtiff is required to compile Enblend.]), []) -AC_CHECK_LIB(lcms2, cmsCreateTransform, - [], - AC_MSG_ERROR([liblcms2 is required to compile Enblend.]), []) - -AC_MSG_CHECKING([for Vigra import/export-library]) -LIBS="-lvigraimpex $LIBS" -AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], - [[vigra::impexListFormats()]])], - AC_MSG_RESULT(yes), - [AC_MSG_RESULT(no) - AC_MSG_ERROR([libvigraimpex is required to compile Enblend.])]) -AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], - [[vigra::ImageImportInfo info("image.tif"); info.setImageIndex(99)]])], - AC_MSG_RESULT(yes), - [AC_MSG_RESULT(no) - AC_MSG_ERROR([Vigra was found, but it was not recent enough.])]) - -AC_MSG_CHECKING([if OpenEXR is wanted]) -AC_ARG_WITH([openexr], - [AS_HELP_STRING([--with-openexr], - [use OpenEXR @<:@default=check@:>@])], - [], - [with_openexr=check]) -AS_IF([test "$with_openexr" = no], - [AC_MSG_NOTICE([disabling OpenEXR]) - have_exr=no], - [if test "$with_openexr" = yes || test "$with_openexr" = check; then - AC_MSG_RESULT(yes) - PKG_CHECK_MODULES(OPENEXR, OpenEXR >= 1.0, - [AC_DEFINE(HasEXR, 1, [Define if you have EXR library]) - have_exr=yes], - [AC_MSG_WARN("OpenEXR support disabled: " $OPENEXR_PKG_ERRORS) - have_exr=no]) - LIBS="${OPENEXR_LIBS} $LIBS" - CFLAGS="${OPENEXR_CFLAGS} $CFLAGS" - CXXFLAGS="${OPENEXR_CFLAGS} $CXXFLAGS" - else - AC_MSG_RESULT(no) - have_exr=no - fi]) - -if test "$GXX" = yes; then - # Fixes SourceForge bug id 2121647 on some systems with newer GCCs. - CXXFLAGS="$CXXFLAGS --param inline-unit-growth=60" -fi - -AC_ARG_VAR(OPENGL_CFLAGS, [C compiler flags for OpenGL]) -AC_ARG_VAR(OPENGL_LIBS, [Linker flags and libraries for OpenGL]) -gpu_support_default="yes" -AC_ARG_ENABLE([gpu-support], - AC_HELP_STRING([--enable-gpu-support], - [GPU support for Enblend @<:@default=check@:>@]), - [gpu_support=$enableval], - [gpu_support=$gpu_support_default]) -AC_ARG_WITH([apple-opengl-framework], - [AC_HELP_STRING([--with-apple-opengl-framework], - [force usage of Apple OpenGL framework (Mac OS X only)])]) -can_use_gpu=no -no_gpu_reason= -if test "$gpu_support" = yes; then - missing_for_gpu= - if test "$with_apple_opengl_framework" = yes; then - AC_DEFINE([HAVE_APPLE_OPENGL_FRAMEWORK], [1], - [Use the Apple OpenGL framework.]) - GL_LIBS="-framework OpenGL -framework AGL" - GLUT_CFLAGS="$GLU_CFLAGS" - GLUT_LIBS="-framework GLUT -lobjc $GL_LIBS" - AC_SUBST([GL_CFLAGS]) - AC_SUBST([GL_LIBS]) - AC_SUBST([GLU_CFLAGS]) - AC_SUBST([GLU_LIBS]) - AC_SUBST([GLUT_CFLAGS]) - AC_SUBST([GLUT_LIBS]) - no_gl="" - no_glu="" - no_glut="" - else - AX_CHECK_GL - AX_CHECK_GLU - AX_CHECK_GLUT - fi - if test "$no_gl" = yes; then - missing_for_gpu="$missing_for_gpu GL" - AC_MSG_WARN([[GL not found, disabling GPU mode]]) - elif test "$no_glu" = yes; then - missing_for_gpu="$missing_for_gpu GLU" - AC_MSG_WARN([[GLU not found, disabling GPU mode]]) - elif test "$no_glut" = yes; then - missing_for_gpu="$missing_for_gpu GLUT" - AC_MSG_WARN([[GLUT not found, disabling GPU mode]]) - else - # GLUT_LIBS and GLU_LIBS include GL_LIBS implicitly - OPENGL_LIBS="${GLU_LIBS} ${GLUT_LIBS}" - OPENGL_CFLAGS="${GL_CFLAGS}" - AC_CHECK_LIB(GLEW, glewInit, - [can_use_gpu=yes - OPENGL_LIBS="-lGLEW ${OPENGL_LIBS}" - AC_DEFINE(HAVE_LIBGLEW, 1, [Define if you have the GLEW library])], - [missing_for_gpu="$missing_for_gpu GLEW" - AC_MSG_WARN([[GLEW not found, disabling GPU mode]])], - []) - fi - if test $can_use_gpu = no; then - no_gpu_reason=", because of missing$missing_for_gpu" - fi -else - no_gpu_reason=", because it was disabled" -fi - -# Memory allocation debug support -AC_MSG_CHECKING([if malloc debugging is wanted]) -AC_ARG_WITH(dmalloc, - [ --with-dmalloc use dmalloc, as in - http://www.dmalloc.com/dmalloc.tar.gz], - [if test "$withval" = yes; then - AC_MSG_RESULT(yes) - AC_DEFINE(WITH_DMALLOC, 1, - [Define if using the dmalloc debugging malloc package]) - if test $acx_pthread_ok = yes; then - LIBS="$LIBS -ldmallocthcxx" - enable_dmalloc="yes (thread aware)" - else - LIBS="$LIBS -ldmalloccxx" - enable_dmalloc=yes - fi - LDFLAGS="$LDFLAGS -g" - AC_DEFINE(DMALLOC, 1, - [Define to enable malloc debugger library]) - AC_DEFINE(DMALLOC_FUNC_CHECK, 1, - [Define to enable malloc debugger function checking]) - else - AC_MSG_RESULT(no) - enable_dmalloc=no - fi], - [AC_MSG_RESULT(no) - enable_dmalloc=no]) - -# Checks for header files. -AC_HEADER_DIRENT -AC_HEADER_STDC - -AC_CHECK_HEADERS([fenv.h limits.h stdlib.h string.h unistd.h]) - -AC_CHECK_HEADER(tiffio.h, [], - AC_MSG_ERROR([libtiff-devel header files are required to compile Enblend.])) -AC_CHECK_HEADER(jpeglib.h, [], - AC_MSG_ERROR([libjpeg-devel header files are required to compile Enblend.])) -AC_CHECK_HEADER(png.h, [], - AC_MSG_ERROR([libpng-devel header files are required to compile Enblend.])) - -AC_LANG_SAVE -AC_LANG_CPLUSPLUS -AC_CHECK_HEADER(vigra/basicimage.hxx, [], - AC_MSG_ERROR([Vigra "basicimage.hxx" header file is required to compile Enblend.])) -AC_CHECK_HEADER(boost/algorithm/string/case_conv.hpp, [], - AC_MSG_ERROR([Boost "case_conv" header file is required to compile Enblend.])) -AC_CHECK_HEADER(boost/algorithm/string/trim.hpp, [], - AC_MSG_ERROR([Boost "trim" header file is required to compile Enblend.])) -AC_CHECK_HEADER(boost/algorithm/string/erase.hpp, [], - AC_MSG_ERROR([Boost "erase" header file is required to compile Enblend.])) -AC_CHECK_HEADER(boost/assign/list_inserter.hpp, [], - AC_MSG_ERROR([Boost "list_inserter" header file is required to compile Enblend.])) -AC_CHECK_HEADER(boost/assign/list_of.hpp, [], - AC_MSG_ERROR([Boost "list_of" header file is required to compile Enblend.])) -AC_CHECK_HEADER(boost/functional/hash.hpp, [], - AC_MSG_ERROR([Boost "hash" header file is required to compile Enblend.])) -AC_CHECK_HEADER(boost/lambda/algorithm.hpp, [], - AC_MSG_ERROR([Boost "algorithm" header file is required to compile Enblend.])) -AC_CHECK_HEADER(boost/lambda/bind.hpp, [], - AC_MSG_ERROR([Boost "bind" header file is required to compile Enblend.])) -AC_CHECK_HEADER(boost/lambda/construct.hpp, [], - AC_MSG_ERROR([Boost "construct" header file is required to compile Enblend.])) -AC_CHECK_HEADER(boost/lambda/if.hpp, [], - AC_MSG_ERROR([Boost "if" header file is required to compile Enblend.])) -AC_CHECK_HEADER(boost/lambda/lambda.hpp, [], - AC_MSG_ERROR([Boost "lambda" header file is required to compile Enblend.])) -AC_CHECK_HEADER(boost/logic/tribool.hpp, [], - AC_MSG_ERROR([Boost "tribool" header file is required to compile Enblend.])) -AC_CHECK_HEADER(boost/math/special_functions.hpp, [], - AC_MSG_ERROR([Boost "special_functions" header file is required to compile Enblend.])) -AC_CHECK_HEADER(boost/optional.hpp, [], - AC_MSG_ERROR([Boost "optional" header file is required to compile Enblend.])) -AC_CHECK_HEADER(boost/pool/pool.hpp, [], - AC_MSG_ERROR([Boost "pool" header file is required to compile Enblend.])) -AC_CHECK_HEADER(boost/random/uniform_real.hpp, [], - AC_MSG_ERROR([Boost "uniform_real" header file is required to compile Enblend.])) -AC_CHECK_HEADER(boost/random/variate_generator.hpp, [], - AC_MSG_ERROR([Boost "variate_generator" header file is required to compile Enblend.])) -AC_CHECK_HEADER(boost/scoped_ptr.hpp, [], - AC_MSG_ERROR([Boost "scoped_ptr" header file is required to compile Enblend.])) -AC_CHECK_HEADER(boost/static_assert.hpp, [], - AC_MSG_ERROR([Boost "static_assert" header file is required to compile Enblend.])) -AC_CHECK_HEADER(boost/system/error_code.hpp, [], - AC_MSG_ERROR([Boost "error_code" header file is required to compile Enblend.])) -AC_CHECK_HEADER(boost/unordered_set.hpp, [], - AC_MSG_ERROR([Boost "unordered_set" header file is required to compile Enblend.])) -AC_CHECK_HEADER(gsl/gsl_errno.h, [], - AC_MSG_ERROR([GNU Scientific Library (GSL) header file "gsl_errno" is required to compile Enblend.])) -AC_CHECK_HEADER(gsl/gsl_min.h, [], - AC_MSG_ERROR([GNU Scientific Library (GSL) header file "gsl_min" is required to compile Enblend.])) -AC_CHECK_HEADER(gsl/gsl_multimin.h, [], - AC_MSG_ERROR([GNU Scientific Library (GSL) header file "gsl_multimin" is required to compile Enblend.])) -AC_CHECK_HEADER(gsl/gsl_rng.h, [], - AC_MSG_ERROR([GNU Scientific Library (GSL) header file "gsl_rng" is required to compile Enblend.])) -AC_CHECK_HEADER(gsl/gsl_vector.h, [], - AC_MSG_ERROR([GNU Scientific Library (GSL) header file "gsl_vector" is required to compile Enblend.])) - -LIBS="-lboost_system $LIBS" -AC_MSG_CHECKING([for new Boost system library]) -AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include "boost/system/error_code.hpp"]], - [[boost::system::generic_category(); - boost::system::system_category()]])], - [AC_MSG_RESULT(yes)], - [AC_MSG_RESULT(no) - AC_MSG_CHECKING([for old Boost system library]) - AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include "boost/system/error_code.hpp"]], - [[boost::system::get_generic_category(); - boost::system::get_system_category()]])], - [AC_MSG_RESULT(yes)], - [AC_MSG_RESULT(no) - AC_MSG_ERROR([Boost "system" library is required to compile Enblend.])])]) - -AC_ARG_WITH([boost-filesystem], - [AS_HELP_STRING([--with-boost-filesystem], - [use Boost filesystem library @<:@default=check@:>@])], - [], - [with_boost_filesystem=check]) -AS_IF([test "$with_boost_filesystem" = no], - [AC_MSG_NOTICE([disabling use of Boost "filesystem" library])], - [AS_IF([test "$with_boost_filesystem" = yes], - [AC_MSG_NOTICE([forcing use of Boost "filesystem" library]) - AC_DEFINE(HAVE_BOOST_FILESYSTEM, 1, - [Define if you have boost/filesystem.hpp]) - EXTRA_LIBS="-lboost_filesystem ${EXTRA_LIBS}"], - [AC_CHECK_HEADER(boost/filesystem.hpp, - [], - AC_MSG_NOTICE([Boost "filesystem" header is missing.])) - if test "$ac_cv_header_boost_filesystem_hpp" = yes; then - found_boost_filesystem_lib=no - candidates="-lboost_filesystem" - if test "$acx_pthread_ok" = yes; then - candidates="-lboost_filesystem-mt $candidates" - fi - if test "$with_boost_filesystem" != check; then - candidates="$with_boost_filesystem $candidates" - fi - LIBS_ORIG=$LIBS - for x in $candidates; do - LIBS="$LIBS_ORIG $x" - AC_LINK_IFELSE([AC_LANG_PROGRAM([[ -#include -#include "boost/filesystem.hpp" -]], -[[ -#if BOOST_FILESYSTEM_VERSION <= 2 -typedef boost::filesystem::basic_path basic_path; -basic_path p("foo/bar/baz.oo"); -p.branch_path().string(); -p.leaf(); -#else -typedef boost::filesystem::path basic_path; -basic_path p("foo/bar/baz.oo"); -p.parent_path(); -p.filename(); -#endif -basename(p); -extension(p); -]] -)], - [EXTRA_LIBS="$x $y ${EXTRA_LIBS}" - found_boost_filesystem_lib=yes - AC_MSG_NOTICE([compiling with Boost's generic filename parsing support.]) - break]) - done - LIBS=$LIBS_ORIG - fi - if test "$ac_cv_header_boost_filesystem_hpp" = yes && - test "$found_boost_filesystem_lib" = yes; then - AC_DEFINE(HAVE_BOOST_FILESYSTEM, 1, - [Define if you have boost/filesystem.hpp]) - else - AC_MSG_NOTICE([Boost "filesystem" header or library not found. Using built-in support.]) - fi - ] ) dnl AS_IF($with_boost_filesystem = yes) - ] ) dnl AS_IF($with_boost_filesystem = no) - -AC_LANG_RESTORE -AC_SUBST(EXTRA_LIBS) - -AC_CHECK_HEADER(lcms2.h, [], - AC_MSG_ERROR([lcms2 header files are required to compile Enblend.])) - -# Checks for typedefs, structures, and compiler characteristics. -AC_HEADER_STDBOOL -AC_C_CONST -AC_C_INLINE -if test "$ac_cv_c_inline" != no; then - AC_DEFINE(HAVE_INLINE, 1, [Define if functions can be declared `inline'.]) - AC_SUBST(HAVE_INLINE) -fi - -AC_TYPE_OFF_T -AC_TYPE_SIGNAL -AC_TYPE_SIZE_T - -AC_CHECK_TYPES([ptrdiff_t]) - -# Checks for library functions. -AC_FUNC_CLOSEDIR_VOID -AC_FUNC_FSEEKO -# AC_FUNC_MALLOC dnl unused and harmful when cross compiling -AC_FUNC_SETVBUF_REVERSED -AC_FUNC_STRERROR_R -AC_FUNC_STRTOD - -AC_CHECK_FUNCS([fesetround floor \ - memset mkstemp \ - pow \ - sqrt strchr strcspn strdup strerror strrchr strtok_r strtol strtoul]) - -# lrint and lrintf -AC_C99_FUNC_LRINT -AC_C99_FUNC_LRINTF - -AX_WITH_PROG(PERL, perl, false, []) -if test "$PERL" = false; then - AC_MSG_ERROR(cannot find perl) -fi -AX_PROG_PERL_MODULES(Sys::Hostname, [], - AC_MSG_ERROR(missing Perl module Sys::Hostname)) -AX_PROG_PERL_MODULES(Time::Zone, [], - AC_MSG_WARN(missing Perl module Time::Zone)) - -# Documentation -if test "$cross_compiling" = no; then - AM_MISSING_PROG(HELP2MAN, help2man) -else - HELP2MAN=: -fi - -can_build_doc=yes -AX_PROG_PERL_MODULES(File::Basename, [], - [AC_MSG_WARN(missing Perl module File::Basename) - can_build_doc=no - missing_for_doc="$missing_for_doc File::Basename"]) -AX_PROG_PERL_MODULES(IO::File, [], - [AC_MSG_WARN(missing Perl module IO::File) - can_build_doc=no - missing_for_doc="$missing_for_doc IO::File"]) -AX_PROG_PERL_MODULES(IO::Handle, [], - [AC_MSG_WARN(missing Perl module IO::Handle) - can_build_doc=no - missing_for_doc="$missing_for_doc IO::Handle"]) - -AX_WITH_PROG(GNUPLOT, gnuplot, false, []) -if test "$GNUPLOT" = false; then - AC_MSG_WARN(cannot find gnuplot; will not be able to build documentation) - can_build_doc=no - missing_for_doc="$missing_for_doc gnuplot" -fi - -AC_ARG_WITH([raster-dir], - AC_HELP_STRING([--with-raster-dir=], - [set raster image subdirectory @<:@default=raster@:>@]), - [RASTER_DIR="$withval"], - [RASTER_DIR=raster]) -AC_SUBST(RASTER_DIR) - -AC_CHECK_PROG(FIG2DEV, - fig2dev, - fig2dev, - false) -if test "$FIG2DEV" = false; then - AC_MSG_WARN(cannot find fig2dev; will not be able to build documentation) - can_build_doc=no - missing_for_doc="$missing_for_doc fig2dev" -fi - -AC_CHECK_PROG(CONVERT, - convert, - convert, - false) -if test "$CONVERT" = false; then - AC_MSG_WARN(cannot find convert; will not be able to build documentation) - can_build_doc=no - missing_for_doc="$missing_for_doc convert" -fi - -AC_PROG_SED - -# These variables are mentioned in the AutoMake documentation as being -# influential to the documentation build process. -AC_CHECK_PROG(MAKEINFO, - makeinfo, - makeinfo, - false) -if test "$MAKEINFO" = false; then - AC_MSG_WARN(cannot find makeinfo; will not be able to build documentation) - can_build_doc=no - missing_for_doc="$missing_for_doc makeinfo" -fi - -AC_CHECK_PROG(TIDY, - tidy, - tidy, - false) -if test "$TIDY" = false; then - AC_MSG_WARN(cannot find tidy; will not be able to build XHTML documentation) - can_build_doc=no - missing_for_doc="$missing_for_doc tidy" -fi - -AC_CHECK_PROG(XMLLINT, - xmllint, - xmllint, - false) -if test "$XMLLINT" = false; then - AC_MSG_WARN(cannot find xmllint; will not be able to build XHTML documentation) - can_build_doc=no - missing_for_doc="$missing_for_doc xmllint" -fi - -AM_CONDITIONAL([BUILD_DOC], [test "$can_build_doc" = yes]) -if test "$can_build_doc" = no; then - no_doc_reason=", because of missing$missing_for_doc" -fi - -AC_MSG_CHECKING([checking whether split documentation files]) -split_doc_default="yes" -AC_ARG_ENABLE([split-doc], - AC_HELP_STRING([--enable-split-doc], - [split documentation @<:@default=yes@:>@]), - [split_doc=$enableval], - [split_doc=$split_doc_default]) -if test "$split_doc" = yes; then - AM_MAKEINFOFLAGS="$AM_MAKEINFOFLAGS" - AM_MAKEINFOHTMLFLAGS="$AM_MAKEINFOHTMLFLAGS" - AC_MSG_RESULT(yes) - split_doc=yes -else - AM_MAKEINFOFLAGS="$AM_MAKEINFOFLAGS --no-split" - AM_MAKEINFOHTMLFLAGS="$AM_MAKEINFOHTMLFLAGS --no-split --no-headers" - AC_MSG_RESULT(no) - split_doc=no -fi -AC_SUBST(AM_MAKEINFOFLAGS) -AC_SUBST(AM_MAKEINFOHTMLFLAGS) - -AC_MSG_CHECKING(whether to enable debugging) -debug_default="no" -AC_ARG_ENABLE(debug, - AC_HELP_STRING([--enable-debug], - [turn on debugging @<:@default=no@:>@]), - [enable_debug=$enableval], - [enable_debug=$debug_default]) -if test "$enable_debug" = yes; then - CXXFLAGS="$CXXFLAGS -g -DDEBUG -Wall" - AC_MSG_RESULT(yes) - enable_debug=yes -else - CXXFLAGS="$CXXFLAGS -O2 -DNDEBUG -Wall" - AC_MSG_RESULT(no) - enable_debug=no -fi - -AC_MSG_CHECKING(whether to enable image cache) -image_cache_default="yes" -AC_ARG_ENABLE(image_cache, - AC_HELP_STRING([--enable-image-cache], - [allow for processing of large images @<:@default=yes@:>@]), - [enable_image_cache=$enableval], - [enable_image_cache=$image_cache_default]) -if test "$enable_image_cache" = yes; then - AC_DEFINE(CACHE_IMAGES, 1, - [Define if you want to compile Enblend and Enfuse with image cache]) - AC_MSG_RESULT(yes) - enable_image_cache=yes -else - AC_MSG_RESULT(no) - enable_image_cache=no -fi - -AC_MSG_CHECKING(whether to compile with OpenMP) -openmp_default="no" -AC_ARG_ENABLE(openmp, - AC_HELP_STRING([--enable-openmp], - [compile with OpenMP @<:@default=no@:>@]), - [enable_openmp=$enableval], - [enable_openmp=$openmp_default]) -if test "$enable_openmp" = yes; then - AC_MSG_RESULT(yes) - AX_OPENMP([enable_openmp=yes]) - CFLAGS="$CFLAGS $OPENMP_CFLAGS" - CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" -fi -if test -z "$OPENMP_CXXFLAGS"; then - AC_MSG_RESULT(no) - enable_openmp=no -else - if test "$enable_image_cache" = yes; then - AC_MSG_WARN([[image cache and OpenMP support are mutually exclusive]]) - AC_MSG_WARN([[only configure like this if you want to develop a reentrant image cache]]) - warnings=`echo -e "$warnings\n WARNING: Image cache and OpenMP are both enabled! You are a developer, aren't you?"` - fi - enable_openmp=yes -fi - -AC_CONFIG_FILES([doc/entropy.gp - doc/entropy-cutoff.gp - doc/exposure-cutoff.gp - doc/gaussian.gp - doc/laplacian-of-gaussian.gp - doc/sharp-edge.gp - doc/smooth-edge.gp]) - -AC_CONFIG_FILES([Makefile - include/Makefile - include/vigra_ext/Makefile - src/Makefile - src/layer_selection/Makefile - doc/Makefile]) -AC_OUTPUT - -# AC_OUTPUT has created "config.h" -AC_MSG_NOTICE([creating config-h.texi]) -perl -ne 'if (s/^\s*#define\s+(\S+)\s+"?([^"]*)"?/\@set CFG::$1 $2/) {chomp; print "$_\n"}' \ - < config.h \ - > config-h.texi - -AC_MSG_RESULT([ - enblend-enfuse now configured for ${host} - Source directory: ${srcdir} - Installation directory: ${prefix} - C++ compiler: ${CXX} - CFLAGS: ${CFLAGS:-} - OPENGL_CFLAGS: ${OPENGL_CFLAGS:-} - CXXFLAGS: ${CXXFLAGS:-} - LDFLAGS: ${LDFLAGS:-} - LIBS: ${LIBS:-} - OPENGL_LIBS: ${OPENGL_LIBS:-} - EXTRA_LIBS (optional): ${EXTRA_LIBS:-} - - raster subdirectory: ${RASTER_DIR} - can build all documentation: ${can_build_doc}${no_doc_reason} - - feature selection: - split *.info and *.xhtml files: ${split_doc} - enable debugging support: ${enable_debug} - enable malloc debugging: ${enable_dmalloc} - OpenEXR image format ${have_exr} - use image cache: ${enable_image_cache} - build GPU acceleration: ${can_use_gpu}${no_gpu_reason} - use OpenMP: ${enable_openmp} -${warnings}]) diff -Nru enblend-enfuse-4.1.3+dfsg/debian/changelog enblend-enfuse-4.1.4+dfsg/debian/changelog --- enblend-enfuse-4.1.3+dfsg/debian/changelog 2014-07-22 06:21:32.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/debian/changelog 2015-10-04 14:34:19.000000000 +0000 @@ -1,3 +1,18 @@ +enblend-enfuse (4.1.4+dfsg-1ubuntu1~vivid) vivid; urgency=medium + + * Repackaged for Vivid Vervet (15.04). + + -- Stefan Peter Sun, 04 Oct 2015 16:33:19 +0200 + +enblend-enfuse (4.1.4+dfsg-1) experimental; urgency=medium + + * New upstream version. + + Refresh patches-repack/00-win32helpers.patch. + + Drop debian/patches/*, upstream docs are compatible with texinfo + 5.1 now. + + -- Andreas Metzler Sat, 03 Oct 2015 14:02:14 +0200 + enblend-enfuse (4.1.3+dfsg-2) unstable; urgency=medium * Upload to unstable. diff -Nru enblend-enfuse-4.1.3+dfsg/debian/control enblend-enfuse-4.1.4+dfsg/debian/control --- enblend-enfuse-4.1.3+dfsg/debian/control 2014-07-22 06:21:05.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/debian/control 2015-10-04 14:33:15.000000000 +0000 @@ -1,8 +1,9 @@ Source: enblend-enfuse Section: graphics Priority: optional -Maintainer: Debian PhotoTools Maintainers -Uploaders: Sebastian Harl , Andreas Metzler +Maintainer: Hugin PPA Packagers +XSBC-Original-Maintainer: Debian PhotoTools Maintainers +Uploaders: Stefan Peter Build-Depends: debhelper (>= 9), dpkg-dev (>= 1.16.1), autotools-dev, libtiff-dev, libboost-dev, libboost-filesystem-dev, liblcms2-dev (>= 2.5), libglew-dev, freeglut3-dev, libplot-dev, @@ -10,14 +11,14 @@ perl, texinfo, texlive, texlive-generic-recommended, gnuplot, transfig, ghostscript, tidy, ttf-freefont,imagemagick, libxml2-utils, libvigraimpex-dev (>= 1.8.0+dfsg-2), libgsl0-dev -Standards-Version: 3.9.5 +Standards-Version: 3.9.6 Homepage: http://enblend.sourceforge.net/ Vcs-Git: git://anonscm.debian.org/pkg-phototools/enblend.git Vcs-Browser: http://anonscm.debian.org/gitweb/?p=pkg-phototools/enblend.git Package: enblend Architecture: any -Depends: ${shlibs:Depends},${misc:Depends} +Depends: ${shlibs:Depends}, ${misc:Depends} Recommends: hugin Enhances: hugin Description: image blending tool diff -Nru enblend-enfuse-4.1.3+dfsg/debian/copyright enblend-enfuse-4.1.4+dfsg/debian/copyright --- enblend-enfuse-4.1.3+dfsg/debian/copyright 2014-07-22 06:21:05.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/debian/copyright 2015-10-04 14:33:15.000000000 +0000 @@ -32,7 +32,7 @@ License: - Files mdate-sh + Files mdate-sh ar-lib Copyright (C) 1985-2013 Free Software Foundation, Inc. Files include/vigra_ext/cachedfileimage.hxx @@ -96,7 +96,17 @@ src/openmp.h src/self_test.{cc,h} src/tiff_message.{cc,h} - Copyright © 2008-2014 Dr. Christoph L. Spiel + Copyright © 2008-2015 Dr. Christoph L. Spiel + GPLv2+ + + Files README README.txt src/anneal.h /src/assemble.h src/blend.h + src/bounds.h src/common.h src/enblend.cc src/enblend.h + src/enfuse.cc src/enfuse.h src/fixmath.h src/mask.h + src/numerictraits.h src/path.h src/pyramid.h + Copyright (C) 2004-2009 Andrew Mihal. + Copyright (C) 2009-2015 Christoph Spiel. + GPLv2+ + All other files (except doc/*.{info,texi}, m4/*) Copyright © 2004-2014 Andrew Mihal @@ -146,7 +156,7 @@ doc/enblend.texi doc/enfuse.info doc/enfuse.texi - Copyright © 2004-2014 Andrew Mihal + Copyright © 2004-2015 Andrew Mihal Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 diff -Nru enblend-enfuse-4.1.3+dfsg/debian/patches/0001-Change-all-texinfo-variable-names-to-alpha-nums.patch enblend-enfuse-4.1.4+dfsg/debian/patches/0001-Change-all-texinfo-variable-names-to-alpha-nums.patch --- enblend-enfuse-4.1.3+dfsg/debian/patches/0001-Change-all-texinfo-variable-names-to-alpha-nums.patch 2014-07-22 06:21:05.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/debian/patches/0001-Change-all-texinfo-variable-names-to-alpha-nums.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,1009 +0,0 @@ -From 1f79a0a86eabe03f7b7092d759cf984a91da3926 Mon Sep 17 00:00:00 2001 -From: Andreas Metzler -Date: Sun, 27 Oct 2013 07:56:20 +0100 -Subject: [PATCH 1/9] Change all texinfo variable-names to alpha-nums - -texinfo 5.1 breaks on variable names (@set / @value) containing -non-alphanumerical characters. Fix this. - -See debian/sed-fix-texi-ids for info on how to refresh this patch. -Author: Andreas Metzler -Origin: vendor -Last-Update: 2014-03-22 - ---- enblend-enfuse-4.1.3+dfsg.orig/doc/enblend.texi -+++ enblend-enfuse-4.1.3+dfsg/doc/enblend.texi -@@ -448,7 +448,7 @@ However, @uref{http://@/hci.iwr.uni-@/he - @cindex layer selection - @cindex layer selection - Override the standard layer selector algorithm, which is --@samp{@value{src::layer-selector}}. -+@samp{@value{srcCOLONCOLONlayerDASHselector}}. - - This version of Enblend offers the following algorithms: - @table @code -@@ -588,8 +588,8 @@ pyramids. Use @samp{auto} or @samp{auto - restore the automatic calculation of the maximum number of levels. - - The valid range of the absolute value of @var{LEVELS} is --@value{src::minimum-pyramid-levels} to --@value{src::maximum-pyramid-levels}. -+@value{srcCOLONCOLONminimumDASHpyramidDASHlevels} to -+@value{srcCOLONCOLONmaximumDASHpyramidDASHlevels}. - - @item -o - @itemx --output=@var{FILE} -@@ -597,11 +597,11 @@ The valid range of the absolute value of - @opindex --output - Place output in @var{FILE}. - --@cindex @file{@value{src::default-output-filename}} -+@cindex @file{@value{srcCOLONCOLONdefaultDASHoutputDASHfilename}} - @cindex default output filename - @cindex output filename, default - If @option{--output} is not specified, the default is to put the --resulting image in @file{@value{src::default-output-filename}}. -+resulting image in @file{@value{srcCOLONCOLONdefaultDASHoutputDASHfilename}}. - - @item --parameter=@var{KEY}[=@var{VALUE}]:@dots{} - @opindex --parameter -@@ -656,7 +656,7 @@ estimations of required memory in select - @end table - - The default verbosity level of Enblend is --@value{src::default-verbosity-level}. -+@value{srcCOLONCOLONdefaultDASHverbosityDASHlevel}. - - @item -V - @itemx --version -@@ -1363,10 +1363,10 @@ be, and the longer it will take. - - Append a percent sign (@samp{%}) to specify @var{TAU} as a percentage. - --Valid range: @value{src::minimum-anneal-tau} < @var{TAU} < --@value{src::maximum-anneal-tau}. -+Valid range: @value{srcCOLONCOLONminimumDASHannealDASHtau} < @var{TAU} < -+@value{srcCOLONCOLONmaximumDASHannealDASHtau}. - --The default is @value{src::default-anneal-tau}; values around 0.95 are -+The default is @value{srcCOLONCOLONdefaultDASHannealDASHtau}; values around 0.95 are - reasonable. Usually, slower cooling results in more converged points. - - @item DELTA-E-MAX -@@ -1374,7 +1374,7 @@ reasonable. Usually, slower cooling res - @var{DELTA-E-MAX} and @var{DELTA-E-MIN} are the maximum and minimum - cost change possible by any single annealing move. - --Valid range: @value{src::minimum-anneal-deltae-min} < -+Valid range: @value{srcCOLONCOLONminimumDASHannealDASHdeltaeDASHmin} < - @var{DELTA-E-MIN} < @var{DELTA-E-MAX}. - - In particular they determine the initial and final annealing -@@ -1545,17 +1545,17 @@ $$\eqalign{ - @end docbook - - The defaults are: @var{DELTA-E-MAX}: --@value{src::default-anneal-deltae-max} and @var{DELTA-E-MIN}: --@value{src::default-anneal-deltae-min}. -+@value{srcCOLONCOLONdefaultDASHannealDASHdeltaeDASHmax} and @var{DELTA-E-MIN}: -+@value{srcCOLONCOLONdefaultDASHannealDASHdeltaeDASHmin}. - - @item K-MAX - @var{K-MAX} is the maximum number of ``moves'' the optimizer will make - for each line segment. Higher values more accurately sample the state - space, at the expense of a higher computation cost. - --Valid range: @var{K-MAX} @geq{} @value{src::minimum-anneal-kmax}. -+Valid range: @var{K-MAX} @geq{} @value{srcCOLONCOLONminimumDASHannealDASHkmax}. - --The default is @value{src::default-anneal-kmax}. Values around 100 -+The default is @value{srcCOLONCOLONdefaultDASHannealDASHkmax}. Values around 100 - seem reasonable. - @end table - -@@ -1569,10 +1569,10 @@ the seam line and the amount of memory n - default. - - If omitted @var{FACTOR} defaults to --@value{src::default-coarseness-factor}, this means, -+@value{srcCOLONCOLONdefaultDASHcoarsenessDASHfactor}, this means, - option@tie{}@option{--coarse-mask} shrinks the overlapping - @emph{areas} by a factor of --@math{@value{src::default-coarseness-factor}@classictimes{}@/@value{src::default-coarseness-factor}}. -+@math{@value{srcCOLONCOLONdefaultDASHcoarsenessDASHfactor}@classictimes{}@/@value{srcCOLONCOLONdefaultDASHcoarsenessDASHfactor}}. - With @var{FACTOR}@tie{}=@tie{}8 the total memory allocated during a - run of Enblend shrinks approximately by 80% and the maximum amount of - memory in use at a time is decreased to 60% (Enblend compiled with -@@ -1630,9 +1630,9 @@ A small value prefers straight line segm - lines. Larger values instruct the optimizer to let the seam line take - more detours when searching for the best seam line. - --Valid range: @var{RADIUS} @geq{} @value{src::minimum-dijkstra-radius}. -+Valid range: @var{RADIUS} @geq{} @value{srcCOLONCOLONminimumDASHdijkstraDASHradius}. - --Default: @value{src::default-dijkstra-radius}@dmn{pixels}. -+Default: @value{srcCOLONCOLONdefaultDASHdijkstraDASHradius}@dmn{pixels}. - - @item --fine-mask - @opindex --fine-mask -@@ -2240,8 +2240,8 @@ normalizes the sum of @var{LUMINANCE-WEI - @samp{--image-difference=delta-e:0.6667:0.3333} define the same - weighting function. - --The default @var{LUMINANCE-WEIGHT} is @value{src::default-luminance-difference-weight} --and the default @var{CHROMINANCE-WEIGHT} is @value{src::default-chrominance-difference-weight}. -+The default @var{LUMINANCE-WEIGHT} is @value{srcCOLONCOLONdefaultDASHluminanceDASHdifferenceDASHweight} -+and the default @var{CHROMINANCE-WEIGHT} is @value{srcCOLONCOLONdefaultDASHchrominanceDASHdifferenceDASHweight}. - - @cindex match quality - @cindex quality, match -@@ -2258,7 +2258,7 @@ quality with lower values meaning better - @cindex mask, load - @cindex load mask - Instead of generating masks, use those in @var{IMAGE-TEMPLATE}. The --default is @file{@value{src::default-mask-template}}. The mask images -+default is @file{@value{srcCOLONCOLONdefaultDASHmaskDASHtemplate}}. The mask images - have to be a 8-bit grayscale images. - - See @option{--save-masks} below for details. -@@ -2281,7 +2281,7 @@ The unit of @var{DISTANCE} is pixels unl - explained in the next paragraph. In fine masks one mask pixel - corresponds to one pixel in the input image, whereas in coarse masks - one pixel represents for example --@value{src::default-coarseness-factor}@dmn{pixels} in the input image. -+@value{srcCOLONCOLONdefaultDASHcoarsenessDASHfactor}@dmn{pixels} in the input image. - - Append a percentage sign (@samp{%}) to @var{DISTANCE} to specify the - segment length as a fraction of the diagonal of the rectangle -@@ -2306,14 +2306,14 @@ are closer to one, and blurring of the d - option@tie{}@option{--smooth-difference}. Use - option@tie{}@option{--visualize} to check the results. - --Valid range: @var{DISTANCE} @geq{} @value{src::minimum-vectorize-distance}. -+Valid range: @var{DISTANCE} @geq{} @value{srcCOLONCOLONminimumDASHvectorizeDASHdistance}. - - Enblend limits @var{DISTANCE} so that it never gets below --@value{src::minimum-vectorize-distance} even if it has been given as a -+@value{srcCOLONCOLONminimumDASHvectorizeDASHdistance} even if it has been given as a - percentage. The user will be warned in such cases. - --Default: @value{src::coarse-mask-vectorize-distance}@dmn{pixels} for --coarse masks and @value{src::fine-mask-vectorize-distance}@dmn{pixels} -+Default: @value{srcCOLONCOLONcoarseDASHmaskDASHvectorizeDASHdistance}@dmn{pixels} for -+coarse masks and @value{srcCOLONCOLONfineDASHmaskDASHvectorizeDASHdistance}@dmn{pixels} - for fine masks. - - @item --no-optimize -@@ -2392,7 +2392,7 @@ The optimizer weights@tie{}@var{DISTANCE - @var{MISMATCH-WEIGHT} define how to weight these two criteria. - Enblend up to version@tie{}3.2 used 1:1. This version of Enblend - (@value{VERSION}) uses --@value{src::default-optimizer-weight-distance}:@value{src::default-optimizer-weight-mismatch}. -+@value{srcCOLONCOLONdefaultDASHoptimizerDASHweightDASHdistance}:@value{srcCOLONCOLONdefaultDASHoptimizerDASHweightDASHmismatch}. - - A large @var{DISTANCE-WEIGHT} pulls the optimized seam line closer to - the initial postion. A large @var{MISMATCH-WEIGHT} makes the seam -@@ -2440,7 +2440,7 @@ See @ref{Primary Seam Generators} for de - @cindex mask, save - @cindex save mask - Save the generated masks to @var{IMAGE-TEMPLATE}. The default is --@file{@value{src::default-mask-template}}. Enblend saves masks as -+@file{@value{srcCOLONCOLONdefaultDASHmaskDASHtemplate}}. Enblend saves masks as - 8@dmn{bit} grayscale (single channel) images. For accuracy we - recommend to choose a lossless format. - -@@ -2497,7 +2497,7 @@ smoothing occurs @emph{after} the overla - Thus, blurring affects a @var{FACTOR}@classictimes{}@/@var{FACTOR} - times larger area in the original images. - --Valid range: @var{RADIUS} @geq{} @value{src::minimum-smooth-difference}. -+Valid range: @var{RADIUS} @geq{} @value{srcCOLONCOLONminimumDASHsmoothDASHdifference}. - - @item --visualize[=@var{VISUALIZE-TEMPLATE}] - @opindex --visualize -@@ -2505,7 +2505,7 @@ Valid range: @var{RADIUS} @geq{} @value{ - @cindex visualization of mask - Create an image according to @var{VISUALIZE-TEMPLATE} that visualizes - the unoptimized mask and the applied optimizations (if any). The default is --@file{@value{src::default-visualize-template}}. -+@file{@value{srcCOLONCOLONdefaultDASHvisualizeDASHtemplate}}. - - The image shows Enblend's view of the overlap region and how it - decided to route the seam line. If you are experiencing artifacts or -@@ -2529,49 +2529,49 @@ in the rectangular region where two imag - difference the lighter shade of gray it appears in the visualization - image. Enblend paints the non-overlapping parts of the image pair -- - these are the regions where @emph{no} blending occurs -- in --@value{src::visualize-no-overlap-value-color}. -+@value{srcCOLONCOLONvisualizeDASHnoDASHoverlapDASHvalueDASHcolor}. - @ref{Table:visualization-colors} shows the meanings of all the colors - that are used in seam-line visualization images. - - @float Table,Table:visualization-colors - @table @asis - @dbtitle{Visualization Colors} --@item @value{src::visualize-no-overlap-value-color} -+@item @value{srcCOLONCOLONvisualizeDASHnoDASHoverlapDASHvalueDASHcolor} - Non-overlapping parts of image pair. - - @item various shades of gray - Difference of the pixel values in the overlap region. - --@item @value{src::visualize-state-space-color} -+@item @value{srcCOLONCOLONvisualizeDASHstateDASHspaceDASHcolor} - Location of an optimizer sample. - --@item @value{src::visualize-first-vertex-value-color} -+@item @value{srcCOLONCOLONvisualizeDASHfirstDASHvertexDASHvalueDASHcolor} - First sample of a line segment. - --@item @value{src::visualize-next-vertex-value-color} -+@item @value{srcCOLONCOLONvisualizeDASHnextDASHvertexDASHvalueDASHcolor} - Any other but first sample of a line segment. - --@item @value{src::visualize-state-space-inside-color} -+@item @value{srcCOLONCOLONvisualizeDASHstateDASHspaceDASHinsideDASHcolor} - @cindex @sc{Dijkstra} radius - @cindex radius, @sc{Dijkstra} - State space sample inside the @sc{Dijkstra} radius. - --@item @value{src::visualize-state-space-unconverged-color} -+@item @value{srcCOLONCOLONvisualizeDASHstateDASHspaceDASHunconvergedDASHcolor} - Non-converged point. - --@item @value{src::visualize-initial-path-color} -+@item @value{srcCOLONCOLONvisualizeDASHinitialDASHpathDASHcolor} - @cindex nearest-feature transform (@acronym{NFT}), Graph-Cut (@acronym{GC}) - Initial seam line as generated by the primary seam generator. - - @cindex frozen seam-line endpoint - @cindex seam-line endpoint, frozen - Enblend marks a non-movable (``frozen'') endpoint of a seam-line --segment with a @value{src::visualize-frozen-point} --@value{src::mark-frozen-point}, whereas it uses a --@value{src::visualize-movable-point} @value{src::mark-movable-point} -+segment with a @value{srcCOLONCOLONvisualizeDASHfrozenDASHpoint} -+@value{srcCOLONCOLONmarkDASHfrozenDASHpoint}, whereas it uses a -+@value{srcCOLONCOLONvisualizeDASHmovableDASHpoint} @value{srcCOLONCOLONmarkDASHmovableDASHpoint} - to denote an endpoint that the optimizer is allowed to move around. - --@item @value{src::visualize-short-path-value-color} -+@item @value{srcCOLONCOLONvisualizeDASHshortDASHpathDASHvalueDASHcolor} - Final seam line. - @end table - -@@ -2591,15 +2591,15 @@ Final seam line. - visualization. It was produced with an Enblend run at all defaults, - but @option{--fine-mask} and @option{--visualize} enabled. - --The large @value{src::visualize-no-overlap-value-color} border is -+The large @value{srcCOLONCOLONvisualizeDASHnoDASHoverlapDASHvalueDASHcolor} border is - ``off-limits'' for Enblend, for the images do not overlap there. The --dark wedge inside the @value{src::visualize-no-overlap-value-color} -+dark wedge inside the @value{srcCOLONCOLONvisualizeDASHnoDASHoverlapDASHvalueDASHcolor} - frame is where the images share a common region. - --The initial seam-line (@value{src::visualize-initial-path-color}) is -+The initial seam-line (@value{srcCOLONCOLONvisualizeDASHinitialDASHpathDASHcolor}) is - almost straight with the exception of a single bend on the left side - of the image and the final seam-line --(@value{src::visualize-short-path-value-color}) meanders around it. -+(@value{srcCOLONCOLONvisualizeDASHshortDASHpathDASHvalueDASHcolor}) meanders around it. - - @ifhtml - @float Figure,Figure:seam-line-visualization ---- enblend-enfuse-4.1.3+dfsg.orig/doc/enfuse.texi -+++ enblend-enfuse-4.1.3+dfsg/doc/enfuse.texi -@@ -561,7 +561,7 @@ However, @uref{http://@/hci.iwr.uni-@/he - @cindex layer selection - @cindex layer selection - Override the standard layer selector algorithm, which is --@samp{@value{src::layer-selector}}. -+@samp{@value{srcCOLONCOLONlayerDASHselector}}. - - This version of Enfuse offers the following algorithms: - @table @code -@@ -701,8 +701,8 @@ pyramids. Use @samp{auto} or @samp{auto - restore the automatic calculation of the maximum number of levels. - - The valid range of the absolute value of @var{LEVELS} is --@value{src::minimum-pyramid-levels} to --@value{src::maximum-pyramid-levels}. -+@value{srcCOLONCOLONminimumDASHpyramidDASHlevels} to -+@value{srcCOLONCOLONmaximumDASHpyramidDASHlevels}. - - @item -o - @itemx --output=@var{FILE} -@@ -710,11 +710,11 @@ The valid range of the absolute value of - @opindex --output - Place output in @var{FILE}. - --@cindex @file{@value{src::default-output-filename}} -+@cindex @file{@value{srcCOLONCOLONdefaultDASHoutputDASHfilename}} - @cindex default output filename - @cindex output filename, default - If @option{--output} is not specified, the default is to put the --resulting image in @file{@value{src::default-output-filename}}. -+resulting image in @file{@value{srcCOLONCOLONdefaultDASHoutputDASHfilename}}. - - @item --parameter=@var{KEY}[=@var{VALUE}]:@dots{} - Set a @var{KEY}-@var{VALUE} pair, where @var{VALUE} is optional. This -@@ -768,7 +768,7 @@ estimations of required memory in select - @end table - - The default verbosity level of Enfuse is --@value{src::default-verbosity-level}. -+@value{srcCOLONCOLONdefaultDASHverbosityDASHlevel}. - - @item -V - @itemx --version -@@ -1396,10 +1396,10 @@ contributes to the output image. - - Sets the relative @var{WEIGHT} of high local-contrast pixels. - --Valid range: @value{src::minimum-weight-contrast} @leq{} @var{WEIGHT} --@leq{} @value{src::maximum-weight-contrast}. -+Valid range: @value{srcCOLONCOLONminimumDASHweightDASHcontrast} @leq{} @var{WEIGHT} -+@leq{} @value{srcCOLONCOLONmaximumDASHweightDASHcontrast}. - --Default: @value{src::default-weight-contrast}. -+Default: @value{srcCOLONCOLONdefaultDASHweightDASHcontrast}. - - See @ref{Local Contrast Weighting} and @ref{Expert Options, Option - contrast-window-size}. -@@ -1410,10 +1410,10 @@ contrast-window-size}. - - Sets the relative @var{WEIGHT} of high local entropy pixels. - --Valid range: @value{src::minimum-weight-entropy} @leq{} @var{WEIGHT} --@leq{} @value{src::maximum-weight-entropy}. -+Valid range: @value{srcCOLONCOLONminimumDASHweightDASHentropy} @leq{} @var{WEIGHT} -+@leq{} @value{srcCOLONCOLONmaximumDASHweightDASHentropy}. - --Default: @value{src::default-weight-entropy}. -+Default: @value{srcCOLONCOLONdefaultDASHweightDASHentropy}. - - See @ref{Local Entropy Weighting} and @ref{Expert Options, Options - entropy-window-size and entropy-cutoff}. -@@ -1426,10 +1426,10 @@ Sets the relative @var{WEIGHT} of the we - Increasing this weight relative to the others will make well-exposed - pixels contribute more to the final output. - --Valid range: @value{src::minimum-weight-exposure} @leq{} @var{WEIGHT} --@leq{} @value{src::maximum-weight-exposure}. -+Valid range: @value{srcCOLONCOLONminimumDASHweightDASHexposure} @leq{} @var{WEIGHT} -+@leq{} @value{srcCOLONCOLONmaximumDASHweightDASHexposure}. - --Default: @value{src::default-weight-exposure}. -+Default: @value{srcCOLONCOLONdefaultDASHweightDASHexposure}. - - @xref{Exposure Weighting}. - -@@ -1439,10 +1439,10 @@ Default: @value{src::default-weight-expo - Set the @var{MEAN} (this is, the center) of the Gaussian exposure - weight curve. - --Valid range: @value{src::minimum-exposure-mu} @leq{} @var{MEAN} --@leq{} @value{src::maximum-exposure-mu}. -+Valid range: @value{srcCOLONCOLONminimumDASHexposureDASHmu} @leq{} @var{MEAN} -+@leq{} @value{srcCOLONCOLONmaximumDASHexposureDASHmu}. - --Default: @value{src::default-exposure-mu}. -+Default: @value{srcCOLONCOLONdefaultDASHexposureDASHmu}. - - Use this option to fine-tune exposure weighting (@pxref{Exposure - Weighting}). -@@ -1454,9 +1454,9 @@ Standard deviation @var{STD-DEV} of the - curve. Low numbers give less weight to pixels that are far from - @option{--wMu} and vice versa. - --Valid range: @var{STD-DEV} @geq{} @value{src::minimum-exposure-sigma}. -+Valid range: @var{STD-DEV} @geq{} @value{srcCOLONCOLONminimumDASHexposureDASHsigma}. - --Default: @value{src::default-exposure-sigma}. -+Default: @value{srcCOLONCOLONdefaultDASHexposureDASHsigma}. - - Use this option to fine-tune exposure weighting (@pxref{Exposure - Weighting}). -@@ -1468,10 +1468,10 @@ Sets the relative @var{WEIGHT} of high-s - this weight makes pixels with high saturation contribute more to the - final output. - --Valid range: @value{src::minimum-weight-saturation} --@leq{} @var{WEIGHT} @leq{} @value{src::maximum-weight-saturation}. -+Valid range: @value{srcCOLONCOLONminimumDASHweightDASHsaturation} -+@leq{} @var{WEIGHT} @leq{} @value{srcCOLONCOLONmaximumDASHweightDASHsaturation}. - --Default: @value{src::default-weight-saturation}. -+Default: @value{srcCOLONCOLONdefaultDASHweightDASHsaturation}. - - Saturation weighting is only defined for color images. - @xref{Saturation Weighting}. -@@ -1494,7 +1494,7 @@ to read the manual before applying them - A non-zero value for @var{EDGE-SCALE} switches on the - Laplacian-of-Gaussian (@acronym{LoG}) edge detection algorithm. - @var{EDGE-SCALE} is the radius of the Gaussian used in the search for --edges. Default: @value{src::default-edge-scale}@dmn{pixels}. -+edges. Default: @value{srcCOLONCOLONdefaultDASHedgeDASHscale}@dmn{pixels}. - - A positive @var{LCE-SCALE} turns on local contrast enhancement - (@acronym{LCE}) before the @acronym{LoG} edge detection. -@@ -1505,8 +1505,8 @@ step, @var{LCE-FACTOR} is the weight fac - @minus{} @var{LCE-FACTOR} @classictimes{} Gaussian@/Smooth(@var{original}, - @var{LCE-SCALE}). - --@var{LCE-SCALE} defaults to @value{src::default-lce-scale} pixels and --@var{LCE-FACTOR} defaults to @value{src::default-lce-factor}. Append -+@var{LCE-SCALE} defaults to @value{srcCOLONCOLONdefaultDASHlceDASHscale} pixels and -+@var{LCE-FACTOR} defaults to @value{srcCOLONCOLONdefaultDASHlceDASHfactor}. Append - @samp{%} to @var{LCE-SCALE} to specify the radius as a percentage of - @var{EDGE-SCALE}. Append @samp{%} to @var{LCE-FACTOR} to specify the - weight as a percentage. -@@ -1515,7 +1515,7 @@ weight as a percentage. - @opindex --contrast-min-curvature - - Define the minimum @var{CURVATURE} for the @acronym{LoG} edge --detection. Default: @value{src::default-minimum-curvature}. Append a -+detection. Default: @value{srcCOLONCOLONdefaultDASHminimumDASHcurvature}. Append a - @samp{%} to specify the minimum curvature relative to maximum pixel - value in the source image (for example 255 or 65535). - -@@ -1539,9 +1539,9 @@ For contrast analysis @var{SIZE} values - a blurry composite image. Values of 3 and 5 have given good results - on focus stacks. - --Valid range: @var{SIZE} @geq{} @value{src::minimum-contrast-window-size}. -+Valid range: @var{SIZE} @geq{} @value{srcCOLONCOLONminimumDASHcontrastDASHwindowDASHsize}. - --Default: @value{src::default-contrast-window-size}@dmn{pixels}. -+Default: @value{srcCOLONCOLONdefaultDASHcontrastDASHwindowDASHsize}@dmn{pixels}. - - See also @ref{Fusion Options, Option --contrast-weight} and - @option{--hard-mask} below. -@@ -1558,8 +1558,8 @@ treated as pure white. - For color images @var{LOWER-CUTOFF} and @var{UPPER-CUTOFF} are applied - separately and independently to each channel. - --Defaults: @value{src::default-entropy-lower-cutoff} for --@var{LOWER-CUTOFF} and @value{src::default-entropy-upper-cutoff} for -+Defaults: @value{srcCOLONCOLONdefaultDASHentropyDASHlowerDASHcutoff} for -+@var{LOWER-CUTOFF} and @value{srcCOLONCOLONdefaultDASHentropyDASHupperDASHcutoff} for - @var{UPPER-CUTOFF}, that is, all pixels' values are taken into - account. Append a @samp{%} to specify the cutoff relative to maximum - pixel value in the source image (for example 255 or 65535). -@@ -1591,9 +1591,9 @@ In the entropy calculation @var{SIZE} va - acceptable compromise of the locality of the information and the - significance of the local entropy value itself. - --Valid range: @var{SIZE} @geq{} @value{src::minimum-entropy-window-size}. -+Valid range: @var{SIZE} @geq{} @value{srcCOLONCOLONminimumDASHentropyDASHwindowDASHsize}. - --Default: @value{src::default-entropy-window-size}@dmn{pixels}. -+Default: @value{srcCOLONCOLONdefaultDASHentropyDASHwindowDASHsize}@dmn{pixels}. - - If given an even @var{SIZE} Enfuse will automatically use the next odd - number. -@@ -1654,8 +1654,8 @@ exposure-weight curve this option change - resulting image: increasing @var{LOWER-CUTOFF} lightens the final - image and lowering @var{UPPER-CUTOFF} darkens it. - --Defaults: @value{src::default-exposure-lower-cutoff} for --@var{LOWER-CUTOFF} and @value{src::default-exposure-upper-cutoff} for -+Defaults: @value{srcCOLONCOLONdefaultDASHexposureDASHlowerDASHcutoff} for -+@var{LOWER-CUTOFF} and @value{srcCOLONCOLONdefaultDASHexposureDASHupperDASHcutoff} for - @var{UPPER-CUTOFF}, that is, all pixels' values are weighted according - to the ``uncut'' exposure-weight curve. - -@@ -1666,8 +1666,8 @@ value in the source image (for example 2 - - The gray-scale projectors @var{LOWER-PROJECTOR} and - @var{UPPER-PROJECTOR} default to --@samp{@value{src::default-exposure-lower-cutoff-projector}} and --@samp{@value{src::default-exposure-upper-cutoff-projector}}, which are -+@samp{@value{srcCOLONCOLONdefaultDASHexposureDASHlowerDASHcutoffDASHprojector}} and -+@samp{@value{srcCOLONCOLONdefaultDASHexposureDASHupperDASHcutoffDASHprojector}}, which are - usually the best choices for effective cutoff operations on the - respective ends. - -@@ -2202,8 +2202,8 @@ The masks have to be a grayscale images. - First form: Load all soft-weight masks from files that were previously - saved with option@tie{}@option{--save-masks}. If - option@tie{}@option{--hard-mask} is effective only load hard masks. --The defaults are @file{@value{src::default-soft-mask-template}} and --@file{@value{src::default-hard-mask-template}}. -+The defaults are @file{@value{srcCOLONCOLONdefaultDASHsoftDASHmaskDASHtemplate}} and -+@file{@value{srcCOLONCOLONdefaultDASHhardDASHmaskDASHtemplate}}. - @cindex filename template - @cindex mask, filename template - In the second form, @var{SOFT-MASK-TEMPLATE} defines the names of the -@@ -2225,8 +2225,8 @@ Save the generated weight masks to image - - First form: Save all soft-weight masks in files. If - option@tie{}@option{--hard-mask} is effective also save the hard masks. --The defaults are @file{@value{src::default-soft-mask-template}} and --@file{@value{src::default-hard-mask-template}}. -+The defaults are @file{@value{srcCOLONCOLONdefaultDASHsoftDASHmaskDASHtemplate}} and -+@file{@value{srcCOLONCOLONdefaultDASHhardDASHmaskDASHtemplate}}. - @cindex filename template - @cindex mask, filename template - In the second form, @var{SOFT-MASK-TEMPLATE} defines the names of the -@@ -3139,10 +3139,10 @@ means they are @emph{active}. - @float Table,Table:default-weights - @multitable {Local Contrast} {0.0} - @headitem Criterion @tab Weight --@item Exposure @tab @value{src::default-weight-exposure} --@item Saturation @tab @value{src::default-weight-saturation} --@item Local Contrast @tab @value{src::default-weight-contrast} --@item Local Entropy @tab @value{src::default-weight-entropy} -+@item Exposure @tab @value{srcCOLONCOLONdefaultDASHweightDASHexposure} -+@item Saturation @tab @value{srcCOLONCOLONdefaultDASHweightDASHsaturation} -+@item Local Contrast @tab @value{srcCOLONCOLONdefaultDASHweightDASHcontrast} -+@item Local Entropy @tab @value{srcCOLONCOLONdefaultDASHweightDASHentropy} - @end multitable - - @caption{Enfuse's default weights as compiled into version@tie{}@value{VERSION}.} -@@ -3306,8 +3306,8 @@ $$ - @noindent - whose center@tie{}@math{Mu} and width@tie{}@math{Sigma} are controlled - by the command line options@tie{}@option{--exposure-mu} and @option{--exposure-sigma} --respectively. @math{Mu} defaults to @value{src::default-exposure-mu} --and @math{Sigma} defaults to @value{src::default-exposure-sigma}. -+respectively. @math{Mu} defaults to @value{srcCOLONCOLONdefaultDASHexposureDASHmu} -+and @math{Sigma} defaults to @value{srcCOLONCOLONdefaultDASHexposureDASHsigma}. - @ref{Figure:gaussian} shows a Gaussian. - - @float Figure,Figure:gaussian -@@ -4574,7 +4574,7 @@ option@tie{}@option{--contrast-min-curva - argument@tie{}@var{CURVATURE} to suppress all edges with a curvature - below @minus{}@var{CURVATURE} (which is a positive value). Check the - effects with the mask files and particularly the hard-mask files --(@file{@value{src::default-hard-mask-template}}) if using -+(@file{@value{srcCOLONCOLONdefaultDASHhardDASHmaskDASHtemplate}}) if using - option@tie{}@option{--hard-mask}. - - To indicate the @var{CURVATURE} in relative terms, which is -@@ -5198,8 +5198,8 @@ multitude of techniques like, for exampl - prominent method in this class is dark-frame subtraction. - - The defaults set --@samp{--exposure-weight=@value{src::default-weight-exposure}} and --@samp{--saturation-weight=@value{src::default-weight-saturation}}. -+@samp{--exposure-weight=@value{srcCOLONCOLONdefaultDASHweightDASHexposure}} and -+@samp{--saturation-weight=@value{srcCOLONCOLONdefaultDASHweightDASHsaturation}}. - Eliminating the saturation component with @samp{--saturation-weight=0.0} can - be worth an extra run. - -@@ -5219,8 +5219,8 @@ functions to automate recording exposure - manual of your model for details. - - Enfuse's defaults, --@samp{--exposure-weight=@value{src::default-weight-exposure}} and --@samp{--saturation-weight=@value{src::default-weight-saturation}} are -+@samp{--exposure-weight=@value{srcCOLONCOLONdefaultDASHweightDASHexposure}} and -+@samp{--saturation-weight=@value{srcCOLONCOLONdefaultDASHweightDASHsaturation}} are - well suited for fusion of @emph{color} images. Remember that - saturation weighting only works for @acronym{RGB} data. - Option@tie{}@option{--saturation-weight} helps to control burnt-out -@@ -5462,11 +5462,11 @@ Here is what each option causes: - @table @option - @item --exposure-weight=0 - Switch @strong{off} exposure based pixel selection. The default --weight is @value{src::default-weight-exposure}. -+weight is @value{srcCOLONCOLONdefaultDASHweightDASHexposure}. - - @item --saturation-weight=0 - Switch @strong{off} saturation based pixel selection. The default --weight is @value{src::default-weight-saturation}. -+weight is @value{srcCOLONCOLONdefaultDASHweightDASHsaturation}. - - @item --contrast-weight=1 - Switch @strong{on} pixel selection based on local contrast. -@@ -5626,8 +5626,8 @@ Typically, @var{SCALE} ranges between 0. - find the best value for @var{SCALE} though, usually some - experimentation will be necessary. Use @option{--save-masks} to get - all soft-mask (default: --@file{@value{src::default-soft-mask-template}}) and hard-mask files --(default: @file{@value{src::default-hard-mask-template}}). Check how -+@file{@value{srcCOLONCOLONdefaultDASHsoftDASHmaskDASHtemplate}}) and hard-mask files -+(default: @file{@value{srcCOLONCOLONdefaultDASHhardDASHmaskDASHtemplate}}). Check how - different scales affect the artifacts. Also @pxref{Understanding - Masks}. - ---- enblend-enfuse-4.1.3+dfsg.orig/doc/varsenblend.texi -+++ enblend-enfuse-4.1.3+dfsg/doc/varsenblend.texi -@@ -1,132 +1,132 @@ - @c enblend.cc:99 --@set src::coarse-mask-vectorize-distance 4 -+@set srcCOLONCOLONcoarseDASHmaskDASHvectorizeDASHdistance 4 - - @c enblend.cc:138 --@set src::default-anneal-deltae-max 7000.0 -+@set srcCOLONCOLONdefaultDASHannealDASHdeltaeDASHmax 7000.0 - - @c enblend.cc:139 --@set src::default-anneal-deltae-min 5.0 -+@set srcCOLONCOLONdefaultDASHannealDASHdeltaeDASHmin 5.0 - - @c enblend.cc:136 --@set src::default-anneal-kmax 32 -+@set srcCOLONCOLONdefaultDASHannealDASHkmax 32 - - @c enblend.cc:137 --@set src::default-anneal-tau 0.75 -+@set srcCOLONCOLONdefaultDASHannealDASHtau 0.75 - - @c enblend.cc:123 --@set src::default-chrominance-difference-weight 1.0 -+@set srcCOLONCOLONdefaultDASHchrominanceDASHdifferenceDASHweight 1.0 - - @c enblend.cc:120 --@set src::default-coarseness-factor 8 -+@set srcCOLONCOLONdefaultDASHcoarsenessDASHfactor 8 - - @c enblend.cc:121 --@set src::default-difference-functor Delta-E -+@set srcCOLONCOLONdefaultDASHdifferenceDASHfunctor Delta-E - - @c enblend.cc:141 --@set src::default-dijkstra-radius 25 -+@set srcCOLONCOLONdefaultDASHdijkstraDASHradius 25 - - @c enblend.cc:122 --@set src::default-luminance-difference-weight 1.0 -+@set srcCOLONCOLONdefaultDASHluminanceDASHdifferenceDASHweight 1.0 - - @c enblend.cc:127 --@set src::default-mask-template mask-%n.tif -+@set srcCOLONCOLONdefaultDASHmaskDASHtemplate mask-%n.tif - - @c enblend.cc:133 --@set src::default-optimizer-weight-distance 8.0 -+@set srcCOLONCOLONdefaultDASHoptimizerDASHweightDASHdistance 8.0 - - @c enblend.cc:134 --@set src::default-optimizer-weight-mismatch 1.0 -+@set srcCOLONCOLONdefaultDASHoptimizerDASHweightDASHmismatch 1.0 - - @c global.h:77 --@set src::default-output-filename a.tif -+@set srcCOLONCOLONdefaultDASHoutputDASHfilename a.tif - - @c global.h:152 --@set src::default-tiff-resolution 300@dmn{dpi} -+@set srcCOLONCOLONdefaultDASHtiffDASHresolution 300@dmn{dpi} - - @c enblend.cc:104 --@set src::default-verbosity-level 1 -+@set srcCOLONCOLONdefaultDASHverbosityDASHlevel 1 - - @c enblend.cc:130 --@set src::default-visualize-template vis-%n.tif -+@set srcCOLONCOLONdefaultDASHvisualizeDASHtemplate vis-%n.tif - - @c enblend.cc:100 --@set src::fine-mask-vectorize-distance 20 -+@set srcCOLONCOLONfineDASHmaskDASHvectorizeDASHdistance 20 - - @c enblend.cc:1686 --@set src::layer-selector all-layers -+@set srcCOLONCOLONlayerDASHselector all-layers - - @c common.h:122 --@set src::mark-frozen-point cross -+@set srcCOLONCOLONmarkDASHfrozenDASHpoint cross - - @c common.h:118 --@set src::mark-movable-point diamond -+@set srcCOLONCOLONmarkDASHmovableDASHpoint diamond - - @c enblend.cc:1134 --@set src::maximum-anneal-tau 1 -+@set srcCOLONCOLONmaximumDASHannealDASHtau 1 - - @c common.h:56 --@set src::maximum-pyramid-levels 29 -+@set srcCOLONCOLONmaximumDASHpyramidDASHlevels 29 - - @c enblend.cc:1161 --@set src::minimum-anneal-deltae-max 0 -+@set srcCOLONCOLONminimumDASHannealDASHdeltaeDASHmax 0 - - @c enblend.cc:1188 --@set src::minimum-anneal-deltae-min 0 -+@set srcCOLONCOLONminimumDASHannealDASHdeltaeDASHmin 0 - - @c enblend.cc:1221 --@set src::minimum-anneal-kmax 3 -+@set srcCOLONCOLONminimumDASHannealDASHkmax 3 - - @c enblend.cc:1127 --@set src::minimum-anneal-tau 0 -+@set srcCOLONCOLONminimumDASHannealDASHtau 0 - - @c enblend.cc:1369 --@set src::minimum-cache-block-size 1@dmn{KB} -+@set srcCOLONCOLONminimumDASHcacheDASHblockDASHsize 1@dmn{KB} - - @c enblend.cc:1494 --@set src::minimum-cache-size 1@dmn{MB} -+@set srcCOLONCOLONminimumDASHcacheDASHsize 1@dmn{MB} - - @c enblend.cc:1354 --@set src::minimum-dijkstra-radius 1 -+@set srcCOLONCOLONminimumDASHdijkstraDASHradius 1 - - @c bounds.h:120 --@set src::minimum-pyramid-levels 1 -+@set srcCOLONCOLONminimumDASHpyramidDASHlevels 1 - - @c enblend.cc:1285 --@set src::minimum-smooth-difference 0.0 -+@set srcCOLONCOLONminimumDASHsmoothDASHdifference 0.0 - - @c enblend.cc:98 --@set src::minimum-vectorize-distance 4 -+@set srcCOLONCOLONminimumDASHvectorizeDASHdistance 4 - - @c enblend.cc:1330 --@set src::minimum-verbosity-level 0 -+@set srcCOLONCOLONminimumDASHverbosityDASHlevel 0 - - @c common.h:128 --@set src::visualize-first-vertex-value-color medium green -+@set srcCOLONCOLONvisualizeDASHfirstDASHvertexDASHvalueDASHcolor medium green - - @c common.h:120 --@set src::visualize-frozen-point bright white -+@set srcCOLONCOLONvisualizeDASHfrozenDASHpoint bright white - - @c common.h:124 --@set src::visualize-initial-path-color dark yellow -+@set srcCOLONCOLONvisualizeDASHinitialDASHpathDASHcolor dark yellow - - @c common.h:116 --@set src::visualize-movable-point light orange -+@set srcCOLONCOLONvisualizeDASHmovableDASHpoint light orange - - @c common.h:130 --@set src::visualize-next-vertex-value-color light green -+@set srcCOLONCOLONvisualizeDASHnextDASHvertexDASHvalueDASHcolor light green - - @c common.h:132 --@set src::visualize-no-overlap-value-color dark red -+@set srcCOLONCOLONvisualizeDASHnoDASHoverlapDASHvalueDASHcolor dark red - - @c common.h:126 --@set src::visualize-short-path-value-color bright yellow -+@set srcCOLONCOLONvisualizeDASHshortDASHpathDASHvalueDASHcolor bright yellow - - @c common.h:134 --@set src::visualize-state-space-color dark blue -+@set srcCOLONCOLONvisualizeDASHstateDASHspaceDASHcolor dark blue - - @c common.h:136 --@set src::visualize-state-space-inside-color bright cyan -+@set srcCOLONCOLONvisualizeDASHstateDASHspaceDASHinsideDASHcolor bright cyan - - @c common.h:138 --@set src::visualize-state-space-unconverged-color bright magenta -+@set srcCOLONCOLONvisualizeDASHstateDASHspaceDASHunconvergedDASHcolor bright magenta - ---- enblend-enfuse-4.1.3+dfsg.orig/doc/varsenfuse.texi -+++ enblend-enfuse-4.1.3+dfsg/doc/varsenfuse.texi -@@ -1,162 +1,162 @@ - @c enfuse.cc:109 --@set src::default-contrast-window-size 5 -+@set srcCOLONCOLONdefaultDASHcontrastDASHwindowDASHsize 5 - - @c enfuse.cc:112 --@set src::default-edge-scale 0.0 -+@set srcCOLONCOLONdefaultDASHedgeDASHscale 0.0 - - @c enfuse.cc:118 --@set src::default-entropy-lower-cutoff 0% -+@set srcCOLONCOLONdefaultDASHentropyDASHlowerDASHcutoff 0% - - @c enfuse.cc:119 --@set src::default-entropy-upper-cutoff 100% -+@set srcCOLONCOLONdefaultDASHentropyDASHupperDASHcutoff 100% - - @c enfuse.cc:117 --@set src::default-entropy-window-size 3 -+@set srcCOLONCOLONdefaultDASHentropyDASHwindowDASHsize 3 - - @c enfuse.cc:99 --@set src::default-exposure-lower-cutoff 0% -+@set srcCOLONCOLONdefaultDASHexposureDASHlowerDASHcutoff 0% - - @c enfuse.cc:101 --@set src::default-exposure-lower-cutoff-projector anti-value -+@set srcCOLONCOLONdefaultDASHexposureDASHlowerDASHcutoffDASHprojector anti-value - - @c enfuse.cc:106 --@set src::default-exposure-mu 0.5 -+@set srcCOLONCOLONdefaultDASHexposureDASHmu 0.5 - - @c enfuse.cc:107 --@set src::default-exposure-sigma 0.2 -+@set srcCOLONCOLONdefaultDASHexposureDASHsigma 0.2 - - @c enfuse.cc:100 --@set src::default-exposure-upper-cutoff 100% -+@set srcCOLONCOLONdefaultDASHexposureDASHupperDASHcutoff 100% - - @c enfuse.cc:102 --@set src::default-exposure-upper-cutoff-projector value -+@set srcCOLONCOLONdefaultDASHexposureDASHupperDASHcutoffDASHprojector value - - @c enfuse.cc:125 --@set src::default-hard-mask-template hardmask-%n.tif -+@set srcCOLONCOLONdefaultDASHhardDASHmaskDASHtemplate hardmask-%n.tif - - @c enfuse.cc:114 --@set src::default-lce-factor 0.0 -+@set srcCOLONCOLONdefaultDASHlceDASHfactor 0.0 - - @c enfuse.cc:113 --@set src::default-lce-scale 0.0 -+@set srcCOLONCOLONdefaultDASHlceDASHscale 0.0 - - @c enfuse.cc:116 --@set src::default-minimum-curvature 0 -+@set srcCOLONCOLONdefaultDASHminimumDASHcurvature 0 - - @c global.h:77 --@set src::default-output-filename a.tif -+@set srcCOLONCOLONdefaultDASHoutputDASHfilename a.tif - - @c enfuse.cc:124 --@set src::default-soft-mask-template softmask-%n.tif -+@set srcCOLONCOLONdefaultDASHsoftDASHmaskDASHtemplate softmask-%n.tif - - @c global.h:152 --@set src::default-tiff-resolution 300@dmn{dpi} -+@set srcCOLONCOLONdefaultDASHtiffDASHresolution 300@dmn{dpi} - - @c enfuse.cc:85 --@set src::default-verbosity-level 1 -+@set srcCOLONCOLONdefaultDASHverbosityDASHlevel 1 - - @c enfuse.cc:103 --@set src::default-weight-contrast 0.0 -+@set srcCOLONCOLONdefaultDASHweightDASHcontrast 0.0 - - @c enfuse.cc:105 --@set src::default-weight-entropy 0.0 -+@set srcCOLONCOLONdefaultDASHweightDASHentropy 0.0 - - @c enfuse.cc:98 --@set src::default-weight-exposure 1.0 -+@set srcCOLONCOLONdefaultDASHweightDASHexposure 1.0 - - @c enfuse.cc:104 --@set src::default-weight-saturation 0.2 -+@set srcCOLONCOLONdefaultDASHweightDASHsaturation 0.2 - - @c enfuse.cc:1693 --@set src::layer-selector all-layers -+@set srcCOLONCOLONlayerDASHselector all-layers - - @c common.h:122 --@set src::mark-frozen-point cross -+@set srcCOLONCOLONmarkDASHfrozenDASHpoint cross - - @c common.h:118 --@set src::mark-movable-point diamond -+@set srcCOLONCOLONmarkDASHmovableDASHpoint diamond - - @c enfuse.cc:1318 --@set src::maximum-exposure-mu 1 -+@set srcCOLONCOLONmaximumDASHexposureDASHmu 1 - - @c common.h:56 --@set src::maximum-pyramid-levels 29 -+@set srcCOLONCOLONmaximumDASHpyramidDASHlevels 29 - - @c enfuse.cc:1285 --@set src::maximum-weight-contrast 1 -+@set srcCOLONCOLONmaximumDASHweightDASHcontrast 1 - - @c enfuse.cc:1347 --@set src::maximum-weight-entropy 1 -+@set srcCOLONCOLONmaximumDASHweightDASHentropy 1 - - @c enfuse.cc:1269 --@set src::maximum-weight-exposure 1 -+@set srcCOLONCOLONmaximumDASHweightDASHexposure 1 - - @c enfuse.cc:1301 --@set src::maximum-weight-saturation 1 -+@set srcCOLONCOLONmaximumDASHweightDASHsaturation 1 - - @c enfuse.cc:1414 --@set src::minimum-cache-block-size 1@dmn{KB} -+@set srcCOLONCOLONminimumDASHcacheDASHblockDASHsize 1@dmn{KB} - - @c enfuse.cc:1513 --@set src::minimum-cache-size 1@dmn{MB} -+@set srcCOLONCOLONminimumDASHcacheDASHsize 1@dmn{MB} - - @c enfuse.cc:1374 --@set src::minimum-contrast-window-size 3 -+@set srcCOLONCOLONminimumDASHcontrastDASHwindowDASHsize 3 - - @c enfuse.cc:1394 --@set src::minimum-entropy-window-size 3 -+@set srcCOLONCOLONminimumDASHentropyDASHwindowDASHsize 3 - - @c enfuse.cc:1315 --@set src::minimum-exposure-mu 0 -+@set srcCOLONCOLONminimumDASHexposureDASHmu 0 - - @c enfuse.cc:1331 --@set src::minimum-exposure-sigma 0 -+@set srcCOLONCOLONminimumDASHexposureDASHsigma 0 - - @c bounds.h:120 --@set src::minimum-pyramid-levels 1 -+@set srcCOLONCOLONminimumDASHpyramidDASHlevels 1 - - @c enfuse.cc:1361 --@set src::minimum-verbosity-level 0 -+@set srcCOLONCOLONminimumDASHverbosityDASHlevel 0 - - @c enfuse.cc:1282 --@set src::minimum-weight-contrast 0 -+@set srcCOLONCOLONminimumDASHweightDASHcontrast 0 - - @c enfuse.cc:1344 --@set src::minimum-weight-entropy 0 -+@set srcCOLONCOLONminimumDASHweightDASHentropy 0 - - @c enfuse.cc:1266 --@set src::minimum-weight-exposure 0 -+@set srcCOLONCOLONminimumDASHweightDASHexposure 0 - - @c enfuse.cc:1298 --@set src::minimum-weight-saturation 0 -+@set srcCOLONCOLONminimumDASHweightDASHsaturation 0 - - @c common.h:128 --@set src::visualize-first-vertex-value-color medium green -+@set srcCOLONCOLONvisualizeDASHfirstDASHvertexDASHvalueDASHcolor medium green - - @c common.h:120 --@set src::visualize-frozen-point bright white -+@set srcCOLONCOLONvisualizeDASHfrozenDASHpoint bright white - - @c common.h:124 --@set src::visualize-initial-path-color dark yellow -+@set srcCOLONCOLONvisualizeDASHinitialDASHpathDASHcolor dark yellow - - @c common.h:116 --@set src::visualize-movable-point light orange -+@set srcCOLONCOLONvisualizeDASHmovableDASHpoint light orange - - @c common.h:130 --@set src::visualize-next-vertex-value-color light green -+@set srcCOLONCOLONvisualizeDASHnextDASHvertexDASHvalueDASHcolor light green - - @c common.h:132 --@set src::visualize-no-overlap-value-color dark red -+@set srcCOLONCOLONvisualizeDASHnoDASHoverlapDASHvalueDASHcolor dark red - - @c common.h:126 --@set src::visualize-short-path-value-color bright yellow -+@set srcCOLONCOLONvisualizeDASHshortDASHpathDASHvalueDASHcolor bright yellow - - @c common.h:134 --@set src::visualize-state-space-color dark blue -+@set srcCOLONCOLONvisualizeDASHstateDASHspaceDASHcolor dark blue - - @c common.h:136 --@set src::visualize-state-space-inside-color bright cyan -+@set srcCOLONCOLONvisualizeDASHstateDASHspaceDASHinsideDASHcolor bright cyan - - @c common.h:138 --@set src::visualize-state-space-unconverged-color bright magenta -+@set srcCOLONCOLONvisualizeDASHstateDASHspaceDASHunconvergedDASHcolor bright magenta - diff -Nru enblend-enfuse-4.1.3+dfsg/debian/patches/0002-expand-homepage-macro.patch enblend-enfuse-4.1.4+dfsg/debian/patches/0002-expand-homepage-macro.patch --- enblend-enfuse-4.1.3+dfsg/debian/patches/0002-expand-homepage-macro.patch 2013-12-29 12:49:14.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/debian/patches/0002-expand-homepage-macro.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,28 +0,0 @@ -From 30727827485eeab1bc0eaa90371aa9ddb34b07f8 Mon Sep 17 00:00:00 2001 -From: Andreas Metzler -Date: Sun, 27 Oct 2013 08:02:40 +0100 -Subject: [PATCH 2/9] expand homepage-macro - -texinfo 5.1 breaks on variable names (@set / @value) containing -non-alphanumerical characters. - Only a single one of the macros -is inherited from ./configure. Lets just hardcode it instead. ---- - doc/bug-reports.texi | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/doc/bug-reports.texi b/doc/bug-reports.texi -index 716146a..250fc20 100644 ---- a/doc/bug-reports.texi -+++ b/doc/bug-reports.texi -@@ -16,7 +16,7 @@ reliable and enjoyable. - When you encounter a problem, the first thing to do is to see if it is - already known. To this end visit the package's - @uref{https://@/launchpad.net/, LaunchPad} bug --@uref{@value{CFG::PACKAGE_BUGREPORT}, database}. Search it for your -+@uref{https://bugs.launchpad.net/enblend, database}. Search it for your - particular problem. If it is not known, please report it. - - In order for a bug report to serve its purpose, you must include the --- -1.7.10.4 - diff -Nru enblend-enfuse-4.1.3+dfsg/debian/patches/0003-Texinfo-5.1-workaround-disable-some-macros.patch enblend-enfuse-4.1.4+dfsg/debian/patches/0003-Texinfo-5.1-workaround-disable-some-macros.patch --- enblend-enfuse-4.1.3+dfsg/debian/patches/0003-Texinfo-5.1-workaround-disable-some-macros.patch 2013-12-29 12:49:14.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/debian/patches/0003-Texinfo-5.1-workaround-disable-some-macros.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,88 +0,0 @@ -From 32f8585212aea7cba36aa98df7b8c8715f2579fa Mon Sep 17 00:00:00 2001 -From: Andreas Metzler -Date: Sun, 27 Oct 2013 08:05:34 +0100 -Subject: [PATCH 3/9] Texinfo 5.1 workaround - disable some macros - -Origin: vendor ---- - doc/auxmac.texi | 64 +++++++++++++++++++++++++++---------------------------- - 1 file changed, 32 insertions(+), 32 deletions(-) - -diff --git a/doc/auxmac.texi b/doc/auxmac.texi -index 98c679f..c416eac 100644 ---- a/doc/auxmac.texi -+++ b/doc/auxmac.texi -@@ -113,38 +113,38 @@ x@c gobble following newline -- The Tricks of a Texinfo Wizard. - @end macro - - --@c Required for older versions of makeinfo. The definition of @geq --@c for TeX lives in auxmac.tex. --@ifnottex --@macro geq --@ifinfo -->=@c --@end ifinfo --@html --≥ --@end html --@docbook --≥ --@end docbook --@end macro --@end ifnottex -- -- --@c Required for older versions of makeinfo. The definition of @leq --@c for TeX lives in auxmac.tex. --@ifnottex --@macro leq --@ifinfo --<=@c --@end ifinfo --@html --≤ --@end html --@docbook --≤ --@end docbook --@end macro --@end ifnottex -+@c %%%%@c Required for older versions of makeinfo. The definition of @geq -+@c %%%%@c for TeX lives in auxmac.tex. -+@c %%%%@ifnottex -+@c %%%%@macro geq -+@c %%%%@ifinfo -+@c %%%%>=@c -+@c %%%%@end ifinfo -+@c %%%%@html -+@c %%%%≥ -+@c %%%%@end html -+@c %%%%@docbook -+@c %%%%≥ -+@c %%%%@end docbook -+@c %%%%@end macro -+@c %%%%@end ifnottex -+@c %%%% -+@c %%%% -+@c %%%%@c Required for older versions of makeinfo. The definition of @leq -+@c %%%%@c for TeX lives in auxmac.tex. -+@c %%%%@ifnottex -+@c %%%%@macro leq -+@c %%%%@ifinfo -+@c %%%%<=@c -+@c %%%%@end ifinfo -+@c %%%%@html -+@c %%%%≤ -+@c %%%%@end html -+@c %%%%@docbook -+@c %%%%≤ -+@c %%%%@end docbook -+@c %%%%@end macro -+@c %%%%@end ifnottex - - - @macro plusminus --- -1.7.10.4 - diff -Nru enblend-enfuse-4.1.3+dfsg/debian/patches/0004-Texinfo-5.1-workaround-macro-on-a-separate-line.patch enblend-enfuse-4.1.4+dfsg/debian/patches/0004-Texinfo-5.1-workaround-macro-on-a-separate-line.patch --- enblend-enfuse-4.1.3+dfsg/debian/patches/0004-Texinfo-5.1-workaround-macro-on-a-separate-line.patch 2013-12-29 12:49:14.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/debian/patches/0004-Texinfo-5.1-workaround-macro-on-a-separate-line.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,232 +0,0 @@ -From 53812d0cd2fbb6cfafcaa16eb409c01c6392ef48 Mon Sep 17 00:00:00 2001 -From: Andreas Metzler -Date: Sun, 27 Oct 2013 08:12:42 +0100 -Subject: [PATCH 4/9] Texinfo 5.1 workaround - macro on a separate line - -Texinfo breaks if macros using a conditional are placed in the middle -of a line. (This is documented in Texinfo 5.1 reference but used to -work.) -Change texinfo source, although it adds unwanted whitespace in output. ---- - doc/bug-reports.texi | 4 +++- - doc/enblend.texi | 28 +++++++++++++++++++++------- - doc/enfuse.texi | 48 ++++++++++++++++++++++++++++++++++++------------ - 3 files changed, 60 insertions(+), 20 deletions(-) - -diff --git a/doc/bug-reports.texi b/doc/bug-reports.texi -index 250fc20..1290ef8 100644 ---- a/doc/bug-reports.texi -+++ b/doc/bug-reports.texi -@@ -77,7 +77,9 @@ this by running it with the options @option{--version} and - @item - A complete set of input images that will reproduce the bug. Strive - for a minimal set of @emph{small}@footnote{Images of a size less than --1500@classictimes{}1000 pixels qualify as small.} images. -+1500@c -+@classictimes{}@c -+1000 pixels qualify as small.} images. - - @item - The type of machine you are using, and the operating system name and -diff --git a/doc/enblend.texi b/doc/enblend.texi -index f825797..49e5120 100644 ---- a/doc/enblend.texi -+++ b/doc/enblend.texi -@@ -510,7 +510,9 @@ original image, obviously defines the image at single-pixel scale, the - first level works at two-pixel scale, and generally, the @math{n}-th - level contains image data at @power{2, n}-pixel scale. This is the - reason why an image of --@math{width}@classictimes{}@/@math{height}@dmn{pixels} cannot be -+@math{width}@c -+@classictimes{}@c -+@/@math{height}@dmn{pixels} cannot be - deconstructed into a pyramid of more than - @ifinfo - @display -@@ -1250,7 +1252,9 @@ Maximum finite value: @semilog{4.3, 9} - @cindex canvas size - @cindex size, canvas - Ensure that the minimum ``canvas'' size of the output image is at --least @var{WIDTH}@classictimes{}@/@var{HEIGHT}. Optionally specify -+least @var{WIDTH}@c -+@classictimes{}@c -+@/@var{HEIGHT}. Optionally specify - the @var{XOFFSET} and @var{YOFFSET}, too. - - @pindex nona @r{(Hugin)} -@@ -1572,7 +1576,9 @@ If omitted @var{FACTOR} defaults to - @value{srcCOLONCOLONdefaultDASHcoarsenessDASHfactor}, this means, - option@tie{}@option{--coarse-mask} shrinks the overlapping - @emph{areas} by a factor of --@math{@value{srcCOLONCOLONdefaultDASHcoarsenessDASHfactor}@classictimes{}@/@value{srcCOLONCOLONdefaultDASHcoarsenessDASHfactor}}. -+@math{@value{srcCOLONCOLONdefaultDASHcoarsenessDASHfactor}@c -+@classictimes{}@c -+@/@value{srcCOLONCOLONdefaultDASHcoarsenessDASHfactor}}. - With @var{FACTOR}@tie{}=@tie{}8 the total memory allocated during a - run of Enblend shrinks approximately by 80% and the maximum amount of - memory in use at a time is decreased to 60% (Enblend compiled with -@@ -2494,7 +2500,9 @@ option@tie{}@option{--visualize} to directly judge the effect. - When using this option in conjunction with - option@tie{}@code{--coarse-mask}=@/@var{FACTOR}, keep in mind that the - smoothing occurs @emph{after} the overlap regions have been shrunken. --Thus, blurring affects a @var{FACTOR}@classictimes{}@/@var{FACTOR} -+Thus, blurring affects a @var{FACTOR}@c -+@classictimes{}@c -+@/@var{FACTOR} - times larger area in the original images. - - Valid range: @var{RADIUS} @geq{} @value{srcCOLONCOLONminimumDASHsmoothDASHdifference}. -@@ -2606,7 +2614,9 @@ of the image and the final seam-line - @rimage{seam-line-visualization} - - @caption{Seam-line visualization of a simple overlap. The --853@classictimes{}238@dmn{pixel} image is shown at a magification of -+853@c -+@classictimes{}@c -+238@dmn{pixel} image is shown at a magification of - 100%.} - - @shortcaption{Seam-line visualization} -@@ -2618,7 +2628,9 @@ of the image and the final seam-line - @rimage{seam-line-visualization, 15cm} - - @caption{Seam-line visualization of a simple overlap. The --853@classictimes{}238@dmn{pixel} image has been rescaled to a width of -+853@c -+@classictimes{}@c -+238@dmn{pixel} image has been rescaled to a width of - approximately 15@dmn{cm}.} - - @shortcaption{Seam-line visualization} -@@ -2629,7 +2641,9 @@ approximately 15@dmn{cm}.} - @float Figure,Figure:seam-line-visualization - @rimage{seam-line-visualization, 15cm} - --@caption{Seam-line visualization of a simple overlap. The 853@classictimes{}238@dmn{pixel} image has been rescaled to a width of approximately 15@dmn{cm}.} -+@caption{Seam-line visualization of a simple overlap. The 853@c -+@classictimes{}@c -+238@dmn{pixel} image has been rescaled to a width of approximately 15@dmn{cm}.} - - @shortcaption{Seam-line visualization} - @end float -diff --git a/doc/enfuse.texi b/doc/enfuse.texi -index d04b9f5..483bc4f 100644 ---- a/doc/enfuse.texi -+++ b/doc/enfuse.texi -@@ -623,7 +623,9 @@ original image, obviously defines the image at single-pixel scale, the - first level works at two-pixel scale, and generally, the @math{n}-th - level contains image data at @power{2, n}-pixel scale. This is the - reason why an image of --@math{width}@classictimes{}@/@math{height}@dmn{pixels} cannot be -+@math{width}@c -+@classictimes{}@c -+@/@math{height}@dmn{pixels} cannot be - deconstructed into a pyramid of more than - @ifinfo - @display -@@ -1311,7 +1313,9 @@ Maximum finite value: @semilog{4.3, 9} - @cindex canvas size - @cindex size, canvas - Ensure that the minimum ``canvas'' size of the output image is at --least @var{WIDTH}@classictimes{}@/@var{HEIGHT}. Optionally specify -+least @var{WIDTH}@c -+@classictimes{}@c -+@/@var{HEIGHT}. Optionally specify - the @var{XOFFSET} and @var{YOFFSET}, too. - - @pindex nona @r{(Hugin)} -@@ -1501,8 +1505,12 @@ A positive @var{LCE-SCALE} turns on local contrast enhancement - @var{LCE-SCALE} is the radius of the Gaussian used in the enhancement - step, @var{LCE-FACTOR} is the weight factor (``strength''). - --@var{enhanced} = (1 + @var{LCE-FACTOR}) @classictimes{} @var{original} --@minus{} @var{LCE-FACTOR} @classictimes{} Gaussian@/Smooth(@var{original}, -+@var{enhanced} = (1 + @var{LCE-FACTOR}) @c -+@classictimes{}@c -+ @var{original} -+@minus{} @var{LCE-FACTOR} @c -+@classictimes{}@c -+ Gaussian@/Smooth(@var{original}, - @var{LCE-SCALE}). - - @var{LCE-SCALE} defaults to @value{srcCOLONCOLONdefaultDASHlceDASHscale} pixels and -@@ -1531,7 +1539,9 @@ left unchanged. This effectively suppresses weak edges. - @opindex --contrast-window-size - - Set the window @var{SIZE} for local contrast analysis. The window --will be a square of @var{SIZE}@classictimes{}@/@var{SIZE} pixels. If -+will be a square of @var{SIZE}@c -+@classictimes{}@c -+@/@var{SIZE} pixels. If - given an even @var{SIZE}, Enfuse will automatically use the next odd - number. - -@@ -1585,7 +1595,9 @@ output image. - @opindex --entropy-window-size - - Window @var{SIZE} for local entropy analysis. The window will be a --square of @var{SIZE}@classictimes{}@/@var{SIZE} pixels. -+square of @var{SIZE}@c -+@classictimes{}@c -+@/@var{SIZE} pixels. - - In the entropy calculation @var{SIZE} values of 3 to 7 yield an - acceptable compromise of the locality of the information and the -@@ -4656,10 +4668,14 @@ Experience has shown that neither the parameters @var{EDGESCALE} and - @var{CURVATURE} nor the mode of operation (@acronym{SDev}-only, - @acronym{LoG}-only, or a blend of both) scales to different image - sizes. In practice, this means that if you start with a set of --reduced size images, say 2808@classictimes{}1872 pixels, carefully -+reduced size images, say 2808@c -+@classictimes{}@c -+1872 pixels, carefully - optimize @var{EDGESCALE}, @var{CURVATURE} and so on, and find - @acronym{LoG}-only the best mode, and then switch to the original --resolution of 5616@classictimes{}3744 pixels, multiplying (or -+resolution of 5616@c -+@classictimes{}@c -+3744 pixels, multiplying (or - dividing) the parameters by four and sticking to @acronym{LoG}-only - might @emph{not} result in the best fused image. For best quality, - perform the parameter optimization and the search for the most -@@ -5080,9 +5096,13 @@ centers around the image effects. - Images should align well to be suitable for fusion. However, there is - no hard mathematical rule what ``well'' means. The alignment - requirements for 16@dmn{MPixel} images to yield a sharp --4"@classictimes{}6" print at 300@dmn{dpi} (``dpi'' means dots per -+4"@c -+@classictimes{}@c -+6" print at 300@dmn{dpi} (``dpi'' means dots per - inch) or even for web presentation are relatively low, whereas the --alignment of 8@dmn{MPixel} images for a 12"@classictimes{}18" print -+alignment of 8@dmn{MPixel} images for a 12"@c -+@classictimes{}@c -+18" print - ought to be tight. - - @pindex hugin -@@ -5548,7 +5568,9 @@ next section. - - Let us use an example to illustrate the problem of relating the - sharpness with the local contrast variations. Say we use a --5@classictimes{}5 contrast window. Moreover, let @code{sharp_edge} -+5@c -+@classictimes{}@c -+5 contrast window. Moreover, let @code{sharp_edge} - and @code{smooth_edge} be two specific configurations: - - @example -@@ -5727,7 +5749,9 @@ Use @acronym{LoG} to detect edges on a scale of 0.3@dmn{pixels}. - Apply the default grayscale projector: @code{average} and throw away - all edges with a curvature of less than 0.5% and replace the - @acronym{LoG} data between 0% and 0.5% with @acronym{SDev} data. Use --a window of 7@classictimes{}7@dmn{pixel} window to compute the -+a window of 7@c -+@classictimes{}@c -+7@dmn{pixel} window to compute the - @acronym{SDev}. - @end table - --- -1.7.10.4 - diff -Nru enblend-enfuse-4.1.3+dfsg/debian/patches/0005-Texinfo-5.1-workaround-macro-on-a-separate-line.patch enblend-enfuse-4.1.4+dfsg/debian/patches/0005-Texinfo-5.1-workaround-macro-on-a-separate-line.patch --- enblend-enfuse-4.1.3+dfsg/debian/patches/0005-Texinfo-5.1-workaround-macro-on-a-separate-line.patch 2013-12-29 12:49:14.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/debian/patches/0005-Texinfo-5.1-workaround-macro-on-a-separate-line.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,133 +0,0 @@ -From a4acc187401ed14af07f86978c549cf684afd3e2 Mon Sep 17 00:00:00 2001 -From: Andreas Metzler -Date: Sun, 27 Oct 2013 08:15:29 +0100 -Subject: [PATCH 5/9] Texinfo 5.1 workaround - macro on a separate line - -Texinfo breaks if macros using a conditional are placed in the middle -of a line. (This is documented in Texinfo 5.1 reference but used to -work.) -Change texinfo source, although it adds unwanted whitespace in output. ---- - doc/enblend.texi | 27 ++++++++++++++++++--------- - doc/enfuse.texi | 27 ++++++++++++++++++--------- - 2 files changed, 36 insertions(+), 18 deletions(-) - -diff --git a/doc/enblend.texi b/doc/enblend.texi -index 49e5120..e1baee0 100644 ---- a/doc/enblend.texi -+++ b/doc/enblend.texi -@@ -1196,11 +1196,14 @@ For floating-point format, use - - @itemize - @item --Minimum normalized value: @semilog{1.2, -38} -+Minimum normalized value: -+@semilog{1.2, -38} - @item --Epsilon: @semilog{1.2, -7} -+Epsilon: -+@semilog{1.2, -7} - @item --Maximum finite value: @semilog{3.4, 38} -+Maximum finite value: -+@semilog{3.4, 38} - @end itemize - - @c IEEE double: 64 bits, n = 53, k = 64 - n - 1 = 10 -@@ -1212,11 +1215,14 @@ Maximum finite value: @semilog{3.4, 38} - - @itemize - @item --Minimum normalized value: @semilog{2.2, -308} -+Minimum normalized value: -+@semilog{2.2, -308} - @item --Epsilon: @semilog{2.2, -16} -+Epsilon: -+@semilog{2.2, -16} - @item --Maximum finite value: @semilog{1.8, 308} -+Maximum finite value: -+@semilog{1.8, 308} - @end itemize - @end table - -@@ -1238,11 +1244,14 @@ floating-point numbers. - - @itemize - @item --Minimum normalized value: @semilog{9.3, -10} -+Minimum normalized value: -+@semilog{9.3, -10} - @item --Epsilon: @semilog{2.0, -3} -+Epsilon: -+@semilog{2.0, -3} - @item --Maximum finite value: @semilog{4.3, 9} -+Maximum finite value: -+@semilog{4.3, 9} - @end itemize - - @item -f @var{WIDTH}x@var{HEIGHT} -diff --git a/doc/enfuse.texi b/doc/enfuse.texi -index 483bc4f..27e8b33 100644 ---- a/doc/enfuse.texi -+++ b/doc/enfuse.texi -@@ -1257,11 +1257,14 @@ For floating-point format, use - - @itemize - @item --Minimum normalized value: @semilog{1.2, -38} -+Minimum normalized value: -+@semilog{1.2, -38} - @item --Epsilon: @semilog{1.2, -7} -+Epsilon: -+@semilog{1.2, -7} - @item --Maximum finite value: @semilog{3.4, 38} -+Maximum finite value: -+@semilog{3.4, 38} - @end itemize - - @c IEEE double: 64 bits, n = 53, k = 64 - n - 1 = 10 -@@ -1273,11 +1276,14 @@ Maximum finite value: @semilog{3.4, 38} - - @itemize - @item --Minimum normalized value: @semilog{2.2, -308} -+Minimum normalized value: -+@semilog{2.2, -308} - @item --Epsilon: @semilog{2.2, -16} -+Epsilon: -+@semilog{2.2, -16} - @item --Maximum finite value: @semilog{1.8, 308} -+Maximum finite value: -+@semilog{1.8, 308} - @end itemize - @end table - -@@ -1299,11 +1305,14 @@ floating-point numbers. - - @itemize - @item --Minimum normalized value: @semilog{9.3, -10} -+Minimum normalized value: -+@semilog{9.3, -10} - @item --Epsilon: @semilog{2.0, -3} -+Epsilon: -+@semilog{2.0, -3} - @item --Maximum finite value: @semilog{4.3, 9} -+Maximum finite value: -+@semilog{4.3, 9} - @end itemize - - @item -f @var{WIDTH}x@var{HEIGHT} --- -1.7.10.4 - diff -Nru enblend-enfuse-4.1.3+dfsg/debian/patches/0006-Texinfo-5.1-workaround-macro-on-a-separate-line.patch enblend-enfuse-4.1.4+dfsg/debian/patches/0006-Texinfo-5.1-workaround-macro-on-a-separate-line.patch --- enblend-enfuse-4.1.3+dfsg/debian/patches/0006-Texinfo-5.1-workaround-macro-on-a-separate-line.patch 2013-12-29 12:49:14.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/debian/patches/0006-Texinfo-5.1-workaround-macro-on-a-separate-line.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,64 +0,0 @@ -From 6686fad3501e6aef8245e434155e271ed225a2ab Mon Sep 17 00:00:00 2001 -From: Andreas Metzler -Date: Sun, 27 Oct 2013 08:19:45 +0100 -Subject: [PATCH 6/9] Texinfo 5.1 workaround - macro on a separate line - -Texinfo breaks if macros using a conditional are placed in the middle -of a line. (This is documented in Texinfo 5.1 reference but used to -work.) -Change texinfo source, although it adds unwanted whitespace in output. ---- - doc/enfuse.texi | 16 ++++++++++++---- - 1 file changed, 12 insertions(+), 4 deletions(-) - -diff --git a/doc/enfuse.texi b/doc/enfuse.texi -index 27e8b33..3d230b5 100644 ---- a/doc/enfuse.texi -+++ b/doc/enfuse.texi -@@ -3583,7 +3583,9 @@ $$ - - @noindent - It associates a probability@tie{}@math{p} with each of the @math{n} --different possible outcomes@tie{}@inlineomega{} of the random -+different possible outcomes@tie{}@c -+@inlineomega{} -+ of the random - variable@tie{}@math{X}. - @cindex expectation value - Based on @math{w}, we define the @dfn{expectation value} or ``First -@@ -4210,7 +4212,9 @@ $$ - @end docbook - - @noindent --The parameter@tie{}@inlinesigma{}, the argument of -+The parameter@tie{}@c -+@inlinesigma{} -+, the argument of - option@tie{}@option{--contrast-edge-scale}, is the length scale on which edges - are detected by @math{g(x, y)}. We apply the Laplacian operator in - Cartesian coordinates -@@ -4422,7 +4426,9 @@ $$ - - @end docbook - --where we have used the dimensionless distance@tie{}@inlinexi{} from -+where we have used the dimensionless distance@tie{}@c -+@inlinexi{} -+ from - the origin - @ifinfo - @display -@@ -4577,7 +4583,9 @@ $R = \sqrt{x^2 + y^2}$. - @float Figure,Figure:laplacian-of-gaussian - @vimage{laplacian-of-gaussian} - --@caption{Laplacian-of-Gaussian function for @inlinesigma{} = 0.5.} -+@caption{Laplacian-of-Gaussian function for @c -+@inlinesigma{} -+ = 0.5.} - - @shortcaption{Laplacian-of-Gaussian} - @end float --- -1.7.10.4 - diff -Nru enblend-enfuse-4.1.3+dfsg/debian/patches/0007-Leave-TEXINPUTS-alone.patch enblend-enfuse-4.1.4+dfsg/debian/patches/0007-Leave-TEXINPUTS-alone.patch --- enblend-enfuse-4.1.3+dfsg/debian/patches/0007-Leave-TEXINPUTS-alone.patch 2013-12-29 12:49:14.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/debian/patches/0007-Leave-TEXINPUTS-alone.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,39 +0,0 @@ -From e3f81b899eb1a1b8918e8794774747d4355839bc Mon Sep 17 00:00:00 2001 -From: Andreas Metzler -Date: Sun, 27 Oct 2013 08:21:34 +0100 -Subject: [PATCH 7/9] Leave TEXINPUTS alone - -Do not export TEXINPUTS in Makefile(.am). Automake seems to have this in -hand anyway and it breaks building the pdf-documentation with texinfo 5.1. - -Watch texinfo failing on -TEXINPUTS="." texi2dvi --pdf --batch mini.texi -and succeding without TEXINPUTS or with TEXINPUTS=".:". Where mini.texi -looks like this: -|------------- -|\input thumbpdf.sty -|\input texinfo -|Hello World -|@bye -|------------- -Bug: https://bugs.launchpad.net/bugs/1181678 ---- - doc/Makefile.in | 2 -- - 1 file changed, 2 deletions(-) - -diff --git a/doc/Makefile.in b/doc/Makefile.in -index 75567b9..f46a105 100644 ---- a/doc/Makefile.in -+++ b/doc/Makefile.in -@@ -895,8 +895,6 @@ uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \ - uninstall-am uninstall-dvi-am uninstall-html-am \ - uninstall-info-am uninstall-pdf-am uninstall-ps-am - --export TEXINPUTS=$(top_builddir):$(srcdir) -- - # Phony Targets - - .PHONY: install-html --- -1.7.10.4 - diff -Nru enblend-enfuse-4.1.3+dfsg/debian/patches/0008-Texinfo-5.1-workaround-macro-on-a-separate-line.patch enblend-enfuse-4.1.4+dfsg/debian/patches/0008-Texinfo-5.1-workaround-macro-on-a-separate-line.patch --- enblend-enfuse-4.1.3+dfsg/debian/patches/0008-Texinfo-5.1-workaround-macro-on-a-separate-line.patch 2013-12-29 12:49:14.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/debian/patches/0008-Texinfo-5.1-workaround-macro-on-a-separate-line.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,47 +0,0 @@ -From 7da7340e373b18f1a6a412a8c0427e1a11010bdd Mon Sep 17 00:00:00 2001 -From: Andreas Metzler -Date: Sun, 27 Oct 2013 08:39:48 +0100 -Subject: [PATCH 8/9] Texinfo 5.1 workaround - macro on a separate line - -Texinfo breaks if macros using a conditional are placed in the middle -of a line. (This is documented in Texinfo 5.1 reference but used to -work.) -Change texinfo source, although it adds unwanted whitespace in output. ---- - doc/enblend.texi | 4 +++- - doc/enfuse.texi | 4 +++- - 2 files changed, 6 insertions(+), 2 deletions(-) - -diff --git a/doc/enblend.texi b/doc/enblend.texi -index e1baee0..abf088e 100644 ---- a/doc/enblend.texi -+++ b/doc/enblend.texi -@@ -508,7 +508,9 @@ As a guideline, remember that each new level works on a linear scale - twice as large as the previous one. So, the zeroth layer, the - original image, obviously defines the image at single-pixel scale, the - first level works at two-pixel scale, and generally, the @math{n}-th --level contains image data at @power{2, n}-pixel scale. This is the -+level contains image data at -+@power{2, n} -+-pixel scale. This is the - reason why an image of - @math{width}@c - @classictimes{}@c -diff --git a/doc/enfuse.texi b/doc/enfuse.texi -index 3d230b5..63aa1ca 100644 ---- a/doc/enfuse.texi -+++ b/doc/enfuse.texi -@@ -621,7 +621,9 @@ As a guideline, remember that each new level works on a linear scale - twice as large as the previous one. So, the zeroth layer, the - original image, obviously defines the image at single-pixel scale, the - first level works at two-pixel scale, and generally, the @math{n}-th --level contains image data at @power{2, n}-pixel scale. This is the -+level contains image data at -+@power{2, n} -+-pixel scale. This is the - reason why an image of - @math{width}@c - @classictimes{}@c --- -1.7.10.4 - diff -Nru enblend-enfuse-4.1.3+dfsg/debian/patches/0009-Texinfo-5.1-workaround-equationW.patch enblend-enfuse-4.1.4+dfsg/debian/patches/0009-Texinfo-5.1-workaround-equationW.patch --- enblend-enfuse-4.1.3+dfsg/debian/patches/0009-Texinfo-5.1-workaround-equationW.patch 2013-12-29 12:49:14.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/debian/patches/0009-Texinfo-5.1-workaround-equationW.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,84 +0,0 @@ -From 63484fd3e22307e8416676393a7fec83db202db3 Mon Sep 17 00:00:00 2001 -From: Andreas Metzler -Date: Sun, 27 Oct 2013 08:45:23 +0100 -Subject: [PATCH 9/9] Texinfo 5.1 workaround - @equationW - -Texinfo breaks if macros using a conditional are placed in the middle -of a line. (This is documented in Texinfo 5.1 reference but used to -work.) -Change texinfo source, although it adds unwanted whitespace in output. ---- - doc/enfuse.texi | 22 ++++++++++++++++------ - 1 file changed, 16 insertions(+), 6 deletions(-) - -diff --git a/doc/enfuse.texi b/doc/enfuse.texi -index 63aa1ca..8ecf313 100644 ---- a/doc/enfuse.texi -+++ b/doc/enfuse.texi -@@ -2477,7 +2477,8 @@ to the final @math{Q(x, y)}: - @math{w(P(1, x, y)) * P(1, x, y) + - ... + - w(P(n, x, y)) * P(n, x, y) ----> Q(x, y),}@w{ }@equationW{} -+--> Q(x, y),}@w{ }@c -+@equationW{} - @end display - @end ifinfo - @html -@@ -2545,7 +2546,9 @@ w(P(n, x, y)) * P(n, x, y) - - , - -- @equationW{} -+ @c -+@equationW{} -+ - - - @end html -@@ -2553,7 +2556,9 @@ w(P(n, x, y)) * P(n, x, y) - $$ - w(P(1, x, y)) P(1, x, y) + \ldots + w(P(n, x, y)) P(n, x, y) - \rightarrow -- Q(x, y),\hskip4em\hbox{@equationW{}} -+ Q(x, y),\hskip4em\hbox{@c -+@equationW{} -+} - $$ - @end tex - @docbook -@@ -2971,7 +2976,9 @@ contributes as much as its weight demands. Of course the weights can - be extreme, favoring only a few pixels or even only one pixel in the - input stack. Extremes are not typical, however. - --Equal weights are another extreme that turns @equationW{} into an -+Equal weights are another extreme that turns -+@equationW{} -+into an - arithmetic average. This is why we sometimes speak of the ``averaging - property'' of this weighting algorithm, like smoothing out noise. - -@@ -2992,7 +2999,8 @@ Trouper'') weighting mode, where the pixel with the highest weight - wins, this is, gets weight@tie{}one, and all other pixels get the - weight of zero - (@uref{http://@/en.wikipedia.org/@/wiki/@/The_@/Winner_@/Takes_@/It_@/All,,``The --Winner Takes It All.''}). With @option{--hard-mask} Equation@tie{}@equationW{} -+Winner Takes It All.''}). With @option{--hard-mask} Equation@tie{}@c -+@equationW{} - becomes - @ifinfo - @display -@@ -3137,7 +3145,9 @@ where - - @noindent - Note that this ``averaging'' scheme lacks the nice noise-reduction --property of the weighted average@tie{}@equationW{}, because only a -+property of the weighted average@tie{}@c -+@equationW{} -+, because only a - single input pixel contributes to the output. - - --- -1.7.10.4 - diff -Nru enblend-enfuse-4.1.3+dfsg/debian/patches/series enblend-enfuse-4.1.4+dfsg/debian/patches/series --- enblend-enfuse-4.1.3+dfsg/debian/patches/series 2013-12-29 12:49:14.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/debian/patches/series 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -0001-Change-all-texinfo-variable-names-to-alpha-nums.patch -0002-expand-homepage-macro.patch -0003-Texinfo-5.1-workaround-disable-some-macros.patch -0004-Texinfo-5.1-workaround-macro-on-a-separate-line.patch -0005-Texinfo-5.1-workaround-macro-on-a-separate-line.patch -0006-Texinfo-5.1-workaround-macro-on-a-separate-line.patch -0007-Leave-TEXINPUTS-alone.patch -0008-Texinfo-5.1-workaround-macro-on-a-separate-line.patch -0009-Texinfo-5.1-workaround-equationW.patch diff -Nru enblend-enfuse-4.1.3+dfsg/debian/patches-repack/00-win32helpers.patch enblend-enfuse-4.1.4+dfsg/debian/patches-repack/00-win32helpers.patch --- enblend-enfuse-4.1.3+dfsg/debian/patches-repack/00-win32helpers.patch 2013-12-29 12:49:14.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/debian/patches-repack/00-win32helpers.patch 2015-10-04 14:33:15.000000000 +0000 @@ -1,7 +1,7 @@ -diff -NurBbp a/configure.in enblend-enfuse-4.1/configure.in ---- a/configure.in 2012-12-08 09:23:59.000000000 +0100 -+++ enblend-enfuse-4.1/configure.in 2013-01-13 13:56:18.802614326 +0100 -@@ -556,7 +556,6 @@ AC_CONFIG_FILES([Makefile +diff -NurBbp a/configure.ac enblend-enfuse-4.1.4/configure.ac +--- a/configure.ac 2015-08-07 16:44:45.000000000 +0200 ++++ enblend-enfuse-4.1.4/configure.ac 2015-10-03 13:15:23.467319893 +0200 +@@ -555,7 +555,6 @@ AC_CONFIG_FILES([Makefile include/vigra_ext/Makefile src/Makefile src/layer_selection/Makefile @@ -9,9 +9,9 @@ doc/Makefile]) AC_OUTPUT -diff -NurBbp a/src/Makefile.am enblend-enfuse-4.1/src/Makefile.am ---- a/src/Makefile.am 2012-12-08 09:23:59.000000000 +0100 -+++ enblend-enfuse-4.1/src/Makefile.am 2013-01-13 13:57:44.218612113 +0100 +diff -NurBbp a/src/Makefile.am enblend-enfuse-4.1.4/src/Makefile.am +--- a/src/Makefile.am 2013-10-07 09:55:37.000000000 +0200 ++++ enblend-enfuse-4.1.4/src/Makefile.am 2015-10-03 13:15:23.467319893 +0200 @@ -3,7 +3,7 @@ AM_CFLAGS = $(EXTRACFLAGS) AM_CXXFLAGS = $(EXTRACXXFLAGS) AM_LDFLAGS = $(EXTRALDFLAGS) diff -Nru enblend-enfuse-4.1.3+dfsg/depcomp enblend-enfuse-4.1.4+dfsg/depcomp --- enblend-enfuse-4.1.3+dfsg/depcomp 2014-03-22 12:47:04.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/depcomp 2015-10-03 11:18:55.000000000 +0000 @@ -3,7 +3,7 @@ scriptversion=2013-05-30.07; # UTC -# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Copyright (C) 1999-2014 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru enblend-enfuse-4.1.3+dfsg/doc/auxmac.tex enblend-enfuse-4.1.4+dfsg/doc/auxmac.tex --- enblend-enfuse-4.1.3+dfsg/doc/auxmac.tex 2013-01-01 09:45:47.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/doc/auxmac.tex 2015-08-07 14:43:24.000000000 +0000 @@ -1,13 +1,6 @@ -\input thumbpdf.sty - - % Auxilliary Macros. % % Include this file before texinfo.tex! \def\mathit#1{\hbox{\it #1}} \def\mathrm#1{\ifmmode{\rm #1}\else #1\fi} - -% These definitions are required for older versions of texinfo.tex. -\def\geq{\ifmmode \ge\else $\ge$\fi} -\def\leq{\ifmmode \le\else $\le$\fi} diff -Nru enblend-enfuse-4.1.3+dfsg/doc/auxmac.texi enblend-enfuse-4.1.4+dfsg/doc/auxmac.texi --- enblend-enfuse-4.1.3+dfsg/doc/auxmac.texi 2013-01-01 09:45:47.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/doc/auxmac.texi 2015-08-07 14:43:24.000000000 +0000 @@ -2,16 +2,6 @@ @c Macro Definitions @c -@c redefined commands - -@c Get the spacing of dimensions right. -@ifnottex -@macro dmn{unit} -@tie{}\unit\ -@end macro -@end ifnottex - - @c extended commands @c Add a title to a DocBook element. @@ -80,73 +70,6 @@ @c Operators -@c Generate a nice representation of base^exponent. -@macro power{base, exponent} -@ifinfo -\base\^\exponent\ -@end ifinfo -@html -\base\\exponent\ -@end html -@tex -$\base\^{\exponent\}$% -@end tex -@docbook -\base\\exponent\ -@end docbook -@end macro - - -@macro classictimes -@ifinfo -x@c gobble following newline -- The Tricks of a Texinfo Wizard. -@end ifinfo -@html -× -@end html -@tex -\\ifmmode\\times\\else$\\times$\\fi% gobble following newline -- The Tricks of a TeX Wizard. -@end tex -@docbook -× -@end docbook -@end macro - - -@c Required for older versions of makeinfo. The definition of @geq -@c for TeX lives in auxmac.tex. -@ifnottex -@macro geq -@ifinfo ->=@c -@end ifinfo -@html -≥ -@end html -@docbook -≥ -@end docbook -@end macro -@end ifnottex - - -@c Required for older versions of makeinfo. The definition of @leq -@c for TeX lives in auxmac.tex. -@ifnottex -@macro leq -@ifinfo -<=@c -@end ifinfo -@html -≤ -@end html -@docbook -≤ -@end docbook -@end macro -@end ifnottex - - @macro plusminus @ifinfo +/-@c @@ -163,62 +86,6 @@ @end macro -@c Special Characters - -@macro inlineomega -@ifinfo -@math{omega}@c -@end ifinfo -@html - - ω - -@end html -@tex -$\\omega$% -@end tex -@docbook -ω -@end docbook -@end macro - - -@macro inlinesigma -@ifinfo -@math{sigma}@c -@end ifinfo -@html - - σ - -@end html -@tex -$\\sigma$% -@end tex -@docbook -σ -@end docbook -@end macro - - -@macro inlinexi -@ifinfo -@math{xi}@c -@end ifinfo -@html - - ξ - -@end html -@tex -$\\xi$% -@end tex -@docbook -ξ -@end docbook -@end macro - - @c Text Fragments @macro mainpurpose @@ -236,26 +103,3 @@ @noindent @strong{Summary of influential options} @end macro - - -@macro semilog{significant, exponent} -@ifinfo -\significant\*10^\exponent\@c -@end ifinfo -@html - - \significant\ - × - - 10 - \exponent\ - - -@end html -@tex -\\ifmmode\significant\ \\times 10^{\exponent\}\\else$\significant\ \\times 10^{\exponent\}$\\fi% -@end tex -@docbook -\significant\×10\exponent\ -@end docbook -@end macro diff -Nru enblend-enfuse-4.1.3+dfsg/doc/bug-reports.texi enblend-enfuse-4.1.4+dfsg/doc/bug-reports.texi --- enblend-enfuse-4.1.3+dfsg/doc/bug-reports.texi 2013-10-07 08:26:08.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/doc/bug-reports.texi 2015-08-07 14:43:24.000000000 +0000 @@ -77,7 +77,7 @@ @item A complete set of input images that will reproduce the bug. Strive for a minimal set of @emph{small}@footnote{Images of a size less than -1500@classictimes{}1000 pixels qualify as small.} images. +1500x1000 pixels qualify as small.} images. @item The type of machine you are using, and the operating system name and diff -Nru enblend-enfuse-4.1.3+dfsg/doc/CMakeLists.txt enblend-enfuse-4.1.4+dfsg/doc/CMakeLists.txt --- enblend-enfuse-4.1.3+dfsg/doc/CMakeLists.txt 2013-01-01 09:49:53.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/doc/CMakeLists.txt 2015-08-07 12:47:33.000000000 +0000 @@ -1,7 +1,7 @@ # This file is part of enblend. # Licence details can be found in the file COPYING. # -# Copyright (c) 2009-2012, Kornel Benko +# Copyright (c) 2009-2015, Kornel Benko # include(GetPrerequisites) # get function gp_append_unique() diff -Nru enblend-enfuse-4.1.3+dfsg/doc/enblend.info enblend-enfuse-4.1.4+dfsg/doc/enblend.info --- enblend-enfuse-4.1.3+dfsg/doc/enblend.info 2014-03-19 07:29:20.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/doc/enblend.info 2015-09-28 06:47:00.000000000 +0000 @@ -1,16 +1,11 @@ -This is ../../doc/enblend.info, produced by makeinfo version 4.13 from -../../doc/enblend.texi. +This is enblend.info, produced by makeinfo version 5.2 from +enblend.texi. -INFO-DIR-SECTION Individual utilities -START-INFO-DIR-ENTRY -* enblend: (enblend). Blend images using a multiresolution spline. -END-INFO-DIR-ENTRY - - This manual is for Enblend (version 4.1.3, 10 March 2014), a tool -for compositing images in such a way that the seam between the images -is invisible, or at least very difficult to see. +This manual is for Enblend (version 4.1.4, 7 August 2015), a tool for +compositing images in such a way that the seam between the images is +invisible, or at least very difficult to see. - Copyright (C) 2004-2014 ANDREW MIHAL. + Copyright (C) 2004-2015 ANDREW MIHAL. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, @@ -18,6 +13,10 @@ Foundation; with no Invariant Sections, no Front-Cover Texts and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". +INFO-DIR-SECTION Individual utilities +START-INFO-DIR-ENTRY +* enblend: (enblend). Blend images using a multiresolution spline. +END-INFO-DIR-ENTRY  File: enblend.info, Node: Top, Next: Overview, Up: (dir) @@ -25,7 +24,7 @@ Enblend ******* -This manual is for Enblend (version 4.1.3, 10 March 2014), a tool for +This manual is for Enblend (version 4.1.4, 7 August 2015), a tool for compositing images in such a way that the seam between the images is invisible, or at least very difficult to see. @@ -42,7 +41,6 @@ * Bug Reports:: How to write bug reports * Authors:: Major contributors * FDL:: GNU Free Documentation License - * Program Index:: Names of programs referenced * Syntactic-Comment Index:: Keys of syntactic comments * Option Index:: Index of all options @@ -55,30 +53,30 @@ ********** Enblend overlays multiple images using the BURT-ADELSON multiresolution -spline algorithm.(1) 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 +spline algorithm.(1) 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. +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. +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. Use a tool such as `hugin' or + Enblend does _not_ align images. Use a tool such as 'hugin' or PanoTools to do this. The TIFF files produced by these programs are exactly what Enblend is designed to work with. Sometimes these GUIs allow you to select feathering for the edges of your images. This -treatment is detrimental to Enblend. Turn off feathering by -deselecting it or setting the feather width to zero. +treatment is detrimental to Enblend. Turn off feathering by deselecting +it or setting the feather width to zero. Enblend blends the images in the order they are specified on the command line. You should order your images according to the way that @@ -89,9 +87,9 @@ Enblend reads all layers of multi-layer images, like, for example, multi-directory TIFF images(2). The input images are processed in the -order they appear on the command line. Multi-layer images are -processed from the first layer to the last before Enblend considers the -next image on the command line. +order they appear on the command line. Multi-layer images are processed +from the first layer to the last before Enblend considers the next image +on the command line. Find out more about Enblend on its SourceForge (http://sourceforge.net/) web page (http://enblend.sourceforge.net/). @@ -100,9 +98,9 @@ (1) PETER J. BURT and EDWARD H. ADELSON, "A Multiresolution Spline With Application to Image Mosaics", ACM Transactions on Graphics, Vol. -2, No. 4, October 1983, pages 217-236. +2, No. 4, October 1983, pages 217-236. - (2) Use utilities like, e.g., `tiffcopy' and `tiffsplit' of LibTIFF + (2) Use utilities like, e.g., 'tiffcopy' and 'tiffsplit' of LibTIFF to manipulate multi-directory TIFF images. *Note Helpful Programs::.  @@ -111,8 +109,8 @@ 2 Workflow ********** -Enblend is a part of a chain of tools to assemble images. It combines -a series of pictures taken at the same location but in different +Enblend is a part of a chain of tools to assemble images. It combines a +series of pictures taken at the same location but in different directions. * Menu: @@ -126,9 +124,10 @@ 2.1 Standard Workflow ===================== -*note Figure:photographic-workflow:: shows where Enblend and Enfuse sit -in the tool chain of the standard workflow. +*note Figure 2.1: Figure:photographic-workflow. shows where Enblend and +Enfuse sit in the tool chain of the standard workflow. +[photographic-workflow] Figure 2.1: Photographic workflow with Enblend and Enfuse. Take Images @@ -147,8 +146,8 @@ * Pictures of the same subject exposed with different shutter speeds. - Exposure series - * Images of the same subject focussed at differing distances. - - Focus stack + * Images of the same subject focussed at differing distances. - + Focus stack _Remaining Problem:_ The "overlayed" images may not fit together, that is the overlay regions may not match exactly. @@ -156,8 +155,8 @@ Convert Images Convert the raw data (http://www.luminous-landscape.com/tutorials/understanding-series/u-raw-files.shtml) - exploiting the full dynamic range of the camera and capitalize on - a high-quality conversion. + exploiting the full dynamic range of the camera and capitalize on a + high-quality conversion. Align Images Align the images so as to make them match as well as possible. @@ -174,14 +173,14 @@ between pairs of overlaying images are corrected ("photometric alignment"). - _Benefit:_ The overlay areas of images match as closely as - possible given the quality if the input images and the lens model - used in the transformation. + _Benefit:_ The overlay areas of images match as closely as possible + given the quality if the input images and the lens model used in + the transformation. _Remaining Problem:_ The images may still not align perfectly, for example, because of parallax - (http://en.wikipedia.org/wiki/Parallax) errors, or blur produced - by camera shake. + (http://en.wikipedia.org/wiki/Parallax) errors, or blur produced by + camera shake. Combine Images Enblend and Enfuse combine the aligned images into one. @@ -217,36 +216,36 @@ output image. Sometimes more control over the masks is needed or wanted. To this -end, both applications provide the option pair `--load-masks' and -`--save-masks'. *Note Invocation::, for detailed explanations of both -options. With the help of these options the processing can be broken -up into two steps: +end, both applications provide the option pair '--load-masks' and +'--save-masks'. *Note Invocation::, for detailed explanations of both +options. With the help of these options the processing can be broken up +into two steps: -Save masks with `--save-masks'. +Save masks with '--save-masks'. Generate masks and save them into image files. - Avoid option `--output' unless the blended or fused image at this + Avoid option '--output' unless the blended or fused image at this point is necessary. - -Load masks with `--load-masks'. +Load masks with '--load-masks'. Load masks from files and then blend or fuse the final image with the help of the loaded masks. In between these two steps the user may apply whatever transformation to the mask files, as long as their geometries and offsets remain the same. Thus the "Combine Images" box of *note Figure 2.1: -Figure:photographic-workflow. becomes three activities as is depicted -in *note Figure:external-mask-workflow::. +Figure:photographic-workflow. becomes three activities as is depicted in +*note Figure 2.2: Figure:external-mask-workflow. +[external-mask-workflow] Figure 2.2: Workflow for externally modified masks. To further optimize this kind of workflow, both Enblend and Enfuse -stop after mask generation if option `--save-masks' is given, but _no -output file_ is specified with the `--output' option. This way the -time for pyramid generation, blending, fusing, and writing the final -image to disk is saved, as well as no output image gets generated. +stop after mask generation if option '--save-masks' is given, but _no +output file_ is specified with the '--output' option. This way the time +for pyramid generation, blending, fusing, and writing the final image to +disk is saved, as well as no output image gets generated. - Note that options `--save-masks' and `--load-masks' cannot be used + Note that options '--save-masks' and '--load-masks' cannot be used simultaneously.  @@ -255,7 +254,7 @@ 3 Invocation ************ -`enblend' [OPTIONS] [`--output='IMAGE] INPUT... +'enblend' [OPTIONS] ['--output='IMAGE] INPUT... Assemble the sequence of images INPUT... into a single IMAGE. @@ -285,7 +284,6 @@ * The images agree on their number of channels: - one plus alpha or - - three plus alpha. This is, either all images are black-and-white (one channel and @@ -294,23 +292,20 @@ * The images agree on their number of bits-per-channel, this is, their "depth": - - `UINT8', - - - `UINT16', - - - `FLOAT', - + - 'UINT8', + - 'UINT16', + - 'FLOAT', - etc. - See option `--depth' below for an explanation of different - (output) depths. + See option '--depth' below for an explanation of different (output) + depths. * Enblend understands the images' filename extensions as well as their file formats. You can check the supported extensions and formats by calling - Enblend with the option pair `--version --verbose' and scan the - output for `Supported image formats' or `Supported file + Enblend with the option pair '--version --verbose' and scan the + output for 'Supported image formats' or 'Supported file extensions'. Moreover, there are some "good practices", which are not enforced by @@ -329,11 +324,11 @@ ================== A response file contains names of images or other response filenames. -Introduce response file names with an at-character (`@'). +Introduce response file names with an at-character ('@'). Enblend and Enfuse process the list INPUT strictly from left to right, expanding response files in depth-first order. (Multi-layer -files are processed from first layer to the last.) The following +files are processed from first layer to the last.) The following examples only show Enblend, but Enfuse works exactly the same. Solely image filenames. @@ -341,54 +336,55 @@ enblend image-1.tif image-2.tif image-3.tif The ultimate order in which the images are processed is: - `image-1.tif', `image-2.tif', `image-3.tif'. + 'image-1.tif', 'image-2.tif', 'image-3.tif'. Single response file. Example: enblend @list - where file `list' contains + where file 'list' contains img1.exr img2.exr img3.exr img4.exr - Ultimate order: `img1.exr', `img2.exr', `img3.exr', `img4.exr'. + Ultimate order: 'img1.exr', 'img2.exr', 'img3.exr', 'img4.exr'. Mixed literal names and response files. Example: enblend @master.list image-09.png image-10.png - where file `master.list' comprises of + where file 'master.list' comprises of image-01.png @first.list image-04.png @second.list image-08.png - `first.list' is + 'first.list' is image-02.png image-03.png - and `second.list' contains + and 'second.list' contains image-05.png image-06.png image-07.png - Ultimate order: `image-01.png', `image-02.png', `image-03.png', - `image-04.png', `image-05.png', `image-06.png', `image-07.png', - `image-08.png', `image-09.png', `image-10.png', + Ultimate order: 'image-01.png', 'image-02.png', 'image-03.png', + 'image-04.png', 'image-05.png', 'image-06.png', 'image-07.png', + 'image-08.png', 'image-09.png', 'image-10.png', 3.2.1 Response File Format -------------------------- Response files contain one filename per line. Blank lines or lines -beginning with a sharp sign (`#') are ignored; the latter can serve as -comments. Filenames that begin with an at-character (`@') denote other -response files. *note Table:response-file-format:: states a formal -grammar of response files in EBNF (http://en.wikipedia.org/wiki/Ebnf). +beginning with a sharp sign ('#') are ignored; the latter can serve as +comments. Filenames that begin with an at-character ('@') denote other +response files. *note Table 3.1: Table:response-file-format. states a +formal grammar of response files in EBNF +(http://en.wikipedia.org/wiki/Ebnf). RESPONSE-FILE ::= LINE* -LINE ::= (COMMENT | FILE-SPEC) [`\r'] `\n' -COMMENT ::= SPACE* `#' TEXT -FILE-SPEC ::= SPACE* `@' FILENAME SPACE* -SPACE ::= ` ' | `\t' +LINE ::= (COMMENT | FILE-SPEC) ['\r'] '\n' +COMMENT ::= SPACE* '#' TEXT +FILE-SPEC ::= SPACE* '@' FILENAME SPACE* +SPACE ::= ' ' | '\t' where TEXT is an arbitrary string and FILENAME is any filename. @@ -416,16 +412,16 @@ img+0.67ev.tif only the first line contains a comment, whereas the second line includes none. Rather, it refers to a file called - `img-0.33ev.tif # "middle" EV'. + 'img-0.33ev.tif # "middle" EV'. -Image filenames cannot start with `@' +Image filenames cannot start with '@' An at-sign invariably introduces a response file, even if the filename's extension hints towards an image. If Enblend or Enfuse do not recognize a response file, they will skip the file and issue a warning. To force a file being recognized as a -response file add one of the following syntactic comments to the -_first_ line of the file. +response file add one of the following syntactic comments to the _first_ +line of the file. response-file: true enblend-response-file: true @@ -448,15 +444,15 @@ 3.2.2 Syntactic Comments ------------------------ -Comments that follow the format described in *note -Table:response-file-syntactic-comment:: are treated as instructions how +Comments that follow the format described in *note Table 3.2: +Table:response-file-syntactic-comment. are treated as instructions how to interpret the rest of the response file. A syntactic comment is -effective immediately and its effect persists to the end of the -response file, unless another syntactic comment undoes it. +effective immediately and its effect persists to the end of the response +file, unless another syntactic comment undoes it. -SYNTACTIC-COMMENT ::= SPACE* `#' SPACE* KEY SPACE* `:' SPACE* +SYNTACTIC-COMMENT ::= SPACE* '#' SPACE* KEY SPACE* ':' SPACE* VALUE -KEY ::= (`A' .. `Z' | `a' .. `z' | `-')+ +KEY ::= ('A' .. 'Z' | 'a' .. 'z' | '-')+ where VALUE is an arbitrary string. @@ -470,47 +466,45 @@ The three equivalent syntactic keys - * `glob', - - * `globbing', or - - * `filename-globbing' + * 'glob', + * 'globbing', or + * 'filename-globbing' control the algorithm that Enblend or Enfuse use to glob filenames in response files. All versions of Enblend and Enfuse support at least two algorithms: -`literal', which is the default, and `wildcard'. See *note -Table:globbing-algorithms:: for a list of all possible globbing -algorithms. To find out about the algorithms in your version of -Enblend or Enfuse team up the options `--version' and `--verbose'. +'literal', which is the default, and 'wildcard'. See *note Table 3.3: +Table:globbing-algorithms. for a list of all possible globbing +algorithms. To find out about the algorithms in your version of Enblend +or Enfuse team up the options '--version' and '--verbose'. -`literal' +'literal' Do not glob. Interpret all filenames in response files as literals. This is the default. Please keep in mind that whitespace at both ends of a line in a response file _always_ gets discarded. -`wildcard' - Glob using the wildcard characters `?', `*', `[', and `]'. +'wildcard' + Glob using the wildcard characters '?', '*', '[', and ']'. The W*N32 implementation only globs the filename part of a path, whereas all other implementations perform wildcard expansion in _all_ path components. Also see glob(7) (http://www.kernel.org/doc/man-pages/online/pages/man7/glob.7.html). -`none' - Alias for `literal'. +'none' + Alias for 'literal'. -`shell' - The `shell' globbing algorithm works as `literal' does. In - addition, it interprets the wildcard characters `{', `}', and `~'. +'shell' + The 'shell' globbing algorithm works as 'literal' does. In + addition, it interprets the wildcard characters '{', '}', and '~'. This makes the expansion process behave more like common UN*X shells. -`sh' - Alias for `shell'. +'sh' + Alias for 'shell'. Table 3.3: Globbing algorithms for the use in response files @@ -526,13 +520,13 @@ 3.2.4 Default Layer Selection ----------------------------- -The key `layer-selector' provides the same functionality as does the -command-line option `--layer-selector', but on a per response-file +The key 'layer-selector' provides the same functionality as does the +command-line option '--layer-selector', but on a per response-file basis. *Note Common Options::. This syntactic comment affects the layer selection of all images -listed after it including those in included response files until -another `layer-selector' overrides it. +listed after it including those in included response files until another +'layer-selector' overrides it.  File: enblend.info, Node: Common Options, Next: Extended Options, Prev: Response Files, Up: Invocation @@ -543,12 +537,12 @@ Common options control some overall features of Enblend. Enblend accepts arguments to any option in uppercase as well as in -lowercase letters. For example, `deflate', `Deflate' and `DEFLATE' as -arguments to the `--compression' option described below, all instruct +lowercase letters. For example, 'deflate', 'Deflate' and 'DEFLATE' as +arguments to the '--compression' option described below, all instruct Enblend to use the DEFLATE compression scheme. This manual denotes all arguments in lowercase for consistency. -`-a' +'-a' Pre-assemble non-overlapping images before each blending iteration. This overrides the default behavior which is to blend the images @@ -556,95 +550,96 @@ use fewer blending iterations, but it will do more work in each iteration. -`--compression=COMPRESSION' +'--compression=COMPRESSION' Write a compressed output file. Depending on the output file format, Enblend accepts different values for COMPRESSION. - JPEG format. + JPEG format. + The compression either is a literal integer or a keyword-option combination. - `LEVEL' + 'LEVEL' Set JPEG quality LEVEL, where LEVEL is an integer that ranges from 0-100. - `jpeg[:LEVEL]' + 'jpeg[:LEVEL]' Same as above; without the optional argument just switch on (standard) JPEG compression. - `jpeg-arith[:LEVEL]' + 'jpeg-arith[:LEVEL]' Switch on arithmetic JPEG compression. With optional argument set the arithmetic compression LEVEL, where LEVEL is an integer that ranges from 0-100. - TIF format. + TIF format. Here, COMPRESSION is one of the keywords: - `none' + 'none' Do not compress. This is the default. - `deflate' + 'deflate' Use the DEFLATE compression scheme also called ZIP-in-TIFF. DEFLATE is a lossless data compression algorithm that uses a combination of the LZ77 algorithm and HUFFMAN coding. - `jpeg[:LEVEL]' + 'jpeg[:LEVEL]' Use JPEG compression. With optional argument set the compression LEVEL, where LEVEL is an integer that ranges from 0-100. - `lzw' + 'lzw' Use LEMPEL-ZIV-WELCH (LZW) adaptive compression scheme. LZW compression is lossless. - `packbits' + 'packbits' Use PACKBITS compression scheme. PACKBITS is a particular variant of run-length compression; it is lossless. - Any other format. + Any other format. Other formats do not accept a COMPRESSION setting. However, VIGRA (http://hci.iwr.uni-heidelberg.de/vigra/) - automatically compresses `png'-files with the DEFLATE method. + automatically compresses 'png'-files with the DEFLATE method. -`--layer-selector=ALGORITHM' +'--layer-selector=ALGORITHM' Override the standard layer selector algorithm, which is - `all-layers'. + 'all-layers'. This version of Enblend offers the following algorithms: - `all-layers' + 'all-layers' Select all layers in all images. - `first-layer' + 'first-layer' Select only first layer in each multi-layer image. For - single-layer images this is the same as `all-layers'. + single-layer images this is the same as 'all-layers'. - `largest-layer' + 'largest-layer' Select largest layer in each multi-layer image, where the - "largeness", this is the size is defined by the product of - the layer width and its height. The channel width of the - layer is ignored. For single-layer images this is the same - as `all-layers'. + "largeness", this is the size is defined by the product of the + layer width and its height. The channel width of the layer is + ignored. For single-layer images this is the same as + 'all-layers'. - `no-layer' + 'no-layer' Do not select any layer in any image. This algorithm is useful to temporarily exclude some images in response files. -`-h' -`--help' +'-h' +'--help' Print information on the available options and exit. -`-l LEVELS' -`--levels=LEVELS' +'-l LEVELS' +'--levels=LEVELS' Use at most this many LEVELS for pyramid (1) blending if LEVELS is - positive, or reduce the maximum number of levels used by -LEVELS - if LEVELS is negative; `auto' or `automatic' restore the default, + positive, or reduce the maximum number of levels used by -LEVELS if + LEVELS is negative; 'auto' or 'automatic' restore the default, which is to use the maximum possible number of levels for each overlapping region. @@ -657,10 +652,10 @@ As a guideline, remember that each new level works on a linear scale twice as large as the previous one. So, the zeroth layer, the original image, obviously defines the image at single-pixel - scale, the first level works at two-pixel scale, and generally, - the n-th level contains image data at 2^n -pixel scale. This is - the reason why an image of widthxheight pixels cannot be - deconstructed into a pyramid of more than + scale, the first level works at two-pixel scale, and generally, the + n-th level contains image data at 2^n-pixel scale. This is the + reason why an image of widthxheightpixels cannot be deconstructed + into a pyramid of more than floor(log_2(min(width, height))) levels. @@ -678,75 +673,73 @@ this may or may not influence any pyramid. Negative values of LEVELS reduce the number of pyramid levels below the maximum no matter what the actual maximum is and thus always influence all - pyramids. Use `auto' or `automatic' as LEVELS to restore the + pyramids. Use 'auto' or 'automatic' as LEVELS to restore the automatic calculation of the maximum number of levels. - The valid range of the absolute value of LEVELS is - 1 to 29. + The valid range of the absolute value of LEVELS is 1 to 29. -`-o' -`--output=FILE' +'-o' +'--output=FILE' Place output in FILE. - If `--output' is not specified, the default is to put the - resulting image in `a.tif'. + If '--output' is not specified, the default is to put the resulting + image in 'a.tif'. -`--parameter=KEY[=VALUE]:...' +'--parameter=KEY[=VALUE]:...' Set a KEY-VALUE pair, where VALUE is optional. This option is cumulative. Separate multiple pairs with the usual numeric delimiters. - This option has the negated form `--no-parameter', which takes one + This option has the negated form '--no-parameter', which takes one or more KEYs and removes them from the list of defined parameters. - The special key `*' deletes all parameters at once. + The special key '*' deletes all parameters at once. Parameters allow the developers to change the internal workings of Enblend without the need to recompile. -`-v' -`--verbose[=LEVEL]' +'-v' +'--verbose[=LEVEL]' Without an argument, increase the verbosity of progress reporting. - Giving more `--verbose' options will make Enblend more verbose. + Giving more '--verbose' options will make Enblend more verbose. Directly set a verbosity level with a non-negative integral LEVEL. Each level includes all messages of the lower levels. - Level + Level Messages - 0 + 0 only warnings and errors - 1 + 1 reading and writing of images - 2 + 2 mask generation, pyramid, and blending - 3 + 3 reading of response files, color conversions - 4 + 4 image sizes, bounding boxes and intersection sizes - 5 + 5 detailed information on the optimizer runs (Enblend only) - 6 + 6 estimations of required memory in selected processing steps - The default verbosity level of Enblend is - 1. + The default verbosity level of Enblend is 1. -`-V' -`--version' +'-V' +'--version' Output information on the Enblend version. - Team this option with `--verbose' to show configuration details, + Team this option with '--verbose' to show configuration details, like the extra features that have been compiled in. -`-w' -`--wrap=MODE' +'-w' +'--wrap=MODE' Blend around the boundaries of the panorama. As this option significantly increases memory usage and computation @@ -763,42 +756,42 @@ Otherwise, always avoid this option! With this option Enblend treats the panorama of width w and - height h as an infinite data structure, where each pixel P(x, y) - of the input images represents the set of pixels S_P(x, y) (2). + height h as an infinite data structure, where each pixel P(x, y) of + the input images represents the set of pixels S_P(x, y) (2). MODE takes the following values: - `none' - `open' + 'none' + 'open' This is a "no-op"; it has the same effect as not giving - `--wrap' at all. The set of input images is considered open + '--wrap' at all. The set of input images is considered open at its boundaries. - `horizontal' + 'horizontal' Wrap around horizontally: S_P(x, y) = {P(x + m * w, y): m in Z}. This is useful for 360o horizontal panoramas as it eliminates the left and right borders. - `vertical' + 'vertical' Wrap around vertically: S_P(x, y) = {P(x, y + n * h): m in Z}. This is useful for 360o vertical panoramas as it eliminates the top and bottom borders. - `both' - `horizontal+vertical' - `vertical+horizontal' + 'both' + 'horizontal+vertical' + 'vertical+horizontal' Wrap around both horizontally and vertically: S_P(x, y) = {P(x + m * w, y + n * h): m, n in Z}. In this mode, both left and right borders, as well as top and bottom borders, are eliminated. - Specifying `--wrap' without MODE selects horizontal wrapping. + Specifying '--wrap' without MODE selects horizontal wrapping. -`-x' +'-x' Checkpoint partial results to the output file after each blending step. @@ -822,97 +815,109 @@ Extended options control the image cache, the color model, and the cropping of the output image. -`-b BLOCKSIZE' +'-b BLOCKSIZE' Set the BLOCKSIZE in kilobytes (KB) of Enblend's image cache. This is the amount of data that Enblend will move to and from the - disk at one time. The default is 2048 KB, which should be ok for + disk at one time. The default is 2048KB, which should be ok for most systems. See *note Tuning Memory Usage:: for details. Note that Enblend must have been compiled with the image-cache feature for this option to be effective. Find out about extra - features with `enblend --version --verbose'. - -`-c' -`--ciecam' - Force the use of the CIECAM02 color appearance model for blending - colors instead of blending inside the RGB color cube. - - All input files should have identical ICC profiles when this - option is specified. If no ICC profile is present, Enblend - assumes that all images use the sRGB color space. *Note Color - Profiles::. + features with 'enblend --version --verbose'. - Please keep in mind that using CIECAM02 blending may not only - change the colors in the output image, but Enblend may choose - different seam line routes as some seam-line optimizers are guided - by image differences. +'--blend-colorspace=COLORSPACE' - This option can be negated; see option `--no-ciecam' below. + Force blending in selected COLORSPACE. For well matched images + this option should not change the output image much. However, if + Enblend must blend vastly different colors (as e.g. anti-colors) + the result image heavily depends on the COLORSPACE. + + Usually, Enblend chooses defaults depending on the input images: + * For input images _with_ ICC profiles the default is to use + CIECAM colorspace. + + * Images _without_ color profiles and floating-point images are + blended in the RGB-color cube by default. + + Enblend supports two blend colorspaces: + + 'IDENTITY', 'ID', 'UNIT' + Naively compute blended colors in the luminance interval + (grayscale images) or RGB-cube (RGB images) spanned by the + input ICC profile or sRGB if no profiles are present. + Consider option '--fallback-profile' to force a different + profile than sRGB on all input images. + + 'CIECAM', 'CIECAM02', 'JCH' + Blend pixels in the CIECAM02 colorspace. + + Please keep in mind that by using different blend colorspaces, + blending may not only change the colors in the output image, but + Enblend may choose different seam line routes as some seam-line + optimizers are guided by image differences, which may be different + when viewed in different colorspaces. + +'-c' +'--ciecam' + Use '--blend-colorspace=CIECAM' instead. To mimic the negated + option '--no-ciecam' use '--blend-colorspace=IDENTITY'. -`-d' -`--depth=DEPTH' +'-d' +'--depth=DEPTH' Force the number of bits per channel and the numeric format of the output image. Enblend always uses a smart way to change the channel depth to assure highest image quality (at the expense of memory), whether requantization is implicit because of the output format or explicit - with option `--depth'. + with option '--depth'. * If the output-channel width is larger than the input-channel width of the input images, the input images' channels are - widened to the output channel width immediately after - loading, that is, as soon as possible. Enblend then performs - all blending operations at the output-channel width, thereby + widened to the output channel width immediately after loading, + that is, as soon as possible. Enblend then performs all + blending operations at the output-channel width, thereby preserving minute color details which can appear in the blending areas. * If the output-channel width is smaller than the input-channel width of the input images, the output image's channels are narrowed only right before it is written to disk, that is, as - late as possible. Thus the data benefits from the wider - input channels for the longest time. + late as possible. Thus the data benefits from the wider input + channels for the longest time. All DEPTH specifications are valid in lowercase as well as uppercase letters. For integer format, use - `8', `uint8' - Unsigned 8 bit; range: 0..255 - - `int16' - Signed 16 bit; range: -32768..32767 - - `16', `uint16' - Unsigned 16 bit; range: 0..65535 - - `int32' - Signed 32 bit; range: -2147483648..2147483647 - - `32', `uint32' - Unsigned 32 bit; range: 0..4294967295 + '8', 'uint8' + Unsigned 8bit; range: 0..255 + 'int16' + Signed 16bit; range: -32768..32767 + '16', 'uint16' + Unsigned 16bit; range: 0..65535 + 'int32' + Signed 32bit; range: -2147483648..2147483647 + '32', 'uint32' + Unsigned 32bit; range: 0..4294967295 For floating-point format, use - `r32', `real32', `float' - IEEE754 single precision floating-point, 32 bit wide, 24 bit + 'r32', 'real32', 'float' + IEEE754 single precision floating-point, 32bit wide, 24bit significant - * Minimum normalized value: 1.2*10^-38 - - * Epsilon: 1.2*10^-7 + * Minimum normalized value: 1.2e-38 + * Epsilon: 1.2e-7 + * Maximum finite value: 3.4e38 - * Maximum finite value: 3.4*10^38 - - `r64', `real64', `double' - IEEE754 double precision floating-point, 64 bit wide, 53 bit + 'r64', 'real64', 'double' + IEEE754 double precision floating-point, 64bit wide, 53bit significant - * Minimum normalized value: 2.2*10^-308 - - * Epsilon: 2.2*10^-16 - - * Maximum finite value: 1.8*10^308 + * Minimum normalized value: 2.2e-308 + * Epsilon: 2.2e-16 + * Maximum finite value: 1.8e308 If the requested DEPTH is not supported by the output file format, Enblend warns and chooses the DEPTH that matches best. @@ -921,82 +926,78 @@ Externally, on disk, OpenEXR data is represented by "half" precision floating-point numbers. - OpenEXR (http://www.openexr.com/about.html#features) half - precision floating-point, 16 bit wide, 10 bit significant + OpenEXR (http://www.openexr.com/about.html#features) half precision + floating-point, 16bit wide, 10bit significant - * Minimum normalized value: 9.3*10^-10 + * Minimum normalized value: 9.3e-10 + * Epsilon: 2.0e-3 + * Maximum finite value: 4.3e9 - * Epsilon: 2.0*10^-3 - - * Maximum finite value: 4.3*10^9 - -`-f WIDTHxHEIGHT' -`-f WIDTHxHEIGHT+xXOFFSET+yYOFFSET' +'-f WIDTHxHEIGHT' +'-f WIDTHxHEIGHT+xXOFFSET+yYOFFSET' Ensure that the minimum "canvas" size of the output image is at least WIDTHxHEIGHT. Optionally specify the XOFFSET and YOFFSET, too. This option only is useful when the input images are cropped TIFF - files, such as those produced by `nona'(1). + files, such as those produced by 'nona'(1). - Note that option `-f' neither rescales the output image, nor + Note that option '-f' neither rescales the output image, nor shrinks the canvas size below the minimum size occupied by the union of all input images. -`--fallback-profile=PROFILE-FILENAME' +'--fallback-profile=PROFILE-FILENAME' Use the ICC profile in PROFILE-FILENAME instead of the default - sRGB. See option `--ciecam' and *note Color Profiles::. + sRGB. See option '--blend-colorspace' and *note Color Profiles::. This option only is effective if the input images come without color profiles and blending is performed in CIECAM02 color appearance model. -`-g' +'-g' Save alpha channel as "associated". See the TIFF documentation (http://www.awaresystems.be/imaging/tiff/tifftags/extrasamples.html) for an explanation. Gimp (before version 2.0) and CinePaint (*note Helpful Programs::) exhibit unusual behavior when loading images with unassociated - alpha channels. Use option `-g' to work around this problem. - With this flag Enblend will create the output image with the - associated alpha tag set, even though the image is really - unassociated alpha. + alpha channels. Use option '-g' to work around this problem. With + this flag Enblend will create the output image with the associated + alpha tag set, even though the image is really unassociated alpha. -`--gpu' +'--gpu' Use the graphics card - in fact the graphics processing unit (GPU) - to accelerate some computations. This is an experimental feature that may not work on all systems. - In this version of Enblend, 4.1.3, only mask optimization by + In this version of Enblend, 4.1.4, only mask optimization by Simulated Annealing benefits from this option. - Note that GPU-support must have been compiled into Enblend for - this option to be available. Find out about this feature with - `enblend --version --verbose'. + Note that GPU-support must have been compiled into Enblend for this + option to be available. Find out about this feature with 'enblend + --version --verbose'. -`-m CACHESIZE' +'-m CACHESIZE' Set the CACHESIZE in megabytes (MB) of Enblend's image cache. This is the amount of memory Enblend will use for storing image - data before swapping to disk. The default is - 1024 MB, which is good for systems with 3-4 gigabytes (GB) of RAM. - See *note Tuning Memory Usage:: for details. + data before swapping to disk. The default is 1024MB, which is good + for systems with 3-4gigabytes (GB) of RAM. See *note Tuning Memory + Usage:: for details. Note that Enblend must have been compiled with the image-cache feature for this option to be effective. Find out about extra - features with `enblend --version --verbose'. + features with 'enblend --version --verbose'. -`--no-ciecam' - Disable the use of the CIECAM02 color appearance model for - blending colors. +'--no-ciecam' + Use '--blend-colorspace=IDENTITY' instead. - See option `--ciecam' for details. Also see *note Color + See option '--blend-colorspace' for details. Also see *note Color Profiles::. ---------- Footnotes ---------- - (1) The stitcher `nona' is part of Hugin. *Note Helpful Programs::. + (1) The stitcher 'nona' is part of Hugin. *Note Helpful Programs::.  File: enblend.info, Node: Mask Generation Options, Prev: Extended Options, Up: Invocation @@ -1006,25 +1007,25 @@ These options control the generation and the usage of masks. -`--anneal=TAU[:DELTA-E-MAX[:DELTA-E-MIN[:K-MAX]]]' +'--anneal=TAU[:DELTA-E-MAX[:DELTA-E-MIN[:K-MAX]]]' Set the parameters of the Simulated Annealing optimizer (see *note - Table:optimizer-strategies::). + Table 3.5: Table:optimizer-strategies.). - TAU + TAU TAU is the temperature reduction factor in the Simulated Annealing; it also can be thought of as "cooling factor". The closer TAU is to one, the more accurate the annealing run will be, and the longer it will take. - Append a percent sign (`%') to specify TAU as a percentage. + Append a percent sign ('%') to specify TAU as a percentage. Valid range: 0 < TAU < 1. The default is 0.75; values around 0.95 are reasonable. Usually, slower cooling results in more converged points. - DELTA-E-MAX - DELTA-E-MIN + DELTA-E-MAX + DELTA-E-MIN DELTA-E-MAX and DELTA-E-MIN are the maximum and minimum cost change possible by any single annealing move. @@ -1033,17 +1034,16 @@ In particular they determine the initial and final annealing temperatures according to: DELTA-E-MAX - T_initial = ----------------------- + T_initial = ---------------- log(K-MAX / (K-MAX - 2)) DELTA-E-MIN - T_final = ----------------------- + T_final = ---------------- log(K-MAX^2 - K-MAX - 1) - The defaults are: DELTA-E-MAX: 7000.0 and DELTA-E-MIN: - 5.0. + The defaults are: DELTA-E-MAX: 7000.0 and DELTA-E-MIN: 5.0. - K-MAX + K-MAX K-MAX is the maximum number of "moves" the optimizer will make for each line segment. Higher values more accurately sample the state space, at the expense of a higher computation cost. @@ -1052,82 +1052,83 @@ The default is 32. Values around 100 seem reasonable. -`--coarse-mask[=FACTOR]' +'--coarse-mask[=FACTOR]' Use a scaled-down version of the input images to create the seam line. This option reduces the number of computations necessary to compute the seam line and the amount of memory necessary to do so. It is the default. - If omitted FACTOR defaults to 8, this means, - option `--coarse-mask' shrinks the overlapping _areas_ by a factor - of 8x8. With FACTOR = 8 the total memory allocated during a run - of Enblend shrinks approximately by 80% and the maximum amount of - memory in use at a time is decreased to 60% (Enblend compiled with - image cache) or 40% (Enblend compiled without image cache). + If omitted FACTOR defaults to 8, this means, option '--coarse-mask' + shrinks the overlapping _areas_ by a factor of 8x8. With + FACTOR = 8 the total memory allocated during a run of Enblend + shrinks approximately by 80% and the maximum amount of memory in + use at a time is decreased to 60% (Enblend compiled with image + cache) or 40% (Enblend compiled without image cache). Valid range: FACTOR = 1, 2, 3,.... - Also see *note Table:mask-generation::. + Also see *note Table 3.4: Table:mask-generation. - `--no-optimize' `--optimize' - -------------------------------------------------------------- - `--fine-mask' Use NFT mask. Vectorize NFT mask, - optimize vertices with - simulated annealing - and DIJKSTRA'S - shortest path - algorithm, fill vector - contours. - `--coarse-mask'Scale down overlap Scale down overlap - region, compute NFT region, vectorize NFT - mask and vectorize it, mask, optimize - fill vector contours. vertices with - simulated annealing - and DIJKSTRA'S - shortest path - algorithm, fill vector - contours. + '--no-optimize' '--optimize' + + ------------------------------------------------------------------- + '--fine-mask' Use NFT mask. Vectorize NFT mask, + optimize vertices with + simulated annealing and + DIJKSTRA'S shortest + path algorithm, fill + vector contours. + + '--coarse-mask'Scale down overlap Scale down overlap + region, compute NFT region, vectorize NFT + mask and vectorize it, mask, optimize vertices + fill vector contours. with simulated + annealing and + DIJKSTRA'S shortest + path algorithm, fill + vector contours. Table 3.4: Various options that control the generation of masks. All mask computations are based on the Nearest-Feature Transformation (NFT) of the overlap region. - `--dijkstra=RADIUS' - Set the search RADIUS of the DIJKSTRA Shortest Path algorithm - used in DIJKSTRA Optimization (see *note - Table:optimizer-strategies::). +'--dijkstra=RADIUS' + Set the search RADIUS of the DIJKSTRA Shortest Path algorithm used + in DIJKSTRA Optimization (see *note Table 3.5: + Table:optimizer-strategies.). - A small value prefers straight line segments and thus shorter - seam lines. Larger values instruct the optimizer to let the seam - line take more detours when searching for the best seam line. + A small value prefers straight line segments and thus shorter seam + lines. Larger values instruct the optimizer to let the seam line + take more detours when searching for the best seam line. - Valid range: RADIUS >= 1. + Valid range: RADIUS >= 1. - Default: 25 pixels. + Default: 25pixels. - `--fine-mask' - Instruct Enblend to employ the full-size images to create the - seam line, which can be slow. Use this option, for example, if - you have very narrow overlap regions. +'--fine-mask' + Instruct Enblend to employ the full-size images to create the seam + line, which can be slow. Use this option, for example, if you have + very narrow overlap regions. - Also see *note Table 3.4: Table:mask-generation. + Also see *note Table 3.4: Table:mask-generation. - `--image-difference=ALGORITHM[:LUMINANCE-WEIGHT[:CHROMINANCE-WEIGHT]]' - Enblend calculates the difference of a pair of overlapping color +'--image-difference=ALGORITHM[:LUMINANCE-WEIGHT[:CHROMINANCE-WEIGHT]]' + + Enblend calculates the difference of a pair of overlapping color images when it generates the primary seam with a Graph-Cut or before it optimizes a seam. It employs a user-selectable ALGORITHM that itself is controlled by the weights for luminance differences LUMINANCE-WEIGHT, w_luminance and color differences CHROMINANCE-WEIGHT, w_chrominance. - For black-and-white images the difference is simple the absolute + For black-and-white images the difference is simple the absolute difference of each pair of pixels. - `maximum-hue-luminance' - `maximum-hue-lum' - `max-hue-luminance' - `max-hue-lum' - `max' + 'maximum-hue-luminance' + 'maximum-hue-lum' + 'max-hue-luminance' + 'max-hue-lum' + 'max' Calculate the difference d as the maximum of the differences of the luminances l and hues h of each pair of pixels P1 and P2: @@ -1136,8 +1137,8 @@ This algorithm was the default for Enblend up to version 4.0. - `delta-e' - `de' + 'delta-e' + 'de' Calulate the difference d as the EUCLIDEAN distance of the pixels in L*a*b* space: d = sqrt(w_luminance * (L(P_1) - L(P_2))^2 + @@ -1147,20 +1148,19 @@ This is the default in Enblend version 4.1 and later. Note that the "delta-E" mentioned here has nothing to do with - DELTA-E-MAX and DELTA-E-MIN of option `--anneal'. + DELTA-E-MAX and DELTA-E-MIN of option '--anneal'. - Both LUMINANCE-WEIGHT and CHROMINANCE-WEIGHT must be - non-negative, their sum must be positive. Enblend automatically - normalizes the sum of LUMINANCE-WEIGHT and CHROMINANCE-WEIGHT to - one. Thus `--image-difference=delta-e:2:1' and - `--image-difference=delta-e:0.6667:0.3333' define the same + Both LUMINANCE-WEIGHT and CHROMINANCE-WEIGHT must be non-negative, + their sum must be positive. Enblend automatically normalizes the + sum of LUMINANCE-WEIGHT and CHROMINANCE-WEIGHT to one. Thus + '--image-difference=delta-e:2:1' and + '--image-difference=delta-e:0.6667:0.3333' define the same weighting function. - The default LUMINANCE-WEIGHT is - 1.0 and the default CHROMINANCE-WEIGHT is - 1.0. + The default LUMINANCE-WEIGHT is 1.0 and the default + CHROMINANCE-WEIGHT is 1.0. - At higher verbosity levels Enblend computes the true size of the + At higher verbosity levels Enblend computes the true size of the overlap area in pixels and it calculates the average and standard deviation of the difference per pixel in the normalized luminance interval [0...1]. These statistical measures are based on @@ -1168,330 +1168,324 @@ ALGORITHMs. The average difference is a rough measure of quality with lower values meaning better matches. - `--load-masks[=IMAGE-TEMPLATE]' - Instead of generating masks, use those in IMAGE-TEMPLATE. The - default is `mask-%n.tif'. The mask images have to be a 8-bit +'--load-masks[=IMAGE-TEMPLATE]' + Instead of generating masks, use those in IMAGE-TEMPLATE. The + default is 'mask-%n.tif'. The mask images have to be a 8-bit grayscale images. - See `--save-masks' below for details. + See '--save-masks' below for details. - `--mask-vectorize=DISTANCE' - Set the mask vectorization DISTANCE Enblend uses to partition - each seam. Thus, break down the seam to segments of length - DISTANCE each. - - If Enblend uses a coarse mask (`--coarse-mask') or Enblend - optimizes (`--optimize') a mask it vectorizes the initial seam - line before performing further operations. See *note Table 3.4: +'--mask-vectorize=DISTANCE' + Set the mask vectorization DISTANCE Enblend uses to partition each + seam. Thus, break down the seam to segments of length DISTANCE + each. + + If Enblend uses a coarse mask ('--coarse-mask') or Enblend + optimizes ('--optimize') a mask it vectorizes the initial seam line + before performing further operations. See *note Table 3.4: Table:mask-generation. for the precise conditions. DISTANCE tells Enblend how long to make each of the line segments called vectors here. - The unit of DISTANCE is pixels unless it is a percentage as + The unit of DISTANCE is pixels unless it is a percentage as explained in the next paragraph. In fine masks one mask pixel corresponds to one pixel in the input image, whereas in coarse - masks one pixel represents for example - 8 pixels in the input image. + masks one pixel represents for example 8pixels in the input image. - Append a percentage sign (`%') to DISTANCE to specify the - segment length as a fraction of the diagonal of the rectangle - including the overlap region. Relative measures do not depend on - coarse or fine masks, they are recomputed for each mask. Values - around 5%-10% are a good starting point. + Append a percentage sign ('%') to DISTANCE to specify the segment + length as a fraction of the diagonal of the rectangle including the + overlap region. Relative measures do not depend on coarse or fine + masks, they are recomputed for each mask. Values around 5%-10% are + a good starting point. - This option massively influences the mask generation process! + This option massively influences the mask generation process! Large DISTANCE values lead to shorter, straighter, less wiggly, - less baroque seams that are on the other hand less optimal, - because they run through regions of larger image mismatch instead - of avoiding them. Small DISTANCE values give the optimizers more + less baroque seams that are on the other hand less optimal, because + they run through regions of larger image mismatch instead of + avoiding them. Small DISTANCE values give the optimizers more possibilities to run the seam around high mismatch areas. - What should _never_ happen though, are loops in the seam line. + What should _never_ happen though, are loops in the seam line. Counter loops with higher weights of DISTANCE-WEIGHT (in - option `--optimizer-weights'), larger vectorization DISTANCEs, - TAUs (in option `--anneal') that are closer to one, and blurring - of the difference image with option `--smooth-difference'. Use - option `--visualize' to check the results. - - Valid range: DISTANCE >= 4. - - Enblend limits DISTANCE so that it never gets below - 4 even if it has been given as a percentage. The user will be - warned in such cases. - - Default: 4 pixels for coarse masks and - 20 pixels for fine masks. - - `--no-optimize' - Turn off seam line optimization. Combined with - option `--fine-mask' this will produce the same type of mask as + option '--optimizer-weights'), larger vectorization DISTANCEs, TAUs + (in option '--anneal') that are closer to one, and blurring of the + difference image with option '--smooth-difference'. Use + option '--visualize' to check the results. + + Valid range: DISTANCE >= 4. + + Enblend limits DISTANCE so that it never gets below 4 even if it + has been given as a percentage. The user will be warned in such + cases. + + Default: 4pixels for coarse masks and 20pixels for fine masks. + +'--no-optimize' + Turn off seam line optimization. Combined with + option '--fine-mask' this will produce the same type of mask as Enblend version 2.5, namely the result of a Nearest-Feature Transform (NFT).(1) - Also see *note Table 3.4: Table:mask-generation. + Also see *note Table 3.4: Table:mask-generation. - `--optimize' - Use a multi-strategy approach to route the seam line around +'--optimize' + Use a multi-strategy approach to route the seam line around mismatches in the overlap region. This is the default. *note - Table:optimizer-strategies:: explains these strategies; also see - *note Table 3.4: Table:mask-generation. + Table 3.5: Table:optimizer-strategies. explains these strategies; + also see *note Table 3.4: Table:mask-generation. - Simulated Annealing - Tune with option `--anneal' = TAU : DELTA-E-MAX : DELTA-E-MIN + Simulated Annealing + Tune with option '--anneal' = TAU : DELTA-E-MAX : DELTA-E-MIN : K-MAX. Simulated-Annealing (http://en.wikipedia.org/wiki/Simulated_annealing) - DIJKSTRA Shortest Path - Tune with option `--dijkstra' = RADIUS. + DIJKSTRA Shortest Path + Tune with option '--dijkstra' = RADIUS. DIJKSTRA algorithm (http://en.wikipedia.org/wiki/Dijkstra_algorithm) - Table 3.5: Enblend's strategies to optimize the seam lines between images. - `--optimizer-weights=DISTANCE-WEIGHT[:MISMATCH-WEIGHT]' - Set the weights of the seam-line optimizer. If omitted, +'--optimizer-weights=DISTANCE-WEIGHT[:MISMATCH-WEIGHT]' + + Set the weights of the seam-line optimizer. If omitted, MISMATCH-WEIGHT defaults to 1. - The seam-line optimizer considers two qualities of the seam - line: + The seam-line optimizer considers two qualities of the seam line: - * The distance of the seam line from its initial position, - which has been determined by NFT (see option `--no-optimize'). + * The distance of the seam line from its initial position, which + has been determined by NFT (see option '--no-optimize'). * The total "mismatch" accumulated along it. - The optimizer weights DISTANCE-WEIGHT and MISMATCH-WEIGHT - define how to weight these two criteria. Enblend up to - version 3.2 used 1:1. This version of Enblend (4.1.3) uses - 8.0:1.0. - - A large DISTANCE-WEIGHT pulls the optimized seam line closer to - the initial postion. A large MISMATCH-WEIGHT makes the seam line - go on detours to find a path along which the mismatch between the - images is small. If the optimized seam line shows cusps or loops - (see option `--visualize'), reduce MISMATCH-WEIGHT or increase + The optimizer weights DISTANCE-WEIGHT and MISMATCH-WEIGHT define + how to weight these two criteria. Enblend up to version 3.2 used + 1:1. This version of Enblend (4.1.4) uses 8.0:1.0. + + A large DISTANCE-WEIGHT pulls the optimized seam line closer to the + initial postion. A large MISMATCH-WEIGHT makes the seam line go on + detours to find a path along which the mismatch between the images + is small. If the optimized seam line shows cusps or loops (see + option '--visualize'), reduce MISMATCH-WEIGHT or increase DISTANCE-WEIGHT. - Both weights must be non-negative. They cannot be both zero at - the same time. Otherwise, their absolute values are not important - as Enblend normalizes their sum. - - `--primary-seam-generator=ALGORITHM' - Select the algorithm responsible for generating the general - seam route. + Both weights must be non-negative. They cannot be both zero at the + same time. Otherwise, their absolute values are not important as + Enblend normalizes their sum. + +'--primary-seam-generator=ALGORITHM' + Select the algorithm responsible for generating the general seam + route. - This is the ALGORITHM that produces an initial seam line, which - is the basis for later, optional optimizations (see `--optimize'). + This is the ALGORITHM that produces an initial seam line, which is + the basis for later, optional optimizations (see '--optimize'). Nearest Feature Transform (NFT) is the only algorithm up to and including Enblend version 4.0. Version 4.1 adds a Graph-Cut (GC) algorithm. In this version of Enblend NFT is the default. - Valid ALGORITHM names are: + Valid ALGORITHM names are: - nearest-feature-transform - nft + nearest-feature-transform + nft Nearest Feature Transform - - graph-cut - gc + graph-cut + gc Graph-Cut - See *note Primary Seam Generators:: for details. + See *note Primary Seam Generators:: for details. - `--save-masks' - `--save-masks=IMAGE-TEMPLATE' - Save the generated masks to IMAGE-TEMPLATE. The default is - `mask-%n.tif'. Enblend saves masks as 8 bit grayscale (single +'--save-masks' +'--save-masks=IMAGE-TEMPLATE' + Save the generated masks to IMAGE-TEMPLATE. The default is + 'mask-%n.tif'. Enblend saves masks as 8bit grayscale (single channel) images. For accuracy we recommend to choose a lossless format. - Use this option if you wish to edit the location of the seam - line by hand. This will give you images of the right sizes that - you can edit to make your changes. Later, use - option `--load-masks' to blend the project with your custom seam - lines. - - Enblend will stop after saving all masks unless - option `--output' is given, too. With both options given, this - is, `--save-masks' and `--output', Enblend saves all masks and - then proceeds to blend the output image. - - IMAGE-TEMPLATE defines a template that is expanded for each - input file. In a template a percent sign (`%') introduces a - variable part. All other characters are copied literally. - Lowercase letters refer to the name of the respective input file, - whereas uppercase ones refer to the name of the output file (*note - Common Options::). *note Table:mask-template-characters:: lists + Use this option if you wish to edit the location of the seam line + by hand. This will give you images of the right sizes that you can + edit to make your changes. Later, use option '--load-masks' to + blend the project with your custom seam lines. + + Enblend will stop after saving all masks unless option '--output' + is given, too. With both options given, this is, '--save-masks' + and '--output', Enblend saves all masks and then proceeds to blend + the output image. + + IMAGE-TEMPLATE defines a template that is expanded for each input + file. In a template a percent sign ('%') introduces a variable + part. All other characters are copied literally. Lowercase + letters refer to the name of the respective input file, whereas + uppercase ones refer to the name of the output file (*note Common + Options::). *note Table 3.7: Table:mask-template-characters. lists all variables. - A fancy mask filename template could look like this: + A fancy mask filename template could look like this: %D/mask-%02n-%f.tif - It puts the mask files into the same directory as the output - file (`%D'), generates a two-digit index (`%02n') to keep the mask - files nicely sorted, and decorates the mask filename with the name - of the associated input file (`%f') for easy recognition. - - `--smooth-difference=RADIUS' - _This option has been deprecated._ - - Smooth the difference image prior to seam-line optimization to - get a shorter and - on the length scale of RADIUS - also a - straighter seam-line. The default is not to smooth. - - If RADIUS is larger than zero Enblend blurs the difference - images of the overlap regions with a GAUSSIAN filter having a - radius of RADIUS pixels. Values of 0.5 to 1.5 pixels for RADIUS - are good starting points; use option `--visualize' to directly - judge the effect. + It puts the mask files into the same directory as the output file + ('%D'), generates a two-digit index ('%02n') to keep the mask files + nicely sorted, and decorates the mask filename with the name of the + associated input file ('%f') for easy recognition. + +'--smooth-difference=RADIUS' + + _This option has been deprecated._ + + Smooth the difference image prior to seam-line optimization to get + a shorter and - on the length scale of RADIUS - also a straighter + seam-line. The default is not to smooth. + + If RADIUS is larger than zero Enblend blurs the difference images + of the overlap regions with a GAUSSIAN filter having a radius of + RADIUSpixels. Values of 0.5 to 1.5pixels for RADIUS are good + starting points; use option '--visualize' to directly judge the + effect. - When using this option in conjunction with - option `--coarse-mask'=FACTOR, keep in mind that the smoothing + When using this option in conjunction with + option '--coarse-mask'=FACTOR, keep in mind that the smoothing occurs _after_ the overlap regions have been shrunken. Thus, blurring affects a FACTORxFACTOR times larger area in the original images. - Valid range: RADIUS >= 0.0. + Valid range: RADIUS >= 0.0. - `--visualize[=VISUALIZE-TEMPLATE]' - Create an image according to VISUALIZE-TEMPLATE that visualizes - the unoptimized mask and the applied optimizations (if any). The - default is `vis-%n.tif'. +'--visualize[=VISUALIZE-TEMPLATE]' + Create an image according to VISUALIZE-TEMPLATE that visualizes the + unoptimized mask and the applied optimizations (if any). The + default is 'vis-%n.tif'. - The image shows Enblend's view of the overlap region and how it + The image shows Enblend's view of the overlap region and how it decided to route the seam line. If you are experiencing artifacts or unexpected output, it may be useful to include this visualization image in your bug report. *Note Bug Reports::. - VISUALIZE-TEMPLATE defines a template that is expanded for each - input file. In a template, a percent sign (`%') introduces a + VISUALIZE-TEMPLATE defines a template that is expanded for each + input file. In a template, a percent sign ('%') introduces a variable part; all other characters are copied literally. Lowercase letters refer to the name of the respective input file, whereas uppercase ones refer to the name of the output file (*note - Common Options::). *note Table:mask-template-characters:: lists - all variables. + Common Options::). *note Table 3.7: + Table:mask-template-characters. lists all variables. - *Visualization Image.* The visualization image shows the symmetric - difference of the pixels in the rectangular region where two - images overlap. The larger the difference the lighter shade of - gray it appears in the visualization image. Enblend paints the + *Visualization Image.* The visualization image shows the symmetric + difference of the pixels in the rectangular region where two images + overlap. The larger the difference the lighter shade of gray it + appears in the visualization image. Enblend paints the non-overlapping parts of the image pair - these are the regions - where _no_ blending occurs - in - dark red. *note Table:visualization-colors:: shows the meanings - of all the colors that are used in seam-line visualization images. + where _no_ blending occurs - in dark red. *note Table 3.6: + Table:visualization-colors. shows the meanings of all the colors + that are used in seam-line visualization images. - dark red + dark red Non-overlapping parts of image pair. - various shades of gray + various shades of gray Difference of the pixel values in the overlap region. - dark blue + dark blue Location of an optimizer sample. - medium green + medium green First sample of a line segment. - light green + light green Any other but first sample of a line segment. - bright cyan + bright cyan State space sample inside the DIJKSTRA radius. - bright magenta + bright magenta Non-converged point. - dark yellow + dark yellow Initial seam line as generated by the primary seam generator. Enblend marks a non-movable ("frozen") endpoint of a seam-line - segment with a bright white cross, whereas it uses a - light orange diamond to denote an endpoint that the optimizer - is allowed to move around. + segment with a bright white cross, whereas it uses a light + orange diamond to denote an endpoint that the optimizer is + allowed to move around. - bright yellow + bright yellow Final seam line. Table 3.6: Colors used in seam-line visualization images. +'%%' + Produces a literal '%'-sign. -`%%' - Produces a literal `%'-sign. - -`%i' +'%i' Expands to the index of the mask file starting at zero. - `%i' supports setting a pad character or a width specification: + '%i' supports setting a pad character or a width specification: - `%' PAD WIDTH `i' + '%' PAD WIDTH 'i' - PAD is either `0' or any punctuation character; the default pad - character is `0'. WIDTH is an integer specifying the minimum - width of the number. The default is the smallest width given the - number of input images, this is 1 for 2-9 images, 2 for 10-99 - images, 3 for 100-999 images, and so on. + PAD is either '0' or any punctuation character; the default pad + character is '0'. WIDTH is an integer specifying the minimum width + of the number. The default is the smallest width given the number + of input images, this is 1 for 2-9 images, 2 for 10-99 images, 3 + for 100-999 images, and so on. - Examples: `%i', `%02i', or `%_4i'. + Examples: '%i', '%02i', or '%_4i'. -`%n' +'%n' Expands to the number of the mask file starting at one. Otherwise - it behaves identically to `%i', including pad character and width + it behaves identically to '%i', including pad character and width specification. -`%p' +'%p' This is the full name (path, filename, and extension) of the input file associated with the mask. - Example: If the input file is called `/home/luser/snap/img.jpg', - `%p' expands to `/home/luser/snap/img.jpg', or shorter: `%p' => - `/home/luser/snap/img.jpg'. + Example: If the input file is called '/home/luser/snap/img.jpg', + '%p' expands to '/home/luser/snap/img.jpg', or shorter: '%p' => + '/home/luser/snap/img.jpg'. -`%P' +'%P' This is the full name of the output file. -`%d' +'%d' Is replaced with the directory part of the associated input file. *note Stripping a non-directory suffix from a file name: (coreutils.info)dirname invocation. - Example (cont.): `%d' => `/home/luser/snap'. + Example (cont.): '%d' => '/home/luser/snap'. -`%D' +'%D' Is replaced with the directory part of the output file. -`%b' +'%b' Is replaced with the non-directory part (often called "basename") of the associated input file. *note Stripping a directory and suffix from a file name: (coreutils.info)basename invocation. - Example (cont.): `%b' => `img.jpg'. + Example (cont.): '%b' => 'img.jpg'. -`%B' +'%B' Is replaced with the non-directory part of the output file. -`%f' +'%f' Is replaced with the filename without path and extension of the associated input file. - Example (cont.): `%f' => `img'. + Example (cont.): '%f' => 'img'. -`%F' +'%F' Is replaced with the filename without path and extension of the output file. -`%e' +'%e' Is replaced with the extension (including the leading dot) of the associated input file. - Example (cont.): `%e' => `.jpg'. + Example (cont.): '%e' => '.jpg'. -`%E' +'%E' Is replaced with the extension of the output file. Table 3.7: Special characters to control the generation of mask @@ -1500,9 +1494,9 @@ ---------- Footnotes ---------- (1) MUHAMMAD H. ALSUWAIYEL and MARINA GAVRILOVA, "On the Distance -Transform of Binary Images", Proceedings of the International -Conference on Imaging Science, Systems, and Technology, June 2000, -Vols. I and II, pages 83-86. +Transform of Binary Images", Proceedings of the International Conference +on Imaging Science, Systems, and Technology, June 2000, Vols. I and II, +pages 83-86.  File: enblend.info, Node: Primary Seam Generators, Next: Color Profiles, Prev: Invocation, Up: Top @@ -1510,9 +1504,9 @@ 4 Primary Seam Generators ************************* -This version (4.1.3) of Enblend supports two main algorithms to -generate seam lines. Use option `--primary-seam-generator' to select -one of the generators. +This version (4.1.4) of Enblend supports two main algorithms to generate +seam lines. Use option '--primary-seam-generator' to select one of the +generators. Nearest Feature Transform (NFT) The NFT, also known as Distance Transform @@ -1534,20 +1528,19 @@ images' contents. The most significant difference between the two algorithms is the -output mask gradation. NFT produces a coarse approximation of the -seam, running as far away from the overlap-region borders as possible. -The resulting mask could then be blended as-is, however, Enblend by -default runs image-content dependent optimizers to increase the mask -gradation and for example omits the regions where the images differ. -The result is a finer seam line, which only loosely follows the shape -of NFT's primary seam. +output mask gradation. NFT produces a coarse approximation of the seam, +running as far away from the overlap-region borders as possible. The +resulting mask could then be blended as-is, however, Enblend by default +runs image-content dependent optimizers to increase the mask gradation +and for example omits the regions where the images differ. The result +is a finer seam line, which only loosely follows the shape of NFT's +primary seam. Graph-Cut, on the other hand, is capable of producing the final mask -in one pass without the need of further optimizers. It looks for a -seam line that is _globally_ optimal, taking into account +in one pass without the need of further optimizers. It looks for a seam +line that is _globally_ optimal, taking into account * feature frequency, as well as - * image dissimilarity. This means, the seam is less likely to cross lines like for example @@ -1555,7 +1548,7 @@ The optimizers which run after NFT can also be run after GC. Nevertheless, GC works best just with a fine mask -(option `--fine-mask'); optimizers are then automatically _turned off_ +(option '--fine-mask'); optimizers are then automatically _turned off_ to take full advantage of the detailed seam GC produces. GC requires more memory and computation time to complete than NFT. @@ -1578,7 +1571,6 @@ Enblend and Enfuse expect that either 1. no input image has a color profile or - 2. all come with the _same_ ICC (http://en.wikipedia.org/wiki/ICC_profile) profile. @@ -1593,34 +1585,34 @@ profiles and without them generates warnings as it generally leads to unpredictable results. - The options `--ciecam' (*note Extended Options::) and its opposite -`--no-ciecam' (*note Extended Options::) overrule the default profile -selection procedure described above. Use option `--ciecam' on a set of + The options '--ciecam' (*note Extended Options::) and its opposite +'--no-ciecam' (*note Extended Options::) overrule the default profile +selection procedure described above. Use option '--ciecam' on a set of input images _without_ color profiles to assign a profile to them and perform the blending or fusing process in CIECAM02 color space. The default profile is sRGB (http://en.wikipedia.org/wiki/SRGB). -Override this setting with option `--fallback-profile' (*note Extended +Override this setting with option '--fallback-profile' (*note Extended Options::). On the other hand, suppress the utilization of CIECAM02 blending or fusing of a set of input images _with_ color profiles with -option `--no-ciecam'. The only reason for the latter is to shorten the +option '--no-ciecam'. The only reason for the latter is to shorten the blending- or fusing-time, because transforming to and back from the CIECAM02 color space are computationally expensive operations. - Option `--ciecam' as well as `--fallback-profile' have no effect on -images with attached color profiles, just as option `--no-ciecam' has -no effect on images without profiles. + Option '--ciecam' as well as '--fallback-profile' have no effect on +images with attached color profiles, just as option '--no-ciecam' has no +effect on images without profiles. The impact of blending in CIECAM02 color space as opposed to the RGB -cube vary with the contents of the input images. Generally colors -lying close together in RGB space experience less change when switching -the blending spaces. However, colors close the border of any color -space can see marked changes. +cube vary with the contents of the input images. Generally colors lying +close together in RGB space experience less change when switching the +blending spaces. However, colors close the border of any color space +can see marked changes. - For color geeks: The transformations to CIECAM02 color space and -back use + For color geeks: The transformations to CIECAM02 color space and back +use * perceptual rendering intent, @@ -1636,10 +1628,10 @@ 6 Understanding Masks ********************* -A "binary mask" indicates for every pixel of an image if this pixel -must be considered in further processing, or ignored. For a "weight -mask", the value of the mask determines how much the pixel contributes, -zero again meaning "no contribution". +A "binary mask" indicates for every pixel of an image if this pixel must +be considered in further processing, or ignored. For a "weight mask", +the value of the mask determines how much the pixel contributes, zero +again meaning "no contribution". Masks arise in two places: as part of the input files and as separate files, showing the actual pixel weights prior to image blendung or @@ -1648,11 +1640,11 @@ 6.1 Masks in Input Files ======================== -Each of the input files for Enfuse and Enblend can contain its own -mask. Both applications interpret them as binary masks no matter how -many bits per image pixel they contain. +Each of the input files for Enfuse and Enblend can contain its own mask. +Both applications interpret them as binary masks no matter how many bits +per image pixel they contain. - Use ImageMagick's `identify' or, for TIFF files, `tiffinfo' to + Use ImageMagick's 'identify' or, for TIFF files, 'tiffinfo' to inquire quickly whether a file contains a mask. *note Helpful Programs:: shows where to find these programs on the web. @@ -1676,8 +1668,8 @@ Rows/Strip: 327 Planar Configuration: single image plane -The "Matte" part of the image class and the "Extra Samples" line tell -us that the file features a mask. Also, many interactive image +The "Matte" part of the image class and the "Extra Samples" line tell us +that the file features a mask. Also, many interactive image manipulation programs show the mask as a separate channel, sometimes called "Alpha". There, the white (high mask value) parts of the mask enable pixels and black (low mask value) parts suppress them. @@ -1710,13 +1702,13 @@ channel, Enblend warns and assumes a mask of all non-zero values, that is, it will use every pixel of the input image for fusion. - Stitchers like `nona' add a mask to their output images. + Stitchers like 'nona' add a mask to their output images. Sometimes it is helpful to manually modify a mask before fusion. For example to suppress unwanted objects (insects and cars come into mind) that moved across the scene during the exposures. If the masks of all -input images are black at a certain position, the output image will -have a hole in that position. +input images are black at a certain position, the output image will have +a hole in that position. 6.2 Weight Mask Files ===================== @@ -1730,7 +1722,7 @@ ********************* The default configuration of Enblend and Enfuse assumes a system with -3-4 GB of RAM. +3-4GB of RAM. If Enblend and Enfuse have been compiled with the "image-cache" feature, they do not rely on the operating system's memory management, @@ -1743,14 +1735,13 @@ enfuse --verbose --version -Enblend and Enfuse put the file that holds the image cache either in -the directory pointed to by the environment variable `TMPDIR', or, if -the variable is not set, in directory `/tmp'. It is prudent to ensure -write permissions and enough of free space on the volume with the cache -file. +Enblend and Enfuse put the file that holds the image cache either in the +directory pointed to by the environment variable 'TMPDIR', or, if the +variable is not set, in directory '/tmp'. It is prudent to ensure write +permissions and enough of free space on the volume with the cache file. - The size of the image cache is user configurable with the option `-m -CACHE-SIZE' (*note Extended Options::). Furthermore, option `-b + The size of the image cache is user configurable with the option '-m +CACHE-SIZE' (*note Extended Options::). Furthermore, option '-b BUFFER-SIZE' (*note Extended Options::) allows for fine-tuning the size of a single buffer inside the image cache. Note that CACHE-SIZE is given in megabytes, whereas the unit of BUFFER-SIZE is kilobytes. @@ -1784,7 +1775,7 @@ above aspects even for the biggest data sets, that is, projects with many large images. - *note Table:cache-size-settings:: suggests some cache- and + *note Table 7.1: Table:cache-size-settings. suggests some cache- and buffer-sizes for different amounts of available RAM. RAM | CACHE-SIZE | BUFFER-SIZE | Comment @@ -1796,7 +1787,7 @@ Table 7.1: Suggested cache-size settings - On systems with considerably more than 4 GB of RAM it is recommended + On systems with considerably more than 4GB of RAM it is recommended to run Enblend or Enfuse versions without image cache.  @@ -1809,52 +1800,56 @@ Enfuse and Enblend. *Raw Image Conversion* - * DCRaw (http://www.cybercom.net/~dcoffin/dcraw/) is a - universal raw-converter written by DAVID COFFIN. + + * DCRaw (http://www.cybercom.net/~dcoffin/dcraw/) is a universal + raw-converter written by DAVID COFFIN. * UFRaw (http://ufraw.sourceforge.net/), a raw converter written - by UDI FUCHS and based on DCRaw, adds a GUI (`ufraw'), - versatile batch processing (`ufraw-batch'), and some + by UDI FUCHS and based on DCRaw, adds a GUI ('ufraw'), + versatile batch processing ('ufraw-batch'), and some additional features such as cropping, noise reduction with wavelets, and automatic lens error correction. *Image Alignment and Rendering* + * ALE (http://auricle.dyndns.org/ALE/), DAVID HILVERT'S anti-lamenessing engine for the real die-hard command-line users aligns, filters, and renders images. - * Hugin (http://hugin.sourceforge.net/) is a GUI that aligns - and stitches images. + * Hugin (http://hugin.sourceforge.net/) is a GUI that aligns and + stitches images. - It comes with several command line tools, like `nona' to - stitch panorama images, `align_image_stack' to align - overlapping images for HDR or create focus stacks, and - `fulla' to correct lens errors. + It comes with several command line tools, like 'nona' to + stitch panorama images, 'align_image_stack' to align + overlapping images for HDR or create focus stacks, and 'fulla' + to correct lens errors. * PanoTools (http://panotools.sourceforge.net/) the successor of HELMUT DERSCH'S original PanoTools (http://www.all-in-one.ee/~dersch/) offers a set of command-line driven applications to create panoramas. Most - notable are `PTOptimizer' and `PTmender'. + notable are 'PTOptimizer' and 'PTmender'. *Image Manipulation* + * CinePaint (http://www.cinepaint.org/) is a branch of an early Gimp forked off at version 1.0.4. It sports much less - features than the current Gimp, but offers 8 bit, 16 bit and - 32 bit color channels, HDR (for example floating-point TIFF, + features than the current Gimp, but offers 8bit, 16bit and + 32bit color channels, HDR (for example floating-point TIFF, and OpenEXR), and a tightly integrated color management system. * The Gimp (http://www.gimp.org/) is a general purpose image - manipulation program. At the time of this writing it is - still limited to images with only 8 bits per channel. + manipulation program. At the time of this writing it is still + limited to images with only 8bits per channel. * ImageMagick (http://www.imagemagick.org/) and its clone GraphicsMagick (http://www.graphicsmagick.org/) are general purpose command-line driven image manipulation programs, for - example, `convert', `display', `identify', and `montage'. + example, 'convert', 'display', 'identify', and 'montage'. *High Dynamic Range* + * OpenEXR (http://www.openexr.com/) offers libraries and some programs to work with the EXR HDR format. @@ -1862,28 +1857,30 @@ and tonemap high-dynamic range images. *Libraries* + * LibJPEG (http://www.ijg.org/) is a library for handling the JPEG (JFIF) image format. * LibPNG (http://www.libpng.org/pub/png/libpng.html) is a - library that handles the Portable Network Graphics (PNG) - image format. + library that handles the Portable Network Graphics (PNG) image + format. * LibTIFF (http://www.remotesensing.org/libtiff/) offers a library and utility programs to manipulate the ubiquitous Tagged Image File Format, TIFF. - The nifty `tiffinfo' command quickly inquires the properties + The nifty 'tiffinfo' command quickly inquires the properties of TIFF files. *Meta-Data Handling* - * EXIFTool (http://www.sno.phy.queensu.ca/~phil/exiftool/) - reads and writes EXIF meta data. In particular it copies - meta data from one image to another. + + * EXIFTool (http://www.sno.phy.queensu.ca/~phil/exiftool/) reads + and writes EXIF meta data. In particular it copies meta data + from one image to another. * LittleCMS (http://www.littlecms.com/) is the color management library used by Hugin, DCRaw, UFRaw, Enblend, and Enfuse. It - supplies some binaries, too. `tifficc', an ICC color profile + supplies some binaries, too. 'tifficc', an ICC color profile applier, is of particular interest.  @@ -1895,8 +1892,8 @@ Most of this appendix was taken from the Octave (http://www.gnu.org/software/octave/) documentation. -Bug reports play an important role in making Enblend and Enfuse -reliable and enjoyable. +Bug reports play an important role in making Enblend and Enfuse reliable +and enjoyable. When you encounter a problem, the first thing to do is to see if it is already known. To this end visit the package's LaunchPad @@ -1919,8 +1916,8 @@ * If Enblend or Enfuse produce incorrect results, for any input whatever, that is a bug. - * If Enblend or Enfuse produce an error message for valid input, - that is a bug. + * If Enblend or Enfuse produce an error message for valid input, that + is a bug. * If Enblend or Enfuse do not produce an error message for invalid input, that is a bug. @@ -1928,11 +1925,11 @@ A.2 How to Report Bugs ====================== -The fundamental principle of reporting bugs usefully is this: report -all the facts. If you are not sure whether to state a fact or leave it -out, state it. Often people omit facts because they think they know -what causes the problem and they conclude that some details do not -matter. Play it safe and give a specific, complete example. +The fundamental principle of reporting bugs usefully is this: report all +the facts. If you are not sure whether to state a fact or leave it out, +state it. Often people omit facts because they think they know what +causes the problem and they conclude that some details do not matter. +Play it safe and give a specific, complete example. Keep in mind that the purpose of a bug report is to enable someone to fix the bug if it is not known. Always write your bug reports on the @@ -1947,8 +1944,8 @@ things: * The exact version and configuration of Enblend or Enfuse. You can - get this by running it with the options `--version' and - `--verbose'. + get this by running it with the options '--version' and + '--verbose'. * A complete set of input images that will reproduce the bug. Strive for a minimal set of _small_(1) images. @@ -1957,7 +1954,7 @@ and its version number. * A complete list of any modifications you have made to the source. - Be precise about these changes. Show a `diff' for them. + Be precise about these changes. Show a 'diff' for them. * Details of any other deviations from the standard procedure for installing Enblend and Enfuse. @@ -1999,20 +1996,19 @@ ========================================= If you would like to write bug fixes or improvements for Enblend or -Enfuse, that is very helpful. When you send your changes, please -follow these guidelines to avoid causing extra work for us in studying -the patches. If you do not follow these guidelines, your information -might still be useful, but using it will take extra work. +Enfuse, that is very helpful. When you send your changes, please follow +these guidelines to avoid causing extra work for us in studying the +patches. If you do not follow these guidelines, your information might +still be useful, but using it will take extra work. * Send an explanation with your changes of what problem they fix or what improvement they bring about. For a bug fix, just include a copy of the bug report, and explain why the change fixes the bug. * Always include a proper bug report for the problem you think you - have fixed. We need to convince ourselves that the change is - right before installing it. Even if it is right, we might have - trouble judging it if we do not have a way to reproduce the - problem. + have fixed. We need to convince ourselves that the change is right + before installing it. Even if it is right, we might have trouble + judging it if we do not have a way to reproduce the problem. * Include all the comments that are appropriate to help people reading the source in the future understand why this change was @@ -2026,7 +2022,7 @@ * Use the version control system to make your diffs. Prefer the unified diff (http://en.wikipedia.org/wiki/Diff#Unified_format) - format: `hg diff --unified 4'. + format: 'hg diff --unified 4'. * You can increase the probability that your patch gets applied by basing it on a recent revision of the sources. @@ -2046,8 +2042,8 @@ *Contributors* - * PABLO D'ANGELO () added the - contrast criteria. + * PABLO D'ANGELO () added the contrast + criteria. * JOE BEDA: Win32 porting up to version 3.2. @@ -2067,9 +2063,9 @@ version 4.0. * CHRISTOPH SPIEL () added the gray - projectors, the LoG-based edge detection, an O(n)-algorithm for - the calculation of local contrast, entropy weighting, and various - other features. + projectors, the LoG-based edge detection, an O(n)-algorithm for the + calculation of local contrast, entropy weighting, and various other + features. * BRENT TOWNSHEND, : HDR support. @@ -2110,21 +2106,21 @@ free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless - of subject matter or whether it is published as a printed book. - We recommend this License principally for works whose purpose is + of subject matter or whether it is published as a printed book. We + recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, - that contains a notice placed by the copyright holder saying it - can be distributed under the terms of this License. Such a notice + that contains a notice placed by the copyright holder saying it can + be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member - of the public is a licensee, and is addressed as "you". You - accept the license if you copy, modify or distribute the work in a - way requiring permission under copyright law. + of the public is a licensee, and is addressed as "you". You accept + the license if you copy, modify or distribute the work in a way + requiring permission under copyright law. A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with @@ -2142,12 +2138,12 @@ regarding them. The "Invariant Sections" are certain Secondary Sections whose - titles are designated, as being those of Invariant Sections, in - the notice that says that the Document is released under this - License. If a section does not fit the above definition of - Secondary then it is not allowed to be designated as Invariant. - The Document may contain zero Invariant Sections. If the Document - does not identify any Invariant Sections then there are none. + titles are designated, as being those of Invariant Sections, in the + notice that says that the Document is released under this License. + If a section does not fit the above definition of Secondary then it + is not allowed to be designated as Invariant. The Document may + contain zero Invariant Sections. If the Document does not identify + any Invariant Sections then there are none. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice @@ -2158,27 +2154,27 @@ A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document - straightforwardly with generic text editors or (for images - composed of pixels) generic paint programs or (for drawings) some - widely available drawing editor, and that is suitable for input to - text formatters or for automatic translation to a variety of - formats suitable for input to text formatters. A copy made in an - otherwise Transparent file format whose markup, or absence of - markup, has been arranged to thwart or discourage subsequent - modification by readers is not Transparent. An image format is - not Transparent if used for any substantial amount of text. A - copy that is not "Transparent" is called "Opaque". + straightforwardly with generic text editors or (for images composed + of pixels) generic paint programs or (for drawings) some widely + available drawing editor, and that is suitable for input to text + formatters or for automatic translation to a variety of formats + suitable for input to text formatters. A copy made in an otherwise + Transparent file format whose markup, or absence of markup, has + been arranged to thwart or discourage subsequent modification by + readers is not Transparent. An image format is not Transparent if + used for any substantial amount of text. A copy that is not + "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, - SGML or XML using a publicly available DTD, and - standard-conforming simple HTML, PostScript or PDF designed for - human modification. Examples of transparent image formats include - PNG, XCF and JPG. Opaque formats include proprietary formats that - can be read and edited only by proprietary word processors, SGML or - XML for which the DTD and/or processing tools are not generally - available, and the machine-generated HTML, PostScript or PDF - produced by some word processors for output purposes only. + SGML or XML using a publicly available DTD, and standard-conforming + simple HTML, PostScript or PDF designed for human modification. + Examples of transparent image formats include PNG, XCF and JPG. + Opaque formats include proprietary formats that can be read and + edited only by proprietary word processors, SGML or XML for which + the DTD and/or processing tools are not generally available, and + the machine-generated HTML, PostScript or PDF produced by some word + processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the @@ -2213,8 +2209,8 @@ may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you - distribute a large enough number of copies you must also follow - the conditions in section 3. + distribute a large enough number of copies you must also follow the + conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. @@ -2228,12 +2224,11 @@ these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The - front cover must present the full title with all words of the - title equally prominent and visible. You may add other material - on the covers in addition. Copying with changes limited to the - covers, as long as they preserve the title of the Document and - satisfy these conditions, can be treated as verbatim copying in - other respects. + front cover must present the full title with all words of the title + equally prominent and visible. You may add other material on the + covers in addition. Copying with changes limited to the covers, as + long as they preserve the title of the Document and satisfy these + conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit @@ -2241,40 +2236,39 @@ adjacent pages. If you publish or distribute Opaque copies of the Document - numbering more than 100, you must either include a - machine-readable Transparent copy along with each Opaque copy, or - state in or with each Opaque copy a computer-network location from - which the general network-using public has access to download - using public-standard network protocols a complete Transparent - copy of the Document, free of added material. If you use the - latter option, you must take reasonably prudent steps, when you - begin distribution of Opaque copies in quantity, to ensure that - this Transparent copy will remain thus accessible at the stated - location until at least one year after the last time you - distribute an Opaque copy (directly or through your agents or - retailers) of that edition to the public. + numbering more than 100, you must either include a machine-readable + Transparent copy along with each Opaque copy, or state in or with + each Opaque copy a computer-network location from which the general + network-using public has access to download using public-standard + network protocols a complete Transparent copy of the Document, free + of added material. If you use the latter option, you must take + reasonably prudent steps, when you begin distribution of Opaque + copies in quantity, to ensure that this Transparent copy will + remain thus accessible at the stated location until at least one + year after the last time you distribute an Opaque copy (directly or + through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of - the Document well before redistributing any large number of - copies, to give them a chance to provide you with an updated - version of the Document. + the Document well before redistributing any large number of copies, + to give them a chance to provide you with an updated version of the + Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you - release the Modified Version under precisely this License, with - the Modified Version filling the role of the Document, thus - licensing distribution and modification of the Modified Version to - whoever possesses a copy of it. In addition, you must do these - things in the Modified Version: + release the Modified Version under precisely this License, with the + Modified Version filling the role of the Document, thus licensing + distribution and modification of the Modified Version to whoever + possesses a copy of it. In addition, you must do these things in + the Modified Version: A. Use in the Title Page (and on the covers, if any) a title - distinct from that of the Document, and from those of - previous versions (which should, if there were any, be listed - in the History section of the Document). You may use the - same title as a previous version if the original publisher of - that version gives permission. + distinct from that of the Document, and from those of previous + versions (which should, if there were any, be listed in the + History section of the Document). You may use the same title + as a previous version if the original publisher of that + version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in @@ -2304,31 +2298,30 @@ I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new - authors, and publisher of the Modified Version as given on - the Title Page. If there is no section Entitled "History" in - the Document, create one stating the title, year, authors, - and publisher of the Document as given on its Title Page, - then add an item describing the Modified Version as stated in - the previous sentence. + authors, and publisher of the Modified Version as given on the + Title Page. If there is no section Entitled "History" in the + Document, create one stating the title, year, authors, and + publisher of the Document as given on its Title Page, then add + an item describing the Modified Version as stated in the + previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for - previous versions it was based on. These may be placed in - the "History" section. You may omit a network location for a - work that was published at least four years before the - Document itself, or if the original publisher of the version - it refers to gives permission. + previous versions it was based on. These may be placed in the + "History" section. You may omit a network location for a work + that was published at least four years before the Document + itself, or if the original publisher of the version it refers + to gives permission. K. For any section Entitled "Acknowledgements" or "Dedications", - Preserve the Title of the section, and preserve in the - section all the substance and tone of each of the contributor + Preserve the Title of the section, and preserve in the section + all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. - L. Preserve all the Invariant Sections of the Document, - unaltered in their text and in their titles. Section numbers - or the equivalent are not considered part of the section - titles. + L. Preserve all the Invariant Sections of the Document, unaltered + in their text and in their titles. Section numbers or the + equivalent are not considered part of the section titles. M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version. @@ -2341,11 +2334,11 @@ If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no - material copied from the Document, you may at your option - designate some or all of these sections as invariant. To do this, - add their titles to the list of Invariant Sections in the Modified - Version's license notice. These titles must be distinct from any - other section titles. + material copied from the Document, you may at your option designate + some or all of these sections as invariant. To do this, add their + titles to the list of Invariant Sections in the Modified Version's + license notice. These titles must be distinct from any other + section titles. You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various @@ -2354,15 +2347,15 @@ definition of a standard. You may add a passage of up to five words as a Front-Cover Text, - and a passage of up to 25 words as a Back-Cover Text, to the end - of the list of Cover Texts in the Modified Version. Only one - passage of Front-Cover Text and one of Back-Cover Text may be - added by (or through arrangements made by) any one entity. If the - Document already includes a cover text for the same cover, - previously added by you or by arrangement made by the same entity - you are acting on behalf of, you may not add another; but you may - replace the old one, on explicit permission from the previous - publisher that added the old one. + and a passage of up to 25 words as a Back-Cover Text, to the end of + the list of Cover Texts in the Modified Version. Only one passage + of Front-Cover Text and one of Back-Cover Text may be added by (or + through arrangements made by) any one entity. If the Document + already includes a cover text for the same cover, previously added + by you or by arrangement made by the same entity you are acting on + behalf of, you may not add another; but you may replace the old + one, on explicit permission from the previous publisher that added + the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to @@ -2372,8 +2365,8 @@ You may combine the Document with other documents released under this License, under the terms defined in section 4 above for - modified versions, provided that you include in the combination - all of the Invariant Sections of all of the original documents, + modified versions, provided that you include in the combination all + of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. @@ -2400,8 +2393,8 @@ documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the - rules of this License for verbatim copying of each of the - documents in all other respects. + rules of this License for verbatim copying of each of the documents + in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert @@ -2412,8 +2405,8 @@ 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other - separate and independent documents or works, in or on a volume of - a storage or distribution medium, is called an "aggregate" if the + separate and independent documents or works, in or on a volume of a + storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this @@ -2456,26 +2449,26 @@ attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, - from you under this License will not have their licenses - terminated so long as such parties remain in full compliance. + from you under this License will not have their licenses terminated + so long as such parties remain in full compliance. - 10. FUTURE REVISIONS OF THIS LICENSE + 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See - `http://www.gnu.org/copyleft/'. + . Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been - published (not as a draft) by the Free Software Foundation. If - the Document does not specify a version number of this License, - you may choose any version ever published (not as a draft) by the - Free Software Foundation. + published (not as a draft) by the Free Software Foundation. If the + Document does not specify a version number of this License, you may + choose any version ever published (not as a draft) by the Free + Software Foundation.  File: enblend.info, Node: Program Index, Next: Syntactic-Comment Index, Prev: FDL, Up: Top @@ -2486,45 +2479,45 @@ [index] * Menu: -* ale: Helpful Programs. (line 20) -* align_image_stack (Hugin): Helpful Programs. (line 27) -* cinepaint <1>: Helpful Programs. (line 39) -* cinepaint: Extended Options. (line 143) -* convert (ImageMagick): Helpful Programs. (line 50) -* dcraw <1>: Helpful Programs. (line 10) -* dcraw: Standard Workflow. (line 9) -* display (ImageMagick): Helpful Programs. (line 50) -* exiftool: Helpful Programs. (line 78) -* exrdisplay (OpenEXR): Helpful Programs. (line 56) -* fulla (Hugin): Helpful Programs. (line 27) -* gimp <1>: Helpful Programs. (line 46) -* gimp <2>: Extended Options. (line 143) -* gimp: Standard Workflow. (line 9) -* gm (GraphicsMagick): Helpful Programs. (line 50) -* hugin <1>: Helpful Programs. (line 24) -* hugin <2>: Extended Options. (line 123) -* hugin <3>: Standard Workflow. (line 9) +* ale: Helpful Programs. (line 22) +* align_image_stack (Hugin): Helpful Programs. (line 29) +* cinepaint: Extended Options. (line 155) +* cinepaint <1>: Helpful Programs. (line 42) +* convert (ImageMagick): Helpful Programs. (line 54) +* dcraw: Standard Workflow. (line 10) +* dcraw <1>: Helpful Programs. (line 11) +* display (ImageMagick): Helpful Programs. (line 54) +* exiftool: Helpful Programs. (line 85) +* exrdisplay (OpenEXR): Helpful Programs. (line 61) +* fulla (Hugin): Helpful Programs. (line 29) +* gimp: Standard Workflow. (line 10) +* gimp <1>: Extended Options. (line 155) +* gimp <2>: Helpful Programs. (line 50) +* gm (GraphicsMagick): Helpful Programs. (line 54) * hugin: Overview. (line 25) -* identify (ImageMagick) <1>: Helpful Programs. (line 50) +* hugin <1>: Standard Workflow. (line 10) +* hugin <2>: Extended Options. (line 134) +* hugin <3>: Helpful Programs. (line 26) * identify (ImageMagick): Understanding Masks. (line 22) -* montage (ImageMagick): Helpful Programs. (line 50) -* nona (Hugin) <1>: Helpful Programs. (line 27) -* nona (Hugin): Extended Options. (line 123) -* PanoTools <1>: Standard Workflow. (line 9) +* identify (ImageMagick) <1>: Helpful Programs. (line 54) +* montage (ImageMagick): Helpful Programs. (line 54) +* nona (Hugin): Extended Options. (line 134) +* nona (Hugin) <1>: Helpful Programs. (line 29) * PanoTools: Overview. (line 25) -* pfshdrcalibrate (PFScalibration): Helpful Programs. (line 59) -* pfsin (PFSTools): Helpful Programs. (line 59) -* pfsout (PFSTools): Helpful Programs. (line 59) -* pfstmo_* (PFStmo): Helpful Programs. (line 59) -* pfsview (PFSTools): Helpful Programs. (line 59) -* PTmender (PanoTools): Helpful Programs. (line 32) -* PTOptimizer (PanoTools): Helpful Programs. (line 32) -* tifficc (LittleCMS): Helpful Programs. (line 82) -* tiffinfo (libtiff) <1>: Helpful Programs. (line 74) +* PanoTools <1>: Standard Workflow. (line 10) +* pfshdrcalibrate (PFScalibration): Helpful Programs. (line 64) +* pfsin (PFSTools): Helpful Programs. (line 64) +* pfsout (PFSTools): Helpful Programs. (line 64) +* pfstmo_* (PFStmo): Helpful Programs. (line 64) +* pfsview (PFSTools): Helpful Programs. (line 64) +* PTmender (PanoTools): Helpful Programs. (line 34) +* PTOptimizer (PanoTools): Helpful Programs. (line 34) +* tifficc (LittleCMS): Helpful Programs. (line 89) * tiffinfo (libtiff): Understanding Masks. (line 22) -* ufraw <1>: Helpful Programs. (line 13) -* ufraw: Standard Workflow. (line 9) -* ufraw-batch: Helpful Programs. (line 13) +* tiffinfo (libtiff) <1>: Helpful Programs. (line 80) +* ufraw: Standard Workflow. (line 10) +* ufraw <1>: Helpful Programs. (line 14) +* ufraw-batch: Helpful Programs. (line 14)  File: enblend.info, Node: Syntactic-Comment Index, Next: Option Index, Prev: Program Index, Up: Top @@ -2535,13 +2528,13 @@ [index] * Menu: -* enblend-response-file: Response Files. (line 106) -* enfuse-response-file: Response Files. (line 107) +* enblend-response-file: Response Files. (line 108) +* enfuse-response-file: Response Files. (line 109) * filename-globbing: Response Files. (line 152) -* glob: Response Files. (line 148) -* globbing: Response Files. (line 150) -* layer-selector: Response Files. (line 204) -* response-file: Response Files. (line 105) +* glob: Response Files. (line 150) +* globbing: Response Files. (line 151) +* layer-selector: Response Files. (line 206) +* response-file: Response Files. (line 107)  File: enblend.info, Node: Option Index, Next: General Index, Prev: Syntactic-Comment Index, Up: Top @@ -2554,63 +2547,66 @@ * --anneal: Mask Generation Options. (line 9) -* --ciecam: Extended Options. (line 22) +* --blend-colorspace: Extended Options. (line 21) +* --ciecam: Extended Options. (line 55) * --coarse-mask: Mask Generation Options. - (line 55) + (line 54) * --compression: Common Options. (line 23) -* --depth: Extended Options. (line 39) +* --depth: Extended Options. (line 60) * --dijkstra: Mask Generation Options. - (line 95) -* --fallback-profile: Extended Options. (line 131) + (line 94) +* --fallback-profile: Extended Options. (line 142) * --fine-mask: Mask Generation Options. - (line 108) -* --gpu: Extended Options. (line 151) -* --help: Common Options. (line 104) + (line 107) +* --gpu: Extended Options. (line 162) +* --help: Common Options. (line 107) * --image-difference: Mask Generation Options. - (line 115) -* --layer-selector: Common Options. (line 78) -* --levels: Common Options. (line 108) + (line 114) +* --layer-selector: Common Options. (line 81) +* --levels: Common Options. (line 111) * --load-masks: Mask Generation Options. - (line 171) + (line 172) * --mask-vectorize: Mask Generation Options. - (line 178) -* --no-ciecam: Extended Options. (line 175) + (line 179) +* --no-ciecam: Extended Options. (line 186) * --no-optimize: Mask Generation Options. (line 225) -* --no-parameter: Common Options. (line 162) +* --no-parameter: Common Options. (line 164) * --optimize: Mask Generation Options. - (line 233) + (line 234) * --optimizer-weights: Mask Generation Options. (line 256) -* --output: Common Options. (line 152) -* --parameter: Common Options. (line 158) +* --output: Common Options. (line 154) +* --parameter: Common Options. (line 160) * --primary-seam-generator: Mask Generation Options. (line 284) * --save-masks: Mask Generation Options. (line 307) * --smooth-difference: Mask Generation Options. - (line 341) -* --verbose: Common Options. (line 171) -* --version: Common Options. (line 206) + (line 340) +* --verbose: Common Options. (line 174) +* --version: Common Options. (line 208) * --visualize: Mask Generation Options. (line 362) -* --wrap: Common Options. (line 213) +* --wrap: Common Options. (line 215) * -a: Common Options. (line 15) -* -b <1>: Tuning Memory Usage. (line 6) * -b: Extended Options. (line 10) -* -c: Extended Options. (line 22) -* -d: Extended Options. (line 39) -* -f: Extended Options. (line 119) -* -g: Extended Options. (line 139) -* -h: Common Options. (line 104) -* -l: Common Options. (line 108) +* -b <1>: Tuning Memory Usage. (line 6) +* -b <2>: Tuning Memory Usage. (line 25) +* -c: Extended Options. (line 55) +* -d: Extended Options. (line 60) +* -f: Extended Options. (line 130) +* -g: Extended Options. (line 151) +* -h: Common Options. (line 107) +* -l: Common Options. (line 111) +* -m: Extended Options. (line 174) * -m <1>: Tuning Memory Usage. (line 6) -* -m: Extended Options. (line 163) -* -o: Common Options. (line 152) -* -V: Common Options. (line 206) -* -v: Common Options. (line 171) -* -w: Common Options. (line 213) -* -x: Common Options. (line 265) +* -m <2>: Tuning Memory Usage. (line 25) +* -o: Common Options. (line 154) +* -v: Common Options. (line 174) +* -V: Common Options. (line 208) +* -w: Common Options. (line 215) +* -x: Common Options. (line 267)  File: enblend.info, Node: General Index, Prev: Option Index, Up: Top @@ -2621,68 +2617,79 @@ [index] * Menu: -* # (response file comment): Response Files. (line 56) -* 360o panoramas: Common Options. (line 213) -* @ (response file prefix): Response Files. (line 6) -* a.tif: Common Options. (line 154) -* affine transformation: Standard Workflow. (line 48) -* algorithms, globbing: Response Files. (line 146) -* alpha channel <1>: Standard Workflow. (line 69) +* '#' (response file comment): Response Files. (line 56) +* 360o panoramas: Common Options. (line 215) +* '@' (response file prefix): Response Files. (line 6) +* 'a.tif': Common Options. (line 156) +* affine transformation: Standard Workflow. (line 49) +* algorithms, globbing: Response Files. (line 148) +* algorithms, globbing <1>: Response Files. (line 192) * alpha channel: Overview. (line 18) -* alpha channel, associated: Extended Options. (line 139) +* alpha channel <1>: Standard Workflow. (line 70) +* alpha channel, associated: Extended Options. (line 151) * anneal parameters: Mask Generation Options. (line 9) -* arithmetic JPEG compression: Common Options. (line 41) +* arithmetic JPEG compression: Common Options. (line 42) * authors, list of: Authors. (line 6) * binary mask: Understanding Masks. (line 6) -* bits per channel: Extended Options. (line 39) +* bits per channel: Extended Options. (line 60) +* blend colorspace: Extended Options. (line 21) * blur difference image: Mask Generation Options. - (line 341) + (line 340) * bug database, LaunchPad: Bug Reports. (line 12) * bug reports: Bug Reports. (line 6) +* bug reports <1>: Bug Reports. (line 9) * Burt-Adelson multiresolution spline: Overview. (line 6) -* canvas size: Extended Options. (line 119) -* channel width: Extended Options. (line 39) +* canvas size: Extended Options. (line 130) +* channel width: Extended Options. (line 60) * channel, alpha: Overview. (line 18) -* checkpoint results: Common Options. (line 265) +* checkpoint results: Common Options. (line 267) * chrominance weight: Mask Generation Options. - (line 115) -* CIECAM02 <1>: Color Profiles. (line 13) -* CIECAM02: Extended Options. (line 22) + (line 114) +* CIECAM02: Extended Options. (line 55) +* CIECAM02 <1>: Extended Options. (line 142) +* CIECAM02 <2>: Extended Options. (line 186) +* CIECAM02 <3>: Color Profiles. (line 12) +* CIECAM02 colorspace: Extended Options. (line 45) * coarse mask: Mask Generation Options. - (line 55) -* color appearance model <1>: Color Profiles. (line 13) -* color appearance model: Extended Options. (line 22) -* color cube, RGB: Color Profiles. (line 13) -* color profile <1>: Color Profiles. (line 6) -* color profile: Extended Options. (line 25) -* color space, sRGB <1>: Color Profiles. (line 24) -* color space, sRGB: Extended Options. (line 25) + (line 54) +* color appearance model: Extended Options. (line 21) +* color appearance model <1>: Extended Options. (line 55) +* color appearance model <2>: Extended Options. (line 186) +* color appearance model <3>: Color Profiles. (line 12) +* color cube, RGB: Color Profiles. (line 12) +* color profile: Color Profiles. (line 6) +* color profile <1>: Color Profiles. (line 9) +* color space, sRGB: Color Profiles. (line 24) * colors, visualization image: Mask Generation Options. (line 420) +* colorspace, blend: Extended Options. (line 21) * compression: Common Options. (line 23) -* compression, arithmetic JPEG: Common Options. (line 41) -* compression, deflate: Common Options. (line 52) +* compression, arithmetic JPEG: Common Options. (line 42) +* compression, deflate: Common Options. (line 54) * compression, JPEG: Common Options. (line 29) -* compression, LZW: Common Options. (line 63) -* compression, packbits: Common Options. (line 67) -* conversion, raw: Standard Workflow. (line 34) +* compression, JPEG <1>: Common Options. (line 60) +* compression, LZW: Common Options. (line 66) +* compression, packbits: Common Options. (line 70) +* conversion, raw: Standard Workflow. (line 35) * D50 white point: Color Profiles. (line 55) -* default layer selection: Response Files. (line 204) -* default output filename: Common Options. (line 154) -* deflate compression: Common Options. (line 52) +* default layer selection: Response Files. (line 206) +* default output filename: Common Options. (line 156) +* deflate compression: Common Options. (line 54) * delta-E: Mask Generation Options. - (line 140) + (line 141) * difference image: Mask Generation Options. - (line 115) + (line 114) * DIJKSTRA radius: Mask Generation Options. - (line 95) -* double precision float, IEEE754: Extended Options. (line 92) -* fallback profile: Extended Options. (line 131) + (line 94) +* DIJKSTRA radius <1>: Mask Generation Options. + (line 404) +* double precision float, IEEE754: Extended Options. (line 107) +* fallback profile: Extended Options. (line 142) * feathering, detrimental effect of: Overview. (line 25) * filename, literal: Invocation. (line 10) * fine mask: Mask Generation Options. - (line 108) + (line 107) * format of response file: Response Files. (line 56) * free documentation license (FDL): FDL. (line 6) * frozen seam-line endpoint: Mask Generation Options. @@ -2690,17 +2697,20 @@ * general index: General Index. (line 6) * generator, seam: Mask Generation Options. (line 284) -* glob(7): Response Files. (line 171) -* globbing algorithm literal: Response Files. (line 157) -* globbing algorithm none: Response Files. (line 179) -* globbing algorithm sh: Response Files. (line 188) -* globbing algorithm shell: Response Files. (line 182) -* globbing algorithm wildcard: Response Files. (line 157) -* globbing algorithms: Response Files. (line 146) +* glob(7): Response Files. (line 172) +* globbing algorithm 'literal': Response Files. (line 157) +* globbing algorithm 'literal' <1>: Response Files. (line 165) +* globbing algorithm 'none': Response Files. (line 180) +* globbing algorithm 'sh': Response Files. (line 190) +* globbing algorithm 'shell': Response Files. (line 183) +* globbing algorithm 'wildcard': Response Files. (line 157) +* globbing algorithm 'wildcard' <1>: Response Files. (line 172) +* globbing algorithms: Response Files. (line 148) +* globbing algorithms <1>: Response Files. (line 192) * GNU free documentation license: FDL. (line 6) -* GPU (Graphics Processing Unit): Extended Options. (line 151) -* grammar, response file: Response Files. (line 70) -* grammar, syntactic comment: Response Files. (line 138) +* GPU (Graphics Processing Unit): Extended Options. (line 162) +* grammar, response file: Response Files. (line 71) +* grammar, syntactic comment: Response Files. (line 140) * graph-cut (GC): Mask Generation Options. (line 301) * graphcut (GC): Primary Seam Generators. @@ -2708,25 +2718,26 @@ * graphcut, details: Primary Seam Generators. (line 29) * graphcut, limitations: Primary Seam Generators. - (line 59) -* graphics processing unit: Extended Options. (line 151) -* half precision float, OpenEXR: Extended Options. (line 108) + (line 58) +* graphics processing unit: Extended Options. (line 162) +* half precision float, OpenEXR: Extended Options. (line 121) * helpful programs: Helpful Programs. (line 6) * hue-luminance maximum: Mask Generation Options. (line 130) * Hugin: Bug Reports. (line 95) +* ICC profile: Extended Options. (line 28) * ICC profile <1>: Color Profiles. (line 6) -* ICC profile: Extended Options. (line 25) -* IEEE754 double precision float: Extended Options. (line 92) -* IEEE754 single precision float: Extended Options. (line 82) +* ICC profile <2>: Color Profiles. (line 9) +* IEEE754 double precision float: Extended Options. (line 107) +* IEEE754 single precision float: Extended Options. (line 99) * image cache: Tuning Memory Usage. (line 9) * image cache, block size: Extended Options. (line 10) -* image cache, cache size: Extended Options. (line 163) +* image cache, cache size: Extended Options. (line 174) * image cache, location: Tuning Memory Usage. (line 20) * image colors, visualization: Mask Generation Options. (line 420) * image difference: Mask Generation Options. - (line 115) + (line 114) * image, multi-layer: Overview. (line 39) * image, visualization: Mask Generation Options. (line 379) @@ -2742,72 +2753,74 @@ * KImageFuser: Bug Reports. (line 95) * LaunchPad: Bug Reports. (line 12) * LaunchPad, bug database: Bug Reports. (line 12) -* layer selection: Common Options. (line 78) -* layer selection, all layers: Common Options. (line 83) -* layer selection, default: Response Files. (line 204) -* layer selection, first layer: Common Options. (line 86) -* layer selection, largest-layer: Common Options. (line 90) -* layer selection, no layer: Common Options. (line 97) -* lens distortion, correction of: Standard Workflow. (line 48) -* levels, pyramid: Common Options. (line 108) -* LibJPEG: Helpful Programs. (line 63) -* LibPNG: Helpful Programs. (line 66) -* LibTiff: Helpful Programs. (line 70) +* layer selection: Common Options. (line 81) +* layer selection <1>: Common Options. (line 81) +* layer selection, all layers: Common Options. (line 86) +* layer selection, default: Response Files. (line 206) +* layer selection, first layer: Common Options. (line 89) +* layer selection, largest-layer: Common Options. (line 93) +* layer selection, no layer: Common Options. (line 100) +* lens distortion, correction of: Standard Workflow. (line 49) +* levels, pyramid: Common Options. (line 111) +* LibJPEG: Helpful Programs. (line 69) +* LibPNG: Helpful Programs. (line 72) +* LibTiff: Helpful Programs. (line 76) * literal filename: Invocation. (line 10) * load mask: Mask Generation Options. - (line 171) + (line 172) * loops in seam line: Mask Generation Options. (line 208) * luminance weight: Mask Generation Options. - (line 115) + (line 114) * luminance-hue maximum: Mask Generation Options. (line 130) -* LZW compression: Common Options. (line 63) -* mask template character, %: Mask Generation Options. - (line 424) -* mask template character, B: Mask Generation Options. - (line 475) -* mask template character, b: Mask Generation Options. - (line 468) -* mask template character, D: Mask Generation Options. - (line 465) -* mask template character, d: Mask Generation Options. - (line 458) -* mask template character, E: Mask Generation Options. - (line 494) -* mask template character, e: Mask Generation Options. - (line 488) -* mask template character, F: Mask Generation Options. - (line 484) -* mask template character, f: Mask Generation Options. - (line 478) -* mask template character, i: Mask Generation Options. - (line 427) -* mask template character, n: Mask Generation Options. - (line 442) -* mask template character, P: Mask Generation Options. - (line 455) -* mask template character, p: Mask Generation Options. - (line 447) +* LZW compression: Common Options. (line 66) +* mask template character, '%': Mask Generation Options. + (line 423) +* mask template character, 'b': Mask Generation Options. + (line 467) +* mask template character, 'B': Mask Generation Options. + (line 474) +* mask template character, 'd': Mask Generation Options. + (line 457) +* mask template character, 'D': Mask Generation Options. + (line 464) +* mask template character, 'e': Mask Generation Options. + (line 487) +* mask template character, 'E': Mask Generation Options. + (line 493) +* mask template character, 'f': Mask Generation Options. + (line 477) +* mask template character, 'F': Mask Generation Options. + (line 483) +* mask template character, 'i': Mask Generation Options. + (line 426) +* mask template character, 'n': Mask Generation Options. + (line 441) +* mask template character, 'p': Mask Generation Options. + (line 446) +* mask template character, 'P': Mask Generation Options. + (line 454) * mask template characters, table of: Mask Generation Options. - (line 496) + (line 495) * mask, binary: Understanding Masks. (line 6) * mask, coarse: Mask Generation Options. - (line 55) + (line 54) * mask, fine: Mask Generation Options. - (line 108) + (line 107) * mask, generation: Mask Generation Options. - (line 90) + (line 89) * mask, input files: Understanding Masks. (line 18) * mask, load: Mask Generation Options. - (line 171) + (line 172) * mask, optimization visualization: Mask Generation Options. (line 362) * mask, save: Mask Generation Options. (line 307) * mask, vectorization distance: Mask Generation Options. - (line 178) + (line 179) * mask, weight: Understanding Masks. (line 6) +* mask, weight <1>: Understanding Masks. (line 91) * masks, understanding: Understanding Masks. (line 6) * match quality: Mask Generation Options. (line 162) @@ -2816,30 +2829,34 @@ * memory, tuning usage of: Tuning Memory Usage. (line 6) * multi-directory TIFF: Overview. (line 39) * multi-layer image: Overview. (line 39) +* nearest feature transform (NFT): Mask Generation Options. + (line 298) * nearest feature transform (NFT) <1>: Primary Seam Generators. (line 11) -* nearest feature transform (NFT): Mask Generation Options. - (line 297) * nearest-feature transform (NFT): Mask Generation Options. - (line 90) + (line 89) +* nearest-feature transform (NFT) <1>: Mask Generation Options. + (line 228) * nearest-feature transform (NFT), Graph-Cut (GC): Mask Generation Options. (line 410) * Octave: Bug Reports. (line 6) * only save mask: Mask Generation Options. - (line 318) -* OpenEXR, data format: Extended Options. (line 104) -* OpenEXR, half precision float: Extended Options. (line 108) + (line 317) +* OpenEXR, data format: Extended Options. (line 117) +* OpenEXR, half precision float: Extended Options. (line 121) * optimize seam: Mask Generation Options. (line 225) +* optimize seam <1>: Mask Generation Options. + (line 234) * optimize strategy: Mask Generation Options. (line 252) * optimize, anneal parameters: Mask Generation Options. (line 9) * optimizer weights: Mask Generation Options. (line 256) +* optimizer, simulated annealing: Extended Options. (line 165) * optimizer, simulated annealing <1>: Mask Generation Options. (line 9) -* optimizer, simulated annealing: Extended Options. (line 154) * option index: Option Index. (line 6) * options, common: Common Options. (line 6) * options, extended: Extended Options. (line 6) @@ -2847,44 +2864,48 @@ (line 6) * order, of processing: Response Files. (line 9) * output file compression: Common Options. (line 23) -* output filename, default: Common Options. (line 154) -* output image, set size of: Extended Options. (line 119) +* output filename, default: Common Options. (line 156) +* output image, set size of: Extended Options. (line 130) * overview: Overview. (line 6) -* packbits compression: Common Options. (line 67) -* parallax error: Standard Workflow. (line 58) +* packbits compression: Common Options. (line 70) +* parallax error: Standard Workflow. (line 59) * perceptual rendering intent: Color Profiles. (line 53) -* photometric alignment: Standard Workflow. (line 50) -* primary seam generator <1>: Primary Seam Generators. - (line 6) +* photometric alignment: Standard Workflow. (line 51) * primary seam generator: Mask Generation Options. (line 284) +* primary seam generator <1>: Primary Seam Generators. + (line 6) * problem reports: Bug Reports. (line 9) * processing order: Response Files. (line 9) -* profile, fallback: Extended Options. (line 131) +* profile, fallback: Extended Options. (line 142) +* profile, ICC: Extended Options. (line 28) * profile, ICC <1>: Color Profiles. (line 6) -* profile, ICC: Extended Options. (line 25) +* profile, ICC <2>: Color Profiles. (line 9) * program index: Program Index. (line 6) * programs, helpful additional: Helpful Programs. (line 6) -* pyramid levels: Common Options. (line 108) +* pyramid levels: Common Options. (line 111) * quality, match: Mask Generation Options. (line 162) * radius, DIJKSTRA: Mask Generation Options. - (line 95) -* raw conversion: Standard Workflow. (line 34) + (line 94) +* radius, DIJKSTRA <1>: Mask Generation Options. + (line 404) +* raw conversion: Standard Workflow. (line 35) * rendering intent, perceptual: Color Profiles. (line 53) -* response file <1>: Response Files. (line 6) * response file: Invocation. (line 10) -* response file, comment (#): Response Files. (line 56) -* response file, force recognition of: Response Files. (line 100) +* response file <1>: Response Files. (line 6) +* response file, comment ('#'): Response Files. (line 56) +* response file, force recognition of: Response Files. (line 102) * response file, format: Response Files. (line 56) -* response file, grammar: Response Files. (line 70) -* response file, syntactic comment: Response Files. (line 126) -* results, checkpoint: Common Options. (line 265) -* RGB color cube: Color Profiles. (line 13) +* response file, grammar: Response Files. (line 71) +* response file, syntactic comment: Response Files. (line 128) +* results, checkpoint: Common Options. (line 267) +* RGB color cube: Color Profiles. (line 12) +* RGB-cube: Extended Options. (line 37) * save mask: Mask Generation Options. (line 307) * save mask, only: Mask Generation Options. - (line 318) + (line 317) * seam generation: Primary Seam Generators. (line 6) * seam generation, details: Primary Seam Generators. @@ -2893,31 +2914,35 @@ (line 208) * seam optimization: Mask Generation Options. (line 225) +* seam optimization <1>: Mask Generation Options. + (line 234) +* seam optimization <2>: Mask Generation Options. + (line 256) * seam, primary generator: Mask Generation Options. (line 284) * seam-line endpoint, frozen: Mask Generation Options. (line 412) +* simulated annealing optimizer: Extended Options. (line 165) * simulated annealing optimizer <1>: Mask Generation Options. (line 9) -* simulated annealing optimizer: Extended Options. (line 154) -* single precision float, IEEE754: Extended Options. (line 82) -* size, canvas: Extended Options. (line 119) +* single precision float, IEEE754: Extended Options. (line 99) +* size, canvas: Extended Options. (line 130) * smooth difference image: Mask Generation Options. - (line 341) + (line 340) * SourceForge: Overview. (line 45) -* sRGB color space <1>: Color Profiles. (line 24) -* sRGB color space: Extended Options. (line 25) -* syntactic comment, grammar: Response Files. (line 138) -* syntactic comment, response file: Response Files. (line 126) +* sRGB: Extended Options. (line 37) +* sRGB color space: Color Profiles. (line 24) +* syntactic comment, grammar: Response Files. (line 140) +* syntactic comment, response file: Response Files. (line 128) * syntactic-comment index: Syntactic-Comment Index. (line 6) * TIFF, multi-directory: Overview. (line 39) -* tiffcopy: Overview. (line 39) -* tiffsplit: Overview. (line 39) -* TMPDIR: Tuning Memory Usage. (line 20) -* transformation, affine: Standard Workflow. (line 48) +* 'tiffcopy': Overview. (line 39) +* 'tiffsplit': Overview. (line 39) +* 'TMPDIR': Tuning Memory Usage. (line 20) +* transformation, affine: Standard Workflow. (line 49) * understanding masks: Understanding Masks. (line 6) -* virtual reality: Common Options. (line 223) +* virtual reality: Common Options. (line 225) * visualization image: Mask Generation Options. (line 379) * visualization image colors: Mask Generation Options. @@ -2925,65 +2950,66 @@ * visualization of mask: Mask Generation Options. (line 362) * weight mask: Understanding Masks. (line 6) +* weight mask <1>: Understanding Masks. (line 91) * weight, chrominance: Mask Generation Options. - (line 115) + (line 114) * weight, luminance: Mask Generation Options. - (line 115) + (line 114) * weights, optimizer: Mask Generation Options. (line 256) * white point, D50: Color Profiles. (line 55) * workflow: Workflow. (line 6) -* workflow with Enblend: Standard Workflow. (line 9) -* workflow with Enfuse: Standard Workflow. (line 9) +* workflow with Enblend: Standard Workflow. (line 10) +* workflow with Enfuse: Standard Workflow. (line 10) * workflow, external mask manipulation: External Mask Manipulation. (line 6) * workflow, external masks: External Mask Manipulation. (line 33) * workflow, standard: Standard Workflow. (line 6) -* wrap around: Common Options. (line 213) +* wrap around: Common Options. (line 215)  Tag Table: -Node: Top890 -Node: Overview2080 -Ref: Overview-Footnote-14519 -Ref: Overview-Footnote-24700 -Node: Workflow4842 -Node: Standard Workflow5241 -Ref: Figure:photographic-workflow5501 -Node: External Mask Manipulation8175 -Ref: Figure:external-mask-workflow9492 -Node: Invocation9977 -Node: Image Requirements10681 -Node: Response Files12155 -Ref: Table:response-file-format14179 -Ref: Table:response-file-syntactic-comment16644 -Ref: Table:globbing-algorithms17545 -Node: Common Options19004 -Ref: Common Options-Footnote-128436 -Ref: Common Options-Footnote-228628 -Node: Extended Options28787 -Ref: Extended Options-Footnote-135419 -Node: Mask Generation Options35492 -Ref: Table:mask-generation38153 -Ref: Table:optimizer-strategies45564 -Ref: Table:visualization-colors51816 -Ref: Table:mask-template-characters52731 -Ref: Mask Generation Options-Footnote-154983 -Node: Primary Seam Generators55211 -Node: Color Profiles58086 -Node: Understanding Masks60536 -Node: Tuning Memory Usage64329 -Ref: Table:cache-size-settings67071 -Node: Helpful Programs67507 -Node: Bug Reports71243 -Ref: Bug Reports-Footnote-176898 -Node: Authors76968 -Node: FDL78133 -Node: Program Index99114 -Node: Syntactic-Comment Index102110 -Node: Option Index102799 -Node: General Index107164 +Node: Top865 +Node: Overview2054 +Ref: Overview-Footnote-14493 +Ref: Overview-Footnote-24675 +Node: Workflow4817 +Node: Standard Workflow5216 +Ref: Figure:photographic-workflow5487 +Node: External Mask Manipulation8186 +Ref: Figure:external-mask-workflow9512 +Node: Invocation10022 +Node: Image Requirements10726 +Node: Response Files12196 +Ref: Table:response-file-format14231 +Ref: Table:response-file-syntactic-comment16706 +Ref: Table:globbing-algorithms17617 +Node: Common Options19076 +Ref: Common Options-Footnote-128527 +Ref: Common Options-Footnote-228719 +Node: Extended Options28878 +Ref: Extended Options-Footnote-136325 +Node: Mask Generation Options36398 +Ref: Table:mask-generation39058 +Ref: Table:optimizer-strategies46445 +Ref: Table:visualization-colors52636 +Ref: Table:mask-template-characters53559 +Ref: Mask Generation Options-Footnote-155811 +Node: Primary Seam Generators56040 +Node: Color Profiles58916 +Node: Understanding Masks61365 +Node: Tuning Memory Usage65157 +Ref: Table:cache-size-settings67908 +Node: Helpful Programs68343 +Node: Bug Reports72081 +Ref: Bug Reports-Footnote-177730 +Node: Authors77800 +Node: FDL78965 +Node: Program Index99926 +Node: Syntactic-Comment Index102922 +Node: Option Index103611 +Node: General Index108195  End Tag Table diff -Nru enblend-enfuse-4.1.3+dfsg/doc/enblend.texi enblend-enfuse-4.1.4+dfsg/doc/enblend.texi --- enblend-enfuse-4.1.3+dfsg/doc/enblend.texi 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/doc/enblend.texi 2015-08-07 14:44:45.000000000 +0000 @@ -44,7 +44,7 @@ a tool for compositing images in such a way that the seam between the images is invisible, or at least very difficult to see. -Copyright @copyright{} 2004--2014 @sc{Andrew Mihal}. +Copyright @copyright{} 2004--2015 @sc{Andrew Mihal}. @quotation Permission is granted to copy, distribute and/or modify this document @@ -508,9 +508,9 @@ twice as large as the previous one. So, the zeroth layer, the original image, obviously defines the image at single-pixel scale, the first level works at two-pixel scale, and generally, the @math{n}-th -level contains image data at @power{2, n}-pixel scale. This is the +level contains image data at 2^n-pixel scale. This is the reason why an image of -@math{width}@classictimes{}@/@math{height}@dmn{pixels} cannot be +@math{width}x@/@math{height}@dmn{pixels} cannot be deconstructed into a pyramid of more than @ifinfo @display @@ -1104,33 +1104,61 @@ for this option to be effective. Find out about extra features with @code{enblend --version --verbose}. +@item --blend-colorspace=@var{COLORSPACE} +@opindex --blend-colorspace +@cindex blend colorspace +@cindex colorspace, blend +@cindex color appearance model + +Force blending in selected @var{COLORSPACE}. For well matched images +this option should not change the output image much. However, if +Enblend must blend vastly different colors (as e.g. anti-colors) the +result image heavily depends on the @var{COLORSPACE}. + +Usually, Enblend chooses defaults depending on the input images: +@itemize +@item +@cindex @acronym{ICC} profile +@cindex profile, @acronym{ICC} + For input images @emph{with} @acronym{ICC} profiles the +default is to use @acronym{CIECAM} colorspace. + +@item + Images @emph{without} color profiles and floating-point images +are blended in the @acronym{RGB}-color cube by default. +@end itemize + +Enblend supports two blend colorspaces: + +@table @asis +@item @samp{IDENTITY}, @samp{ID}, @samp{UNIT} +@cindex @acronym{sRGB} +@cindex @acronym{RGB}-cube +Naively compute blended colors in the luminance interval (grayscale +images) or @acronym{RGB}-cube (@acronym{RGB} images) spanned by the +input @acronym{ICC} profile or @acronym{sRGB} if no profiles are +present. Consider option@tie{}@option{--fallback-profile} to force a +different profile than @acronym{sRGB} on all input images. + +@item @samp{CIECAM}, @samp{CIECAM02}, @samp{JCH} +@cindex @acronym{CIECAM02} colorspace +Blend pixels in the @acronym{CIECAM02} colorspace. +@end table + +Please keep in mind that by using different blend colorspaces, +blending may not only change the colors in the output image, but +Enblend may choose different seam line routes as some seam-line +optimizers are guided by image differences, which may be different +when viewed in different colorspaces. + @item -c @itemx --ciecam @opindex -c @opindex --ciecam @cindex color appearance model @cindex @acronym{CIECAM02} -Force the use of the @acronym{CIECAM02} color appearance model for -blending colors instead of blending inside the @acronym{RGB} color -cube. - -@cindex color profile -@cindex @acronym{ICC} profile -@cindex profile, @acronym{ICC} -@cindex @acronym{sRGB} color space -@cindex color space, @acronym{sRGB} -All input files should have identical @acronym{ICC} profiles when this -option is specified. If no @acronym{ICC} profile is present, Enblend -assumes that all images use the @acronym{sRGB} color space. -@xref{Color Profiles}. - -Please keep in mind that using @acronym{CIECAM02} blending may not -only change the colors in the output image, but Enblend may choose -different seam line routes as some seam-line optimizers are guided by -image differences. - -This option can be negated; see option@tie{}@option{--no-ciecam} -below. +Use @samp{--blend-colorspace=CIECAM} instead. To mimic the negated +option @option{--no-ciecam} use @samp{--blend-colorspace=IDENTITY}. @item -d @itemx --depth=@var{DEPTH} @@ -1194,11 +1222,11 @@ @itemize @item -Minimum normalized value: @semilog{1.2, -38} +Minimum normalized value: 1.2e-38 @item -Epsilon: @semilog{1.2, -7} +Epsilon: 1.2e-7 @item -Maximum finite value: @semilog{3.4, 38} +Maximum finite value: 3.4e38 @end itemize @c IEEE double: 64 bits, n = 53, k = 64 - n - 1 = 10 @@ -1210,11 +1238,11 @@ @itemize @item -Minimum normalized value: @semilog{2.2, -308} +Minimum normalized value: 2.2e-308 @item -Epsilon: @semilog{2.2, -16} +Epsilon: 2.2e-16 @item -Maximum finite value: @semilog{1.8, 308} +Maximum finite value: 1.8e308 @end itemize @end table @@ -1236,11 +1264,11 @@ @itemize @item -Minimum normalized value: @semilog{9.3, -10} +Minimum normalized value: 9.3e-10 @item -Epsilon: @semilog{2.0, -3} +Epsilon: 2.0e-3 @item -Maximum finite value: @semilog{4.3, 9} +Maximum finite value: 4.3e9 @end itemize @item -f @var{WIDTH}x@var{HEIGHT} @@ -1250,7 +1278,7 @@ @cindex canvas size @cindex size, canvas Ensure that the minimum ``canvas'' size of the output image is at -least @var{WIDTH}@classictimes{}@/@var{HEIGHT}. Optionally specify +least @var{WIDTH}x@/@var{HEIGHT}. Optionally specify the @var{XOFFSET} and @var{YOFFSET}, too. @pindex nona @r{(Hugin)} @@ -1270,8 +1298,8 @@ @cindex fallback profile @cindex @acronym{CIECAM02} Use the @acronym{ICC} profile in @var{PROFILE-FILENAME} instead of the -default @acronym{sRGB}. See option@tie{}@option{--ciecam} and -@ref{Color Profiles}. +default @acronym{sRGB}. See option@tie{}@option{--blend-colorspace} +and @ref{Color Profiles}. This option only is effective if the input images come without color profiles and blending is performed in @acronym{CIECAM02} color @@ -1330,11 +1358,10 @@ @opindex --no-ciecam @cindex color appearance model @cindex @acronym{CIECAM02} -Disable the use of the @acronym{CIECAM02} color appearance model for -blending colors. +Use @samp{--blend-colorspace=IDENTITY} instead. -See option@tie{}@option{--ciecam} for details. Also see @ref{Color -Profiles}. +See option@tie{}@option{--blend-colorspace} for details. Also see +@ref{Color Profiles}. @end table @@ -1572,7 +1599,7 @@ @value{src::default-coarseness-factor}, this means, option@tie{}@option{--coarse-mask} shrinks the overlapping @emph{areas} by a factor of -@math{@value{src::default-coarseness-factor}@classictimes{}@/@value{src::default-coarseness-factor}}. +@math{@value{src::default-coarseness-factor}x@/@value{src::default-coarseness-factor}}. With @var{FACTOR}@tie{}=@tie{}8 the total memory allocated during a run of Enblend shrinks approximately by 80% and the maximum amount of memory in use at a time is decreased to 60% (Enblend compiled with @@ -2494,7 +2521,7 @@ When using this option in conjunction with option@tie{}@code{--coarse-mask}=@/@var{FACTOR}, keep in mind that the smoothing occurs @emph{after} the overlap regions have been shrunken. -Thus, blurring affects a @var{FACTOR}@classictimes{}@/@var{FACTOR} +Thus, blurring affects a @var{FACTOR}x@/@var{FACTOR} times larger area in the original images. Valid range: @var{RADIUS} @geq{} @value{src::minimum-smooth-difference}. @@ -2606,7 +2633,7 @@ @rimage{seam-line-visualization} @caption{Seam-line visualization of a simple overlap. The -853@classictimes{}238@dmn{pixel} image is shown at a magification of +853x238@dmn{pixel} image is shown at a magification of 100%.} @shortcaption{Seam-line visualization} @@ -2618,7 +2645,7 @@ @rimage{seam-line-visualization, 15cm} @caption{Seam-line visualization of a simple overlap. The -853@classictimes{}238@dmn{pixel} image has been rescaled to a width of +853x238@dmn{pixel} image has been rescaled to a width of approximately 15@dmn{cm}.} @shortcaption{Seam-line visualization} @@ -2629,7 +2656,7 @@ @float Figure,Figure:seam-line-visualization @rimage{seam-line-visualization, 15cm} -@caption{Seam-line visualization of a simple overlap. The 853@classictimes{}238@dmn{pixel} image has been rescaled to a width of approximately 15@dmn{cm}.} +@caption{Seam-line visualization of a simple overlap. The 853x238@dmn{pixel} image has been rescaled to a width of approximately 15@dmn{cm}.} @shortcaption{Seam-line visualization} @end float diff -Nru enblend-enfuse-4.1.3+dfsg/doc/enfuse.info enblend-enfuse-4.1.4+dfsg/doc/enfuse.info --- enblend-enfuse-4.1.3+dfsg/doc/enfuse.info 2014-03-19 07:29:20.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/doc/enfuse.info 2015-09-28 06:47:03.000000000 +0000 @@ -1,16 +1,10 @@ -This is ../../doc/enfuse.info, produced by makeinfo version 4.13 from -../../doc/enfuse.texi. +This is enfuse.info, produced by makeinfo version 5.2 from enfuse.texi. -INFO-DIR-SECTION Individual utilities -START-INFO-DIR-ENTRY -* enfuse: (enfuse). Fuse images using a multiresolution spline. -END-INFO-DIR-ENTRY - - This manual is for Enfuse (version 4.1.3, 10 March 2014), a program -to merge different exposures of the same scene to produce an image that +This manual is for Enfuse (version 4.1.4, 7 August 2015), a program to +merge different exposures of the same scene to produce an image that looks much like a tonemapped image. - Copyright (C) 2004-2014 ANDREW MIHAL. + Copyright (C) 2004-2015 ANDREW MIHAL. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, @@ -18,6 +12,10 @@ Foundation; with no Invariant Sections, no Front-Cover Texts and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". +INFO-DIR-SECTION Individual utilities +START-INFO-DIR-ENTRY +* enfuse: (enfuse). Fuse images using a multiresolution spline. +END-INFO-DIR-ENTRY  File: enfuse.info, Node: Top, Next: Overview, Up: (dir) @@ -25,7 +23,7 @@ Enfuse ****** -This manual is for Enfuse (version 4.1.3, 10 March 2014), a program to +This manual is for Enfuse (version 4.1.4, 7 August 2015), a program to merge different exposures of the same scene to produce an image that looks much like a tonemapped image. @@ -43,7 +41,6 @@ * Bug Reports:: How to write bug reports * Authors:: Major contributors * FDL:: GNU Free Documentation License - * List of Tables:: List of all tables * List of Figures:: List of all figures * Program Index:: Names of programs referenced @@ -52,7 +49,7 @@ * General Index:: Topic index ---- The Detailed Node Listing --- +-- The Detailed Node Listing -- Overview @@ -83,7 +80,7 @@ Weighting Algorithms * Weighted Average:: Enfuse's default weighting algorithm -* Disabling Averaging:: ``Super Trouper'' weighting for focus stacks +* Disabling Averaging:: "Super Trouper" weighting for focus stacks Local Contrast Weighting @@ -144,17 +141,17 @@ Enfuse merges overlapping images using the MERTENS-KAUTZ-VAN REETH exposure fusion algorithm.(1) This is a quick way for example to blend differently exposed images into a nice output image, without producing -intermediate high-dynamic range (HDR) images that are then tonemapped -to a viewable image. This simplified process often works much better -than tonemapping algorithms. +intermediate high-dynamic range (HDR) images that are then tonemapped to +a viewable image. This simplified process often works much better than +tonemapping algorithms. - Enfuse can also be used to build extended depth-of-field (DOF) -images by blending a focus stack. + Enfuse can also be used to build extended depth-of-field (DOF) images +by blending a focus stack. The idea is that pixels in the input images are weighted according to -qualities such as, for example, proper exposure, good local contrast, -or high saturation. These weights determine how much a given pixel -will contribute to the final image. +qualities such as, for example, proper exposure, good local contrast, or +high saturation. These weights determine how much a given pixel will +contribute to the final image. A BURT-ADELSON multiresolution spline blender(2) is used to combine the images according to the weights. The multiresolution blending @@ -162,7 +159,7 @@ contribute are difficult to spot. Enfuse uses up to four criteria to judge the quality of a pixel, -which *note Table:weighting-criteria:: briefly describes. +which *note Table 1.1: Table:weighting-criteria. briefly describes. Exposure The exposure criteria favors pixels with luminance close to the @@ -184,35 +181,35 @@ problem of noisy images when using entropy weighting by setting a black threshold. -Table 1.1: Enfuse's four weighting criteria. (Also see *note -Table:default-weights:: for the default weights of these criteria.) +Table 1.1: Enfuse's four weighting criteria. (Also see *note Table 5.1: +Table:default-weights. for the default weights of these criteria.) For the concept of pixel weighting, and details on the different weighting functions, see *note Weighting Functions::. Adjust how much importance is given to each criterion by setting the weight parameters on the command line. For example, if you set -`--exposure-weight=1.0' and `--saturation-weight=0.5', Enfuse will -favor well-exposed pixels over highly-saturated pixels when blending -the source images. The effect of these parameters on the final result -will not always be clear in advance. The quality of the result is -subject to your artistic interpretation. Playing with the weights may -or may not give a more pleasing result. The authors encourage you to -experiment, perhaps using down-sized(3) or cropped images for speed. +'--exposure-weight=1.0' and '--saturation-weight=0.5', Enfuse will favor +well-exposed pixels over highly-saturated pixels when blending the +source images. The effect of these parameters on the final result will +not always be clear in advance. The quality of the result is subject to +your artistic interpretation. Playing with the weights may or may not +give a more pleasing result. The authors encourage you to experiment, +perhaps using down-sized(3) or cropped images for speed. Enfuse expects but does not require each input image to have an alpha channel. By setting the alpha values of pixels to zero, users can manually remove those pixels from consideration when blending. If an input image lacks an alpha channel, Enfuse will issue a warning and -continue assuming all pixels should contribute to the final output. -Any alpha value other than zero is interpreted as "this pixel should +continue assuming all pixels should contribute to the final output. Any +alpha value other than zero is interpreted as "this pixel should contribute to the final image". Enfuse reads all layers of multi-layer images, like, for example, multi-directory TIFF images(4). The input images are processed in the -order they appear on the command line. Multi-layer images are -processed from the first layer to the last before Enfuse considers the -next image on the command line. +order they appear on the command line. Multi-layer images are processed +from the first layer to the last before Enfuse considers the next image +on the command line. Find out more about Enfuse on its SourceForge (http://sourceforge.net/) web page (http://enblend.sourceforge.net/). @@ -225,13 +222,13 @@ (2) Peter J. Burt and Edward H. Adelson, "A Multiresolution Spline With Application to Image Mosaics", ACM Transactions on Graphics, Vol. -2, No. 4, October 1983, pages 217-236. +2, No. 4, October 1983, pages 217-236. (3) Downsampling with a good interpolator reduces noise, which might not desired to judge the image quality of the original-size image. Cropping might be an alternative, though. - (4) Use utilities like, e.g., `tiffcopy' and `tiffsplit' of LibTIFF + (4) Use utilities like, e.g., 'tiffcopy' and 'tiffsplit' of LibTIFF to manipulate multi-directory TIFF images. *Note Helpful Programs::.  @@ -255,9 +252,10 @@ 2.1 Standard Workflow ===================== -*note Figure:photographic-workflow:: shows where Enblend and Enfuse sit -in the tool chain of the standard workflow. +*note Figure 2.1: Figure:photographic-workflow. shows where Enblend and +Enfuse sit in the tool chain of the standard workflow. +[photographic-workflow] Figure 2.1: Photographic workflow with Enblend and Enfuse. Take Images @@ -276,8 +274,8 @@ * Pictures of the same subject exposed with different shutter speeds. - Exposure series - * Images of the same subject focussed at differing distances. - - Focus stack + * Images of the same subject focussed at differing distances. - + Focus stack _Remaining Problem:_ The "overlayed" images may not fit together, that is the overlay regions may not match exactly. @@ -285,8 +283,8 @@ Convert Images Convert the raw data (http://www.luminous-landscape.com/tutorials/understanding-series/u-raw-files.shtml) - exploiting the full dynamic range of the camera and capitalize on - a high-quality conversion. + exploiting the full dynamic range of the camera and capitalize on a + high-quality conversion. Align Images Align the images so as to make them match as well as possible. @@ -303,14 +301,14 @@ between pairs of overlaying images are corrected ("photometric alignment"). - _Benefit:_ The overlay areas of images match as closely as - possible given the quality if the input images and the lens model - used in the transformation. + _Benefit:_ The overlay areas of images match as closely as possible + given the quality if the input images and the lens model used in + the transformation. _Remaining Problem:_ The images may still not align perfectly, for example, because of parallax - (http://en.wikipedia.org/wiki/Parallax) errors, or blur produced - by camera shake. + (http://en.wikipedia.org/wiki/Parallax) errors, or blur produced by + camera shake. Combine Images Enblend and Enfuse combine the aligned images into one. @@ -346,36 +344,36 @@ output image. Sometimes more control over the masks is needed or wanted. To this -end, both applications provide the option pair `--load-masks' and -`--save-masks'. *Note Invocation::, for detailed explanations of both -options. With the help of these options the processing can be broken -up into two steps: +end, both applications provide the option pair '--load-masks' and +'--save-masks'. *Note Invocation::, for detailed explanations of both +options. With the help of these options the processing can be broken up +into two steps: -Save masks with `--save-masks'. +Save masks with '--save-masks'. Generate masks and save them into image files. - Avoid option `--output' unless the blended or fused image at this + Avoid option '--output' unless the blended or fused image at this point is necessary. - -Load masks with `--load-masks'. +Load masks with '--load-masks'. Load masks from files and then blend or fuse the final image with the help of the loaded masks. In between these two steps the user may apply whatever transformation to the mask files, as long as their geometries and offsets remain the same. Thus the "Combine Images" box of *note Figure 2.1: -Figure:photographic-workflow. becomes three activities as is depicted -in *note Figure:external-mask-workflow::. +Figure:photographic-workflow. becomes three activities as is depicted in +*note Figure 2.2: Figure:external-mask-workflow. +[external-mask-workflow] Figure 2.2: Workflow for externally modified masks. To further optimize this kind of workflow, both Enblend and Enfuse -stop after mask generation if option `--save-masks' is given, but _no -output file_ is specified with the `--output' option. This way the -time for pyramid generation, blending, fusing, and writing the final -image to disk is saved, as well as no output image gets generated. +stop after mask generation if option '--save-masks' is given, but _no +output file_ is specified with the '--output' option. This way the time +for pyramid generation, blending, fusing, and writing the final image to +disk is saved, as well as no output image gets generated. - Note that options `--save-masks' and `--load-masks' cannot be used + Note that options '--save-masks' and '--load-masks' cannot be used simultaneously.  @@ -384,7 +382,7 @@ 3 Invocation ************ -`enfuse' [OPTIONS] [`--output='IMAGE] INPUT... +'enfuse' [OPTIONS] ['--output='IMAGE] INPUT... Fuse the sequence of images INPUT... into a single IMAGE. @@ -414,23 +412,20 @@ * The images agree on their number of bits-per-channel, this is, their "depth": - - `UINT8', - - - `UINT16', - - - `FLOAT', - + - 'UINT8', + - 'UINT16', + - 'FLOAT', - etc. - See option `--depth' below for an explanation of different - (output) depths. + See option '--depth' below for an explanation of different (output) + depths. * Enfuse understands the images' filename extensions as well as their file formats. You can check the supported extensions and formats by calling - Enfuse with the option pair `--version --verbose' and scan the - output for `Supported image formats' or `Supported file + Enfuse with the option pair '--version --verbose' and scan the + output for 'Supported image formats' or 'Supported file extensions'. Moreover, there are some "good practices", which are not enforced by @@ -449,11 +444,11 @@ ================== A response file contains names of images or other response filenames. -Introduce response file names with an at-character (`@'). +Introduce response file names with an at-character ('@'). Enblend and Enfuse process the list INPUT strictly from left to right, expanding response files in depth-first order. (Multi-layer -files are processed from first layer to the last.) The following +files are processed from first layer to the last.) The following examples only show Enblend, but Enfuse works exactly the same. Solely image filenames. @@ -461,54 +456,55 @@ enblend image-1.tif image-2.tif image-3.tif The ultimate order in which the images are processed is: - `image-1.tif', `image-2.tif', `image-3.tif'. + 'image-1.tif', 'image-2.tif', 'image-3.tif'. Single response file. Example: enblend @list - where file `list' contains + where file 'list' contains img1.exr img2.exr img3.exr img4.exr - Ultimate order: `img1.exr', `img2.exr', `img3.exr', `img4.exr'. + Ultimate order: 'img1.exr', 'img2.exr', 'img3.exr', 'img4.exr'. Mixed literal names and response files. Example: enblend @master.list image-09.png image-10.png - where file `master.list' comprises of + where file 'master.list' comprises of image-01.png @first.list image-04.png @second.list image-08.png - `first.list' is + 'first.list' is image-02.png image-03.png - and `second.list' contains + and 'second.list' contains image-05.png image-06.png image-07.png - Ultimate order: `image-01.png', `image-02.png', `image-03.png', - `image-04.png', `image-05.png', `image-06.png', `image-07.png', - `image-08.png', `image-09.png', `image-10.png', + Ultimate order: 'image-01.png', 'image-02.png', 'image-03.png', + 'image-04.png', 'image-05.png', 'image-06.png', 'image-07.png', + 'image-08.png', 'image-09.png', 'image-10.png', 3.2.1 Response File Format -------------------------- Response files contain one filename per line. Blank lines or lines -beginning with a sharp sign (`#') are ignored; the latter can serve as -comments. Filenames that begin with an at-character (`@') denote other -response files. *note Table:response-file-format:: states a formal -grammar of response files in EBNF (http://en.wikipedia.org/wiki/Ebnf). +beginning with a sharp sign ('#') are ignored; the latter can serve as +comments. Filenames that begin with an at-character ('@') denote other +response files. *note Table 3.1: Table:response-file-format. states a +formal grammar of response files in EBNF +(http://en.wikipedia.org/wiki/Ebnf). RESPONSE-FILE ::= LINE* -LINE ::= (COMMENT | FILE-SPEC) [`\r'] `\n' -COMMENT ::= SPACE* `#' TEXT -FILE-SPEC ::= SPACE* `@' FILENAME SPACE* -SPACE ::= ` ' | `\t' +LINE ::= (COMMENT | FILE-SPEC) ['\r'] '\n' +COMMENT ::= SPACE* '#' TEXT +FILE-SPEC ::= SPACE* '@' FILENAME SPACE* +SPACE ::= ' ' | '\t' where TEXT is an arbitrary string and FILENAME is any filename. @@ -536,16 +532,16 @@ img+0.67ev.tif only the first line contains a comment, whereas the second line includes none. Rather, it refers to a file called - `img-0.33ev.tif # "middle" EV'. + 'img-0.33ev.tif # "middle" EV'. -Image filenames cannot start with `@' +Image filenames cannot start with '@' An at-sign invariably introduces a response file, even if the filename's extension hints towards an image. If Enblend or Enfuse do not recognize a response file, they will skip the file and issue a warning. To force a file being recognized as a -response file add one of the following syntactic comments to the -_first_ line of the file. +response file add one of the following syntactic comments to the _first_ +line of the file. response-file: true enblend-response-file: true @@ -568,15 +564,15 @@ 3.2.2 Syntactic Comments ------------------------ -Comments that follow the format described in *note -Table:response-file-syntactic-comment:: are treated as instructions how +Comments that follow the format described in *note Table 3.2: +Table:response-file-syntactic-comment. are treated as instructions how to interpret the rest of the response file. A syntactic comment is -effective immediately and its effect persists to the end of the -response file, unless another syntactic comment undoes it. +effective immediately and its effect persists to the end of the response +file, unless another syntactic comment undoes it. -SYNTACTIC-COMMENT ::= SPACE* `#' SPACE* KEY SPACE* `:' SPACE* +SYNTACTIC-COMMENT ::= SPACE* '#' SPACE* KEY SPACE* ':' SPACE* VALUE -KEY ::= (`A' .. `Z' | `a' .. `z' | `-')+ +KEY ::= ('A' .. 'Z' | 'a' .. 'z' | '-')+ where VALUE is an arbitrary string. @@ -590,47 +586,45 @@ The three equivalent syntactic keys - * `glob', - - * `globbing', or - - * `filename-globbing' + * 'glob', + * 'globbing', or + * 'filename-globbing' control the algorithm that Enblend or Enfuse use to glob filenames in response files. All versions of Enblend and Enfuse support at least two algorithms: -`literal', which is the default, and `wildcard'. See *note -Table:globbing-algorithms:: for a list of all possible globbing -algorithms. To find out about the algorithms in your version of -Enblend or Enfuse team up the options `--version' and `--verbose'. +'literal', which is the default, and 'wildcard'. See *note Table 3.3: +Table:globbing-algorithms. for a list of all possible globbing +algorithms. To find out about the algorithms in your version of Enblend +or Enfuse team up the options '--version' and '--verbose'. -`literal' +'literal' Do not glob. Interpret all filenames in response files as literals. This is the default. Please keep in mind that whitespace at both ends of a line in a response file _always_ gets discarded. -`wildcard' - Glob using the wildcard characters `?', `*', `[', and `]'. +'wildcard' + Glob using the wildcard characters '?', '*', '[', and ']'. The W*N32 implementation only globs the filename part of a path, whereas all other implementations perform wildcard expansion in _all_ path components. Also see glob(7) (http://www.kernel.org/doc/man-pages/online/pages/man7/glob.7.html). -`none' - Alias for `literal'. +'none' + Alias for 'literal'. -`shell' - The `shell' globbing algorithm works as `literal' does. In - addition, it interprets the wildcard characters `{', `}', and `~'. +'shell' + The 'shell' globbing algorithm works as 'literal' does. In + addition, it interprets the wildcard characters '{', '}', and '~'. This makes the expansion process behave more like common UN*X shells. -`sh' - Alias for `shell'. +'sh' + Alias for 'shell'. Table 3.3: Globbing algorithms for the use in response files @@ -646,13 +640,13 @@ 3.2.4 Default Layer Selection ----------------------------- -The key `layer-selector' provides the same functionality as does the -command-line option `--layer-selector', but on a per response-file +The key 'layer-selector' provides the same functionality as does the +command-line option '--layer-selector', but on a per response-file basis. *Note Common Options::. This syntactic comment affects the layer selection of all images -listed after it including those in included response files until -another `layer-selector' overrides it. +listed after it including those in included response files until another +'layer-selector' overrides it.  File: enfuse.info, Node: Common Options, Next: Extended Options, Prev: Response Files, Up: Invocation @@ -663,100 +657,101 @@ Common options control some overall features of Enfuse. Enfuse accepts arguments to any option in uppercase as well as in -lowercase letters. For example, `deflate', `Deflate' and `DEFLATE' as -arguments to the `--compression' option described below, all instruct +lowercase letters. For example, 'deflate', 'Deflate' and 'DEFLATE' as +arguments to the '--compression' option described below, all instruct Enfuse to use the DEFLATE compression scheme. This manual denotes all arguments in lowercase for consistency. -`--compression=COMPRESSION' +'--compression=COMPRESSION' Write a compressed output file. Depending on the output file format, Enfuse accepts different values for COMPRESSION. - JPEG format. + JPEG format. + The compression either is a literal integer or a keyword-option combination. - `LEVEL' + 'LEVEL' Set JPEG quality LEVEL, where LEVEL is an integer that ranges from 0-100. - `jpeg[:LEVEL]' + 'jpeg[:LEVEL]' Same as above; without the optional argument just switch on (standard) JPEG compression. - `jpeg-arith[:LEVEL]' + 'jpeg-arith[:LEVEL]' Switch on arithmetic JPEG compression. With optional argument set the arithmetic compression LEVEL, where LEVEL is an integer that ranges from 0-100. - TIF format. + TIF format. Here, COMPRESSION is one of the keywords: - `none' + 'none' Do not compress. This is the default. - `deflate' + 'deflate' Use the DEFLATE compression scheme also called ZIP-in-TIFF. DEFLATE is a lossless data compression algorithm that uses a combination of the LZ77 algorithm and HUFFMAN coding. - `jpeg[:LEVEL]' + 'jpeg[:LEVEL]' Use JPEG compression. With optional argument set the compression LEVEL, where LEVEL is an integer that ranges from 0-100. - `lzw' + 'lzw' Use LEMPEL-ZIV-WELCH (LZW) adaptive compression scheme. LZW compression is lossless. - `packbits' + 'packbits' Use PACKBITS compression scheme. PACKBITS is a particular variant of run-length compression; it is lossless. - Any other format. + Any other format. Other formats do not accept a COMPRESSION setting. However, VIGRA (http://hci.iwr.uni-heidelberg.de/vigra/) - automatically compresses `png'-files with the DEFLATE method. + automatically compresses 'png'-files with the DEFLATE method. -`--layer-selector=ALGORITHM' +'--layer-selector=ALGORITHM' Override the standard layer selector algorithm, which is - `all-layers'. + 'all-layers'. This version of Enfuse offers the following algorithms: - `all-layers' + 'all-layers' Select all layers in all images. - `first-layer' + 'first-layer' Select only first layer in each multi-layer image. For - single-layer images this is the same as `all-layers'. + single-layer images this is the same as 'all-layers'. - `largest-layer' + 'largest-layer' Select largest layer in each multi-layer image, where the - "largeness", this is the size is defined by the product of - the layer width and its height. The channel width of the - layer is ignored. For single-layer images this is the same - as `all-layers'. + "largeness", this is the size is defined by the product of the + layer width and its height. The channel width of the layer is + ignored. For single-layer images this is the same as + 'all-layers'. - `no-layer' + 'no-layer' Do not select any layer in any image. This algorithm is useful to temporarily exclude some images in response files. -`-h' -`--help' +'-h' +'--help' Print information on the available options and exit. -`-l LEVELS' -`--levels=LEVELS' +'-l LEVELS' +'--levels=LEVELS' Use at most this many LEVELS for pyramid (1) blending if LEVELS is - positive, or reduce the maximum number of levels used by -LEVELS - if LEVELS is negative; `auto' or `automatic' restore the default, + positive, or reduce the maximum number of levels used by -LEVELS if + LEVELS is negative; 'auto' or 'automatic' restore the default, which is to use the maximum possible number of levels for each overlapping region. @@ -769,10 +764,10 @@ As a guideline, remember that each new level works on a linear scale twice as large as the previous one. So, the zeroth layer, the original image, obviously defines the image at single-pixel - scale, the first level works at two-pixel scale, and generally, - the n-th level contains image data at 2^n -pixel scale. This is - the reason why an image of widthxheight pixels cannot be - deconstructed into a pyramid of more than + scale, the first level works at two-pixel scale, and generally, the + n-th level contains image data at 2^n-pixel scale. This is the + reason why an image of widthxheightpixels cannot be deconstructed + into a pyramid of more than floor(log_2(min(width, height))) levels. @@ -790,75 +785,73 @@ this may or may not influence any pyramid. Negative values of LEVELS reduce the number of pyramid levels below the maximum no matter what the actual maximum is and thus always influence all - pyramids. Use `auto' or `automatic' as LEVELS to restore the + pyramids. Use 'auto' or 'automatic' as LEVELS to restore the automatic calculation of the maximum number of levels. - The valid range of the absolute value of LEVELS is - 1 to 29. + The valid range of the absolute value of LEVELS is 1 to 29. -`-o' -`--output=FILE' +'-o' +'--output=FILE' Place output in FILE. - If `--output' is not specified, the default is to put the - resulting image in `a.tif'. + If '--output' is not specified, the default is to put the resulting + image in 'a.tif'. -`--parameter=KEY[=VALUE]:...' +'--parameter=KEY[=VALUE]:...' Set a KEY-VALUE pair, where VALUE is optional. This option is cumulative. Separate multiple pairs with the usual numeric delimiters. - This option has the negated form `--no-parameter', which takes one + This option has the negated form '--no-parameter', which takes one or more KEYs and removes them from the list of defined parameters. - The special key `*' deletes all parameters at once. + The special key '*' deletes all parameters at once. Parameters allow the developers to change the internal workings of Enfuse without the need to recompile. -`-v' -`--verbose[=LEVEL]' +'-v' +'--verbose[=LEVEL]' Without an argument, increase the verbosity of progress reporting. - Giving more `--verbose' options will make Enfuse more verbose. + Giving more '--verbose' options will make Enfuse more verbose. Directly set a verbosity level with a non-negative integral LEVEL. Each level includes all messages of the lower levels. - Level + Level Messages - 0 + 0 only warnings and errors - 1 + 1 reading and writing of images - 2 + 2 mask generation, pyramid, and blending - 3 + 3 reading of response files, color conversions - 4 + 4 image sizes, bounding boxes and intersection sizes - 5 + 5 detailed information on the optimizer runs (Enblend only) - 6 + 6 estimations of required memory in selected processing steps - The default verbosity level of Enfuse is - 1. + The default verbosity level of Enfuse is 1. -`-V' -`--version' +'-V' +'--version' Output information on the Enfuse version. - Team this option with `--verbose' to show configuration details, + Team this option with '--verbose' to show configuration details, like the extra features that have been compiled in. -`-w' -`--wrap=MODE' +'-w' +'--wrap=MODE' Blend around the boundaries of the panorama. As this option significantly increases memory usage and computation @@ -875,41 +868,41 @@ Otherwise, always avoid this option! With this option, Enfuse treats the panorama of width w and - height h as an infinite data structure, where each pixel P(x, y) - of the input images represents the set of pixels S_P(x, y) (2). + height h as an infinite data structure, where each pixel P(x, y) of + the input images represents the set of pixels S_P(x, y) (2). MODE takes the following values: - `none' - `open' + 'none' + 'open' This is a "no-op"; it has the same effect as not giving - `--wrap' at all. The set of input images is considered open + '--wrap' at all. The set of input images is considered open at its boundaries. - `horizontal' + 'horizontal' Wrap around horizontally: S_P(x, y) = {P(x + m * w, y): m in Z}. This is useful for 360o horizontal panoramas as it eliminates the left and right borders. - `vertical' + 'vertical' Wrap around vertically: S_P(x, y) = {P(x, y + n * h): m in Z}. This is useful for 360o vertical panoramas, as it eliminates the top and bottom borders. - `both' - `horizontal+vertical' - `vertical+horizontal' + 'both' + 'horizontal+vertical' + 'vertical+horizontal' Wrap around both horizontally and vertically: S_P(x, y) = {P(x + m * w, y + n * h): m, n in Z}. In this mode, both left and right borders, as well as top and bottom borders, are eliminated. - Specifying `--wrap' without MODE selects horizontal wrapping. + Specifying '--wrap' without MODE selects horizontal wrapping. ---------- Footnotes ---------- @@ -931,94 +924,103 @@ Extended options control the image cache, the color model, and the cropping of the output image. -`-b BLOCKSIZE' +'-b BLOCKSIZE' Set the BLOCKSIZE in kilobytes (KB) of Enfuse's image cache. This is the amount of data that Enfuse will move to and from the - disk at one time. The default is 2048 KB, which should be ok for + disk at one time. The default is 2048KB, which should be ok for most systems. See *note Tuning Memory Usage:: for details. Note that Enfuse must have been compiled with the image-cache feature for this option to be effective. Find out about extra - features with `enfuse --version --verbose'. + features with 'enfuse --version --verbose'. + +'--blend-colorspace=COLORSPACE' + + Force blending in selected COLORSPACE. For well matched images + this option should not change the output image much. However, if + Enfuse must blend vastly different colors (as e.g. anti-colors) + the result image heavily depends on the COLORSPACE. + + Usually, Enfuse chooses defaults depending on the input images: + * For input images _with_ ICC profiles the default is to use + CIECAM colorspace. + + * Images _without_ color profiles and floating-point images are + blended in the RGB-color cube by default. -`-c' -`--ciecam' - Force the use of the CIECAM02 color appearance model for blending - colors instead of blending inside the RGB color cube. + Enfuse supports two blend colorspaces: - All input files should have identical ICC profiles when this - option is specified. If no ICC profile is present, Enfuse assumes - that all images use the sRGB color space. *Note Color Profiles::. + 'IDENTITY', 'ID', 'UNIT' + Naively compute blended colors in the luminance interval + (grayscale images) or RGB-cube (RGB images) spanned by the + input ICC profile or sRGB if no profiles are present. + Consider option '--fallback-profile' to force a different + profile than sRGB on all input images. - Please keep in mind that using CIECAM02 blending may change the - colors in the output image. + 'CIECAM', 'CIECAM02', 'JCH' + Blend pixels in the CIECAM02 colorspace. - This option can be negated; see option `--no-ciecam' below. +'-c' +'--ciecam' + Use '--blend-colorspace=CIECAM' instead. To mimic the negated + option '--no-ciecam' use '--blend-colorspace=IDENTITY'. -`-d' -`--depth=DEPTH' +'-d' +'--depth=DEPTH' Force the number of bits per channel and the numeric format of the output image. Enfuse always uses a smart way to change the channel depth, to assure highest image quality (at the expense of memory), whether requantization is implicit because of the output format or explicit - with option `--depth'. + with option '--depth'. * If the output-channel width is larger than the input-channel width of the input images, the input images' channels are - widened to the output channel width immediately after - loading, that is, as soon as possible. Enfuse then performs - all blending operations at the output-channel width, thereby + widened to the output channel width immediately after loading, + that is, as soon as possible. Enfuse then performs all + blending operations at the output-channel width, thereby preserving minute color details which can appear in the blending areas. * If the output-channel width is smaller than the input-channel width of the input images, the output image's channels are narrowed only right before it is written to disk, that is, as - late as possible. Thus the data benefits from the wider - input channels for the longest time. + late as possible. Thus the data benefits from the wider input + channels for the longest time. All DEPTH specifications are valid in lowercase as well as uppercase letters. For integer format, use - `8', `uint8' - Unsigned 8 bit; range: 0..255 - - `int16' - Signed 16 bit; range: -32768..32767 - - `16', `uint16' - Unsigned 16 bit; range: 0..65535 - - `int32' - Signed 32 bit; range: -2147483648..2147483647 - - `32', `uint32' - Unsigned 32 bit; range: 0..4294967295 + '8', 'uint8' + Unsigned 8bit; range: 0..255 + 'int16' + Signed 16bit; range: -32768..32767 + '16', 'uint16' + Unsigned 16bit; range: 0..65535 + 'int32' + Signed 32bit; range: -2147483648..2147483647 + '32', 'uint32' + Unsigned 32bit; range: 0..4294967295 For floating-point format, use - `r32', `real32', `float' - IEEE754 single precision floating-point, 32 bit wide, 24 bit + 'r32', 'real32', 'float' + IEEE754 single precision floating-point, 32bit wide, 24bit significant - * Minimum normalized value: 1.2*10^-38 - - * Epsilon: 1.2*10^-7 - - * Maximum finite value: 3.4*10^38 + * Minimum normalized value: 1.2e-38 + * Epsilon: 1.2e-7 + * Maximum finite value: 3.4e38 - `r64', `real64', `double' - IEEE754 double precision floating-point, 64 bit wide, 53 bit + 'r64', 'real64', 'double' + IEEE754 double precision floating-point, 64bit wide, 53bit significant - * Minimum normalized value: 2.2*10^-308 - - * Epsilon: 2.2*10^-16 - - * Maximum finite value: 1.8*10^308 + * Minimum normalized value: 2.2e-308 + * Epsilon: 2.2e-16 + * Maximum finite value: 1.8e308 If the requested DEPTH is not supported by the output file format, Enfuse warns and chooses the DEPTH that matches best. @@ -1027,70 +1029,66 @@ Externally, on disk, OpenEXR data is represented by "half" precision floating-point numbers. - OpenEXR (http://www.openexr.com/about.html#features) half - precision floating-point, 16 bit wide, 10 bit significant - - * Minimum normalized value: 9.3*10^-10 + OpenEXR (http://www.openexr.com/about.html#features) half precision + floating-point, 16bit wide, 10bit significant - * Epsilon: 2.0*10^-3 + * Minimum normalized value: 9.3e-10 + * Epsilon: 2.0e-3 + * Maximum finite value: 4.3e9 - * Maximum finite value: 4.3*10^9 - -`-f WIDTHxHEIGHT' -`-f WIDTHxHEIGHT+xXOFFSET+yYOFFSET' +'-f WIDTHxHEIGHT' +'-f WIDTHxHEIGHT+xXOFFSET+yYOFFSET' Ensure that the minimum "canvas" size of the output image is at least WIDTHxHEIGHT. Optionally specify the XOFFSET and YOFFSET, too. This option only is useful when the input images are cropped TIFF - files, such as those produced by `nona'(1). + files, such as those produced by 'nona'(1). - Note that option `-f' neither rescales the output image, nor + Note that option '-f' neither rescales the output image, nor shrinks the canvas size below the minimum size occupied by the union of all input images. -`--fallback-profile=PROFILE-FILENAME' +'--fallback-profile=PROFILE-FILENAME' Use the ICC profile in PROFILE-FILENAME instead of the default - sRGB. See option `--ciecam' and *note Color Profiles::. + sRGB. See option '--blend-colorspace' and *note Color Profiles::. This option only is effective if the input images come without color profiles and blending is performed in CIECAM02 color appearance model. -`-g' +'-g' Save alpha channel as "associated". See the TIFF documentation (http://www.awaresystems.be/imaging/tiff/tifftags/extrasamples.html) for an explanation. Gimp (before version 2.0) and CinePaint (*note Helpful Programs::) exhibit unusual behavior when loading images with unassociated - alpha channels. Use option `-g' to work around this problem. - With this flag Enfuse will create the output image with the - associated alpha tag set, even though the image is really - unassociated alpha. + alpha channels. Use option '-g' to work around this problem. With + this flag Enfuse will create the output image with the associated + alpha tag set, even though the image is really unassociated alpha. -`-m CACHESIZE' +'-m CACHESIZE' Set the CACHESIZE in megabytes (MB) of Enfuse's image cache. This is the amount of memory Enfuse will use for storing image data - before swapping to disk. The default is - 1024 MB, which is good for systems with 3-4 gigabytes (GB) of RAM. - See *note Tuning Memory Usage:: for details. + before swapping to disk. The default is 1024MB, which is good for + systems with 3-4gigabytes (GB) of RAM. See *note Tuning Memory + Usage:: for details. Note that Enfuse must have been compiled with the image-cache feature for this option to be effective. Find out about extra - features with `enfuse --version --verbose'. + features with 'enfuse --version --verbose'. -`--no-ciecam' - Disable the use of the CIECAM02 color appearance model for - blending colors. +'--no-ciecam' + Use '--blend-colorspace=IDENTITY' instead. - See option `--ciecam' for details. Also see *note Color + See option '--blend-colorspace' for details. Also see *note Color Profiles::. ---------- Footnotes ---------- - (1) The stitcher `nona' is part of Hugin. *Note Helpful Programs::. + (1) The stitcher 'nona' is part of Hugin. *Note Helpful Programs::.  File: enfuse.info, Node: Fusion Options, Next: Expert Options, Prev: Extended Options, Up: Invocation @@ -1101,7 +1099,8 @@ Fusion options define the proportion to which each input image's pixel contributes to the output image. -`--contrast-weight=WEIGHT' +'--contrast-weight=WEIGHT' + Sets the relative WEIGHT of high local-contrast pixels. Valid range: 0 <= WEIGHT <= 1. @@ -1111,7 +1110,8 @@ See *note Local Contrast Weighting:: and *note Option contrast-window-size: Expert Options. -`--entropy-weight=WEIGHT' +'--entropy-weight=WEIGHT' + Sets the relative WEIGHT of high local entropy pixels. Valid range: 0 <= WEIGHT <= 1. @@ -1121,7 +1121,8 @@ See *note Local Entropy Weighting:: and *note Options entropy-window-size and entropy-cutoff: Expert Options. -`--exposure-weight=WEIGHT' +'--exposure-weight=WEIGHT' + Sets the relative WEIGHT of the well-exposedness criterion. Increasing this weight relative to the others will make well-exposed pixels contribute more to the final output. @@ -1132,7 +1133,8 @@ *Note Exposure Weighting::. -`--exposure-mu=MEAN' +'--exposure-mu=MEAN' + Set the MEAN (this is, the center) of the Gaussian exposure weight curve. @@ -1143,9 +1145,10 @@ Use this option to fine-tune exposure weighting (*note Exposure Weighting::). -`--exposure-sigma=STD-DEV' +'--exposure-sigma=STD-DEV' + Standard deviation STD-DEV of the Gaussian exposure weight curve. - Low numbers give less weight to pixels that are far from `--wMu' + Low numbers give less weight to pixels that are far from '--wMu' and vice versa. Valid range: STD-DEV >= 0. @@ -1155,7 +1158,8 @@ Use this option to fine-tune exposure weighting (*note Exposure Weighting::). -`--saturation-weight=WEIGHT' +'--saturation-weight=WEIGHT' + Sets the relative WEIGHT of high-saturation pixels. Increasing this weight makes pixels with high saturation contribute more to the final output. @@ -1173,15 +1177,16 @@ 3.6 Expert Options ================== -Expert options influence the workings of Enfuse that require the user -to read the manual before applying them successfully. +Expert options influence the workings of Enfuse that require the user to +read the manual before applying them successfully. + +'--contrast-edge-scale=EDGE-SCALE' +'--contrast-edge-scale=EDGE-SCALE:LCE-SCALE:LCE-FACTOR' -`--contrast-edge-scale=EDGE-SCALE' -`--contrast-edge-scale=EDGE-SCALE:LCE-SCALE:LCE-FACTOR' A non-zero value for EDGE-SCALE switches on the Laplacian-of-Gaussian (LoG) edge detection algorithm. EDGE-SCALE is the radius of the Gaussian used in the search for edges. - Default: 0.0 pixels. + Default: 0.0pixels. A positive LCE-SCALE turns on local contrast enhancement (LCE) before the LoG edge detection. LCE-SCALE is the radius of the @@ -1191,25 +1196,27 @@ ENHANCED = (1 + LCE-FACTOR) x ORIGINAL - LCE-FACTOR x GaussianSmooth(ORIGINAL, LCE-SCALE). - LCE-SCALE defaults to 0.0 pixels and LCE-FACTOR defaults to - 0.0. Append `%' to LCE-SCALE to specify the radius as a - percentage of EDGE-SCALE. Append `%' to LCE-FACTOR to specify the - weight as a percentage. + LCE-SCALE defaults to 0.0 pixels and LCE-FACTOR defaults to 0.0. + Append '%' to LCE-SCALE to specify the radius as a percentage of + EDGE-SCALE. Append '%' to LCE-FACTOR to specify the weight as a + percentage. + +'--contrast-min-curvature=CURVATURE' -`--contrast-min-curvature=CURVATURE' Define the minimum CURVATURE for the LoG edge detection. Default: - 0. Append a `%' to specify the minimum curvature relative to + 0. Append a '%' to specify the minimum curvature relative to maximum pixel value in the source image (for example 255 or 65535). A positive value makes Enfuse use the local contrast data - (controlled with `--contrast-window-size') for curvatures less than + (controlled with '--contrast-window-size') for curvatures less than CURVATURE and LoG data for values above it. A negative value truncates all curvatures less than -CURVATURE to - zero. Values above CURVATURE are left unchanged. This - effectively suppresses weak edges. + zero. Values above CURVATURE are left unchanged. This effectively + suppresses weak edges. + +'--contrast-window-size=SIZE' -`--contrast-window-size=SIZE' Set the window SIZE for local contrast analysis. The window will be a square of SIZExSIZE pixels. If given an even SIZE, Enfuse will automatically use the next odd number. @@ -1220,13 +1227,14 @@ Valid range: SIZE >= 3. - Default: 5 pixels. + Default: 5pixels. See also *note Option -contrast-weight: Fusion Options. and - `--hard-mask' below. + '--hard-mask' below. + +'--entropy-cutoff=LOWER-CUTOFF' +'--entropy-cutoff=LOWER-CUTOFF:UPPER-CUTOFF' -`--entropy-cutoff=LOWER-CUTOFF' -`--entropy-cutoff=LOWER-CUTOFF:UPPER-CUTOFF' The first form defines the lower cutoff value below which pixels are treated as pure black when calculating the local entropy. The second form also defines the upper cutoff value above which pixels @@ -1236,53 +1244,55 @@ separately and independently to each channel. Defaults: 0% for LOWER-CUTOFF and 100% for UPPER-CUTOFF, that is, - all pixels' values are taken into account. Append a `%' to - specify the cutoff relative to maximum pixel value in the source - image (for example 255 or 65535). *note Figure:entropy-cutoff:: + all pixels' values are taken into account. Append a '%' to specify + the cutoff relative to maximum pixel value in the source image (for + example 255 or 65535). *note Figure 3.1: Figure:entropy-cutoff. shows an example. - Figure 3.1: Linear lightness Y in comparison with an - entropy-cutoff function for LOWER-CUTOFF = 5% and UPPER-CUTOFF = - 90%, which are rather extreme values. Please note that we have - shifted the original lightness curve up and the cut-off curve down - by a very small OFFSET to emphasize that the proportional part of - Y remains unaltered under the cut-off operation. - - Note that a high LOWER-CUTOFF value lightens the resulting - image, as dark (and presumably noisy) pixels are averaged with - _equal_ weights. With `--entropy-cutoff=0', the default, on the - other hand, "noise" might be interpreted as high entropy and the - noisy pixels get a high weight, which in turn renders the resulting - image darker. Analogously, a low UPPER-CUTOFF darkens the output - image. +[entropy-cutoff] + Figure 3.1: Linear lightness Y in comparison with an entropy-cutoff + function for LOWER-CUTOFF = 5% and UPPER-CUTOFF = 90%, which are + rather extreme values. Please note that we have shifted the + original lightness curve up and the cut-off curve down by a very + small OFFSET to emphasize that the proportional part of Y remains + unaltered under the cut-off operation. + + Note that a high LOWER-CUTOFF value lightens the resulting image, + as dark (and presumably noisy) pixels are averaged with _equal_ + weights. With '--entropy-cutoff=0', the default, on the other + hand, "noise" might be interpreted as high entropy and the noisy + pixels get a high weight, which in turn renders the resulting image + darker. Analogously, a low UPPER-CUTOFF darkens the output image. + +'--entropy-window-size=SIZE' - `--entropy-window-size=SIZE' - Window SIZE for local entropy analysis. The window will be a + Window SIZE for local entropy analysis. The window will be a square of SIZExSIZE pixels. - In the entropy calculation SIZE values of 3 to 7 yield an + In the entropy calculation SIZE values of 3 to 7 yield an acceptable compromise of the locality of the information and the significance of the local entropy value itself. - Valid range: SIZE >= 3. + Valid range: SIZE >= 3. - Default: 3 pixels. + Default: 3pixels. - If given an even SIZE Enfuse will automatically use the next odd + If given an even SIZE Enfuse will automatically use the next odd number. - `--exposure-cutoff=LOWER-CUTOFF' - `--exposure-cutoff=LOWER-CUTOFF:UPPER-CUTOFF' - `--exposure-cutoff=LOWER-CUTOFF:UPPER-CUTOFF:LOWER-PROJECTOR:UPPER-PROJECTOR' - The first form sets the weight for all pixels below the lower +'--exposure-cutoff=LOWER-CUTOFF' +'--exposure-cutoff=LOWER-CUTOFF:UPPER-CUTOFF' +'--exposure-cutoff=LOWER-CUTOFF:UPPER-CUTOFF:LOWER-PROJECTOR:UPPER-PROJECTOR' + + The first form sets the weight for all pixels below the lower cutoff to zero. The second form sets the lower cutoff and the upper cutoff at the same time. For color images the values of - LOWER-CUTOFF and UPPER-CUTOFF refer to the gray-scale projection - as selected with the option `--gray-projector'. + LOWER-CUTOFF and UPPER-CUTOFF refer to the gray-scale projection as + selected with the option '--gray-projector'. - The impact of this option is similar, but not identical to + The impact of this option is similar, but not identical to transforming _all_ input images with ImageMagick's - (http://www.imagemagick.org/) `convert' (*note Helpful Programs::) + (http://www.imagemagick.org/) 'convert' (*note Helpful Programs::) prior to fusing with the following commands. # First form @@ -1301,46 +1311,45 @@ -compose copy_opacity -composite \ MASKED-IMAGE - (Transforming some or all input images as shown in the above - examples gives the user more flexibility because the thresholds - can be chosen for each image individually.) + (Transforming some or all input images as shown in the above + examples gives the user more flexibility because the thresholds can + be chosen for each image individually.) - The third form specifies projection operators as in - option `--gray-projector' for the LOWER-CUTOFF and UPPER-CUTOFF + The third form specifies projection operators as in + option '--gray-projector' for the LOWER-CUTOFF and UPPER-CUTOFF thresholds. - This option can be helpful if the user wants to exclude - underexposed or overexposed pixels from the fusing process in - _all_ of the input images. The values of LOWER-CUTOFF and - UPPER-CUTOFF as well as the gray-scale projector determine which - pixels are considered "underexposed" or "overexposed". As any - change of the exposure-weight curve this option changes the - brightness of the resulting image: increasing LOWER-CUTOFF - lightens the final image and lowering UPPER-CUTOFF darkens it. - - Defaults: 0% for LOWER-CUTOFF and - 100% for UPPER-CUTOFF, that is, all pixels' values are weighted - according to the "uncut" exposure-weight curve. + This option can be helpful if the user wants to exclude + underexposed or overexposed pixels from the fusing process in _all_ + of the input images. The values of LOWER-CUTOFF and UPPER-CUTOFF + as well as the gray-scale projector determine which pixels are + considered "underexposed" or "overexposed". As any change of the + exposure-weight curve this option changes the brightness of the + resulting image: increasing LOWER-CUTOFF lightens the final image + and lowering UPPER-CUTOFF darkens it. + + Defaults: 0% for LOWER-CUTOFF and 100% for UPPER-CUTOFF, that is, + all pixels' values are weighted according to the "uncut" + exposure-weight curve. - Append a `%' to specify the cutoff relative to the maximum pixel + Append a '%' to specify the cutoff relative to the maximum pixel value in the source image (for example 255 or 65535). - *note Figure:exposure-cutoff:: shows an example. + *note Figure 3.2: Figure:exposure-cutoff. shows an example. - The gray-scale projectors LOWER-PROJECTOR and UPPER-PROJECTOR - default to `anti-value' and - `value', which are usually the best choices for effective cutoff - operations on the respective ends. + The gray-scale projectors LOWER-PROJECTOR and UPPER-PROJECTOR + default to 'anti-value' and 'value', which are usually the best + choices for effective cutoff operations on the respective ends. +[exposure-cutoff] Figure 3.2: Exposure weight, a Gaussian with MU = 0.5 and SIGMA = 0.2 submitted to an exposure-cutoff of LOWER-CUTOFF = 5% and UPPER-CUTOFF = 97%. - Note that the application of the respective cutoffs is - completely independent of the actual shape of the exposure weight - function. + Note that the application of the respective cutoffs is completely + independent of the actual shape of the exposure weight function. - If a set of images stubbornly refuses to "react" to this option, + If a set of images stubbornly refuses to "react" to this option, look at their histograms to verify the cutoff actually falls into populated ranges of the histograms. In the absence of an image manipulation program like The Gimp (http://www.gimp.org/), @@ -1353,32 +1362,32 @@ IMAGE histogram:- | \ display - `--gray-projector=PROJECTOR' - Use gray projector PROJECTOR for conversion of RGB images to - grayscale: (R, G, B) -> Y. - - In version 4.1.3 of Enfuse, the option is effective for - exposure weighting and local contrast weighting. Default: - `average'. +'--gray-projector=PROJECTOR' + + Use gray projector PROJECTOR for conversion of RGB images to + grayscale: (R, G, B) --> Y. + + In version 4.1.4 of Enfuse, the option is effective for exposure + weighting and local contrast weighting. Default: 'average'. - Valid values for PROJECTOR are: + Valid values for PROJECTOR are: - `anti-value' - Do the opposite of the `value' projector: take the minimum of + 'anti-value' + Do the opposite of the 'value' projector: take the minimum of all color channels. Y = min(R, G, B) This projector can be useful when exposure weighing while - employing a lower cutoff (see option `--exposure-cutoff') to + employing a lower cutoff (see option '--exposure-cutoff') to reduce the noise in the fused image. - `average' - Average red, green, and blue channel with equal weights. - This is the default, and it often is a good projector for - gamma = 1 data. + 'average' + Average red, green, and blue channel with equal weights. This + is the default, and it often is a good projector for gamma = 1 + data. Y = (R + G + B) / 3 - `channel-mixer:RED-WEIGHT:GREEN-WEIGHT:BLUE-WEIGHT' + 'channel-mixer:RED-WEIGHT:GREEN-WEIGHT:BLUE-WEIGHT' Weight the channels as given. Y = RED-WEIGHT * R + GREEN-WEIGHT * G + BLUE-WEIGHT * B @@ -1394,185 +1403,187 @@ define the relative weight of the respective color channel. The sum of all weights is normalized to one. - `l-star' + 'l-star' Use the L-channel of the L*a*b*-conversion of the image as its grayscale representation. This is a useful projector for - gamma = 1 data. It reveals minute contrast variations even - in the shadows and the highlights. This projector is - computationally expensive. Compare with `pl-star', which is + gamma = 1 data. It reveals minute contrast variations even in + the shadows and the highlights. This projector is + computationally expensive. Compare with 'pl-star', which is intended for gamma-corrected images. See Wikipedia (http://en.wikipedia.org/wiki/Lab_color_space) for a detailed description of the Lab color space. - `lightness' + 'lightness' Compute the lightness of each RGB pixel as in an Hue-Saturation-Lightness (HSL) conversion of the image. Y = (max(R, G, B) + min(R, G, B)) / 2 - `luminance' + 'luminance' Use the weighted average of the RGB pixel's channels as defined by CIE ("Commission Internationale de l'E'clairage") and the JPEG standard. Y = 0.30 * R + 0.59 * G + 0.11 * B - `pl-star' + 'pl-star' Use the L-channel of the L*a*b*-conversion of the image as its grayscale representation. This is a useful projector for gamma-corrected data. It reveals minute contrast variations even in the shadows and the highlights. This projector is - computationally expensive. Compare with `l-star', which is + computationally expensive. Compare with 'l-star', which is intended for gamma = 1 images. See Wikipedia (http://en.wikipedia.org/wiki/Lab_color_space) for a detailed description of the Lab color space. - `value' + 'value' Take the Value-channel of the Hue-Saturation-Value (HSV) conversion of the image. Y = max(R, G, B) - `--hard-mask' - Force hard blend masks on the finest scale. This is the - opposite flag of `--soft-mask'. - - This blending mode avoids averaging of fine details (only) at - the expense of increasing the noise. However it considerably - improves the sharpness of focus stacks. Blending with hard masks - has only proven useful with focus stacks. - - See also *note Option -contrast-weight: Fusion Options. and - `--contrast-window-size' above. - - `--load-masks' - `--load-masks=SOFT-MASK-TEMPLATE' - `--load-masks=SOFT-MASK-TEMPLATE:HARD-MASK-TEMPLATE' - Load masks from images instead of computing them. - - The masks have to be a grayscale images. - - First form: Load all soft-weight masks from files that were - previously saved with option `--save-masks'. If - option `--hard-mask' is effective only load hard masks. The - defaults are `softmask-%n.tif' and `hardmask-%n.tif'. In the +'--hard-mask' + + Force hard blend masks on the finest scale. This is the opposite + flag of '--soft-mask'. + + This blending mode avoids averaging of fine details (only) at the + expense of increasing the noise. However it considerably improves + the sharpness of focus stacks. Blending with hard masks has only + proven useful with focus stacks. + + See also *note Option -contrast-weight: Fusion Options. and + '--contrast-window-size' above. + +'--load-masks' +'--load-masks=SOFT-MASK-TEMPLATE' +'--load-masks=SOFT-MASK-TEMPLATE:HARD-MASK-TEMPLATE' + + Load masks from images instead of computing them. + + The masks have to be a grayscale images. + + First form: Load all soft-weight masks from files that were + previously saved with option '--save-masks'. If + option '--hard-mask' is effective only load hard masks. The + defaults are 'softmask-%n.tif' and 'hardmask-%n.tif'. In the second form, SOFT-MASK-TEMPLATE defines the names of the soft-mask files. In the third form, HARD-MASK-TEMPLATE additionally defines - the names of the hard-mask files. See option `--save-masks' below + the names of the hard-mask files. See option '--save-masks' below for the description of mask templates. - Options `--load-masks' and `--save-masks' are mutually - exclusive. + Options '--load-masks' and '--save-masks' are mutually exclusive. - `--save-masks' - `--save-masks=SOFT-MASK-TEMPLATE' - `--save-masks=SOFT-MASK-TEMPLATE:HARD-MASK-TEMPLATE' - Save the generated weight masks to image files. - - First form: Save all soft-weight masks in files. If - option `--hard-mask' is effective also save the hard masks. The - defaults are `softmask-%n.tif' and `hardmask-%n.tif'. In the +'--save-masks' +'--save-masks=SOFT-MASK-TEMPLATE' +'--save-masks=SOFT-MASK-TEMPLATE:HARD-MASK-TEMPLATE' + Save the generated weight masks to image files. + + First form: Save all soft-weight masks in files. If + option '--hard-mask' is effective also save the hard masks. The + defaults are 'softmask-%n.tif' and 'hardmask-%n.tif'. In the second form, SOFT-MASK-TEMPLATE defines the names of the soft-mask files. In the third form, HARD-MASK-TEMPLATE additionally defines the names of the hard-mask files. - Enfuse will stop after saving all masks unless - option `--output' is given, too. With both options given, this - is, `--save-masks' and `--output', Enfuse saves all masks and then - proceeds to fuse the output image. - - Both SOFT-MASK-TEMPLATE and HARD-MASK-TEMPLATE define templates - that are expanded for each mask file. In a template a percent - sign (`%') introduces a variable part. All other characters are - copied literally. Lowercase letters refer to the name of the - respective input file, whereas uppercase ones refer to the name of - the output file (*note Common Options::). *note - Table:mask-template-characters:: lists all variables. + Enfuse will stop after saving all masks unless option '--output' is + given, too. With both options given, this is, '--save-masks' and + '--output', Enfuse saves all masks and then proceeds to fuse the + output image. + + Both SOFT-MASK-TEMPLATE and HARD-MASK-TEMPLATE define templates + that are expanded for each mask file. In a template a percent sign + ('%') introduces a variable part. All other characters are copied + literally. Lowercase letters refer to the name of the respective + input file, whereas uppercase ones refer to the name of the output + file (*note Common Options::). *note Table 3.4: + Table:mask-template-characters. lists all variables. - A fancy mask filename template could look like this: + A fancy mask filename template could look like this: %D/soft-mask-%02n-%f.viff - It puts the mask files into the same directory as the output - file (`%D'), generates a two-digit index (`%02n') to keep the mask - files nicely sorted, and decorates the mask filename with the name - of the associated input file (`%f') for easy recognition. + It puts the mask files into the same directory as the output file + ('%D'), generates a two-digit index ('%02n') to keep the mask files + nicely sorted, and decorates the mask filename with the name of the + associated input file ('%f') for easy recognition. + +'--soft-mask' - `--soft-mask' - Consider all masks when fusing. This is the default. + Consider all masks when fusing. This is the default. - Options `--save-masks' and `--load-masks' are mutually exclusive. + Options '--save-masks' and '--load-masks' are mutually exclusive. -`%%' - Produces a literal `%'-sign. +'%%' + Produces a literal '%'-sign. -`%i' +'%i' Expands to the index of the mask file starting at zero. - `%i' supports setting a pad character or a width specification: + '%i' supports setting a pad character or a width specification: - `%' PAD WIDTH `i' + '%' PAD WIDTH 'i' - PAD is either `0' or any punctuation character; the default pad - character is `0'. WIDTH is an integer specifying the minimum - width of the number. The default is the smallest width given the - number of input images, this is 1 for 2-9 images, 2 for 10-99 - images, 3 for 100-999 images, and so on. + PAD is either '0' or any punctuation character; the default pad + character is '0'. WIDTH is an integer specifying the minimum width + of the number. The default is the smallest width given the number + of input images, this is 1 for 2-9 images, 2 for 10-99 images, 3 + for 100-999 images, and so on. - Examples: `%i', `%02i', or `%_4i'. + Examples: '%i', '%02i', or '%_4i'. -`%n' +'%n' Expands to the number of the mask file starting at one. Otherwise - it behaves identically to `%i', including pad character and width + it behaves identically to '%i', including pad character and width specification. -`%p' +'%p' This is the full name (path, filename, and extension) of the input file associated with the mask. - Example: If the input file is called `/home/luser/snap/img.jpg', - `%p' expands to `/home/luser/snap/img.jpg', or shorter: `%p' => - `/home/luser/snap/img.jpg'. + Example: If the input file is called '/home/luser/snap/img.jpg', + '%p' expands to '/home/luser/snap/img.jpg', or shorter: '%p' => + '/home/luser/snap/img.jpg'. -`%P' +'%P' This is the full name of the output file. -`%d' +'%d' Is replaced with the directory part of the associated input file. *note Stripping a non-directory suffix from a file name: (coreutils.info)dirname invocation. - Example (cont.): `%d' => `/home/luser/snap'. + Example (cont.): '%d' => '/home/luser/snap'. -`%D' +'%D' Is replaced with the directory part of the output file. -`%b' +'%b' Is replaced with the non-directory part (often called "basename") of the associated input file. *note Stripping a directory and suffix from a file name: (coreutils.info)basename invocation. - Example (cont.): `%b' => `img.jpg'. + Example (cont.): '%b' => 'img.jpg'. -`%B' +'%B' Is replaced with the non-directory part of the output file. -`%f' +'%f' Is replaced with the filename without path and extension of the associated input file. - Example (cont.): `%f' => `img'. + Example (cont.): '%f' => 'img'. -`%F' +'%F' Is replaced with the filename without path and extension of the output file. -`%e' +'%e' Is replaced with the extension (including the leading dot) of the associated input file. - Example (cont.): `%e' => `.jpg'. + Example (cont.): '%e' => '.jpg'. -`%E' +'%E' Is replaced with the extension of the output file. Table 3.4: Special characters to control the generation of mask @@ -1586,46 +1597,46 @@ Enfuse allows the arguments supplied to the program's options to be separated by different separators. The online documentation and this -manual, however, exclusively use the colon `:' in every syntax +manual, however, exclusively use the colon ':' in every syntax definition and in all examples. *Numeric Arguments* - Valid delimiters are the the semicolon `;', the colon `:', and the -slash `/'. All delimiters may be mixed within any option that takes + Valid delimiters are the the semicolon ';', the colon ':', and the +slash '/'. All delimiters may be mixed within any option that takes numeric arguments. Examples: -`--contrast-edge-scale=0.667:6.67:3.5' +'--contrast-edge-scale=0.667:6.67:3.5' Separate all arguments with colons. -`--contrast-edge-scale=0.667;6.67;3.5' +'--contrast-edge-scale=0.667;6.67;3.5' Use semi-colons. -`--contrast-edge-scale=0.667;6.67/3.5' +'--contrast-edge-scale=0.667;6.67/3.5' Mix semicolon and slash in weird ways. -`--entropy-cutoff=3%/99%' +'--entropy-cutoff=3%/99%' All delimiters also work in conjunction with percentages. -`--gray-projector=channel-mixer:3/6/1' +'--gray-projector=channel-mixer:3/6/1' Separate arguments with a colon and two slashes. -`--gray-projector=channel-mixer/30;60:10' +'--gray-projector=channel-mixer/30;60:10' Go wild and Enfuse will understand. *Filename Arguments* - Here, the accepted delimiters are `,', `;', and `:'. Again, all + Here, the accepted delimiters are ',', ';', and ':'. Again, all delimiters may be mixed within any option that has filename arguments. Examples: -`--save-masks=soft-mask-%03i.tif:hard-mask-03%i.tif' +'--save-masks=soft-mask-%03i.tif:hard-mask-03%i.tif' Separate all arguments with colons. -`--save-masks=%d/soft-%n.tif,%d/hard-%n.tif' +'--save-masks=%d/soft-%n.tif,%d/hard-%n.tif' Use a comma.  @@ -1637,7 +1648,6 @@ Enblend and Enfuse expect that either 1. no input image has a color profile or - 2. all come with the _same_ ICC (http://en.wikipedia.org/wiki/ICC_profile) profile. @@ -1652,34 +1662,34 @@ profiles and without them generates warnings as it generally leads to unpredictable results. - The options `--ciecam' (*note Extended Options::) and its opposite -`--no-ciecam' (*note Extended Options::) overrule the default profile -selection procedure described above. Use option `--ciecam' on a set of + The options '--ciecam' (*note Extended Options::) and its opposite +'--no-ciecam' (*note Extended Options::) overrule the default profile +selection procedure described above. Use option '--ciecam' on a set of input images _without_ color profiles to assign a profile to them and perform the blending or fusing process in CIECAM02 color space. The default profile is sRGB (http://en.wikipedia.org/wiki/SRGB). -Override this setting with option `--fallback-profile' (*note Extended +Override this setting with option '--fallback-profile' (*note Extended Options::). On the other hand, suppress the utilization of CIECAM02 blending or fusing of a set of input images _with_ color profiles with -option `--no-ciecam'. The only reason for the latter is to shorten the +option '--no-ciecam'. The only reason for the latter is to shorten the blending- or fusing-time, because transforming to and back from the CIECAM02 color space are computationally expensive operations. - Option `--ciecam' as well as `--fallback-profile' have no effect on -images with attached color profiles, just as option `--no-ciecam' has -no effect on images without profiles. + Option '--ciecam' as well as '--fallback-profile' have no effect on +images with attached color profiles, just as option '--no-ciecam' has no +effect on images without profiles. The impact of blending in CIECAM02 color space as opposed to the RGB -cube vary with the contents of the input images. Generally colors -lying close together in RGB space experience less change when switching -the blending spaces. However, colors close the border of any color -space can see marked changes. +cube vary with the contents of the input images. Generally colors lying +close together in RGB space experience less change when switching the +blending spaces. However, colors close the border of any color space +can see marked changes. - For color geeks: The transformations to CIECAM02 color space and -back use + For color geeks: The transformations to CIECAM02 color space and back +use * perceptual rendering intent, @@ -1715,7 +1725,7 @@ Image fusion maps each pixel P(i, x, y) of every input image i to a single pixel Q(x, y) in the output image: - P(i, x, y) -> Q(x, y), + P(i, x, y) --> Q(x, y), where x runs from 1 to the common width of the images, y from 1 to the common height, and i from 1 to the number of input images n. @@ -1725,7 +1735,7 @@ w(P(1, x, y)) * P(1, x, y) + ... + w(P(n, x, y)) * P(n, x, y) - -> Q(x, y), (W) + --> Q(x, y), where @@ -1742,15 +1752,15 @@ where we have abbreviated P(i, x, y) to P for simplicity. The user defines the constants w_exp, w_sat, w_cont, and w_ent with the options -`--exposure-weight', `--saturation-weight', `--contrast-weight', and -`--entropy-weight'. The functions f_exp, f_sat, f_cont, and f_ent -along with the window sizes r_cont and r_ent are explained in the next +'--exposure-weight', '--saturation-weight', '--contrast-weight', and +'--entropy-weight'. The functions f_exp, f_sat, f_cont, and f_ent along +with the window sizes r_cont and r_ent are explained in the next sections. * Menu: * Weighted Average:: Enfuse's default weighting algorithm -* Disabling Averaging:: ``Super Trouper'' weighting for focus stacks +* Disabling Averaging:: "Super Trouper" weighting for focus stacks * Single Criterion Fusing:: Fusing with only one of the criteria  @@ -1760,39 +1770,37 @@ ---------------------- By default, Enfuse uses a weighted average, where _each_ pixel -contributes as much as its weight demands. Of course the weights can -be extreme, favoring only a few pixels or even only one pixel in the -input stack. Extremes are not typical, however. - - Equal weights are another extreme that turns (W) into an arithmetic -average. This is why we sometimes speak of the "averaging property" of -this weighting algorithm, like smoothing out noise. +contributes as much as its weight demands. Of course the weights can be +extreme, favoring only a few pixels or even only one pixel in the input +stack. Extremes are not typical, however. + + Equal weights are another extreme that turns the equation into an +arithmetic average. This is why we sometimes speak of the "averaging +property" of this weighting algorithm, like smoothing out noise.  File: enfuse.info, Node: Disabling Averaging, Next: Single Criterion Fusing, Prev: Weighted Average, Up: Weighting Pixels -5.1.2 Disabling Averaging: Option `--hard-mask' +5.1.2 Disabling Averaging: Option '--hard-mask' ----------------------------------------------- The weighted average computation as described above has proven to be -widely successful with the exception of one special case: focus -stacking (*note Focus Stacks::), where the averaging noticeably softens -the final image. - - Use `--hard-mask' to switch Enfuse into a different ("Super -Trouper") weighting mode, where the pixel with the highest weight wins, -this is, gets weight one, and all other pixels get the weight of zero -("The Winner Takes It All."). With `--hard-mask' Equation (W) - - becomes - P(i, x, y) -> Q(x, y), +widely successful with the exception of one special case: focus stacking +(*note Focus Stacks::), where the averaging noticeably softens the final +image. + + Use '--hard-mask' to switch Enfuse into a different ("Super Trouper") +weighting mode, where the pixel with the highest weight wins, this is, +gets weight one, and all other pixels get the weight of zero ("The +Winner Takes It All."). With '--hard-mask' the equation becomes + P(i, x, y) --> Q(x, y), where w(P(i, x, y)) >= w(P(j, x, y)) for all 1 <= j <= n. Note that this "averaging" scheme lacks the nice noise-reduction -property of the weighted average (W) , because only a single input -pixel contributes to the output. +property of the weighted average, because only a single input pixel +contributes to the output.  File: enfuse.info, Node: Single Criterion Fusing, Prev: Disabling Averaging, Up: Weighting Pixels @@ -1803,22 +1811,22 @@ Enfuse allows the user to weight each pixel of an input image by up to four different criteria (*note Overview::). However, it does not force the user to do so. For some applications and more often simply to gain -further insight into the weighting and fusing process, looking at only -a single criterion is the preferred way to work. +further insight into the weighting and fusing process, looking at only a +single criterion is the preferred way to work. The version of Enfuse for which this documentation was prepared, uses -the default weights as stated in *note Table:default-weights::. Notice -that by default _more than one_ weight is larger than zero, which means -they are _active_. +the default weights as stated in *note Table 5.1: Table:default-weights. +Notice that by default _more than one_ weight is larger than zero, which +means they are _active_. Criterion Weight ------------------------ +----------------------- Exposure 1.0 Saturation 0.2 Local Contrast 0.0 Local Entropy 0.0 -Table 5.1: Enfuse's default weights as compiled into version 4.1.3. +Table 5.1: Enfuse's default weights as compiled into version 4.1.4. To disable a particular criterion set its weight to zero as for example @@ -1827,12 +1835,12 @@ --contrast-weight=0 --entropy-weight=0 \ img_[1-3].png instructs Enfuse to consider only the exposure weight. Combine this -with option `--save-masks' and it will become clearer how Enfuse +with option '--save-masks' and it will become clearer how Enfuse computes the exposure weight for the set of images. Another problem that can be inspected by fusing with just a single -active criterion and saving the masks is if the weights of one -criterion completely overpower all others. +active criterion and saving the masks is if the weights of one criterion +completely overpower all others.  File: enfuse.info, Node: Exposure Weighting, Next: Saturation Weighting, Prev: Weighting Pixels, Up: Weighting Functions @@ -1840,17 +1848,17 @@ 5.2 Exposure Weighting ====================== -Exposure weighting prefers pixels with a luminance Y close to the -center of the normalized, real-valued luminance interval [0, 1]. +Exposure weighting prefers pixels with a luminance Y close to the center +of the normalized, real-valued luminance interval [0, 1]. RGB-pixels get converted to luminance using the grayscale projector -given by `--gray-projector', which defaults to `average'. Grayscale +given by '--gray-projector', which defaults to 'average'. Grayscale pixels are identified with luminance. In the normalized luminance interval 0.0 represents pure black and 1.0 represents pure white independently of the data type of the input image. This is, for a JPEG image the luminance 255 maps to 1.0 in the -normalized interval and for a 32 bit TIFF picture the highest luminance +normalized interval and for a 32bit TIFF picture the highest luminance value 4294967295 also maps to 1.0. The middle of the luminance interval, 0.5, is where a neutral gray tone ends up with every camera that had no exposure correction dialed in, for example the image of a @@ -1863,33 +1871,34 @@ w_exp(Y) = exp(-0.5 * ((Y - Mu) / Sigma)^2), whose center Mu and width Sigma are controlled by the command line -options `--exposure-mu' and `--exposure-sigma' respectively. Mu -defaults to 0.5 and Sigma defaults to 0.2. *note Figure:gaussian:: -shows a Gaussian. +options '--exposure-mu' and '--exposure-sigma' respectively. Mu +defaults to 0.5 and Sigma defaults to 0.2. *note Figure 5.1: +Figure:gaussian. shows a Gaussian. +[gaussian] Figure 5.1: Gaussian function with the parameters MU = 0.5 and SIGMA = 0.2. - The options `--exposure-mu' and `--exposure-sigma' are for + The options '--exposure-mu' and '--exposure-sigma' are for fine-tuning the final result without changing the set of input images. -Option `--exposure-mu' sets the point MU of optimum exposure. +Option '--exposure-mu' sets the point MU of optimum exposure. Increasing MU makes Enfuse prefer lighter pixels, rendering the final -image lighter, and vice versa. Option `--exposure-sigma' defines the +image lighter, and vice versa. Option '--exposure-sigma' defines the range SIGMA of acceptable exposures. Small values of SIGMA penalize exposures that deviate from MU more, and vice versa. *Summary of influential options* -`--exposure-weight' +'--exposure-weight' *note Fusion Options:: -`--exposure-mu' +'--exposure-mu' *note Fusion Options:: -`--exposure-sigma' +'--exposure-sigma' *note Fusion Options:: -`--gray-projector' +'--gray-projector' *note Expert Options::  @@ -1927,7 +1936,7 @@ *Summary of influential options* -`--saturation-weight' +'--saturation-weight' *note Fusion Options::  @@ -1949,11 +1958,11 @@ * If the LoG magnitude is below a given threshold, use SDev data, otherwise stick with LoG. *Note Blend SDev and LoG::. - Enfuse converts every RGB image to grayscale before it determines -its contrast. Option `--gray-projector' (*note Expert Options::) -controls the projector function. Depending on the subject, one of -several grayscale projectors may yield the best black-and-white -contrast for image fusion. + Enfuse converts every RGB image to grayscale before it determines its +contrast. Option '--gray-projector' (*note Expert Options::) controls +the projector function. Depending on the subject, one of several +grayscale projectors may yield the best black-and-white contrast for +image fusion. In the following sections we describe each algorithm in detail. @@ -1972,10 +1981,11 @@ The pixel under consideration C sits exactly in the center of a square, the so-called "local analysis window". It always has an uneven edge -length. The user sets the size with option `--contrast-window-size'. -*note Figure:local-analysis-window:: shows two windows with different -sizes. +length. The user sets the size with option '--contrast-window-size'. +*note Figure 5.2: Figure:local-analysis-window. shows two windows with +different sizes. +[local-analysis-window] Figure 5.2: Examples of local analysis windows for the sizes 3 and 5. "C" marks the center where the pixel gets the weight. "N" are neighboring pixels, which all contribute equally to the weight. @@ -1986,31 +1996,31 @@ *Summary of influential options* -`--contrast-weight' +'--contrast-weight' *note Fusion Options:: -`--hard-mask' +'--hard-mask' *note Fusion Options:: -`--contrast-window-size' +'--contrast-window-size' *note Expert Options:: -`--gray-projector' +'--gray-projector' *note Expert Options:: 5.4.1.1 Statistical Moments ........................... We start with the "probability function" w of the random variable X: - w: x -> p({omega: X(omega) = x}). + w: x --> p({omega: X(omega) = x}). It associates a probability p with each of the n different possible outcomes omega of the random variable X. Based on w, we define the "expectation value" or "First Moment" of the random variable X: Ex X := sum(x_i * w(x_i), i = 1..n). -Using the definition of the expectation value, we define the -"variance", or "Second Moment" as +Using the definition of the expectation value, we define the "variance", +or "Second Moment" as Var X := Ex((X - Ex X)^2), and the "standard deviation" as @@ -2037,9 +2047,9 @@ ---------- Footnotes ---------- - (1) In the current implementation a `floor(contrast-window-size / -2)' wide border around the images remains unprocessed and gets a weight -of zero. + (1) In the current implementation a 'floor(contrast-window-size / 2)' +wide border around the images remains unprocessed and gets a weight of +zero.  File: enfuse.info, Node: Laplacian of Gaussian, Next: Blend SDev and LoG, Prev: Standard Deviation, Up: Local Contrast Weighting @@ -2050,17 +2060,17 @@ The "Laplacian of Gaussian" (LoG) is an operator to detect edges in an image. Sometimes the LoG-operator is also called MARR-HILDRETH operator. A Laplacian-of-Gaussian operator, -`vigra::laplacianOfGaussian' +'vigra::laplacianOfGaussian' (http://hci.iwr.uni-heidelberg.de/vigra/doc/vigra/group__CommonConvolutionFilters.html) is part of the package VIGRA (http://hci.iwr.uni-heidelberg.de/vigra/) that Enfuse is built upon and is used for edge detection if -option `--contrast-edge-scale' is non-zero and -`--contrast-min-curvature' equal to or less than zero. +option '--contrast-edge-scale' is non-zero and +'--contrast-min-curvature' equal to or less than zero. Let the Gaussian function be g(x, y) = 1/pi * exp((x^2 + y^2) / (2 * sigma^2))/(2 * sigma^2) -The parameter sigma, the argument of option `--contrast-edge-scale', is +The parameter sigma, the argument of option '--contrast-edge-scale', is the length scale on which edges are detected by g(x, y). We apply the Laplacian operator in Cartesian coordinates Delta := Nabla o Nabla = (d^2/dx^2 + d^2/dy^2) @@ -2074,9 +2084,10 @@ Enfuse uses a discrete approximation of k in the convolution with the image. The operator is radially symmetric with respect to the origin, -which is why we can easily plot it in *note -Figure:laplacian-of-gaussian::, setting R = sqrt(x^2 + y^2). +which is why we can easily plot it in *note Figure 5.3: +Figure:laplacian-of-gaussian, setting R = sqrt(x^2 + y^2). +[laplacian-of-gaussian] Figure 5.3: Laplacian-of-Gaussian function for sigma = 0.5. See also HIPR2: Laplacian of Gaussian @@ -2086,28 +2097,27 @@ all, it is a numerical approximation of the second derivative and deriving always "roughens" a function. The (normalized) mask files relentlessly disclose such problems. Use -option `--contrast-min-curvature' with a _negative_ argument CURVATURE +option '--contrast-min-curvature' with a _negative_ argument CURVATURE to suppress all edges with a curvature below -CURVATURE (which is a -positive value). Check the effects with the mask files and -particularly the hard-mask files (`hardmask-%n.tif') if using -option `--hard-mask'. +positive value). Check the effects with the mask files and particularly +the hard-mask files ('hardmask-%n.tif') if using option '--hard-mask'. To indicate the CURVATURE in relative terms, which is particularly -comprehensible for humans, append a percent sign (`%'). Try minimum +comprehensible for humans, append a percent sign ('%'). Try minimum curvatures starting from -0.5% to -3%. *Summary of influential options* -`--contrast-weight' +'--contrast-weight' *note Fusion Options:: -`--hard-mask' +'--hard-mask' *note Fusion Options:: -`--contrast-edge-scale' +'--contrast-edge-scale' *note Expert Options:: -`--contrast-min-curvature' +'--contrast-min-curvature' *note Expert Options::  @@ -2118,41 +2128,41 @@ Enfuse can team the standard deviation computation and Laplacian of Gaussian to deliver the best of both methods. Use a _positive_ -argument CURVATURE with option `--contrast-min-curvature' to combine +argument CURVATURE with option '--contrast-min-curvature' to combine both algorithms. In this mode of operation Enfuse computes the SDev-weight and the LoG-weight, then uses the LoG to decide whether to go with that value or prefer the SDev data. If the LoG is greater than CURVATURE Enfuse uses the weight delivered by the LoG, otherwise the -SDev-weight is rescaled such that its maximum is equal to CURVATURE, -and the scaled SDev is used as weight. +SDev-weight is rescaled such that its maximum is equal to CURVATURE, and +the scaled SDev is used as weight. This technique merges the two edge detection methods where they are best. The LoG excels with clear edges and cannot be fooled by strong but smooth gradients. However, it is bad at detecting faint edges and -it is susceptible to noise. The SDev on the other hand shines with -even the most marginal edges, and resists noise quite well. Its -weakness is that is is easily deceived by strong and smooth gradients. -Tuning CURVATURE the user can pick the best threshold for a given set -of images. +it is susceptible to noise. The SDev on the other hand shines with even +the most marginal edges, and resists noise quite well. Its weakness is +that is is easily deceived by strong and smooth gradients. Tuning +CURVATURE the user can pick the best threshold for a given set of +images. *Summary of influential options* -`--contrast-weight' +'--contrast-weight' *note Fusion Options:: -`--hard-mask' +'--hard-mask' *note Fusion Options:: -`--contrast-window-size' +'--contrast-window-size' *note Expert Options:: -`--gray-projector' +'--gray-projector' *note Expert Options:: -`--contrast-edge-scale' +'--contrast-edge-scale' *note Expert Options:: -`--contrast-min-curvature' +'--contrast-min-curvature' *note Expert Options::  @@ -2161,15 +2171,15 @@ 5.4.4 Scaling and Choice of Mode -------------------------------- -Experience has shown that neither the parameters EDGESCALE and -CURVATURE nor the mode of operation (SDev-only, LoG-only, or a blend of -both) scales to different image sizes. In practice, this means that if -you start with a set of reduced size images, say 2808x1872 pixels, -carefully optimize EDGESCALE, CURVATURE and so on, and find LoG-only -the best mode, and then switch to the original resolution of 5616x3744 -pixels, multiplying (or dividing) the parameters by four and sticking -to LoG-only might _not_ result in the best fused image. For best -quality, perform the parameter optimization and the search for the most +Experience has shown that neither the parameters EDGESCALE and CURVATURE +nor the mode of operation (SDev-only, LoG-only, or a blend of both) +scales to different image sizes. In practice, this means that if you +start with a set of reduced size images, say 2808x1872 pixels, carefully +optimize EDGESCALE, CURVATURE and so on, and find LoG-only the best +mode, and then switch to the original resolution of 5616x3744 pixels, +multiplying (or dividing) the parameters by four and sticking to +LoG-only might _not_ result in the best fused image. For best quality, +perform the parameter optimization and the search for the most appropriate mode at the final resolution.  @@ -2195,8 +2205,9 @@ entropy of the "impossible message" to zero according to lim(p * log_a(1 / p), p -> 0) = 0. -*note Figure:entropy:: shows an entropy function. +*note Figure 5.4: Figure:entropy. shows an entropy function. +[entropy] Figure 5.4: Entropy function H for an experiment with exactly two outcomes. @@ -2205,7 +2216,7 @@ Enfuse computes a pixel's entropy by considering the pixel itself and its surrounding pixels quite similar to *note Local Contrast -Weighting::. The size of the window is set by `--entropy-window-size'. +Weighting::. The size of the window is set by '--entropy-window-size'. Choosing the right size is difficult, because there is a serious tradeoff between the locality of the data and the size of the sample used to compute H. A large window results in a large sample size and @@ -2217,24 +2228,24 @@ function in dark parts of an image, that is, in areas where the signal-to-noise ratio is low. Without any precautions, high noise is taken to be high entropy, which might not be desired. Use -option `--entropy-cutoff' to control the black level when computing the +option '--entropy-cutoff' to control the black level when computing the entropy. On the other extreme side of lightness, very light parts of an image, the sensor might already have overflown without the signal reaching 1.0 in the normalized luminance interval. For these pixels the entropy is zero and Enfuse can be told of the threshold by properly setting the -second argument of `--entropy-cutoff'. +second argument of '--entropy-cutoff'. *Summary of influential options* -`--entropy-weight' +'--entropy-weight' *note Fusion Options:: -`--entropy-window-size' +'--entropy-window-size' *note Expert Options:: -`--entropy-cutoff' +'--entropy-cutoff' *note Expert Options::  @@ -2243,10 +2254,10 @@ 6 Understanding Masks ********************* -A "binary mask" indicates for every pixel of an image if this pixel -must be considered in further processing, or ignored. For a "weight -mask", the value of the mask determines how much the pixel contributes, -zero again meaning "no contribution". +A "binary mask" indicates for every pixel of an image if this pixel must +be considered in further processing, or ignored. For a "weight mask", +the value of the mask determines how much the pixel contributes, zero +again meaning "no contribution". Masks arise in two places: as part of the input files and as separate files, showing the actual pixel weights prior to image blendung or @@ -2255,11 +2266,11 @@ 6.1 Masks in Input Files ======================== -Each of the input files for Enfuse and Enblend can contain its own -mask. Both applications interpret them as binary masks no matter how -many bits per image pixel they contain. +Each of the input files for Enfuse and Enblend can contain its own mask. +Both applications interpret them as binary masks no matter how many bits +per image pixel they contain. - Use ImageMagick's `identify' or, for TIFF files, `tiffinfo' to + Use ImageMagick's 'identify' or, for TIFF files, 'tiffinfo' to inquire quickly whether a file contains a mask. *note Helpful Programs:: shows where to find these programs on the web. @@ -2283,8 +2294,8 @@ Rows/Strip: 327 Planar Configuration: single image plane -The "Matte" part of the image class and the "Extra Samples" line tell -us that the file features a mask. Also, many interactive image +The "Matte" part of the image class and the "Extra Samples" line tell us +that the file features a mask. Also, many interactive image manipulation programs show the mask as a separate channel, sometimes called "Alpha". There, the white (high mask value) parts of the mask enable pixels and black (low mask value) parts suppress them. @@ -2317,13 +2328,13 @@ channel, Enblend warns and assumes a mask of all non-zero values, that is, it will use every pixel of the input image for fusion. - Stitchers like `nona' add a mask to their output images. + Stitchers like 'nona' add a mask to their output images. Sometimes it is helpful to manually modify a mask before fusion. For example to suppress unwanted objects (insects and cars come into mind) that moved across the scene during the exposures. If the masks of all -input images are black at a certain position, the output image will -have a hole in that position. +input images are black at a certain position, the output image will have +a hole in that position. 6.2 Weight Mask Files ===================== @@ -2337,7 +2348,7 @@ ********************* The default configuration of Enblend and Enfuse assumes a system with -3-4 GB of RAM. +3-4GB of RAM. If Enblend and Enfuse have been compiled with the "image-cache" feature, they do not rely on the operating system's memory management, @@ -2350,14 +2361,13 @@ enfuse --verbose --version -Enblend and Enfuse put the file that holds the image cache either in -the directory pointed to by the environment variable `TMPDIR', or, if -the variable is not set, in directory `/tmp'. It is prudent to ensure -write permissions and enough of free space on the volume with the cache -file. +Enblend and Enfuse put the file that holds the image cache either in the +directory pointed to by the environment variable 'TMPDIR', or, if the +variable is not set, in directory '/tmp'. It is prudent to ensure write +permissions and enough of free space on the volume with the cache file. - The size of the image cache is user configurable with the option `-m -CACHE-SIZE' (*note Extended Options::). Furthermore, option `-b + The size of the image cache is user configurable with the option '-m +CACHE-SIZE' (*note Extended Options::). Furthermore, option '-b BUFFER-SIZE' (*note Extended Options::) allows for fine-tuning the size of a single buffer inside the image cache. Note that CACHE-SIZE is given in megabytes, whereas the unit of BUFFER-SIZE is kilobytes. @@ -2391,7 +2401,7 @@ above aspects even for the biggest data sets, that is, projects with many large images. - *note Table:cache-size-settings:: suggests some cache- and + *note Table 7.1: Table:cache-size-settings. suggests some cache- and buffer-sizes for different amounts of available RAM. RAM | CACHE-SIZE | BUFFER-SIZE | Comment @@ -2403,7 +2413,7 @@ Table 7.1: Suggested cache-size settings - On systems with considerably more than 4 GB of RAM it is recommended + On systems with considerably more than 4GB of RAM it is recommended to run Enblend or Enfuse versions without image cache.  @@ -2432,11 +2442,10 @@ ============================== Images should align well to be suitable for fusion. However, there is -no hard mathematical rule what "well" means. The alignment -requirements for 16 MPixel images to yield a sharp 4"x6" print at -300 dpi ("dpi" means dots per inch) or even for web presentation are -relatively low, whereas the alignment of 8 MPixel images for a 12"x18" -print ought to be tight. +no hard mathematical rule what "well" means. The alignment requirements +for 16MPixel images to yield a sharp 4"x6" print at 300dpi ("dpi" means +dots per inch) or even for web presentation are relatively low, whereas +the alignment of 8MPixel images for a 12"x18" print ought to be tight. If the input images need to be aligned, Hugin (*note Helpful Programs::) is the tool of choice. It produces images exactly in the @@ -2445,8 +2454,8 @@ Sometimes images naturally align extremely well so that no re-alignment is required. An image series with preprogrammed exposure steps taken in rapid succession where the camera is mounted on a heavy -tripod and a humongous ball head, mirror lockup, and a cable release -are used, comes to mind. +tripod and a humongous ball head, mirror lockup, and a cable release are +used, comes to mind. When in doubt about what will work, try it, and judge for yourself. @@ -2454,32 +2463,32 @@ * Fix all camera parameters that are not explicitly varied. - _Aperture_ + _Aperture_ Engage full manual () or aperture-priority () mode. - _Auto-focus_ + _Auto-focus_ Disable "Auto Focus". Be aware that the auto-focus function could be linked to shutter-release button position "half pressed" or to the shutter release in insidious ways. - _Closed eyepiece_ - (This applies only to single lens reflex cameras.) Close the + _Closed eyepiece_ + (This applies only to single lens reflex cameras.) Close the eyepiece when using a cable release to suppress variations in stray light. - _Exposure time/Shutter speed_ + _Exposure time/Shutter speed_ Use the shortest possible exposure time or, in other words, use the fastest shutter speed to avoid blur caused by camera shake or motion blur. - _Flash power_ + _Flash power_ Explicitly control the flash power of _all_ flashes. This is sometimes called "flash exposure lock". - _Sensitivity_ + _Sensitivity_ Disable "Auto ISO". - _White balance_ + _White balance_ Disable "Auto White Balance". Instead, use the most suitable fixed white balance or take the white balance off a white card. When in doubt, use the setting "Daylight" or @@ -2516,24 +2525,24 @@ 8.2 Repetition - Noise Reduction ================================ -*Main Purpose*: Reduce noise +*Main Purpose*: With the default settings, Enfuse computes a weighted average of the -input pixels. For a series of images, repeated with identical -settings, this results in a reduction of (photon shot) noise. In other -words, the dynamic range increases slightly, because the higher -signal-to-noise ratio makes darker shades usable. Furthermore, smooth -or glossy surfaces get a "cleaner" look, and edges become visually -sharper. The nitty-gritty reportage look that sometimes stems from a -high sensitivity setting disappears. +input pixels. For a series of images, repeated with identical settings, +this results in a reduction of (photon shot) noise. In other words, the +dynamic range increases slightly, because the higher signal-to-noise +ratio makes darker shades usable. Furthermore, smooth or glossy +surfaces get a "cleaner" look, and edges become visually sharper. The +nitty-gritty reportage look that sometimes stems from a high sensitivity +setting disappears. Averaged images, and therefore low-noise images, are the base for a multitude of techniques like, for example, differences. The most prominent method in this class is dark-frame subtraction. - The defaults set `--exposure-weight=1.0' and -`--saturation-weight=0.2'. Eliminating the saturation component with -`--saturation-weight=0.0' can be worth an extra run. + The defaults set '--exposure-weight=1.0' and +'--saturation-weight=0.2'. Eliminating the saturation component with +'--saturation-weight=0.0' can be worth an extra run.  File: enfuse.info, Node: Exposure Series, Next: Flash Exposure Series, Prev: Repetition, Up: Applications @@ -2541,30 +2550,30 @@ 8.3 Exposure Series - Dynamic Range Increase ============================================ -*Main Purpose*: Increase manageable dynamic range +*Main Purpose*: An exposure series is a set of images taken with identical parameters except for the exposure time. Some cameras even provide special functions to automate recording exposure series. See the instruction manual of your model for details. - Enfuse's defaults, `--exposure-weight=1.0' and -`--saturation-weight=0.2' are well suited for fusion of _color_ images. + Enfuse's defaults, '--exposure-weight=1.0' and +'--saturation-weight=0.2' are well suited for fusion of _color_ images. Remember that saturation weighting only works for RGB data. -Option `--saturation-weight' helps to control burnt-out highlights, as +Option '--saturation-weight' helps to control burnt-out highlights, as these are heavily desaturated. Alternatively, use -option `--exposure-cutoff' to suppress noise or blown-out highlights +option '--exposure-cutoff' to suppress noise or blown-out highlights without altering the overall brightness too much. If no image suffers from troublesome highlights, the relative saturation weight can be reduced and even be set to zero. - For black and white images `--entropy-weight' can be an alternative -to `--saturation-weight' because it suppresses overexposed pixels, as + For black and white images '--entropy-weight' can be an alternative +to '--saturation-weight' because it suppresses overexposed pixels, as these contain little information. However, entropy weighting is not limited to gray-scale data; it has been successfully applied to RGB -images, too. Note that entropy weighting considers _each_ color -channel of an RGB image separately and chooses the channel with the -minimum entropy as representative for the whole pixel. +images, too. Note that entropy weighting considers _each_ color channel +of an RGB image separately and chooses the channel with the minimum +entropy as representative for the whole pixel. Enfuse offers the photographer tremendous flexibility in fusing differently exposed images. Whether you combine only two pictures or a @@ -2573,9 +2582,9 @@ late 1980s "Max Headroom" TV-Series, to really unreal. Like some time ago in the chemical days of photography, when a new developer opened unseen possibilities for artists, exposure fusion extends a -photographer's expressive space in the digital age. Whether the -results look good or bad, whether the images are dull or exciting, is -entirely up the artist. +photographer's expressive space in the digital age. Whether the results +look good or bad, whether the images are dull or exciting, is entirely +up the artist. In the next sections we give assistance to starters, and rectify several misconceptions about Enfuse. @@ -2594,10 +2603,10 @@ Here are some tips to get you in business quickly. _Include the best single exposure._ - Include the exposure you would have taken if you did not use - Enfuse in your series. It gives you a solid starting point. - Think of the other images as augmenting this best single exposure - to bring out the light and dark features you would like to see. + Include the exposure you would have taken if you did not use Enfuse + in your series. It gives you a solid starting point. Think of the + other images as augmenting this best single exposure to bring out + the light and dark features you would like to see. _Begin with as small a number of images as possible._ Pre-visualizing the results of Enfuse is difficult. The more @@ -2610,7 +2619,7 @@ _Start with a moderate EV-spacing._ As has been pointed out in the previous item, a wide EV-spacing makes pre-visualization harder. So start out with a spacing of - 2/3 EV to 1+1/3 EV. + 2/3EV to 1+1/3EV.  File: enfuse.info, Node: Exposure Series Misconceptions, Prev: Exposure Series Tips, Up: Exposure Series @@ -2634,10 +2643,10 @@ _An exposure series must feature symmetrically-spaced exposures._ Twice wrong! Neither do the exposures have to be "symmetric" like - {0 EV, -2/3 EV, +2/3 EV}, nor does the number of exposures have to - be odd. Series like {-1-1/3 EV, -1/3 EV, +1/3 EV} or {-1 EV, - 1 EV} might be just right. By the way, the order in which the - images were taken does not matter either. + {0EV, -2/3EV, +2/3EV}, nor does the number of exposures have to be + odd. Series like {-1-1/3EV, -1/3EV, +1/3EV} or {-1EV, 1EV} might + be just right. By the way, the order in which the images were + taken does not matter either. _An exposure series must cover the whole dynamic range of the scene._ If you do not want to cover the whole range, you do not have to. @@ -2662,9 +2671,9 @@ 8.4 Flash Exposure Series - Directed Lighting ============================================= -*Main Purpose*: ??? +*Main Purpose*: -... + ...  File: enfuse.info, Node: Polarization Series, Next: Focus Stacks, Prev: Flash Exposure Series, Up: Applications @@ -2672,11 +2681,11 @@ 8.5 Polarization Series - Saturation Enhancement ================================================ -*Main Purpose*: Reflection suppression, saturation enhancement +*Main Purpose*: -In the current implementation of Enfuse, it is not possible in general -to fuse a polarization series. Naively abusing `--saturation-weight' -will not work. + In the current implementation of Enfuse, it is not possible in +general to fuse a polarization series. Naively abusing +'--saturation-weight' will not work.  File: enfuse.info, Node: Focus Stacks, Prev: Polarization Series, Up: Applications @@ -2684,9 +2693,9 @@ 8.6 Focus Stacks - Depth-of-Field Increase ========================================== -*Main Purpose*: Synthetic Depth-of-Field Increase +*Main Purpose*: -A "focus stack" is a series of images where the distance of the focal + A "focus stack" is a series of images where the distance of the focal plane from the sensor varies. Sloppily speaking, the images were focussed at different distances. Fusing such a stack increases the depth-of-field (DOF) beyond the physical limits of diffraction. @@ -2709,20 +2718,18 @@ Given * a fixed sensor or film size, - * a lens' particular focal length, and - * a notion about "sharpness", technically speaking the size of the circle-of-confusion (CoC) -the photographer controls the depth-of-field with the aperture. -Smaller apertures - this is larger aperture numbers - increase the DOF -and vice versa. However, smaller apertures increase diffraction which -in turn renders the image unsharp. So, there is an optimum aperture -where the photographer gets maximum DOF. Sadly, for some purposes like -macro shots it is not enough. One way out is to combine the sharp -parts of images focused at different distances, thereby artificially -increasing the total DOF. This is exactly what Enfuse can do. +the photographer controls the depth-of-field with the aperture. Smaller +apertures - this is larger aperture numbers - increase the DOF and vice +versa. However, smaller apertures increase diffraction which in turn +renders the image unsharp. So, there is an optimum aperture where the +photographer gets maximum DOF. Sadly, for some purposes like macro +shots it is not enough. One way out is to combine the sharp parts of +images focused at different distances, thereby artificially increasing +the total DOF. This is exactly what Enfuse can do. All lenses have a so called "sweet spot" aperture, where their resolution is best. Taking pictures at this aperture, the photographer @@ -2739,15 +2746,15 @@ ---------------------------- We are going to combine images with limited DOF to increase their -in-focus parts. The whole process is about image sharpness. -Therefore, the input images must align very well, not just well, but -very well. For optimum results the maximum control point distance in -Hugin (*note Helpful Programs::) should not exceed 0.3-0.5 pixels to -ensure perfect blending. - - As in all image fusion operations it is preferable to use 16 bit -linear (gamma = 1) images throughout, but 8 bit gamma encoded images -will do. Naturally, high SNR input data always is welcome. +in-focus parts. The whole process is about image sharpness. Therefore, +the input images must align very well, not just well, but very well. +For optimum results the maximum control point distance in Hugin (*note +Helpful Programs::) should not exceed 0.3-0.5pixels to ensure perfect +blending. + + As in all image fusion operations it is preferable to use 16bit +linear (gamma = 1) images throughout, but 8bit gamma encoded images will +do. Naturally, high SNR input data always is welcome.  File: enfuse.info, Node: Local Contrast Based Fusing, Next: Basic Focus Stacking, Prev: Preparing Focus Stacks, Up: Focus Stacks @@ -2768,26 +2775,26 @@ Here is what each option causes: -`--exposure-weight=0' - Switch *off* exposure based pixel selection. The default weight - is 1.0. +'--exposure-weight=0' + Switch *off* exposure based pixel selection. The default weight is + 1.0. -`--saturation-weight=0' +'--saturation-weight=0' Switch *off* saturation based pixel selection. The default weight is 0.2. -`--contrast-weight=1' +'--contrast-weight=1' Switch *on* pixel selection based on local contrast. -`--hard-mask' +'--hard-mask' Select the best pixel from the image stack and ignore all others. Without this option, Enfuse uses all pixels in the stack and weights them according to their respective quality, which in our - case is local contrast. Without `--hard-mask', the result will + case is local contrast. Without '--hard-mask', the result will always look a bit soft. *Note Local Contrast Weighting::. If you want to see some entertaining progress messages - local-contrast -weighting takes a while -, also pass the `--verbose' option for a +weighting takes a while -, also pass the '--verbose' option for a verbose progress report.  @@ -2846,9 +2853,9 @@ ...................................... Let us use an example to illustrate the problem of relating the -sharpness with the local contrast variations. Say we use a 5x5 -contrast window. Moreover, let `sharp_edge' and `smooth_edge' be two -specific configurations: +sharpness with the local contrast variations. Say we use a 5x5 contrast +window. Moreover, let 'sharp_edge' and 'smooth_edge' be two specific +configurations: sharp_edge = [ 0, 0, 200, 0, 0; 0, 225, 0, 0, 0; @@ -2862,31 +2869,34 @@ 3, 66, 128, 191, 253; 5, 67, 130, 192, 255] - where `;' separates the rows and `,' separates the columns. This is + where ';' separates the rows and ',' separates the columns. This is in fact Octave (http://www.gnu.org/software/octave/) syntax. - *note Figure:sharp-edge:: and *note Figure:smooth-edge:: show plots -of the matrices `sharp_edge' and `smooth_edge'. + *note Figure 8.1: Figure:sharp-edge. and *note Figure 8.2: +Figure:smooth-edge. show plots of the matrices 'sharp_edge' and +'smooth_edge'. +[sharp-edge] Figure 8.1: 3D plot augmented by contour plot of the -matrix `sharp_edge'. +matrix 'sharp_edge'. +[smooth-edge] Figure 8.2: 3D plot augmented by contour plot of the -matrix `smooth_edge'. +matrix 'smooth_edge'. -Our intuition lets us "see" an extremely sharp edge in the first -matrix, whereas the second one describes an extraordinarily smooth -diagonal intensity ramp. Which one will be selected? Well, -`sharp_edge' has a standard deviation of 88.07 and `smooth_edge' has -88.41. Thus, `smooth_edge' wins, contradicting our intuition, and even -worse, our intention! +Our intuition lets us "see" an extremely sharp edge in the first matrix, +whereas the second one describes an extraordinarily smooth diagonal +intensity ramp. Which one will be selected? Well, 'sharp_edge' has a +standard deviation of 88.07 and 'smooth_edge' has 88.41. Thus, +'smooth_edge' wins, contradicting our intuition, and even worse, our +intention! - Sadly, configurations like `smooth_edge' occur more often with + Sadly, configurations like 'smooth_edge' occur more often with high-quality, good bokeh -(http://www.luminous-landscape.com/essays/bokeh.shtml) lenses. In -fact, they are the very manifestation of "good bokeh". Therefore, -Laplacian edge detection plays an important role when working with -high-quality lenses. +(http://www.luminous-landscape.com/essays/bokeh.shtml) lenses. In fact, +they are the very manifestation of "good bokeh". Therefore, Laplacian +edge detection plays an important role when working with high-quality +lenses.  File: enfuse.info, Node: Laplacian Edge Detection, Next: Local Contrast Enhancement, Prev: Local Contrast Problem, Up: Advanced Focus Stacking @@ -2896,20 +2906,19 @@ Enfuse provides a Laplacian-based algorithm that can help in situations where weighting based on the standard deviation fails. It is activated -with a positive value for SCALE in `--contrast-edge-scale'=SCALE. The -Laplacian will detect two-dimensional _curvature_ on the scale of -SCALE. Here and in the following we simply speak of "curvature" where -we mean "magnitude of curvature". That is, we shall not distinguish -between convex and concave edges. Enfuse always use the magnitude of -curvature for weighting. +with a positive value for SCALE in '--contrast-edge-scale'=SCALE. The +Laplacian will detect two-dimensional _curvature_ on the scale of SCALE. +Here and in the following we simply speak of "curvature" where we mean +"magnitude of curvature". That is, we shall not distinguish between +convex and concave edges. Enfuse always use the magnitude of curvature +for weighting. - Typically, SCALE ranges between 0.1 pixels and 0.5 pixels, where -0.3 pixels is a good starting point. To find the best value for SCALE + Typically, SCALE ranges between 0.1pixels and 0.5pixels, where +0.3pixels is a good starting point. To find the best value for SCALE though, usually some experimentation will be necessary. Use -`--save-masks' to get all soft-mask (default: -`softmask-%n.tif') and hard-mask files (default: -`hardmask-%n.tif'). Check how different scales affect the artifacts. -Also *note Understanding Masks::. +'--save-masks' to get all soft-mask (default: 'softmask-%n.tif') and +hard-mask files (default: 'hardmask-%n.tif'). Check how different +scales affect the artifacts. Also *note Understanding Masks::.  File: enfuse.info, Node: Local Contrast Enhancement, Next: Suppressing Noise or Recognizing Faint Edges, Prev: Laplacian Edge Detection, Up: Advanced Focus Stacking @@ -2917,16 +2926,16 @@ 8.6.5.3 Local Contrast Enhancement .................................. -Sometimes Enfuse misses smoother edges with `--contrast-edge-scale' and +Sometimes Enfuse misses smoother edges with '--contrast-edge-scale' and a little local contrast enhancement (LCE) helps. Set -`--contrast-edge-scale'=SCALE:LCE-SCALE:LCE-FACTOR. where LCE-SCALE -and LCE-FACTOR work like the unsharp mask -(http://www.cambridgeincolour.com/tutorials/unsharp-mask.htm) filters -in various image manipulation programs. Start with LCE-SCALE ten times -the value of SCALE and a LCE-FACTOR of 2-5. +'--contrast-edge-scale'=SCALE:LCE-SCALE:LCE-FACTOR. where LCE-SCALE and +LCE-FACTOR work like the unsharp mask +(http://www.cambridgeincolour.com/tutorials/unsharp-mask.htm) filters in +various image manipulation programs. Start with LCE-SCALE ten times the +value of SCALE and a LCE-FACTOR of 2-5. - LCE-SCALE can be specified as a percentage of SCALE. LCE-FACTOR -also can be specified as a percentage. Examples: + LCE-SCALE can be specified as a percentage of SCALE. LCE-FACTOR also +can be specified as a percentage. Examples: --contrast-edge-scale=0.3:3.0:3 --contrast-edge-scale=0.3:1000%:3.0 @@ -2945,54 +2954,53 @@ problem than the local-contrast algorithm, but it has two shortcomings: 1. The Laplacian is very susceptible to noise and - 2. it fails to recognize faint edges. -The `--contrast-min-curvature' option helps to mitigate both flaws. +The '--contrast-min-curvature' option helps to mitigate both flaws. - The argument to `--contrast-min-curvature'=CURVATURE either is an -absolute lightness value, for example 0..255 for 8 bit data and -0..65535 for 16 bit data, or, when given with a `%'-sign it is a -relative lightness value ranging from 0% to 100%. + The argument to '--contrast-min-curvature'=CURVATURE either is an +absolute lightness value, for example 0..255 for 8bit data and 0..65535 +for 16bit data, or, when given with a '%'-sign it is a relative +lightness value ranging from 0% to 100%. To suppress unreal edges or counter excessive noise, use the -`--contrast-min-curvature' option with a _negative_ curvature measure +'--contrast-min-curvature' option with a _negative_ curvature measure CURVATURE. This forces all curvatures less than -CURVATURE to zero. A _positive_ curvature measure CURVATURE makes Enfuse merge the LoG -data with the local-contrast data. Every curvature larger than or -equal to CURVATURE is left unchanged, and every curvature less than -CURVATURE gets replaced with the rescaled local-contrast data, such -that the largest local contrast is just below CURVATURE. This combines -the best parts of both techniques and ensures a precise edge detection -over the whole range of edge curvatures. +data with the local-contrast data. Every curvature larger than or equal +to CURVATURE is left unchanged, and every curvature less than CURVATURE +gets replaced with the rescaled local-contrast data, such that the +largest local contrast is just below CURVATURE. This combines the best +parts of both techniques and ensures a precise edge detection over the +whole range of edge curvatures. *Summary* -`--contrast-edge-scale=0.3' - Use LoG to detect edges on a scale of 0.3 pixels. Apply the - default grayscale projector: `average'. +'--contrast-edge-scale=0.3' + Use LoG to detect edges on a scale of 0.3pixels. Apply the default + grayscale projector: 'average'. -`--contrast-edge-scale=0.3 --gray-projector=l-star' - Use LoG to detect edges on a scale of 0.3 pixels. Apply the +'--contrast-edge-scale=0.3 --gray-projector=l-star' + Use LoG to detect edges on a scale of 0.3pixels. Apply the L*-grayscale projector. -`--contrast-edge-scale=0.3:3:300%' - Use LoG to detect edges on a scale of 0.3 pixels, pre-sharpen the - input images by 300% on a scale of 3 pixels. Apply the default - grayscale projector: `average'. - -`--contrast-edge-scale=0.3 --contrast-min-curvature=-0.5%' - Use LoG to detect edges on a scale of 0.3 pixels. Apply the - default grayscale projector: `average' and throw away all edges - with a curvature of less than 0.5%. - -`--contrast-edge-scale=0.3 --contrast-min-curvature=0.5% --contrast-window-size=7' - Use LoG to detect edges on a scale of 0.3 pixels. Apply the - default grayscale projector: `average' and throw away all edges - with a curvature of less than 0.5% and replace the LoG data - between 0% and 0.5% with SDev data. Use a window of 7x7 pixel - window to compute the SDev. +'--contrast-edge-scale=0.3:3:300%' + Use LoG to detect edges on a scale of 0.3pixels, pre-sharpen the + input images by 300% on a scale of 3pixels. Apply the default + grayscale projector: 'average'. + +'--contrast-edge-scale=0.3 --contrast-min-curvature=-0.5%' + Use LoG to detect edges on a scale of 0.3pixels. Apply the default + grayscale projector: 'average' and throw away all edges with a + curvature of less than 0.5%. + +'--contrast-edge-scale=0.3 --contrast-min-curvature=0.5% --contrast-window-size=7' + Use LoG to detect edges on a scale of 0.3pixels. Apply the default + grayscale projector: 'average' and throw away all edges with a + curvature of less than 0.5% and replace the LoG data between 0% and + 0.5% with SDev data. Use a window of 7x7pixel window to compute + the SDev.  File: enfuse.info, Node: Focus Stacking Decision Tree, Prev: Suppressing Noise or Recognizing Faint Edges, Up: Advanced Focus Stacking @@ -3000,9 +3008,10 @@ 8.6.5.5 Focus Stacking Decision Tree .................................... -*note Figure:focus-stacking-decision-tree:: helps the user to arrive at -a well-fused focus stack with as few steps as possible. +*note Figure 8.3: Figure:focus-stacking-decision-tree. helps the user to +arrive at a well-fused focus stack with as few steps as possible. +[focus-stack-decision-tree] Figure 8.3: Focus stacking decision tree. Always start with the default, contrast weighting with a local @@ -3010,14 +3019,14 @@ Focus Stacking:: switch to Laplacian-of-Gaussian contrast detection. If some seams remain even in LoG-mode, decrease the sensitivity of -the edge detection with a positive `--contrast-min-curvature'. A too -high value of `--contrast-min-curvature' suppresses fine detail though. +the edge detection with a positive '--contrast-min-curvature'. A too +high value of '--contrast-min-curvature' suppresses fine detail though. Part of the detail can be brought back with pre-sharpening, that is, *note Local Contrast Enhancement:: or combining LoG with local-contrast-window mode by using a negative -`--contrast-min-curvature'. +'--contrast-min-curvature'. - Carefully examining the masks (option `--save-masks') that Enfuse + Carefully examining the masks (option '--save-masks') that Enfuse uses helps to judge the effects of the parameters.  @@ -3033,10 +3042,10 @@ Aligning focus stacks requires varying the viewing angle, which corresponds to a changing focal length. Hence, the same pixel on - the sensor gets mapped onto different positions in the final - image. Dirt spots will occur not only once but as many times as - there are images in the stack - something that is no fun to - correct in postprocessing. + the sensor gets mapped onto different positions in the final image. + Dirt spots will occur not only once but as many times as there are + images in the stack - something that is no fun to correct in + postprocessing. Along the same lines, the photographer may want to consider to prepare dark frames before, and possibly also after, the shoot of @@ -3045,7 +3054,7 @@ * Prefer a low-sensitivity setting ("ISO") on the camera to get low-noise images. - Fusing with `--hard-mask' does not average, and thus does not + Fusing with '--hard-mask' does not average, and thus does not suppress any noise in the input images. * If the transition of in-focus to out-of-focus areas is too abrupt, @@ -3067,52 +3076,56 @@ Enfuse and Enblend. *Raw Image Conversion* - * DCRaw (http://www.cybercom.net/~dcoffin/dcraw/) is a - universal raw-converter written by DAVID COFFIN. + + * DCRaw (http://www.cybercom.net/~dcoffin/dcraw/) is a universal + raw-converter written by DAVID COFFIN. * UFRaw (http://ufraw.sourceforge.net/), a raw converter written - by UDI FUCHS and based on DCRaw, adds a GUI (`ufraw'), - versatile batch processing (`ufraw-batch'), and some + by UDI FUCHS and based on DCRaw, adds a GUI ('ufraw'), + versatile batch processing ('ufraw-batch'), and some additional features such as cropping, noise reduction with wavelets, and automatic lens error correction. *Image Alignment and Rendering* + * ALE (http://auricle.dyndns.org/ALE/), DAVID HILVERT'S anti-lamenessing engine for the real die-hard command-line users aligns, filters, and renders images. - * Hugin (http://hugin.sourceforge.net/) is a GUI that aligns - and stitches images. + * Hugin (http://hugin.sourceforge.net/) is a GUI that aligns and + stitches images. - It comes with several command line tools, like `nona' to - stitch panorama images, `align_image_stack' to align - overlapping images for HDR or create focus stacks, and - `fulla' to correct lens errors. + It comes with several command line tools, like 'nona' to + stitch panorama images, 'align_image_stack' to align + overlapping images for HDR or create focus stacks, and 'fulla' + to correct lens errors. * PanoTools (http://panotools.sourceforge.net/) the successor of HELMUT DERSCH'S original PanoTools (http://www.all-in-one.ee/~dersch/) offers a set of command-line driven applications to create panoramas. Most - notable are `PTOptimizer' and `PTmender'. + notable are 'PTOptimizer' and 'PTmender'. *Image Manipulation* + * CinePaint (http://www.cinepaint.org/) is a branch of an early Gimp forked off at version 1.0.4. It sports much less - features than the current Gimp, but offers 8 bit, 16 bit and - 32 bit color channels, HDR (for example floating-point TIFF, + features than the current Gimp, but offers 8bit, 16bit and + 32bit color channels, HDR (for example floating-point TIFF, and OpenEXR), and a tightly integrated color management system. * The Gimp (http://www.gimp.org/) is a general purpose image - manipulation program. At the time of this writing it is - still limited to images with only 8 bits per channel. + manipulation program. At the time of this writing it is still + limited to images with only 8bits per channel. * ImageMagick (http://www.imagemagick.org/) and its clone GraphicsMagick (http://www.graphicsmagick.org/) are general purpose command-line driven image manipulation programs, for - example, `convert', `display', `identify', and `montage'. + example, 'convert', 'display', 'identify', and 'montage'. *High Dynamic Range* + * OpenEXR (http://www.openexr.com/) offers libraries and some programs to work with the EXR HDR format. @@ -3120,28 +3133,30 @@ and tonemap high-dynamic range images. *Libraries* + * LibJPEG (http://www.ijg.org/) is a library for handling the JPEG (JFIF) image format. * LibPNG (http://www.libpng.org/pub/png/libpng.html) is a - library that handles the Portable Network Graphics (PNG) - image format. + library that handles the Portable Network Graphics (PNG) image + format. * LibTIFF (http://www.remotesensing.org/libtiff/) offers a library and utility programs to manipulate the ubiquitous Tagged Image File Format, TIFF. - The nifty `tiffinfo' command quickly inquires the properties + The nifty 'tiffinfo' command quickly inquires the properties of TIFF files. *Meta-Data Handling* - * EXIFTool (http://www.sno.phy.queensu.ca/~phil/exiftool/) - reads and writes EXIF meta data. In particular it copies - meta data from one image to another. + + * EXIFTool (http://www.sno.phy.queensu.ca/~phil/exiftool/) reads + and writes EXIF meta data. In particular it copies meta data + from one image to another. * LittleCMS (http://www.littlecms.com/) is the color management library used by Hugin, DCRaw, UFRaw, Enblend, and Enfuse. It - supplies some binaries, too. `tifficc', an ICC color profile + supplies some binaries, too. 'tifficc', an ICC color profile applier, is of particular interest.  @@ -3153,8 +3168,8 @@ Most of this appendix was taken from the Octave (http://www.gnu.org/software/octave/) documentation. -Bug reports play an important role in making Enblend and Enfuse -reliable and enjoyable. +Bug reports play an important role in making Enblend and Enfuse reliable +and enjoyable. When you encounter a problem, the first thing to do is to see if it is already known. To this end visit the package's LaunchPad @@ -3177,8 +3192,8 @@ * If Enblend or Enfuse produce incorrect results, for any input whatever, that is a bug. - * If Enblend or Enfuse produce an error message for valid input, - that is a bug. + * If Enblend or Enfuse produce an error message for valid input, that + is a bug. * If Enblend or Enfuse do not produce an error message for invalid input, that is a bug. @@ -3186,11 +3201,11 @@ A.2 How to Report Bugs ====================== -The fundamental principle of reporting bugs usefully is this: report -all the facts. If you are not sure whether to state a fact or leave it -out, state it. Often people omit facts because they think they know -what causes the problem and they conclude that some details do not -matter. Play it safe and give a specific, complete example. +The fundamental principle of reporting bugs usefully is this: report all +the facts. If you are not sure whether to state a fact or leave it out, +state it. Often people omit facts because they think they know what +causes the problem and they conclude that some details do not matter. +Play it safe and give a specific, complete example. Keep in mind that the purpose of a bug report is to enable someone to fix the bug if it is not known. Always write your bug reports on the @@ -3205,8 +3220,8 @@ things: * The exact version and configuration of Enblend or Enfuse. You can - get this by running it with the options `--version' and - `--verbose'. + get this by running it with the options '--version' and + '--verbose'. * A complete set of input images that will reproduce the bug. Strive for a minimal set of _small_(1) images. @@ -3215,7 +3230,7 @@ and its version number. * A complete list of any modifications you have made to the source. - Be precise about these changes. Show a `diff' for them. + Be precise about these changes. Show a 'diff' for them. * Details of any other deviations from the standard procedure for installing Enblend and Enfuse. @@ -3257,20 +3272,19 @@ ========================================= If you would like to write bug fixes or improvements for Enblend or -Enfuse, that is very helpful. When you send your changes, please -follow these guidelines to avoid causing extra work for us in studying -the patches. If you do not follow these guidelines, your information -might still be useful, but using it will take extra work. +Enfuse, that is very helpful. When you send your changes, please follow +these guidelines to avoid causing extra work for us in studying the +patches. If you do not follow these guidelines, your information might +still be useful, but using it will take extra work. * Send an explanation with your changes of what problem they fix or what improvement they bring about. For a bug fix, just include a copy of the bug report, and explain why the change fixes the bug. * Always include a proper bug report for the problem you think you - have fixed. We need to convince ourselves that the change is - right before installing it. Even if it is right, we might have - trouble judging it if we do not have a way to reproduce the - problem. + have fixed. We need to convince ourselves that the change is right + before installing it. Even if it is right, we might have trouble + judging it if we do not have a way to reproduce the problem. * Include all the comments that are appropriate to help people reading the source in the future understand why this change was @@ -3284,7 +3298,7 @@ * Use the version control system to make your diffs. Prefer the unified diff (http://en.wikipedia.org/wiki/Diff#Unified_format) - format: `hg diff --unified 4'. + format: 'hg diff --unified 4'. * You can increase the probability that your patch gets applied by basing it on a recent revision of the sources. @@ -3304,8 +3318,8 @@ *Contributors* - * PABLO D'ANGELO () added the - contrast criteria. + * PABLO D'ANGELO () added the contrast + criteria. * JOE BEDA: Win32 porting up to version 3.2. @@ -3325,9 +3339,9 @@ version 4.0. * CHRISTOPH SPIEL () added the gray - projectors, the LoG-based edge detection, an O(n)-algorithm for - the calculation of local contrast, entropy weighting, and various - other features. + projectors, the LoG-based edge detection, an O(n)-algorithm for the + calculation of local contrast, entropy weighting, and various other + features. * BRENT TOWNSHEND, : HDR support. @@ -3368,21 +3382,21 @@ free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless - of subject matter or whether it is published as a printed book. - We recommend this License principally for works whose purpose is + of subject matter or whether it is published as a printed book. We + recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, - that contains a notice placed by the copyright holder saying it - can be distributed under the terms of this License. Such a notice + that contains a notice placed by the copyright holder saying it can + be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member - of the public is a licensee, and is addressed as "you". You - accept the license if you copy, modify or distribute the work in a - way requiring permission under copyright law. + of the public is a licensee, and is addressed as "you". You accept + the license if you copy, modify or distribute the work in a way + requiring permission under copyright law. A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with @@ -3400,12 +3414,12 @@ regarding them. The "Invariant Sections" are certain Secondary Sections whose - titles are designated, as being those of Invariant Sections, in - the notice that says that the Document is released under this - License. If a section does not fit the above definition of - Secondary then it is not allowed to be designated as Invariant. - The Document may contain zero Invariant Sections. If the Document - does not identify any Invariant Sections then there are none. + titles are designated, as being those of Invariant Sections, in the + notice that says that the Document is released under this License. + If a section does not fit the above definition of Secondary then it + is not allowed to be designated as Invariant. The Document may + contain zero Invariant Sections. If the Document does not identify + any Invariant Sections then there are none. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice @@ -3416,27 +3430,27 @@ A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document - straightforwardly with generic text editors or (for images - composed of pixels) generic paint programs or (for drawings) some - widely available drawing editor, and that is suitable for input to - text formatters or for automatic translation to a variety of - formats suitable for input to text formatters. A copy made in an - otherwise Transparent file format whose markup, or absence of - markup, has been arranged to thwart or discourage subsequent - modification by readers is not Transparent. An image format is - not Transparent if used for any substantial amount of text. A - copy that is not "Transparent" is called "Opaque". + straightforwardly with generic text editors or (for images composed + of pixels) generic paint programs or (for drawings) some widely + available drawing editor, and that is suitable for input to text + formatters or for automatic translation to a variety of formats + suitable for input to text formatters. A copy made in an otherwise + Transparent file format whose markup, or absence of markup, has + been arranged to thwart or discourage subsequent modification by + readers is not Transparent. An image format is not Transparent if + used for any substantial amount of text. A copy that is not + "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, - SGML or XML using a publicly available DTD, and - standard-conforming simple HTML, PostScript or PDF designed for - human modification. Examples of transparent image formats include - PNG, XCF and JPG. Opaque formats include proprietary formats that - can be read and edited only by proprietary word processors, SGML or - XML for which the DTD and/or processing tools are not generally - available, and the machine-generated HTML, PostScript or PDF - produced by some word processors for output purposes only. + SGML or XML using a publicly available DTD, and standard-conforming + simple HTML, PostScript or PDF designed for human modification. + Examples of transparent image formats include PNG, XCF and JPG. + Opaque formats include proprietary formats that can be read and + edited only by proprietary word processors, SGML or XML for which + the DTD and/or processing tools are not generally available, and + the machine-generated HTML, PostScript or PDF produced by some word + processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the @@ -3471,8 +3485,8 @@ may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you - distribute a large enough number of copies you must also follow - the conditions in section 3. + distribute a large enough number of copies you must also follow the + conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. @@ -3486,12 +3500,11 @@ these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The - front cover must present the full title with all words of the - title equally prominent and visible. You may add other material - on the covers in addition. Copying with changes limited to the - covers, as long as they preserve the title of the Document and - satisfy these conditions, can be treated as verbatim copying in - other respects. + front cover must present the full title with all words of the title + equally prominent and visible. You may add other material on the + covers in addition. Copying with changes limited to the covers, as + long as they preserve the title of the Document and satisfy these + conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit @@ -3499,40 +3512,39 @@ adjacent pages. If you publish or distribute Opaque copies of the Document - numbering more than 100, you must either include a - machine-readable Transparent copy along with each Opaque copy, or - state in or with each Opaque copy a computer-network location from - which the general network-using public has access to download - using public-standard network protocols a complete Transparent - copy of the Document, free of added material. If you use the - latter option, you must take reasonably prudent steps, when you - begin distribution of Opaque copies in quantity, to ensure that - this Transparent copy will remain thus accessible at the stated - location until at least one year after the last time you - distribute an Opaque copy (directly or through your agents or - retailers) of that edition to the public. + numbering more than 100, you must either include a machine-readable + Transparent copy along with each Opaque copy, or state in or with + each Opaque copy a computer-network location from which the general + network-using public has access to download using public-standard + network protocols a complete Transparent copy of the Document, free + of added material. If you use the latter option, you must take + reasonably prudent steps, when you begin distribution of Opaque + copies in quantity, to ensure that this Transparent copy will + remain thus accessible at the stated location until at least one + year after the last time you distribute an Opaque copy (directly or + through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of - the Document well before redistributing any large number of - copies, to give them a chance to provide you with an updated - version of the Document. + the Document well before redistributing any large number of copies, + to give them a chance to provide you with an updated version of the + Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you - release the Modified Version under precisely this License, with - the Modified Version filling the role of the Document, thus - licensing distribution and modification of the Modified Version to - whoever possesses a copy of it. In addition, you must do these - things in the Modified Version: + release the Modified Version under precisely this License, with the + Modified Version filling the role of the Document, thus licensing + distribution and modification of the Modified Version to whoever + possesses a copy of it. In addition, you must do these things in + the Modified Version: A. Use in the Title Page (and on the covers, if any) a title - distinct from that of the Document, and from those of - previous versions (which should, if there were any, be listed - in the History section of the Document). You may use the - same title as a previous version if the original publisher of - that version gives permission. + distinct from that of the Document, and from those of previous + versions (which should, if there were any, be listed in the + History section of the Document). You may use the same title + as a previous version if the original publisher of that + version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in @@ -3562,31 +3574,30 @@ I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new - authors, and publisher of the Modified Version as given on - the Title Page. If there is no section Entitled "History" in - the Document, create one stating the title, year, authors, - and publisher of the Document as given on its Title Page, - then add an item describing the Modified Version as stated in - the previous sentence. + authors, and publisher of the Modified Version as given on the + Title Page. If there is no section Entitled "History" in the + Document, create one stating the title, year, authors, and + publisher of the Document as given on its Title Page, then add + an item describing the Modified Version as stated in the + previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for - previous versions it was based on. These may be placed in - the "History" section. You may omit a network location for a - work that was published at least four years before the - Document itself, or if the original publisher of the version - it refers to gives permission. + previous versions it was based on. These may be placed in the + "History" section. You may omit a network location for a work + that was published at least four years before the Document + itself, or if the original publisher of the version it refers + to gives permission. K. For any section Entitled "Acknowledgements" or "Dedications", - Preserve the Title of the section, and preserve in the - section all the substance and tone of each of the contributor + Preserve the Title of the section, and preserve in the section + all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. - L. Preserve all the Invariant Sections of the Document, - unaltered in their text and in their titles. Section numbers - or the equivalent are not considered part of the section - titles. + L. Preserve all the Invariant Sections of the Document, unaltered + in their text and in their titles. Section numbers or the + equivalent are not considered part of the section titles. M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version. @@ -3599,11 +3610,11 @@ If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no - material copied from the Document, you may at your option - designate some or all of these sections as invariant. To do this, - add their titles to the list of Invariant Sections in the Modified - Version's license notice. These titles must be distinct from any - other section titles. + material copied from the Document, you may at your option designate + some or all of these sections as invariant. To do this, add their + titles to the list of Invariant Sections in the Modified Version's + license notice. These titles must be distinct from any other + section titles. You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various @@ -3612,15 +3623,15 @@ definition of a standard. You may add a passage of up to five words as a Front-Cover Text, - and a passage of up to 25 words as a Back-Cover Text, to the end - of the list of Cover Texts in the Modified Version. Only one - passage of Front-Cover Text and one of Back-Cover Text may be - added by (or through arrangements made by) any one entity. If the - Document already includes a cover text for the same cover, - previously added by you or by arrangement made by the same entity - you are acting on behalf of, you may not add another; but you may - replace the old one, on explicit permission from the previous - publisher that added the old one. + and a passage of up to 25 words as a Back-Cover Text, to the end of + the list of Cover Texts in the Modified Version. Only one passage + of Front-Cover Text and one of Back-Cover Text may be added by (or + through arrangements made by) any one entity. If the Document + already includes a cover text for the same cover, previously added + by you or by arrangement made by the same entity you are acting on + behalf of, you may not add another; but you may replace the old + one, on explicit permission from the previous publisher that added + the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to @@ -3630,8 +3641,8 @@ You may combine the Document with other documents released under this License, under the terms defined in section 4 above for - modified versions, provided that you include in the combination - all of the Invariant Sections of all of the original documents, + modified versions, provided that you include in the combination all + of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. @@ -3658,8 +3669,8 @@ documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the - rules of this License for verbatim copying of each of the - documents in all other respects. + rules of this License for verbatim copying of each of the documents + in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert @@ -3670,8 +3681,8 @@ 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other - separate and independent documents or works, in or on a volume of - a storage or distribution medium, is called an "aggregate" if the + separate and independent documents or works, in or on a volume of a + storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this @@ -3714,26 +3725,26 @@ attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, - from you under this License will not have their licenses - terminated so long as such parties remain in full compliance. + from you under this License will not have their licenses terminated + so long as such parties remain in full compliance. - 10. FUTURE REVISIONS OF THIS LICENSE + 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See - `http://www.gnu.org/copyleft/'. + . Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been - published (not as a draft) by the Free Software Foundation. If - the Document does not specify a version number of this License, - you may choose any version ever published (not as a draft) by the - Free Software Foundation. + published (not as a draft) by the Free Software Foundation. If the + Document does not specify a version number of this License, you may + choose any version ever published (not as a draft) by the Free + Software Foundation.  File: enfuse.info, Node: List of Tables, Next: List of Figures, Prev: FDL, Up: Top @@ -3743,13 +3754,15 @@ * Menu: -* Table 1.1: Weighting criteria: Table:weighting-criteria. -* Table 3.1: Grammar of response ...: Table:response-file-format. -* Table 3.2: Grammar of ...: Table:response-file-syntactic-comment. -* Table 3.3: Globbing algorithms: Table:globbing-algorithms. -* Table 3.4: Mask template ...: Table:mask-template-characters. -* Table 5.1: Default weights: Table:default-weights. -* Table 7.1: Suggested ...: Table:cache-size-settings. +* Table 1.1: Table:weighting-criteria. Weighting criteria +* Table 3.1: Table:response-file-format. Grammar of response files +* Table 3.2: Table:response-file-syntactic-comment. + Grammar of syntactic ... +* Table 3.3: Table:globbing-algorithms. Globbing algorithms +* Table 3.4: Table:mask-template-characters. + Mask template characters +* Table 5.1: Table:default-weights. Default weights +* Table 7.1: Table:cache-size-settings. Suggested cache-size ...  File: enfuse.info, Node: List of Figures, Next: Program Index, Prev: List of Tables, Up: Top @@ -3759,17 +3772,22 @@ * Menu: -* Figure 2.1: Photographic workflow: Figure:photographic-workflow. -* Figure 2.2: External masks ...: Figure:external-mask-workflow. -* Figure 3.1: Entropy cutoff ...: Figure:entropy-cutoff. -* Figure 3.2: Exposure cutoff ...: Figure:exposure-cutoff. -* Figure 5.1: Gaussian function: Figure:gaussian. -* Figure 5.2: Local analysis window: Figure:local-analysis-window. -* Figure 5.3: Laplacian-of-Gaussian: Figure:laplacian-of-gaussian. -* Figure 5.4: Entropy function: Figure:entropy. -* Figure 8.1: Sharp edge: Figure:sharp-edge. -* Figure 8.2: Smooth edge: Figure:smooth-edge. -* Figure 8.3: Focus stacking ...: Figure:focus-stacking-decision-tree. +* Figure 2.1: Figure:photographic-workflow. + Photographic workflow +* Figure 2.2: Figure:external-mask-workflow. + External masks workflow +* Figure 3.1: Figure:entropy-cutoff. Entropy cutoff function +* Figure 3.2: Figure:exposure-cutoff. Exposure cutoff function +* Figure 5.1: Figure:gaussian. Gaussian function +* Figure 5.2: Figure:local-analysis-window. + Local analysis window +* Figure 5.3: Figure:laplacian-of-gaussian. + Laplacian-of-Gaussian +* Figure 5.4: Figure:entropy. Entropy function +* Figure 8.1: Figure:sharp-edge. Sharp edge +* Figure 8.2: Figure:smooth-edge. Smooth edge +* Figure 8.3: Figure:focus-stacking-decision-tree. + Focus stacking decision tree  File: enfuse.info, Node: Program Index, Next: Syntactic-Comment Index, Prev: List of Figures, Up: Top @@ -3780,44 +3798,44 @@ [index] * Menu: -* ale: Helpful Programs. (line 20) -* align_image_stack (Hugin): Helpful Programs. (line 27) -* cinepaint <1>: Helpful Programs. (line 39) -* cinepaint: Extended Options. (line 140) -* convert (ImageMagick): Helpful Programs. (line 50) -* dcraw <1>: Helpful Programs. (line 10) -* dcraw: Standard Workflow. (line 9) -* display (ImageMagick): Helpful Programs. (line 50) -* exiftool: Helpful Programs. (line 78) -* exrdisplay (OpenEXR): Helpful Programs. (line 56) -* fulla (Hugin): Helpful Programs. (line 27) -* gimp <1>: Helpful Programs. (line 46) -* gimp <2>: Extended Options. (line 140) -* gimp: Standard Workflow. (line 9) -* gm (GraphicsMagick): Helpful Programs. (line 50) -* hugin <1>: Helpful Programs. (line 24) -* hugin <2>: What Images. (line 13) -* hugin <3>: Extended Options. (line 120) -* hugin: Standard Workflow. (line 9) -* identify (ImageMagick) <1>: Helpful Programs. (line 50) +* ale: Helpful Programs. (line 22) +* align_image_stack (Hugin): Helpful Programs. (line 29) +* cinepaint: Extended Options. (line 149) +* cinepaint <1>: Helpful Programs. (line 42) +* convert (ImageMagick): Helpful Programs. (line 54) +* dcraw: Standard Workflow. (line 10) +* dcraw <1>: Helpful Programs. (line 11) +* display (ImageMagick): Helpful Programs. (line 54) +* exiftool: Helpful Programs. (line 85) +* exrdisplay (OpenEXR): Helpful Programs. (line 61) +* fulla (Hugin): Helpful Programs. (line 29) +* gimp: Standard Workflow. (line 10) +* gimp <1>: Extended Options. (line 149) +* gimp <2>: Helpful Programs. (line 50) +* gm (GraphicsMagick): Helpful Programs. (line 54) +* hugin: Standard Workflow. (line 10) +* hugin <1>: Extended Options. (line 128) +* hugin <2>: What Images. (line 12) +* hugin <3>: Helpful Programs. (line 26) * identify (ImageMagick): Understanding Masks. (line 22) -* montage (ImageMagick): Helpful Programs. (line 50) -* nona (Hugin) <1>: Helpful Programs. (line 27) -* nona (Hugin): Extended Options. (line 120) -* PanoTools: Standard Workflow. (line 9) -* pfshdrcalibrate (PFScalibration): Helpful Programs. (line 59) -* pfsin (PFSTools): Helpful Programs. (line 59) -* pfsout (PFSTools): Helpful Programs. (line 59) -* pfstmo_* (PFStmo): Helpful Programs. (line 59) -* pfsview (PFSTools): Helpful Programs. (line 59) -* PTmender (PanoTools): Helpful Programs. (line 32) -* PTOptimizer (PanoTools): Helpful Programs. (line 32) -* tifficc (LittleCMS): Helpful Programs. (line 82) -* tiffinfo (libtiff) <1>: Helpful Programs. (line 74) +* identify (ImageMagick) <1>: Helpful Programs. (line 54) +* montage (ImageMagick): Helpful Programs. (line 54) +* nona (Hugin): Extended Options. (line 128) +* nona (Hugin) <1>: Helpful Programs. (line 29) +* PanoTools: Standard Workflow. (line 10) +* pfshdrcalibrate (PFScalibration): Helpful Programs. (line 64) +* pfsin (PFSTools): Helpful Programs. (line 64) +* pfsout (PFSTools): Helpful Programs. (line 64) +* pfstmo_* (PFStmo): Helpful Programs. (line 64) +* pfsview (PFSTools): Helpful Programs. (line 64) +* PTmender (PanoTools): Helpful Programs. (line 34) +* PTOptimizer (PanoTools): Helpful Programs. (line 34) +* tifficc (LittleCMS): Helpful Programs. (line 89) * tiffinfo (libtiff): Understanding Masks. (line 22) -* ufraw <1>: Helpful Programs. (line 13) -* ufraw: Standard Workflow. (line 9) -* ufraw-batch: Helpful Programs. (line 13) +* tiffinfo (libtiff) <1>: Helpful Programs. (line 80) +* ufraw: Standard Workflow. (line 10) +* ufraw <1>: Helpful Programs. (line 14) +* ufraw-batch: Helpful Programs. (line 14)  File: enfuse.info, Node: Syntactic-Comment Index, Next: Option Index, Prev: Program Index, Up: Top @@ -3828,13 +3846,13 @@ [index] * Menu: -* enblend-response-file: Response Files. (line 106) -* enfuse-response-file: Response Files. (line 107) +* enblend-response-file: Response Files. (line 108) +* enfuse-response-file: Response Files. (line 109) * filename-globbing: Response Files. (line 152) -* glob: Response Files. (line 148) -* globbing: Response Files. (line 150) -* layer-selector: Response Files. (line 204) -* response-file: Response Files. (line 105) +* glob: Response Files. (line 150) +* globbing: Response Files. (line 151) +* layer-selector: Response Files. (line 206) +* response-file: Response Files. (line 107)  File: enfuse.info, Node: Option Index, Next: General Index, Prev: Syntactic-Comment Index, Up: Top @@ -3845,52 +3863,55 @@ [index] * Menu: -* --ciecam: Extended Options. (line 22) +* --blend-colorspace: Extended Options. (line 21) +* --ciecam: Extended Options. (line 49) * --compression: Common Options. (line 15) * --contrast-edge-scale: Expert Options. (line 11) -* --contrast-min-curvature: Expert Options. (line 30) +* --contrast-min-curvature: Expert Options. (line 31) * --contrast-weight: Fusion Options. (line 10) -* --contrast-window-size: Expert Options. (line 43) -* --depth: Extended Options. (line 36) -* --entropy-cutoff: Expert Options. (line 60) -* --entropy-weight: Fusion Options. (line 20) -* --entropy-window-size: Expert Options. (line 90) -* --exposure-cutoff: Expert Options. (line 107) -* --exposure-mu: Fusion Options. (line 41) -* --exposure-sigma: Fusion Options. (line 52) -* --exposure-weight: Fusion Options. (line 30) -* --fallback-profile: Extended Options. (line 128) -* --gray-projector: Expert Options. (line 187) -* --hard-mask <1>: Expert Stacking. (line 22) -* --hard-mask <2>: Disabling Averaging. (line 6) -* --hard-mask: Expert Options. (line 266) -* --help: Common Options. (line 96) -* --layer-selector: Common Options. (line 70) -* --levels: Common Options. (line 100) -* --load-masks: Expert Options. (line 280) -* --no-ciecam: Extended Options. (line 160) -* --no-parameter: Common Options. (line 154) -* --output: Common Options. (line 144) -* --saturation-weight: Fusion Options. (line 64) -* --save-masks: Expert Options. (line 299) -* --soft-mask: Expert Options. (line 331) -* --verbose: Common Options. (line 163) -* --version: Common Options. (line 198) -* --wrap: Common Options. (line 205) -* -b <1>: Tuning Memory Usage. (line 6) +* --contrast-window-size: Expert Options. (line 45) +* --depth: Extended Options. (line 54) +* --entropy-cutoff: Expert Options. (line 63) +* --entropy-weight: Fusion Options. (line 21) +* --entropy-window-size: Expert Options. (line 94) +* --exposure-cutoff: Expert Options. (line 112) +* --exposure-mu: Fusion Options. (line 44) +* --exposure-sigma: Fusion Options. (line 56) +* --exposure-weight: Fusion Options. (line 32) +* --fallback-profile: Extended Options. (line 136) +* --gray-projector: Expert Options. (line 192) +* --hard-mask: Expert Options. (line 271) +* --hard-mask <1>: Disabling Averaging. (line 6) +* --hard-mask <2>: Expert Stacking. (line 22) +* --help: Common Options. (line 99) +* --layer-selector: Common Options. (line 73) +* --levels: Common Options. (line 103) +* --load-masks: Expert Options. (line 286) +* --no-ciecam: Extended Options. (line 168) +* --no-parameter: Common Options. (line 156) +* --output: Common Options. (line 146) +* --saturation-weight: Fusion Options. (line 69) +* --save-masks: Expert Options. (line 305) +* --soft-mask: Expert Options. (line 337) +* --verbose: Common Options. (line 166) +* --version: Common Options. (line 200) +* --wrap: Common Options. (line 207) * -b: Extended Options. (line 10) -* -c: Extended Options. (line 22) -* -d: Extended Options. (line 36) -* -f: Extended Options. (line 116) -* -g: Extended Options. (line 136) -* -h: Common Options. (line 96) -* -l: Common Options. (line 100) +* -b <1>: Tuning Memory Usage. (line 6) +* -b <2>: Tuning Memory Usage. (line 25) +* -c: Extended Options. (line 49) +* -d: Extended Options. (line 54) +* -f: Extended Options. (line 124) +* -g: Extended Options. (line 145) +* -h: Common Options. (line 99) +* -l: Common Options. (line 103) +* -m: Extended Options. (line 156) * -m <1>: Tuning Memory Usage. (line 6) -* -m: Extended Options. (line 148) -* -o: Common Options. (line 144) -* -V: Common Options. (line 198) -* -v: Common Options. (line 163) -* -w: Common Options. (line 205) +* -m <2>: Tuning Memory Usage. (line 25) +* -o: Common Options. (line 146) +* -v: Common Options. (line 166) +* -V: Common Options. (line 200) +* -w: Common Options. (line 207)  File: enfuse.info, Node: General Index, Prev: Option Index, Up: Top @@ -3901,10 +3922,10 @@ [index] * Menu: -* # (response file comment): Response Files. (line 56) -* 360o panoramas: Common Options. (line 205) -* @ (response file prefix): Response Files. (line 6) -* a.tif: Common Options. (line 146) +* '#' (response file comment): Response Files. (line 56) +* 360o panoramas: Common Options. (line 207) +* '@' (response file prefix): Response Files. (line 6) +* 'a.tif': Common Options. (line 148) * active criterion: Single Criterion Fusing. (line 12) * advanced focus stacking: Advanced Focus Stacking. @@ -3913,48 +3934,57 @@ (line 6) * advanced focus stacking, suppressing noise: Suppressing Noise or Recognizing Faint Edges. (line 6) -* affine transformation: Standard Workflow. (line 48) -* algorithms, globbing: Response Files. (line 146) -* alpha channel <1>: Standard Workflow. (line 69) +* affine transformation: Standard Workflow. (line 49) +* algorithms, globbing: Response Files. (line 148) +* algorithms, globbing <1>: Response Files. (line 192) * alpha channel: Overview. (line 65) -* alpha channel, associated: Extended Options. (line 136) -* anti-value gray projector: Expert Options. (line 197) -* aperture, sweet spot: Why Focus Stacks. (line 24) +* alpha channel <1>: Standard Workflow. (line 70) +* alpha channel, associated: Extended Options. (line 145) +* 'anti-value' gray projector: Expert Options. (line 202) +* aperture, sweet spot: Why Focus Stacks. (line 22) * applications of enfuse: Applications. (line 6) -* arithmetic JPEG compression: Common Options. (line 33) +* arithmetic JPEG compression: Common Options. (line 34) * authors, list of: Authors. (line 6) -* average gray projector: Expert Options. (line 206) +* 'average' gray projector: Expert Options. (line 211) * average, disabling: Disabling Averaging. (line 6) * average, weighted: Weighted Average. (line 6) * basic focus stacking: Basic Focus Stacking. (line 6) * binary mask: Understanding Masks. (line 6) -* bits per channel: Extended Options. (line 36) +* bits per channel: Extended Options. (line 54) +* blend colorspace: Extended Options. (line 21) * blending exposures: Exposure Series Misconceptions. (line 9) * bug database, LaunchPad: Bug Reports. (line 12) * bug reports: Bug Reports. (line 6) +* bug reports <1>: Bug Reports. (line 9) * Burt-Adelson multiresolution spline: Overview. (line 21) -* canvas size: Extended Options. (line 116) -* channel width: Extended Options. (line 36) +* canvas size: Extended Options. (line 124) +* channel width: Extended Options. (line 54) * channel, alpha: Overview. (line 65) -* channel-mixer gray projector: Expert Options. (line 212) -* CIECAM02 <1>: Color Profiles. (line 13) -* CIECAM02: Extended Options. (line 22) -* circle-of-confusion: Why Focus Stacks. (line 12) -* color appearance model <1>: Color Profiles. (line 13) -* color appearance model: Extended Options. (line 22) -* color cube, RGB: Color Profiles. (line 13) -* color profile <1>: Color Profiles. (line 6) -* color profile: Extended Options. (line 25) -* color space, sRGB <1>: Color Profiles. (line 24) -* color space, sRGB: Extended Options. (line 25) +* 'channel-mixer' gray projector: Expert Options. (line 217) +* CIECAM02: Extended Options. (line 49) +* CIECAM02 <1>: Extended Options. (line 136) +* CIECAM02 <2>: Extended Options. (line 168) +* CIECAM02 <3>: Color Profiles. (line 12) +* CIECAM02 colorspace: Extended Options. (line 45) +* circle-of-confusion: Why Focus Stacks. (line 10) +* color appearance model: Extended Options. (line 21) +* color appearance model <1>: Extended Options. (line 49) +* color appearance model <2>: Extended Options. (line 168) +* color appearance model <3>: Color Profiles. (line 12) +* color cube, RGB: Color Profiles. (line 12) +* color profile: Color Profiles. (line 6) +* color profile <1>: Color Profiles. (line 9) +* color space, sRGB: Color Profiles. (line 24) +* colorspace, blend: Extended Options. (line 21) * compression: Common Options. (line 15) -* compression, arithmetic JPEG: Common Options. (line 33) -* compression, deflate: Common Options. (line 44) +* compression, arithmetic JPEG: Common Options. (line 34) +* compression, deflate: Common Options. (line 46) * compression, JPEG: Common Options. (line 21) -* compression, LZW: Common Options. (line 55) -* compression, packbits: Common Options. (line 59) +* compression, JPEG <1>: Common Options. (line 52) +* compression, LZW: Common Options. (line 58) +* compression, packbits: Common Options. (line 62) * contrast enhancement, local: Local Contrast Enhancement. (line 6) * contrast weighting using a blend of methods: Blend SDev and LoG. @@ -3963,48 +3993,49 @@ (line 6) * contrast weighting using standard deviation: Standard Deviation. (line 6) -* conversion, raw: Standard Workflow. (line 34) -* conversion, RGB'-L*a*b*: Expert Options. (line 250) -* conversion, RGB-L*a*b*: Expert Options. (line 228) +* conversion, raw: Standard Workflow. (line 35) +* conversion, RGB'-L*a*b*: Expert Options. (line 255) +* conversion, RGB-L*a*b*: Expert Options. (line 233) * criteria, overpowering one another: Single Criterion Fusing. - (line 36) + (line 37) * criterion, active: Single Criterion Fusing. (line 12) * D50 white point: Color Profiles. (line 55) * dark frame: Expert Stacking. (line 18) * decision tree, focus stacking: Focus Stacking Decision Tree. (line 6) -* default layer selection: Response Files. (line 204) -* default output filename: Common Options. (line 146) +* default layer selection: Response Files. (line 206) +* default output filename: Common Options. (line 148) * default weights: Single Criterion Fusing. (line 24) -* deflate compression: Common Options. (line 44) +* deflate compression: Common Options. (line 46) * delimiters, option: Option Delimiters. (line 6) -* depth-of-field: Why Focus Stacks. (line 15) +* depth-of-field: Why Focus Stacks. (line 13) * depth-of-focus increase: Focus Stacks. (line 6) * digital blending: Exposure Series Misconceptions. (line 9) * disabling average: Disabling Averaging. (line 6) -* double precision float, IEEE754: Extended Options. (line 89) +* double precision float, IEEE754: Extended Options. (line 101) +* dynamic range increase: Exposure Series. (line 6) * dynamic range increase <1>: Flash Exposure Series. (line 6) -* dynamic range increase: Exposure Series. (line 6) * edge detection, laplacian: Laplacian Edge Detection. (line 6) * entropy: Local Entropy Weighting. (line 12) * entropy, definition: Local Entropy Weighting. (line 8) -* estimators: Standard Deviation. (line 60) -* expectation value: Standard Deviation. (line 41) +* estimators: Standard Deviation. (line 62) +* expectation value: Standard Deviation. (line 43) * expert focus stacking tips: Expert Stacking. (line 6) * exposure series: Exposure Series. (line 6) * exposure series, common misconceptions: Exposure Series Misconceptions. (line 6) * exposure series, tips for beginners: Exposure Series Tips. (line 6) -* fallback profile: Extended Options. (line 128) -* filename template: Expert Options. (line 287) +* fallback profile: Extended Options. (line 136) +* filename template: Expert Options. (line 294) +* filename template <1>: Expert Options. (line 309) * filename, literal: Invocation. (line 10) * flash exposure series: Flash Exposure Series. (line 6) @@ -4027,36 +4058,40 @@ * fusing, single criterion: Single Criterion Fusing. (line 6) * general index: General Index. (line 6) -* glob(7): Response Files. (line 171) -* globbing algorithm literal: Response Files. (line 157) -* globbing algorithm none: Response Files. (line 179) -* globbing algorithm sh: Response Files. (line 188) -* globbing algorithm shell: Response Files. (line 182) -* globbing algorithm wildcard: Response Files. (line 157) -* globbing algorithms: Response Files. (line 146) +* glob(7): Response Files. (line 172) +* globbing algorithm 'literal': Response Files. (line 157) +* globbing algorithm 'literal' <1>: Response Files. (line 165) +* globbing algorithm 'none': Response Files. (line 180) +* globbing algorithm 'sh': Response Files. (line 190) +* globbing algorithm 'shell': Response Files. (line 183) +* globbing algorithm 'wildcard': Response Files. (line 157) +* globbing algorithm 'wildcard' <1>: Response Files. (line 172) +* globbing algorithms: Response Files. (line 148) +* globbing algorithms <1>: Response Files. (line 192) * GNU free documentation license: FDL. (line 6) -* grammar, response file: Response Files. (line 70) -* grammar, syntactic comment: Response Files. (line 138) -* gray projector: Expert Options. (line 187) -* gray projector, anti-value: Expert Options. (line 197) -* gray projector, average: Expert Options. (line 206) -* gray projector, channel-mixer: Expert Options. (line 212) -* gray projector, l-star: Expert Options. (line 228) -* gray projector, lightness: Expert Options. (line 239) -* gray projector, luminance: Expert Options. (line 244) -* gray projector, pl-star: Expert Options. (line 250) -* gray projector, value: Expert Options. (line 261) -* half precision float, OpenEXR: Extended Options. (line 105) +* grammar, response file: Response Files. (line 71) +* grammar, syntactic comment: Response Files. (line 140) +* gray projector: Expert Options. (line 192) +* gray projector, 'anti-value': Expert Options. (line 202) +* gray projector, 'average': Expert Options. (line 211) +* gray projector, 'channel-mixer': Expert Options. (line 217) +* gray projector, 'l-star': Expert Options. (line 233) +* gray projector, 'lightness': Expert Options. (line 244) +* gray projector, 'luminance': Expert Options. (line 249) +* gray projector, 'pl-star': Expert Options. (line 255) +* gray projector, 'value': Expert Options. (line 266) +* half precision float, OpenEXR: Extended Options. (line 115) * helpful programs: Helpful Programs. (line 6) * hot pixels: Expert Stacking. (line 18) * Hugin: Bug Reports. (line 95) +* ICC profile: Extended Options. (line 28) * ICC profile <1>: Color Profiles. (line 6) -* ICC profile: Extended Options. (line 25) -* IEEE754 double precision float: Extended Options. (line 89) -* IEEE754 single precision float: Extended Options. (line 79) +* ICC profile <2>: Color Profiles. (line 9) +* IEEE754 double precision float: Extended Options. (line 101) +* IEEE754 single precision float: Extended Options. (line 93) * image cache: Tuning Memory Usage. (line 9) * image cache, block size: Extended Options. (line 10) -* image cache, cache size: Extended Options. (line 148) +* image cache, cache size: Extended Options. (line 156) * image cache, location: Tuning Memory Usage. (line 20) * image, multi-layer: Overview. (line 73) * images, fusable: What Images. (line 6) @@ -4070,28 +4105,29 @@ * invocation: Invocation. (line 6) * JPEG compression: Common Options. (line 21) * KImageFuser: Bug Reports. (line 95) -* l-star gray projector: Expert Options. (line 228) +* 'l-star' gray projector: Expert Options. (line 233) * laplacian edge detection: Laplacian Edge Detection. (line 6) * Laplacian of Gaussian (LoG): Laplacian of Gaussian. (line 6) -* Laplacian-of-Gaussian: Expert Options. (line 11) +* Laplacian-of-Gaussian: Expert Options. (line 12) * LaunchPad: Bug Reports. (line 12) * LaunchPad, bug database: Bug Reports. (line 12) -* layer selection: Common Options. (line 70) -* layer selection, all-layers: Common Options. (line 75) -* layer selection, default: Response Files. (line 204) -* layer selection, first-layer: Common Options. (line 78) -* layer selection, largest-layer: Common Options. (line 82) -* layer selection, no layer: Common Options. (line 89) -* lens distortion, correction of: Standard Workflow. (line 48) -* levels, pyramid: Common Options. (line 100) -* LibJPEG: Helpful Programs. (line 63) -* LibPNG: Helpful Programs. (line 66) -* LibTiff: Helpful Programs. (line 70) +* layer selection: Common Options. (line 73) +* layer selection <1>: Common Options. (line 73) +* layer selection, all-layers: Common Options. (line 78) +* layer selection, default: Response Files. (line 206) +* layer selection, first-layer: Common Options. (line 81) +* layer selection, largest-layer: Common Options. (line 85) +* layer selection, no layer: Common Options. (line 92) +* lens distortion, correction of: Standard Workflow. (line 49) +* levels, pyramid: Common Options. (line 103) +* LibJPEG: Helpful Programs. (line 69) +* LibPNG: Helpful Programs. (line 72) +* LibTiff: Helpful Programs. (line 76) * light probe: Exposure Series Misconceptions. (line 28) -* lightness gray projector: Expert Options. (line 239) +* 'lightness' gray projector: Expert Options. (line 244) * literal filename: Invocation. (line 10) * local analysis window: Standard Deviation. (line 6) * local contrast enhancement: Local Contrast Enhancement. @@ -4100,28 +4136,30 @@ (line 6) * local-contrast-based fusing: Local Contrast Based Fusing. (line 6) -* luminance gray projector: Expert Options. (line 244) -* LZW compression: Common Options. (line 55) -* mask template character, %: Expert Options. (line 336) -* mask template character, B: Expert Options. (line 387) -* mask template character, b: Expert Options. (line 380) -* mask template character, D: Expert Options. (line 377) -* mask template character, d: Expert Options. (line 370) -* mask template character, E: Expert Options. (line 406) -* mask template character, e: Expert Options. (line 400) -* mask template character, F: Expert Options. (line 396) -* mask template character, f: Expert Options. (line 390) -* mask template character, i: Expert Options. (line 339) -* mask template character, n: Expert Options. (line 354) -* mask template character, P: Expert Options. (line 367) -* mask template character, p: Expert Options. (line 359) -* mask template characters, table of: Expert Options. (line 408) +* 'luminance' gray projector: Expert Options. (line 249) +* LZW compression: Common Options. (line 58) +* mask template character, '%': Expert Options. (line 343) +* mask template character, 'b': Expert Options. (line 387) +* mask template character, 'B': Expert Options. (line 394) +* mask template character, 'd': Expert Options. (line 377) +* mask template character, 'D': Expert Options. (line 384) +* mask template character, 'e': Expert Options. (line 407) +* mask template character, 'E': Expert Options. (line 413) +* mask template character, 'f': Expert Options. (line 397) +* mask template character, 'F': Expert Options. (line 403) +* mask template character, 'i': Expert Options. (line 346) +* mask template character, 'n': Expert Options. (line 361) +* mask template character, 'p': Expert Options. (line 366) +* mask template character, 'P': Expert Options. (line 374) +* mask template characters, table of: Expert Options. (line 415) * mask, binary: Understanding Masks. (line 6) -* mask, filename template: Expert Options. (line 287) +* mask, filename template: Expert Options. (line 294) +* mask, filename template <1>: Expert Options. (line 309) * mask, input files: Understanding Masks. (line 18) -* mask, loading: Expert Options. (line 284) -* mask, save: Expert Options. (line 299) +* mask, loading: Expert Options. (line 291) +* mask, save: Expert Options. (line 305) * mask, weight: Understanding Masks. (line 6) +* mask, weight <1>: Understanding Masks. (line 91) * masks, understanding: Understanding Masks. (line 6) * memory, tuning usage of: Tuning Memory Usage. (line 6) * Mertens-Kautz-Van Reeth exposure fusion: Overview. (line 6) @@ -4132,9 +4170,9 @@ * natural sharp-unsharp transition: Expert Stacking. (line 33) * noise reduction: Repetition. (line 6) * Octave: Bug Reports. (line 6) -* only save mask: Expert Options. (line 308) -* OpenEXR, data format: Extended Options. (line 101) -* OpenEXR, half precision float: Extended Options. (line 105) +* only save mask: Expert Options. (line 314) +* OpenEXR, data format: Extended Options. (line 111) +* OpenEXR, half precision float: Extended Options. (line 115) * option delimiters: Option Delimiters. (line 6) * option index: Option Index. (line 6) * options, common: Common Options. (line 6) @@ -4143,44 +4181,46 @@ * options, fusion: Fusion Options. (line 6) * order, of processing: Response Files. (line 9) * output file compression: Common Options. (line 15) -* output filename, default: Common Options. (line 146) -* output image, set size of: Extended Options. (line 116) +* output filename, default: Common Options. (line 148) +* output image, set size of: Extended Options. (line 124) * overpowering criteria: Single Criterion Fusing. - (line 36) + (line 37) * overview: Overview. (line 6) -* packbits compression: Common Options. (line 59) -* parallax error: Standard Workflow. (line 58) +* packbits compression: Common Options. (line 62) +* parallax error: Standard Workflow. (line 59) * perceptual rendering intent: Color Profiles. (line 53) -* photometric alignment: Standard Workflow. (line 50) +* photometric alignment: Standard Workflow. (line 51) * pixels, hot: Expert Stacking. (line 18) -* pl-star gray projector: Expert Options. (line 250) +* 'pl-star' gray projector: Expert Options. (line 255) * polarization series: Polarization Series. (line 6) -* probability function: Standard Deviation. (line 37) +* probability function: Standard Deviation. (line 38) * problem reports: Bug Reports. (line 9) * problem, local contrast: Local Contrast Problem. (line 6) * processing order: Response Files. (line 9) -* profile, fallback: Extended Options. (line 128) +* profile, fallback: Extended Options. (line 136) +* profile, ICC: Extended Options. (line 28) * profile, ICC <1>: Color Profiles. (line 6) -* profile, ICC: Extended Options. (line 25) +* profile, ICC <2>: Color Profiles. (line 9) * program index: Program Index. (line 6) * programs, helpful additional: Helpful Programs. (line 6) -* pyramid levels: Common Options. (line 100) -* raw conversion: Standard Workflow. (line 34) +* pyramid levels: Common Options. (line 103) +* raw conversion: Standard Workflow. (line 35) * rendering intent, perceptual: Color Profiles. (line 53) -* response file <1>: Response Files. (line 6) * response file: Invocation. (line 10) -* response file, comment (#): Response Files. (line 56) -* response file, force recognition of: Response Files. (line 100) +* response file <1>: Response Files. (line 6) +* response file, comment ('#'): Response Files. (line 56) +* response file, force recognition of: Response Files. (line 102) * response file, format: Response Files. (line 56) -* response file, grammar: Response Files. (line 70) -* response file, syntactic comment: Response Files. (line 126) -* RGB color cube: Color Profiles. (line 13) -* RGB'-L*a*b* conversion: Expert Options. (line 250) -* RGB-L*a*b* conversion: Expert Options. (line 228) +* response file, grammar: Response Files. (line 71) +* response file, syntactic comment: Response Files. (line 128) +* RGB color cube: Color Profiles. (line 12) +* RGB'-L*a*b* conversion: Expert Options. (line 255) +* RGB-cube: Extended Options. (line 37) +* RGB-L*a*b* conversion: Expert Options. (line 233) * saturation enhancement: Polarization Series. (line 6) -* save mask: Expert Options. (line 299) -* save mask, only: Expert Options. (line 308) +* save mask: Expert Options. (line 305) +* save mask, only: Expert Options. (line 314) * scaling of parameters: Scaling and Choice of Mode. (line 6) * sensor, use of clean: Expert Stacking. (line 9) @@ -4192,33 +4232,34 @@ * simple series: Repetition. (line 6) * single criterion fusing: Single Criterion Fusing. (line 6) -* single precision float, IEEE754: Extended Options. (line 79) -* size, canvas: Extended Options. (line 116) +* single precision float, IEEE754: Extended Options. (line 93) +* size, canvas: Extended Options. (line 124) * SourceForge: Overview. (line 79) -* sRGB color space <1>: Color Profiles. (line 24) -* sRGB color space: Extended Options. (line 25) -* standard deviation: Standard Deviation. (line 49) -* statistical moments: Standard Deviation. (line 37) +* sRGB: Extended Options. (line 37) +* sRGB color space: Color Profiles. (line 24) +* standard deviation: Standard Deviation. (line 51) +* statistical moments: Standard Deviation. (line 38) * subtraction of dark frame: Expert Stacking. (line 18) -* sweet spot aperture: Why Focus Stacks. (line 24) -* syntactic comment, grammar: Response Files. (line 138) -* syntactic comment, response file: Response Files. (line 126) +* sweet spot aperture: Why Focus Stacks. (line 22) +* syntactic comment, grammar: Response Files. (line 140) +* syntactic comment, response file: Response Files. (line 128) * syntactic-comment index: Syntactic-Comment Index. (line 6) * TIFF, multi-directory: Overview. (line 73) -* tiffcopy: Overview. (line 73) -* tiffsplit: Overview. (line 73) +* 'tiffcopy': Overview. (line 73) +* 'tiffsplit': Overview. (line 73) * tips, focus stacking experts: Expert Stacking. (line 6) -* TMPDIR: Tuning Memory Usage. (line 20) -* transformation, affine: Standard Workflow. (line 48) +* 'TMPDIR': Tuning Memory Usage. (line 20) +* transformation, affine: Standard Workflow. (line 49) * transition, natural sharp-unsharp: Expert Stacking. (line 33) * understanding masks: Understanding Masks. (line 6) -* value gray projector: Expert Options. (line 261) -* variance: Standard Deviation. (line 45) -* virtual reality: Common Options. (line 215) +* 'value' gray projector: Expert Options. (line 266) +* variance: Standard Deviation. (line 47) +* virtual reality: Common Options. (line 217) * weight mask: Understanding Masks. (line 6) -* weight, entropy: Fusion Options. (line 20) -* weight, exposure: Fusion Options. (line 30) +* weight mask <1>: Understanding Masks. (line 91) +* weight, entropy: Fusion Options. (line 21) +* weight, exposure: Fusion Options. (line 32) * weight, local contrast: Fusion Options. (line 10) * weighted average: Weighted Average. (line 6) * weighting functions: Weighting Functions. (line 6) @@ -4228,121 +4269,121 @@ (line 6) * weighting, contrast using standard deviation: Standard Deviation. (line 6) -* weighting, exposure <1>: Exposure Weighting. (line 6) * weighting, exposure: Overview. (line 30) +* weighting, exposure <1>: Exposure Weighting. (line 6) * weighting, general concept of: Weighting Pixels. (line 6) +* weighting, local contrast: Overview. (line 39) * weighting, local contrast <1>: Local Contrast Weighting. (line 6) -* weighting, local contrast: Overview. (line 39) +* weighting, local entropy: Overview. (line 44) * weighting, local entropy <1>: Local Entropy Weighting. (line 6) -* weighting, local entropy: Overview. (line 44) +* weighting, saturation: Overview. (line 35) * weighting, saturation <1>: Saturation Weighting. (line 6) -* weighting, saturation: Overview. (line 35) * weights, default: Single Criterion Fusing. (line 24) * white point, D50: Color Profiles. (line 55) * window, local-analysis: Standard Deviation. (line 6) * workflow: Workflow. (line 6) -* workflow with Enblend: Standard Workflow. (line 9) -* workflow with Enfuse: Standard Workflow. (line 9) +* workflow with Enblend: Standard Workflow. (line 10) +* workflow with Enfuse: Standard Workflow. (line 10) * workflow, external mask manipulation: External Mask Manipulation. (line 6) * workflow, external masks: External Mask Manipulation. (line 33) * workflow, standard: Standard Workflow. (line 6) -* wrap around: Common Options. (line 205) +* wrap around: Common Options. (line 207)  Tag Table: -Node: Top878 -Node: Overview4938 -Ref: Table:weighting-criteria6131 -Ref: Overview-Footnote-18703 -Ref: Overview-Footnote-28872 -Ref: Overview-Footnote-39053 -Ref: Overview-Footnote-49235 -Node: Workflow9377 -Node: Standard Workflow9807 -Ref: Figure:photographic-workflow10066 -Node: External Mask Manipulation12740 -Ref: Figure:external-mask-workflow14056 -Node: Invocation14541 -Node: Image Requirements15386 -Node: Response Files16522 -Ref: Table:response-file-format18545 -Ref: Table:response-file-syntactic-comment21010 -Ref: Table:globbing-algorithms21911 -Node: Common Options23370 -Ref: Common Options-Footnote-132398 -Ref: Common Options-Footnote-232590 -Node: Extended Options32749 -Ref: Extended Options-Footnote-138739 -Node: Fusion Options38812 -Node: Expert Options40814 -Ref: Figure:entropy-cutoff43840 -Ref: Figure:exposure-cutoff47868 -Ref: Table:mask-template-characters55017 -Node: Option Delimiters57233 -Node: Color Profiles58617 -Node: Weighting Functions61053 -Node: Weighting Pixels61721 -Node: Weighted Average63310 -Node: Disabling Averaging63903 -Node: Single Criterion Fusing64891 -Ref: Table:default-weights65629 -Node: Exposure Weighting66414 -Ref: Figure:gaussian67850 -Node: Saturation Weighting68609 -Node: Local Contrast Weighting69724 -Node: Standard Deviation71086 -Ref: Figure:local-analysis-window71535 -Ref: Standard Deviation-Footnote-173603 -Node: Laplacian of Gaussian73754 -Ref: Figure:laplacian-of-gaussian75328 -Node: Blend SDev and LoG76422 -Node: Scaling and Choice of Mode78102 -Node: Local Entropy Weighting78948 -Ref: Figure:entropy79931 -Node: Understanding Masks81538 -Node: Tuning Memory Usage85335 -Ref: Table:cache-size-settings88072 -Node: Applications88508 -Node: What Images89232 -Node: Repetition92419 -Node: Exposure Series93502 -Node: Exposure Series Tips95884 -Node: Exposure Series Misconceptions96996 -Ref: Exposure Series Misconceptions-Footnote-198777 -Node: Flash Exposure Series98990 -Node: Polarization Series99232 -Node: Focus Stacks99672 -Node: Why Focus Stacks100554 -Node: Preparing Focus Stacks101889 -Node: Local Contrast Based Fusing102639 -Node: Basic Focus Stacking103974 -Node: Advanced Focus Stacking105347 -Node: Local Contrast Problem106111 -Ref: Figure:sharp-edge107295 -Ref: Figure:smooth-edge107370 -Node: Laplacian Edge Detection108117 -Node: Local Contrast Enhancement109251 -Node: Suppressing Noise or Recognizing Faint Edges110227 -Node: Focus Stacking Decision Tree112858 -Ref: Figure:focus-stacking-decision-tree113203 -Node: Expert Stacking113987 -Node: Helpful Programs115510 -Node: Bug Reports119238 -Ref: Bug Reports-Footnote-1124892 -Node: Authors124962 -Node: FDL126126 -Node: List of Tables147107 -Node: List of Figures147727 -Node: Program Index148598 -Node: Syntactic-Comment Index151532 -Node: Option Index152220 -Node: General Index155733 +Node: Top853 +Node: Overview4908 +Ref: Table:weighting-criteria6111 +Ref: Overview-Footnote-18694 +Ref: Overview-Footnote-28863 +Ref: Overview-Footnote-39045 +Ref: Overview-Footnote-49227 +Node: Workflow9369 +Node: Standard Workflow9799 +Ref: Figure:photographic-workflow10069 +Node: External Mask Manipulation12768 +Ref: Figure:external-mask-workflow14093 +Node: Invocation14603 +Node: Image Requirements15448 +Node: Response Files16581 +Ref: Table:response-file-format18615 +Ref: Table:response-file-syntactic-comment21090 +Ref: Table:globbing-algorithms22001 +Node: Common Options23460 +Ref: Common Options-Footnote-132507 +Ref: Common Options-Footnote-232699 +Node: Extended Options32858 +Ref: Extended Options-Footnote-139474 +Node: Fusion Options39547 +Node: Expert Options41555 +Ref: Figure:entropy-cutoff44593 +Ref: Figure:exposure-cutoff48587 +Ref: Table:mask-template-characters55688 +Node: Option Delimiters57904 +Node: Color Profiles59288 +Node: Weighting Functions61723 +Node: Weighting Pixels62391 +Node: Weighted Average63927 +Node: Disabling Averaging64528 +Node: Single Criterion Fusing65508 +Ref: Table:default-weights66254 +Node: Exposure Weighting67038 +Ref: Figure:gaussian68484 +Node: Saturation Weighting69254 +Node: Local Contrast Weighting70369 +Node: Standard Deviation71731 +Ref: Figure:local-analysis-window72191 +Ref: Standard Deviation-Footnote-174284 +Node: Laplacian of Gaussian74435 +Ref: Figure:laplacian-of-gaussian76019 +Node: Blend SDev and LoG77137 +Node: Scaling and Choice of Mode78818 +Node: Local Entropy Weighting79664 +Ref: Figure:entropy80658 +Node: Understanding Masks82275 +Node: Tuning Memory Usage86071 +Ref: Table:cache-size-settings88817 +Node: Applications89252 +Node: What Images89976 +Node: Repetition93168 +Node: Exposure Series94237 +Node: Exposure Series Tips96584 +Node: Exposure Series Misconceptions97695 +Ref: Exposure Series Misconceptions-Footnote-199468 +Node: Flash Exposure Series99681 +Node: Polarization Series99921 +Node: Focus Stacks100316 +Node: Why Focus Stacks101166 +Node: Preparing Focus Stacks102500 +Node: Local Contrast Based Fusing103247 +Node: Basic Focus Stacking104582 +Node: Advanced Focus Stacking105955 +Node: Local Contrast Problem106719 +Ref: Figure:sharp-edge107925 +Ref: Figure:smooth-edge108013 +Node: Laplacian Edge Detection108774 +Node: Local Contrast Enhancement109905 +Node: Suppressing Noise or Recognizing Faint Edges110881 +Node: Focus Stacking Decision Tree113502 +Ref: Figure:focus-stacking-decision-tree113858 +Node: Expert Stacking114670 +Node: Helpful Programs116192 +Node: Bug Reports119922 +Ref: Bug Reports-Footnote-1125570 +Node: Authors125640 +Node: FDL126804 +Node: List of Tables147765 +Node: List of Figures148436 +Node: Program Index149484 +Node: Syntactic-Comment Index152418 +Node: Option Index153106 +Node: General Index156838  End Tag Table diff -Nru enblend-enfuse-4.1.3+dfsg/doc/enfuse.texi enblend-enfuse-4.1.4+dfsg/doc/enfuse.texi --- enblend-enfuse-4.1.3+dfsg/doc/enfuse.texi 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/doc/enfuse.texi 2015-08-07 14:44:45.000000000 +0000 @@ -44,7 +44,7 @@ a program to merge different exposures of the same scene to produce an image that looks much like a tonemapped image. -Copyright @copyright{} 2004--2014 @sc{Andrew Mihal}. +Copyright @copyright{} 2004--2015 @sc{Andrew Mihal}. @quotation Permission is granted to copy, distribute and/or modify this document @@ -621,9 +621,9 @@ twice as large as the previous one. So, the zeroth layer, the original image, obviously defines the image at single-pixel scale, the first level works at two-pixel scale, and generally, the @math{n}-th -level contains image data at @power{2, n}-pixel scale. This is the +level contains image data at 2^n-pixel scale. This is the reason why an image of -@math{width}@classictimes{}@/@math{height}@dmn{pixels} cannot be +@math{width}x@/@math{height}@dmn{pixels} cannot be deconstructed into a pyramid of more than @ifinfo @display @@ -1167,31 +1167,55 @@ for this option to be effective. Find out about extra features with @code{enfuse --version --verbose}. -@item -c -@itemx --ciecam -@opindex -c -@opindex --ciecam +@item --blend-colorspace=@var{COLORSPACE} +@opindex --blend-colorspace +@cindex blend colorspace +@cindex colorspace, blend @cindex color appearance model -@cindex @acronym{CIECAM02} -Force the use of the @acronym{CIECAM02} color appearance model for -blending colors instead of blending inside the @acronym{RGB} color -cube. -@cindex color profile +Force blending in selected @var{COLORSPACE}. For well matched images +this option should not change the output image much. However, if +Enfuse must blend vastly different colors (as e.g. anti-colors) the +result image heavily depends on the @var{COLORSPACE}. + +Usually, Enfuse chooses defaults depending on the input images: +@itemize +@item @cindex @acronym{ICC} profile @cindex profile, @acronym{ICC} -@cindex @acronym{sRGB} color space -@cindex color space, @acronym{sRGB} -All input files should have identical @acronym{ICC} profiles when this -option is specified. If no @acronym{ICC} profile is present, Enfuse -assumes that all images use the @acronym{sRGB} color space. -@xref{Color Profiles}. + For input images @emph{with} @acronym{ICC} profiles the +default is to use @acronym{CIECAM} colorspace. -Please keep in mind that using @acronym{CIECAM02} blending may change -the colors in the output image. +@item + Images @emph{without} color profiles and floating-point images +are blended in the @acronym{RGB}-color cube by default. +@end itemize -This option can be negated; see option@tie{}@option{--no-ciecam} -below. +Enfuse supports two blend colorspaces: + +@table @asis +@item @samp{IDENTITY}, @samp{ID}, @samp{UNIT} +@cindex @acronym{sRGB} +@cindex @acronym{RGB}-cube +Naively compute blended colors in the luminance interval (grayscale +images) or @acronym{RGB}-cube (@acronym{RGB} images) spanned by the +input @acronym{ICC} profile or @acronym{sRGB} if no profiles are +present. Consider option@tie{}@option{--fallback-profile} to force a +different profile than @acronym{sRGB} on all input images. + +@item @samp{CIECAM}, @samp{CIECAM02}, @samp{JCH} +@cindex @acronym{CIECAM02} colorspace +Blend pixels in the @acronym{CIECAM02} colorspace. +@end table + +@item -c +@itemx --ciecam +@opindex -c +@opindex --ciecam +@cindex color appearance model +@cindex @acronym{CIECAM02} +Use @samp{--blend-colorspace=CIECAM} instead. To mimic the negated +option @option{--no-ciecam} use @samp{--blend-colorspace=IDENTITY}. @item -d @itemx --depth=@var{DEPTH} @@ -1255,11 +1279,11 @@ @itemize @item -Minimum normalized value: @semilog{1.2, -38} +Minimum normalized value: 1.2e-38 @item -Epsilon: @semilog{1.2, -7} +Epsilon: 1.2e-7 @item -Maximum finite value: @semilog{3.4, 38} +Maximum finite value: 3.4e38 @end itemize @c IEEE double: 64 bits, n = 53, k = 64 - n - 1 = 10 @@ -1271,11 +1295,11 @@ @itemize @item -Minimum normalized value: @semilog{2.2, -308} +Minimum normalized value: 2.2e-308 @item -Epsilon: @semilog{2.2, -16} +Epsilon: 2.2e-16 @item -Maximum finite value: @semilog{1.8, 308} +Maximum finite value: 1.8e308 @end itemize @end table @@ -1297,11 +1321,11 @@ @itemize @item -Minimum normalized value: @semilog{9.3, -10} +Minimum normalized value: 9.3e-10 @item -Epsilon: @semilog{2.0, -3} +Epsilon: 2.0e-3 @item -Maximum finite value: @semilog{4.3, 9} +Maximum finite value: 4.3e9 @end itemize @item -f @var{WIDTH}x@var{HEIGHT} @@ -1311,7 +1335,7 @@ @cindex canvas size @cindex size, canvas Ensure that the minimum ``canvas'' size of the output image is at -least @var{WIDTH}@classictimes{}@/@var{HEIGHT}. Optionally specify +least @var{WIDTH}x@/@var{HEIGHT}. Optionally specify the @var{XOFFSET} and @var{YOFFSET}, too. @pindex nona @r{(Hugin)} @@ -1331,8 +1355,8 @@ @cindex fallback profile @cindex @acronym{CIECAM02} Use the @acronym{ICC} profile in @var{PROFILE-FILENAME} instead of the -default @acronym{sRGB}. See option@tie{}@option{--ciecam} and -@ref{Color Profiles}. +default @acronym{sRGB}. See option@tie{}@option{--blend-colorspace} +and @ref{Color Profiles}. This option only is effective if the input images come without color profiles and blending is performed in @acronym{CIECAM02} color @@ -1374,11 +1398,10 @@ @opindex --no-ciecam @cindex color appearance model @cindex @acronym{CIECAM02} -Disable the use of the @acronym{CIECAM02} color appearance model for -blending colors. +Use @samp{--blend-colorspace=IDENTITY} instead. -See option@tie{}@option{--ciecam} for details. Also see @ref{Color -Profiles}. +See option@tie{}@option{--blend-colorspace} for details. Also see +@ref{Color Profiles}. @end table @@ -1501,8 +1524,8 @@ @var{LCE-SCALE} is the radius of the Gaussian used in the enhancement step, @var{LCE-FACTOR} is the weight factor (``strength''). -@var{enhanced} = (1 + @var{LCE-FACTOR}) @classictimes{} @var{original} -@minus{} @var{LCE-FACTOR} @classictimes{} Gaussian@/Smooth(@var{original}, +@var{enhanced} = (1 + @var{LCE-FACTOR}) x @var{original} +@minus{} @var{LCE-FACTOR} x Gaussian@/Smooth(@var{original}, @var{LCE-SCALE}). @var{LCE-SCALE} defaults to @value{src::default-lce-scale} pixels and @@ -1531,7 +1554,7 @@ @opindex --contrast-window-size Set the window @var{SIZE} for local contrast analysis. The window -will be a square of @var{SIZE}@classictimes{}@/@var{SIZE} pixels. If +will be a square of @var{SIZE}x@/@var{SIZE} pixels. If given an even @var{SIZE}, Enfuse will automatically use the next odd number. @@ -1585,7 +1608,7 @@ @opindex --entropy-window-size Window @var{SIZE} for local entropy analysis. The window will be a -square of @var{SIZE}@classictimes{}@/@var{SIZE} pixels. +square of @var{SIZE}x@/@var{SIZE} pixels. In the entropy calculation @var{SIZE} values of 3 to 7 yield an acceptable compromise of the locality of the information and the @@ -2433,20 +2456,6 @@ from 1 to the common height, and @math{i} from 1 to the number of input images@tie{}@math{n}. -@macro equationW{} -@ifnotdocbook -@ifnottex -(W) -@end ifnottex -@end ifnotdocbook -@tex -(W)% -@end tex -@docbook - -@end docbook -@end macro - Enfuse allows for weighting the contribution of each @math{P(i, x, y)} to the final @math{Q(x, y)}: @ifinfo @@ -2454,7 +2463,7 @@ @math{w(P(1, x, y)) * P(1, x, y) + ... + w(P(n, x, y)) * P(n, x, y) ---> Q(x, y),}@w{ }@equationW{} +--> Q(x, y),} @end display @end ifinfo @html @@ -2520,9 +2529,6 @@ y - , - - @equationW{} @end html @@ -2530,7 +2536,7 @@ $$ w(P(1, x, y)) P(1, x, y) + \ldots + w(P(n, x, y)) P(n, x, y) \rightarrow - Q(x, y),\hskip4em\hbox{@equationW{}} + Q(x, y) $$ @end tex @docbook @@ -2948,7 +2954,7 @@ be extreme, favoring only a few pixels or even only one pixel in the input stack. Extremes are not typical, however. -Equal weights are another extreme that turns @equationW{} into an +Equal weights are another extreme that turns the equation into an arithmetic average. This is why we sometimes speak of the ``averaging property'' of this weighting algorithm, like smoothing out noise. @@ -2969,7 +2975,7 @@ wins, this is, gets weight@tie{}one, and all other pixels get the weight of zero (@uref{http://@/en.wikipedia.org/@/wiki/@/The_@/Winner_@/Takes_@/It_@/All,,``The -Winner Takes It All.''}). With @option{--hard-mask} Equation@tie{}@equationW{} +Winner Takes It All.''}). With @option{--hard-mask} the equation becomes @ifinfo @display @@ -3114,8 +3120,8 @@ @noindent Note that this ``averaging'' scheme lacks the nice noise-reduction -property of the weighted average@tie{}@equationW{}, because only a -single input pixel contributes to the output. +property of the weighted average, because only a single input pixel +contributes to the output. @node Single Criterion Fusing @@ -3562,7 +3568,7 @@ @noindent It associates a probability@tie{}@math{p} with each of the @math{n} -different possible outcomes@tie{}@inlineomega{} of the random +different possible outcomes@tie{}@math{omega} of the random variable@tie{}@math{X}. @cindex expectation value Based on @math{w}, we define the @dfn{expectation value} or ``First @@ -4189,7 +4195,7 @@ @end docbook @noindent -The parameter@tie{}@inlinesigma{}, the argument of +The parameter@tie{}@math{sigma}, the argument of option@tie{}@option{--contrast-edge-scale}, is the length scale on which edges are detected by @math{g(x, y)}. We apply the Laplacian operator in Cartesian coordinates @@ -4401,7 +4407,7 @@ @end docbook -where we have used the dimensionless distance@tie{}@inlinexi{} from +where we have used the dimensionless distance@tie{}@math{xi} from the origin @ifinfo @display @@ -4556,7 +4562,7 @@ @float Figure,Figure:laplacian-of-gaussian @vimage{laplacian-of-gaussian} -@caption{Laplacian-of-Gaussian function for @inlinesigma{} = 0.5.} +@caption{Laplacian-of-Gaussian function for @math{sigma} = 0.5.} @shortcaption{Laplacian-of-Gaussian} @end float @@ -4656,10 +4662,10 @@ @var{CURVATURE} nor the mode of operation (@acronym{SDev}-only, @acronym{LoG}-only, or a blend of both) scales to different image sizes. In practice, this means that if you start with a set of -reduced size images, say 2808@classictimes{}1872 pixels, carefully +reduced size images, say 2808x1872 pixels, carefully optimize @var{EDGESCALE}, @var{CURVATURE} and so on, and find @acronym{LoG}-only the best mode, and then switch to the original -resolution of 5616@classictimes{}3744 pixels, multiplying (or +resolution of 5616x3744 pixels, multiplying (or dividing) the parameters by four and sticking to @acronym{LoG}-only might @emph{not} result in the best fused image. For best quality, perform the parameter optimization and the search for the most @@ -5080,9 +5086,9 @@ Images should align well to be suitable for fusion. However, there is no hard mathematical rule what ``well'' means. The alignment requirements for 16@dmn{MPixel} images to yield a sharp -4"@classictimes{}6" print at 300@dmn{dpi} (``dpi'' means dots per +4"x6" print at 300@dmn{dpi} (``dpi'' means dots per inch) or even for web presentation are relatively low, whereas the -alignment of 8@dmn{MPixel} images for a 12"@classictimes{}18" print +alignment of 8@dmn{MPixel} images for a 12"x18" print ought to be tight. @pindex hugin @@ -5548,7 +5554,7 @@ Let us use an example to illustrate the problem of relating the sharpness with the local contrast variations. Say we use a -5@classictimes{}5 contrast window. Moreover, let @code{sharp_edge} +5x5 contrast window. Moreover, let @code{sharp_edge} and @code{smooth_edge} be two specific configurations: @example @@ -5727,7 +5733,7 @@ Apply the default grayscale projector: @code{average} and throw away all edges with a curvature of less than 0.5% and replace the @acronym{LoG} data between 0% and 0.5% with @acronym{SDev} data. Use -a window of 7@classictimes{}7@dmn{pixel} window to compute the +a window of 7x7@dmn{pixel} window to compute the @acronym{SDev}. @end table diff -Nru enblend-enfuse-4.1.3+dfsg/doc/Makefile.am enblend-enfuse-4.1.4+dfsg/doc/Makefile.am --- enblend-enfuse-4.1.3+dfsg/doc/Makefile.am 2013-01-01 09:45:47.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/doc/Makefile.am 2015-08-07 14:43:24.000000000 +0000 @@ -46,7 +46,7 @@ -I $(top_builddir) -I $(srcdir) \ --css-include=@srcdir@/default.css \ $(MAKEINFOHTMLFLAGS) -export TEXINPUTS=$(top_builddir):$(srcdir) +export TEXINPUTS = .:$(top_builddir):$(srcdir): TEXI2DVI = texi2dvi $(TEXI2DVIFLAGS) $(EXTRATEXI2DVIFLAGS) diff -Nru enblend-enfuse-4.1.3+dfsg/doc/Makefile.in enblend-enfuse-4.1.4+dfsg/doc/Makefile.in --- enblend-enfuse-4.1.3+dfsg/doc/Makefile.in 2014-03-22 12:47:03.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/doc/Makefile.in 2015-10-03 11:18:55.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,7 +14,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -78,15 +88,6 @@ build_triplet = @build@ host_triplet = @host@ subdir = doc -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(srcdir)/entropy.gp.in $(srcdir)/entropy-cutoff.gp.in \ - $(srcdir)/exposure-cutoff.gp.in $(srcdir)/gaussian.gp.in \ - $(srcdir)/laplacian-of-gaussian.gp.in \ - $(srcdir)/sharp-edge.gp.in $(srcdir)/smooth-edge.gp.in \ - $(enblend_TEXINFOS) $(top_srcdir)/mdate-sh \ - $(srcdir)/versenblend.texi $(srcdir)/stamp-vti \ - $(enfuse_TEXINFOS) $(srcdir)/versenfuse.texi $(srcdir)/stamp-1 \ - $(top_srcdir)/texinfo.tex ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_gl.m4 \ $(top_srcdir)/m4/ax_check_glu.m4 \ @@ -96,9 +97,12 @@ $(top_srcdir)/m4/ax_prog_perl_modules.m4 \ $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/ax_with_prog.m4 $(top_srcdir)/m4/lrint.m4 \ - $(top_srcdir)/m4/lrintf.m4 $(top_srcdir)/configure.in + $(top_srcdir)/m4/lrintf.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/versenblend.texi \ + $(srcdir)/stamp-vti $(srcdir)/versenfuse.texi \ + $(srcdir)/stamp-1 $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = entropy.gp entropy-cutoff.gp exposure-cutoff.gp \ @@ -192,6 +196,12 @@ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(enblend_TEXINFOS) $(enfuse_TEXINFOS) \ + $(srcdir)/Makefile.in $(srcdir)/entropy-cutoff.gp.in \ + $(srcdir)/entropy.gp.in $(srcdir)/exposure-cutoff.gp.in \ + $(srcdir)/gaussian.gp.in $(srcdir)/laplacian-of-gaussian.gp.in \ + $(srcdir)/sharp-edge.gp.in $(srcdir)/smooth-edge.gp.in \ + $(top_srcdir)/mdate-sh $(top_srcdir)/texinfo.tex DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ @@ -204,6 +214,7 @@ --css-include=@srcdir@/default.css \ $(MAKEINFOHTMLFLAGS) +AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -288,6 +299,7 @@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ @@ -328,6 +340,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -429,7 +442,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -513,15 +525,16 @@ echo "@set UPDATED $$1 $$2 $$3"; \ echo "@set UPDATED-MONTH $$2 $$3"; \ echo "@set EDITION $(VERSION)"; \ - echo "@set VERSION $(VERSION)") > vti.tmp - @cmp -s vti.tmp $(srcdir)/versenblend.texi \ - || (echo "Updating $(srcdir)/versenblend.texi"; \ - cp vti.tmp $(srcdir)/versenblend.texi) - -@rm -f vti.tmp + echo "@set VERSION $(VERSION)") > vti.tmp$$$$ && \ + (cmp -s vti.tmp$$$$ $(srcdir)/versenblend.texi \ + || (echo "Updating $(srcdir)/versenblend.texi" && \ + cp vti.tmp$$$$ $(srcdir)/versenblend.texi.tmp$$$$ && \ + mv $(srcdir)/versenblend.texi.tmp$$$$ $(srcdir)/versenblend.texi)) && \ + rm -f vti.tmp$$$$ $(srcdir)/versenblend.texi.$$$$ @cp $(srcdir)/versenblend.texi $@ mostlyclean-vti: - -rm -f vti.tmp + -rm -f vti.tmp* $(srcdir)/versenblend.texi.tmp* maintainer-clean-vti: -rm -f $(srcdir)/stamp-vti $(srcdir)/versenblend.texi @@ -533,15 +546,16 @@ echo "@set UPDATED $$1 $$2 $$3"; \ echo "@set UPDATED-MONTH $$2 $$3"; \ echo "@set EDITION $(VERSION)"; \ - echo "@set VERSION $(VERSION)") > 1.tmp - @cmp -s 1.tmp $(srcdir)/versenfuse.texi \ - || (echo "Updating $(srcdir)/versenfuse.texi"; \ - cp 1.tmp $(srcdir)/versenfuse.texi) - -@rm -f 1.tmp + echo "@set VERSION $(VERSION)") > 1.tmp$$$$ && \ + (cmp -s 1.tmp$$$$ $(srcdir)/versenfuse.texi \ + || (echo "Updating $(srcdir)/versenfuse.texi" && \ + cp 1.tmp$$$$ $(srcdir)/versenfuse.texi.tmp$$$$ && \ + mv $(srcdir)/versenfuse.texi.tmp$$$$ $(srcdir)/versenfuse.texi)) && \ + rm -f 1.tmp$$$$ $(srcdir)/versenfuse.texi.$$$$ @cp $(srcdir)/versenfuse.texi $@ mostlyclean-1: - -rm -f 1.tmp + -rm -f 1.tmp* $(srcdir)/versenfuse.texi.tmp* maintainer-clean-1: -rm -f $(srcdir)/stamp-1 $(srcdir)/versenfuse.texi @@ -895,7 +909,9 @@ uninstall-am uninstall-dvi-am uninstall-html-am \ uninstall-info-am uninstall-pdf-am uninstall-ps-am -export TEXINPUTS=$(top_builddir):$(srcdir) +.PRECIOUS: Makefile + +export TEXINPUTS = .:$(top_builddir):$(srcdir): # Phony Targets diff -Nru enblend-enfuse-4.1.3+dfsg/doc/stamp-1 enblend-enfuse-4.1.4+dfsg/doc/stamp-1 --- enblend-enfuse-4.1.3+dfsg/doc/stamp-1 2014-03-19 07:29:20.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/doc/stamp-1 2015-09-28 06:47:00.000000000 +0000 @@ -1,4 +1,4 @@ -@set UPDATED 10 March 2014 -@set UPDATED-MONTH March 2014 -@set EDITION 4.1.3 -@set VERSION 4.1.3 +@set UPDATED 7 August 2015 +@set UPDATED-MONTH August 2015 +@set EDITION 4.1.4 +@set VERSION 4.1.4 diff -Nru enblend-enfuse-4.1.3+dfsg/doc/stamp-vti enblend-enfuse-4.1.4+dfsg/doc/stamp-vti --- enblend-enfuse-4.1.3+dfsg/doc/stamp-vti 2014-03-19 07:29:20.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/doc/stamp-vti 2015-09-28 06:46:57.000000000 +0000 @@ -1,4 +1,4 @@ -@set UPDATED 10 March 2014 -@set UPDATED-MONTH March 2014 -@set EDITION 4.1.3 -@set VERSION 4.1.3 +@set UPDATED 7 August 2015 +@set UPDATED-MONTH August 2015 +@set EDITION 4.1.4 +@set VERSION 4.1.4 diff -Nru enblend-enfuse-4.1.3+dfsg/doc/varsenblend.texi enblend-enfuse-4.1.4+dfsg/doc/varsenblend.texi --- enblend-enfuse-4.1.3+dfsg/doc/varsenblend.texi 2014-03-19 07:29:20.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/doc/varsenblend.texi 2015-09-28 06:46:57.000000000 +0000 @@ -1,132 +1,132 @@ -@c enblend.cc:99 +@c enblend.cc:101 @set src::coarse-mask-vectorize-distance 4 -@c enblend.cc:138 +@c enblend.cc:140 @set src::default-anneal-deltae-max 7000.0 -@c enblend.cc:139 +@c enblend.cc:141 @set src::default-anneal-deltae-min 5.0 -@c enblend.cc:136 +@c enblend.cc:138 @set src::default-anneal-kmax 32 -@c enblend.cc:137 +@c enblend.cc:139 @set src::default-anneal-tau 0.75 -@c enblend.cc:123 +@c enblend.cc:125 @set src::default-chrominance-difference-weight 1.0 -@c enblend.cc:120 +@c enblend.cc:122 @set src::default-coarseness-factor 8 -@c enblend.cc:121 +@c enblend.cc:123 @set src::default-difference-functor Delta-E -@c enblend.cc:141 +@c enblend.cc:143 @set src::default-dijkstra-radius 25 -@c enblend.cc:122 +@c enblend.cc:124 @set src::default-luminance-difference-weight 1.0 -@c enblend.cc:127 +@c enblend.cc:129 @set src::default-mask-template mask-%n.tif -@c enblend.cc:133 +@c enblend.cc:135 @set src::default-optimizer-weight-distance 8.0 -@c enblend.cc:134 +@c enblend.cc:136 @set src::default-optimizer-weight-mismatch 1.0 @c global.h:77 @set src::default-output-filename a.tif -@c global.h:152 +@c global.h:162 @set src::default-tiff-resolution 300@dmn{dpi} -@c enblend.cc:104 +@c enblend.cc:106 @set src::default-verbosity-level 1 -@c enblend.cc:130 +@c enblend.cc:132 @set src::default-visualize-template vis-%n.tif -@c enblend.cc:100 +@c enblend.cc:102 @set src::fine-mask-vectorize-distance 20 -@c enblend.cc:1686 +@c enblend.cc:1790 @set src::layer-selector all-layers -@c common.h:122 +@c common.h:123 @set src::mark-frozen-point cross -@c common.h:118 +@c common.h:119 @set src::mark-movable-point diamond -@c enblend.cc:1134 +@c enblend.cc:1199 @set src::maximum-anneal-tau 1 -@c common.h:56 +@c common.h:57 @set src::maximum-pyramid-levels 29 -@c enblend.cc:1161 +@c enblend.cc:1226 @set src::minimum-anneal-deltae-max 0 -@c enblend.cc:1188 +@c enblend.cc:1253 @set src::minimum-anneal-deltae-min 0 -@c enblend.cc:1221 +@c enblend.cc:1286 @set src::minimum-anneal-kmax 3 -@c enblend.cc:1127 +@c enblend.cc:1192 @set src::minimum-anneal-tau 0 -@c enblend.cc:1369 +@c enblend.cc:1435 @set src::minimum-cache-block-size 1@dmn{KB} -@c enblend.cc:1494 +@c enblend.cc:1586 @set src::minimum-cache-size 1@dmn{MB} -@c enblend.cc:1354 +@c enblend.cc:1420 @set src::minimum-dijkstra-radius 1 -@c bounds.h:120 +@c bounds.h:121 @set src::minimum-pyramid-levels 1 -@c enblend.cc:1285 +@c enblend.cc:1350 @set src::minimum-smooth-difference 0.0 -@c enblend.cc:98 +@c enblend.cc:100 @set src::minimum-vectorize-distance 4 -@c enblend.cc:1330 +@c enblend.cc:1396 @set src::minimum-verbosity-level 0 -@c common.h:128 +@c common.h:129 @set src::visualize-first-vertex-value-color medium green -@c common.h:120 +@c common.h:121 @set src::visualize-frozen-point bright white -@c common.h:124 +@c common.h:125 @set src::visualize-initial-path-color dark yellow -@c common.h:116 +@c common.h:117 @set src::visualize-movable-point light orange -@c common.h:130 +@c common.h:131 @set src::visualize-next-vertex-value-color light green -@c common.h:132 +@c common.h:133 @set src::visualize-no-overlap-value-color dark red -@c common.h:126 +@c common.h:127 @set src::visualize-short-path-value-color bright yellow -@c common.h:134 +@c common.h:135 @set src::visualize-state-space-color dark blue -@c common.h:136 +@c common.h:137 @set src::visualize-state-space-inside-color bright cyan -@c common.h:138 +@c common.h:139 @set src::visualize-state-space-unconverged-color bright magenta diff -Nru enblend-enfuse-4.1.3+dfsg/doc/varsenfuse.texi enblend-enfuse-4.1.4+dfsg/doc/varsenfuse.texi --- enblend-enfuse-4.1.3+dfsg/doc/varsenfuse.texi 2014-03-19 07:29:20.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/doc/varsenfuse.texi 2015-09-28 06:47:00.000000000 +0000 @@ -1,162 +1,162 @@ -@c enfuse.cc:109 +@c enfuse.cc:110 @set src::default-contrast-window-size 5 -@c enfuse.cc:112 +@c enfuse.cc:113 @set src::default-edge-scale 0.0 -@c enfuse.cc:118 +@c enfuse.cc:119 @set src::default-entropy-lower-cutoff 0% -@c enfuse.cc:119 +@c enfuse.cc:120 @set src::default-entropy-upper-cutoff 100% -@c enfuse.cc:117 +@c enfuse.cc:118 @set src::default-entropy-window-size 3 -@c enfuse.cc:99 +@c enfuse.cc:100 @set src::default-exposure-lower-cutoff 0% -@c enfuse.cc:101 +@c enfuse.cc:102 @set src::default-exposure-lower-cutoff-projector anti-value -@c enfuse.cc:106 +@c enfuse.cc:107 @set src::default-exposure-mu 0.5 -@c enfuse.cc:107 +@c enfuse.cc:108 @set src::default-exposure-sigma 0.2 -@c enfuse.cc:100 +@c enfuse.cc:101 @set src::default-exposure-upper-cutoff 100% -@c enfuse.cc:102 +@c enfuse.cc:103 @set src::default-exposure-upper-cutoff-projector value -@c enfuse.cc:125 +@c enfuse.cc:126 @set src::default-hard-mask-template hardmask-%n.tif -@c enfuse.cc:114 +@c enfuse.cc:115 @set src::default-lce-factor 0.0 -@c enfuse.cc:113 +@c enfuse.cc:114 @set src::default-lce-scale 0.0 -@c enfuse.cc:116 +@c enfuse.cc:117 @set src::default-minimum-curvature 0 @c global.h:77 @set src::default-output-filename a.tif -@c enfuse.cc:124 +@c enfuse.cc:125 @set src::default-soft-mask-template softmask-%n.tif -@c global.h:152 +@c global.h:162 @set src::default-tiff-resolution 300@dmn{dpi} -@c enfuse.cc:85 +@c enfuse.cc:86 @set src::default-verbosity-level 1 -@c enfuse.cc:103 +@c enfuse.cc:104 @set src::default-weight-contrast 0.0 -@c enfuse.cc:105 +@c enfuse.cc:106 @set src::default-weight-entropy 0.0 -@c enfuse.cc:98 +@c enfuse.cc:99 @set src::default-weight-exposure 1.0 -@c enfuse.cc:104 +@c enfuse.cc:105 @set src::default-weight-saturation 0.2 -@c enfuse.cc:1693 +@c enfuse.cc:1791 @set src::layer-selector all-layers -@c common.h:122 +@c common.h:123 @set src::mark-frozen-point cross -@c common.h:118 +@c common.h:119 @set src::mark-movable-point diamond -@c enfuse.cc:1318 +@c enfuse.cc:1379 @set src::maximum-exposure-mu 1 -@c common.h:56 +@c common.h:57 @set src::maximum-pyramid-levels 29 -@c enfuse.cc:1285 +@c enfuse.cc:1346 @set src::maximum-weight-contrast 1 -@c enfuse.cc:1347 +@c enfuse.cc:1408 @set src::maximum-weight-entropy 1 -@c enfuse.cc:1269 +@c enfuse.cc:1330 @set src::maximum-weight-exposure 1 -@c enfuse.cc:1301 +@c enfuse.cc:1362 @set src::maximum-weight-saturation 1 -@c enfuse.cc:1414 +@c enfuse.cc:1475 @set src::minimum-cache-block-size 1@dmn{KB} -@c enfuse.cc:1513 +@c enfuse.cc:1599 @set src::minimum-cache-size 1@dmn{MB} -@c enfuse.cc:1374 +@c enfuse.cc:1435 @set src::minimum-contrast-window-size 3 -@c enfuse.cc:1394 +@c enfuse.cc:1455 @set src::minimum-entropy-window-size 3 -@c enfuse.cc:1315 +@c enfuse.cc:1376 @set src::minimum-exposure-mu 0 -@c enfuse.cc:1331 +@c enfuse.cc:1392 @set src::minimum-exposure-sigma 0 -@c bounds.h:120 +@c bounds.h:121 @set src::minimum-pyramid-levels 1 -@c enfuse.cc:1361 +@c enfuse.cc:1422 @set src::minimum-verbosity-level 0 -@c enfuse.cc:1282 +@c enfuse.cc:1343 @set src::minimum-weight-contrast 0 -@c enfuse.cc:1344 +@c enfuse.cc:1405 @set src::minimum-weight-entropy 0 -@c enfuse.cc:1266 +@c enfuse.cc:1327 @set src::minimum-weight-exposure 0 -@c enfuse.cc:1298 +@c enfuse.cc:1359 @set src::minimum-weight-saturation 0 -@c common.h:128 +@c common.h:129 @set src::visualize-first-vertex-value-color medium green -@c common.h:120 +@c common.h:121 @set src::visualize-frozen-point bright white -@c common.h:124 +@c common.h:125 @set src::visualize-initial-path-color dark yellow -@c common.h:116 +@c common.h:117 @set src::visualize-movable-point light orange -@c common.h:130 +@c common.h:131 @set src::visualize-next-vertex-value-color light green -@c common.h:132 +@c common.h:133 @set src::visualize-no-overlap-value-color dark red -@c common.h:126 +@c common.h:127 @set src::visualize-short-path-value-color bright yellow -@c common.h:134 +@c common.h:135 @set src::visualize-state-space-color dark blue -@c common.h:136 +@c common.h:137 @set src::visualize-state-space-inside-color bright cyan -@c common.h:138 +@c common.h:139 @set src::visualize-state-space-unconverged-color bright magenta diff -Nru enblend-enfuse-4.1.3+dfsg/doc/versenblend.texi enblend-enfuse-4.1.4+dfsg/doc/versenblend.texi --- enblend-enfuse-4.1.3+dfsg/doc/versenblend.texi 2014-03-19 07:29:20.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/doc/versenblend.texi 2015-09-28 06:46:57.000000000 +0000 @@ -1,4 +1,4 @@ -@set UPDATED 10 March 2014 -@set UPDATED-MONTH March 2014 -@set EDITION 4.1.3 -@set VERSION 4.1.3 +@set UPDATED 7 August 2015 +@set UPDATED-MONTH August 2015 +@set EDITION 4.1.4 +@set VERSION 4.1.4 diff -Nru enblend-enfuse-4.1.3+dfsg/doc/versenfuse.texi enblend-enfuse-4.1.4+dfsg/doc/versenfuse.texi --- enblend-enfuse-4.1.3+dfsg/doc/versenfuse.texi 2014-03-19 07:29:20.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/doc/versenfuse.texi 2015-09-28 06:47:00.000000000 +0000 @@ -1,4 +1,4 @@ -@set UPDATED 10 March 2014 -@set UPDATED-MONTH March 2014 -@set EDITION 4.1.3 -@set VERSION 4.1.3 +@set UPDATED 7 August 2015 +@set UPDATED-MONTH August 2015 +@set EDITION 4.1.4 +@set VERSION 4.1.4 diff -Nru enblend-enfuse-4.1.3+dfsg/include/Makefile.in enblend-enfuse-4.1.4+dfsg/include/Makefile.in --- enblend-enfuse-4.1.3+dfsg/include/Makefile.in 2014-03-22 12:47:03.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/include/Makefile.in 2015-10-03 11:18:55.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,7 +14,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -78,7 +88,6 @@ build_triplet = @build@ host_triplet = @host@ subdir = include -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_gl.m4 \ $(top_srcdir)/m4/ax_check_glu.m4 \ @@ -88,9 +97,10 @@ $(top_srcdir)/m4/ax_prog_perl_modules.m4 \ $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/ax_with_prog.m4 $(top_srcdir)/m4/lrint.m4 \ - $(top_srcdir)/m4/lrintf.m4 $(top_srcdir)/configure.in + $(top_srcdir)/m4/lrintf.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -150,6 +160,7 @@ ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ @@ -181,6 +192,7 @@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_MAKEINFOFLAGS = @AM_MAKEINFOFLAGS@ AM_MAKEINFOHTMLFLAGS = @AM_MAKEINFOHTMLFLAGS@ +AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -265,6 +277,7 @@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ @@ -305,6 +318,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -330,7 +344,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -618,6 +631,8 @@ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-am uninstall uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru enblend-enfuse-4.1.3+dfsg/include/vigra_ext/impexalpha.hxx enblend-enfuse-4.1.4+dfsg/include/vigra_ext/impexalpha.hxx --- enblend-enfuse-4.1.3+dfsg/include/vigra_ext/impexalpha.hxx 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/include/vigra_ext/impexalpha.hxx 2015-08-07 14:45:05.000000000 +0000 @@ -338,10 +338,8 @@ AlphaIterator alpha_upper_left, AlphaAccessor alpha_accessor) { typedef typename ImageIterator::row_iterator ImageRowIterator; - typedef typename ImageAccessor::value_type ImageValueType; typedef typename AlphaIterator::row_iterator AlphaRowIterator; - typedef typename AlphaAccessor::value_type AlphaValueType; vigra_precondition(image_lower_right.x >= image_upper_left.x, "vigra_ext::detail::write_image_band_and_alpha: negative width"); diff -Nru enblend-enfuse-4.1.3+dfsg/include/vigra_ext/Makefile.in enblend-enfuse-4.1.4+dfsg/include/vigra_ext/Makefile.in --- enblend-enfuse-4.1.3+dfsg/include/vigra_ext/Makefile.in 2014-03-22 12:47:03.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/include/vigra_ext/Makefile.in 2015-10-03 11:18:55.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,7 +14,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -78,7 +88,6 @@ build_triplet = @build@ host_triplet = @host@ subdir = include/vigra_ext -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_gl.m4 \ $(top_srcdir)/m4/ax_check_glu.m4 \ @@ -88,9 +97,10 @@ $(top_srcdir)/m4/ax_prog_perl_modules.m4 \ $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/ax_with_prog.m4 $(top_srcdir)/m4/lrint.m4 \ - $(top_srcdir)/m4/lrintf.m4 $(top_srcdir)/configure.in + $(top_srcdir)/m4/lrintf.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -115,12 +125,14 @@ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_MAKEINFOFLAGS = @AM_MAKEINFOFLAGS@ AM_MAKEINFOHTMLFLAGS = @AM_MAKEINFOHTMLFLAGS@ +AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -205,6 +217,7 @@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ @@ -245,6 +258,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -278,7 +292,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/vigra_ext/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/vigra_ext/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -446,6 +459,8 @@ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru enblend-enfuse-4.1.3+dfsg/install-sh enblend-enfuse-4.1.4+dfsg/install-sh --- enblend-enfuse-4.1.3+dfsg/install-sh 2014-03-22 12:47:03.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/install-sh 2015-10-03 11:18:55.000000000 +0000 @@ -1,7 +1,7 @@ #!/bin/sh # install - install a program, script, or datafile -scriptversion=2011-11-20.07; # UTC +scriptversion=2014-09-12.12; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the @@ -41,19 +41,15 @@ # This script is compatible with the BSD install script, but was written # from scratch. +tab=' ' nl=' ' -IFS=" "" $nl" +IFS=" $tab$nl" -# set DOITPROG to echo to test this script +# Set DOITPROG to "echo" to test this script. -# Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} -if test -z "$doit"; then - doit_exec=exec -else - doit_exec=$doit -fi +doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. @@ -68,17 +64,6 @@ rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} -posix_glob='?' -initialize_posix_glob=' - test "$posix_glob" != "?" || { - if (set -f) 2>/dev/null; then - posix_glob= - else - posix_glob=: - fi - } -' - posix_mkdir= # Desired mode of installed file. @@ -97,7 +82,7 @@ dst_arg= copy_on_change=false -no_target_directory= +is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE @@ -137,46 +122,57 @@ -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" - shift;; + shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 - case $mode in - *' '* | *' '* | *' -'* | *'*'* | *'?'* | *'['*) - echo "$0: invalid mode: $mode" >&2 - exit 1;; - esac - shift;; + case $mode in + *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; -o) chowncmd="$chownprog $2" - shift;; + shift;; -s) stripcmd=$stripprog;; - -t) dst_arg=$2 - # Protect names problematic for 'test' and other utilities. - case $dst_arg in - -* | [=\(\)!]) dst_arg=./$dst_arg;; - esac - shift;; + -t) + is_target_a_directory=always + dst_arg=$2 + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + shift;; - -T) no_target_directory=true;; + -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; - --) shift - break;; + --) shift + break;; - -*) echo "$0: invalid option: $1" >&2 - exit 1;; + -*) echo "$0: invalid option: $1" >&2 + exit 1;; *) break;; esac shift done +# We allow the use of options -d and -T together, by making -d +# take the precedence; this is for compatibility with GNU install. + +if test -n "$dir_arg"; then + if test -n "$dst_arg"; then + echo "$0: target directory not allowed when installing a directory." >&2 + exit 1 + fi +fi + if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. @@ -208,6 +204,15 @@ fi if test -z "$dir_arg"; then + if test $# -gt 1 || test "$is_target_a_directory" = always; then + if test ! -d "$dst_arg"; then + echo "$0: $dst_arg: Is not a directory." >&2 + exit 1 + fi + fi +fi + +if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 @@ -223,16 +228,16 @@ *[0-7]) if test -z "$stripcmd"; then - u_plus_rw= + u_plus_rw= else - u_plus_rw='% 200' + u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then - u_plus_rw= + u_plus_rw= else - u_plus_rw=,u+rw + u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac @@ -269,41 +274,15 @@ # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then - if test -n "$no_target_directory"; then - echo "$0: $dst_arg: Is a directory" >&2 - exit 1 + if test "$is_target_a_directory" = never; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else - # Prefer dirname, but fall back on a substitute if dirname fails. - dstdir=` - (dirname "$dst") 2>/dev/null || - expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$dst" : 'X\(//\)[^/]' \| \ - X"$dst" : 'X\(//\)$' \| \ - X"$dst" : 'X\(/\)' \| . 2>/dev/null || - echo X"$dst" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q' - ` - + dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi @@ -314,74 +293,81 @@ if test $dstdir_status != 0; then case $posix_mkdir in '') - # Create intermediate dirs using mode 755 as modified by the umask. - # This is like FreeBSD 'install' as of 1997-10-28. - umask=`umask` - case $stripcmd.$umask in - # Optimize common cases. - *[2367][2367]) mkdir_umask=$umask;; - .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; - - *[0-7]) - mkdir_umask=`expr $umask + 22 \ - - $umask % 100 % 40 + $umask % 20 \ - - $umask % 10 % 4 + $umask % 2 - `;; - *) mkdir_umask=$umask,go-w;; - esac - - # With -d, create the new directory with the user-specified mode. - # Otherwise, rely on $mkdir_umask. - if test -n "$dir_arg"; then - mkdir_mode=-m$mode - else - mkdir_mode= - fi - - posix_mkdir=false - case $umask in - *[123567][0-7][0-7]) - # POSIX mkdir -p sets u+wx bits regardless of umask, which - # is incompatible with FreeBSD 'install' when (umask & 300) != 0. - ;; - *) - tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 - - if (umask $mkdir_umask && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 - then - if test -z "$dir_arg" || { - # Check for POSIX incompatibilities with -m. - # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or - # other-writable bit of parent directory when it shouldn't. - # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - ls_ld_tmpdir=`ls -ld "$tmpdir"` - case $ls_ld_tmpdir in - d????-?r-*) different_mode=700;; - d????-?--*) different_mode=755;; - *) false;; - esac && - $mkdirprog -m$different_mode -p -- "$tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$tmpdir"` - test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" - } - } - then posix_mkdir=: - fi - rmdir "$tmpdir/d" "$tmpdir" - else - # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null - fi - trap '' 0;; - esac;; + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + # $RANDOM is not portable (e.g. dash); use it when possible to + # lower collision chance + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 + + # As "mkdir -p" follows symlinks and we work in /tmp possibly; so + # create the $tmpdir first (and fail if unsuccessful) to make sure + # that nobody tries to guess the $tmpdir name. + if (umask $mkdir_umask && + $mkdirprog $mkdir_mode "$tmpdir" && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + test_tmpdir="$tmpdir/a" + ls_ld_tmpdir=`ls -ld "$test_tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null + fi + trap '' 0;; + esac;; esac if $posix_mkdir && ( - umask $mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else @@ -391,53 +377,51 @@ # directory the slow way, step by step, checking for races as we go. case $dstdir in - /*) prefix='/';; - [-=\(\)!]*) prefix='./';; - *) prefix='';; + /*) prefix='/';; + [-=\(\)!]*) prefix='./';; + *) prefix='';; esac - eval "$initialize_posix_glob" - oIFS=$IFS IFS=/ - $posix_glob set -f + set -f set fnord $dstdir shift - $posix_glob set +f + set +f IFS=$oIFS prefixes= for d do - test X"$d" = X && continue + test X"$d" = X && continue - prefix=$prefix$d - if test -d "$prefix"; then - prefixes= - else - if $posix_mkdir; then - (umask=$mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break - # Don't fail if two instances are running concurrently. - test -d "$prefix" || exit 1 - else - case $prefix in - *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; - *) qprefix=$prefix;; - esac - prefixes="$prefixes '$qprefix'" - fi - fi - prefix=$prefix/ + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ done if test -n "$prefixes"; then - # Don't fail if two instances are running concurrently. - (umask $mkdir_umask && - eval "\$doit_exec \$mkdirprog $prefixes") || - test -d "$dstdir" || exit 1 - obsolete_mkdir_used=true + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true fi fi fi @@ -472,15 +456,12 @@ # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && - old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && - new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && - - eval "$initialize_posix_glob" && - $posix_glob set -f && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && - $posix_glob set +f && - + set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then @@ -493,24 +474,24 @@ # to itself, or perhaps because mv is so ancient that it does not # support -f. { - # Now remove or move aside any old file at destination location. - # We try this two ways since rm can't unlink itself on some - # systems and the destination file might be busy for other - # reasons. In this case, the final cleanup might fail but the new - # file should still install successfully. - { - test ! -f "$dst" || - $doit $rmcmd -f "$dst" 2>/dev/null || - { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && - { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } - } || - { echo "$0: cannot unlink or rename $dst" >&2 - (exit 1); exit 1 - } - } && + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && - # Now rename the file to the real destination. - $doit $mvcmd "$dsttmp" "$dst" + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 diff -Nru enblend-enfuse-4.1.3+dfsg/Makefile.in enblend-enfuse-4.1.4+dfsg/Makefile.in --- enblend-enfuse-4.1.3+dfsg/Makefile.in 2014-03-22 12:47:03.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/Makefile.in 2015-10-03 11:18:55.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,7 +14,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -78,11 +88,6 @@ build_triplet = @build@ host_triplet = @host@ subdir = . -DIST_COMMON = INSTALL NEWS README AUTHORS ChangeLog \ - $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/configure $(am__configure_deps) \ - $(srcdir)/config.h.in COPYING compile config.guess config.sub \ - depcomp install-sh mdate-sh missing texinfo.tex ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_gl.m4 \ $(top_srcdir)/m4/ax_check_glu.m4 \ @@ -92,9 +97,11 @@ $(top_srcdir)/m4/ax_prog_perl_modules.m4 \ $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/ax_with_prog.m4 $(top_srcdir)/m4/lrint.m4 \ - $(top_srcdir)/m4/lrintf.m4 $(top_srcdir)/configure.in + $(top_srcdir)/m4/lrintf.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ + $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d @@ -157,6 +164,10 @@ ETAGS = etags CTAGS = ctags CSCOPE = cscope +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in AUTHORS \ + COPYING ChangeLog INSTALL NEWS README ar-lib compile \ + config.guess config.sub depcomp install-sh mdate-sh missing \ + texinfo.tex DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) @@ -204,6 +215,7 @@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_MAKEINFOFLAGS = @AM_MAKEINFOFLAGS@ AM_MAKEINFOHTMLFLAGS = @AM_MAKEINFOHTMLFLAGS@ +AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -288,6 +300,7 @@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ @@ -328,6 +341,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -366,7 +380,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -588,15 +601,15 @@ $(am__post_remove_distdir) dist-tarZ: distdir - @echo WARNING: "Support for shar distribution archives is" \ - "deprecated." >&2 + @echo WARNING: "Support for distribution archives compressed with" \ + "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir - @echo WARNING: "Support for distribution archives compressed with" \ - "legacy program 'compress' is deprecated." >&2 + @echo WARNING: "Support for shar distribution archives is" \ + "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) @@ -632,17 +645,17 @@ esac chmod -R a-w $(distdir) chmod u+w $(distdir) - mkdir $(distdir)/_build $(distdir)/_inst + mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ - && $(am__cd) $(distdir)/_build \ - && ../configure \ + && $(am__cd) $(distdir)/_build/sub \ + && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ - --srcdir=.. --prefix="$$dc_install_base" \ + --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ @@ -818,6 +831,8 @@ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am +.PRECIOUS: Makefile + .PHONY: xhtml xhtml: diff -Nru enblend-enfuse-4.1.3+dfsg/mdate-sh enblend-enfuse-4.1.4+dfsg/mdate-sh --- enblend-enfuse-4.1.3+dfsg/mdate-sh 2014-03-22 12:47:03.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/mdate-sh 2015-10-03 11:18:55.000000000 +0000 @@ -1,9 +1,9 @@ #!/bin/sh # Get modification time of a file or directory and pretty-print it. -scriptversion=2010-08-21.06; # UTC +scriptversion=2015-04-09.19; # UTC -# Copyright (C) 1995-2013 Free Software Foundation, Inc. +# Copyright (C) 1995-2014 Free Software Foundation, Inc. # written by Ulrich Drepper , June 1995 # # This program is free software; you can redistribute it and/or modify @@ -74,6 +74,10 @@ LC_TIME=C export LC_TIME +# Use UTC to get reproducible result +TZ=UTC +export TZ + # GNU ls changes its time format in response to the TIME_STYLE # variable. Since we cannot assume 'unset' works, revert this # variable to its documented default. diff -Nru enblend-enfuse-4.1.3+dfsg/missing enblend-enfuse-4.1.4+dfsg/missing --- enblend-enfuse-4.1.3+dfsg/missing 2014-03-22 12:47:03.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/missing 2015-10-03 11:18:55.000000000 +0000 @@ -3,7 +3,7 @@ scriptversion=2013-10-28.13; # UTC -# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Copyright (C) 1996-2014 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify diff -Nru enblend-enfuse-4.1.3+dfsg/NEWS enblend-enfuse-4.1.4+dfsg/NEWS --- enblend-enfuse-4.1.3+dfsg/NEWS 2014-03-19 07:33:14.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/NEWS 2015-09-28 06:57:33.000000000 +0000 @@ -1,5 +1,55 @@ * Version 4.1.x -- Stable Branch +Patchlevel 4 + +Released on September 28, 2015. + + +** New Commandline Options + +- The introduction of additional blend color spaces in the Development + Branch requires a new option to select them. Here, in the Stable + Branch, the new option `--blend-colorspace' just duplicates the + functionality of `--ciecam' and `--no-ciecam'. The Stable Branch + does *not* provide the additional blend colorspaces of the + Development Branch. The following equivalences hold + --ciecam <=> --blend-colorspace=ciecam + --no-ciecam <=> --blend-colorspace=identity + Both options `--ciecam' and `--no-ciecam' are deprecated in 4.2 and + will be withdrawn in 4.3. Thus, users should prefer + `--blend-colorspace'. + + +** Bug Fixes + +- [Enblend and Enfuse] Fix the nesting-depth counter for response + files. This bug prohibited to load more than 20 images in a single + response file. + +- [Enblend and Enfuse] Allow grayscale images to bring their own + (grayscale) profiles. Previously grayscale images with ICC profiles + were rejected. + +- [Enblend] Fix a possible domain error followed by a division-by-zero + in the seam-line optimizer. + +- [Enblend and Enfuse] Avoid an undeserved warning about incompatible + colorspaces if they only disagree on their meta-data (e.g. profile + creation date/time). + +- [Enblend] Fix a bug in the Dijkstra Optimizer which could lead to + undefined behavior in the placement of the (optimized) seam line. + +- [Enblend] Fix a non-dereferencable vector iterator which led to a + segfault. + +- [Enblend] Avoid a division-by-zero in the Annealing Optimizer. + +- [Enblend] Fix a bug (#1356551) in the seam-line vectorization code + that was there since 2004. The fix changes the position of almost + any coarse-mask seam line vertex by one pixel. + + Patchlevel 3 Released on March 19, 2014. diff -Nru enblend-enfuse-4.1.3+dfsg/README enblend-enfuse-4.1.4+dfsg/README --- enblend-enfuse-4.1.3+dfsg/README 2013-01-01 09:49:53.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/README 2015-08-07 14:44:53.000000000 +0000 @@ -1,4 +1,5 @@ -Copyright (C) 2004-2012 Andrew Mihal. +Copyright (C) 2004-2009 Andrew Mihal. +Copyright (C) 2009-2015 Christoph Spiel. This file is part of Enblend. diff -Nru enblend-enfuse-4.1.3+dfsg/README.txt enblend-enfuse-4.1.4+dfsg/README.txt --- enblend-enfuse-4.1.3+dfsg/README.txt 2013-01-01 09:49:53.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/README.txt 2015-08-07 14:44:53.000000000 +0000 @@ -1,4 +1,5 @@ -Copyright (C) 2004-2012 Andrew Mihal. +Copyright (C) 2004-2009 Andrew Mihal. +Copyright (C) 2009-2015 Christoph Spiel. This file is part of Enblend. diff -Nru enblend-enfuse-4.1.3+dfsg/src/anneal.h enblend-enfuse-4.1.4+dfsg/src/anneal.h --- enblend-enfuse-4.1.3+dfsg/src/anneal.h 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/anneal.h 2015-08-07 14:44:53.000000000 +0000 @@ -1,5 +1,6 @@ /* - * Copyright (C) 2004-2014 Andrew Mihal + * Copyright (C) 2004-2009 Andrew Mihal + * Copyright (C) 2009-2015 Christoph Spiel * * This file is part of Enblend. * @@ -98,6 +99,26 @@ namespace enblend { +inline static vigra::Diff2D +normal_vector(const vigra::Point2D& a_previous_point, + const vigra::Point2D& a_current_point, + const vigra::Point2D& a_next_point) +{ + // vp: vector from a_previous_point to a_current_point + const vigra::Diff2D vp(a_current_point.x - a_previous_point.x, a_current_point.y - a_previous_point.y); + // vn: vector from a_current_point to a_next_point + const vigra::Diff2D vn(a_next_point.x - a_current_point.x, a_next_point.y - a_current_point.y); + // np: normal to vp + const vigra::Diff2D np(-vp.y, vp.x); + // nn: normal to vn + const vigra::Diff2D nn(-vn.y, vn.x); + + // Answer normal vector at a_current_point; + // normal points to the left of vp and vn. + return np + nn; +} + + template class GDAConfiguration { @@ -130,20 +151,11 @@ std::vector* stateDistances = new std::vector(); pointStateDistances.push_back(stateDistances); - if (currentMoveable) { - // vp = std::vector from previousPoint to currentPoint - vigra::Diff2D vp(currentPoint.x - previousPoint.x, currentPoint.y - previousPoint.y); - // vn = std::vector from currentPoint to nextPoint - vigra::Diff2D vn(nextPoint.x - currentPoint.x, nextPoint.y - currentPoint.y); - // np = normal to vp - vigra::Diff2D np(-vp.y, vp.x); - // nn = normal to vn - vigra::Diff2D nn(-vn.y, vn.x); - - // normal = normal vector at currentPoint - // normal points to the left of vp and vn. - vigra::Diff2D normal = np + nn; - normal *= stateSpaceWidth / normal.magnitude(); + vigra::Diff2D normal = normal_vector(previousPoint, currentPoint, nextPoint); + const double normal_magnitude = normal.magnitude(); + + if (currentMoveable && normal_magnitude > std::numeric_limits::epsilon()) { + normal *= stateSpaceWidth / normal_magnitude; vigra::Diff2D leftPoint = currentPoint + normal; vigra::Diff2D rightPoint = currentPoint - normal; @@ -220,8 +232,13 @@ deltaEMax = AnnealPara.deltaEMax; deltaEMin = AnnealPara.deltaEMin; const double kmax = static_cast(kMax); - tInitial = ceil(deltaEMax / log(kmax / (kmax - 2.0))); - tFinal = deltaEMin / log(kmax * kmax - kmax - 1.0); + if (kmax > 2.5) { + tInitial = ceil(deltaEMax / log(kmax / (kmax - 2.0))); + tFinal = deltaEMin / log(kmax * kmax - kmax - 1.0); + } else { + tInitial = deltaEMax; + tFinal = deltaEMin; + } } ~GDAConfiguration() { diff -Nru enblend-enfuse-4.1.3+dfsg/src/assemble.h enblend-enfuse-4.1.4+dfsg/src/assemble.h --- enblend-enfuse-4.1.3+dfsg/src/assemble.h 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/assemble.h 2015-08-07 14:44:53.000000000 +0000 @@ -1,5 +1,6 @@ /* - * Copyright (C) 2004-2014 Andrew Mihal + * Copyright (C) 2004-2009 Andrew Mihal + * Copyright (C) 2009-2015 Christoph Spiel * * This file is part of Enblend. * diff -Nru enblend-enfuse-4.1.3+dfsg/src/blend.h enblend-enfuse-4.1.4+dfsg/src/blend.h --- enblend-enfuse-4.1.3+dfsg/src/blend.h 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/blend.h 2015-08-07 14:44:53.000000000 +0000 @@ -1,5 +1,6 @@ /* - * Copyright (C) 2004-2014 Andrew Mihal + * Copyright (C) 2004-2009 Andrew Mihal + * Copyright (C) 2009-2015 Christoph Spiel * * This file is part of Enblend. * diff -Nru enblend-enfuse-4.1.3+dfsg/src/bounds.h enblend-enfuse-4.1.4+dfsg/src/bounds.h --- enblend-enfuse-4.1.3+dfsg/src/bounds.h 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/bounds.h 2015-08-07 14:44:53.000000000 +0000 @@ -1,5 +1,6 @@ /* - * Copyright (C) 2004-2014 Andrew Mihal + * Copyright (C) 2004-2009 Andrew Mihal + * Copyright (C) 2009-2015 Christoph Spiel * * This file is part of Enblend. * diff -Nru enblend-enfuse-4.1.3+dfsg/src/common.h enblend-enfuse-4.1.4+dfsg/src/common.h --- enblend-enfuse-4.1.3+dfsg/src/common.h 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/common.h 2015-08-07 14:44:53.000000000 +0000 @@ -1,5 +1,6 @@ /* - * Copyright (C) 2004-2014 Andrew Mihal + * Copyright (C) 2004-2009 Andrew Mihal + * Copyright (C) 2009-2015 Christoph Spiel * * This file is part of Enblend. * @@ -139,10 +140,10 @@ #define VISUALIZE_STATE_SPACE_UNCONVERGED VISUALIZE_RGB_COLOR_MAGENTA1 -// For CIECAM blending, Enblend and Enfuse transform the input images -// from their respective RGB color spaces to XYZ space (and then on to -// JCh). The following two #defines control the color transformation -// from and to XYZ space. +// For CIELAB, CIELUV, and CIECAM blending, Enblend and Enfuse +// transform the input images from their respective RGB color spaces +// to XYZ space (and for CIECAM then on to JCh). The following two +// #defines control the color transformation from and to XYZ space. #define RENDERING_INTENT_FOR_BLENDING INTENT_PERCEPTUAL #define TRANSFORMATION_FLAGS_FOR_BLENDING cmsFLAGS_NOCACHE @@ -255,7 +256,7 @@ { char *token = s; - while (*s != 0 && !strchr(delim, (int) *s)) + while (*s != 0 && !strchr(delim, static_cast(*s))) { s++; } @@ -496,6 +497,13 @@ } +inline bool +isFloatingPoint(const std::string& aPixelType) +{ + return aPixelType == "FLOAT" || aPixelType == "DOUBLE"; +} + + /** Convert an anOutputDepth to a "pixel type" string understood by * VIGRA. */ std::string @@ -749,7 +757,7 @@ { std::ostringstream oss; oss << - std::setw(width.empty() ? 1 + ilog10(aNumberOfImages - 1) : atoi(width.c_str())) << + std::setw(width.empty() ? 1U + ilog10(aNumberOfImages - 1U) : atoi(width.c_str())) << std::setfill(pad == 0 ? '0' : pad) << aNumber; result.append(oss.str()); @@ -862,6 +870,16 @@ } +inline unsigned +profileChannels(cmsHPROFILE profile) +{ + const cmsColorSpaceSignature signature = cmsGetColorSpace(profile); + const unsigned number_of_channels = cmsChannelsOf(signature); + assert(number_of_channels == 1U || number_of_channels == 3U); + return number_of_channels; +} + + namespace parameter { // Identifier: [A-Za-z][A-Za-z0-9_-]* diff -Nru enblend-enfuse-4.1.3+dfsg/src/DefaultSig.pm enblend-enfuse-4.1.4+dfsg/src/DefaultSig.pm --- enblend-enfuse-4.1.3+dfsg/src/DefaultSig.pm 2013-01-01 09:45:47.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/DefaultSig.pm 2015-08-07 14:44:51.000000000 +0000 @@ -134,7 +134,7 @@ sub _login_name { my $self = shift; - return getlogin or 'anonymous'; + return (getlogin or 'anonymous'); } diff -Nru enblend-enfuse-4.1.3+dfsg/src/enblend.1 enblend-enfuse-4.1.4+dfsg/src/enblend.1 --- enblend-enfuse-4.1.3+dfsg/src/enblend.1 2014-03-19 07:29:19.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/enblend.1 2015-09-28 06:46:57.000000000 +0000 @@ -1,15 +1,16 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.40.10. -.TH ENBLEND "1" "March 2014" "enblend 4.1.3" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.4. +.TH ENBLEND "1" "September 2015" "enblend 4.1.4" "User Commands" .SH NAME -enblend \- manual page for enblend 4.1.3 +enblend \- manual page for enblend 4.1.4 .SH SYNOPSIS .B enblend -[\fIoptions\fR] [\fI--output=IMAGE\fR] \fIINPUT\fR... +[\fI\,options\/\fR] [\fI\,--output=IMAGE\/\fR] \fI\,INPUT\/\fR... .SH DESCRIPTION Blend INPUT images into a single IMAGE. .PP INPUT... are image filenames or response filenames. Response filenames start with an "@" character. +.SH OPTIONS .SS "Common options:" .TP \fB\-V\fR, \fB\-\-version\fR @@ -21,19 +22,19 @@ \fB\-h\fR, \fB\-\-help\fR print this help message and exit .TP -\fB\-l\fR, \fB\-\-levels\fR=\fILEVELS\fR +\fB\-l\fR, \fB\-\-levels\fR=\fI\,LEVELS\/\fR limit number of blending LEVELS to use (1 to 29); negative number of LEVELS decreases maximum; "auto" restores the default automatic maximization .TP -\fB\-o\fR, \fB\-\-output\fR=\fIFILE\fR +\fB\-o\fR, \fB\-\-output\fR=\fI\,FILE\/\fR write output to FILE; default: "a.tif" .TP -\fB\-v\fR, \fB\-\-verbose\fR[=\fILEVEL\fR] +\fB\-v\fR, \fB\-\-verbose\fR[=\fI\,LEVEL\/\fR] verbosely report progress; repeat to increase verbosity or directly set to LEVEL .TP -\fB\-w\fR, \fB\-\-wrap\fR[=\fIMODE\fR] +\fB\-w\fR, \fB\-\-wrap\fR[=\fI\,MODE\/\fR] wrap around image boundary, where MODE is "none", "horizontal", "vertical", or "both"; default: none; without argument the option selects horizontal wrapping @@ -41,14 +42,14 @@ \fB\-x\fR checkpoint partial results .TP -\fB\-\-compression\fR=\fICOMPRESSION\fR +\fB\-\-compression\fR=\fI\,COMPRESSION\/\fR set compression of output image to COMPRESSION, where COMPRESSION is: "deflate", "jpeg", "lzw", "none", "packbits", for TIFF files and 0 to 100, or "jpeg", "jpeg\-arith" for JPEG files, where "jpeg" and "jpeg\-arith" accept a compression level .TP -\fB\-\-layer\-selector\fR=\fIALGORITHM\fR +\fB\-\-layer\-selector\fR=\fI\,ALGORITHM\/\fR set the layer selector ALGORITHM; default: "all\-layers"; available algorithms are: "all\-layers": select all layers in all images; @@ -56,21 +57,26 @@ "largest\-layer": select largest layer in each multi\-layer image; "no\-layer": do not select any layer from any image; .TP -\fB\-\-parameter\fR=\fIKEY1[=VALUE1][\fR:KEY2[=VALUE2][:...]] +\fB\-\-parameter\fR=\fI\,KEY1[=VALUE1][\/\fR:KEY2[=VALUE2][:...]] set one or more KEY\-VALUE pairs .SS "Extended options:" .TP \fB\-b\fR BLOCKSIZE image cache BLOCKSIZE in kilobytes; default: 2048KB .TP +\fB\-\-blend\-colorspace\fR=\fI\,COLORSPACE\/\fR +force COLORSPACE for blending operations; Enblend uses +"CIECAM" for images with ICC\-profile and "IDENTITY" for +those without and also for all floating\-point images; +.TP \fB\-c\fR, \fB\-\-ciecam\fR use CIECAM02 to blend colors; disable with "\-\-no\-ciecam" .TP -\fB\-\-fallback\-profile\fR=\fIPROFILE\-FILE\fR +\fB\-\-fallback\-profile\fR=\fI\,PROFILE\-FILE\/\fR use the ICC profile from PROFILE\-FILE instead of sRGB .TP -\fB\-d\fR, \fB\-\-depth\fR=\fIDEPTH\fR +\fB\-d\fR, \fB\-\-depth\fR=\fI\,DEPTH\/\fR set the number of bits per channel of the output image, where DEPTH is "8", "16", "32", "r32", or "r64" .TP @@ -90,18 +96,18 @@ set image CACHESIZE in megabytes; default: 1024MB .SS "Mask generation options:" .TP -\fB\-\-primary\-seam\-generator\fR=\fIALGORITHM\fR +\fB\-\-primary\-seam\-generator\fR=\fI\,ALGORITHM\/\fR use main seam finder ALGORITHM, where ALGORITHM is "nearest\-feature\-transform" or "graph\-cut"; default: "nearest\-feature\-transform" .TP -\fB\-\-image\-difference\fR=\fIALGORITHM[\fR:LUMINANCE\-WEIGHT[:CHROMINANCE\-WEIGHT]] +\fB\-\-image\-difference\fR=\fI\,ALGORITHM[\/\fR:LUMINANCE\-WEIGHT[:CHROMINANCE\-WEIGHT]] use ALGORITHM for calculation of the difference image, where ALGORITHM is "max\-hue\-luminance" or "delta\-e"; LUMINANCE\-WEIGHT and CHROMINANCE\-WEIGHT define the weights -of lightness and color; default: delta\-e:1: 1 +of lightness and color; default: delta\-e:1:1 .TP -\fB\-\-coarse\-mask\fR[=\fIFACTOR\fR] shrink overlap regions by FACTOR to speedup mask +\fB\-\-coarse\-mask\fR[=\fI\,FACTOR\/\fR] shrink overlap regions by FACTOR to speedup mask generation; this is the default; if omitted FACTOR defaults to 8 .TP @@ -109,7 +115,7 @@ generate mask at full image resolution; use e.g. if overlap regions are very narrow .TP -\fB\-\-smooth\-difference\fR=\fIRADIUS\fR +\fB\-\-smooth\-difference\fR=\fI\,RADIUS\/\fR (deprecated) smooth the difference image prior to seam\-line optimization with a Gaussian blur of RADIUS; @@ -121,48 +127,56 @@ \fB\-\-no\-optimize\fR turn off mask optimization .TP -\fB\-\-optimizer\-weights\fR=\fIDISTANCE\-WEIGHT[\fR:MISMATCH\-WEIGHT] +\fB\-\-optimizer\-weights\fR=\fI\,DISTANCE\-WEIGHT[\/\fR:MISMATCH\-WEIGHT] set the optimizer's weigths for distance and mismatch; default: 8:1 .TP -\fB\-\-mask\-vectorize\fR=\fILENGTH\fR +\fB\-\-mask\-vectorize\fR=\fI\,LENGTH\/\fR set LENGTH of single seam segment; append "%" for relative value; defaults: 4 for coarse masks and 20 for fine masks .TP -\fB\-\-anneal\fR=\fITAU[\fR:DELTAE\-MAX[:DELTAE\-MIN[:K\-MAX]]] +\fB\-\-anneal\fR=\fI\,TAU[\/\fR:DELTAE\-MAX[:DELTAE\-MIN[:K\-MAX]]] set annealing parameters of optimizer strategy 1; defaults: 0.75:7000:5:32 .TP -\fB\-\-dijkstra\fR=\fIRADIUS\fR +\fB\-\-dijkstra\fR=\fI\,RADIUS\/\fR set search RADIUS of optimizer strategy 2; default: 25 pixels .TP -\fB\-\-save\-masks\fR[=\fITEMPLATE\fR] +\fB\-\-save\-masks\fR[=\fI\,TEMPLATE\/\fR] save generated masks in TEMPLATE; default: "mask\-%n.tif"; conversion chars: "%i": mask index, "%n": mask number, "%p": full path, "%d": dirname, "%b": basename, "%f": filename, "%e": extension; lowercase characters refer to input images uppercase to the output image .TP -\fB\-\-load\-masks\fR[=\fITEMPLATE\fR] +\fB\-\-load\-masks\fR[=\fI\,TEMPLATE\/\fR] use existing masks in TEMPLATE instead of generating them; same template characters as "\-\-save\-masks"; default: "mask\-%n.tif" .TP -\fB\-\-visualize\fR[=\fITEMPLATE\fR] save results of optimizer in TEMPLATE; same template +\fB\-\-visualize\fR[=\fI\,TEMPLATE\/\fR] save results of optimizer in TEMPLATE; same template characters as "\-\-save\-masks"; default: "vis\-%n.tif" .PP Enblend accepts arguments to any option in uppercase as well as in lowercase letters. +.SH ENVIRONMENT +.TP +TMPDIR +The TMPDIR environment variable points to the directory, +where to store ImageCache files. If unset Enblend uses "/tmp". .SH AUTHOR -Written by Andrew Mihal and others. +Written by Andrew Mihal, Christoph Spiel and others. + cleanup_output .SH "REPORTING BUGS" Report bugs at . + cleanup_output .SH COPYRIGHT -Copyright \(co 2004\-2014 Andrew Mihal. +Copyright \(co 2004\-2009 Andrew Mihal. +.br +Copyright \(co 2009\-2015 Christoph Spiel. +.PP License GPLv2+: GNU GPL version 2 or later .br This is free software: you are free to change and redistribute it. diff -Nru enblend-enfuse-4.1.3+dfsg/src/enblend.cc enblend-enfuse-4.1.4+dfsg/src/enblend.cc --- enblend-enfuse-4.1.3+dfsg/src/enblend.cc 2014-03-10 13:44:00.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/enblend.cc 2015-08-07 14:45:00.000000000 +0000 @@ -1,5 +1,6 @@ /* - * Copyright (C) 2004-2014 Andrew Mihal + * Copyright (C) 2004-2009 Andrew Mihal + * Copyright (C) 2009-2015 Christoph Spiel * * This file is part of Enblend. * @@ -64,7 +65,8 @@ #endif #include -#include +#include + #include #if !defined(LCMS_VERSION) || LCMS_VERSION < 2050 #error "Little CMS version 2.5 or later is required" @@ -106,7 +108,7 @@ bool OneAtATime = true; boundary_t WrapAround = OpenBoundaries; bool GimpAssociatedAlphaHack = false; -boost::tribool UseCIECAM = boost::indeterminate; +blend_colorspace_t BlendColorspace = UndeterminedColorspace; bool OutputSizeGiven = false; int OutputWidthCmdLine = 0; int OutputHeightCmdLine = 0; @@ -222,7 +224,7 @@ "+ WrapAround = " << enblend::stringOfWraparound(WrapAround) << ", option \"--wrap\"\n" << "+ GimpAssociatedAlphaHack = " << enblend::stringOfBool(GimpAssociatedAlphaHack) << ", option \"-g\"\n" << - "+ UseCIECAM = " << UseCIECAM << ", option \"--ciecam\"\n" << + "+ BlendColorspace = " << BlendColorspace << ", option \"--blend-colorspace\"\n" << "+ FallbackProfile = " << (FallbackProfile ? enblend::profileDescription(FallbackProfile) : "[none]") << ", option \"--fallback-profile\"\n" << "+ OutputSizeGiven = " << enblend::stringOfBool(OutputSizeGiven) << ", option \"-f\"\n" << @@ -409,12 +411,14 @@ } std::cout << - "Copyright (C) 2004-2014 Andrew Mihal.\n" << + "Copyright (C) 2004-2009 Andrew Mihal.\n" << + "Copyright (C) 2009-2015 Christoph Spiel.\n" << + "\n" << "License GPLv2+: GNU GPL version 2 or later \n" << "This is free software: you are free to change and redistribute it.\n" << "There is NO WARRANTY, to the extent permitted by law.\n" << "\n" << - "Written by Andrew Mihal and others." << + "Written by Andrew Mihal, Christoph Spiel and others." << std::endl; exit(0); @@ -430,6 +434,7 @@ "INPUT... are image filenames or response filenames. Response\n" << "filenames start with an \"" << RESPONSE_FILE_PREFIX_CHAR << "\" character.\n" "\n" << + "Options:\n" << "Common options:\n" << " -V, --version output version information and exit\n" << " -a pre-assemble non-overlapping images\n" << @@ -466,6 +471,10 @@ "Extended options:\n" << " -b BLOCKSIZE image cache BLOCKSIZE in kilobytes; default: " << (vigra_ext::CachedFileImageDirector::v().getBlockSize() / 1024LL) << "KB\n" << + " --blend-colorspace=COLORSPACE\n" << + " force COLORSPACE for blending operations; Enblend uses\n" << + " \"CIECAM\" for images with ICC-profile and \"IDENTITY\" for\n" << + " those without and also for all floating-point images;\n" << " -c, --ciecam use CIECAM02 to blend colors; disable with\n" << " \"--no-ciecam\"\n" << " --fallback-profile=PROFILE-FILE\n" << @@ -493,7 +502,7 @@ " LUMINANCE-WEIGHT and CHROMINANCE-WEIGHT define the weights\n" << " of lightness and color; default: " << stringOfPixelDifferenceFunctor(PixelDifferenceFunctor) << ":" << LuminanceDifferenceWeight << - ": " << ChrominanceDifferenceWeight << "\n" << + ":" << ChrominanceDifferenceWeight << "\n" << " --coarse-mask[=FACTOR] shrink overlap regions by FACTOR to speedup mask\n" << " generation; this is the default; if omitted FACTOR\n" << " defaults to " << @@ -539,6 +548,20 @@ "Enblend accepts arguments to any option in uppercase as\n" << "well as in lowercase letters.\n" << "\n" << + "Environment:\n" << +#ifdef CACHE_IMAGES + " TMPDIR The TMPDIR environment variable points to the directory,\n" << + " where to store ImageCache files. If unset Enblend uses \"/tmp\".\n" << +#endif +#ifdef OPENMP + " OMP_NUM_THREADS The OMP_NUM_THREADS environment variable sets the number\n" << + " of threads to use in OpenMP parallel regions. If unset\n" << + " Enblend uses as many threads as there are CPUs.\n" << + " OMP_DYNAMIC The OMP_DYNAMIC environment variable controls dynamic\n" << + " adjustment of the number of threads to use in executing\n" << + " OpenMP parallel regions.\n" << +#endif + "\n" << "Report bugs at <" PACKAGE_BUGREPORT ">." << std::endl; @@ -583,6 +606,7 @@ #if !defined(__GW32C__) && !defined(_WIN32) struct sigaction action; action.sa_handler = SIG_DFL; + action.sa_flags = 0; sigemptyset(&(action.sa_mask)); sigaction(sig, &action, NULL); #else @@ -596,7 +620,7 @@ VersionOption, PreAssembleOption /* -a */, HelpOption, LevelsOption, OutputOption, VerboseOption, WrapAroundOption /* -w */, CheckpointOption /* -x */, CompressionOption, LZWCompressionOption, - BlockSizeOption, CIECAM02Option, NoCIECAM02Option, FallbackProfileOption, + BlockSizeOption, BlendColorspaceOption, CIECAM02Option, NoCIECAM02Option, FallbackProfileOption, DepthOption, AssociatedAlphaOption /* -g */, GPUOption, SizeAndPositionOption /* -f */, CacheSizeOption, VisualizeOption, CoarseMaskOption, FineMaskOption, @@ -790,7 +814,43 @@ } -int process_options(int argc, char** argv) +const struct option* +lookup_long_option_by_id(struct option* an_option_array, int a_long_option_id) +{ + assert(an_option_array != NULL); + + struct option* opt = an_option_array; + + while (opt->name != 0) { + if (opt->val == a_long_option_id) { + return opt; + } + ++opt; + } + + return NULL; +} + + +bool +short_option_requires_argument(const char* a_short_option_spec, char a_short_option) +{ + if (a_short_option != 0) { + const char* c = strchr(a_short_option_spec, a_short_option); + + if (c != NULL) { + if (*(c + 1) == ':' && *(c + 2) != ':') { + return true; + } + } + } + + return false; +} + + +int +process_options(int argc, char** argv) { enum OptionId { OPTION_ID_OFFSET = 1023, // Ids start at 1024 @@ -815,6 +875,7 @@ SmoothDifferenceId, OptimizerWeightsId, LevelsId, + BlendColorspaceId, CiecamId, NoCiecamId, FallbackProfileId, @@ -849,6 +910,8 @@ {"smooth-difference", required_argument, 0, SmoothDifferenceId}, {"optimizer-weights", required_argument, 0, OptimizerWeightsId}, {"levels", required_argument, 0, LevelsId}, + {"blend-colorspace", required_argument, 0, BlendColorspaceId}, + {"blend-color-space", required_argument, 0, BlendColorspaceId}, // dash form: not documented, not deprecated {"ciecam", no_argument, 0, CiecamId}, {"no-ciecam", no_argument, 0, NoCiecamId}, {"fallback-profile", required_argument, 0, FallbackProfileId}, @@ -865,11 +928,12 @@ bool justPrintUsage = false; OptionSetType optionSet; + static const char short_options[] = "Vab:cd:f:ghl:m:o:sv::w::x"; opterr = 0; // we have our own "unrecognized option" message + while (true) { - int option_index; - const int code = getopt_long(argc, argv, "Vab:cd:f:ghl:m:o:sv::w::x", - long_options, &option_index); + int option_index = -1; + const int code = getopt_long(argc, argv, short_options, long_options, &option_index); if (code == -1) { break; @@ -1021,31 +1085,31 @@ break; case ImageDifferenceId: { - boost::scoped_ptr s(new char[strlen(optarg) + 1]); - strcpy(s.get(), optarg); - char* save_ptr = NULL; - char* token = enblend::strtoken_r(s.get(), NUMERIC_OPTION_DELIMITERS, &save_ptr); char* tail; + boost::char_separator sep(NUMERIC_OPTION_DELIMITERS, "", boost::keep_empty_tokens); + const std::string arg(optarg); + boost::tokenizer > tok(arg, sep); + boost::tokenizer >::iterator token = tok.begin(); - if (token == NULL || *token == 0) { + if (token == tok.end()) { std::cerr << command << ": option \"--image-difference\" requires an argument" << std::endl; failed = true; } else { - PixelDifferenceFunctor = differenceFunctorOfString(token); + PixelDifferenceFunctor = differenceFunctorOfString(token->c_str()); if (PixelDifferenceFunctor == UnknownDifference) { - std::cerr << command << ": unknown image difference algorithm \"" << token << "\"" << std::endl; + std::cerr << command << ": unknown image difference algorithm \"" << *token << "\"" << std::endl; failed = true; } + ++token; } - token = enblend::strtoken_r(NULL, NUMERIC_OPTION_DELIMITERS, &save_ptr); - if (token != NULL && *token != 0) { + if (token != tok.end()) { errno = 0; - LuminanceDifferenceWeight = strtod(token, &tail); + LuminanceDifferenceWeight = strtod(token->c_str(), &tail); if (errno == 0) { if (*tail != 0) { std::cerr << command << ": unrecognized luminance weight \"" - << tail << "\" in \"" << token << "\"" << std::endl; + << tail << "\" in \"" << *token << "\"" << std::endl; failed = true; } if (LuminanceDifferenceWeight < 0.0) { @@ -1054,20 +1118,20 @@ } } else { std::cerr << command << ": illegal numeric format \"" - << token << "\" of luminance weight: " + << *token << "\" of luminance weight: " << enblend::errorMessage(errno) << std::endl; failed = true; } + ++token; } - token = enblend::strtoken_r(NULL, NUMERIC_OPTION_DELIMITERS, &save_ptr); - if (token != NULL && *token != 0) { + if (token != tok.end()) { errno = 0; - ChrominanceDifferenceWeight = strtod(token, &tail); + ChrominanceDifferenceWeight = strtod(token->c_str(), &tail); if (errno == 0) { if (*tail != 0) { std::cerr << command << ": unrecognized chrominance weight \"" - << tail << "\" in \"" << token << "\"" << std::endl; + << tail << "\" in \"" << *token << "\"" << std::endl; failed = true; } if (ChrominanceDifferenceWeight < 0.0) { @@ -1076,15 +1140,16 @@ } } else { std::cerr << command << ": illegal numeric format \"" - << token << "\" of chrominance weight: " + << *token << "\" of chrominance weight: " << enblend::errorMessage(errno) << std::endl; failed = true; } + ++token; } - if (save_ptr != NULL && *save_ptr != 0) { + if (token != tok.end()) { std::cerr << command << ": warning: ignoring trailing garbage \"" - << save_ptr << "\" in argument to \"--image-difference\"" << std::endl; + << *token << "\" in argument to \"--image-difference\"" << std::endl; } if (LuminanceDifferenceWeight + ChrominanceDifferenceWeight == 0.0) { @@ -1097,19 +1162,19 @@ } case AnnealId: { - boost::scoped_ptr s(new char[strlen(optarg) + 1]); - strcpy(s.get(), optarg); - char* save_ptr = NULL; - char* token = enblend::strtoken_r(s.get(), NUMERIC_OPTION_DELIMITERS, &save_ptr); char* tail; + boost::char_separator sep(NUMERIC_OPTION_DELIMITERS, "", boost::keep_empty_tokens); + const std::string arg(optarg); + boost::tokenizer > tok(arg, sep); + boost::tokenizer >::iterator token = tok.begin(); - if (token != NULL && *token != 0) { + if (token != tok.end()) { errno = 0; - double tau = strtod(token, &tail); + double tau = strtod(token->c_str(), &tail); if (errno != 0) { std::cerr << command << ": option \"--anneal\": illegal numeric format \"" - << token << "\" of tau: " << enblend::errorMessage(errno) + << *token << "\" of tau: " << enblend::errorMessage(errno) << std::endl; failed = true; } @@ -1119,7 +1184,7 @@ } else { std::cerr << command << ": --anneal: trailing garbage \"" - << tail << "\" in tau: \"" << token << "\"" + << tail << "\" in tau: \"" << *token << "\"" << std::endl; failed = true; } @@ -1139,15 +1204,15 @@ failed = true; } AnnealPara.tau = tau; + ++token; } - token = enblend::strtoken_r(NULL, NUMERIC_OPTION_DELIMITERS, &save_ptr); - if (token != NULL && *token != 0) { + if (token != tok.end()) { errno = 0; - AnnealPara.deltaEMax = strtod(token, &tail); + AnnealPara.deltaEMax = strtod(token->c_str(), &tail); if (errno != 0) { std::cerr << command << ": option \"--anneal\": illegal numeric format \"" - << token << "\" of deltaE_max: " << enblend::errorMessage(errno) + << *token << "\" of deltaE_max: " << enblend::errorMessage(errno) << std::endl; failed = true; } @@ -1155,7 +1220,7 @@ std::cerr << command << ": option \"--anneal\": trailing garbage \"" << tail << "\" in deltaE_max: \"" - << token << "\"" << std::endl; + << *token << "\"" << std::endl; failed = true; } //< src::minimum-anneal-deltae-max 0 @@ -1165,16 +1230,16 @@ << std::endl; failed = true; } + ++token; } - token = enblend::strtoken_r(NULL, NUMERIC_OPTION_DELIMITERS, &save_ptr); - if (token != NULL && *token != 0) { + if (token != tok.end()) { errno = 0; - AnnealPara.deltaEMin = strtod(token, &tail); + AnnealPara.deltaEMin = strtod(token->c_str(), &tail); if (errno != 0) { std::cerr << command << ": option \"--anneal\": illegal numeric format \"" - << token << "\" of deltaE_min: " << enblend::errorMessage(errno) + << *token << "\" of deltaE_min: " << enblend::errorMessage(errno) << std::endl; failed = true; } @@ -1182,7 +1247,7 @@ std::cerr << command << ": option \"--anneal\": trailing garbage \"" << tail << "\" in deltaE_min: \"" - << token << "\"" << std::endl; + << *token << "\"" << std::endl; failed = true; } //< src::minimum-anneal-deltae-min 0 @@ -1192,6 +1257,7 @@ << std::endl; failed = true; } + ++token; } if (AnnealPara.deltaEMin >= AnnealPara.deltaEMax) { std::cerr << command @@ -1200,14 +1266,13 @@ failed = true; } - token = enblend::strtoken_r(NULL, NUMERIC_OPTION_DELIMITERS, &save_ptr); - if (token != NULL && *token != 0) { + if (token != tok.end()) { errno = 0; - const long int kmax = strtol(token, &tail, 10); + const long int kmax = strtol(token->c_str(), &tail, 10); if (errno != 0) { std::cerr << command << ": option \"--anneal\": illegal numeric format \"" - << token << "\" of k_max: " << enblend::errorMessage(errno) + << *token << "\" of k_max: " << enblend::errorMessage(errno) << std::endl; failed = true; } @@ -1215,7 +1280,7 @@ std::cerr << command << ": option \"--anneal\": trailing garbage \"" << tail << "\" in k_max: \"" - << token << "\"" << std::endl; + << *token << "\"" << std::endl; failed = true; } //< src::minimum-anneal-kmax 3 @@ -1297,19 +1362,20 @@ } case OptimizerWeightsId: { - boost::scoped_ptr s(new char[strlen(optarg) + 1]); - strcpy(s.get(), optarg); - char* save_ptr = NULL; - char* token = enblend::strtoken_r(s.get(), NUMERIC_OPTION_DELIMITERS, &save_ptr); + boost::char_separator sep(NUMERIC_OPTION_DELIMITERS, "", boost::keep_empty_tokens); + const std::string arg(optarg); + boost::tokenizer > tok(arg, sep); + boost::tokenizer >::iterator token = tok.begin(); + OptimizerWeights.first = - enblend::numberOfString(token, + enblend::numberOfString(token->c_str(), _1 >= 0.0, "negative optimizer weight; will use 0.0", 0.0); - token = enblend::strtoken_r(NULL, NUMERIC_OPTION_DELIMITERS, &save_ptr); - if (token != NULL && *token != 0) { + ++token; + if (token != tok.end()) { OptimizerWeights.second = - enblend::numberOfString(token, + enblend::numberOfString(token->c_str(), _1 >= 0.0, "negative optimizer weight; will use 0.0", 0.0); @@ -1377,14 +1443,39 @@ optionSet.insert(BlockSizeOption); break; + case BlendColorspaceId: + if (optarg != NULL && *optarg != 0) { + std::string name(optarg); + boost::algorithm::to_upper(name); + if (name == "IDENTITY" || name == "ID" || name == "UNIT") { + BlendColorspace = IdentitySpace; + } else if (name == "CIECAM" || name == "CIECAM02" || name == "JCH") { + BlendColorspace = CIECAM; + } else { + std::cerr << command << + ": unrecognized argument \"" << optarg << "\" of option \"--blend-colorspace\"" << + std::endl; + failed = true; + } + } else { + std::cerr << command << ": option \"--blend-colorspace\" requires an argument" << std::endl; + failed = true; + } + optionSet.insert(BlendColorspaceOption); + break; + case 'c': // FALLTHROUGH case CiecamId: - UseCIECAM = true; + std::cerr << + command << ": info: prefer option \"--blend-colorspace\" to \"--ciecam\"" << std::endl; + BlendColorspace = CIECAM; optionSet.insert(CIECAM02Option); break; case NoCiecamId: - UseCIECAM = false; + std::cerr << + command << ": info: prefer option \"--blend-colorspace\" to \"--no-ciecam\"" << std::endl; + BlendColorspace = IdentitySpace; optionSet.insert(NoCIECAM02Option); break; @@ -1416,13 +1507,14 @@ MainAlgorithm = NFT; optionSet.insert(NearestFeatureTransformOption); } else { - std::cerr << command << ": warning: option \"--primary-seam-generator\": " << - "unrecognized argument \"" << optarg << "\", defaulting to NFT" << std::endl; - MainAlgorithm = NFT; - optionSet.insert(NearestFeatureTransformOption); + std::cerr << command << + "unrecognized argument \"" << optarg << "\" of option \"--primary-seam-generator\"" << + std::endl; + failed = true; } } else { - std::cerr << command << ": option \"--primary-seam-generator\" requires an argument" << std::endl; + std::cerr << command << ": option \"--primary-seam-generator\" requires an argument" << + std::endl; failed = true; } break; @@ -1527,21 +1619,21 @@ } case ParameterId: { - boost::scoped_ptr s(new char[strlen(optarg) + 1]); - strcpy(s.get(), optarg); - char* save_ptr = NULL; - char* token = strtok_r(s.get(), NUMERIC_OPTION_DELIMITERS, &save_ptr); + boost::char_separator sep(NUMERIC_OPTION_DELIMITERS, "", boost::keep_empty_tokens); + const std::string arg(optarg); + boost::tokenizer > tok(arg, sep); + boost::tokenizer >::iterator token = tok.begin(); - while (token != NULL) { + while (token != tok.end()) { std::string key; std::string value; - char* delimiter = strpbrk(token, ASSIGNMENT_CHARACTERS); + size_t delimiter = token->find_first_of(ASSIGNMENT_CHARACTERS); - if (delimiter == NULL) { - key = token; + if (delimiter == std::string::npos) { + key = *token; } else { - key = std::string(token, delimiter); - value = delimiter + 1; + key = token->substr(0, delimiter); + value = token->substr(delimiter + 1); } boost::trim(key); boost::trim(value); @@ -1549,24 +1641,24 @@ if (enblend::parameter::is_valid_identifier(key)) { Parameter.insert(parameter_map::value_type(key, ParameterValue(value))); } else { - std::cerr << command << ": warning: key \"" << key << "\" of pair \"" << token << + std::cerr << command << ": warning: key \"" << key << "\" of pair \"" << *token << "\" is not a valid identifier; ignoring\n"; } - token = strtok_r(NULL, NUMERIC_OPTION_DELIMITERS, &save_ptr); + ++token; } break; } case NoParameterId: { - boost::scoped_ptr s(new char[strlen(optarg) + 1]); - strcpy(s.get(), optarg); - char* save_ptr = NULL; - char* token = strtok_r(s.get(), NUMERIC_OPTION_DELIMITERS, &save_ptr); + boost::char_separator sep(NUMERIC_OPTION_DELIMITERS, "", boost::keep_empty_tokens); + const std::string arg(optarg); + boost::tokenizer > tok(arg, sep); + boost::tokenizer >::iterator token = tok.begin(); - while (token != NULL) { - std::string key(token); + while (token != tok.end()) { + std::string key(*token); boost::trim(key); if (key == "*") { @@ -1578,39 +1670,50 @@ "\" is not a valid identifier; ignoring\n"; } - token = strtok_r(NULL, NUMERIC_OPTION_DELIMITERS, &save_ptr); + ++token; } break; } case '?': - switch (optopt) { - case 0: // unknown long option - std::cerr << command << ": unknown option \"" << argv[optind - 1] << "\"\n"; - break; - case 'b': // FALLTHROUGH - case 'd': // FALLTHROUGH - case 'f': // FALLTHROUGH - case 'l': // FALLTHROUGH - case 'm': // FALLTHROUGH - case 'o': - std::cerr << command - << ": option \"-" << static_cast(optopt) << "\" requires an argument" - << std::endl; - break; + { + if (optopt == 0) { + const int failing_index = optind - 1; - default: - std::cerr << command << ": unknown option "; - if (isprint(optopt)) { - std::cerr << "\"-" << static_cast(optopt) << "\""; - } else { - std::cerr << "character 0x" << std::hex << optopt; + std::cerr << command << ": unknown long option"; + if (failing_index >= 0 && failing_index < argc) { + std::cerr << " \"" << argv[failing_index] << "\""; } std::cerr << std::endl; + } else { + const struct option* failing_long_option = lookup_long_option_by_id(long_options, optopt); + + if (failing_long_option == NULL) { + if (short_option_requires_argument(short_options, optopt)) { + std::cerr << command + << ": option \"-" << static_cast(optopt) << "\" requires an argument" + << std::endl; + } else { + std::cerr << command << ": unknown option "; + if (isprint(optopt)) { + std::cerr << "\"-" << static_cast(optopt) << "\""; + } else { + std::cerr << "character 0x" << std::hex << optopt; + } + std::cerr << std::endl; + } + } else { + assert(failing_long_option->has_arg == required_argument); + std::cerr << command + << ": option \"--" << failing_long_option->name << "\" requires an argument" + << std::endl; + } } + std::cerr << "Try \"enblend --help\" for more information." << std::endl; exit(1); + } default: std::cerr << command @@ -1666,6 +1769,7 @@ struct sigaction action; action.sa_handler = sigint_handler; + action.sa_flags = 0; sigemptyset(&(action.sa_mask)); sigaction(SIGINT, &action, NULL); #else @@ -1741,6 +1845,20 @@ i->unroll_trace(); exit(1); } + + if (!vigra::isImage(i->filename().c_str())) { + std::cerr << + command << ": cannot process \"" << i->filename() << "\"; not recognized as an image\n" << + command << ": info: possible causes:\n" << + command << ": info: - An underlying image-processing library does not understand the\n" << + command << ": info: particular compression, sub-format, format extension, ...\n" << + command << ": info: - Enblend was not compiled with support for this format, which\n" << + command << ": info: can be checked with \"" << command << " --show-image-formats\".\n" << + command << ": info: - The image is corrupted or it is incomplete/truncated.\n" << + command << ": info: - It really is not an image. Honesty, huh?\n"; + i->unroll_trace(); + exit(1); + } } LayerSelection.retrieve_image_information(inputTraceableFileNameList.begin(), @@ -1927,25 +2045,28 @@ } } - std::cerr << std::endl << command << ": warning: input image \"" - << inputFileNameIterator->filename() - << "\"" << enblend::optional_layer_name(layer, layers) << "\n"; - inputFileNameIterator->unroll_trace(); - std::cerr << command << ": warning: has "; - if (newProfile) { - std::cerr << "ICC profile \"" << enblend::profileDescription(newProfile) << "\",\n"; - } else { - std::cerr << "no ICC profile,\n"; - } - std::cerr << command << ": warning: but first image has "; - if (InputProfile) { - std::cerr << "ICC profile \"" << enblend::profileDescription(InputProfile) << "\";\n"; - } else { - std::cerr << "no ICC profile;\n"; + if (InputProfile == NULL || newProfile == NULL || + enblend::profileDescription(InputProfile) != enblend::profileDescription(newProfile)) { + std::cerr << std::endl << command << ": warning: input image \"" + << inputFileNameIterator->filename() + << "\"" << enblend::optional_layer_name(layer, layers) << "\n"; + inputFileNameIterator->unroll_trace(); + std::cerr << command << ": warning: has "; + if (newProfile) { + std::cerr << "ICC profile \"" << enblend::profileDescription(newProfile) << "\",\n"; + } else { + std::cerr << "no ICC profile,\n"; + } + std::cerr << command << ": warning: but first image has "; + if (InputProfile) { + std::cerr << "ICC profile \"" << enblend::profileDescription(InputProfile) << "\";\n"; + } else { + std::cerr << "no ICC profile;\n"; + } + std::cerr << command << ": warning: blending images with different color spaces\n" + << command << ": warning: may have unexpected results" + << std::endl; } - std::cerr << command << ": warning: blending images with different color spaces\n" - << command << ": warning: may have unexpected results" - << std::endl; } if (inputInfo->width() < minDim) { @@ -2082,8 +2203,17 @@ // Set the output image ICC profile outputImageInfo.setICCProfile(iccProfile); - if (UseCIECAM == true || (boost::indeterminate(UseCIECAM) && !iccProfile.empty())) { - UseCIECAM = true; + if (BlendColorspace == UndeterminedColorspace && + !(iccProfile.empty() || enblend::isFloatingPoint(pixelType))) { + BlendColorspace = CIECAM; + } + + if (BlendColorspace == CIECAM || BlendColorspace == CIELAB || BlendColorspace == CIELUV) { + if (enblend::isFloatingPoint(pixelType)) { + std::cerr << command << + ": warning: blend color space for floating-point images is not \"identity\"" << std::endl; + } + if (InputProfile == NULL) { std::cerr << command << ": warning: input images do not have ICC profiles;\n"; if (FallbackProfile == NULL) { @@ -2098,7 +2228,10 @@ } XYZProfile = cmsCreateXYZProfile(); - InputToXYZTransform = cmsCreateTransform(InputProfile, TYPE_RGB_DBL, + const unsigned input_profile_type = + enblend::profileChannels(InputProfile) > 1 ? TYPE_RGB_DBL : TYPE_GRAY_DBL; + + InputToXYZTransform = cmsCreateTransform(InputProfile, input_profile_type, XYZProfile, TYPE_XYZ_DBL, RENDERING_INTENT_FOR_BLENDING, TRANSFORMATION_FLAGS_FOR_BLENDING); @@ -2165,7 +2298,7 @@ } } LabProfile = cmsCreateLab2Profile(&white_point); - InputToLabTransform = cmsCreateTransform(InputProfile, TYPE_RGB_DBL, + InputToLabTransform = cmsCreateTransform(InputProfile, input_profile_type, LabProfile, TYPE_Lab_DBL, RENDERING_INTENT_FOR_BLENDING, TRANSFORMATION_FLAGS_FOR_BLENDING); @@ -2178,7 +2311,7 @@ exit(1); } LabToInputTransform = cmsCreateTransform(LabProfile, TYPE_Lab_DBL, - InputProfile, TYPE_RGB_DBL, + InputProfile, input_profile_type, RENDERING_INTENT_FOR_BLENDING, TRANSFORMATION_FLAGS_FOR_BLENDING); if (!LabToInputTransform) { @@ -2193,7 +2326,7 @@ } else { if (FallbackProfile != NULL) { std::cerr << command << - ": warning: blending in RGB cube; option \"--fallback-profile\" has no effect" << + ": warning: blending in identity space; option \"--fallback-profile\" has no effect" << std::endl; } } diff -Nru enblend-enfuse-4.1.3+dfsg/src/enblend.h enblend-enfuse-4.1.4+dfsg/src/enblend.h --- enblend-enfuse-4.1.3+dfsg/src/enblend.h 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/enblend.h 2015-08-07 14:44:53.000000000 +0000 @@ -1,5 +1,6 @@ /* - * Copyright (C) 2004-2014 Andrew Mihal + * Copyright (C) 2004-2009 Andrew Mihal + * Copyright (C) 2009-2015 Christoph Spiel * * This file is part of Enblend. * @@ -167,14 +168,19 @@ // White image is redundant. delete whitePair.first; delete whitePair.second; - std::cerr << command << ": warning: some images are redundant and will not be blended" - << std::endl; + std::cerr << command << ": warning: some images are redundant and will not be blended\n" + << command << ": info: usually this means that at least one of the images\n" + << command << ": info: does not belong to the set" << std::endl; continue; } else if (overlap == NoOverlap && ExactLevels == 0) { // Images do not actually overlap. - std::cerr << command << ": images do not overlap - they will be combined without blending\n" - << command << ": use the \"-l\" flag to force blending with a certain number of levels" - << std::endl; + std::cerr << command << "warning: images do not overlap; they will be combined without blending\n" + << command << "info: usually this means that at least one of these images does not\n" + << command << "info: belong to the set or the order of the images given at the\n" + << command << "info: command line is wrong; sometimes passing option\n" + << command << "info: \"--pre-assemble\" resolves the problem; in rare cases using\n" + << command << "info: option \"--levels=NUMBER\" to force blending with a certain\n" + << command << "info: NUMBER of levels can help, too" << std::endl; // Copy white image into black image verbatim. vigra::copyImageIf(srcImageRange(*(whitePair.first)), diff -Nru enblend-enfuse-4.1.3+dfsg/src/enfuse.1 enblend-enfuse-4.1.4+dfsg/src/enfuse.1 --- enblend-enfuse-4.1.3+dfsg/src/enfuse.1 2014-03-19 07:29:19.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/enfuse.1 2015-09-28 06:46:57.000000000 +0000 @@ -1,15 +1,16 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.40.10. -.TH ENFUSE "1" "March 2014" "enfuse 4.1.3" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.4. +.TH ENFUSE "1" "September 2015" "enfuse 4.1.4" "User Commands" .SH NAME -enfuse \- manual page for enfuse 4.1.3 +enfuse \- manual page for enfuse 4.1.4 .SH SYNOPSIS .B enfuse -[\fIoptions\fR] [\fI--output=IMAGE\fR] \fIINPUT\fR... +[\fI\,options\/\fR] [\fI\,--output=IMAGE\/\fR] \fI\,INPUT\/\fR... .SH DESCRIPTION Fuse INPUT images into a single IMAGE. .PP INPUT... are image filenames or response filenames. Response filenames start with an "@" character. +.SH OPTIONS .SS "Common options:" .TP \fB\-V\fR, \fB\-\-version\fR @@ -18,31 +19,31 @@ \fB\-h\fR, \fB\-\-help\fR print this help message and exit .TP -\fB\-l\fR, \fB\-\-levels\fR=\fILEVELS\fR +\fB\-l\fR, \fB\-\-levels\fR=\fI\,LEVELS\/\fR limit number of blending LEVELS to use (1 to 29); negative number of LEVELS decreases maximum; "auto" restores the default automatic maximization .TP -\fB\-o\fR, \fB\-\-output\fR=\fIFILE\fR +\fB\-o\fR, \fB\-\-output\fR=\fI\,FILE\/\fR write output to FILE; default: "a.tif" .TP -\fB\-v\fR, \fB\-\-verbose\fR[=\fILEVEL\fR] +\fB\-v\fR, \fB\-\-verbose\fR[=\fI\,LEVEL\/\fR] verbosely report progress; repeat to increase verbosity or directly set to LEVEL .TP -\fB\-w\fR, \fB\-\-wrap\fR[=\fIMODE\fR] +\fB\-w\fR, \fB\-\-wrap\fR[=\fI\,MODE\/\fR] wrap around image boundary, where MODE is "none", "horizontal", "vertical", or "both"; default: none; without argument the option selects horizontal wrapping .TP -\fB\-\-compression\fR=\fICOMPRESSION\fR +\fB\-\-compression\fR=\fI\,COMPRESSION\/\fR set compression of output image to COMPRESSION, where COMPRESSION is: "deflate", "jpeg", "lzw", "none", "packbits", for TIFF files and 0 to 100, or "jpeg", "jpeg\-arith" for JPEG files, where "jpeg" and "jpeg\-arith" accept a compression level .TP -\fB\-\-layer\-selector\fR=\fIALGORITHM\fR +\fB\-\-layer\-selector\fR=\fI\,ALGORITHM\/\fR set the layer selector ALGORITHM; default: "all\-layers"; available algorithms are: "all\-layers": select all layers in all images; @@ -50,21 +51,26 @@ "largest\-layer": select largest layer in each multi\-layer image; "no\-layer": do not select any layer from any image; .TP -\fB\-\-parameter\fR=\fIKEY1[=VALUE1][\fR:KEY2[=VALUE2][:...]] +\fB\-\-parameter\fR=\fI\,KEY1[=VALUE1][\/\fR:KEY2[=VALUE2][:...]] set one or more KEY\-VALUE pairs .SS "Extended options:" .TP \fB\-b\fR BLOCKSIZE image cache BLOCKSIZE in kilobytes; default: 2048KB .TP +\fB\-\-blend\-colorspace\fR=\fI\,COLORSPACE\/\fR +force COLORSPACE for blending operations; Enfuse uses +"CIECAM" for images with ICC\-profile and "IDENTITY" for +those without and also for all floating\-point images; +.TP \fB\-c\fR, \fB\-\-ciecam\fR use CIECAM02 to blend colors; disable with "\-\-no\-ciecam" .TP -\fB\-\-fallback\-profile\fR=\fIPROFILE\-FILE\fR +\fB\-\-fallback\-profile\fR=\fI\,PROFILE\-FILE\/\fR use the ICC profile from PROFILE\-FILE instead of sRGB .TP -\fB\-d\fR, \fB\-\-depth\fR=\fIDEPTH\fR +\fB\-d\fR, \fB\-\-depth\fR=\fI\,DEPTH\/\fR set the number of bits per channel of the output image, where DEPTH is "8", "16", "32", "r32", or "r64" .TP @@ -81,27 +87,27 @@ set image CACHESIZE in megabytes; default: 1024MB .SS "Fusion options:" .TP -\fB\-\-exposure\-weight\fR=\fIWEIGHT\fR +\fB\-\-exposure\-weight\fR=\fI\,WEIGHT\/\fR weight given to well\-exposed pixels (0 <= WEIGHT <= 1); default: 1 .TP -\fB\-\-saturation\-weight\fR=\fIWEIGHT\fR +\fB\-\-saturation\-weight\fR=\fI\,WEIGHT\/\fR weight given to highly\-saturated pixels (0 <= WEIGHT <= 1); default: 0.2 .TP -\fB\-\-contrast\-weight\fR=\fIWEIGHT\fR +\fB\-\-contrast\-weight\fR=\fI\,WEIGHT\/\fR weight given to pixels in high\-contrast neighborhoods (0 <= WEIGHT <= 1); default: 0 .TP -\fB\-\-entropy\-weight\fR=\fIWEIGHT\fR +\fB\-\-entropy\-weight\fR=\fI\,WEIGHT\/\fR weight given to pixels in high entropy neighborhoods (0 <= WEIGHT <= 1); default: 0 .TP -\fB\-\-exposure\-mu\fR=\fIMEAN\fR +\fB\-\-exposure\-mu\fR=\fI\,MEAN\/\fR center also known as MEAN of Gaussian weighting function (0 <= MEAN <= 1); default: 0.5 .TP -\fB\-\-exposure\-sigma\fR=\fISIGMA\fR +\fB\-\-exposure\-sigma\fR=\fI\,SIGMA\/\fR standard deviation of Gaussian weighting function (SIGMA > 0); default: 0.2 .TP @@ -115,17 +121,17 @@ but leads to increased noise .SS "Expert options:" .TP -\fB\-\-exposure\-cutoff\fR=\fILOWERCUTOFF[\fR:UPPERCUTOFF[:LOWERPROJECTOR[:UPPERPROJECTOR]]] +\fB\-\-exposure\-cutoff\fR=\fI\,LOWERCUTOFF[\/\fR:UPPERCUTOFF[:LOWERPROJECTOR[:UPPERPROJECTOR]]] LOWERCUTOFF and UPPERCUTOFF are the values below or above of which pixels are weighted with zero weight in exposure weighting; append "%" signs for relative values; default: 0%:100%:anti\-value:value .TP -\fB\-\-contrast\-window\-size\fR=\fISIZE\fR +\fB\-\-contrast\-window\-size\fR=\fI\,SIZE\/\fR set window SIZE for local\-contrast analysis (SIZE >= 3); default: 5 .TP -\fB\-\-gray\-projector\fR=\fIPROJECTOR\fR +\fB\-\-gray\-projector\fR=\fI\,PROJECTOR\/\fR apply gray\-scale PROJECTOR in exposure or contrast weighing, where PROJECTOR is one of "anti\-value", "average", "l\-star", "lightness", "luminance", @@ -133,7 +139,7 @@ "channel\-mixer:RED\-WEIGHT:GREEN\-WEIGHT:BLUE\-WEIGHT"; default: "average" .TP -\fB\-\-contrast\-edge\-scale\fR=\fIEDGESCALE[\fR:LCESCALE[:LCEFACTOR]] +\fB\-\-contrast\-edge\-scale\fR=\fI\,EDGESCALE[\/\fR:LCESCALE[:LCEFACTOR]] set scale on which to look for edges; positive LCESCALE switches on local contrast enhancement by LCEFACTOR (EDGESCALE, LCESCALE, LCEFACTOR >= 0); @@ -141,22 +147,22 @@ EDGESCALE; append "%" to LCEFACTOR for relative value; default: 0:0:0 .TP -\fB\-\-contrast\-min\-curvature\fR=\fICURVATURE\fR +\fB\-\-contrast\-min\-curvature\fR=\fI\,CURVATURE\/\fR minimum CURVATURE for an edge to qualify; append "%" for relative values; default: 0 .TP -\fB\-\-entropy\-window\-size\fR=\fISIZE\fR +\fB\-\-entropy\-window\-size\fR=\fI\,SIZE\/\fR set window SIZE for local entropy analysis (SIZE >= 3); default: 3 .TP -\fB\-\-entropy\-cutoff\fR=\fILOWERCUTOFF[\fR:UPPERCUTOFF] +\fB\-\-entropy\-cutoff\fR=\fI\,LOWERCUTOFF[\/\fR:UPPERCUTOFF] LOWERCUTOFF is the value below of which pixels are treated as black and UPPERCUTOFF is the value above of which pixels are treated as white in the entropy weighting; append "%" signs for relative values; default: 0%:100% .TP -\fB\-\-save\-masks[\fR=\fISOFT\-TEMPLATE[\fR:HARD\-TEMPLATE]] +\fB\-\-save\-masks[\fR=\fI\,SOFT\-TEMPLATE[\/\fR:HARD\-TEMPLATE]] save weight masks in SOFT\-TEMPLATE and HARD\-TEMPLATE; conversion chars: "%i": mask index, "%n": mask number, "%p": full path, "%d": dirname, "%b": basename, @@ -164,7 +170,7 @@ refer to input images uppercase to the output image default: "softmask\-%n.tif":"hardmask\-%n.tif" .TP -\fB\-\-load\-masks[\fR=\fISOFT\-TEMPLATE[\fR:HARD\-TEMPLATE]] +\fB\-\-load\-masks[\fR=\fI\,SOFT\-TEMPLATE[\/\fR:HARD\-TEMPLATE]] skip calculation of weight maps and use the ones in the files matching the templates instead. These can be either hard or soft masks. For template @@ -173,14 +179,22 @@ .PP Enfuse accepts arguments to any option in uppercase as well as in lowercase letters. +.SH ENVIRONMENT +.TP +TMPDIR +The TMPDIR environment variable points to the directory, +where to store ImageCache files. If unset Enfuse uses "/tmp". .SH AUTHOR -Written by Andrew Mihal and others. +Written by Andrew Mihal, Christoph Spiel and others. + cleanup_output .SH "REPORTING BUGS" Report bugs at . + cleanup_output .SH COPYRIGHT -Copyright \(co 2004\-2014 Andrew Mihal. +Copyright \(co 2004\-2009 Andrew Mihal. +.br +Copyright \(co 2009\-2015 Christoph Spiel. +.PP License GPLv2+: GNU GPL version 2 or later .br This is free software: you are free to change and redistribute it. diff -Nru enblend-enfuse-4.1.3+dfsg/src/enfuse.cc enblend-enfuse-4.1.4+dfsg/src/enfuse.cc --- enblend-enfuse-4.1.3+dfsg/src/enfuse.cc 2014-03-10 13:44:00.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/enfuse.cc 2015-08-07 14:45:00.000000000 +0000 @@ -1,5 +1,6 @@ /* - * Copyright (C) 2004-2014 Andrew Mihal + * Copyright (C) 2004-2009 Andrew Mihal + * Copyright (C) 2009-2015 Christoph Spiel * * This file is part of Enblend. * @@ -63,7 +64,7 @@ #include #endif -#include +#include #include #if !defined(LCMS_VERSION) || LCMS_VERSION < 2050 @@ -87,7 +88,7 @@ bool OneAtATime = true; boundary_t WrapAround = OpenBoundaries; bool GimpAssociatedAlphaHack = false; -boost::tribool UseCIECAM = boost::indeterminate; +blend_colorspace_t BlendColorspace = UndeterminedColorspace; bool OutputSizeGiven = false; int OutputWidthCmdLine = 0; int OutputHeightCmdLine = 0; @@ -189,7 +190,7 @@ "+ WrapAround = " << enblend::stringOfWraparound(WrapAround) << ", option \"--wrap\"\n" << "+ GimpAssociatedAlphaHack = " << enblend::stringOfBool(GimpAssociatedAlphaHack) << ", option \"-g\"\n" << - "+ UseCIECAM = " << UseCIECAM << ", option \"--ciecam\"\n" << + "+ BlendColorspace = " << BlendColorspace << ", option \"--blend-colorspace\"\n" << "+ FallbackProfile = " << (FallbackProfile ? enblend::profileDescription(FallbackProfile) : "[none]") << ", option \"--fallback-profile\"\n" << "+ OutputSizeGiven = " << enblend::stringOfBool(OutputSizeGiven) << ", option \"-f\"\n" << @@ -333,13 +334,15 @@ } std::cout << - "Copyright (C) 2004-2014 Andrew Mihal.\n" << + "Copyright (C) 2004-2009 Andrew Mihal.\n" << + "Copyright (C) 2009-2015 Christoph Spiel.\n" << + "\n" << "License GPLv2+: GNU GPL version 2 or later \n" << "This is free software: you are free to change and redistribute it.\n" << "There is NO WARRANTY, to the extent permitted by law.\n" << "\n" << - "Written by Andrew Mihal and others." << - endl; + "Written by Andrew Mihal, Christoph Spiel and others." << + std::endl; exit(0); } @@ -354,6 +357,7 @@ "INPUT... are image filenames or response filenames. Response\n" << "filenames start with an \"" << RESPONSE_FILE_PREFIX_CHAR << "\" character.\n" "\n" << + "Options:\n" << "Common options:\n" << " -V, --version output version information and exit\n" << " -h, --help print this help message and exit\n" << @@ -388,6 +392,10 @@ "Extended options:\n" << " -b BLOCKSIZE image cache BLOCKSIZE in kilobytes; default: " << (vigra_ext::CachedFileImageDirector::v().getBlockSize() / 1024LL) << "KB\n" << + " --blend-colorspace=COLORSPACE\n" << + " force COLORSPACE for blending operations; Enfuse uses\n" << + " \"CIECAM\" for images with ICC-profile and \"IDENTITY\" for\n" << + " those without and also for all floating-point images;\n" << " -c, --ciecam use CIECAM02 to blend colors; disable with\n" << " \"--no-ciecam\"\n" << " --fallback-profile=PROFILE-FILE\n" << @@ -484,6 +492,20 @@ "Enfuse accepts arguments to any option in uppercase as\n" << "well as in lowercase letters.\n" << "\n" << + "Environment:\n" << +#ifdef CACHE_IMAGES + " TMPDIR The TMPDIR environment variable points to the directory,\n" << + " where to store ImageCache files. If unset Enfuse uses \"/tmp\".\n" << +#endif +#ifdef OPENMP + " OMP_NUM_THREADS The OMP_NUM_THREADS environment variable sets the number\n" << + " of threads to use in OpenMP parallel regions. If unset\n" << + " Enfuse uses as many threads as there are CPUs.\n" << + " OMP_DYNAMIC The OMP_DYNAMIC environment variable controls dynamic\n" << + " adjustment of the number of threads to use in executing\n" << + " OpenMP parallel regions.\n" << +#endif + "\n" << "Report bugs at <" PACKAGE_BUGREPORT ">." << endl; @@ -521,6 +543,7 @@ #if !defined(__GW32C__) && !defined(_WIN32) struct sigaction action; action.sa_handler = SIG_DFL; + action.sa_flags = 0; sigemptyset(&(action.sa_mask)); sigaction(sig, &action, NULL); #else @@ -533,7 +556,7 @@ enum AllPossibleOptions { VersionOption, HelpOption, LevelsOption, OutputOption, VerboseOption, WrapAroundOption /* -w */, CompressionOption, LZWCompressionOption, - BlockSizeOption, CIECAM02Option, NoCIECAM02Option, FallbackProfileOption, + BlockSizeOption, BlendColorspaceOption, CIECAM02Option, NoCIECAM02Option, FallbackProfileOption, DepthOption, AssociatedAlphaOption /* -g */, SizeAndPositionOption /* -f */, CacheSizeOption, ExposureWeightOption, ExposureCutoffOption, SaturationWeightOption, @@ -773,29 +796,63 @@ const std::string& an_option_name) { if (an_option_argument != NULL && *an_option_argument != 0) { - char* s = new char[strlen(an_option_argument) + 1]; - strcpy(s, an_option_argument); - - char* save_ptr = NULL; - char* token = enblend::strtoken_r(s, PATH_OPTION_DELIMITERS, &save_ptr); - a_soft_mask_template = token; - token = enblend::strtoken_r(NULL, PATH_OPTION_DELIMITERS, &save_ptr); - if (token != NULL && *token != 0) { - a_hard_mask_template = token; + boost::char_separator sep(PATH_OPTION_DELIMITERS, "", boost::keep_empty_tokens); + const std::string arg(an_option_argument); + boost::tokenizer > tok(arg, sep); + boost::tokenizer >::iterator token = tok.begin(); + + a_soft_mask_template = *token; + ++token; + if (token != tok.end()) { + a_hard_mask_template = *token; } - token = enblend::strtoken_r(NULL, PATH_OPTION_DELIMITERS, &save_ptr); - if (token != NULL && *token != 0) { + ++token; + if (token != tok.end()) { std::cerr << command << ": warning: ignoring trailing garbage in \"" << an_option_name << "\"" << endl; } + } +} + + +const struct option* +lookup_long_option_by_id(struct option* an_option_array, int a_long_option_id) +{ + assert(an_option_array != NULL); + + struct option* opt = an_option_array; - delete [] s; + while (opt->name != 0) { + if (opt->val == a_long_option_id) { + return opt; + } + ++opt; } + + return NULL; } -int process_options(int argc, char** argv) +bool +short_option_requires_argument(const char* a_short_option_spec, char a_short_option) +{ + if (a_short_option != 0) { + const char* c = strchr(a_short_option_spec, a_short_option); + + if (c != NULL) { + if (*(c + 1) == ':' && *(c + 2) != ':') { + return true; + } + } + } + + return false; +} + + +int +process_options(int argc, char** argv) { enum OptionId { OPTION_ID_OFFSET = 1023, // Ids start at 1024 @@ -822,6 +879,7 @@ SaveMasksId, WrapAroundId, LevelsId, + BlendColorspaceId, CiecamId, NoCiecamId, FallbackProfileId, @@ -856,6 +914,8 @@ {"save-mask", optional_argument, 0, SaveMasksId}, // singular form: not documented, not deprecated {"save-masks", optional_argument, 0, SaveMasksId}, {"wrap", optional_argument, 0, WrapAroundId}, + {"blend-colorspace", required_argument, 0, BlendColorspaceId}, + {"blend-color-space", required_argument, 0, BlendColorspaceId}, // dash form: not documented, not deprecated {"levels", required_argument, 0, LevelsId}, {"ciecam", no_argument, 0, CiecamId}, {"no-ciecam", no_argument, 0, NoCiecamId}, @@ -874,10 +934,12 @@ bool justPrintUsage = false; OptionSetType optionSet; + static const char short_options[] = "Vb:cd:f:ghl:m:o:v::w::"; opterr = 0; // we have our own "unrecognized option" message + while (true) { - int option_index; - const int code = getopt_long(argc, argv, "Vb:cd:f:ghl:m:o:v::w::", + int option_index = -1; + const int code = getopt_long(argc, argv, short_options, long_options, &option_index); if (code == -1) { @@ -947,100 +1009,100 @@ } case EdgeScaleId: { - char* s = new char[strlen(optarg) + 1]; - strcpy(s, optarg); - char* save_ptr = NULL; - char* token = enblend::strtoken_r(s, NUMERIC_OPTION_DELIMITERS, &save_ptr); char* tail; + boost::char_separator sep(NUMERIC_OPTION_DELIMITERS, "", boost::keep_empty_tokens); + const std::string arg(optarg); + boost::tokenizer > tok(arg, sep); + boost::tokenizer >::iterator token = tok.begin(); - if (token == NULL || *token == 0) { + if (token == tok.end()) { std::cerr << command << ": no scale given to \"--contrast-edge-scale\". " << "scale is required." << endl; failed = true; } else { errno = 0; - FilterConfig.edgeScale = strtod(token, &tail); + FilterConfig.edgeScale = strtod(token->c_str(), &tail); if (errno == 0) { if (*tail != 0) { std::cerr << command << ": could not decode \"" << tail << "\" in edge scale specification \"" - << token << "\" for edge scale." << endl; + << *token << "\" for edge scale." << endl; failed = true; } } else { std::cerr << command << ": illegal numeric format \"" - << token << "\" for edge scale: " + << *token << "\" for edge scale: " << enblend::errorMessage(errno) << endl; failed = true; } + ++token; } - token = enblend::strtoken_r(NULL, NUMERIC_OPTION_DELIMITERS, &save_ptr); - if (token != NULL && *token != 0) { + if (token != tok.end()) { errno = 0; - FilterConfig.lceScale = strtod(token, &tail); + FilterConfig.lceScale = strtod(token->c_str(), &tail); if (errno == 0) { if (strcmp(tail, "%") == 0) { FilterConfig.lceScale *= FilterConfig.edgeScale / 100.0; } else if (*tail != 0) { std::cerr << command << ": could not decode \"" << tail - << "\" in specification \"" << token + << "\" in specification \"" << *token << "\" for LCE-scale." << endl; failed = true; } } else { std::cerr << command << ": illegal numeric format \"" - << token << "\" for LCE-Scale: " + << *token << "\" for LCE-Scale: " << enblend::errorMessage(errno) << endl; failed = true; } + ++token; } - token = enblend::strtoken_r(NULL, NUMERIC_OPTION_DELIMITERS, &save_ptr); - if (token != NULL && *token != 0) { + if (token != tok.end()) { errno = 0; - FilterConfig.lceFactor = strtod(token, &tail); + FilterConfig.lceFactor = strtod(token->c_str(), &tail); if (errno == 0) { if (strcmp(tail, "%") == 0) { FilterConfig.lceFactor /= 100.0; } else if (*tail != 0) { std::cerr << command << ": could not decode \"" << tail - << "\" in specification \"" << token + << "\" in specification \"" << *token << "\" for LCE-factor." << endl; failed = true; } } else { std::cerr << command << ": illegal numeric format \"" - << token << "\" for LCE-factor: " + << *token << "\" for LCE-factor: " << enblend::errorMessage(errno) << endl; failed = true; } + ++token; } - if (save_ptr != NULL && *save_ptr != 0) { + if (token != tok.end()) { std::cerr << command << ": warning: ignoring trailing garbage \"" - << save_ptr << "\" in argument to \"--contrast-edge-scale\"" << endl; + << *token << "\" in argument to \"--contrast-edge-scale\"" << endl; } - delete [] s; optionSet.insert(EdgeScaleOption); break; } case EntropyCutoffId: { - char* s = new char[strlen(optarg) + 1]; - strcpy(s, optarg); - char* save_ptr = NULL; - char* token = enblend::strtoken_r(s, NUMERIC_OPTION_DELIMITERS, &save_ptr); char* tail; + boost::char_separator sep(NUMERIC_OPTION_DELIMITERS, "", boost::keep_empty_tokens); + const std::string arg(optarg); + boost::tokenizer > tok(arg, sep); + boost::tokenizer >::iterator token = tok.begin(); - if (token == NULL || *token == 0) { + if (token == tok.end()) { std::cerr << command << ": no scale given to \"--entropy-cutoff\". " << "lower cutoff is required." << endl; failed = true; } else { errno = 0; - EntropyLowerCutoff.set_value(strtod(token, &tail)); + EntropyLowerCutoff.set_value(strtod(token->c_str(), &tail)); if (errno == 0) { if (*tail == 0) { EntropyLowerCutoff.set_percentage(false); @@ -1048,21 +1110,21 @@ EntropyLowerCutoff.set_percentage(true); } else { std::cerr << command << ": unrecognized entropy's lower cutoff \"" - << tail << "\" in \"" << token << "\"" << endl; + << tail << "\" in \"" << *token << "\"" << endl; failed = true; } } else { std::cerr << command << ": illegal numeric format \"" - << token << "\" of entropy's lower cutoff: " + << *token << "\" of entropy's lower cutoff: " << enblend::errorMessage(errno) << endl; failed = true; } + ++token; } - token = enblend::strtoken_r(NULL, NUMERIC_OPTION_DELIMITERS, &save_ptr); - if (token != NULL && *token != 0) { + if (token != tok.end()) { errno = 0; - EntropyUpperCutoff.set_value(strtod(token, &tail)); + EntropyUpperCutoff.set_value(strtod(token->c_str(), &tail)); if (errno == 0) { if (*tail == 0) { EntropyUpperCutoff.set_percentage(false); @@ -1070,41 +1132,40 @@ EntropyUpperCutoff.set_percentage(true); } else { std::cerr << command << ": unrecognized entropy's upper cutoff \"" - << tail << "\" in \"" << token << "\"" << endl; + << tail << "\" in \"" << *token << "\"" << endl; failed = true; } } else { std::cerr << command << ": illegal numeric format \"" - << token << "\" of entropy's upper cutoff: " + << *token << "\" of entropy's upper cutoff: " << enblend::errorMessage(errno) << endl; failed = true; } } - if (save_ptr != NULL && *save_ptr != 0) { + if (token != tok.end()) { std::cerr << command << ": warning: ignoring trailing garbage \"" - << save_ptr << "\" in argument to \"--entropy-cutoff\"" << endl; + << *token << "\" in argument to \"--entropy-cutoff\"" << endl; } - delete [] s; optionSet.insert(EntropyCutoffOption); break; } case ExposureCutoffId: { - char* s = new char[strlen(optarg) + 1]; - strcpy(s, optarg); - char* save_ptr = NULL; - char* token = enblend::strtoken_r(s, NUMERIC_OPTION_DELIMITERS, &save_ptr); char* tail; + boost::char_separator sep(NUMERIC_OPTION_DELIMITERS, "", boost::keep_empty_tokens); + const std::string arg(optarg); + boost::tokenizer > tok(arg, sep); + boost::tokenizer >::iterator token = tok.begin(); - if (token == NULL || *token == 0) { + if (token == tok.end()) { std::cerr << command << ": no scale given to \"--exposure-cutoff\". " << "lower cutoff is required." << endl; failed = true; } else { errno = 0; - ExposureLowerCutoff.set_value(strtod(token, &tail)); + ExposureLowerCutoff.set_value(strtod(token->c_str(), &tail)); if (errno == 0) { if (*tail == 0) { ExposureLowerCutoff.set_percentage(false); @@ -1112,21 +1173,21 @@ ExposureLowerCutoff.set_percentage(true); } else { std::cerr << command << ": unrecognized exposure's lower cutoff \"" - << tail << "\" in \"" << token << "\"" << endl; + << tail << "\" in \"" << *token << "\"" << endl; failed = true; } } else { std::cerr << command << ": illegal numeric format \"" - << token << "\" of exposure's lower cutoff: " + << *token << "\" of exposure's lower cutoff: " << enblend::errorMessage(errno) << endl; failed = true; } + ++token; } - token = enblend::strtoken_r(NULL, NUMERIC_OPTION_DELIMITERS, &save_ptr); - if (token != NULL && *token != 0) { + if (token != tok.end()) { errno = 0; - ExposureUpperCutoff.set_value(strtod(token, &tail)); + ExposureUpperCutoff.set_value(strtod(token->c_str(), &tail)); if (errno == 0) { if (*tail == 0) { ExposureUpperCutoff.set_percentage(false); @@ -1134,33 +1195,33 @@ ExposureUpperCutoff.set_percentage(true); } else { std::cerr << command << ": unrecognized exposure's upper cutoff \"" - << tail << "\" in \"" << token << "\"" << endl; + << tail << "\" in \"" << *token << "\"" << endl; failed = true; } } else { std::cerr << command << ": illegal numeric format \"" - << token << "\" of exposure's upper cutoff: " + << *token << "\" of exposure's upper cutoff: " << enblend::errorMessage(errno) << endl; failed = true; } + ++token; } - token = enblend::strtoken_r(NULL, NUMERIC_OPTION_DELIMITERS, &save_ptr); - if (token != NULL && *token != 0) { - ExposureLowerCutoffGrayscaleProjector = token; + if (token != tok.end()) { + ExposureLowerCutoffGrayscaleProjector = *token; + ++token; } - token = enblend::strtoken_r(NULL, NUMERIC_OPTION_DELIMITERS, &save_ptr); - if (token != NULL && *token != 0) { - ExposureUpperCutoffGrayscaleProjector = token; + if (token != tok.end()) { + ExposureUpperCutoffGrayscaleProjector = *token; + ++token; } - if (save_ptr != NULL && *save_ptr != 0) { + if (token != tok.end()) { std::cerr << command << ": warning: ignoring trailing garbage \"" - << save_ptr << "\" in argument to \"--exposure-cutoff\"" << endl; + << *token << "\" in argument to \"--exposure-cutoff\"" << endl; } - delete [] s; optionSet.insert(ExposureCutoffOption); break; } @@ -1422,14 +1483,39 @@ optionSet.insert(BlockSizeOption); break; + case BlendColorspaceId: + if (optarg != NULL && *optarg != 0) { + std::string name(optarg); + boost::algorithm::to_upper(name); + if (name == "IDENTITY" || name == "ID" || name == "UNIT") { + BlendColorspace = IdentitySpace; + } else if (name == "CIECAM" || name == "CIECAM02" || name == "JCH") { + BlendColorspace = CIECAM; + } else { + std::cerr << command << + ": unrecognized argument \"" << optarg << "\" of option \"--blend-colorspace\"" << + std::endl; + failed = true; + } + } else { + std::cerr << command << ": option \"--blend-colorspace\" requires an argument" << std::endl; + failed = true; + } + optionSet.insert(BlendColorspaceOption); + break; + case 'c': // FALLTHROUGH case CiecamId: - UseCIECAM = true; + std::cerr << + command << ": info: prefer option \"--blend-colorspace\" to \"--ciecam\"" << std::endl; + BlendColorspace = CIECAM; optionSet.insert(CIECAM02Option); break; case NoCiecamId: - UseCIECAM = false; + std::cerr << + command << ": info: prefer option \"--blend-colorspace\" to \"--no-ciecam\"" << std::endl; + BlendColorspace = IdentitySpace; optionSet.insert(NoCIECAM02Option); break; @@ -1534,21 +1620,21 @@ } case ParameterId: { - boost::scoped_ptr s(new char[strlen(optarg) + 1]); - strcpy(s.get(), optarg); - char* save_ptr = NULL; - char* token = strtok_r(s.get(), NUMERIC_OPTION_DELIMITERS, &save_ptr); + boost::char_separator sep(NUMERIC_OPTION_DELIMITERS, "", boost::keep_empty_tokens); + const std::string arg(optarg); + boost::tokenizer > tok(arg, sep); + boost::tokenizer >::iterator token = tok.begin(); - while (token != NULL) { + while (token != tok.end()) { std::string key; std::string value; - char* delimiter = strpbrk(token, ASSIGNMENT_CHARACTERS); + size_t delimiter = token->find_first_of(ASSIGNMENT_CHARACTERS); - if (delimiter == NULL) { - key = token; + if (delimiter == std::string::npos) { + key = *token; } else { - key = std::string(token, delimiter); - value = delimiter + 1; + key = token->substr(0, delimiter); + value = token->substr(delimiter + 1); } boost::trim(key); boost::trim(value); @@ -1556,24 +1642,24 @@ if (enblend::parameter::is_valid_identifier(key)) { Parameter.insert(parameter_map::value_type(key, ParameterValue(value))); } else { - std::cerr << command << ": warning: key \"" << key << "\" of pair \"" << token << + std::cerr << command << ": warning: key \"" << key << "\" of pair \"" << *token << "\" is not a valid identifier; ignoring\n"; } - token = strtok_r(NULL, NUMERIC_OPTION_DELIMITERS, &save_ptr); + ++token; } break; } case NoParameterId: { - boost::scoped_ptr s(new char[strlen(optarg) + 1]); - strcpy(s.get(), optarg); - char* save_ptr = NULL; - char* token = strtok_r(s.get(), NUMERIC_OPTION_DELIMITERS, &save_ptr); + boost::char_separator sep(NUMERIC_OPTION_DELIMITERS, "", boost::keep_empty_tokens); + const std::string arg(optarg); + boost::tokenizer > tok(arg, sep); + boost::tokenizer >::iterator token = tok.begin(); - while (token != NULL) { - std::string key(token); + while (token != tok.end()) { + std::string key(*token); boost::trim(key); if (key == "*") { @@ -1585,39 +1671,50 @@ "\" is not a valid identifier; ignoring\n"; } - token = strtok_r(NULL, NUMERIC_OPTION_DELIMITERS, &save_ptr); + ++token; } break; } case '?': - switch (optopt) { - case 0: // unknown long option - std::cerr << command << ": unknown option \"" << argv[optind - 1] << "\"\n"; - break; - case 'b': // FALLTHROUGH - case 'd': // FALLTHROUGH - case 'f': // FALLTHROUGH - case 'l': // FALLTHROUGH - case 'm': // FALLTHROUGH - case 'o': - std::cerr << command - << ": option \"-" << static_cast(optopt) << "\" requires an argument" - << endl; - break; + { + if (optopt == 0) { + const int failing_index = optind - 1; - default: - std::cerr << command << ": unknown option "; - if (isprint(optopt)) { - std::cerr << "\"-" << static_cast(optopt) << "\""; + std::cerr << command << ": unknown long option"; + if (failing_index >= 0 && failing_index < argc) { + std::cerr << " \"" << argv[failing_index] << "\""; + } + std::cerr << std::endl; + } else { + const struct option* failing_long_option = lookup_long_option_by_id(long_options, optopt); + + if (failing_long_option == NULL) { + if (short_option_requires_argument(short_options, optopt)) { + std::cerr << command + << ": option \"-" << static_cast(optopt) << "\" requires an argument" + << std::endl; + } else { + std::cerr << command << ": unknown option "; + if (isprint(optopt)) { + std::cerr << "\"-" << static_cast(optopt) << "\""; + } else { + std::cerr << "character 0x" << std::hex << optopt; + } + std::cerr << std::endl; + } } else { - std::cerr << "character 0x" << std::hex << optopt; + assert(failing_long_option->has_arg == required_argument); + std::cerr << command + << ": option \"--" << failing_long_option->name << "\" requires an argument" + << std::endl; } - std::cerr << endl; } - std::cerr << "Try \"enfuse --help\" for more information." << endl; + + std::cerr << "Try \"enfuse --help\" for more information." << std::endl; exit(1); + } default: std::cerr << command @@ -1673,6 +1770,7 @@ struct sigaction action; action.sa_handler = sigint_handler; + action.sa_flags = 0; sigemptyset(&(action.sa_mask)); sigaction(SIGINT, &action, NULL); #else @@ -1738,6 +1836,20 @@ i->unroll_trace(); exit(1); } + + if (!vigra::isImage(i->filename().c_str())) { + std::cerr << + command << ": cannot process \"" << i->filename() << "\"; not recognized as an image\n" << + command << ": info: possible causes:\n" << + command << ": info: - An underlying image-processing library does not understand the\n" << + command << ": info: particular compression, sub-format, format extension, ...\n" << + command << ": info: - Enfuse was not compiled with support for this format, which\n" << + command << ": info: can be checked with \"" << command << " --show-image-formats\".\n" << + command << ": info: - The image is corrupted or it is incomplete/truncated.\n" << + command << ": info: - It really is not an image. Honesty, huh?\n"; + i->unroll_trace(); + exit(1); + } } LayerSelection.retrieve_image_information(inputTraceableFileNameList.begin(), @@ -1916,25 +2028,28 @@ } } - std::cerr << endl << command << ": warning: input image \"" - << inputFileNameIterator->filename() - << "\"" << enblend::optional_layer_name(layer, layers) << "\n"; - inputFileNameIterator->unroll_trace(); - std::cerr << command << ": warning: has "; - if (newProfile) { - std::cerr << "ICC profile \"" << enblend::profileDescription(newProfile) << "\",\n"; - } else { - std::cerr << "no ICC profile,\n"; - } - std::cerr << command << ": warning: but first image has "; - if (InputProfile) { - std::cerr << "ICC profile \"" << enblend::profileDescription(InputProfile) << "\";\n"; - } else { - std::cerr << "no ICC profile;\n"; + if (InputProfile == NULL || newProfile == NULL || + enblend::profileDescription(InputProfile) != enblend::profileDescription(newProfile)) { + std::cerr << endl << command << ": warning: input image \"" + << inputFileNameIterator->filename() + << "\"" << enblend::optional_layer_name(layer, layers) << "\n"; + inputFileNameIterator->unroll_trace(); + std::cerr << command << ": warning: has "; + if (newProfile) { + std::cerr << "ICC profile \"" << enblend::profileDescription(newProfile) << "\",\n"; + } else { + std::cerr << "no ICC profile,\n"; + } + std::cerr << command << ": warning: but first image has "; + if (InputProfile) { + std::cerr << "ICC profile \"" << enblend::profileDescription(InputProfile) << "\";\n"; + } else { + std::cerr << "no ICC profile;\n"; + } + std::cerr << command << ": warning: blending images with different color spaces\n" + << command << ": warning: may have unexpected results" + << endl; } - std::cerr << command << ": warning: blending images with different color spaces\n" - << command << ": warning: may have unexpected results" - << endl; } } } else { @@ -2041,8 +2156,17 @@ // Set the output image ICC profile outputImageInfo.setICCProfile(iccProfile); - if (UseCIECAM == true || (boost::indeterminate(UseCIECAM) && !iccProfile.empty())) { - UseCIECAM = true; + if (BlendColorspace == UndeterminedColorspace && + !(iccProfile.empty() || enblend::isFloatingPoint(pixelType))) { + BlendColorspace = CIECAM; + } + + if (BlendColorspace == CIECAM || BlendColorspace == CIELAB || BlendColorspace == CIELUV) { + if (enblend::isFloatingPoint(pixelType)) { + std::cerr << command << + ": warning: blend color space for floating-point images is not \"identity\"" << std::endl; + } + if (InputProfile == NULL) { std::cerr << command << ": warning: input images do not have ICC profiles;\n"; if (FallbackProfile == NULL) { @@ -2057,7 +2181,10 @@ } XYZProfile = cmsCreateXYZProfile(); - InputToXYZTransform = cmsCreateTransform(InputProfile, TYPE_RGB_DBL, + const unsigned input_profile_type = + enblend::profileChannels(InputProfile) > 1 ? TYPE_RGB_DBL : TYPE_GRAY_DBL; + + InputToXYZTransform = cmsCreateTransform(InputProfile, input_profile_type, XYZProfile, TYPE_XYZ_DBL, RENDERING_INTENT_FOR_BLENDING, TRANSFORMATION_FLAGS_FOR_BLENDING); @@ -2071,7 +2198,7 @@ } XYZToInputTransform = cmsCreateTransform(XYZProfile, TYPE_XYZ_DBL, - InputProfile, TYPE_RGB_DBL, + InputProfile, input_profile_type, RENDERING_INTENT_FOR_BLENDING, TRANSFORMATION_FLAGS_FOR_BLENDING); if (XYZToInputTransform == NULL) { @@ -2123,8 +2250,8 @@ << endl; } } - LabProfile = cmsCreateLab2Profile(cmsD50_xyY()); - InputToLabTransform = cmsCreateTransform(InputProfile, TYPE_RGB_DBL, + LabProfile = cmsCreateLab2Profile(&white_point); + InputToLabTransform = cmsCreateTransform(InputProfile, input_profile_type, LabProfile, TYPE_Lab_DBL, RENDERING_INTENT_FOR_BLENDING, TRANSFORMATION_FLAGS_FOR_BLENDING); @@ -2137,7 +2264,7 @@ exit(1); } LabToInputTransform = cmsCreateTransform(LabProfile, TYPE_Lab_DBL, - InputProfile, TYPE_RGB_DBL, + InputProfile, input_profile_type, RENDERING_INTENT_FOR_BLENDING, TRANSFORMATION_FLAGS_FOR_BLENDING); if (!LabToInputTransform) { @@ -2152,7 +2279,7 @@ } else { if (FallbackProfile != NULL) { std::cerr << command << - ": warning: fusing in RGB cube; option \"--fallback-profile\" has no effect" << + ": warning: fusing in identity space; option \"--fallback-profile\" has no effect" << endl; } } diff -Nru enblend-enfuse-4.1.3+dfsg/src/enfuse.h enblend-enfuse-4.1.4+dfsg/src/enfuse.h --- enblend-enfuse-4.1.3+dfsg/src/enfuse.h 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/enfuse.h 2015-08-07 14:45:05.000000000 +0000 @@ -1,5 +1,6 @@ /* - * Copyright (C) 2004-2014 Andrew Mihal + * Copyright (C) 2004-2009 Andrew Mihal + * Copyright (C) 2009-2015 Christoph Spiel * * This file is part of Enblend. * @@ -93,10 +94,6 @@ { typedef typename vigra::NumericTraits::RealPromote SrcSumType; typedef vigra::NumericTraits DestTraits; - typedef typename SrcIterator::PixelType SrcPixelType; - typedef typename SrcIterator::row_iterator SrcRowIterator; - typedef typename MaskIterator::row_iterator MaskRowIterator; - typedef typename DestIterator::PixelType DestPixelType; typedef ScratchPad ScratchPadType; typedef std::vector ScratchPadArray; typedef typename ScratchPadArray::iterator ScratchPadArrayIterator; @@ -478,10 +475,7 @@ DestIterator dest_ul, DestAccessor dest_acc, vigra::Size2D size) { - typedef vigra::NumericTraits DestTraits; typedef typename SrcIterator::PixelType SrcPixelType; - typedef typename SrcIterator::row_iterator SrcRowIterator; - typedef typename MaskIterator::row_iterator MaskRowIterator; typedef typename DestIterator::PixelType DestPixelType; typedef Histogram ScratchPadType; @@ -1035,7 +1029,6 @@ if (WContrast > 0.0) { typedef typename vigra::NumericTraits::Promote LongScalarType; typedef IMAGETYPE GradImage; - typedef typename GradImage::iterator GradIterator; GradImage grad(imageSize); MultiGrayscaleAccessor ga(GrayscaleProjector); @@ -1213,11 +1206,9 @@ { typedef typename EnblendNumericTraits::ImagePixelComponentType ImagePixelComponentType; typedef typename EnblendNumericTraits::ImageType ImageType; - typedef typename EnblendNumericTraits::AlphaPixelType AlphaPixelType; typedef typename EnblendNumericTraits::AlphaType AlphaType; typedef IMAGETYPE MaskType; typedef typename MaskType::value_type MaskPixelType; - typedef typename EnblendNumericTraits::ImagePyramidPixelType ImagePyramidPixelType; typedef typename EnblendNumericTraits::ImagePyramidType ImagePyramidType; typedef typename EnblendNumericTraits::MaskPyramidPixelType MaskPyramidPixelType; typedef typename EnblendNumericTraits::MaskPyramidType MaskPyramidType; diff -Nru enblend-enfuse-4.1.3+dfsg/src/error_message.cc enblend-enfuse-4.1.4+dfsg/src/error_message.cc --- enblend-enfuse-4.1.3+dfsg/src/error_message.cc 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/error_message.cc 2015-08-07 14:43:46.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014 Dr. Christoph L. Spiel + * Copyright (C) 2009-2015 Dr. Christoph L. Spiel * * This file is part of Enblend. * @@ -22,8 +22,6 @@ #include #include -#include - #ifdef HAVE_CONFIG_H #include #endif @@ -47,24 +45,27 @@ std::string errorMessage(int anErrorNumber) { -#if defined(HAVE_STRERROR) || defined(HAVE_STRERROR_R) - char* message; - int return_code; -#if defined(HAVE_STRERROR_R) +#if !defined(HAVE_STRERROR) && !defined(HAVE_STRERROR_R) + return detail::noErrorMessageAvailable(anErrorNumber); +#endif + +#if !defined(HAVE_STRERROR_R) + std::string message(strerror(anErrorNumber)); +#else const size_t buffer_size = 65536; - boost::scoped_ptr message_buffer(new char[buffer_size]); + std::string message(buffer_size, '\0'); #if defined(STRERROR_R_CHAR_P) - message = strerror_r(anErrorNumber, message_buffer.get(), buffer_size); - return_code = 0; + char* messageptr = strerror_r(anErrorNumber, &message[0], buffer_size); + if (messageptr != &message[0]) + { + message = std::string(messageptr); + } + else + { + message.resize(message.find('\0')); + } #else - message = message_buffer.get(); - return_code = strerror_r(anErrorNumber, message, buffer_size); -#endif // STRERROR_R_CHAR_P -#elif defined(HAVE_STRERROR) - message = strerror(anErrorNumber); - return_code = 0; -#endif // HAVE_STRERROR_R, HAVE_STRERROR - + int return_code = strerror_r(anErrorNumber, &message[0], buffer_size); if (return_code != 0) { std::ostringstream oss; @@ -73,17 +74,18 @@ " to an error message failed with decimal return code " << return_code; return oss.str(); } - else if (strlen(message) == 0) +#endif // STRERROR_R_CHAR_P +#endif // HAVE_STRERROR_R + + if (message.length() == 0) { return detail::noErrorMessageAvailable(anErrorNumber); } else { - return std::string(message); + return message; } -#else - return detail::noErrorMessageAvailable(anErrorNumber); -#endif // HAVE_STRERROR || HAVE_STRERROR_R } } + diff -Nru enblend-enfuse-4.1.3+dfsg/src/error_message.h enblend-enfuse-4.1.4+dfsg/src/error_message.h --- enblend-enfuse-4.1.3+dfsg/src/error_message.h 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/error_message.h 2015-08-07 12:47:33.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014 Dr. Christoph L. Spiel + * Copyright (C) 2009-2015 Dr. Christoph L. Spiel * * This file is part of Enblend. * diff -Nru enblend-enfuse-4.1.3+dfsg/src/filenameparse.cc enblend-enfuse-4.1.4+dfsg/src/filenameparse.cc --- enblend-enfuse-4.1.3+dfsg/src/filenameparse.cc 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/filenameparse.cc 2015-08-07 12:47:33.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014 Dr. Christoph L. Spiel + * Copyright (C) 2009-2015 Dr. Christoph L. Spiel * * This file is part of Enblend. * diff -Nru enblend-enfuse-4.1.3+dfsg/src/filenameparse.h enblend-enfuse-4.1.4+dfsg/src/filenameparse.h --- enblend-enfuse-4.1.3+dfsg/src/filenameparse.h 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/filenameparse.h 2015-08-07 12:47:33.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014 Dr. Christoph L. Spiel + * Copyright (C) 2009-2015 Dr. Christoph L. Spiel * * This file is part of Enblend. * diff -Nru enblend-enfuse-4.1.3+dfsg/src/filespec.cc enblend-enfuse-4.1.4+dfsg/src/filespec.cc --- enblend-enfuse-4.1.3+dfsg/src/filespec.cc 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/filespec.cc 2015-08-07 14:45:02.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014 Christoph L. Spiel + * Copyright (C) 2009-2015 Christoph L. Spiel * * This file is part of Enblend. * @@ -706,6 +706,7 @@ trace_info.file_position.push_front(std::make_pair(response_filepath, line_number)); ++trace_info.nesting_level; unfold_filename_iter(partial_result, trace_info, line); + --trace_info.nesting_level; for (TraceableFileNameList::const_iterator p = partial_result.begin(); p != partial_result.end(); diff -Nru enblend-enfuse-4.1.3+dfsg/src/filespec.h enblend-enfuse-4.1.4+dfsg/src/filespec.h --- enblend-enfuse-4.1.3+dfsg/src/filespec.h 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/filespec.h 2015-08-07 12:47:33.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014 Christoph L. Spiel + * Copyright (C) 2009-2015 Christoph L. Spiel * * This file is part of Enblend. * diff -Nru enblend-enfuse-4.1.3+dfsg/src/fixmath.h enblend-enfuse-4.1.4+dfsg/src/fixmath.h --- enblend-enfuse-4.1.3+dfsg/src/fixmath.h 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/fixmath.h 2015-08-07 14:44:53.000000000 +0000 @@ -1,5 +1,6 @@ /* - * Copyright (C) 2004-2014 Andrew Mihal + * Copyright (C) 2004-2009 Andrew Mihal + * Copyright (C) 2009-2015 Christoph Spiel * * This file is part of Enblend. * @@ -896,7 +897,16 @@ typedef typename SrcImageType::value_type SrcVectorType; typedef typename PyramidImageType::value_type PyramidVectorType; - if (UseCIECAM) { + switch (BlendColorspace) + { + case UndeterminedColorspace: + case IdentitySpace: + transformImageMP(src_upperleft, src_lowerright, sa, + dest_upperleft, da, + ConvertVectorToPyramidFunctor()); + break; + + default: if (Verbose >= VERBOSE_COLOR_CONVERSION_MESSAGES) { cerr << command << ": info: CIECAM02 color conversion"; if (!enblend::profileName(InputProfile).empty()) { @@ -907,10 +917,6 @@ transformImageMP(src_upperleft, src_lowerright, sa, dest_upperleft, da, ConvertVectorToJCHPyramidFunctor()); - } else { - transformImageMP(src_upperleft, src_lowerright, sa, - dest_upperleft, da, - ConvertVectorToPyramidFunctor()); } } @@ -990,7 +996,19 @@ typedef typename DestImageType::value_type DestVectorType; typedef typename PyramidImageType::value_type PyramidVectorType; - if (UseCIECAM) { + switch (BlendColorspace) + { + case UndeterminedColorspace: + case IdentitySpace: + // OpenMP changes the result here! The maximum absolute + // difference is 1 of 255 for 8-bit images. -- cls + transformImageIfMP(src_upperleft, src_lowerright, sa, + mask_upperleft, ma, + dest_upperleft, da, + ConvertPyramidToVectorFunctor()); + break; + + default: if (Verbose >= VERBOSE_COLOR_CONVERSION_MESSAGES) { cerr << command << ": info: CIECAM02 color conversion" << endl; } @@ -998,13 +1016,6 @@ mask_upperleft, ma, dest_upperleft, da, ConvertJCHPyramidToVectorFunctor()); - } else { - // OpenMP changes the result here! The maximum absolute - // difference is 1 of 255 for 8-bit images. -- cls - transformImageIfMP(src_upperleft, src_lowerright, sa, - mask_upperleft, ma, - dest_upperleft, da, - ConvertPyramidToVectorFunctor()); } } diff -Nru enblend-enfuse-4.1.3+dfsg/src/gen_sig enblend-enfuse-4.1.4+dfsg/src/gen_sig --- enblend-enfuse-4.1.3+dfsg/src/gen_sig 2013-01-01 09:45:47.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/gen_sig 2015-08-07 14:43:37.000000000 +0000 @@ -70,7 +70,7 @@ void check() const { -#if DEBUG_SIGNATURE_CHECK +#ifdef DEBUG_SIGNATURE_CHECK if (checksum_ != ~neg_checksum_) { std::cerr << diff -Nru enblend-enfuse-4.1.3+dfsg/src/global.h enblend-enfuse-4.1.4+dfsg/src/global.h --- enblend-enfuse-4.1.3+dfsg/src/global.h 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/global.h 2015-08-07 14:44:45.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014 Dr. Christoph L. Spiel + * Copyright (C) 2009-2015 Dr. Christoph L. Spiel * * This file is part of Enblend. * @@ -147,6 +147,16 @@ NFT, GraphCut }; +// Colorspaces available for pyramidal blending operations +typedef enum +{ + UndeterminedColorspace, // explicit `not-a-colorspace' value + IdentitySpace, // (1d) luminance interval for grayscale images and (3d) RGB-cube for RGB-images + CIELAB, // UNAVAILABLE + CIELUV, // UNAVAILABLE + CIECAM +} blend_colorspace_t; + //< src::default-tiff-resolution 300@dmn{dpi} @@ -274,7 +284,7 @@ { char* end; errno = 0; - const int i = strtol(value_as_string.c_str(), &end, 10); + const int i = static_cast(strtol(value_as_string.c_str(), &end, 10)); if (errno == 0 && *end == 0) { integer = new int; @@ -286,7 +296,7 @@ { char* end; errno = 0; - const unsigned u = strtoul(value_as_string.c_str(), &end, 10); + const unsigned u = static_cast(strtoul(value_as_string.c_str(), &end, 10)); if (errno == 0 && *end == 0) { unsigned_integer = new unsigned; diff -Nru enblend-enfuse-4.1.3+dfsg/src/gpu.cc enblend-enfuse-4.1.4+dfsg/src/gpu.cc --- enblend-enfuse-4.1.3+dfsg/src/gpu.cc 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/gpu.cc 2015-08-07 12:47:33.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2014 Andrew Mihal + * Copyright (C) 2004-2015 Andrew Mihal * * This file is part of Enblend. * diff -Nru enblend-enfuse-4.1.3+dfsg/src/gpu.h enblend-enfuse-4.1.4+dfsg/src/gpu.h --- enblend-enfuse-4.1.3+dfsg/src/gpu.h 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/gpu.h 2015-08-07 12:47:33.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2014 Andrew Mihal + * Copyright (C) 2004-2015 Andrew Mihal * * This file is part of Enblend. * diff -Nru enblend-enfuse-4.1.3+dfsg/src/graphcut.h enblend-enfuse-4.1.4+dfsg/src/graphcut.h --- enblend-enfuse-4.1.3+dfsg/src/graphcut.h 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/graphcut.h 2015-08-07 14:45:05.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011-2014 Mikolaj Leszczynski + * Copyright (C) 2011-2015 Mikolaj Leszczynski * * This file is part of Enblend. * @@ -34,7 +34,6 @@ #include #include -#include #include #include @@ -728,7 +727,10 @@ ++currentDual) { current = convertFromDual(*currentDual); - next = convertFromDual(*nextDual); + + if (nextDual != cut->end()) { + next = convertFromDual(*nextDual); + } if (currentDual == cut->begin()) { ++nextDual; @@ -1301,7 +1303,6 @@ typedef vigra::UInt8 BasePixelType; typedef float GradientPixelType; typedef vigra::NumericTraits BasePixelTraits; - typedef vigra::NumericTraits GradientPixelTraits; typedef typename BasePixelTraits::Promote BasePromotePixelType; typedef vigra::NumericTraits BasePromotePixelTraits; typedef typename BasePromotePixelTraits::Promote GraphPixelType; @@ -1323,7 +1324,7 @@ std::vector* dualPath = NULL; std::vector totalDualPath; vigra::Point2D intermediatePoint; - boost::scoped_ptr srcDestPoints(new CheckpointPixels()); + CheckpointPixels srcDestPoints; const vigra::Diff2D graphsize(graphImg.lowerRight().x - graphImg.upperLeft().x, graphImg.lowerRight().y - graphImg.upperLeft().y); @@ -1432,9 +1433,9 @@ continue; } - srcDestPoints->clear(); - srcDestPoints->top.insert(intermediatePoint); - srcDestPoints->bottom.insert(*i); + srcDestPoints.clear(); + srcDestPoints.top.insert(intermediatePoint); + srcDestPoints.bottom.insert(*i); #ifdef DEBUG_GRAPHCUT std::cout << "Running graph-cut: " << intermediatePoint << ":" << *i << std::endl; @@ -1442,7 +1443,7 @@ dualPath = A_star, IMAGETYPE, BasePixelType> (vigra::Point2D(-10, -10), vigra::Point2D(-20, -20), &intermediateGraphImg, &gradientX, - &gradientY, graphsize - vigra::Diff2D(1, 1), srcDestPoints.get(), &visited); + &gradientY, graphsize - vigra::Diff2D(1, 1), &srcDestPoints, &visited); visited.insert(dualPath->begin(), dualPath->end()); diff -Nru enblend-enfuse-4.1.3+dfsg/src/layer_selection/info.h enblend-enfuse-4.1.4+dfsg/src/layer_selection/info.h --- enblend-enfuse-4.1.3+dfsg/src/layer_selection/info.h 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/layer_selection/info.h 2015-08-07 14:43:37.000000000 +0000 @@ -58,13 +58,13 @@ typedef std::vector layer_list; public: - ImageInfo(const std::string& a_filename) : filename_(a_filename) {}; + ImageInfo(const std::string& a_filename) : filename_(a_filename) {} const std::string& filename() const {return filename_;} const LayerInfo* layer(unsigned a_layer_index) const {return &layers_[a_layer_index];} void append(const LayerInfo& an_info) {layers_.push_back(an_info);} - unsigned number_of_layers() const {return layers_.size();} + unsigned number_of_layers() const {return static_cast(layers_.size());} private: /* const */ std::string filename_; @@ -84,7 +84,7 @@ void append(const ImageInfo& an_info) {images_.push_back(an_info);} - unsigned number_of_images() const {return images_.size();} + unsigned number_of_images() const {return static_cast(images_.size());} const ImageInfo* image_info_on(const std::string& a_filename) const; const LayerInfo* layer_info_on(const std::string& a_filename, unsigned a_layer_index) const; diff -Nru enblend-enfuse-4.1.3+dfsg/src/layer_selection/Makefile.in enblend-enfuse-4.1.4+dfsg/src/layer_selection/Makefile.in --- enblend-enfuse-4.1.3+dfsg/src/layer_selection/Makefile.in 2014-03-22 12:47:04.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/layer_selection/Makefile.in 2015-10-03 11:18:55.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -79,8 +89,6 @@ build_triplet = @build@ host_triplet = @host@ subdir = src/layer_selection -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_gl.m4 \ $(top_srcdir)/m4/ax_check_glu.m4 \ @@ -90,15 +98,15 @@ $(top_srcdir)/m4/ax_prog_perl_modules.m4 \ $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/ax_with_prog.m4 $(top_srcdir)/m4/lrint.m4 \ - $(top_srcdir)/m4/lrintf.m4 $(top_srcdir)/configure.in + $(top_srcdir)/m4/lrintf.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) -AR = ar ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) @@ -181,12 +189,14 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_MAKEINFOFLAGS = @AM_MAKEINFOFLAGS@ AM_MAKEINFOHTMLFLAGS = @AM_MAKEINFOHTMLFLAGS@ +AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -271,6 +281,7 @@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ @@ -311,6 +322,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -348,7 +360,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/layer_selection/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/layer_selection/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -641,6 +652,8 @@ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru enblend-enfuse-4.1.3+dfsg/src/Makefile.in enblend-enfuse-4.1.4+dfsg/src/Makefile.in --- enblend-enfuse-4.1.3+dfsg/src/Makefile.in 2014-03-22 12:47:04.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/Makefile.in 2015-10-03 11:18:55.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -80,8 +90,6 @@ host_triplet = @host@ bin_PROGRAMS = enblend$(EXEEXT) enfuse$(EXEEXT) subdir = src -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_gl.m4 \ $(top_srcdir)/m4/ax_check_glu.m4 \ @@ -91,9 +99,10 @@ $(top_srcdir)/m4/ax_prog_perl_modules.m4 \ $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/ax_with_prog.m4 $(top_srcdir)/m4/lrint.m4 \ - $(top_srcdir)/m4/lrintf.m4 $(top_srcdir)/configure.in + $(top_srcdir)/m4/lrintf.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -236,6 +245,7 @@ ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ @@ -267,6 +277,7 @@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_MAKEINFOFLAGS = @AM_MAKEINFOFLAGS@ AM_MAKEINFOHTMLFLAGS = @AM_MAKEINFOHTMLFLAGS@ +AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -351,6 +362,7 @@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ @@ -391,6 +403,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -471,7 +484,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -1085,6 +1097,8 @@ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \ uninstall-man uninstall-man1 +.PRECIOUS: Makefile + signature.h: $(srcdir)/gen_sig $(srcdir)/DefaultSig.pm $(srcdir)/Sig.pm @ $(PERL) -I$(srcdir) $< --extra=$(VERSION) > $@ diff -Nru enblend-enfuse-4.1.3+dfsg/src/maskcommon.h enblend-enfuse-4.1.4+dfsg/src/maskcommon.h --- enblend-enfuse-4.1.3+dfsg/src/maskcommon.h 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/maskcommon.h 2015-08-07 12:47:33.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2014 Andrew Mihal, Mikolaj Leszczynski + * Copyright (C) 2004-2015 Andrew Mihal, Mikolaj Leszczynski * * This file is part of Enblend. * diff -Nru enblend-enfuse-4.1.3+dfsg/src/mask.h enblend-enfuse-4.1.4+dfsg/src/mask.h --- enblend-enfuse-4.1.3+dfsg/src/mask.h 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/mask.h 2015-08-07 14:45:05.000000000 +0000 @@ -1,5 +1,6 @@ /* - * Copyright (C) 2004-2014 Andrew Mihal + * Copyright (C) 2004-2009 Andrew Mihal + * Copyright (C) 2009-2015 Christoph Spiel * * This file is part of Enblend. * @@ -513,7 +514,6 @@ { typedef typename MaskType::PixelType MaskPixelType; typedef typename MaskType::traverser MaskIteratorType; - typedef typename MaskType::Accessor MaskAccessor; // Find the bounding box of the mask transition line and put it in mBB. // mBB starts out as empty rectangle. @@ -890,6 +890,16 @@ } +inline static int +round_to_nearest_div(int a_numerator, int a_denominator) +{ + const std::div_t result(std::div(a_numerator, a_denominator)); + const int rem2 = 2 * result.rem; + + return rem2 >= a_denominator ? result.quot + 1 : (-rem2 >= a_denominator ? result.quot - 1 : result.quot); +} + + /** Calculate a blending mask between whiteImage and blackImage. */ template @@ -906,8 +916,6 @@ { typedef typename ImageType::PixelType ImagePixelType; typedef typename MaskType::PixelType MaskPixelType; - typedef typename MaskType::traverser MaskIteratorType; - typedef typename MaskType::Accessor MaskAccessor; if (LoadMasks) { // Read mask from a file instead of calculating it. @@ -1285,21 +1293,22 @@ int segmentNumber; // Move snake points to mismatchImage-relative coordinates for (ContourVector::iterator currentContour = contours.begin(); - currentContour != contours.end(); - ++currentContour) { - segmentNumber = 0; - for (Contour::iterator currentSegment = (*currentContour)->begin(); - currentSegment != (*currentContour)->end(); - ++currentSegment, ++segmentNumber) { - Segment* snake = *currentSegment; - for (Segment::iterator vertexIterator = snake->begin(); - vertexIterator != snake->end(); - ++vertexIterator) { - vertexIterator->second = - (vertexIterator->second + uBB.upperLeft() - vBB.upperLeft()) / - mismatchImageStride; - } + currentContour != contours.end(); + ++currentContour) { + segmentNumber = 0; + for (Contour::iterator currentSegment = (*currentContour)->begin(); + currentSegment != (*currentContour)->end(); + ++currentSegment, ++segmentNumber) { + Segment* snake = *currentSegment; + for (Segment::iterator vertexIterator = snake->begin(); + vertexIterator != snake->end(); + ++vertexIterator) { + const vigra::Point2D shifted(vertexIterator->second + uBB.upperLeft() - vBB.upperLeft()); + vertexIterator->second = + vigra::Point2D(round_to_nearest_div(shifted.px(), mismatchImageStride), + round_to_nearest_div(shifted.py(), mismatchImageStride)); } + } } std::vector *params = new(std::vector); diff -Nru enblend-enfuse-4.1.3+dfsg/src/masktypedefs.h enblend-enfuse-4.1.4+dfsg/src/masktypedefs.h --- enblend-enfuse-4.1.3+dfsg/src/masktypedefs.h 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/masktypedefs.h 2015-08-07 12:47:33.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011-2014 Mikolaj Leszczynski + * Copyright (C) 2011-2015 Mikolaj Leszczynski * * This file is part of Enblend. * diff -Nru enblend-enfuse-4.1.3+dfsg/src/mga.h enblend-enfuse-4.1.4+dfsg/src/mga.h --- enblend-enfuse-4.1.3+dfsg/src/mga.h 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/mga.h 2015-08-07 12:47:33.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2014 Christoph L. Spiel + * Copyright (C) 2008-2015 Christoph L. Spiel * * This file is part of Enblend. * diff -Nru enblend-enfuse-4.1.3+dfsg/src/minimizer.h enblend-enfuse-4.1.4+dfsg/src/minimizer.h --- enblend-enfuse-4.1.3+dfsg/src/minimizer.h 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/minimizer.h 2015-08-07 12:47:33.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2012-2014 Dr. Christoph L. Spiel + * Copyright (C) 2012-2015 Dr. Christoph L. Spiel * * This file is part of Enblend. * diff -Nru enblend-enfuse-4.1.3+dfsg/src/muopt.h enblend-enfuse-4.1.4+dfsg/src/muopt.h --- enblend-enfuse-4.1.3+dfsg/src/muopt.h 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/muopt.h 2015-08-07 12:47:33.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2012-2014 Dr. Christoph L. Spiel + * Copyright (C) 2012-2015 Dr. Christoph L. Spiel * * This file is part of Enblend. * diff -Nru enblend-enfuse-4.1.3+dfsg/src/nearest.h enblend-enfuse-4.1.4+dfsg/src/nearest.h --- enblend-enfuse-4.1.3+dfsg/src/nearest.h 2014-03-10 13:43:59.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/nearest.h 2015-08-07 12:47:33.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014 Christoph L. Spiel + * Copyright (C) 2009-2015 Christoph L. Spiel * * This file is part of Enblend. * diff -Nru enblend-enfuse-4.1.3+dfsg/src/numerictraits.h enblend-enfuse-4.1.4+dfsg/src/numerictraits.h --- enblend-enfuse-4.1.3+dfsg/src/numerictraits.h 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/numerictraits.h 2015-08-07 14:44:53.000000000 +0000 @@ -1,5 +1,6 @@ /* - * Copyright (C) 2004-2014 Andrew Mihal + * Copyright (C) 2004-2009 Andrew Mihal + * Copyright (C) 2009-2015 Christoph Spiel * * This file is part of Enblend. * diff -Nru enblend-enfuse-4.1.3+dfsg/src/openmp.h enblend-enfuse-4.1.4+dfsg/src/openmp.h --- enblend-enfuse-4.1.3+dfsg/src/openmp.h 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/openmp.h 2015-08-07 12:47:33.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014 Christoph L. Spiel + * Copyright (C) 2009-2015 Christoph L. Spiel * * This file is part of Enblend. * diff -Nru enblend-enfuse-4.1.3+dfsg/src/path.h enblend-enfuse-4.1.4+dfsg/src/path.h --- enblend-enfuse-4.1.3+dfsg/src/path.h 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/path.h 2015-08-07 14:45:05.000000000 +0000 @@ -1,5 +1,6 @@ /* - * Copyright (C) 2004-2014 Andrew Mihal + * Copyright (C) 2004-2009 Andrew Mihal + * Copyright (C) 2009-2015 Christoph Spiel * * This file is part of Enblend. * @@ -61,36 +62,35 @@ typedef typename CostAccessor::value_type CostPixelType; typedef typename vigra::NumericTraits::Promote WorkingPixelType; typedef vigra::BasicImage WorkingImageType; - typedef typename WorkingImageType::traverser WorkingImageIterator; typedef std::priority_queue, PathCompareFunctor > PQ; - const int w = cost_lowerright.x - cost_upperleft.x; - const int h = cost_lowerright.y - cost_upperleft.y; - // 4-bit direction encoding {up, down, left, right} // A 8 9 // 2 0 1 // 6 4 5 - //const unsigned char neighborArray[] = {0xA, 8, 9, 1, 5, 4, 6, 2}; const vigra::UInt8 neighborArray[] = {0xA, 1, 6, 8, 5, 2, 9, 4}; - //const unsigned char neighborArrayInverse[] = {5, 4, 6, 2, 0xA, 8, 9, 1}; const vigra::UInt8 neighborArrayInverse[] = {5, 2, 9, 4, 0xA, 1, 6, 8}; - vigra::UInt8Image* pathNextHop = new vigra::UInt8Image(w, h, vigra::UInt8(0)); - WorkingImageType* costSoFar = new WorkingImageType(w, h, vigra::NumericTraits::max()); - PQ* pq = new PQ(PathCompareFunctor(costSoFar)); + const vigra::Size2D size(cost_lowerright - cost_upperleft); + const vigra::Rect2D valid_region(size); + + vigra::UInt8Image pathNextHop(size); + WorkingImageType costSoFar(size, vigra::NumericTraits::max()); + PQ* pq = new PQ(PathCompareFunctor(&costSoFar)); std::vector* result = new std::vector; #ifdef DEBUG_PATH - cout << "+ minCostPath: w = " << w << ", h = " << h << "\n" + cout << "+ minCostPath: size = " << size << "\n" << "+ minCostPath: startingPoint = " << startingPoint << ", endingPoint = " << endingPoint << endl; #endif - (*costSoFar)[endingPoint] = - std::max(vigra::NumericTraits::one(), - vigra::NumericTraits::toPromote(ca(cost_upperleft + endingPoint))); - pq->push(endingPoint); + if (valid_region.contains(endingPoint)) { + costSoFar[endingPoint] = + std::max(vigra::NumericTraits::one(), + vigra::NumericTraits::toPromote(ca(cost_upperleft + endingPoint))); + pq->push(endingPoint); + } while (!pq->empty()) { vigra::Point2D top = pq->top(); @@ -100,7 +100,7 @@ #endif if (top != startingPoint) { - WorkingPixelType costToTop = (*costSoFar)[top]; + WorkingPixelType costToTop = costSoFar[top]; #ifdef DEBUG_PATH cout << "+ minCostPath: costToTop = " << costToTop << endl; #endif @@ -116,8 +116,7 @@ if (neighborDirection & 0x1) {++neighborPoint.x;} // Make sure neighbor is in valid region - if (neighborPoint.y < 0 || neighborPoint.y >= h - || neighborPoint.x < 0 || neighborPoint.x >= w) { + if (!valid_region.contains(neighborPoint)) { continue; } #ifdef DEBUG_PATH @@ -127,7 +126,7 @@ // See if the neighbor has already been visited. // If neighbor has maximal cost, it has not been visited. // If so skip it. - WorkingPixelType neighborPreviousCost = (*costSoFar)[neighborPoint]; + WorkingPixelType neighborPreviousCost = costSoFar[neighborPoint]; #ifdef DEBUG_PATH cout << "+ minCostPath: neighborPreviousCost = " << neighborPreviousCost << endl; #endif @@ -150,24 +149,26 @@ neighborCost = WorkingPixelType(static_cast(neighborCost) * 1.4); } - const WorkingPixelType newNeighborCost = neighborCost + costToTop; + const WorkingPixelType newNeighborCost = + vigra::NumericTraits::fromRealPromote(static_cast(neighborCost) + + static_cast(costToTop)); if (newNeighborCost < neighborPreviousCost) { // We have found the shortest path to neighbor. - (*costSoFar)[neighborPoint] = newNeighborCost; - (*pathNextHop)[neighborPoint] = neighborArrayInverse[i]; + costSoFar[neighborPoint] = newNeighborCost; + pathNextHop[neighborPoint] = neighborArrayInverse[i]; pq->push(neighborPoint); } } } else { // If yes then follow back to beginning using pathNextHop // include neither start nor end point in result - vigra::UInt8 nextHop = (*pathNextHop)[top]; + vigra::UInt8 nextHop = pathNextHop[top]; while (nextHop != 0) { if (nextHop & 0x8) {--top.y;} if (nextHop & 0x4) {++top.y;} if (nextHop & 0x2) {--top.x;} if (nextHop & 0x1) {++top.x;} - nextHop = (*pathNextHop)[top]; + nextHop = pathNextHop[top]; if (nextHop != 0) { result->push_back(top); } @@ -176,8 +177,6 @@ } } - delete pathNextHop; - delete costSoFar; delete pq; return result; diff -Nru enblend-enfuse-4.1.3+dfsg/src/postoptimizer.h enblend-enfuse-4.1.4+dfsg/src/postoptimizer.h --- enblend-enfuse-4.1.3+dfsg/src/postoptimizer.h 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/postoptimizer.h 2015-08-07 14:44:07.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011-2014 Mikolaj Leszczynski + * Copyright (C) 2011-2015 Mikolaj Leszczynski * * This file is part of Enblend. * @@ -284,8 +284,8 @@ if (currentVertex->first || nextVertex->first) { // Find shortest path between these points - vigra::Point2D currentPoint = currentVertex->second; - vigra::Point2D nextPoint = nextVertex->second; + const vigra::Point2D currentPoint = currentVertex->second; + const vigra::Point2D nextPoint = nextVertex->second; vigra::Rect2D pointSurround(currentPoint, vigra::Size2D(1, 1)); pointSurround |= vigra::Rect2D(nextPoint, vigra::Size2D(1, 1)); @@ -303,11 +303,18 @@ vigra::Point2D(nextPoint - pointSurround.upperLeft()), vigra::Point2D(currentPoint - pointSurround.upperLeft())); + if (shortPath->empty()) { + std::cerr << command << ": warning: unable to run Dijkstra optimizer\n" + << command << ": info: seam-line end point outside of cost-image" + << std::endl; + } + for (std::vector::iterator shortPathPoint = shortPath->begin(); shortPathPoint != shortPath->end(); ++shortPathPoint) { snake->insert(enblend::next(currentVertex), - std::make_pair(false, *shortPathPoint + pointSurround.upperLeft())); + std::make_pair(false, + *shortPathPoint + pointSurround.upperLeft())); if (this->visualizeImage) { (*this->visualizeImage)[*shortPathPoint + pointSurround.upperLeft()] = @@ -318,14 +325,21 @@ delete shortPath; if (this->visualizeImage) { - (*this->visualizeImage)[currentPoint] = - currentVertex->first ? - VISUALIZE_FIRST_VERTEX_VALUE : - VISUALIZE_NEXT_VERTEX_VALUE; - (*this->visualizeImage)[nextPoint] = - nextVertex->first ? - VISUALIZE_FIRST_VERTEX_VALUE : - VISUALIZE_NEXT_VERTEX_VALUE; + const vigra::Size2D size(*this->visualizeImage->size()); + const vigra::Rect2D valid_region(size); + + if (valid_region.contains(currentPoint)) { + (*this->visualizeImage)[currentPoint] = + currentVertex->first ? + VISUALIZE_FIRST_VERTEX_VALUE : + VISUALIZE_NEXT_VERTEX_VALUE; + } + if (valid_region.contains(nextPoint)) { + (*this->visualizeImage)[nextPoint] = + nextVertex->first ? + VISUALIZE_FIRST_VERTEX_VALUE : + VISUALIZE_NEXT_VERTEX_VALUE; + } } } diff -Nru enblend-enfuse-4.1.3+dfsg/src/pyramid.h enblend-enfuse-4.1.4+dfsg/src/pyramid.h --- enblend-enfuse-4.1.3+dfsg/src/pyramid.h 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/pyramid.h 2015-08-07 14:44:53.000000000 +0000 @@ -1,5 +1,6 @@ /* - * Copyright (C) 2004-2014 Andrew Mihal + * Copyright (C) 2004-2009 Andrew Mihal + * Copyright (C) 2009-2015 Christoph Spiel * * This file is part of Enblend. * diff -Nru enblend-enfuse-4.1.3+dfsg/src/self_test.cc enblend-enfuse-4.1.4+dfsg/src/self_test.cc --- enblend-enfuse-4.1.3+dfsg/src/self_test.cc 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/self_test.cc 2015-08-07 12:47:33.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014 Dr. Christoph L. Spiel + * Copyright (C) 2009-2015 Dr. Christoph L. Spiel * * This file is part of Enblend. * diff -Nru enblend-enfuse-4.1.3+dfsg/src/self_test.h enblend-enfuse-4.1.4+dfsg/src/self_test.h --- enblend-enfuse-4.1.3+dfsg/src/self_test.h 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/self_test.h 2015-08-07 12:47:33.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014 Dr. Christoph L. Spiel + * Copyright (C) 2009-2015 Dr. Christoph L. Spiel * * This file is part of Enblend. * diff -Nru enblend-enfuse-4.1.3+dfsg/src/tiff_message.cc enblend-enfuse-4.1.4+dfsg/src/tiff_message.cc --- enblend-enfuse-4.1.3+dfsg/src/tiff_message.cc 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/tiff_message.cc 2015-08-07 14:45:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014 Dr. Christoph L. Spiel + * Copyright (C) 2009-2015 Dr. Christoph L. Spiel * * This file is part of Enblend. * @@ -19,15 +19,12 @@ */ -#include - +#include // fflush(), vsnprintf() #include #include #include #include -#include - #ifdef HAVE_CONFIG_H #include #endif @@ -61,9 +58,8 @@ const char* /*module*/, const char* format, va_list arguments) { const size_t buffer_size = 4096; - boost::scoped_ptr buffer(new char[buffer_size]); - vsnprintf(buffer.get(), buffer_size, format, arguments); - const std::string message(buffer.get()); + std::string message(buffer_size, '\0'); + vsnprintf(&message[0], buffer_size, format, arguments); if (tiff_messages.count(message) == 0) { diff -Nru enblend-enfuse-4.1.3+dfsg/src/tiff_message.h enblend-enfuse-4.1.4+dfsg/src/tiff_message.h --- enblend-enfuse-4.1.3+dfsg/src/tiff_message.h 2014-03-10 13:36:43.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/src/tiff_message.h 2015-08-07 12:47:33.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014 Dr. Christoph L. Spiel + * Copyright (C) 2009-2015 Dr. Christoph L. Spiel * * This file is part of Enblend. * diff -Nru enblend-enfuse-4.1.3+dfsg/VERSION enblend-enfuse-4.1.4+dfsg/VERSION --- enblend-enfuse-4.1.3+dfsg/VERSION 2014-03-19 07:27:16.000000000 +0000 +++ enblend-enfuse-4.1.4+dfsg/VERSION 2015-09-28 06:43:37.000000000 +0000 @@ -1 +1 @@ -4.1.3 +4.1.4