%% This file is part of Enblend.
%% Licence details can be found in the file COPYING.


\chapter[Known Limitations]{\label{sec:known-limitations}%
  \genidx[\rangebeginlocation]{known limitations}%
  Known Limitations}

\App{} has its limitations.  Some of them are inherent to the programs proper others are
``imported'' by using libraries as for example \uref{\hciiwrvigra}{\acronym{VIGRA}}.  Here are
some of the known ones.

\begin{itemize}
\item
  The \genidx{BigTIFF@\acronym{BigTIFF}}\acronym{BigTIFF} image format is not supported.

\item
  Total size of \emph{any} -- even intermediate -- image is limited to $2^{31}$~pixels, this is
  two giga-pixels.

\ifenblend
  \genidx{blending!sequential}%
  \gensee{sequential blending}{blending, sequential}%
\item
  Each ``next'' image must overlap with the result of the blending of all previous images.  In
  special occasions option~\sample{--pre-assemble} can circumvent this sequential-blending
  restriction.

\item
  No pair of images must overlap too much.  In particular, no two images must be identical.

  \begin{geeknote}
    The overlap is exclusively defined by the masks of the overlapping images.  This is exactly
    what the input masks are built for.  Let $A$ be the number of pixels that overlap in both
    masks.  We use $A$ as a measure of the overlap area -- something 2\hyp dimensional;
    technically it is a pixel count.

    Construct the smallest circumscribed, par-axial rectangle of the overlap area.  The
    rectangle has a circumference
    \[
    U = 2 (a + b),
    \]
    which is of course 1-dimensional.  Internally $U$ again is a number of pixels just as $A$.

    The threshold when we consider a pair of images sufficiently different is when $A$ is larger
    than \val{val:overlap-check-threshold}~times the number of pixels on the circumference~$U$
    \[
    A > \val{val:overlap-check-threshold} \times U.
    \]
    Avoiding the term ``fractal dimension'', we have constructed a simple measure of how 2\hyp
    dimensional the overlap area is.  This way we steer clear of feeding later processing stages
    with nearly 1\hyp dimensional overlap regions, something that wreaks havoc on them.
  \end{geeknote}

  \optidx{--wrap}%
\item
  Option~\sample{--wrap=both} performs blending in $\symmgroup{E}(1) \times \symmgroup{E}(1)$,
  which is only \emph{locally} isomorphic to $\symmgroup{S}(2)$.  This will cause artifacts
  that do not appear in $\symmgroup{S}(2)$.  \App{} cannot blend within $\symmgroup{S}(2)$.
\fi%enblend

\genidx{artifacts!color}%
\gensee{color artifacts}{artifacts, color}%
\optidx{--blend-colorspace}%
\item
  High-contrast scenes stored with non-linear color profiles (or no profile at all) tend to
  produce color artifacts in the deep shadows.  Typically artifacts are isolated, highly
  saturated pixels.  Because of the different usage styles this problem occurs more often with
  \application{Enfuse} than with \application{Enblend}.

  Two simple workarounds are known:
  \begin{enumerate}
  \item
    Choose a different blend-colorspace; see
    option~\flexipageref{\option{--blend-colorspace}}{opt:blend-colorspace}.

  \item
    Use linear (i.e.\ $\mathrm{gamma} = 1$) color profiles in the input images.  Also see
    \chapterName~\fullref{sec:color-spaces} on ``Color Spaces And Color Profiles''.
  \end{enumerate}
\end{itemize}

\genidx[\rangeendlocation]{known limitations}


%%% Local Variables:
%%% fill-column: 96
%%% End:
