Erik Rodner 12 years ago
commit
7e01ba00c9
100 changed files with 18314 additions and 0 deletions
  1. 10 0
      .gitignore
  2. 1716 0
      Doxyfile
  3. 27 0
      INSTALL.txt
  4. 307 0
      Makefile
  5. 97 0
      Makefile.inc
  6. 8 0
      PACKAGES
  7. 42 0
      README
  8. 5336 0
      TODO/valgrind_testimagetools.out
  9. 8 0
      core/Makefile
  10. 103 0
      core/Makefile.inc
  11. 102 0
      core/algebra/CholeskyRobust.cpp
  12. 104 0
      core/algebra/CholeskyRobust.h
  13. 154 0
      core/algebra/CholeskyRobustAuto.cpp
  14. 73 0
      core/algebra/CholeskyRobustAuto.h
  15. 207 0
      core/algebra/DiagonalMatrixApprox.cpp
  16. 108 0
      core/algebra/DiagonalMatrixApprox.h
  17. 98 0
      core/algebra/EigValues.cpp
  18. 69 0
      core/algebra/EigValues.h
  19. 126 0
      core/algebra/EigValuesTRLAN.cpp
  20. 61 0
      core/algebra/EigValuesTRLAN.h
  21. 265 0
      core/algebra/GBCDSolver.cpp
  22. 80 0
      core/algebra/GBCDSolver.h
  23. 324 0
      core/algebra/GMSparseVectorMatrix.cpp
  24. 163 0
      core/algebra/GMSparseVectorMatrix.h
  25. 35 0
      core/algebra/GMStandard.cpp
  26. 48 0
      core/algebra/GMStandard.h
  27. 87 0
      core/algebra/GenericMatrix.cpp
  28. 121 0
      core/algebra/GenericMatrix.h
  29. 207 0
      core/algebra/ILSConjugateGradients.cpp
  30. 86 0
      core/algebra/ILSConjugateGradients.h
  31. 209 0
      core/algebra/ILSConjugateGradientsLanczos.cpp
  32. 70 0
      core/algebra/ILSConjugateGradientsLanczos.h
  33. 212 0
      core/algebra/ILSMinResLanczos.cpp
  34. 70 0
      core/algebra/ILSMinResLanczos.h
  35. 107 0
      core/algebra/ILSPlainGradient.cpp
  36. 96 0
      core/algebra/ILSPlainGradient.h
  37. 247 0
      core/algebra/ILSSymmLqLanczos.cpp
  38. 70 0
      core/algebra/ILSSymmLqLanczos.h
  39. 22 0
      core/algebra/IterativeLinearSolver.cpp
  40. 48 0
      core/algebra/IterativeLinearSolver.h
  41. 224 0
      core/algebra/LUDecomposition.cpp
  42. 85 0
      core/algebra/LUDecomposition.h
  43. 8 0
      core/algebra/Makefile
  44. 103 0
      core/algebra/Makefile.inc
  45. 40 0
      core/algebra/MatrixDecomposition.h
  46. 45 0
      core/algebra/PartialGenericMatrix.h
  47. 8 0
      core/algebra/libdepend.inc
  48. 8 0
      core/algebra/progs/Makefile
  49. 88 0
      core/algebra/progs/Makefile.inc
  50. 94 0
      core/algebra/progs/testILSConjugateGradients.cpp
  51. 465 0
      core/algebra/progs/testILSConjugateGradientsLanczos.cpp
  52. 612 0
      core/algebra/progs/testILSMinResLanczos.cpp
  53. 612 0
      core/algebra/progs/testILSSymmLqLanczos.cpp
  54. 93 0
      core/algebra/progs/testILSmethods.cpp
  55. 89 0
      core/algebra/tests/Makefile.inc
  56. 85 0
      core/algebra/tests/TestDiagApprox.cpp
  57. 38 0
      core/algebra/tests/TestDiagApprox.h
  58. 128 0
      core/algebra/tests/TestEigenValue.cpp
  59. 38 0
      core/algebra/tests/TestEigenValue.h
  60. 78 0
      core/algebra/tests/TestLUDecomposition.cpp
  61. 37 0
      core/algebra/tests/TestLUDecomposition.h
  62. 152 0
      core/algebra/tests/TestLinearSolve.cpp
  63. 38 0
      core/algebra/tests/TestLinearSolve.h
  64. 17 0
      core/basics/BFSColor.h
  65. 77 0
      core/basics/BinStreamable.cpp
  66. 94 0
      core/basics/BinStreamable.h
  67. 566 0
      core/basics/Config.cpp
  68. 169 0
      core/basics/Config.h
  69. 59 0
      core/basics/Exception.cpp
  70. 181 0
      core/basics/Exception.h
  71. 39 0
      core/basics/FastMath.cpp
  72. 51 0
      core/basics/FastMath.h
  73. 121 0
      core/basics/FileMgt.cpp
  74. 52 0
      core/basics/FileMgt.h
  75. 139 0
      core/basics/FileName.cpp
  76. 155 0
      core/basics/FileName.h
  77. 33 0
      core/basics/FrameRateCounter.cpp
  78. 59 0
      core/basics/FrameRateCounter.h
  79. 21 0
      core/basics/Log.cpp
  80. 87 0
      core/basics/Log.h
  81. 8 0
      core/basics/Makefile
  82. 103 0
      core/basics/Makefile.inc
  83. 42 0
      core/basics/NonCopyable.h
  84. 23 0
      core/basics/Observable.cpp
  85. 39 0
      core/basics/Observable.h
  86. 11 0
      core/basics/Observer.cpp
  87. 43 0
      core/basics/Observer.h
  88. 135 0
      core/basics/Persistent.h
  89. 135 0
      core/basics/ResourceStatistics.cpp
  90. 77 0
      core/basics/ResourceStatistics.h
  91. 75 0
      core/basics/RoundToNearest.h
  92. 119 0
      core/basics/Streamable.cpp
  93. 115 0
      core/basics/Streamable.h
  94. 220 0
      core/basics/StringTools.cpp
  95. 142 0
      core/basics/StringTools.h
  96. 137 0
      core/basics/StructuredMap.h
  97. 135 0
      core/basics/Timer.cpp
  98. 249 0
      core/basics/Timer.h
  99. 29 0
      core/basics/all.h
  100. 66 0
      core/basics/assert.h

+ 10 - 0
.gitignore

@@ -0,0 +1,10 @@
+Makefile.config*
+*~
+moc_*
+objrec/*
+limun/*
+.kdev4/*
+BUILD_*
+objrec-froehlichexp/
+slim-pkg-config/pkg-config
+setenv_local.sh

+ 1716 - 0
Doxyfile

@@ -0,0 +1,1716 @@
+# Doxyfile 1.7.3
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a hash (#) is considered a comment and will be ignored.
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
+# iconv built into libc) for the transcoding. See
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME           = NICE
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER         = 1.0
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description for a project that appears at the top of each page and should give viewer a quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF          = "This is the documentation of NICE."
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is
+# included in the documentation. The maximum height of the logo should not
+# exceed 55 pixels and the maximum width should not exceed 200 pixels.
+# Doxygen will copy the logo to the output directory.
+
+PROJECT_LOGO           = doxy/logoV1.png
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = doc
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip.
+
+STRIP_FROM_PATH        =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful if your file system
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like regular Qt-style comments
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF      = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
+# interpret the first line (until the first dot) of a Qt-style
+# comment as the brief description. If set to NO, the comments
+# will behave just like regular Qt-style comments (thus requiring
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 8
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for
+# Java. For instance, namespaces will be presented as packages, qualified
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources only. Doxygen will then generate output that is more tailored for
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given extension.
+# Doxygen has a built-in mapping, but you can override or extend it using this
+# tag. The format is ext=language, where ext is a file extension, and language
+# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C,
+# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make
+# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C
+# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions
+# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
+
+EXTENSION_MAPPING      =
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also makes the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
+# Doxygen will parse them like normal C++ but will assume all classes use public
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate getter
+# and setter methods for a property. Setting this option to YES (the default)
+# will make doxygen replace the get and set methods by a property in the
+# documentation. This will only work if the methods are indeed getting or
+# setting a simple type. If this is not the case, or you want to show the
+# methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT   = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
+# is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically
+# be useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
+# determine which symbols to keep in memory and which to flush to disk.
+# When the cache is full, less often used symbols will be written to disk.
+# For small to medium size projects (<1000 input files) the default value is
+# probably good enough. For larger projects a too small cache size can cause
+# doxygen to be busy swapping symbols to and from disk most of the time
+# causing a significant performance penalty.
+# If the system has enough physical memory increasing the cache will improve the
+# performance by keeping more symbols in memory. Note that the value works on
+# a logarithmic scale so increasing the size by one will roughly double the
+# memory usage. The cache size is given by this formula:
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols
+
+SYMBOL_CACHE_SIZE      = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC         = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base
+# name of the file that contains the anonymous namespace. By default
+# anonymous namespaces are hidden.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
+# will list include files with double quotes in the documentation
+# rather than with sharp brackets.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
+# will sort the (brief and detailed) documentation of class members so that
+# constructors and destructors are listed first. If set to NO (the default)
+# the constructors will appear in the respective orders defined by
+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
+# hierarchy of group names into alphabetical order. If set to NO (the default)
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES       = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper type resolution of all parameters of a function it will reject a
+# match between the prototype and the implementation of a member function even if there is only one candidate or it is obvious which candidate to choose by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
+# will still accept a match between prototype and implementation in such cases.
+
+STRICT_PROTO_MATCHING  = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or macro consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and macros in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+# If the sources in your project are distributed over multiple directories
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES       = NO
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
+# This will remove the Files entry from the Quick Index and from the
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
+# Namespaces page.
+# This will remove the Namespaces entry from the Quick Index
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES        = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER    =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. The create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option.
+# You can optionally specify a file name after the option, if omitted
+# DoxygenLayout.xml will be used as the name of the layout file.
+
+LAYOUT_FILE            =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# The WARN_NO_PARAMDOC option can be enabled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC       = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE           =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT                  =
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+# also the default input encoding. Doxygen uses libiconv (or the iconv built
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
+# the list of possible encodings.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
+# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
+# *.f90 *.f *.for *.vhd *.vhdl
+
+FILE_PATTERNS          = *.doxy \
+*.c \
+*.cc \
+*.cxx \
+*.cpp \
+*.c++ \
+*.d \
+*.java \
+*.ii \
+*.ixx \
+*.ipp \
+*.i++ \
+*.inl \
+*.h \
+*.hh \
+*.hxx \
+*.hpp \
+*.h++ \
+*.idl \
+*.odl \
+*.cs \
+*.php \
+*.php3 \
+*.inc \
+*.m \
+*.mm \
+*.dox \
+*.py \
+*.f90 \
+*.f \
+*.for \
+*.vhd \
+*.vhdl 
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE              = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE                = doc
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       = BUILD* \
+                         */tests/* \
+                         */progs/* \
+			 */.git/*
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS        =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH           = README \
+			 PACKAGES \
+			 doxy/CODING
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS       = test*.cpp
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH             =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+# If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER           =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis.
+# Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match.
+# The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty or if
+# non of the patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS        =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any)
+# and it is also possible to disable source filtering for a specific pattern
+# using *.ext= (so without naming a filter). This option only has effect when
+# FILTER_SOURCE_FILES is enabled.
+
+FILTER_SOURCE_PATTERNS =
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = YES
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code.
+# Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER            =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER            =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet. Note that doxygen will try to copy
+# the style sheet file to the HTML output directory, so don't put your own
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET        =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
+# Doxygen will adjust the colors in the stylesheet and background images
+# according to this color. Hue is specified as an angle on a colorwheel,
+# see http://en.wikipedia.org/wiki/Hue for more information.
+# For instance the value 0 represents red, 60 is yellow, 120 is green,
+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
+# The allowed range is 0 to 359.
+
+HTML_COLORSTYLE_HUE    = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
+# the colors in the HTML output. For a value of 0 the output will use
+# grayscales only. A value of 255 will produce the most vivid colors.
+
+HTML_COLORSTYLE_SAT    = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
+# the luminance component of the colors in the HTML output. Values below
+# 100 gradually make the output lighter, whereas values above 100 make
+# the output darker. The value divided by 100 is the actual gamma applied,
+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
+# and 100 does not change the gamma.
+
+HTML_COLORSTYLE_GAMMA  = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting
+# this to NO can help when comparing the output of multiple runs.
+
+HTML_TIMESTAMP         = NO
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS     = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded. For this to work a browser that supports
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files
+# will be generated that can be used as input for Apple's Xcode 3
+# integrated development environment, introduced with OSX 10.5 (Leopard).
+# To create a documentation set, doxygen will generate a Makefile in the
+# HTML output directory. Running make will produce the docset in that
+# directory and running "make install" will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
+# it at startup.
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+
+GENERATE_DOCSET        = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
+# feed. A documentation feed provides an umbrella under which multiple
+# documentation sets from a single provider (such as a company or product suite)
+# can be grouped.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
+# should uniquely identify the documentation set bundle. This should be a
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify
+# the documentation publisher. This should be a reverse domain-name style
+# string, e.g. com.mycompany.MyDocSet.documentation.
+
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+
+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
+
+DOCSET_PUBLISHER_NAME  = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE               =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+
+CHM_INDEX_ENCODING     =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
+# that can be used as input for Qt's qhelpgenerator to generate a
+# Qt Compressed Help (.qch) of the generated HTML documentation.
+
+GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
+# be used to specify the file name of the resulting .qch file.
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE               =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
+# add. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME   =
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
+# Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS  =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's
+# filter section matches.
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
+# Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS  =
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
+# be used to specify the location of Qt's qhelpgenerator.
+# If non-empty doxygen will try to run qhelpgenerator on the generated
+# .qhp file.
+
+QHG_LOCATION           =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
+#  will be generated, which together with the HTML files, form an Eclipse help
+# plugin. To install this plugin and make it available under the help contents
+# menu in Eclipse, the contents of the directory containing the HTML and XML
+# files needs to be copied into the plugins directory of eclipse. The name of
+# the directory within the plugins directory should be the same as
+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
+# the help appears.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have
+# this name.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX          = NO
+
+# This tag can be used to set the number of enum values (range [0,1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+# Note that a value of 0 will completely suppress the enum values from appearing in the overview section.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information.
+# If the tag value is set to YES, a side panel will be generated
+# containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
+# Windows users are probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW      = NO
+
+# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,
+# and Class Hierarchy pages using a tree view instead of an ordered list.
+
+USE_INLINE_TREES       = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
+# links to external symbols imported via tag files in a separate window.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# Use this tag to change the font size of Latex formulas included
+# as images in the HTML documentation. The default is 10. Note that
+# when you change the font size after a successful doxygen run you need
+# to manually remove any form_*.png images from the HTML output directory
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE       = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are
+# not supported properly for IE 6.0, but are supported on all modern browsers.
+# Note that when changing this option you need to delete any form_*.png files
+# in the HTML output before the changes have effect.
+
+FORMULA_TRANSPARENT    = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax
+# (see http://www.mathjax.org) which uses client side Javascript for the
+# rendering instead of using prerendered bitmaps. Use this if you do not
+# have LaTeX installed or if you want to formulas look prettier in the HTML
+# output. When enabled you also need to install MathJax separately and
+# configure the path to it using the MATHJAX_RELPATH option.
+
+USE_MATHJAX            = NO
+
+# When MathJax is enabled you need to specify the location relative to the
+# HTML output directory using the MATHJAX_RELPATH option. The destination
+# directory should contain the MathJax.js script. For instance, if the mathjax
+# directory is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the mathjax.org site, so you can quickly see the result without installing
+# MathJax, but it is strongly recommended to install a local copy of MathJax
+# before deployment.
+
+MATHJAX_RELPATH        = http://www.mathjax.org/mathjax
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box
+# for the HTML output. The underlying search engine uses javascript
+# and DHTML and should work on any modern browser. Note that when using
+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
+# (GENERATE_DOCSET) there is already a search function so this one should
+# typically be disabled. For large projects the javascript based search engine
+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
+
+SEARCHENGINE           = YES
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a PHP enabled web server instead of at the web client
+# using Javascript. Doxygen will generate the search PHP script and index
+# file to put on the web server. The advantage of the server
+# based approach is that it scales better to large projects and allows
+# full text search. The disadvantages are that it is more difficult to setup
+# and does not have live searching capabilities.
+
+SERVER_BASED_SEARCH    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX         = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+# Note that when enabling USE_PDFLATEX this option is only used for
+# generating bitmaps for formulas in the HTML output, but not in the
+# Makefile that is written to the output directory.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include
+# source code with syntax highlighting in the LaTeX output.
+# Note that which sources are shown also depends on other settings
+# such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE      = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA             =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD                =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader.
+# This is useful
+# if you want to understand what is going on.
+# On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH           =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS  =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED             =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition that overrules the definition found in the source code.
+
+EXPAND_AS_DEFINED      =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all references to function-like macros
+# that are alone on a line, have an all uppercase name, and do not end with a
+# semicolon, because these will confuse the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+#
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+#
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES               =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option also works with HAVE_DOT disabled, but it is recommended to
+# install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH            =
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = NO
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
+# allowed to run in parallel. When set to 0 (the default) doxygen will
+# base this on the number of processors available in the system. You can set it
+# explicitly to a value larger than 0 to get control over the balance
+# between CPU load and processing speed.
+
+DOT_NUM_THREADS        = 0
+
+# By default doxygen will write a font called Helvetica to the output
+# directory and reference it in all dot files that doxygen generates.
+# When you want a differently looking font you can specify the font name
+# using DOT_FONTNAME. You need to make sure dot is able to find the font,
+# which can be done by putting it in a standard location or by setting the
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory
+# containing the font.
+
+DOT_FONTNAME           = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
+# The default size is 10pt.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the output directory to look for the
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a
+# different font using DOT_FONTNAME you can set the path where dot
+# can find it using this tag.
+
+DOT_FONTPATH           =
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK               = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
+# doxygen will generate a call dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable call graphs
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
+# doxygen will generate a caller dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable caller
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will generate a graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are png, svg, gif or svg.
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT       = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH               =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS           =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the
+# \mscfile command).
+
+MSCFILE_DIRS           =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen if the
+# number of direct children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not
+# seem to support this out of the box. Warning: Depending on the platform used,
+# enabling this option may lead to badly anti-aliased labels on the edges of
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP            = YES

+ 27 - 0
INSTALL.txt

@@ -0,0 +1,27 @@
+Normal procedure:
+
+source setenv.sh
+make
+
+After that executables and libraries should be available in BUILD_*. Settings for libraries can be changed in Makefile.config. Please note that this file will be created after running make for the first time.
+
+The following is just a list of typical pitfalls:
+
+(1) On some systems (openSuSE) some library links are not set appropiately
+
+ln -s /lib/libbz2.so.1 /lib/libbz2.so
+ln -s /usr/lib/libg2c.so.0 /usr/lib/libg2c.so
+
+(2) For running unit tests with "make check" you need
+zypper install cppunit-devel
+
+(3)
+
+BZLIB not found (see Makefile.config) ...
+/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../x86_64-suse-linux/bin/ld: cannot find -lbz2
+
+This error occurs when the link to libbz2 is not set properly 
+32bit: ln -s /lib/libbz2.so.1 /lib/libbz2.so
+64bit: ln -s /lib64/libbz2.so.1 /lib64/libbz2.so
+
+The bz2 lib check successfully detects this mistake, however, Magick++-config uses -lbz2 anyway.

+ 307 - 0
Makefile

@@ -0,0 +1,307 @@
+# --------------------------------
+# - initialization in top makefile
+#
+# here all variables used later on will be defined and initialized. also the
+# default target (i.e. the one made with a simple `make`) is redirected to do
+# something useful.
+
+#incomplete collection of warnings...
+CFLAGS_WARN=-Wall -Wextra -Wno-unused-parameter -Wno-strict-aliasing # -Wchar-subscripts -Wundef -Wshadow -Wcast-align -Wwrite-strings -Wsign-compare -Wunused -Wuninitialized -Wpointer-arith -Wredundant-decls -Wmissing-declarations -Wlong-long -Wfloat-equal
+
+#some that are not really helpful
+# -Wpadded -Wunreachable-code
+#some more, only valid for C
+# -Wbad-function-cast -Wnested-externs -Wmissing-prototypes -Wstrict-prototypes
+
+ifdef OPTIMIZE
+CFLAGS=-fPIC -O3
+else
+CFLAGS=-fPIC -O0
+endif
+
+ifdef DEBUG
+CFLAGS+= -g $(CFLAGS_WARN) -DDEBUG
+else
+CFLAGS+= -g $(CFLAGS_WARN)
+endif
+
+CFLAGS+=-DUSE_64_BIT_PTR_CAST -DDISABLE_IPP_MAXMIN
+
+ifdef NOVISUAL
+CFLAGS+=-DNOVISUAL
+endif
+
+CFLAGS_CUDA=-Xcompiler "-fpic -O3 -pthread" 
+
+PLATFORM:=$(shell uname -m)
+
+AR=ar
+CC=gcc
+CXX=g++
+CXXCUDA=nvcc
+SYMLINK=ln -sf
+DOXYGEN=doxygen
+PKGCONFIG=pkg-config
+SED=sed
+MOC=echo "QT MOC is required. Please define the variable MOC in Makefile.config. "
+CPPUNIT_MAIN=templates/cppUnitTestRunner.cpp
+
+#normal mode
+VERBOSE := @\#
+VERBOSE2 :=
+#abstract mode
+#VERBOSE := @
+#VERBOSE2 := @
+
+USE_STATIC_LIBRARIES=1
+
+ifdef USE_STATIC_LIBRARIES
+    LINK_FILE_EXTENSION=a
+else
+    LINK_FILE_EXTENSION=so
+endif
+
+
+# various rules to create directory names
+PROJECTDIR:=$(shell pwd)/
+BUILDDIR:=BUILD_$(PLATFORM)$(NICE_BUILD)/
+OBJDIR=$(BUILDDIR)$(SUBDIR)
+LIBDIR=$(BUILDDIR)$(SUBDIR)
+BINDIR=$(BUILDDIR)$(SUBDIR)
+PKGDIR=$(BUILDDIR)$(SUBDIR)
+LIBSYMLINKDIR=$(BUILDDIR)lib/
+BINSYMLINKDIR=$(BUILDDIR)bin/
+PKGSYMLINKDIR=$(BUILDDIR)pkgconfig/
+ifeq "$(PKG_CONFIG_PATH)" ""
+export PKG_CONFIG_PATH:=$(PROJECTDIR)/$(PKGSYMLINKDIR)
+else
+export PKG_CONFIG_PATH:=$(PROJECTDIR)/$(PKGSYMLINKDIR):$(PKG_CONFIG_PATH)
+endif
+
+# "global" variables
+ALL_OBJS:=
+ALL_LIBRARIES:=
+ALL_BINARIES:=
+ALL_CHECKS:=
+SUBDIR:=
+
+# various rules to create file names
+LIBNAME=lib$(subst /,_,$(patsubst %/,%,$(1)))
+
+# these are commands for the libdepend.inc files
+FILE_DEPEND_EXT=$(eval EXTLIBS_$(OBJDIR)$(1)+=$(2))
+FILE_DEPEND_INT=$(eval INTLIBS_$(OBJDIR)$(1)+=$(2))
+PKG_DEPEND_EXT=$(eval EXTLIBS_$(OBJDIR)+=$(1))
+PKG_DEPEND_EXT_ESSENTIAL=$(if $($(1)_CFLAGS)$($(1)_LDFLAGS),$(eval EXTLIBS_$(OBJDIR)+=$(1)),$(eval SKIP_BUILD_$(OBJDIR)=1))
+PKG_DEPEND_INT=$(eval INTLIBS_$(OBJDIR)+=$(1))
+PKG_DESCRIPTION=$(eval PKGDESC_$(OBJDIR)=$(1))
+PKG_VERSION=$(eval PKGVERS_$(OBJDIR)=$(1))
+
+# these are internal variables used within the Makefile.inc files and the
+# rules below
+PRINT_EXTLIB_LIST=$(EXTLIBS_$(1)) $(EXTLIBS_$(dir $1))
+PRINT_EXTLIB_PKGCONFIG=$(foreach l,$(call PRINT_EXTLIB_LIST,$(1)),$($(l)_PKGCONFIG))
+
+#PRINT_EXTLIB_CFLAGS=$(foreach l,$(call PRINT_EXTLIB_LIST,$(1)),$($(l)_CFLAGS))
+PRINT_EXTLIB_CFLAGS=$(foreach l,$(call PRINT_EXTLIB_LIST,$(1)),$(if $($(l)_PKGCONFIG),`pkg-config $($(l)_PKGCONFIG) --cflags` )$($(l)_CFLAGS))
+PRINT_EXTLIB_CFLAGS_NOPKG=$(foreach l,$(call PRINT_EXTLIB_LIST,$(1)),$($(l)_CFLAGS))
+
+PRINT_EXTLIB_LDFLAGS=$(foreach l,$(call PRINT_EXTLIB_LIST,$(1)),$(if $($(l)_PKGCONFIG),`pkg-config $($(l)_PKGCONFIG) --libs` )$($(l)_LDFLAGS))
+PRINT_EXTLIB_LDFLAGS_NOPKG=$(foreach l,$(call PRINT_EXTLIB_LIST,$(1)),$($(l)_LDFLAGS))
+
+
+PRINT_INTLIB_DEPS=$(foreach l,$(INTLIBS_$(1)) $(INTLIBS_$(dir $(1))),$(BUILDDIR)$(patsubst %/,%,$(l))/$(call LIBNAME,$(l))$(2))
+
+PRINT_INTLIB_PKGCONFIG=$(foreach l,$(INTLIBS_$(1)) $(INTLIBS_$(dir $1)),$(call LIBNAME,$(l)))
+#PRINT_PKGCONFIG_SAFE=$(if $(strip $(1)),`$(PKGCONFIG) $(1) $(2)`)
+PRINT_PKGCONFIG_SAFE=$(foreach l,$(1),`$(PKGCONFIG) $(l) $(2)`)
+
+PRINT_INTLIB_CFLAGS=$(call PRINT_PKGCONFIG_SAFE,$(call PRINT_INTLIB_PKGCONFIG,$(1)),--cflags)
+PRINT_INTLIB_LDFLAGS=$(call PRINT_PKGCONFIG_SAFE,$(call PRINT_INTLIB_PKGCONFIG,$(1)),--libs)
+
+#PROCESS_DEPFILE=$(SED) -e's@^[^ ].*:@&$(call PRINT_INTLIB_PCS,$@)@'
+
+.PHONY:all alldep alllib allbin clean check doc
+
+all:alldep alllib allbin
+
+# -----------------------------
+# - configuration for libraries
+#
+# This configuration is moved to a separate configuration file. There the
+# necessary defines $($(x)_CFLAGS) and $($(x)_LDFLAGS) are set up. Within
+# this Makefile, one can simply say a target needs library $(x), and includes
+# as well as libraries will be found.
+PKGCONFIG_3RDPARTY=$(if $(shell pkg-config $(2) --exists && echo "1"),\
+    $(call CONFIGINFO,$(1),1)$(eval $(1)_PKGCOONFIG=$(2)) \
+    $(eval $(1)_CFLAGS=-DUSELIB_$(1)) \
+    $(call CONFIGINFO,$(1),0))
+
+$(info $(shell if [ ! -f Makefile.config ];then echo "+++ creating default Makefile.config - please manually check the configuration"; cp templates/Makefile.config.template Makefile.config;fi))
+
+include Makefile.config
+
+# --------------------
+# - cppunit test stuff
+
+ALL_OBJS+=$(CPPUNIT_MAIN_OBJ)
+CPPUNIT_MAIN_OBJ=$(CPPUNIT_MAIN:%.cpp=%.o)
+$(call FILE_DEPEND_EXT,$(CPPUNIT_MAIN_OBJ),CPPUNIT)
+
+# ------------------------
+# - include subdirectories
+#
+# in fact a simple "include Makefile.inc" would suffice to reach the top level
+# source directory, from where other directories can be included.
+
+SUBDIRS:=./
+include $(SUBDIRS:%=%/Makefile.inc)
+
+# --------------------------------------
+# - override the default list of targets
+
+ifneq "$(TARGETS_FROM)" ""
+ALL_OBJS:=$(filter $(BUILDDIR)$(TARGETS_FROM)%,$(ALL_OBJS))
+ALL_LIBRARIES:=$(filter $(BUILDDIR)$(TARGETS_FROM)%,$(ALL_LIBRARIES))
+ALL_BINARIES:=$(filter $(BUILDDIR)$(TARGETS_FROM)%,$(ALL_BINARIES))
+ALL_CHECKS:=$(filter $(BUILDDIR)$(TARGETS_FROM)%,$(ALL_CHECKS))
+endif
+
+# -----------------------------
+# - rules in top level makefile
+#
+# the rules are the heart of the makefile. all rules are defined implicitly
+# which has many advantages. you should definitely know what you are doing
+# if you add an implicit rule however.
+
+allbin:$(ALL_BINARIES)
+	$(VERBOSE2)find ./core/ -name moc*.cpp -delete
+
+alllib:$(ALL_LIBRARIES)
+
+alldep:allpkg $(ALL_OBJS:%.o=%.d)
+
+allpkg:$(ALL_LIBRARIES:%.$(LINK_FILE_EXTENSION)=%.pc)
+
+check:$(ALL_CHECKS)
+
+clean:
+	$(VERBOSE)echo "+++ removing all files"
+	$(VERBOSE2)rm -f $(ALL_OBJS) $(ALL_OBJS:%.o=%.d)
+	$(VERBOSE2)rm -f $(ALL_BINARIES) $(ALL_BINARIES:%=%.bd)
+	$(VERBOSE2)rm -f $(ALL_LIBRARIES) $(ALL_CHECKS)
+
+#TODO: does not remove moc_*.C (created with QT-moc from .h files)
+#alternative solution is to just rm -rf BUILD
+
+doc: Makefile.config
+	$(VERBOSE)echo "+++ creating documentation"
+	$(VERBOSE2)cp Doxyfile Doxyfile.tmp
+	$(VERBOSE2)perl -e 'print "PREDEFINED =     "; while(<>){ if ( /(NICE_USELIB_\w+)/ ) { print "$$1 "; } }; print "\n"' Makefile.config >> Doxyfile.tmp
+	$(VERBOSE2)$(DOXYGEN) Doxyfile.tmp
+	$(VERBOSE2)rm Doxyfile.tmp
+
+MKOUTPUTDIR=[ -d $(@D) ] || mkdir -p $(@D)
+MKOUTPUTDIR2=[ -d $(dir $(1)) ] || mkdir -p $(dir $(1))
+
+$(BUILDDIR)%.d:%.c $(ALL_LIBRARIES:%.$(LINK_FILE_EXTENSION)=%.pc)
+	@$(MKOUTPUTDIR)
+	$(VERBOSE)echo "+++ making dependencies $@"
+	$(VERBOSE2)$(CC) -MT '$@ $(@:%.d=%.o)' -MM -I. $(call PRINT_INTLIB_CFLAGS,$@) $(call PRINT_EXTLIB_CFLAGS,$@) $< > $@
+
+$(BUILDDIR)%.d:%.C $(ALL_LIBRARIES:%.$(LINK_FILE_EXTENSION)=%.pc)
+	@$(MKOUTPUTDIR)
+	$(VERBOSE)echo "+++ making dependencies $@"
+	$(VERBOSE2)$(CC) -MT '$@ $(@:%.d=%.o)' -MM -I. $(call PRINT_INTLIB_CFLAGS,$@) $(call PRINT_EXTLIB_CFLAGS,$@) $< > $@
+
+$(BUILDDIR)%.d:%.cpp $(ALL_LIBRARIES:%.$(LINK_FILE_EXTENSION)=%.pc)
+	@$(MKOUTPUTDIR)
+	$(VERBOSE)echo "+++ making dependencies $@"
+	$(VERBOSE2)$(CXX) -MT '$@ $(@:%.d=%.o)' -MM -I. $(call PRINT_INTLIB_CFLAGS,$@) $(call PRINT_EXTLIB_CFLAGS,$@) $< > $@
+
+$(BUILDDIR)%.d:%.cu $(ALL_LIBRARIES:%.$(LINK_FILE_EXTENSION)=%.pc)
+	@$(MKOUTPUTDIR)
+	$(VERBOSE)echo "+++ making dependencies $@"
+	$(VERBOSE2)$(CXXCUDA) -M '$@ $(@:%.d=%.o)' -I. $(call PRINT_INTLIB_CFLAGS,$@) $(call PRINT_EXTLIB_CFLAGS,$@) $< > $@
+
+$(BUILDDIR)%.bd:$(ALL_LIBRARIES:%.$(LINK_FILE_EXTENSION)=%.pc)
+	@$(MKOUTPUTDIR)
+	$(VERBOSE)echo "+++ making dependencies $@"
+	$(VERBOSE2)echo '$@:$(patsubst $(BUILDDIR)%,%,$(dir $@))libdepend.inc' > $@
+	$(VERBOSE2)echo '$(@:%.bd=%):$(@:%.bd=%.o) $(call PRINT_INTLIB_DEPS,$(@:%.bd=%),.$(LINK_FILE_EXTENSION))' >> $@
+
+$(BUILDDIR)%.o:%.c
+	@$(MKOUTPUTDIR)
+	$(VERBOSE)echo "+++ compiling object $@"
+	$(VERBOSE2)$(CC) -c $(CFLAGS) -I. $(call PRINT_INTLIB_CFLAGS,$@) $(call PRINT_EXTLIB_CFLAGS,$@) $< -o $@
+
+$(BUILDDIR)%.o:%.C
+	@$(MKOUTPUTDIR)
+	$(VERBOSE)echo "+++ compiling object $@"
+	$(VERBOSE2)$(CXX) -c $(CFLAGS) -I. $(call PRINT_INTLIB_CFLAGS,$@) $(call PRINT_EXTLIB_CFLAGS,$@) $< -o $@
+
+$(BUILDDIR)%.o:%.cpp
+	@$(MKOUTPUTDIR)
+	$(VERBOSE)echo "+++ compiling object $@"
+	$(VERBOSE2)$(CXX) -c $(CFLAGS) -I. $(call PRINT_INTLIB_CFLAGS,$@) $(call PRINT_EXTLIB_CFLAGS,$@) $< -o $@
+
+$(BUILDDIR)%.o:%.cu
+	@$(MKOUTPUTDIR)
+	$(VERBOSE)echo "+++ compiling cuda object $@"
+	$(VERBOSE2)$(CXXCUDA) -c $(CFLAGS_CUDA) -I. $(call PRINT_INTLIB_CFLAGS,$@) $(call PRINT_EXTLIB_CFLAGS,$@) $< -o $@
+
+moc_%.cpp:%.h
+	$(VERBOSE)echo "+++ creating moc $@"
+	$(VERBOSE2)$(MOC) $< -o $@
+
+$(BUILDDIR)%.a:
+	@$(MKOUTPUTDIR)
+	$(VERBOSE)echo "+++ linking library $@"
+	$(VERBOSE2)$(AR) cr $@ $(filter %.o,$^)
+	@touch $@
+	@$(call MKOUTPUTDIR2,$(LIBSYMLINKDIR))
+	$(VERBOSE2)cd $(LIBSYMLINKDIR);$(SYMLINK) ../$(@:$(BUILDDIR)%=%) $(@F)
+
+$(BUILDDIR)%.so:$(BUILDDIR)%.a
+	@$(MKOUTPUTDIR)
+	$(VERBOSE)echo "+++ linking library $@"
+	$(VERBOSE2)$(CXX) -shared -o $@ -Wl,-whole-archive $< -Wl,-no-whole-archive
+	@$(call MKOUTPUTDIR2,$(LIBSYMLINKDIR))
+	$(VERBOSE2)cd $(LIBSYMLINKDIR);$(SYMLINK) ../$(@:$(BUILDDIR)%=%) $(@F)
+
+$(ALL_BINARIES):
+	@$(MKOUTPUTDIR)
+	$(VERBOSE)echo "+++ linking binary $@"
+	$(VERBOSE2)$(CXX) -o $@ $(filter %.o,$^) $(call PRINT_INTLIB_LDFLAGS,$@) $(LDFLAGS) $(call PRINT_EXTLIB_LDFLAGS,$@)
+	@$(call MKOUTPUTDIR2,$(BINSYMLINKDIR))
+	$(VERBOSE2)cd $(BINSYMLINKDIR);$(SYMLINK) ../$(@:$(BUILDDIR)%=%) $(@F)
+
+$(ALL_CHECKS):
+	@$(MKOUTPUTDIR)
+	$(VERBOSE)echo "+++ running test case $@"
+	$(VERBOSE2)$(CXX) -o $@ $(filter %.o,$^) $(call PRINT_INTLIB_LDFLAGS,$@) $(LDFLAGS) $(call PRINT_EXTLIB_LDFLAGS,$@)
+	$(VERBOSE2)cd $(patsubst $(BUILDDIR)%,%,$(dir $@)); $(PROJECTDIR)$@; mv $(PROJECTDIR)$@ $(PROJECTDIR)$@.bak
+
+$(BUILDDIR)%.pc:
+	@$(MKOUTPUTDIR)
+	$(VERBOSE)echo "+++ creating package $@"
+	$(VERBOSE2)echo "Name: $(notdir $@)" > $@
+	$(VERBOSE2)echo "Description: $(if $(PKGDESC_$(dir $@)),$(PKGDESC_$(dir $@)),Just a sub-library)" >> $@
+	$(VERBOSE2)echo "Version: $(if $(PKGVERS_$(dir $@)),$(PKGVERS_$(dir $@)),1.0.0)" >> $@
+	$(VERBOSE2)echo "Requires: $(call PRINT_INTLIB_PKGCONFIG,$@) $(call PRINT_EXTLIB_PKGCONFIG,$@)" >> $@
+	$(VERBOSE2)echo "Libs: -L$(PROJECTDIR)$(dir $@) -l$(patsubst lib%.pc,%,$(notdir $@)) $(call PRINT_EXTLIB_LDFLAGS_NOPKG,$@)" >> $@
+	$(VERBOSE2)echo "Cflags: -I$(PROJECTDIR) $(call PRINT_EXTLIB_CFLAGS_NOPKG,$@)" >> $@
+	@$(call MKOUTPUTDIR2,$(PKGSYMLINKDIR))
+	$(VERBOSE2)cd $(PKGSYMLINKDIR);$(SYMLINK) ../$(@:$(BUILDDIR)%=%) $(@F)
+
+# ----------------------
+# - include dependencies
+#
+# finally, if we know how to make them, we can include all depedency .d files.
+# personally i do not like this line, because you always always always have
+# to make the dependencies then, even if you `make non_existing_target`.
+# furthermore i do not like the idea of having one .d file for each source
+# file, but it seems to be the only way...
+
+-include $(ALL_OBJS:%.o=%.d)
+

+ 97 - 0
Makefile.inc

@@ -0,0 +1,97 @@
+# LIBRARY-DIRECTORY-MAKEFILE
+# conventions:
+# - all subdirectories containing a "Makefile.inc" are considered sublibraries
+#   exception: "progs/" and "tests/" subdirectories!
+# - all ".C", ".cpp" and ".c" files in the current directory are linked to a
+#   library
+# - the library depends on all sublibraries 
+# - the library name is created with $(LIBNAME), i.e. it will be somehow
+#   related to the directory name and with the extension .a
+#   (e.g. lib1/sublib -> lib1_sublib.a)
+# - the library will be added to the default build list ALL_LIBRARIES
+
+# --------------------------------
+# - remember the last subdirectory
+#
+# set the variable $(SUBDIR) correctly to the current subdirectory. this
+# variable can be used throughout the current makefile.inc. The many 
+# SUBDIR_before, _add, and everything are only required so that we can recover
+# the previous content of SUBDIR before exitting the makefile.inc
+
+SUBDIR_add:=$(dir $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)))
+SUBDIR_before:=$(SUBDIR)
+SUBDIR:=$(strip $(SUBDIR_add))
+SUBDIR_before_$(SUBDIR):=$(SUBDIR_before)
+ifeq "$(SUBDIR)" "./"
+SUBDIR:=
+endif
+
+# ------------------------
+# - include subdirectories
+#
+# note the variables $(SUBDIRS_OF_$(SUBDIR)) are required later on to recover
+# the dependencies automatically. if you handle dependencies on your own, you
+# can also dump the $(SUBDIRS_OF_$(SUBDIR)) variable, and include the
+# makefile.inc of the subdirectories on your own...
+
+SUBDIRS_OF_$(SUBDIR):=$(patsubst %/Makefile.inc,%,$(wildcard $(SUBDIR)*/Makefile.inc))
+include $(SUBDIRS_OF_$(SUBDIR):%=%/Makefile.inc)
+
+# ----------------------------
+# - include local dependencies
+#
+# you can specify libraries needed by the individual objects or by the whole
+# directory. the object specific additional libraries are only considered
+# when compiling the specific object files
+# TODO: update documentation...
+
+-include $(SUBDIR)libdepend.inc
+
+$(foreach d,$(filter-out %progs %tests,$(SUBDIRS_OF_$(SUBDIR))),$(eval $(call PKG_DEPEND_INT,$(d))))
+
+# ---------------------------
+# - objects in this directory
+#
+# the use of the variable $(OBJS) is not mandatory. it is mandatory however
+# to update $(ALL_OBJS) in a way that it contains the path and name of
+# all objects. otherwise we can not include the appropriate .d files.
+
+OBJS:=$(patsubst %.cpp,$(OBJDIR)%.o,$(notdir $(wildcard $(SUBDIR)*.cpp))) \
+      $(patsubst %.C,$(OBJDIR)%.o,$(notdir $(wildcard $(SUBDIR)*.C))) \
+      $(patsubst %.c,$(OBJDIR)%.o,$(notdir $(wildcard $(SUBDIR)*.c)))
+ALL_OBJS += $(OBJS)
+
+# ----------------------------
+# - binaries in this directory
+#
+# output of binaries in this directory. none of the variables has to be used.
+# but everything you add to $(ALL_LIBRARIES) and $(ALL_BINARIES) will be
+# compiled with `make all`. be sure again to add the files with full path.
+
+LIBRARY_BASENAME:=$(call LIBNAME,$(SUBDIR))
+ifneq "$(SUBDIR)" ""
+ALL_LIBRARIES+=$(LIBDIR)$(LIBRARY_BASENAME).$(LINK_FILE_EXTENSION)
+endif
+
+# ---------------------
+# - binary dependencies
+#
+# there is no way of determining the binary dependencies automatically, so we
+# follow conventions. the current library depends on all sublibraries.
+# all other dependencies have to be added manually by specifying, that the
+# current .pc file depends on some other .pc file. binaries depending on
+# libraries should exclusivelly use the .pc files as well.
+
+$(LIBDIR)$(LIBRARY_BASENAME).a:$(OBJS) \
+	$(call PRINT_INTLIB_DEPS,$(PKGDIR)$(LIBRARY_BASENAME).a,.$(LINK_FILE_EXTENSION))
+$(PKGDIR)$(LIBRARY_BASENAME).pc: \
+	$(call PRINT_INTLIB_DEPS,$(PKGDIR)$(LIBRARY_BASENAME).pc,.pc)
+
+# -------------------
+# - subdir management
+#
+# as the last step, always add this line to correctly recover the subdirectory
+# of the makefile including this one!
+
+SUBDIR:=$(SUBDIR_before_$(SUBDIR))
+

+ 8 - 0
PACKAGES

@@ -0,0 +1,8 @@
+Recommended packages for full functionality
+
+libqt4-dev
+libcppunit-dev
+libbz2-dev
+libmagick++-dev
+libjpeg62-dev
+libglut3-dev

+ 42 - 0
README

@@ -0,0 +1,42 @@
+Installation
+============
+
+git clone /home/dbv/git/nice/
+
+-source the setenv.sh in the nice-directory (and nowhere else) to setup all necessary variables, relative paths, libraries etc.
+-make
+
+
+Additional Sub-Libraries
+=======================
+
+gp-hik-core:
+cd ../nice-core/ (goto NICE path)
+git clone /home/dbv/git/nice/gp-hik-core/
+(*) This module is also available at git-hub. Please replace the clone-command by the corresponding github clone command.
+
+gp-hik-exp:
+cd ../nice-core/ (goto NICE path)
+git clone /home/dbv/git/nice/gp-hik-exp/
+
+optimization:
+cd ../nice-core/ (goto NICE path)
+git clone /home/dbv/git/nice/optimization/
+
+vislearning:
+cd ../nice/ (goto NICE path)
+git clone /home/dbv/git/nice/vislearning/
+
+
+Known Issues
+============
+
+- fixing the -lg2c problem
+=> sudo ln -s /usr/lib/libg2c.so.0 /usr/lib/libg2c.so
+   sudo ln -s /usr/lib64/libg2c.so.0 /usr/lib64/libg2c.so
+
+Requirements
+============
+
+install gfortran ( openSUSE: gcc46-gfortran )
+install freeglut-devel

+ 5336 - 0
TODO/valgrind_testimagetools.out

@@ -0,0 +1,5336 @@
+==26546== Memcheck, a memory error detector
+==26546== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
+==26546== Using Valgrind-3.6.1 and LibVEX; rerun with -h for copyright info
+==26546== Command: /home/froehlich/libs/nice/BUILD_x86_64/core/image/tests/libcore_image_tests.bak
+==26546== 
+==26546== Syscall param write(buf) points to uninitialised byte(s)
+==26546==    at 0x7AFB300: __write_nocancel (in /lib64/libpthread-2.11.3.so)
+==26546==    by 0x99C2475: ??? (in /usr/lib64/libstdc++.so.6.0.14)
+==26546==    by 0x997B865: std::basic_filebuf<char, std::char_traits<char> >::_M_convert_to_external(char*, long) (in /usr/lib64/libstdc++.so.6.0.14)
+==26546==    by 0x997B981: std::basic_filebuf<char, std::char_traits<char> >::overflow(int) (in /usr/lib64/libstdc++.so.6.0.14)
+==26546==    by 0x997BBF2: std::basic_filebuf<char, std::char_traits<char> >::_M_terminate_output() (in /usr/lib64/libstdc++.so.6.0.14)
+==26546==    by 0x997C1F7: std::basic_filebuf<char, std::char_traits<char> >::close() (in /usr/lib64/libstdc++.so.6.0.14)
+==26546==    by 0x42B059: void NICE::ImageFile::writerPXM<unsigned char>(NICE::GrayColorImageCommonImplementationT<unsigned char> const*) const (fstream:739)
+==26546==    by 0x42BADA: void NICE::ImageFile::writer<unsigned char>(NICE::GrayColorImageCommonImplementationT<unsigned char> const*) const (ImageFile.tcc:112)
+==26546==    by 0x542944: NICE::ImageFileListWriter::writeColorImage(NICE::ColorImageT<unsigned char> const&) (GrayColorImageCommonImplementationT.tcc:128)
+==26546==    by 0x412DA6: TestImageFileList::testIO() (TestImageFileList.cpp:22)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==  Address 0xb22e970 is 0 bytes inside a block of size 8,192 alloc'd
+==26546==    at 0x4C25D99: operator new[](unsigned long) (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
+==26546==    by 0x997B71B: std::basic_filebuf<char, std::char_traits<char> >::_M_allocate_internal_buffer() (in /usr/lib64/libstdc++.so.6.0.14)
+==26546==    by 0x997C3B9: std::basic_filebuf<char, std::char_traits<char> >::open(char const*, std::_Ios_Openmode) (in /usr/lib64/libstdc++.so.6.0.14)
+==26546==    by 0x42AC01: void NICE::ImageFile::writerPXM<unsigned char>(NICE::GrayColorImageCommonImplementationT<unsigned char> const*) const (fstream:700)
+==26546==    by 0x42BADA: void NICE::ImageFile::writer<unsigned char>(NICE::GrayColorImageCommonImplementationT<unsigned char> const*) const (ImageFile.tcc:112)
+==26546==    by 0x542944: NICE::ImageFileListWriter::writeColorImage(NICE::ColorImageT<unsigned char> const&) (GrayColorImageCommonImplementationT.tcc:128)
+==26546==    by 0x412DA6: TestImageFileList::testIO() (TestImageFileList.cpp:22)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546== 
+==26546== Syscall param sched_setaffinity(mask) points to unaddressable byte(s)
+==26546==    at 0xA14F279: syscall (in /lib64/libc-2.11.3.so)
+==26546==    by 0xAA830D3: __kmp_affinity_determine_capable (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libguide.so)
+==26546==    by 0xAA76E8B: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libguide.so)
+==26546==    by 0xAA78621: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libguide.so)
+==26546==    by 0xAA757E4: __kmp_serial_initialize (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libguide.so)
+==26546==    by 0xAA678AD: __kmpc_global_thread_num (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libguide.so)
+==26546==    by 0xCF719AE: ippiFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52AD92: NICE::gaussY(NICE::ImageT<unsigned char> const&, unsigned int const&, NICE::ImageT<unsigned char>*) (ippwrapper.tcc:15591)
+==26546==    by 0x52B238: NICE::sobelX(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:566)
+==26546==    by 0x54D0D8: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:607)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF723E8: piFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF71C1A: ippiFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52AD92: NICE::gaussY(NICE::ImageT<unsigned char> const&, unsigned int const&, NICE::ImageT<unsigned char>*) (ippwrapper.tcc:15591)
+==26546==    by 0x52B238: NICE::sobelX(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:566)
+==26546==    by 0x54D0D8: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:607)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF72495: piFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF71C1A: ippiFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52AD92: NICE::gaussY(NICE::ImageT<unsigned char> const&, unsigned int const&, NICE::ImageT<unsigned char>*) (ippwrapper.tcc:15591)
+==26546==    by 0x52B238: NICE::sobelX(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:566)
+==26546==    by 0x54D0D8: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:607)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF72548: piFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF71C1A: ippiFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52AD92: NICE::gaussY(NICE::ImageT<unsigned char> const&, unsigned int const&, NICE::ImageT<unsigned char>*) (ippwrapper.tcc:15591)
+==26546==    by 0x52B238: NICE::sobelX(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:566)
+==26546==    by 0x54D0D8: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:607)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF725FA: piFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF71C1A: ippiFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52AD92: NICE::gaussY(NICE::ImageT<unsigned char> const&, unsigned int const&, NICE::ImageT<unsigned char>*) (ippwrapper.tcc:15591)
+==26546==    by 0x52B238: NICE::sobelX(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:566)
+==26546==    by 0x54D0D8: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:607)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF72730: piFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF71C1A: ippiFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52AD92: NICE::gaussY(NICE::ImageT<unsigned char> const&, unsigned int const&, NICE::ImageT<unsigned char>*) (ippwrapper.tcc:15591)
+==26546==    by 0x52B238: NICE::sobelX(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:566)
+==26546==    by 0x54D0D8: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:607)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF65261: piFilterRow32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF64F17: L_ippiFilterRow32f_16s_C1R_10327__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF733E2: ippiFilterRow_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52B5D5: NICE::sobelX(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:580)
+==26546==    by 0x54D0D8: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:607)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF6526A: piFilterRow32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF64F17: L_ippiFilterRow32f_16s_C1R_10327__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF733E2: ippiFilterRow_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52B5D5: NICE::sobelX(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:580)
+==26546==    by 0x54D0D8: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:607)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF65273: piFilterRow32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF64F17: L_ippiFilterRow32f_16s_C1R_10327__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF733E2: ippiFilterRow_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52B5D5: NICE::sobelX(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:580)
+==26546==    by 0x54D0D8: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:607)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF652B6: piFilterRow32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF64F17: L_ippiFilterRow32f_16s_C1R_10327__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF733E2: ippiFilterRow_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52B5D5: NICE::sobelX(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:580)
+==26546==    by 0x54D0D8: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:607)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF652E1: piFilterRow32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF64F17: L_ippiFilterRow32f_16s_C1R_10327__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF733E2: ippiFilterRow_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52B5D5: NICE::sobelX(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:580)
+==26546==    by 0x54D0D8: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:607)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF6530F: piFilterRow32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF64F17: L_ippiFilterRow32f_16s_C1R_10327__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF733E2: ippiFilterRow_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52B5D5: NICE::sobelX(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:580)
+==26546==    by 0x54D0D8: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:607)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF65318: piFilterRow32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF64F17: L_ippiFilterRow32f_16s_C1R_10327__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF733E2: ippiFilterRow_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52B5D5: NICE::sobelX(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:580)
+==26546==    by 0x54D0D8: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:607)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF65321: piFilterRow32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF64F17: L_ippiFilterRow32f_16s_C1R_10327__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF733E2: ippiFilterRow_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52B5D5: NICE::sobelX(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:580)
+==26546==    by 0x54D0D8: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:607)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF6534A: piFilterRow32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF64F17: L_ippiFilterRow32f_16s_C1R_10327__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF733E2: ippiFilterRow_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52B5D5: NICE::sobelX(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:580)
+==26546==    by 0x54D0D8: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:607)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF653BA: piFilterRow32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF64F17: L_ippiFilterRow32f_16s_C1R_10327__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF733E2: ippiFilterRow_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52B5D5: NICE::sobelX(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:580)
+==26546==    by 0x54D0D8: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:607)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF653C3: piFilterRow32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF64F17: L_ippiFilterRow32f_16s_C1R_10327__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF733E2: ippiFilterRow_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52B5D5: NICE::sobelX(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:580)
+==26546==    by 0x54D0D8: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:607)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF653CC: piFilterRow32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF64F17: L_ippiFilterRow32f_16s_C1R_10327__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF733E2: ippiFilterRow_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52B5D5: NICE::sobelX(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:580)
+==26546==    by 0x54D0D8: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:607)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF653F3: piFilterRow32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF64F17: L_ippiFilterRow32f_16s_C1R_10327__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF733E2: ippiFilterRow_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52B5D5: NICE::sobelX(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:580)
+==26546==    by 0x54D0D8: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:607)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF65461: piFilterRow32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF64F17: L_ippiFilterRow32f_16s_C1R_10327__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF733E2: ippiFilterRow_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52B5D5: NICE::sobelX(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:580)
+==26546==    by 0x54D0D8: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:607)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF6546A: piFilterRow32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF64F17: L_ippiFilterRow32f_16s_C1R_10327__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF733E2: ippiFilterRow_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52B5D5: NICE::sobelX(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:580)
+==26546==    by 0x54D0D8: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:607)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF6546F: piFilterRow32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF64F17: L_ippiFilterRow32f_16s_C1R_10327__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF733E2: ippiFilterRow_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52B5D5: NICE::sobelX(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:580)
+==26546==    by 0x54D0D8: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:607)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF654AC: piFilterRow32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF64F17: L_ippiFilterRow32f_16s_C1R_10327__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF733E2: ippiFilterRow_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52B5D5: NICE::sobelX(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:580)
+==26546==    by 0x54D0D8: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:607)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF6529E: piFilterRow32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF64F17: L_ippiFilterRow32f_16s_C1R_10327__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF733E2: ippiFilterRow_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52B5D5: NICE::sobelX(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:580)
+==26546==    by 0x54D0D8: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:607)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF65362: piFilterRow32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF64F17: L_ippiFilterRow32f_16s_C1R_10327__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF733E2: ippiFilterRow_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52B5D5: NICE::sobelX(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:580)
+==26546==    by 0x54D0D8: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:607)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF6540B: piFilterRow32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF64F17: L_ippiFilterRow32f_16s_C1R_10327__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF733E2: ippiFilterRow_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52B5D5: NICE::sobelX(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:580)
+==26546==    by 0x54D0D8: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:607)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF654D1: piFilterRow32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF64F17: L_ippiFilterRow32f_16s_C1R_10327__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF733E2: ippiFilterRow_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52B5D5: NICE::sobelX(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:580)
+==26546==    by 0x54D0D8: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:607)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF65549: piFilterRow32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF64F17: L_ippiFilterRow32f_16s_C1R_10327__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF733E2: ippiFilterRow_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52B5D5: NICE::sobelX(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:580)
+==26546==    by 0x54D0D8: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:607)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF65552: piFilterRow32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF64F17: L_ippiFilterRow32f_16s_C1R_10327__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF733E2: ippiFilterRow_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52B5D5: NICE::sobelX(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:580)
+==26546==    by 0x54D0D8: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:607)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF65557: piFilterRow32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF64F17: L_ippiFilterRow32f_16s_C1R_10327__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF733E2: ippiFilterRow_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52B5D5: NICE::sobelX(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:580)
+==26546==    by 0x54D0D8: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:607)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF65593: piFilterRow32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF64F17: L_ippiFilterRow32f_16s_C1R_10327__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF733E2: ippiFilterRow_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52B5D5: NICE::sobelX(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:580)
+==26546==    by 0x54D0D8: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:607)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF655B7: piFilterRow32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF64F17: L_ippiFilterRow32f_16s_C1R_10327__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF733E2: ippiFilterRow_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52B5D5: NICE::sobelX(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:580)
+==26546==    by 0x54D0D8: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:607)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF6557B: piFilterRow32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF64F17: L_ippiFilterRow32f_16s_C1R_10327__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF733E2: ippiFilterRow_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52B5D5: NICE::sobelX(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:580)
+==26546==    by 0x54D0D8: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:607)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF65432: piFilterRow32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF64F17: L_ippiFilterRow32f_16s_C1R_10327__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF733E2: ippiFilterRow_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52B5D5: NICE::sobelX(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:580)
+==26546==    by 0x54D0D8: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:607)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF75B4E: piFilterRow_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF756E7: L_ippiFilterRow_8u_C1R_8912__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52BF6C: NICE::gaussX(NICE::ImageT<unsigned char> const&, unsigned int const&, NICE::ImageT<unsigned char>*) (ippwrapper.tcc:15691)
+==26546==    by 0x52C4B8: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:647)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF75BF3: piFilterRow_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF756E7: L_ippiFilterRow_8u_C1R_8912__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52BF6C: NICE::gaussX(NICE::ImageT<unsigned char> const&, unsigned int const&, NICE::ImageT<unsigned char>*) (ippwrapper.tcc:15691)
+==26546==    by 0x52C4B8: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:647)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF75C92: piFilterRow_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF756E7: L_ippiFilterRow_8u_C1R_8912__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52BF6C: NICE::gaussX(NICE::ImageT<unsigned char> const&, unsigned int const&, NICE::ImageT<unsigned char>*) (ippwrapper.tcc:15691)
+==26546==    by 0x52C4B8: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:647)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF75D25: piFilterRow_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF756E7: L_ippiFilterRow_8u_C1R_8912__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52BF6C: NICE::gaussX(NICE::ImageT<unsigned char> const&, unsigned int const&, NICE::ImageT<unsigned char>*) (ippwrapper.tcc:15691)
+==26546==    by 0x52C4B8: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:647)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF75E3D: piFilterRow_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF756E7: L_ippiFilterRow_8u_C1R_8912__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52BF6C: NICE::gaussX(NICE::ImageT<unsigned char> const&, unsigned int const&, NICE::ImageT<unsigned char>*) (ippwrapper.tcc:15691)
+==26546==    by 0x52C4B8: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (Filter.cpp:647)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF5FF07: piFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF5F964: ippiFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF6FF37: ippiFilterColumn_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52C857: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (ippwrapper.tcc:15611)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF5FF10: piFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF5F964: ippiFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF6FF37: ippiFilterColumn_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52C857: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (ippwrapper.tcc:15611)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF5FF19: piFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF5F964: ippiFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF6FF37: ippiFilterColumn_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52C857: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (ippwrapper.tcc:15611)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF5FF44: piFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF5F964: ippiFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF6FF37: ippiFilterColumn_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52C857: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (ippwrapper.tcc:15611)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF5FFAD: piFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF5F964: ippiFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF6FF37: ippiFilterColumn_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52C857: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (ippwrapper.tcc:15611)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF5FFB6: piFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF5F964: ippiFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF6FF37: ippiFilterColumn_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52C857: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (ippwrapper.tcc:15611)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF5FFBF: piFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF5F964: ippiFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF6FF37: ippiFilterColumn_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52C857: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (ippwrapper.tcc:15611)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF5FFE8: piFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF5F964: ippiFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF6FF37: ippiFilterColumn_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52C857: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (ippwrapper.tcc:15611)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF60050: piFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF5F964: ippiFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF6FF37: ippiFilterColumn_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52C857: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (ippwrapper.tcc:15611)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF60059: piFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF5F964: ippiFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF6FF37: ippiFilterColumn_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52C857: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (ippwrapper.tcc:15611)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF6005E: piFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF5F964: ippiFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF6FF37: ippiFilterColumn_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52C857: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (ippwrapper.tcc:15611)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF60084: piFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF5F964: ippiFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF6FF37: ippiFilterColumn_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52C857: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (ippwrapper.tcc:15611)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF600E9: piFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF5F964: ippiFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF6FF37: ippiFilterColumn_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52C857: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (ippwrapper.tcc:15611)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF600F2: piFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF5F964: ippiFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF6FF37: ippiFilterColumn_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52C857: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (ippwrapper.tcc:15611)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF600F7: piFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF5F964: ippiFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF6FF37: ippiFilterColumn_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52C857: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (ippwrapper.tcc:15611)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF6011A: piFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF5F964: ippiFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF6FF37: ippiFilterColumn_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52C857: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (ippwrapper.tcc:15611)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF601C9: piFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF5F964: ippiFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF6FF37: ippiFilterColumn_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52C857: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (ippwrapper.tcc:15611)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF601D2: piFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF5F964: ippiFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF6FF37: ippiFilterColumn_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52C857: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (ippwrapper.tcc:15611)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF601D7: piFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF5F964: ippiFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF6FF37: ippiFilterColumn_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52C857: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (ippwrapper.tcc:15611)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF601FA: piFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF5F964: ippiFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF6FF37: ippiFilterColumn_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52C857: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (ippwrapper.tcc:15611)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF5FF5A: piFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF5F964: ippiFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF6FF37: ippiFilterColumn_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52C857: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (ippwrapper.tcc:15611)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF5FF85: piFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF5F964: ippiFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF6FF37: ippiFilterColumn_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52C857: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (ippwrapper.tcc:15611)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF5FFFE: piFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF5F964: ippiFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF6FF37: ippiFilterColumn_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52C857: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (ippwrapper.tcc:15611)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF6009A: piFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF5F964: ippiFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF6FF37: ippiFilterColumn_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52C857: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (ippwrapper.tcc:15611)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF60130: piFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF5F964: ippiFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF6FF37: ippiFilterColumn_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52C857: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (ippwrapper.tcc:15611)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF600C0: piFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF5F964: ippiFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF6FF37: ippiFilterColumn_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52C857: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (ippwrapper.tcc:15611)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF60153: piFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF5F964: ippiFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF6FF37: ippiFilterColumn_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52C857: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (ippwrapper.tcc:15611)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF60210: piFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF5F964: ippiFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF6FF37: ippiFilterColumn_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52C857: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (ippwrapper.tcc:15611)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF60233: piFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF5F964: ippiFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF6FF37: ippiFilterColumn_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52C857: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (ippwrapper.tcc:15611)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF60027: piFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF5F964: ippiFilterColumn32f_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF6FF37: ippiFilterColumn_16s_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52C857: NICE::sobelY(NICE::ImageT<unsigned char> const&, NICE::ImageT<short>*) (ippwrapper.tcc:15611)
+==26546==    by 0x54D0FB: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:608)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x54D28E: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:639)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x54D2A9: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:641)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x54D2B4: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:641)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x54D360: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (stl_pair.h:162)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x54D366: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (stl_pair.h:162)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x54F7C1: void std::__adjust_heap<__gnu_cxx::__normal_iterator<std::pair<double, std::pair<int, int> >*, std::vector<std::pair<double, std::pair<int, int> >, std::allocator<std::pair<double, std::pair<int, int> > > > >, long, std::pair<double, std::pair<int, int> >, std::less<std::pair<double, std::pair<int, int> > > >(__gnu_cxx::__normal_iterator<std::pair<double, std::pair<int, int> >*, std::vector<std::pair<double, std::pair<int, int> >, std::allocator<std::pair<double, std::pair<int, int> > > > >, long, long, std::pair<double, std::pair<int, int> >, std::less<std::pair<double, std::pair<int, int> > >) (stl_pair.h:162)
+==26546==    by 0x54D62C: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (stl_heap.h:332)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x54F7C7: void std::__adjust_heap<__gnu_cxx::__normal_iterator<std::pair<double, std::pair<int, int> >*, std::vector<std::pair<double, std::pair<int, int> >, std::allocator<std::pair<double, std::pair<int, int> > > > >, long, std::pair<double, std::pair<int, int> >, std::less<std::pair<double, std::pair<int, int> > > >(__gnu_cxx::__normal_iterator<std::pair<double, std::pair<int, int> >*, std::vector<std::pair<double, std::pair<int, int> >, std::allocator<std::pair<double, std::pair<int, int> > > > >, long, long, std::pair<double, std::pair<int, int> >, std::less<std::pair<double, std::pair<int, int> > >) (stl_pair.h:162)
+==26546==    by 0x54D62C: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (stl_heap.h:332)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x54F831: void std::__adjust_heap<__gnu_cxx::__normal_iterator<std::pair<double, std::pair<int, int> >*, std::vector<std::pair<double, std::pair<int, int> >, std::allocator<std::pair<double, std::pair<int, int> > > > >, long, std::pair<double, std::pair<int, int> >, std::less<std::pair<double, std::pair<int, int> > > >(__gnu_cxx::__normal_iterator<std::pair<double, std::pair<int, int> >*, std::vector<std::pair<double, std::pair<int, int> >, std::allocator<std::pair<double, std::pair<int, int> > > > >, long, long, std::pair<double, std::pair<int, int> >, std::less<std::pair<double, std::pair<int, int> > >) (stl_pair.h:162)
+==26546==    by 0x54D62C: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (stl_heap.h:332)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x54F837: void std::__adjust_heap<__gnu_cxx::__normal_iterator<std::pair<double, std::pair<int, int> >*, std::vector<std::pair<double, std::pair<int, int> >, std::allocator<std::pair<double, std::pair<int, int> > > > >, long, std::pair<double, std::pair<int, int> >, std::less<std::pair<double, std::pair<int, int> > > >(__gnu_cxx::__normal_iterator<std::pair<double, std::pair<int, int> >*, std::vector<std::pair<double, std::pair<int, int> >, std::allocator<std::pair<double, std::pair<int, int> > > > >, long, long, std::pair<double, std::pair<int, int> >, std::less<std::pair<double, std::pair<int, int> > >) (stl_pair.h:162)
+==26546==    by 0x54D62C: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (stl_heap.h:332)
+==26546==    by 0x41C35D: TestImageTools::testKLT() (TestImageTools.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x54D28E: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:639)
+==26546==    by 0x41C4FE: TestImageTools::testKLT() (TestImageTools.cpp:441)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x54D2A9: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:641)
+==26546==    by 0x41C4FE: TestImageTools::testKLT() (TestImageTools.cpp:441)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x54D2B4: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (ImageTools.cpp:641)
+==26546==    by 0x41C4FE: TestImageTools::testKLT() (TestImageTools.cpp:441)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x54D360: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (stl_pair.h:162)
+==26546==    by 0x41C4FE: TestImageTools::testKLT() (TestImageTools.cpp:441)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x54D366: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (stl_pair.h:162)
+==26546==    by 0x41C4FE: TestImageTools::testKLT() (TestImageTools.cpp:441)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x54F7C1: void std::__adjust_heap<__gnu_cxx::__normal_iterator<std::pair<double, std::pair<int, int> >*, std::vector<std::pair<double, std::pair<int, int> >, std::allocator<std::pair<double, std::pair<int, int> > > > >, long, std::pair<double, std::pair<int, int> >, std::less<std::pair<double, std::pair<int, int> > > >(__gnu_cxx::__normal_iterator<std::pair<double, std::pair<int, int> >*, std::vector<std::pair<double, std::pair<int, int> >, std::allocator<std::pair<double, std::pair<int, int> > > > >, long, long, std::pair<double, std::pair<int, int> >, std::less<std::pair<double, std::pair<int, int> > >) (stl_pair.h:162)
+==26546==    by 0x54D62C: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (stl_heap.h:332)
+==26546==    by 0x41C4FE: TestImageTools::testKLT() (TestImageTools.cpp:441)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x54F7C7: void std::__adjust_heap<__gnu_cxx::__normal_iterator<std::pair<double, std::pair<int, int> >*, std::vector<std::pair<double, std::pair<int, int> >, std::allocator<std::pair<double, std::pair<int, int> > > > >, long, std::pair<double, std::pair<int, int> >, std::less<std::pair<double, std::pair<int, int> > > >(__gnu_cxx::__normal_iterator<std::pair<double, std::pair<int, int> >*, std::vector<std::pair<double, std::pair<int, int> >, std::allocator<std::pair<double, std::pair<int, int> > > > >, long, long, std::pair<double, std::pair<int, int> >, std::less<std::pair<double, std::pair<int, int> > >) (stl_pair.h:162)
+==26546==    by 0x54D62C: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (stl_heap.h:332)
+==26546==    by 0x41C4FE: TestImageTools::testKLT() (TestImageTools.cpp:441)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x54F831: void std::__adjust_heap<__gnu_cxx::__normal_iterator<std::pair<double, std::pair<int, int> >*, std::vector<std::pair<double, std::pair<int, int> >, std::allocator<std::pair<double, std::pair<int, int> > > > >, long, std::pair<double, std::pair<int, int> >, std::less<std::pair<double, std::pair<int, int> > > >(__gnu_cxx::__normal_iterator<std::pair<double, std::pair<int, int> >*, std::vector<std::pair<double, std::pair<int, int> >, std::allocator<std::pair<double, std::pair<int, int> > > > >, long, long, std::pair<double, std::pair<int, int> >, std::less<std::pair<double, std::pair<int, int> > >) (stl_pair.h:162)
+==26546==    by 0x54D62C: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (stl_heap.h:332)
+==26546==    by 0x41C4FE: TestImageTools::testKLT() (TestImageTools.cpp:441)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x54F837: void std::__adjust_heap<__gnu_cxx::__normal_iterator<std::pair<double, std::pair<int, int> >*, std::vector<std::pair<double, std::pair<int, int> >, std::allocator<std::pair<double, std::pair<int, int> > > > >, long, std::pair<double, std::pair<int, int> >, std::less<std::pair<double, std::pair<int, int> > > >(__gnu_cxx::__normal_iterator<std::pair<double, std::pair<int, int> >*, std::vector<std::pair<double, std::pair<int, int> >, std::allocator<std::pair<double, std::pair<int, int> > > > >, long, long, std::pair<double, std::pair<int, int> >, std::less<std::pair<double, std::pair<int, int> > >) (stl_pair.h:162)
+==26546==    by 0x54D62C: NICE::KLTCornerDetector(NICE::ImageT<unsigned char> const&, unsigned int const&, double const&, unsigned int const&, unsigned int const&, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (stl_heap.h:332)
+==26546==    by 0x41C4FE: TestImageTools::testKLT() (TestImageTools.cpp:441)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x1015CA10: ??? (in /usr/lib64/ImageMagick-6.6.5/modules-Q16/coders/png.so)
+==26546==    by 0x101676DA: ??? (in /usr/lib64/ImageMagick-6.6.5/modules-Q16/coders/png.so)
+==26546==    by 0x10167CAD: ??? (in /usr/lib64/ImageMagick-6.6.5/modules-Q16/coders/png.so)
+==26546==    by 0x57589F1: WriteImage (in /usr/lib64/libMagickCore.so.4.0.0)
+==26546==    by 0x5189CC9: Magick::Image::write(std::string const&) (in /usr/lib64/libMagick++.so.4.0.0)
+==26546==    by 0x5358B2: void NICE::ImageFile::writerMagick<unsigned char>(NICE::GrayColorImageCommonImplementationT<unsigned char> const*) const (ImageFile.cpp:161)
+==26546==    by 0x42B6E4: void NICE::ImageFile::writer<unsigned char>(NICE::GrayColorImageCommonImplementationT<unsigned char> const*) const (ImageFile.tcc:80)
+==26546==    by 0x426F40: TestImageTools::testaddConstBorder() (GrayColorImageCommonImplementationT.tcc:128)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x1015CA3B: ??? (in /usr/lib64/ImageMagick-6.6.5/modules-Q16/coders/png.so)
+==26546==    by 0x101676DA: ??? (in /usr/lib64/ImageMagick-6.6.5/modules-Q16/coders/png.so)
+==26546==    by 0x10167CAD: ??? (in /usr/lib64/ImageMagick-6.6.5/modules-Q16/coders/png.so)
+==26546==    by 0x57589F1: WriteImage (in /usr/lib64/libMagickCore.so.4.0.0)
+==26546==    by 0x5189CC9: Magick::Image::write(std::string const&) (in /usr/lib64/libMagick++.so.4.0.0)
+==26546==    by 0x5358B2: void NICE::ImageFile::writerMagick<unsigned char>(NICE::GrayColorImageCommonImplementationT<unsigned char> const*) const (ImageFile.cpp:161)
+==26546==    by 0x42B6E4: void NICE::ImageFile::writer<unsigned char>(NICE::GrayColorImageCommonImplementationT<unsigned char> const*) const (ImageFile.tcc:80)
+==26546==    by 0x426F40: TestImageTools::testaddConstBorder() (GrayColorImageCommonImplementationT.tcc:128)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x1015CC10: ??? (in /usr/lib64/ImageMagick-6.6.5/modules-Q16/coders/png.so)
+==26546==    by 0x101677A3: ??? (in /usr/lib64/ImageMagick-6.6.5/modules-Q16/coders/png.so)
+==26546==    by 0x10167CAD: ??? (in /usr/lib64/ImageMagick-6.6.5/modules-Q16/coders/png.so)
+==26546==    by 0x57589F1: WriteImage (in /usr/lib64/libMagickCore.so.4.0.0)
+==26546==    by 0x5189CC9: Magick::Image::write(std::string const&) (in /usr/lib64/libMagick++.so.4.0.0)
+==26546==    by 0x5358B2: void NICE::ImageFile::writerMagick<unsigned char>(NICE::GrayColorImageCommonImplementationT<unsigned char> const*) const (ImageFile.cpp:161)
+==26546==    by 0x42B6E4: void NICE::ImageFile::writer<unsigned char>(NICE::GrayColorImageCommonImplementationT<unsigned char> const*) const (ImageFile.tcc:80)
+==26546==    by 0x426F40: TestImageTools::testaddConstBorder() (GrayColorImageCommonImplementationT.tcc:128)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546== 
+==26546== Use of uninitialised value of size 8
+==26546==    at 0x8E82BDB: crc32 (in /lib64/libz.so.1.2.5)
+==26546==    by 0x103ACAB9: ??? (in /usr/lib64/libpng14.so.14.4.0)
+==26546==    by 0x103B62D5: png_write_chunk (in /usr/lib64/libpng14.so.14.4.0)
+==26546==    by 0x103B6A45: ??? (in /usr/lib64/libpng14.so.14.4.0)
+==26546==    by 0x103B8B01: ??? (in /usr/lib64/libpng14.so.14.4.0)
+==26546==    by 0x103B8F53: ??? (in /usr/lib64/libpng14.so.14.4.0)
+==26546==    by 0x103B9328: ??? (in /usr/lib64/libpng14.so.14.4.0)
+==26546==    by 0x103BD418: png_write_row (in /usr/lib64/libpng14.so.14.4.0)
+==26546==    by 0x10165182: ??? (in /usr/lib64/ImageMagick-6.6.5/modules-Q16/coders/png.so)
+==26546==    by 0x10167CAD: ??? (in /usr/lib64/ImageMagick-6.6.5/modules-Q16/coders/png.so)
+==26546==    by 0x57589F1: WriteImage (in /usr/lib64/libMagickCore.so.4.0.0)
+==26546==    by 0x5189CC9: Magick::Image::write(std::string const&) (in /usr/lib64/libMagick++.so.4.0.0)
+==26546== 
+==26546== Use of uninitialised value of size 8
+==26546==    at 0x8E82BDF: crc32 (in /lib64/libz.so.1.2.5)
+==26546==    by 0x103ACAB9: ??? (in /usr/lib64/libpng14.so.14.4.0)
+==26546==    by 0x103B62D5: png_write_chunk (in /usr/lib64/libpng14.so.14.4.0)
+==26546==    by 0x103B6A45: ??? (in /usr/lib64/libpng14.so.14.4.0)
+==26546==    by 0x103B8B01: ??? (in /usr/lib64/libpng14.so.14.4.0)
+==26546==    by 0x103B8F53: ??? (in /usr/lib64/libpng14.so.14.4.0)
+==26546==    by 0x103B9328: ??? (in /usr/lib64/libpng14.so.14.4.0)
+==26546==    by 0x103BD418: png_write_row (in /usr/lib64/libpng14.so.14.4.0)
+==26546==    by 0x10165182: ??? (in /usr/lib64/ImageMagick-6.6.5/modules-Q16/coders/png.so)
+==26546==    by 0x10167CAD: ??? (in /usr/lib64/ImageMagick-6.6.5/modules-Q16/coders/png.so)
+==26546==    by 0x57589F1: WriteImage (in /usr/lib64/libMagickCore.so.4.0.0)
+==26546==    by 0x5189CC9: Magick::Image::write(std::string const&) (in /usr/lib64/libMagick++.so.4.0.0)
+==26546== 
+==26546== Use of uninitialised value of size 8
+==26546==    at 0x8E82BE6: crc32 (in /lib64/libz.so.1.2.5)
+==26546==    by 0x103ACAB9: ??? (in /usr/lib64/libpng14.so.14.4.0)
+==26546==    by 0x103B62D5: png_write_chunk (in /usr/lib64/libpng14.so.14.4.0)
+==26546==    by 0x103B6A45: ??? (in /usr/lib64/libpng14.so.14.4.0)
+==26546==    by 0x103B8B01: ??? (in /usr/lib64/libpng14.so.14.4.0)
+==26546==    by 0x103B8F53: ??? (in /usr/lib64/libpng14.so.14.4.0)
+==26546==    by 0x103B9328: ??? (in /usr/lib64/libpng14.so.14.4.0)
+==26546==    by 0x103BD418: png_write_row (in /usr/lib64/libpng14.so.14.4.0)
+==26546==    by 0x10165182: ??? (in /usr/lib64/ImageMagick-6.6.5/modules-Q16/coders/png.so)
+==26546==    by 0x10167CAD: ??? (in /usr/lib64/ImageMagick-6.6.5/modules-Q16/coders/png.so)
+==26546==    by 0x57589F1: WriteImage (in /usr/lib64/libMagickCore.so.4.0.0)
+==26546==    by 0x5189CC9: Magick::Image::write(std::string const&) (in /usr/lib64/libMagick++.so.4.0.0)
+==26546== 
+==26546== Use of uninitialised value of size 8
+==26546==    at 0x8E82C27: crc32 (in /lib64/libz.so.1.2.5)
+==26546==    by 0x103ACAB9: ??? (in /usr/lib64/libpng14.so.14.4.0)
+==26546==    by 0x103B62D5: png_write_chunk (in /usr/lib64/libpng14.so.14.4.0)
+==26546==    by 0x103B6A45: ??? (in /usr/lib64/libpng14.so.14.4.0)
+==26546==    by 0x103B8B01: ??? (in /usr/lib64/libpng14.so.14.4.0)
+==26546==    by 0x103B8F53: ??? (in /usr/lib64/libpng14.so.14.4.0)
+==26546==    by 0x103B9328: ??? (in /usr/lib64/libpng14.so.14.4.0)
+==26546==    by 0x103BD418: png_write_row (in /usr/lib64/libpng14.so.14.4.0)
+==26546==    by 0x10165182: ??? (in /usr/lib64/ImageMagick-6.6.5/modules-Q16/coders/png.so)
+==26546==    by 0x10167CAD: ??? (in /usr/lib64/ImageMagick-6.6.5/modules-Q16/coders/png.so)
+==26546==    by 0x57589F1: WriteImage (in /usr/lib64/libMagickCore.so.4.0.0)
+==26546==    by 0x5189CC9: Magick::Image::write(std::string const&) (in /usr/lib64/libMagick++.so.4.0.0)
+==26546== 
+==26546== Syscall param write(buf) points to uninitialised byte(s)
+==26546==    at 0xA145190: __write_nocancel (in /lib64/libc-2.11.3.so)
+==26546==    by 0xA0EE142: _IO_file_write@@GLIBC_2.2.5 (in /lib64/libc-2.11.3.so)
+==26546==    by 0xA0EDDE9: new_do_write (in /lib64/libc-2.11.3.so)
+==26546==    by 0xA0EEFD4: _IO_do_write@@GLIBC_2.2.5 (in /lib64/libc-2.11.3.so)
+==26546==    by 0xA0EE91F: _IO_file_close_it@@GLIBC_2.2.5 (in /lib64/libc-2.11.3.so)
+==26546==    by 0xA0E272F: fclose@@GLIBC_2.2.5 (in /lib64/libc-2.11.3.so)
+==26546==    by 0x57252F1: CloseBlob (in /usr/lib64/libMagickCore.so.4.0.0)
+==26546==    by 0x10167CB8: ??? (in /usr/lib64/ImageMagick-6.6.5/modules-Q16/coders/png.so)
+==26546==    by 0x57589F1: WriteImage (in /usr/lib64/libMagickCore.so.4.0.0)
+==26546==    by 0x5189CC9: Magick::Image::write(std::string const&) (in /usr/lib64/libMagick++.so.4.0.0)
+==26546==    by 0x5358B2: void NICE::ImageFile::writerMagick<unsigned char>(NICE::GrayColorImageCommonImplementationT<unsigned char> const*) const (ImageFile.cpp:161)
+==26546==    by 0x42B6E4: void NICE::ImageFile::writer<unsigned char>(NICE::GrayColorImageCommonImplementationT<unsigned char> const*) const (ImageFile.tcc:80)
+==26546==  Address 0x4020082 is not stack'd, malloc'd or (recently) free'd
+==26546== 
+==26546== Mismatched free() / delete / delete []
+==26546==    at 0x4C2562E: operator delete(void*) (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
+==26546==    by 0x562A70: ice::FreeImgD(ice::ImageD_*) (based.cpp:119)
+==26546==    by 0x55357A: NICE::Fourier::FourierTransform(NICE::ImageT<float>&, NICE::ImageT<float>&, NICE::ImageT<float>&, NICE::ImageT<float>&) (Fourier.cpp:54)
+==26546==    by 0x42E4B8: TestFourier::testFourierTransform() (TestFourier.cpp:36)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==  Address 0xd7ebb40 is 0 bytes inside a block of size 70,488 alloc'd
+==26546==    at 0x4C25D99: operator new[](unsigned long) (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
+==26546==    by 0x5624FC: ice::NewImgD(int, int, double, double) (based.cpp:53)
+==26546==    by 0x552FE2: NICE::Fourier::FourierTransform(NICE::ImageT<float>&, NICE::ImageT<float>&, NICE::ImageT<float>&, NICE::ImageT<float>&) (image_convertice.h:254)
+==26546==    by 0x42E4B8: TestFourier::testFourierTransform() (TestFourier.cpp:36)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Mismatched free() / delete / delete []
+==26546==    at 0x4C2562E: operator delete(void*) (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
+==26546==    by 0x562A70: ice::FreeImgD(ice::ImageD_*) (based.cpp:119)
+==26546==    by 0x553582: NICE::Fourier::FourierTransform(NICE::ImageT<float>&, NICE::ImageT<float>&, NICE::ImageT<float>&, NICE::ImageT<float>&) (Fourier.cpp:54)
+==26546==    by 0x42E4B8: TestFourier::testFourierTransform() (TestFourier.cpp:36)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==  Address 0xdab6be0 is 0 bytes inside a block of size 70,488 alloc'd
+==26546==    at 0x4C25D99: operator new[](unsigned long) (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
+==26546==    by 0x5624FC: ice::NewImgD(int, int, double, double) (based.cpp:53)
+==26546==    by 0x553095: NICE::Fourier::FourierTransform(NICE::ImageT<float>&, NICE::ImageT<float>&, NICE::ImageT<float>&, NICE::ImageT<float>&) (image_convertice.h:254)
+==26546==    by 0x42E4B8: TestFourier::testFourierTransform() (TestFourier.cpp:36)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Mismatched free() / delete / delete []
+==26546==    at 0x4C2562E: operator delete(void*) (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
+==26546==    by 0x562A70: ice::FreeImgD(ice::ImageD_*) (based.cpp:119)
+==26546==    by 0x55358A: NICE::Fourier::FourierTransform(NICE::ImageT<float>&, NICE::ImageT<float>&, NICE::ImageT<float>&, NICE::ImageT<float>&) (Fourier.cpp:54)
+==26546==    by 0x42E4B8: TestFourier::testFourierTransform() (TestFourier.cpp:36)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==  Address 0xd7fcee0 is 0 bytes inside a block of size 70,488 alloc'd
+==26546==    at 0x4C25D99: operator new[](unsigned long) (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
+==26546==    by 0x5624FC: ice::NewImgD(int, int, double, double) (based.cpp:53)
+==26546==    by 0x55314C: NICE::Fourier::FourierTransform(NICE::ImageT<float>&, NICE::ImageT<float>&, NICE::ImageT<float>&, NICE::ImageT<float>&) (image_convertice.h:254)
+==26546==    by 0x42E4B8: TestFourier::testFourierTransform() (TestFourier.cpp:36)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Mismatched free() / delete / delete []
+==26546==    at 0x4C2562E: operator delete(void*) (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
+==26546==    by 0x562A70: ice::FreeImgD(ice::ImageD_*) (based.cpp:119)
+==26546==    by 0x553592: NICE::Fourier::FourierTransform(NICE::ImageT<float>&, NICE::ImageT<float>&, NICE::ImageT<float>&, NICE::ImageT<float>&) (Fourier.cpp:54)
+==26546==    by 0x42E4B8: TestFourier::testFourierTransform() (TestFourier.cpp:36)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==  Address 0xdac7f80 is 0 bytes inside a block of size 70,488 alloc'd
+==26546==    at 0x4C25D99: operator new[](unsigned long) (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
+==26546==    by 0x5624FC: ice::NewImgD(int, int, double, double) (based.cpp:53)
+==26546==    by 0x553211: NICE::Fourier::FourierTransform(NICE::ImageT<float>&, NICE::ImageT<float>&, NICE::ImageT<float>&, NICE::ImageT<float>&) (image_convertice.h:254)
+==26546==    by 0x42E4B8: TestFourier::testFourierTransform() (TestFourier.cpp:36)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== 
+==26546== More than 100 errors detected.  Subsequent errors
+==26546== will still be recorded, but in less detail than before.
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF75E63: piFilterRow_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF756E7: L_ippiFilterRow_8u_C1R_8912__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52F390: NICE::filterX(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:41)
+==26546==    by 0x46C763: TestFilter::testSepIntFilter() (TestFilter.cpp:140)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF75E68: piFilterRow_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF756E7: L_ippiFilterRow_8u_C1R_8912__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52F390: NICE::filterX(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:41)
+==26546==    by 0x46C763: TestFilter::testSepIntFilter() (TestFilter.cpp:140)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF75E6D: piFilterRow_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF756E7: L_ippiFilterRow_8u_C1R_8912__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52F390: NICE::filterX(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:41)
+==26546==    by 0x46C763: TestFilter::testSepIntFilter() (TestFilter.cpp:140)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF75E8F: piFilterRow_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF756E7: L_ippiFilterRow_8u_C1R_8912__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52F390: NICE::filterX(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:41)
+==26546==    by 0x46C763: TestFilter::testSepIntFilter() (TestFilter.cpp:140)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF75B7F: piFilterRow_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF756E7: L_ippiFilterRow_8u_C1R_8912__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52F390: NICE::filterX(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:41)
+==26546==    by 0x46C763: TestFilter::testSepIntFilter() (TestFilter.cpp:140)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF75B84: piFilterRow_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF756E7: L_ippiFilterRow_8u_C1R_8912__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52F390: NICE::filterX(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:41)
+==26546==    by 0x46C763: TestFilter::testSepIntFilter() (TestFilter.cpp:140)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF75B89: piFilterRow_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF756E7: L_ippiFilterRow_8u_C1R_8912__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52F390: NICE::filterX(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:41)
+==26546==    by 0x46C763: TestFilter::testSepIntFilter() (TestFilter.cpp:140)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF75BAB: piFilterRow_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF756E7: L_ippiFilterRow_8u_C1R_8912__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52F390: NICE::filterX(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:41)
+==26546==    by 0x46C763: TestFilter::testSepIntFilter() (TestFilter.cpp:140)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF7241F: piFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF71C1A: ippiFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5301E8: NICE::filterY(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:111)
+==26546==    by 0x46D1D0: TestFilter::testSepIntFilter() (TestFilter.cpp:157)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF72424: piFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF71C1A: ippiFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5301E8: NICE::filterY(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:111)
+==26546==    by 0x46D1D0: TestFilter::testSepIntFilter() (TestFilter.cpp:157)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF72429: piFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF71C1A: ippiFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5301E8: NICE::filterY(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:111)
+==26546==    by 0x46D1D0: TestFilter::testSepIntFilter() (TestFilter.cpp:157)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF7244C: piFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF71C1A: ippiFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5301E8: NICE::filterY(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:111)
+==26546==    by 0x46D1D0: TestFilter::testSepIntFilter() (TestFilter.cpp:157)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF724CD: piFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF71C1A: ippiFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5301E8: NICE::filterY(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:111)
+==26546==    by 0x46D1D0: TestFilter::testSepIntFilter() (TestFilter.cpp:157)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF724D2: piFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF71C1A: ippiFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5301E8: NICE::filterY(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:111)
+==26546==    by 0x46D1D0: TestFilter::testSepIntFilter() (TestFilter.cpp:157)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF724D7: piFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF71C1A: ippiFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5301E8: NICE::filterY(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:111)
+==26546==    by 0x46D1D0: TestFilter::testSepIntFilter() (TestFilter.cpp:157)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF724FA: piFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF71C1A: ippiFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5301E8: NICE::filterY(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:111)
+==26546==    by 0x46D1D0: TestFilter::testSepIntFilter() (TestFilter.cpp:157)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF72580: piFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF71C1A: ippiFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5301E8: NICE::filterY(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:111)
+==26546==    by 0x46D1D0: TestFilter::testSepIntFilter() (TestFilter.cpp:157)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF72585: piFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF71C1A: ippiFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5301E8: NICE::filterY(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:111)
+==26546==    by 0x46D1D0: TestFilter::testSepIntFilter() (TestFilter.cpp:157)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF7258A: piFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF71C1A: ippiFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5301E8: NICE::filterY(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:111)
+==26546==    by 0x46D1D0: TestFilter::testSepIntFilter() (TestFilter.cpp:157)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF725AD: piFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF71C1A: ippiFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5301E8: NICE::filterY(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:111)
+==26546==    by 0x46D1D0: TestFilter::testSepIntFilter() (TestFilter.cpp:157)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF72632: piFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF71C1A: ippiFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5301E8: NICE::filterY(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:111)
+==26546==    by 0x46D1D0: TestFilter::testSepIntFilter() (TestFilter.cpp:157)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF72637: piFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF71C1A: ippiFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5301E8: NICE::filterY(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:111)
+==26546==    by 0x46D1D0: TestFilter::testSepIntFilter() (TestFilter.cpp:157)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF7263C: piFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF71C1A: ippiFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5301E8: NICE::filterY(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:111)
+==26546==    by 0x46D1D0: TestFilter::testSepIntFilter() (TestFilter.cpp:157)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF7265F: piFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF71C1A: ippiFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5301E8: NICE::filterY(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:111)
+==26546==    by 0x46D1D0: TestFilter::testSepIntFilter() (TestFilter.cpp:157)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF72766: piFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF71C1A: ippiFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5301E8: NICE::filterY(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:111)
+==26546==    by 0x46D1D0: TestFilter::testSepIntFilter() (TestFilter.cpp:157)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF7276B: piFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF71C1A: ippiFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5301E8: NICE::filterY(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:111)
+==26546==    by 0x46D1D0: TestFilter::testSepIntFilter() (TestFilter.cpp:157)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF72770: piFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF71C1A: ippiFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5301E8: NICE::filterY(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:111)
+==26546==    by 0x46D1D0: TestFilter::testSepIntFilter() (TestFilter.cpp:157)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF72793: piFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF71C1A: ippiFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5301E8: NICE::filterY(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:111)
+==26546==    by 0x46D1D0: TestFilter::testSepIntFilter() (TestFilter.cpp:157)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF75D4C: piFilterRow_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF756E7: L_ippiFilterRow_8u_C1R_8912__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52F390: NICE::filterX(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:41)
+==26546==    by 0x46DC96: TestFilter::testSepIntFilter() (TestFilter.cpp:177)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF75D51: piFilterRow_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF756E7: L_ippiFilterRow_8u_C1R_8912__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52F390: NICE::filterX(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:41)
+==26546==    by 0x46DC96: TestFilter::testSepIntFilter() (TestFilter.cpp:177)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF75D56: piFilterRow_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF756E7: L_ippiFilterRow_8u_C1R_8912__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52F390: NICE::filterX(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:41)
+==26546==    by 0x46DC96: TestFilter::testSepIntFilter() (TestFilter.cpp:177)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF75D78: piFilterRow_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF756E7: L_ippiFilterRow_8u_C1R_8912__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52F390: NICE::filterX(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:41)
+==26546==    by 0x46DC96: TestFilter::testSepIntFilter() (TestFilter.cpp:177)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF75C22: piFilterRow_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF756E7: L_ippiFilterRow_8u_C1R_8912__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52F390: NICE::filterX(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:41)
+==26546==    by 0x46DC96: TestFilter::testSepIntFilter() (TestFilter.cpp:177)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF75C27: piFilterRow_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF756E7: L_ippiFilterRow_8u_C1R_8912__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52F390: NICE::filterX(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:41)
+==26546==    by 0x46DC96: TestFilter::testSepIntFilter() (TestFilter.cpp:177)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF75C2C: piFilterRow_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF756E7: L_ippiFilterRow_8u_C1R_8912__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52F390: NICE::filterX(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:41)
+==26546==    by 0x46DC96: TestFilter::testSepIntFilter() (TestFilter.cpp:177)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF75C4E: piFilterRow_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF756E7: L_ippiFilterRow_8u_C1R_8912__par_region0_2.0 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52F390: NICE::filterX(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:41)
+==26546==    by 0x46DC96: TestFilter::testSepIntFilter() (TestFilter.cpp:177)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Invalid read of size 1
+==26546==    at 0xCF72392: piFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF71C1A: ippiFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5301E8: NICE::filterY(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:111)
+==26546==    by 0x46E029: TestFilter::testSepIntFilter() (TestFilter.cpp:184)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==  Address 0xe0253e0 is not stack'd, malloc'd or (recently) free'd
+==26546== 
+==26546== Invalid read of size 1
+==26546==    at 0xCF7239D: piFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF71C1A: ippiFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5301E8: NICE::filterY(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:111)
+==26546==    by 0x46E029: TestFilter::testSepIntFilter() (TestFilter.cpp:184)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==  Address 0xe0253e1 is not stack'd, malloc'd or (recently) free'd
+==26546== 
+==26546== Invalid read of size 1
+==26546==    at 0xCF723A9: piFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF71C1A: ippiFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5301E8: NICE::filterY(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:111)
+==26546==    by 0x46E029: TestFilter::testSepIntFilter() (TestFilter.cpp:184)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==  Address 0xe0253e2 is not stack'd, malloc'd or (recently) free'd
+==26546== 
+==26546== Invalid read of size 1
+==26546==    at 0xCF723B5: piFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF71C1A: ippiFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5301E8: NICE::filterY(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:111)
+==26546==    by 0x46E029: TestFilter::testSepIntFilter() (TestFilter.cpp:184)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==  Address 0xe0253e3 is not stack'd, malloc'd or (recently) free'd
+==26546== 
+==26546== Invalid read of size 1
+==26546==    at 0xCF7270A: piFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF71C1A: ippiFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5301E8: NICE::filterY(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:111)
+==26546==    by 0x46E029: TestFilter::testSepIntFilter() (TestFilter.cpp:184)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==  Address 0xe0253e4 is not stack'd, malloc'd or (recently) free'd
+==26546== 
+==26546== Invalid read of size 1
+==26546==    at 0xCF72721: piFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF71C1A: ippiFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5301E8: NICE::filterY(NICE::ImageT<unsigned char> const&, NICE::VectorT<int> const&, NICE::ImageT<unsigned char>*, int const&) (Filter.cpp:111)
+==26546==    by 0x46E029: TestFilter::testSepIntFilter() (TestFilter.cpp:184)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==  Address 0xe0254e4 is not stack'd, malloc'd or (recently) free'd
+==26546== 
+==26546== Invalid read of size 1
+==26546==    at 0xCF7BD07: piFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF7B69C: ippiFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5310D7: NICE::filter(NICE::ImageT<unsigned char> const&, NICE::MatrixT<int> const&, NICE::ImageT<unsigned char>*, int const&, int const&) (Filter.cpp:185)
+==26546==    by 0x469FFB: TestFilter::testIntFilter() (TestFilter.cpp:323)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==  Address 0xe05d0df is 1 bytes before a block of size 200 alloc'd
+==26546==    at 0x4C2683D: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
+==26546==    by 0xBFF3496: ippsMalloc_8u (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippsy8.so.5.3)
+==26546==    by 0xCD5D44C: ippiMalloc_8u_C1 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5539D2: NICE::ImageT<unsigned char>::doAllocPixelIPP() (ImageT.cpp:19)
+==26546==    by 0x454638: _ZN4NICE35GrayColorImageCommonImplementationTIhE10allocPixelEiiNS_34GrayColorImageCommonImplementation12MemoryLayoutE.clone.136 (GrayColorImageCommonImplementationT.tcc:59)
+==26546==    by 0x469D61: TestFilter::testIntFilter() (ImageT.tcc:38)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF7BDB3: piFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF7B69C: ippiFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5310D7: NICE::filter(NICE::ImageT<unsigned char> const&, NICE::MatrixT<int> const&, NICE::ImageT<unsigned char>*, int const&, int const&) (Filter.cpp:185)
+==26546==    by 0x469FFB: TestFilter::testIntFilter() (TestFilter.cpp:323)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF7BDB8: piFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF7B69C: ippiFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5310D7: NICE::filter(NICE::ImageT<unsigned char> const&, NICE::MatrixT<int> const&, NICE::ImageT<unsigned char>*, int const&, int const&) (Filter.cpp:185)
+==26546==    by 0x469FFB: TestFilter::testIntFilter() (TestFilter.cpp:323)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF7BDBD: piFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF7B69C: ippiFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5310D7: NICE::filter(NICE::ImageT<unsigned char> const&, NICE::MatrixT<int> const&, NICE::ImageT<unsigned char>*, int const&, int const&) (Filter.cpp:185)
+==26546==    by 0x469FFB: TestFilter::testIntFilter() (TestFilter.cpp:323)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF7BDE0: piFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF7B69C: ippiFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5310D7: NICE::filter(NICE::ImageT<unsigned char> const&, NICE::MatrixT<int> const&, NICE::ImageT<unsigned char>*, int const&, int const&) (Filter.cpp:185)
+==26546==    by 0x469FFB: TestFilter::testIntFilter() (TestFilter.cpp:323)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF7BE62: piFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF7B69C: ippiFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5310D7: NICE::filter(NICE::ImageT<unsigned char> const&, NICE::MatrixT<int> const&, NICE::ImageT<unsigned char>*, int const&, int const&) (Filter.cpp:185)
+==26546==    by 0x469FFB: TestFilter::testIntFilter() (TestFilter.cpp:323)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF7BE67: piFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF7B69C: ippiFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5310D7: NICE::filter(NICE::ImageT<unsigned char> const&, NICE::MatrixT<int> const&, NICE::ImageT<unsigned char>*, int const&, int const&) (Filter.cpp:185)
+==26546==    by 0x469FFB: TestFilter::testIntFilter() (TestFilter.cpp:323)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF7BE6C: piFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF7B69C: ippiFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5310D7: NICE::filter(NICE::ImageT<unsigned char> const&, NICE::MatrixT<int> const&, NICE::ImageT<unsigned char>*, int const&, int const&) (Filter.cpp:185)
+==26546==    by 0x469FFB: TestFilter::testIntFilter() (TestFilter.cpp:323)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF7BE8E: piFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF7B69C: ippiFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5310D7: NICE::filter(NICE::ImageT<unsigned char> const&, NICE::MatrixT<int> const&, NICE::ImageT<unsigned char>*, int const&, int const&) (Filter.cpp:185)
+==26546==    by 0x469FFB: TestFilter::testIntFilter() (TestFilter.cpp:323)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF7BF08: piFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF7B69C: ippiFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5310D7: NICE::filter(NICE::ImageT<unsigned char> const&, NICE::MatrixT<int> const&, NICE::ImageT<unsigned char>*, int const&, int const&) (Filter.cpp:185)
+==26546==    by 0x469FFB: TestFilter::testIntFilter() (TestFilter.cpp:323)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF7BF0D: piFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF7B69C: ippiFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5310D7: NICE::filter(NICE::ImageT<unsigned char> const&, NICE::MatrixT<int> const&, NICE::ImageT<unsigned char>*, int const&, int const&) (Filter.cpp:185)
+==26546==    by 0x469FFB: TestFilter::testIntFilter() (TestFilter.cpp:323)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF7BF12: piFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF7B69C: ippiFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5310D7: NICE::filter(NICE::ImageT<unsigned char> const&, NICE::MatrixT<int> const&, NICE::ImageT<unsigned char>*, int const&, int const&) (Filter.cpp:185)
+==26546==    by 0x469FFB: TestFilter::testIntFilter() (TestFilter.cpp:323)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF7BF34: piFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF7B69C: ippiFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5310D7: NICE::filter(NICE::ImageT<unsigned char> const&, NICE::MatrixT<int> const&, NICE::ImageT<unsigned char>*, int const&, int const&) (Filter.cpp:185)
+==26546==    by 0x469FFB: TestFilter::testIntFilter() (TestFilter.cpp:323)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF7BFA6: piFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF7B69C: ippiFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5310D7: NICE::filter(NICE::ImageT<unsigned char> const&, NICE::MatrixT<int> const&, NICE::ImageT<unsigned char>*, int const&, int const&) (Filter.cpp:185)
+==26546==    by 0x469FFB: TestFilter::testIntFilter() (TestFilter.cpp:323)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF7BFAB: piFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF7B69C: ippiFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5310D7: NICE::filter(NICE::ImageT<unsigned char> const&, NICE::MatrixT<int> const&, NICE::ImageT<unsigned char>*, int const&, int const&) (Filter.cpp:185)
+==26546==    by 0x469FFB: TestFilter::testIntFilter() (TestFilter.cpp:323)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF7BFB0: piFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF7B69C: ippiFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5310D7: NICE::filter(NICE::ImageT<unsigned char> const&, NICE::MatrixT<int> const&, NICE::ImageT<unsigned char>*, int const&, int const&) (Filter.cpp:185)
+==26546==    by 0x469FFB: TestFilter::testIntFilter() (TestFilter.cpp:323)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF7BFD2: piFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF7B69C: ippiFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5310D7: NICE::filter(NICE::ImageT<unsigned char> const&, NICE::MatrixT<int> const&, NICE::ImageT<unsigned char>*, int const&, int const&) (Filter.cpp:185)
+==26546==    by 0x469FFB: TestFilter::testIntFilter() (TestFilter.cpp:323)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF7C11A: piFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF7B69C: ippiFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5310D7: NICE::filter(NICE::ImageT<unsigned char> const&, NICE::MatrixT<int> const&, NICE::ImageT<unsigned char>*, int const&, int const&) (Filter.cpp:185)
+==26546==    by 0x469FFB: TestFilter::testIntFilter() (TestFilter.cpp:323)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF7C11F: piFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF7B69C: ippiFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5310D7: NICE::filter(NICE::ImageT<unsigned char> const&, NICE::MatrixT<int> const&, NICE::ImageT<unsigned char>*, int const&, int const&) (Filter.cpp:185)
+==26546==    by 0x469FFB: TestFilter::testIntFilter() (TestFilter.cpp:323)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF7C124: piFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF7B69C: ippiFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5310D7: NICE::filter(NICE::ImageT<unsigned char> const&, NICE::MatrixT<int> const&, NICE::ImageT<unsigned char>*, int const&, int const&) (Filter.cpp:185)
+==26546==    by 0x469FFB: TestFilter::testIntFilter() (TestFilter.cpp:323)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF7C146: piFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF7B69C: ippiFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5310D7: NICE::filter(NICE::ImageT<unsigned char> const&, NICE::MatrixT<int> const&, NICE::ImageT<unsigned char>*, int const&, int const&) (Filter.cpp:185)
+==26546==    by 0x469FFB: TestFilter::testIntFilter() (TestFilter.cpp:323)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Invalid read of size 1
+==26546==    at 0xCF7BD12: piFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF7B69C: ippiFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5310D7: NICE::filter(NICE::ImageT<unsigned char> const&, NICE::MatrixT<int> const&, NICE::ImageT<unsigned char>*, int const&, int const&) (Filter.cpp:185)
+==26546==    by 0x46A6CB: TestFilter::testIntFilter() (TestFilter.cpp:336)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==  Address 0xe05d0bf is not stack'd, malloc'd or (recently) free'd
+==26546== 
+==26546== Invalid read of size 1
+==26546==    at 0xCF7BD1E: piFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF7B69C: ippiFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5310D7: NICE::filter(NICE::ImageT<unsigned char> const&, NICE::MatrixT<int> const&, NICE::ImageT<unsigned char>*, int const&, int const&) (Filter.cpp:185)
+==26546==    by 0x46A6CB: TestFilter::testIntFilter() (TestFilter.cpp:336)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==  Address 0xe05d0c0 is not stack'd, malloc'd or (recently) free'd
+==26546== 
+==26546== Invalid read of size 1
+==26546==    at 0xCF7BD2A: piFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF7B69C: ippiFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5310D7: NICE::filter(NICE::ImageT<unsigned char> const&, NICE::MatrixT<int> const&, NICE::ImageT<unsigned char>*, int const&, int const&) (Filter.cpp:185)
+==26546==    by 0x46A6CB: TestFilter::testIntFilter() (TestFilter.cpp:336)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==  Address 0xe05d0c1 is not stack'd, malloc'd or (recently) free'd
+==26546== 
+==26546== Invalid read of size 1
+==26546==    at 0xCF7C0A3: piFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF7B69C: ippiFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5310D7: NICE::filter(NICE::ImageT<unsigned char> const&, NICE::MatrixT<int> const&, NICE::ImageT<unsigned char>*, int const&, int const&) (Filter.cpp:185)
+==26546==    by 0x46A6CB: TestFilter::testIntFilter() (TestFilter.cpp:336)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==  Address 0xe05d0c2 is not stack'd, malloc'd or (recently) free'd
+==26546== 
+==26546== Invalid read of size 1
+==26546==    at 0xCF7C0BA: piFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF7B69C: ippiFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5310D7: NICE::filter(NICE::ImageT<unsigned char> const&, NICE::MatrixT<int> const&, NICE::ImageT<unsigned char>*, int const&, int const&) (Filter.cpp:185)
+==26546==    by 0x46A6CB: TestFilter::testIntFilter() (TestFilter.cpp:336)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==  Address 0xe05d0c3 is not stack'd, malloc'd or (recently) free'd
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF7BD76: piFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF7B69C: ippiFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5310D7: NICE::filter(NICE::ImageT<unsigned char> const&, NICE::MatrixT<int> const&, NICE::ImageT<unsigned char>*, int const&, int const&) (Filter.cpp:185)
+==26546==    by 0x46A844: TestFilter::testIntFilter() (TestFilter.cpp:345)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF7BE29: piFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF7B69C: ippiFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5310D7: NICE::filter(NICE::ImageT<unsigned char> const&, NICE::MatrixT<int> const&, NICE::ImageT<unsigned char>*, int const&, int const&) (Filter.cpp:185)
+==26546==    by 0x46A844: TestFilter::testIntFilter() (TestFilter.cpp:345)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF7BED2: piFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF7B69C: ippiFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5310D7: NICE::filter(NICE::ImageT<unsigned char> const&, NICE::MatrixT<int> const&, NICE::ImageT<unsigned char>*, int const&, int const&) (Filter.cpp:185)
+==26546==    by 0x46A844: TestFilter::testIntFilter() (TestFilter.cpp:345)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF7BF74: piFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF7B69C: ippiFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5310D7: NICE::filter(NICE::ImageT<unsigned char> const&, NICE::MatrixT<int> const&, NICE::ImageT<unsigned char>*, int const&, int const&) (Filter.cpp:185)
+==26546==    by 0x46A844: TestFilter::testIntFilter() (TestFilter.cpp:345)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xCF7C0E6: piFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCF7B69C: ippiFilter_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5310D7: NICE::filter(NICE::ImageT<unsigned char> const&, NICE::MatrixT<int> const&, NICE::ImageT<unsigned char>*, int const&, int const&) (Filter.cpp:185)
+==26546==    by 0x46A844: TestFilter::testIntFilter() (TestFilter.cpp:345)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45A8E8: TestFilter::testSmoothing() (TestFilter.cpp:404)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45A987: TestFilter::testSmoothing() (TestFilter.cpp:405)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45AA3A: TestFilter::testSmoothing() (TestFilter.cpp:406)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45AAE7: TestFilter::testSmoothing() (TestFilter.cpp:407)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45AC30: TestFilter::testSmoothing() (TestFilter.cpp:411)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45ACCF: TestFilter::testSmoothing() (TestFilter.cpp:412)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45AD82: TestFilter::testSmoothing() (TestFilter.cpp:413)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45AE2F: TestFilter::testSmoothing() (TestFilter.cpp:415)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45AEDC: TestFilter::testSmoothing() (TestFilter.cpp:416)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45AF89: TestFilter::testSmoothing() (TestFilter.cpp:417)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45B0F8: TestFilter::testSmoothing() (TestFilter.cpp:423)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45B197: TestFilter::testSmoothing() (TestFilter.cpp:424)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45B24A: TestFilter::testSmoothing() (TestFilter.cpp:425)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45B2F7: TestFilter::testSmoothing() (TestFilter.cpp:426)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45B440: TestFilter::testSmoothing() (TestFilter.cpp:430)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45B4DF: TestFilter::testSmoothing() (TestFilter.cpp:431)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45B592: TestFilter::testSmoothing() (TestFilter.cpp:432)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45B63F: TestFilter::testSmoothing() (TestFilter.cpp:433)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45B6EC: TestFilter::testSmoothing() (TestFilter.cpp:434)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45B799: TestFilter::testSmoothing() (TestFilter.cpp:435)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45B846: TestFilter::testSmoothing() (TestFilter.cpp:436)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45B8F3: TestFilter::testSmoothing() (TestFilter.cpp:437)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45B9A0: TestFilter::testSmoothing() (TestFilter.cpp:438)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45BA4D: TestFilter::testSmoothing() (TestFilter.cpp:439)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Invalid read of size 1
+==26546==    at 0xD2FA96D: inner_ownBlur_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCDB5629: ownBlur_8u (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCDA64A1: ippiFilterBox_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52E220: NICE::meanY(NICE::ImageT<unsigned char> const&, unsigned int const&, NICE::ImageT<unsigned char>*) (Filter.cpp:286)
+==26546==    by 0x45BA91: TestFilter::testSmoothing() (TestFilter.cpp:442)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==  Address 0xe067dc8 is 0 bytes after a block of size 488 alloc'd
+==26546==    at 0x4C2683D: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
+==26546==    by 0xBFF3496: ippsMalloc_8u (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippsy8.so.5.3)
+==26546==    by 0xCD5D44C: ippiMalloc_8u_C1 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5539D2: NICE::ImageT<unsigned char>::doAllocPixelIPP() (ImageT.cpp:19)
+==26546==    by 0x454638: _ZN4NICE35GrayColorImageCommonImplementationTIhE10allocPixelEiiNS_34GrayColorImageCommonImplementation12MemoryLayoutE.clone.136 (GrayColorImageCommonImplementationT.tcc:59)
+==26546==    by 0x45A6AC: TestFilter::testSmoothing() (ImageT.tcc:38)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45BBB8: TestFilter::testSmoothing() (TestFilter.cpp:445)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45BC57: TestFilter::testSmoothing() (TestFilter.cpp:446)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45BD0A: TestFilter::testSmoothing() (TestFilter.cpp:447)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45BDB7: TestFilter::testSmoothing() (TestFilter.cpp:448)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45BF00: TestFilter::testSmoothing() (TestFilter.cpp:452)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45BF9F: TestFilter::testSmoothing() (TestFilter.cpp:453)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45C052: TestFilter::testSmoothing() (TestFilter.cpp:454)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45C0FF: TestFilter::testSmoothing() (TestFilter.cpp:456)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45C1AC: TestFilter::testSmoothing() (TestFilter.cpp:457)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45C259: TestFilter::testSmoothing() (TestFilter.cpp:458)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Invalid read of size 1
+==26546==    at 0xD2FAC94: own_get_first_sum_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCDB5590: ownBlur_8u (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCDA64A1: ippiFilterBox_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52E220: NICE::meanY(NICE::ImageT<unsigned char> const&, unsigned int const&, NICE::ImageT<unsigned char>*) (Filter.cpp:286)
+==26546==    by 0x45C29D: TestFilter::testSmoothing() (TestFilter.cpp:461)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==  Address 0xe067bc0 is not stack'd, malloc'd or (recently) free'd
+==26546== 
+==26546== Invalid read of size 1
+==26546==    at 0xD2FA978: inner_ownBlur_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCDB5629: ownBlur_8u (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCDA64A1: ippiFilterBox_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52E220: NICE::meanY(NICE::ImageT<unsigned char> const&, unsigned int const&, NICE::ImageT<unsigned char>*) (Filter.cpp:286)
+==26546==    by 0x45C29D: TestFilter::testSmoothing() (TestFilter.cpp:461)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==  Address 0xe067bc0 is not stack'd, malloc'd or (recently) free'd
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45C3C8: TestFilter::testSmoothing() (TestFilter.cpp:464)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45C467: TestFilter::testSmoothing() (TestFilter.cpp:465)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45C51A: TestFilter::testSmoothing() (TestFilter.cpp:466)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45C5C7: TestFilter::testSmoothing() (TestFilter.cpp:467)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45C710: TestFilter::testSmoothing() (TestFilter.cpp:471)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45C7AF: TestFilter::testSmoothing() (TestFilter.cpp:472)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45C862: TestFilter::testSmoothing() (TestFilter.cpp:473)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45C90F: TestFilter::testSmoothing() (TestFilter.cpp:474)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45C9BC: TestFilter::testSmoothing() (TestFilter.cpp:475)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45CA69: TestFilter::testSmoothing() (TestFilter.cpp:476)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45CB16: TestFilter::testSmoothing() (TestFilter.cpp:477)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45CBC3: TestFilter::testSmoothing() (TestFilter.cpp:478)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45CC70: TestFilter::testSmoothing() (TestFilter.cpp:479)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45CD1D: TestFilter::testSmoothing() (TestFilter.cpp:480)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Invalid read of size 8
+==26546==    at 0xD2FA4B2: inner_ownBlur_8u_33_C1 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==  Address 0xe067bdf is 1 bytes before a block of size 488 alloc'd
+==26546==    at 0x4C2683D: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
+==26546==    by 0xBFF3496: ippsMalloc_8u (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippsy8.so.5.3)
+==26546==    by 0xCD5D44C: ippiMalloc_8u_C1 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5539D2: NICE::ImageT<unsigned char>::doAllocPixelIPP() (ImageT.cpp:19)
+==26546==    by 0x454638: _ZN4NICE35GrayColorImageCommonImplementationTIhE10allocPixelEiiNS_34GrayColorImageCommonImplementation12MemoryLayoutE.clone.136 (GrayColorImageCommonImplementationT.tcc:59)
+==26546==    by 0x45A6AC: TestFilter::testSmoothing() (ImageT.tcc:38)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Invalid read of size 2
+==26546==    at 0xD2FA5AC: inner_ownBlur_8u_33_C1 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xC: ???
+==26546==    by 0xCDB60FA: ownBlur_8u_33 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCDA64BC: ippiFilterBox_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52DE27: NICE::filterMean(NICE::ImageT<unsigned char> const&, unsigned int const&, NICE::ImageT<unsigned char>*) (Filter.cpp:329)
+==26546==    by 0x45CD60: TestFilter::testSmoothing() (TestFilter.cpp:483)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==  Address 0xe067dc7 is 487 bytes inside a block of size 488 alloc'd
+==26546==    at 0x4C2683D: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
+==26546==    by 0xBFF3496: ippsMalloc_8u (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippsy8.so.5.3)
+==26546==    by 0xCD5D44C: ippiMalloc_8u_C1 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5539D2: NICE::ImageT<unsigned char>::doAllocPixelIPP() (ImageT.cpp:19)
+==26546==    by 0x454638: _ZN4NICE35GrayColorImageCommonImplementationTIhE10allocPixelEiiNS_34GrayColorImageCommonImplementation12MemoryLayoutE.clone.136 (GrayColorImageCommonImplementationT.tcc:59)
+==26546==    by 0x45A6AC: TestFilter::testSmoothing() (ImageT.tcc:38)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Invalid read of size 1
+==26546==    at 0xD2FA686: inner_ownBlur_8u_33_C1 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xC: ???
+==26546==    by 0xCDB60FA: ownBlur_8u_33 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCDA64BC: ippiFilterBox_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52DE27: NICE::filterMean(NICE::ImageT<unsigned char> const&, unsigned int const&, NICE::ImageT<unsigned char>*) (Filter.cpp:329)
+==26546==    by 0x45CD60: TestFilter::testSmoothing() (TestFilter.cpp:483)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==  Address 0xe067dc9 is 1 bytes after a block of size 488 alloc'd
+==26546==    at 0x4C2683D: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
+==26546==    by 0xBFF3496: ippsMalloc_8u (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippsy8.so.5.3)
+==26546==    by 0xCD5D44C: ippiMalloc_8u_C1 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5539D2: NICE::ImageT<unsigned char>::doAllocPixelIPP() (ImageT.cpp:19)
+==26546==    by 0x454638: _ZN4NICE35GrayColorImageCommonImplementationTIhE10allocPixelEiiNS_34GrayColorImageCommonImplementation12MemoryLayoutE.clone.136 (GrayColorImageCommonImplementationT.tcc:59)
+==26546==    by 0x45A6AC: TestFilter::testSmoothing() (ImageT.tcc:38)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Invalid read of size 1
+==26546==    at 0xD2FA692: inner_ownBlur_8u_33_C1 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xC: ???
+==26546==    by 0xCDB60FA: ownBlur_8u_33 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCDA64BC: ippiFilterBox_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52DE27: NICE::filterMean(NICE::ImageT<unsigned char> const&, unsigned int const&, NICE::ImageT<unsigned char>*) (Filter.cpp:329)
+==26546==    by 0x45CD60: TestFilter::testSmoothing() (TestFilter.cpp:483)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==  Address 0xe067dc8 is 0 bytes after a block of size 488 alloc'd
+==26546==    at 0x4C2683D: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
+==26546==    by 0xBFF3496: ippsMalloc_8u (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippsy8.so.5.3)
+==26546==    by 0xCD5D44C: ippiMalloc_8u_C1 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5539D2: NICE::ImageT<unsigned char>::doAllocPixelIPP() (ImageT.cpp:19)
+==26546==    by 0x454638: _ZN4NICE35GrayColorImageCommonImplementationTIhE10allocPixelEiiNS_34GrayColorImageCommonImplementation12MemoryLayoutE.clone.136 (GrayColorImageCommonImplementationT.tcc:59)
+==26546==    by 0x45A6AC: TestFilter::testSmoothing() (ImageT.tcc:38)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Invalid read of size 1
+==26546==    at 0xD2FA683: inner_ownBlur_8u_33_C1 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xC: ???
+==26546==    by 0xCDB60FA: ownBlur_8u_33 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCDA64BC: ippiFilterBox_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x52DE27: NICE::filterMean(NICE::ImageT<unsigned char> const&, unsigned int const&, NICE::ImageT<unsigned char>*) (Filter.cpp:329)
+==26546==    by 0x45CD60: TestFilter::testSmoothing() (TestFilter.cpp:483)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==  Address 0xe067dc8 is 0 bytes after a block of size 488 alloc'd
+==26546==    at 0x4C2683D: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
+==26546==    by 0xBFF3496: ippsMalloc_8u (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippsy8.so.5.3)
+==26546==    by 0xCD5D44C: ippiMalloc_8u_C1 (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x5539D2: NICE::ImageT<unsigned char>::doAllocPixelIPP() (ImageT.cpp:19)
+==26546==    by 0x454638: _ZN4NICE35GrayColorImageCommonImplementationTIhE10allocPixelEiiNS_34GrayColorImageCommonImplementation12MemoryLayoutE.clone.136 (GrayColorImageCommonImplementationT.tcc:59)
+==26546==    by 0x45A6AC: TestFilter::testSmoothing() (ImageT.tcc:38)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45F4B8: TestFilter::testSmoothing() (TestFilter.cpp:531)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45F568: TestFilter::testSmoothing() (TestFilter.cpp:532)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45F618: TestFilter::testSmoothing() (TestFilter.cpp:533)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45F6C8: TestFilter::testSmoothing() (TestFilter.cpp:534)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45F778: TestFilter::testSmoothing() (TestFilter.cpp:535)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45F828: TestFilter::testSmoothing() (TestFilter.cpp:536)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45F8D8: TestFilter::testSmoothing() (TestFilter.cpp:537)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45F988: TestFilter::testSmoothing() (TestFilter.cpp:538)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45FA38: TestFilter::testSmoothing() (TestFilter.cpp:539)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45FAE8: TestFilter::testSmoothing() (TestFilter.cpp:540)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45FB98: TestFilter::testSmoothing() (TestFilter.cpp:542)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45FC48: TestFilter::testSmoothing() (TestFilter.cpp:543)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45FCF8: TestFilter::testSmoothing() (TestFilter.cpp:544)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45FDA8: TestFilter::testSmoothing() (TestFilter.cpp:545)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45FE58: TestFilter::testSmoothing() (TestFilter.cpp:546)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45FF08: TestFilter::testSmoothing() (TestFilter.cpp:547)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x45FFB8: TestFilter::testSmoothing() (TestFilter.cpp:548)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x460068: TestFilter::testSmoothing() (TestFilter.cpp:549)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x460118: TestFilter::testSmoothing() (TestFilter.cpp:550)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x4601C8: TestFilter::testSmoothing() (TestFilter.cpp:551)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x460278: TestFilter::testSmoothing() (TestFilter.cpp:553)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x460328: TestFilter::testSmoothing() (TestFilter.cpp:554)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x4603D8: TestFilter::testSmoothing() (TestFilter.cpp:555)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x460488: TestFilter::testSmoothing() (TestFilter.cpp:556)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x460538: TestFilter::testSmoothing() (TestFilter.cpp:557)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x4605E8: TestFilter::testSmoothing() (TestFilter.cpp:558)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x460698: TestFilter::testSmoothing() (TestFilter.cpp:559)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x460748: TestFilter::testSmoothing() (TestFilter.cpp:560)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x4607F8: TestFilter::testSmoothing() (TestFilter.cpp:561)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x4608A8: TestFilter::testSmoothing() (TestFilter.cpp:562)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x52A58C: NICE::gradientStrength(NICE::ImageT<short> const&, NICE::ImageT<short> const&, NICE::ImageT<unsigned char>*, NICE::ImageT<unsigned char> const*) (Filter.cpp:768)
+==26546==    by 0x457C47: TestFilter::testGradient() (TestFilter.cpp:804)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x52A58C: NICE::gradientStrength(NICE::ImageT<short> const&, NICE::ImageT<short> const&, NICE::ImageT<unsigned char>*, NICE::ImageT<unsigned char> const*) (Filter.cpp:768)
+==26546==    by 0x4581DA: TestFilter::testGradient() (TestFilter.cpp:816)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC582076: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC5845D3: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC587BD8: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x53: ???
+==26546==    by 0xC5402D7: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0xE02451F: ???
+==26546==    by 0xE0DA3FF: ???
+==26546==    by 0xE0E17DF: ???
+==26546==    by 0xE02451F: ???
+==26546==    by 0xE0DA3FF: ???
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xE0E17E3: ???
+==26546==    by 0xE0E15D5: ???
+==26546==    by 0xE0E18DB: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC587D4D: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x53: ???
+==26546==    by 0xE0E17E3: ???
+==26546==    by 0xE02451F: ???
+==26546==    by 0xE0DA3FF: ???
+==26546==    by 0xE0E17DF: ???
+==26546==    by 0xE02451F: ???
+==26546==    by 0xE0DA3FF: ???
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xE0E17E3: ???
+==26546==    by 0xE0E15D5: ???
+==26546==    by 0xE0E18DB: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC587D59: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x53: ???
+==26546==    by 0xE0E17E3: ???
+==26546==    by 0xE02451F: ???
+==26546==    by 0xE0DA3FF: ???
+==26546==    by 0xE0E17DF: ???
+==26546==    by 0xE02451F: ???
+==26546==    by 0xE0DA3FF: ???
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xE0E17E3: ???
+==26546==    by 0xE0E15D5: ???
+==26546==    by 0xE0E18DB: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC587D73: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x53: ???
+==26546==    by 0xE0E17E3: ???
+==26546==    by 0xE02451F: ???
+==26546==    by 0xE0DA3FF: ???
+==26546==    by 0xE0E17DF: ???
+==26546==    by 0xE02451F: ???
+==26546==    by 0xE0DA3FF: ???
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xE0E17E3: ???
+==26546==    by 0xE0E15D5: ???
+==26546==    by 0xE0E18DB: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC587D95: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x53: ???
+==26546==    by 0xE0E17E3: ???
+==26546==    by 0xE02451F: ???
+==26546==    by 0xE0DA3FF: ???
+==26546==    by 0xE0E17DF: ???
+==26546==    by 0xE02451F: ???
+==26546==    by 0xE0DA3FF: ???
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xE0E17E3: ???
+==26546==    by 0xE0E15D5: ???
+==26546==    by 0xE0E18DB: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC587DB7: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x53: ???
+==26546==    by 0xE0E17E3: ???
+==26546==    by 0xE02451F: ???
+==26546==    by 0xE0DA3FF: ???
+==26546==    by 0xE0E17DF: ???
+==26546==    by 0xE02451F: ???
+==26546==    by 0xE0DA3FF: ???
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xE0E17E3: ???
+==26546==    by 0xE0E15D5: ???
+==26546==    by 0xE0E18DB: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC584762: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC5847F4: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC58484F: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC584858: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC5848A5: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC58245A: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC588145: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0xFFFFFFFFFFFFFFAB: ???
+==26546==    by 0xC53E897: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0xE0E178F: ???
+==26546==    by 0xE0DA47F: ???
+==26546==    by 0xE0E1887: ???
+==26546==    by 0xE02459F: ???
+==26546==    by 0xE0DA47F: ???
+==26546==    by 0xE0E17E3: ???
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xE0E178F: ???
+==26546==    by 0xE0E15FF: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC5882A7: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0xFFFFFFFFFFFFFFAB: ???
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xE0E178F: ???
+==26546==    by 0xE0DA47F: ???
+==26546==    by 0xE0E1887: ???
+==26546==    by 0xE02459F: ???
+==26546==    by 0xE0DA47F: ???
+==26546==    by 0xE0E17E3: ???
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xE0E178F: ???
+==26546==    by 0xE0E15FF: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC5882B3: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0xFFFFFFFFFFFFFFAB: ???
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xE0E178F: ???
+==26546==    by 0xE0DA47F: ???
+==26546==    by 0xE0E1887: ???
+==26546==    by 0xE02459F: ???
+==26546==    by 0xE0DA47F: ???
+==26546==    by 0xE0E17E3: ???
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xE0E178F: ???
+==26546==    by 0xE0E15FF: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC5882CD: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0xFFFFFFFFFFFFFFAB: ???
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xE0E178F: ???
+==26546==    by 0xE0DA47F: ???
+==26546==    by 0xE0E1887: ???
+==26546==    by 0xE02459F: ???
+==26546==    by 0xE0DA47F: ???
+==26546==    by 0xE0E17E3: ???
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xE0E178F: ???
+==26546==    by 0xE0E15FF: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC5882EF: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0xFFFFFFFFFFFFFFAB: ???
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xE0E178F: ???
+==26546==    by 0xE0DA47F: ???
+==26546==    by 0xE0E1887: ???
+==26546==    by 0xE02459F: ???
+==26546==    by 0xE0DA47F: ???
+==26546==    by 0xE0E17E3: ???
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xE0E178F: ???
+==26546==    by 0xE0E15FF: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC588311: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0xFFFFFFFFFFFFFFAB: ???
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xE0E178F: ???
+==26546==    by 0xE0DA47F: ???
+==26546==    by 0xE0E1887: ???
+==26546==    by 0xE02459F: ???
+==26546==    by 0xE0DA47F: ???
+==26546==    by 0xE0E17E3: ???
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xE0E178F: ???
+==26546==    by 0xE0E15FF: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC5840CB: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC587E92: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x53: ???
+==26546==    by 0xC541297: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xE0DA4BF: ???
+==26546==    by 0xE0E178B: ???
+==26546==    by 0xE0245DF: ???
+==26546==    by 0xE0DA4BF: ???
+==26546==    by 0xE0E1837: ???
+==26546==    by 0xE0E178F: ???
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xE0E1614: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC587FF4: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x53: ???
+==26546==    by 0xE0E178F: ???
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xE0DA4BF: ???
+==26546==    by 0xE0E178B: ???
+==26546==    by 0xE0245DF: ???
+==26546==    by 0xE0DA4BF: ???
+==26546==    by 0xE0E1837: ???
+==26546==    by 0xE0E178F: ???
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xE0E1614: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC588000: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x53: ???
+==26546==    by 0xE0E178F: ???
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xE0DA4BF: ???
+==26546==    by 0xE0E178B: ???
+==26546==    by 0xE0245DF: ???
+==26546==    by 0xE0DA4BF: ???
+==26546==    by 0xE0E1837: ???
+==26546==    by 0xE0E178F: ???
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xE0E1614: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC58801A: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x53: ???
+==26546==    by 0xE0E178F: ???
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xE0DA4BF: ???
+==26546==    by 0xE0E178B: ???
+==26546==    by 0xE0245DF: ???
+==26546==    by 0xE0DA4BF: ???
+==26546==    by 0xE0E1837: ???
+==26546==    by 0xE0E178F: ???
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xE0E1614: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC58803C: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x53: ???
+==26546==    by 0xE0E178F: ???
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xE0DA4BF: ???
+==26546==    by 0xE0E178B: ???
+==26546==    by 0xE0245DF: ???
+==26546==    by 0xE0DA4BF: ???
+==26546==    by 0xE0E1837: ???
+==26546==    by 0xE0E178F: ???
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xE0E1614: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC58805E: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x53: ???
+==26546==    by 0xE0E178F: ???
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xE0DA4BF: ???
+==26546==    by 0xE0E178B: ???
+==26546==    by 0xE0245DF: ???
+==26546==    by 0xE0DA4BF: ???
+==26546==    by 0xE0E1837: ???
+==26546==    by 0xE0E178F: ???
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xE0E1614: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC58428F: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC58430F: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC584379: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC584381: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC5843CC: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC583DED: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC583E53: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC583E5F: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC583E9D: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC583EA6: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC583ED4: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC582B1B: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC582B78: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC582B84: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC582BDD: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC582BE6: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC582C17: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC585A2B: ownHysteresisThresholding_16u (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0xC582D3C: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC585A74: ownHysteresisThresholding_16u (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0xC582D3C: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC585B10: ownHysteresisThresholding_16u (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0xC582D3C: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC585BA1: ownHysteresisThresholding_16u (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0xC582D3C: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC585BE4: ownHysteresisThresholding_16u (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0xC582D3C: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC585AC9: ownHysteresisThresholding_16u (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0xC582D3C: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC585B51: ownHysteresisThresholding_16u (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0xC582D3C: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC5859DC: ownHysteresisThresholding_16u (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0xC582D3C: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Mismatched free() / delete / delete []
+==26546==    at 0x4C2562E: operator delete(void*) (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
+==26546==    by 0x52D507: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:893)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==  Address 0xe0e15c0 is 0 bytes inside a block of size 2,669 alloc'd
+==26546==    at 0x4C25D99: operator new[](unsigned long) (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
+==26546==    by 0x52D233: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:882)
+==26546==    by 0x454B3D: TestFilter::testCanny() (TestFilter.cpp:855)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC587BD8: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x3B: ???
+==26546==    by 0xE0E17E3: ???
+==26546==    by 0x4067BFFFFFFFFFFF: ???
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xD0000000A: ???
+==26546==    by 0xE10075F: ???
+==26546==    by 0xE104E5F: ???
+==26546==    by 0xE105943: ???
+==26546==    by 0xE1058CB: ???
+==26546==    by 0xE10578F: ???
+==26546==    by 0xE10597B: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC587D4D: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x3B: ???
+==26546==    by 0xE1058CB: ???
+==26546==    by 0x4067BFFFFFFFFFFF: ???
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xD0000000A: ???
+==26546==    by 0xE10075F: ???
+==26546==    by 0xE104E5F: ???
+==26546==    by 0xE105943: ???
+==26546==    by 0xE1058CB: ???
+==26546==    by 0xE10578F: ???
+==26546==    by 0xE10597B: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC587D59: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x3B: ???
+==26546==    by 0xE1058CB: ???
+==26546==    by 0x4067BFFFFFFFFFFF: ???
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xD0000000A: ???
+==26546==    by 0xE10075F: ???
+==26546==    by 0xE104E5F: ???
+==26546==    by 0xE105943: ???
+==26546==    by 0xE1058CB: ???
+==26546==    by 0xE10578F: ???
+==26546==    by 0xE10597B: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC587D73: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x3B: ???
+==26546==    by 0xE1058CB: ???
+==26546==    by 0x4067BFFFFFFFFFFF: ???
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xD0000000A: ???
+==26546==    by 0xE10075F: ???
+==26546==    by 0xE104E5F: ???
+==26546==    by 0xE105943: ???
+==26546==    by 0xE1058CB: ???
+==26546==    by 0xE10578F: ???
+==26546==    by 0xE10597B: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC587D95: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x3B: ???
+==26546==    by 0xE1058CB: ???
+==26546==    by 0x4067BFFFFFFFFFFF: ???
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xD0000000A: ???
+==26546==    by 0xE10075F: ???
+==26546==    by 0xE104E5F: ???
+==26546==    by 0xE105943: ???
+==26546==    by 0xE1058CB: ???
+==26546==    by 0xE10578F: ???
+==26546==    by 0xE10597B: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC587DB7: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x3B: ???
+==26546==    by 0xE1058CB: ???
+==26546==    by 0x4067BFFFFFFFFFFF: ???
+==26546==    by 0xE0E188B: ???
+==26546==    by 0xD0000000A: ???
+==26546==    by 0xE10075F: ???
+==26546==    by 0xE104E5F: ???
+==26546==    by 0xE105943: ???
+==26546==    by 0xE1058CB: ???
+==26546==    by 0xE10578F: ???
+==26546==    by 0xE10597B: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC584801: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x455132: TestFilter::testCanny() (TestFilter.cpp:883)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Use of uninitialised value of size 8
+==26546==    at 0xC58482C: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x455132: TestFilter::testCanny() (TestFilter.cpp:883)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC588145: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0xFFFFFFFFFFFFFFC3: ???
+==26546==    by 0xCF71C1A: ippiFilterColumn_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xE104EF1: ???
+==26546==    by 0xE1058EB: ???
+==26546==    by 0xE10079F: ???
+==26546==    by 0x1F: ???
+==26546==    by 0xE: ???
+==26546==    by 0xE10557F: ???
+==26546==    by 0x1: ???
+==26546==    by 0x3B: ???
+==26546==    by 0x41EFFFFF: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC5882A7: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0xFFFFFFFFFFFFFFC3: ???
+==26546==    by 0xE105943: ???
+==26546==    by 0xE10588F: ???
+==26546==    by 0x2: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC5882B3: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0xFFFFFFFFFFFFFFC3: ???
+==26546==    by 0xE105943: ???
+==26546==    by 0xE10588F: ???
+==26546==    by 0x2: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC5882CD: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0xFFFFFFFFFFFFFFC3: ???
+==26546==    by 0xE105943: ???
+==26546==    by 0xE10588F: ???
+==26546==    by 0x2: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC5882EF: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0xFFFFFFFFFFFFFFC3: ???
+==26546==    by 0xE105943: ???
+==26546==    by 0xE10588F: ???
+==26546==    by 0x2: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC588311: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0xFFFFFFFFFFFFFFC3: ???
+==26546==    by 0xE105943: ???
+==26546==    by 0xE10588F: ???
+==26546==    by 0x2: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC587E92: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x3B: ???
+==26546==    by 0xE105963: ???
+==26546==    by 0xE105943: ???
+==26546==    by 0x2: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC587FF4: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x3B: ???
+==26546==    by 0xE10588F: ???
+==26546==    by 0xE105943: ???
+==26546==    by 0x2: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC588000: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x3B: ???
+==26546==    by 0xE10588F: ???
+==26546==    by 0xE105943: ???
+==26546==    by 0x2: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC58801A: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x3B: ???
+==26546==    by 0xE10588F: ???
+==26546==    by 0xE105943: ???
+==26546==    by 0x2: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC58803C: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x3B: ???
+==26546==    by 0xE10588F: ???
+==26546==    by 0xE105943: ???
+==26546==    by 0x2: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC58805E: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x3B: ???
+==26546==    by 0xE10588F: ???
+==26546==    by 0xE105943: ???
+==26546==    by 0x2: ???
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC58431C: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x455132: TestFilter::testCanny() (TestFilter.cpp:883)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Use of uninitialised value of size 8
+==26546==    at 0xC584346: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x455132: TestFilter::testCanny() (TestFilter.cpp:883)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC58435B: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x455132: TestFilter::testCanny() (TestFilter.cpp:883)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Use of uninitialised value of size 8
+==26546==    at 0xC584361: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x455132: TestFilter::testCanny() (TestFilter.cpp:883)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC583BAB: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x455132: TestFilter::testCanny() (TestFilter.cpp:883)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC583C10: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x455132: TestFilter::testCanny() (TestFilter.cpp:883)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC583C1C: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x455132: TestFilter::testCanny() (TestFilter.cpp:883)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Use of uninitialised value of size 8
+==26546==    at 0xC583C40: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x455132: TestFilter::testCanny() (TestFilter.cpp:883)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC583C50: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x455132: TestFilter::testCanny() (TestFilter.cpp:883)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Use of uninitialised value of size 8
+==26546==    at 0xC583C56: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x455132: TestFilter::testCanny() (TestFilter.cpp:883)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC583C77: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x455132: TestFilter::testCanny() (TestFilter.cpp:883)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC583C7F: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x455132: TestFilter::testCanny() (TestFilter.cpp:883)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC583C87: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x455132: TestFilter::testCanny() (TestFilter.cpp:883)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0xC583CB3: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x455132: TestFilter::testCanny() (TestFilter.cpp:883)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Use of uninitialised value of size 8
+==26546==    at 0xC583E7F: ippiCanny_16s8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippcvy8.so.5.3)
+==26546==    by 0x52D299: NICE::canny(NICE::ImageT<unsigned char> const&, unsigned int const&, unsigned int const&, NICE::ImageT<unsigned char>*, NICE::ImageT<short> const*, NICE::ImageT<short> const*) (Filter.cpp:887)
+==26546==    by 0x455132: TestFilter::testCanny() (TestFilter.cpp:883)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x521648: NICE::hitAndMiss(NICE::ImageT<unsigned char> const&, NICE::MatrixT<char> const&, NICE::ImageT<unsigned char>*) (Morph.cpp:928)
+==26546==    by 0x473FF1: TestMorph::testHitAndMiss() (TestMorph.cpp:562)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x521648: NICE::hitAndMiss(NICE::ImageT<unsigned char> const&, NICE::MatrixT<char> const&, NICE::ImageT<unsigned char>*) (Morph.cpp:928)
+==26546==    by 0x47455E: TestMorph::testHitAndMiss() (TestMorph.cpp:567)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x521648: NICE::hitAndMiss(NICE::ImageT<unsigned char> const&, NICE::MatrixT<char> const&, NICE::ImageT<unsigned char>*) (Morph.cpp:928)
+==26546==    by 0x4746BA: TestMorph::testHitAndMiss() (TestMorph.cpp:572)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x521648: NICE::hitAndMiss(NICE::ImageT<unsigned char> const&, NICE::MatrixT<char> const&, NICE::ImageT<unsigned char>*) (Morph.cpp:928)
+==26546==    by 0x474DC1: TestMorph::testHitAndMiss() (TestMorph.cpp:577)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x521648: NICE::hitAndMiss(NICE::ImageT<unsigned char> const&, NICE::MatrixT<char> const&, NICE::ImageT<unsigned char>*) (Morph.cpp:928)
+==26546==    by 0x4758E9: TestMorph::testHitAndMiss() (TestMorph.cpp:602)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x4A4520: NICE::LineT<unsigned char>::doDraw(NICE::ColorImageT<unsigned char>&, NICE::ColorT<unsigned char> const&) const (LineT.tcc:83)
+==26546==    by 0x4A2ADF: TestDrawable::testSomething() (Drawable.h:71)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x4A45F1: NICE::LineT<unsigned char>::doDraw(NICE::ColorImageT<unsigned char>&, NICE::ColorT<unsigned char> const&) const (LineT.tcc:114)
+==26546==    by 0x4A2ADF: TestDrawable::testSomething() (Drawable.h:71)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x4A4520: NICE::LineT<unsigned char>::doDraw(NICE::ColorImageT<unsigned char>&, NICE::ColorT<unsigned char> const&) const (LineT.tcc:83)
+==26546==    by 0x4A2CE3: TestDrawable::testSomething() (Drawable.h:71)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x4A45F1: NICE::LineT<unsigned char>::doDraw(NICE::ColorImageT<unsigned char>&, NICE::ColorT<unsigned char> const&) const (LineT.tcc:114)
+==26546==    by 0x4A2CE3: TestDrawable::testSomething() (Drawable.h:71)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x4E10C2: ImageTest::testGrayImage() (ImageT.tcc:774)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94E6629: CppUnit::TestResult::runTest(CppUnit::Test*) (TestResult.cpp:145)
+==26546== 
+==26546== Use of uninitialised value of size 8
+==26546==    at 0xD01B159: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546== 
+==26546== Use of uninitialised value of size 8
+==26546==    at 0xD01B15E: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546== 
+==26546== Use of uninitialised value of size 8
+==26546==    at 0xD01B163: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546== 
+==26546== Use of uninitialised value of size 8
+==26546==    at 0xD01B154: ??? (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x4E3000: ImageTest::testImageTools() (ImageTest.cpp:603)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x4E30AB: ImageTest::testImageTools() (ImageTest.cpp:604)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x4E3156: ImageTest::testImageTools() (ImageTest.cpp:605)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x4E3204: ImageTest::testImageTools() (ImageTest.cpp:606)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x4E32AF: ImageTest::testImageTools() (ImageTest.cpp:607)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Conditional jump or move depends on uninitialised value(s)
+==26546==    at 0x417F07: void CppUnit::assertEquals<int>(int const&, int const&, CppUnit::SourceLine, std::string const&) (TestAssert.h:99)
+==26546==    by 0x4E335D: ImageTest::testImageTools() (ImageTest.cpp:608)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546==    by 0x94DF1E5: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23)
+==26546== 
+==26546== Use of uninitialised value of size 8
+==26546==    at 0xCFE59B9: ownpi_Histogram_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCFE4D8A: ippiHistogramRange_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCFDFE60: ippiHistogramEven_8u_C1R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x537573: NICE::Histogram::Histogram(NICE::ImageT<unsigned char> const&, int const&, int const&, int const&) (ippwrapper.tcc:14228)
+==26546==    by 0x512A06: TestHistogram::testCombined() (TestHistogram.cpp:491)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Use of uninitialised value of size 8
+==26546==    at 0xCFE59F3: ownpi_Histogram_8u_C3R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCFE4FDD: ippiHistogramRange_8u_C3R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCFE00A4: ippiHistogramEven_8u_C3R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x536E11: NICE::Histogram::Histogram(NICE::ColorImageT<unsigned char> const&, int const&, int const&, int const&) (ippwrapper.tcc:14231)
+==26546==    by 0x512EF2: TestHistogram::testCombined() (TestHistogram.cpp:495)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Use of uninitialised value of size 8
+==26546==    at 0xCFE59FE: ownpi_Histogram_8u_C3R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCFE4FDD: ippiHistogramRange_8u_C3R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCFE00A4: ippiHistogramEven_8u_C3R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x536E11: NICE::Histogram::Histogram(NICE::ColorImageT<unsigned char> const&, int const&, int const&, int const&) (ippwrapper.tcc:14231)
+==26546==    by 0x512EF2: TestHistogram::testCombined() (TestHistogram.cpp:495)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+==26546== Use of uninitialised value of size 8
+==26546==    at 0xCFE5A11: ownpi_Histogram_8u_C3R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCFE4FDD: ippiHistogramRange_8u_C3R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0xCFE00A4: ippiHistogramEven_8u_C3R (in /home/dbv/3rdparty64/intel/ipp/5.3.4.080/em64t/sharedlib/libippiy8.so.5.3)
+==26546==    by 0x536E11: NICE::Histogram::Histogram(NICE::ColorImageT<unsigned char> const&, int const&, int const&, int const&) (ippwrapper.tcc:14231)
+==26546==    by 0x512EF2: TestHistogram::testCombined() (TestHistogram.cpp:495)
+==26546==    by 0x94DECE6: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32)
+==26546==    by 0x94D0F13: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15)
+==26546==    by 0x94DAC88: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20)
+==26546==    by 0x94DA9C7: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:77)
+==26546==    by 0x94E684F: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) (TestResult.cpp:178)
+==26546==    by 0x94DE9BF: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:92)
+==26546==    by 0x94DF2BB: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64)
+==26546== 
+vex amd64->IR: unhandled instruction bytes: 0x48 0xF 0x5A 0x7 0x48 0xF
+==26546== valgrind: Unrecognised instruction at address 0xc30cd70.
+==26546== Your program just tried to execute an instruction that Valgrind
+==26546== did not recognise.  There are two possible reasons for this.
+==26546== 1. Your program has a bug and erroneously jumped to a non-code
+==26546==    location.  If you are running Memcheck and you just saw a
+==26546==    warning about a bad jump, it's probably your program's fault.
+==26546== 2. The instruction is legitimate but Valgrind doesn't handle it,
+==26546==    i.e. it's Valgrind's fault.  If you think this is the case or
+==26546==    you are not sure, please let us know and we'll try to fix it.
+==26546== Either way, Valgrind will now raise a SIGILL signal which will
+==26546== probably kill your program.
+vex amd64->IR: unhandled instruction bytes: 0x48 0xF 0x5A 0x7 0x48 0xF
+==26546== valgrind: Unrecognised instruction at address 0xc30cd70.
+==26546== Your program just tried to execute an instruction that Valgrind
+==26546== did not recognise.  There are two possible reasons for this.
+==26546== 1. Your program has a bug and erroneously jumped to a non-code
+==26546==    location.  If you are running Memcheck and you just saw a
+==26546==    warning about a bad jump, it's probably your program's fault.
+==26546== 2. The instruction is legitimate but Valgrind doesn't handle it,
+==26546==    i.e. it's Valgrind's fault.  If you think this is the case or
+==26546==    you are not sure, please let us know and we'll try to fix it.
+==26546== Either way, Valgrind will now raise a SIGILL signal which will
+==26546== probably kill your program.
+==26546== valgrind: Unrecognised instruction at address 0xc30cd70.
+==26546== Your program just tried to execute an instruction that Valgrind
+==26546== did not recognise.  There are two possible reasons for this.
+==26546== 1. Your program has a bug and erroneously jumped to a non-code
+==26546==    location.  If you are running Memcheck and you just saw a
+==26546==    warning about a bad jump, it's probably your program's fault.
+==26546== 2. The instruction is legitimate but Valgrind doesn't handle it,
+==26546==    i.e. it's Valgrind's fault.  If you think this is the case or
+==26546==    you are not sure, please let us know and we'll try to fix it.
+==26546== Either way, Valgrind will now raise a SIGILL signal which will
+==26546== probably kill your program.
+
+!!!!!!!!!removed about 7.5 mio lines similar to the previous lines !!!!!!!!!!!!!!!!
+
+...................................................................==26546== 
+==26546== HEAP SUMMARY:
+==26546==     in use at exit: 597,628 bytes in 2,411 blocks
+==26546==   total heap usage: 433,931 allocs, 431,520 frees, 38,796,437 bytes allocated
+==26546== 
+==26546== LEAK SUMMARY:
+==26546==    definitely lost: 15,196 bytes in 274 blocks
+==26546==    indirectly lost: 254,007 bytes in 277 blocks
+==26546==      possibly lost: 197,833 bytes in 235 blocks
+==26546==    still reachable: 130,592 bytes in 1,625 blocks
+==26546==         suppressed: 0 bytes in 0 blocks
+==26546== Rerun with --leak-check=full to see details of leaked memory
+==26546== 
+==26546== For counts of detected and suppressed errors, rerun with: -v
+==26546== Use --track-origins=yes to see where uninitialised values come from
+==26546== ERROR SUMMARY: 4913 errors from 373 contexts (suppressed: 260 from 20)

+ 8 - 0
core/Makefile

@@ -0,0 +1,8 @@
+#TARGETS_FROM:=$(notdir $(patsubst %/,%,$(shell pwd)))/$(TARGETS_FROM)
+#$(info recursivly going up: $(TARGETS_FROM) ($(shell pwd)))
+
+all:
+
+%:
+	$(MAKE) TARGETS_FROM=$(notdir $(patsubst %/,%,$(shell pwd)))/$(TARGETS_FROM) -C .. $@
+

+ 103 - 0
core/Makefile.inc

@@ -0,0 +1,103 @@
+# LIBRARY-DIRECTORY-MAKEFILE
+# conventions:
+# - all subdirectories containing a "Makefile.inc" are considered sublibraries
+#   exception: "progs/" and "tests/" subdirectories!
+# - all ".C", ".cpp" and ".c" files in the current directory are linked to a
+#   library
+# - the library depends on all sublibraries 
+# - the library name is created with $(LIBNAME), i.e. it will be somehow
+#   related to the directory name and with the extension .a
+#   (e.g. lib1/sublib -> lib1_sublib.a)
+# - the library will be added to the default build list ALL_LIBRARIES
+
+# --------------------------------
+# - remember the last subdirectory
+#
+# set the variable $(SUBDIR) correctly to the current subdirectory. this
+# variable can be used throughout the current makefile.inc. The many 
+# SUBDIR_before, _add, and everything are only required so that we can recover
+# the previous content of SUBDIR before exitting the makefile.inc
+
+SUBDIR_add:=$(dir $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)))
+SUBDIR_before:=$(SUBDIR)
+SUBDIR:=$(strip $(SUBDIR_add))
+SUBDIR_before_$(SUBDIR):=$(SUBDIR_before)
+ifeq "$(SUBDIR)" "./"
+SUBDIR:=
+endif
+
+# ------------------------
+# - include subdirectories
+#
+# note the variables $(SUBDIRS_OF_$(SUBDIR)) are required later on to recover
+# the dependencies automatically. if you handle dependencies on your own, you
+# can also dump the $(SUBDIRS_OF_$(SUBDIR)) variable, and include the
+# makefile.inc of the subdirectories on your own...
+
+SUBDIRS_OF_$(SUBDIR):=$(patsubst %/Makefile.inc,%,$(wildcard $(SUBDIR)*/Makefile.inc))
+include $(SUBDIRS_OF_$(SUBDIR):%=%/Makefile.inc)
+
+# ----------------------------
+# - include local dependencies
+#
+# you can specify libraries needed by the individual objects or by the whole
+# directory. the object specific additional libraries are only considered
+# when compiling the specific object files
+# TODO: update documentation...
+
+-include $(SUBDIR)libdepend.inc
+
+$(foreach d,$(filter-out %progs %tests,$(SUBDIRS_OF_$(SUBDIR))),$(eval $(call PKG_DEPEND_INT,$(d))))
+
+# ---------------------------
+# - objects in this directory
+#
+# the use of the variable $(OBJS) is not mandatory. it is mandatory however
+# to update $(ALL_OBJS) in a way that it contains the path and name of
+# all objects. otherwise we can not include the appropriate .d files.
+
+OBJS:=$(patsubst %.cpp,$(OBJDIR)%.o,$(notdir $(wildcard $(SUBDIR)*.cpp))) \
+      $(patsubst %.C,$(OBJDIR)%.o,$(notdir $(wildcard $(SUBDIR)*.C))) \
+	  $(shell grep -ls Q_OBJECT $(SUBDIR)*.h | sed -e's@^@/@;s@.*/@$(OBJDIR)moc_@;s@\.h$$@.o@') \
+      $(patsubst %.c,$(OBJDIR)%.o,$(notdir $(wildcard $(SUBDIR)*.c)))
+ALL_OBJS += $(OBJS)
+
+# ----------------------------
+# - binaries in this directory
+#
+# output of binaries in this directory. none of the variables has to be used.
+# but everything you add to $(ALL_LIBRARIES) and $(ALL_BINARIES) will be
+# compiled with `make all`. be sure again to add the files with full path.
+
+LIBRARY_BASENAME:=$(call LIBNAME,$(SUBDIR))
+ifneq "$(SUBDIR)" ""
+ALL_LIBRARIES+=$(LIBDIR)$(LIBRARY_BASENAME).$(LINK_FILE_EXTENSION)
+endif
+
+# ---------------------
+# - binary dependencies
+#
+# there is no way of determining the binary dependencies automatically, so we
+# follow conventions. the current library depends on all sublibraries.
+# all other dependencies have to be added manually by specifying, that the
+# current .pc file depends on some other .pc file. binaries depending on
+# libraries should exclusivelly use the .pc files as well.
+
+ifeq "$(SKIP_BUILD_$(OBJDIR))" "1"
+$(LIBDIR)$(LIBRARY_BASENAME).a:
+else
+$(LIBDIR)$(LIBRARY_BASENAME).a:$(OBJS) \
+	$(call PRINT_INTLIB_DEPS,$(PKGDIR)$(LIBRARY_BASENAME).a,.$(LINK_FILE_EXTENSION))
+endif
+
+$(PKGDIR)$(LIBRARY_BASENAME).pc: \
+	$(call PRINT_INTLIB_DEPS,$(PKGDIR)$(LIBRARY_BASENAME).pc,.pc)
+
+# -------------------
+# - subdir management
+#
+# as the last step, always add this line to correctly recover the subdirectory
+# of the makefile including this one!
+
+SUBDIR:=$(SUBDIR_before_$(SUBDIR))
+

+ 102 - 0
core/algebra/CholeskyRobust.cpp

@@ -0,0 +1,102 @@
+/** 
+* @file CholeskyRobust.cpp
+* @brief robust cholesky decomposition by adding some noise
+* @author Erik Rodner
+* @date 01/06/2010
+
+*/
+#include <iostream>
+
+#include "CholeskyRobust.h"
+#include "core/vector/Algorithms.h"
+
+#ifdef NICE_USELIB_CUDACHOLESKY
+#include "cholesky-gpu/niceinterface/CudaCholeskyNICE.h"
+#endif
+
+using namespace std;
+using namespace NICE;
+using namespace NICE;
+
+
+CholeskyRobust::CholeskyRobust (const CholeskyRobust & src):m_verbose (src.m_verbose), m_noise (src.m_noise),
+        m_useCuda (src.m_useCuda), m_logDetMatrix (src.m_logDetMatrix)
+{
+}
+
+double
+CholeskyRobust::robustChol (const Matrix & A, Matrix & cholA)
+{
+	// this additional memory requirement could be skipped
+	// with a modified cholesky routine
+	Matrix ARegularized (A);
+
+	if (m_verbose)
+		cerr << "CholeskyRobust::robustChol: Adding noise " << m_noise << endl;
+
+  // add a constant value to the diagonal
+	ARegularized.addIdentity (m_noise);
+
+  // check whether the cholesky-gpu sub-library is installed
+#ifdef NICE_USELIB_CUDACHOLESKY
+	if (m_useCuda)
+    try {
+  		CudaCholeskyNICE::choleskyDecomp (ARegularized, cholA);
+    } catch (CudaError & e)
+		{
+			fthrow (CudaError, e.what ());
+    }
+	else
+#endif
+    // use the cholesky decomposition available in core/vector/
+    // we use the large scale version here, because we expect that if you use
+    // CholeskyRobust, you do not have input matrices with a few elements
+		choleskyDecompLargeScale (ARegularized, cholA);
+
+  // compute the logarithm of the log determinant by
+  // summing up logarithms of all diagonal elements
+  // multiplication by 2 is necessary, because ARegularized = cholA'*cholA
+	m_logDetMatrix = 2 * triangleMatrixLogDet (cholA);
+	if (m_verbose)
+		cerr << "CholeskyRobust::robustChol: Cholesky condition (logdet): " << m_logDetMatrix << endl;
+
+  // if the log determinant is NaN or Inf, then we should warn!
+	if (!finite (m_logDetMatrix))
+	{
+		fthrow (Exception,
+						"The matrix has infinite or not defined log determinant !");
+	}
+
+	return m_noise;
+}
+
+double
+CholeskyRobust::robustCholInv (const Matrix & A, Matrix & invA)
+{
+	Matrix G;
+	double noise = robustChol (A, G);
+	if (m_verbose)
+		cerr << "CholeskyRobust::robustChol: Cholesky inversion" << endl;
+
+	choleskyInvertLargeScale (G, invA);
+
+	return noise;
+}
+
+
+CholeskyRobust::~CholeskyRobust ()
+{
+}
+
+CholeskyRobust::CholeskyRobust (bool verbose, double noise, bool useCuda):
+    m_verbose (verbose), m_noise(noise),  m_useCuda (useCuda)
+{
+	m_logDetMatrix = - std::numeric_limits<double>::max();
+}
+
+CholeskyRobust *
+CholeskyRobust::clone (void) const
+{
+	CholeskyRobust *dst = new CholeskyRobust (*this);
+	return dst;
+}

+ 104 - 0
core/algebra/CholeskyRobust.h

@@ -0,0 +1,104 @@
+/** 
+* @file CholeskyRobust.h
+* @author Erik Rodner
+* @date 01/06/2010
+
+*/
+#ifndef _NICE_NICE_CHOLESKYROBUSTINCLUDE
+#define _NICE_NICE_CHOLESKYROBUSTINCLUDE
+
+#include <limits>
+#include "core/vector/MatrixT.h"
+
+namespace NICE
+{
+
+/** @class CholeskyRobust
+ * robust cholesky decomposition by adding some noise 
+ *
+ * @author Erik Rodner
+ */
+class CholeskyRobust
+{
+
+	protected:
+    /** output some messages */
+		const bool m_verbose;
+
+    /** noise added to the main diagonal */
+		const double m_noise;
+
+    /** should cuda be used */
+		const bool m_useCuda;
+
+    /** store the logarithm of the determinant */
+		double m_logDetMatrix;
+
+
+	public:
+
+    
+    /**
+    * @brief constructor 
+    *
+    * @param verbose whether to display a bunch of messages
+    * @param noise constant added to the main diagonal
+    * @param useCuda whether to use cuda with the cholesky-gpu sub-library
+    */
+    CholeskyRobust (bool verbose = true, double noise = 1e-8, bool useCuda =	true);
+
+    /**
+    * @brief copy constructor
+    *
+    * @param src objrec to copy from (settings)
+    */
+    CholeskyRobust (const CholeskyRobust & src);
+
+    /**
+    * @brief destructor, currently empty
+    */
+    virtual ~CholeskyRobust ();
+
+    /**
+    * @brief Compute the Cholesky decomposition with additional regularization given to the
+    * constructor of the object
+    *
+    * @param A input matrix
+    * @param cholA Cholesky factor
+    *
+    * @return noise added to the diagonal of the matrix
+    */
+		virtual double robustChol (const NICE::Matrix & A, NICE::Matrix & cholA);
+
+    /**
+    * @brief Invert a positive definite matrix using its Cholesky decomposition and 
+    * additional regularization. The function uses robustChol and is available for
+    * every child class.
+    *
+    * @param A input matrix
+    * @param invA inverse of the matrix (take care of the regularization)
+    *
+    * @return noise added to the diagonal of the matrix
+    */
+		virtual double robustCholInv (const NICE::Matrix & A, NICE::Matrix & invA);
+
+    /**
+    * @brief get the last log determinant computed
+    *
+    * @return log determinant of the last calculation
+    */
+		double getLastLogDet () const
+		{
+			return m_logDetMatrix;
+		};
+
+    /**
+    * @brief clone the object
+    */
+		virtual CholeskyRobust *clone (void) const;
+
+};
+
+}
+
+#endif

+ 154 - 0
core/algebra/CholeskyRobustAuto.cpp

@@ -0,0 +1,154 @@
+/** 
+* @file CholeskyRobustAuto.cpp
+* @brief robust cholesky decomposition by iteratively adding some noise
+* @author Erik Rodner
+* @date 01/06/2010
+
+*/
+#include <iostream>
+
+#include "core/vector/Algorithms.h"
+
+#include "CholeskyRobustAuto.h"
+
+// include the optional cholesky sub-library, when available
+#ifdef NICE_USELIB_CUDACHOLESKY
+#include "cholesky-gpu/niceinterface/CudaCholeskyNICE.h"
+#endif
+
+using namespace std;
+using namespace NICE;
+
+/** number of maximum iterations used for regularization */
+const int maxiterations = 30;
+/** should we use exponential scaling for the regularization parameter */
+const bool exponential_noise = true;
+/** multiply in each iteration with this value (only if exponential noise is on) */
+const double exp_multiplication_factor = 10.0;
+
+CholeskyRobustAuto::CholeskyRobustAuto (const CholeskyRobustAuto & src):
+CholeskyRobust (src)
+{
+  m_minMatrixLogDeterminant = src.m_minMatrixLogDeterminant;
+}
+
+double
+CholeskyRobustAuto::robustChol (const Matrix & A, Matrix & cholA)
+{
+	// this additional memory requirement could be skipped
+	// with a modified cholesky routine
+	Matrix ARegularized (A);
+
+	if (m_verbose)
+		cerr << "CholeskyRobustAuto::robustChol: A " << A.rows () << " x " << A.cols () << endl;
+
+	int i = 0;
+	double noise = 0.0;
+	double noiseStepExp = m_noise;
+	bool robust = true;
+
+  // iteration loop
+	do
+	{
+    // first of all, we assume everything is fine
+		robust = true;
+
+		if (m_verbose)
+			cerr << "CholeskyRobustAuto::robustChol: Cholesky decomposition" << endl;
+
+		try
+		{
+#ifdef NICE_USELIB_CUDACHOLESKY
+			if (m_useCuda)
+				CudaCholeskyNICE::choleskyDecomp (ARegularized, cholA);
+			else
+#endif
+				choleskyDecompLargeScale (ARegularized, cholA);
+#ifdef NICE_USELIB_CUDACHOLESKY
+		} // catch a nasty Cuda error
+		catch (CudaError & e)
+		{
+			fthrow (CudaError, e.what ());
+#endif
+		}
+		catch (Exception)
+		{
+			if (m_verbose)
+				cerr << "CholeskyRobustAuto::robustChol: failed!" << endl;
+      // Cholesky decomposition failed, therefore, we have to run again
+			robust = false;
+		}
+
+    // check whether the Cholesky factor contains nasty NaN values
+		if (robust && cholA.containsNaN ())
+		{
+			if (m_verbose)
+				cerr <<
+					"CholeskyRobustAuto::robustChol: cholesky matrix contains NaN values"
+					<< endl;
+      // if it contains NaNs it is surely not robust
+			robust = false;
+		}
+
+    // set the log determinant to the minimum value
+    // just in case we do not achieve a robust estimate
+		m_logDetMatrix = m_minMatrixLogDeterminant;
+		if (robust)
+		{
+      // compute the log determinant
+			m_logDetMatrix = 2 * triangleMatrixLogDet (cholA);
+			if (m_verbose)
+				cerr << "CholeskyRobustAuto::robustChol: Cholesky condition: " <<
+					m_logDetMatrix << endl;
+		}
+
+
+		if (isnan (m_logDetMatrix) || (m_logDetMatrix < m_minMatrixLogDeterminant))
+		{
+			robust = false;
+		}
+
+		if (!robust)
+		{
+			robust = false;
+			if (m_verbose)
+				cerr << "CholeskyRobustAuto::robustChol: Adding noise " << noiseStepExp
+					<< endl;
+
+      // in case the last estimate was not robust 
+      // (1) add something to the diagonal
+			ARegularized.addIdentity (noiseStepExp);
+			noise += noiseStepExp;
+
+      // increase the noise
+			if (exponential_noise)
+				noiseStepExp *= exp_multiplication_factor;
+		}
+
+		i++;
+	}
+  // while we did not achieve a robust value and the maximum number of iterations
+  // is not reached
+	while (!robust && (i < maxiterations));
+
+	if (!robust)
+		fthrow (Exception,
+						"Inverse matrix is instable (please adjust the noise step term)");
+
+	return noise;
+}
+
+CholeskyRobustAuto::~CholeskyRobustAuto ()
+{
+}
+
+CholeskyRobustAuto::CholeskyRobustAuto (bool verbose, double noiseStep, double minMatrixLogDeterminant, bool useCuda):
+    CholeskyRobust (verbose, noiseStep, useCuda)
+{
+  m_minMatrixLogDeterminant = minMatrixLogDeterminant;
+}
+
+CholeskyRobustAuto *CholeskyRobustAuto::clone (void) const 
+{
+	return new CholeskyRobustAuto (*this);
+}

+ 73 - 0
core/algebra/CholeskyRobustAuto.h

@@ -0,0 +1,73 @@
+/** 
+* @file CholeskyRobustAuto.h
+* @author Erik Rodner
+* @date 01/06/2010
+
+*/
+#ifndef _NICE_NICE_CHOLESKYROBUSTAUTOINCLUDE
+#define _NICE_NICE_CHOLESKYROBUSTAUTOINCLUDE
+
+#include <limits>
+#include "core/vector/MatrixT.h"
+
+#include "CholeskyRobust.h"
+
+namespace NICE
+{
+
+/** @class CholeskyRobustAuto
+ * robust cholesky decomposition by iteratively adding some noise 
+ *
+ * @author Erik Rodner
+ */
+class CholeskyRobustAuto : public CholeskyRobust
+{
+
+	protected:
+
+    /** minimal log determinant */ 
+	  double m_minMatrixLogDeterminant;
+
+	public:
+    /**
+    * @brief copy constructor
+    *
+    * @param src input object
+    */
+		CholeskyRobustAuto (const CholeskyRobustAuto & src);
+
+    /**
+    * @brief constructor
+    *
+    * @param verbose whether to display a bunch of messages
+    * @param noise constant added iteratively to the main diagonal
+    * @param minMatrixLogDeterminant if the log determinant is greater than this threshold, we accept the decomposition
+    * @param useCuda whether to use cuda with the cholesky-gpu sub-library
+    */
+		CholeskyRobustAuto (bool verbose = true, 
+                        double noiseStep = 1e-8, 
+                        double minMatrixLogDeterminant = -std::numeric_limits < double >::max (), 
+                        bool useCuda = true);
+
+	  virtual ~ CholeskyRobustAuto ();
+
+    /**
+    * @brief Compute the Cholesky decompisition with iterative regularization, i.e.
+    * we add a constant value to the diagonal of the input matrix until we get a numerical stable
+    * result determined by checking the log determinant.
+    *
+    * @param A input matrix
+    * @param cholA Cholesky factor
+    *
+    * @return 
+    */
+		virtual double robustChol (const NICE::Matrix & A, NICE::Matrix & cholA);
+
+    /** clone the object */
+		virtual CholeskyRobustAuto *clone (void) const;
+
+};
+
+}
+
+#endif

+ 207 - 0
core/algebra/DiagonalMatrixApprox.cpp

@@ -0,0 +1,207 @@
+/** 
+* @file DiagonalMatrixApprox.cpp
+* @brief find a diagonal matrix to approximate bilinear products
+* @author Erik Rodner
+* @date 05/31/2012
+
+*/
+#include <iostream>
+
+#include <core/optimization/gradientBased/FirstOrderRasmussen.h>
+#include <core/vector/Eigen.h>
+
+#include "DiagonalMatrixApprox.h"
+
+using namespace NICE;
+using namespace std;
+
+
+DiagonalMatrixApprox::DiagonalMatrixApprox( bool verbose, int maxIterations )
+{
+  this->epsilonStart = 1.0;
+  this->epsilonShrinkFactor = 0.8;
+  this->minFDelta = 1e-8;
+  this->minSolDelta = 1e-8;
+
+  this->maxEpsilonIterations = 100;
+
+  this->verbose = verbose;
+  this->optimizer = new FirstOrderRasmussen( /*false*/ this->verbose );
+  ( dynamic_cast< FirstOrderRasmussen * > (optimizer) )->setMaxIterations(maxIterations);
+
+}
+
+DiagonalMatrixApprox::~DiagonalMatrixApprox()
+{
+}
+
+void DiagonalMatrixApprox::approx ( const Matrix & A, Vector & D ) const
+{
+  double f0 = std::numeric_limits<double>::max();
+
+  // not so proper intialization with the diagonal matrix
+  /*
+  D.resize(A.rows());
+  for ( uint i = 0; i < D.size(); i++ )
+    D[i] = A(i,i);
+  */
+
+  Vector D0 ( D );
+
+  double epsilon = epsilonStart;
+  for ( uint i = 0; i < maxEpsilonIterations; i++ )
+  {
+    epsilon = epsilonShrinkFactor * epsilon;
+
+    // perform minimization with some gradient based method (this is a convex optimization problem)
+    DiagonalMatrixApproxOptimizationProblem opt ( &A, D0, epsilon, false /*verbose*/ );
+
+    optimizer->optimizeFirst ( opt );
+
+    D = opt.position();
+    double f = opt.computeObjective ();
+
+    if ( verbose )
+    {
+      cerr << "DiagonalMatrixApprox [" << i << " / " << maxEpsilonIterations << "]: " << f << " (epsilon=" << epsilon << ")" << endl;
+      cerr << D << endl;
+    }
+
+    if ( !finite(f) )
+    {
+      f = f0;
+      D = D0;
+      if ( verbose )
+        cerr << "DiagonalMatrixApprox ended in iteration " << i << " due to numerical problems when decreasing epsilon..." << endl;
+      return;
+    } 
+
+    double eig_small = opt.getSmallestEigenvalue();
+    if ( eig_small < 0.0 )
+    {
+      if ( verbose )
+        cerr << "DiagonalMatrixApprox: resetting current value due to negative eigenvalue: " << eig_small << endl;
+      D = f0;
+      D = D0;
+    } else {
+      // otherwise check for convergence
+      double solDelta = ( D - D0 ).normInf();
+      double fDelta = f0 - f; // this value should be positive, otherwise convergence is likely
+
+      if ( fDelta < minFDelta || solDelta < minSolDelta ) 
+      {
+        if ( verbose )
+          cerr << "DiagonalMatrixApprox: convergence detected delta_f=" << fDelta << " x_delta=" << solDelta << endl;
+        return;
+      }
+    }
+      
+
+
+    f0 = f;
+    D0 = D;
+  }
+
+}
+    
+DiagonalMatrixApproxOptimizationProblem::DiagonalMatrixApproxOptimizationProblem ( const Matrix *A, const Vector & D0, double epsilon, bool verbose ) 
+  : OptimizationProblemFirst( D0.size() )
+{
+  this->A = A;
+  this->parameters() = D0;
+  this->epsilon = epsilon;
+  this->verbose = verbose;
+}
+
+
+double DiagonalMatrixApproxOptimizationProblem::computeObjective()
+{
+  // Theoretically, we have to compute lambda_max(A - diag(D)). However, we want to solve
+  // the regularized and relaxed optimization problem, which involves all eigenvalues
+  
+  const Vector & D = parameters();
+  Matrix M = (*A);
+  M.addDiagonal ( (-1.0) * D );
+
+  if ( verbose ) {
+    cerr << "M = " << M << endl;
+    cerr << "D = " << D << endl;
+    cerr << "A = " << *A << endl;
+  }
+
+  //if ( verbose )
+  //  cerr << "Computing the eigenvalue decomposition ..." << endl;
+  
+  try {
+    eigenvectorvalues  ( M, eigenvectors, eigenvalues );
+  } catch ( ... ) {
+    // the matrix seems to be singular, maybe this is a good sign.
+    // Does not have to be: only the smallest eigenvalue can be zero
+    return 0.0;
+  }
+
+  //if ( verbose )
+  //  cerr << "Computing the objective ..." << endl;
+  double sumExp = 0.0;
+  for ( uint i = 0 ; i < eigenvalues.size(); i++ )
+    sumExp += exp( eigenvalues[i] / epsilon );
+
+  double fval = epsilon * log( sumExp ) + 0.5 * D.scalarProduct(D); 
+
+  //if ( verbose ) {
+    cerr << "DiagonalMatrixApprox: maximum eigenvalue is " << eigenvalues.Max() << endl;
+  //}
+
+  if ( !finite(fval) )
+  {
+    // some numerical problems occured
+    fval = numeric_limits<double>::infinity();
+  }
+
+  //if ( verbose )
+  //  cerr << "Objective value of the sub-problem is: " << fval << endl;
+
+  return fval;
+}
+
+void DiagonalMatrixApproxOptimizationProblem::computeGradient(Vector& newGradient)
+{
+  // inefficient but straightforward implementation with matrices P (denoted as A in the MATLAB code)
+  const Vector & D = parameters();
+  uint n = D.size();
+
+  Matrix P ( n, n, 0.0 );
+  Matrix W ( n, n, 0.0 );
+
+  if ( verbose ) {
+    cerr << "Eigenvectors are: " << eigenvectors << endl;
+    cerr << "Eigenvalues are: " << eigenvalues << endl;
+  }
+
+  for ( uint i = 0 ; i < n ; i++ )
+  {
+    P(i,i) = 1.0;
+    Matrix Ptilde = eigenvectors.transpose() * P * eigenvectors;
+    for ( uint j = 0 ; j < n ; j++ )
+      W(j,i) = Ptilde(j,j);
+    P(i,i) = 0.0;
+  }
+
+  double eigmax = eigenvalues.Max();
+
+  Vector mu (n);
+  for ( uint i = 0 ; i < n ; i++ )
+    mu[i] = exp( (eigenvalues[i] - eigmax)/epsilon );
+  
+  mu.normalizeL1();
+  if ( verbose ) {
+    cerr << "W = " << W << endl;
+    cerr << "mu = " << mu << endl; 
+  }
+
+  newGradient = - 1.0 * W.transpose() * mu + D;
+
+  if ( verbose ) {
+    cerr << "gradient = " << newGradient << endl;
+  }
+}

+ 108 - 0
core/algebra/DiagonalMatrixApprox.h

@@ -0,0 +1,108 @@
+/** 
+* @file DiagonalMatrixApprox.h
+* @author Erik Rodner
+* @date 05/31/2012
+
+*/
+#ifndef _NICE_DIAGONALMATRIXAPPROXINCLUDE
+#define _NICE_DIAGONALMATRIXAPPROXINCLUDE
+
+#include <core/vector/MatrixT.h>
+#include <core/vector/VectorT.h>
+#include <core/optimization/gradientBased/OptimizationProblemFirst.h>
+#include <core/optimization/gradientBased/OptimizationAlgorithmFirst.h>
+
+namespace NICE {
+  
+/** @class DiagonalMatrixApprox
+ * find a diagonal matrix to approximate bilinear products 
+ * (Method according to Chen et al., "Smooth convex approximation to the maximum eigenvalue function", 2004, J. of Global Optimization)
+ *
+ * @author Erik Rodner
+ */
+class DiagonalMatrixApprox
+{
+
+  protected:
+    bool verbose;
+
+    double epsilonStart;
+    double epsilonShrinkFactor;
+    double minFDelta;
+    double minSolDelta;
+
+    uint maxEpsilonIterations;
+
+
+    OptimizationAlgorithmFirst *optimizer;
+
+  public:
+
+    /** simple constructor */
+    DiagonalMatrixApprox( bool verbose = false, int maxIterations = -50 );
+      
+    /** simple destructor */
+    virtual ~DiagonalMatrixApprox();
+
+    /**
+    * @brief Approximate a (positive-definite) matrix A with a diagonal matrix, such that bilinear products are approximated.
+    * This is done by minimizing the largest eigenvalue of (A-D)
+    *
+    * @param A input matrix
+    * @param D resulting diagonal matrix given as a vector
+    */
+    void approx ( const Matrix & A, Vector & D ) const;
+     
+};
+
+/** corresponding optimization problem of DiagonalMatrixApprox (do not use directly) */
+class DiagonalMatrixApproxOptimizationProblem : public OptimizationProblemFirst
+{
+  protected:
+    bool verbose;
+    const Matrix *A;
+    double epsilon;
+
+    /** cached eigen-decomposition */
+    Matrix eigenvectors; 
+    Vector eigenvalues;
+
+  public:
+
+    /**
+    * @brief Constructor
+    *
+    * @param gm input generic matrix object
+    */
+    DiagonalMatrixApproxOptimizationProblem ( const Matrix *A, const Vector & D0, double epsilon, bool verbose = false );
+
+    /**
+    * @brief Compute the objective
+    *
+    * @return 
+    */
+    virtual double computeObjective();
+
+    /**
+    * @brief Compute the gradient of the problem
+    *
+    * @param newGradient output gradient vector
+    */
+    virtual void computeGradient( NICE::Vector& newGradient);
+
+
+    /**
+    * @brief get smallest eigenvalue
+    * @return smallest eigenvalue
+    */
+    double getSmallestEigenvalue () const
+    {
+      return (eigenvalues.size()>0) ? eigenvalues[eigenvalues.size() - 1] : 0.0;
+    }
+
+};
+
+
+}
+
+#endif

+ 98 - 0
core/algebra/EigValues.cpp

@@ -0,0 +1,98 @@
+/**
+ * @file EigValues.cpp
+ * @brief EigValues Class
+ * @author Michael Koch
+ * @date 08/19/2008
+*/
+
+#include <iostream>
+
+#include "EigValues.h"
+
+#define DEBUG_ARNOLDI
+
+using namespace NICE;
+using namespace std;
+
+void
+EVArnoldi::getEigenvalues ( const GenericMatrix & data, Vector & eigenvalues,
+                            Matrix & eigenvectors, uint k )
+{
+
+  if ( data.rows () != data.cols () )
+  {
+    throw ( "EVArnoldi: matrix has to be quadratic" );
+  }
+  if ( k <= 0 )
+  {
+    throw ( "EVArnoldi: please use k>0." );
+  }
+
+  if ( verbose )
+    cerr << "Initialize Matrices";
+
+  uint n = data.cols ();
+  NICE::Matrix rmatrix ( n, k, 0 ); //=eigenvectors
+  NICE::Matrix qmatrix ( n, k, 0 ); //saves data =eigenvectors
+  eigenvalues.resize ( k );
+  NICE::Vector q ( n );
+  NICE::Vector r ( n );
+
+  if ( verbose )
+    cerr << "Random Initialization" << endl;
+
+  //random initialisation
+  for ( uint i = 0; i < k; i++ )
+    for ( uint j = 0; j < n; j++ )
+      rmatrix ( j, i ) = drand48 ();
+//       rmatrix ( j, i ) = 0.5;
+      //TODO the random initialization might help, but it is bad for reproducibility :(
+
+  //reduceddim
+  double delta = 1.0;
+  uint iteration = 0;
+  while ( delta > mindelta && iteration < maxiterations )
+  {
+    NICE::Vector rold ( rmatrix.getColumn ( k - 1 ) );
+    // meta-comment: i is an index for the iteration, j is an index for the basis
+    // element (1 <= j <= k)
+    for ( uint reduceddim = 0; reduceddim < k; reduceddim++ )
+    {
+      // -> get r^i_j from R matrix
+      q = rmatrix.getColumn ( reduceddim );
+      // q^i_j = r^i_j / ||r^i_j||
+      q.normalizeL2 ();
+      // -> store in Q matrix
+      qmatrix.getColumnRef ( reduceddim ) = q;
+
+      // this line copies a vector with external memory!
+      // changing currentcol leads to a change in the R matrix!!
+      Vector currentCol = rmatrix.getColumnRef ( reduceddim );
+      // r^{i+1}_j = A * q^i_j      ( r^i_j is overwritten by r^{i+1}_j )
+      data.multiply ( currentCol, q );
+
+      // for all j: r^{i+1}_j -= q^i_j * < q^i_j, r^{i+1}_j >
+      for ( uint j = 0; j < reduceddim; j++ )
+        rmatrix.getColumnRef ( reduceddim ) -=
+          qmatrix.getColumn ( j ) *
+          ( qmatrix.getColumn ( j ).
+            scalarProduct ( rmatrix.getColumn ( reduceddim ) ) );
+    }
+    //convergence stuff
+    NICE::Vector diff = rold - rmatrix.getColumn ( k - 1 );
+    delta = diff.normL2 ();
+    iteration++;
+
+    if ( verbose )
+      cerr << "EVArnoldi: [" << iteration << "] delta=" << delta << endl;
+  }
+  eigenvectors = rmatrix;
+
+  for ( uint i = 0; i < k; i++ )
+  {
+    NICE::Vector tmp;
+    eigenvectors.getColumnRef ( i ).normalizeL2 ();
+    data.multiply ( tmp, eigenvectors.getColumn ( i ) );
+    eigenvalues[i] = tmp.scalarProduct ( eigenvectors.getColumn ( i ) );
+  }
+}

+ 69 - 0
core/algebra/EigValues.h

@@ -0,0 +1,69 @@
+/**
+* @file EigValues.h
+* @brief Computing eigenvalues and eigenvectors
+* @author Michael Koch,Erik Rodner
+* @date 08/19/2008
+
+*/
+#ifndef EigValuesINCLUDE
+#define EigValuesINCLUDE
+
+#include "GenericMatrix.h"
+
+namespace NICE
+{
+
+/** Computing eigenvalues and eigenvectors */
+class EigValues
+{
+
+  protected:
+
+  public:
+
+    /**
+      * @param data matrix interface that does allow matrix-vector multiplications
+      * @param k number of eigenvalues/eigenvectors
+      * @param eigenvectors output Eigenvectors as Matrix
+      * @param eigenvalues output Eigenvalues as Vector
+      */
+    virtual void getEigenvalues ( const GenericMatrix & data,
+                                  NICE::Vector & eigenvalues,
+                                  NICE::Matrix & eigenvectors, uint k ) = 0;
+
+    virtual ~EigValues ()
+    {
+    };
+
+};
+
+/** arnoldi iteration */
+class EVArnoldi : public EigValues
+{
+  protected:
+    uint maxiterations;
+    double mindelta;
+    bool verbose;
+
+  public:
+    EVArnoldi ( bool verbose = false, uint _maxiterations = 100, double _mindelta = 0.01 )
+        : maxiterations ( _maxiterations ), mindelta ( _mindelta )
+    {
+      this->verbose = verbose;
+    };
+
+    /**
+      * Arnoldi Iteration, to get k first eigenvectors and eigenvalues
+      * @param data matrix interface that does allow matrix-vector multiplications
+      * @param k number of eigenvalues/eigenvectors
+      * @param eigenvectors output Eigenvectors as Matrix
+      * @param eigenvalues output Eigenvalues as Vector
+      */
+    void getEigenvalues ( const GenericMatrix & data, NICE::Vector & eigenvalues,
+                          NICE::Matrix & eigenvectors, uint k );
+};
+
+
+} // namespace
+
+#endif

+ 126 - 0
core/algebra/EigValuesTRLAN.cpp

@@ -0,0 +1,126 @@
+#include "EigValuesTRLAN.h"
+
+#include <iostream>
+#include <assert.h>
+
+
+using namespace NICE;
+using namespace std;
+
+
+#ifdef NICE_USELIB_TRLAN
+/** some hacks to use the C functions in the TRLAN library */
+static const GenericMatrix* mat = NULL;
+
+/** generic vector matrix multiplication */
+static void op ( int* nrow, int* ncol, double* xin, int* ldx, double* xout, int* ldy )
+{
+  NICE::Vector xin_v ( xin, *ldy, NICE::VectorBase::external );
+  NICE::Vector xout_v ( xout, *ldy, NICE::VectorBase::external );
+  mat->multiply ( xout_v, xin_v );
+}
+
+/** imports from the TRLAN library */
+typedef void ( *OpFunc ) ( int* nrow, int* ncol, double* xin, int* ldx, double* xout, int* ldy );
+extern "C" void trlan77_ ( OpFunc op, int ipar[32], int* nrowl, int* mev, double* eval,
+                             double* evec, int* nrow2, double* wrk, int* lwrk );
+#endif
+
+
+/** constructor, initialize some settings */
+EigValuesTRLAN::EigValuesTRLAN ( int magnitude,
+                                 int restarting_scheme,
+                                 double tolerance,
+                                 int max_mult,
+                                 int mult_flops )
+{
+  this->magnitude = magnitude;
+  this->restarting_scheme = restarting_scheme;
+  this->tolerance = tolerance;
+  this->max_mult = max_mult;
+  this->mult_flops = mult_flops;
+  this->verbose = false;
+}
+
+
+/** get some eigenvalues */
+void EigValuesTRLAN::getEigenvalues ( const GenericMatrix &data, NICE::Vector & eigenvalues, NICE::Matrix & eigenvectors, uint k )
+{
+#ifndef NICE_USELIB_TRLAN
+  fthrow ( Exception, "EigValuesTRLAN::getEigenvalues: this functions needs the TRLAN library" );
+#else
+  if ( verbose )
+    fprintf ( stderr, "Starting eigenvalue computation with Lanczos Iteration ...\n" );
+  assert ( data.rows() == data.cols() );
+  if ( data.rows() != data.cols() ) {
+    fthrow ( Exception, "EigValuesTRLAN::getEigenvalues: the input matrix is not quadratic\n" );
+  }
+  /** set the global matrix */
+  mat = &data;
+  int mat_size = ( int ) data.rows();
+
+  if ( max_mult <= 0 ) max_mult = 10 * mat_size;
+  if ( mult_flops <= 0 ) mult_flops = 10 * mat_size;
+
+  /** intialize TRLAN stuff */
+  int computed_eigenpairs = k;
+  int ipar[32] = {0, magnitude, computed_eigenpairs, 0, 0, restarting_scheme, max_mult, 0, 1, 99, -1, 98, mult_flops};
+  double* evalbuff = new double[k];
+  memset ( evalbuff, 0, k*sizeof ( double ) );
+  double* evecbuff = new double[k*mat_size];
+  memset ( evecbuff, 1, k*mat_size*sizeof ( double ) );
+  int ritz_size = ( computed_eigenpairs < 3 ? 2 * computed_eigenpairs : computed_eigenpairs + 6 );
+  int workspace_size = ritz_size * ( ritz_size + 10 );
+  double* workspace = new double[workspace_size];
+  workspace[0] = tolerance;
+
+  if ( verbose )
+    cerr << "Initialization ready ... Starting TRLAN" << endl;
+  // call lanczos iteration of trlan
+  int kint = k;
+  trlan77_ ( op, ipar, &mat_size, &kint, evalbuff, evecbuff, &mat_size, workspace, &workspace_size );
+
+  if ( ipar[0] != 0 )
+  {
+    cerr << "EigValuesTRLAN: Error occured by calling TRLAN Eigenvalue Computation." << endl;
+    cerr << "EigValuesTRLAN: " << ipar[3] << " converged eigenvectors" << endl;
+  }
+  if ( verbose )
+    cerr << "TRLAN ready" << endl;
+
+  // copy eigenvectors in evecbuff to vector
+  eigenvectors.resize ( mat_size, k );
+  eigenvalues.resize ( k );
+  if ( verbose )
+    cerr << "Store results" << endl;
+
+  /** write back all eigenvalues and eigenvectors */
+  if ( magnitude < 0 )
+  {
+    for ( uint i = 0;i < k;i++ )
+      for ( uint j = 0;j < ( uint ) mat_size;j++ )
+        eigenvectors ( j, i ) = evecbuff[i*mat_size+j];
+    for ( uint i = 0;i < k;i++ )
+      eigenvalues[i] = evalbuff[i];
+  }
+  else
+  {
+    for ( uint i = 0;i < k;i++ )
+      for ( uint j = 0;j < ( uint ) mat_size;j++ )
+        eigenvectors ( j, k - i - 1 ) = evecbuff[i*mat_size+j];
+    for ( uint i = 0;i < k;i++ )
+      eigenvalues[i] = evalbuff[k-i-1];
+  }
+
+  if ( verbose )
+    cerr << "Clean up" << endl;
+
+  /** clean up memory */
+  delete[] workspace;
+  delete[] evalbuff;
+  delete[] evecbuff;
+
+  if ( verbose )
+    cerr << "Clean up done" << endl;
+#endif
+}

+ 61 - 0
core/algebra/EigValuesTRLAN.h

@@ -0,0 +1,61 @@
+#ifndef EIGVALUESTRLANINCLUDE
+#define EIGVALUESTRLANINCLUDE
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <vector>
+#include <string.h>
+
+
+#include "EigValues.h"
+
+
+namespace NICE {
+
+/** real symmetric eigenproblem, the eigenpairs returned by the method solve are ordered increasingly
+ * (needs the TRLAN library, is not thread-safe!)
+ */
+class EigValuesTRLAN : public EigValues {
+
+  private:
+    int magnitude;
+    int restarting_scheme;
+    double tolerance;
+    int max_mult;
+    int mult_flops;
+    bool verbose;
+
+  public:
+
+    /**
+    * @brief Init the TRLAN lanczos routine with the following parameters
+    *
+    * @param magnitude Specifies the nature of the EigValuesTRLAN, find eigenpair with respect to the k largest (magnitude>0)
+    * @param restarting_scheme restarting scheme of TRLAN
+    * @param tolerance stop criterion (abs. resudual |A*x-lambda*x|?)
+    * @param max_mult  maximum number of matrix-vector multiplications to perform
+    * @param mult_flops number of flops per matrix multiplication (used for statistics calculation)
+    */
+    EigValuesTRLAN ( int magnitude = 1,
+                     int restarting_scheme = 1,
+                     double tolerance = 1e-8,
+                     int max_mult = -1,
+                     int mult_flops = -1 );
+
+    /** destructor */
+    ~EigValuesTRLAN() {};
+
+    /**
+       * @param data matrix interface that does allow matrix-vector multiplications
+       * @param k number of eigenvalues/eigenvectors
+       * @param eigenvectors output Eigenvectors as Matrix
+       * @param eigenvalues output Eigenvalues as Vector
+       */
+    virtual void getEigenvalues ( const GenericMatrix &data, NICE::Vector & eigenvalues, NICE::Matrix & eigenvectors, uint k );
+};
+
+
+} // namespace
+
+#endif

+ 265 - 0
core/algebra/GBCDSolver.cpp

@@ -0,0 +1,265 @@
+/** 
+* @file GBCDSolver.cpp
+* @brief Greedy Block Coordinate Descent Algorithm
+* @author Erik Rodner
+* @date 01/26/2012
+
+*/
+#include <iostream>
+
+#include <core/basics/Timer.h>
+#include "GBCDSolver.h"
+
+using namespace NICE;
+using namespace std;
+
+
+GBCDSolver::GBCDSolver( uint randomSetSize, uint stepComponents, bool verbose, uint maxIterations, double minDelta )
+{
+  this->verbose = verbose;
+  this->maxIterations = maxIterations;
+  this->minDelta = minDelta;
+  this->stepComponents = stepComponents;
+  this->randomSetSize = randomSetSize;
+  this->timeAnalysis = false;
+}
+
+void GBCDSolver::setTimeAnalysis(bool timeAnalysis)
+{
+  this->timeAnalysis = timeAnalysis;
+}
+
+GBCDSolver::~GBCDSolver()
+{
+}
+
+void GBCDSolver::greedyApproximation ( const PartialGenericMatrix & gm, const Vector & b, const Vector & grad,
+                                       PartialGenericMatrix::SetType & B, Vector & deltaAlpha )
+{
+  uint t = 0;
+  uint n = b.size();
+  Vector e ( grad );
+
+  // start with an empty set
+  B.clear();
+
+  //if ( verbose )
+  //  cerr << "GBCDSolver::greedyApproximation: size of the problem is " << n << endl;
+
+  PartialGenericMatrix::SetType O;
+  uint elementsN = n;
+  bool *N = new bool [ n ];
+  for ( uint i = 0 ; i < n ; i++ )
+  {
+    O.push_back(i);
+    N[i] = true; //N.insert(i);
+  }
+
+  Matrix R ( stepComponents, stepComponents, 0.0 );
+  deltaAlpha.resize ( stepComponents );
+  do {
+    // step (3) of Algorithm 2 in the paper
+    // determine the index s
+    int s = *(O.begin());
+    double min_expr = numeric_limits<double>::max();
+    for ( PartialGenericMatrix::SetType::const_iterator i = O.begin(); i != O.end(); i++ )
+    {
+      double evalue = e(*i);
+      double expr = - evalue*evalue / ( 2 * gm.getDiagonalElement(*i) );
+      if ( expr < min_expr )
+      {
+        min_expr = expr;
+        s = *i;
+      }
+    }
+    //if ( verbose )
+    //  cerr << "GBCDSolver: greedy selection of element " << s << endl;
+
+    Vector deltaAlphaTmp ( t + 1 );
+    // step (4) of Algorithm 2 in the paper
+    if ( t == 0 ) {
+      R(0,0) = 1 / ( gm.getDiagonalElement(s) );
+      deltaAlpha[0] = - e(s) / ( gm.getDiagonalElement(s) );
+      deltaAlphaTmp[0] = deltaAlpha[0];
+    } else {
+      Vector beta ( t );
+      Vector rvector ( t );
+      Vector tmpScalar ( 1 );
+      PartialGenericMatrix::SetType sset;
+      sset.push_back(s);
+      // ---- calculation of beta
+      // beta = R * A(B,s)
+      // beta^T = A(s,B) * R^T
+      // beta^T = A(B,s) * R^T (because we assume symmetry)
+ 
+      for ( uint i = 0 ; i < beta.size() ; i++ )
+      {
+        for ( uint j = 0 ; j < rvector.size(); j++ )
+          rvector[j] = R( i , j );
+
+        gm.multiply ( sset, B, tmpScalar, rvector );
+        beta[i] = tmpScalar[0];
+      }
+
+      // ---- calculation of nu
+      gm.multiply ( sset, B, tmpScalar, beta );
+      double nu = 1.0 / ( gm.getDiagonalElement ( s ) - tmpScalar[0] );
+
+      // ---- update our R
+      for ( uint i = 0 ; i < t ; i++ ) {
+        for ( uint j = 0 ; j < t ; j++ ) {
+          R(i,j) += nu * beta(i) * beta(j);
+        }
+        R(i,t) = nu * beta(i) * (-1);
+        R(t,i) = nu * beta(i) * (-1);
+      }
+      R(t, t) = nu;
+
+      // ---- compute our deltaAlpha update
+      Vector gradSub ( t+1 );
+      uint ii = 0;
+      for ( PartialGenericMatrix::SetType::const_iterator i = B.begin(); i != B.end(); i++,ii++ )
+        gradSub[ii] = grad[*i];
+      gradSub[t] = grad[s];
+
+      // this statement uses a copy of the R sub-matrix, which
+      // might be not beneficial for performance!!!
+      deltaAlphaTmp = (-1.0) * R(0,0,t,t) * gradSub;
+      for ( uint i = 0 ; i < t+1; i++ )
+        deltaAlpha[i] = deltaAlphaTmp[i];
+    } 
+
+    // step 5 of algorithm 2
+    B.push_back(s);
+    // N.erase ( s );
+    N[s] = false;
+    elementsN--;
+
+    if ( elementsN == 0 ) {
+      cerr << "Unable to select more elements! Adjust your parameters!" << endl;
+      break;
+    }
+
+    // step 6 of algorithm 2
+    // choose a subset O of size kappa = randomSetSize
+    O.clear();
+    set<int> selectedElements;
+    for ( uint i = 0 ; i < randomSetSize ; i++ )
+    {
+      int selectedElement;
+      
+      do {
+        selectedElement = rand() % n;
+      } while ( // I have selected this element as the optimal element in a previous step
+                !N[selectedElement] || 
+                // I selected this element already for the set O
+                (selectedElements.find(selectedElement) != selectedElements.end()) );
+
+      //if ( verbose )
+      //  cerr << "GBCDSolver: selecting " << selectedElement << " for the set O" << endl;
+      selectedElements.insert( selectedElement );
+
+      O.push_back ( selectedElement );
+    }
+
+    Vector eSub;
+    gm.multiply ( O, B, eSub, deltaAlphaTmp );
+    if ( eSub.size() != O.size() )
+      fthrow(Exception, "The matrix interface did not return a vector of a proper size!");
+
+    uint ii = 0;
+    for ( PartialGenericMatrix::SetType::const_iterator i = O.begin(); i != O.end(); i++,ii++ )
+      e[ *i ] = eSub[ ii ] + grad[ *i ];
+
+    // increment our iteration counter
+    t++;
+
+  } while ( t < this->stepComponents );
+
+  delete [] N;
+}
+
+int GBCDSolver::solveLin ( const PartialGenericMatrix & gm, const Vector & b, Vector & x )
+{
+  // FIXME: check for quadratic matrix
+
+  uint iteration = 0;
+
+  Vector grad;
+  Vector Ax;
+
+  if ( x.size() != gm.cols() ) {
+    // use a simple initial solution, x = 0
+    x.resize( gm.cols() );
+    x.set(0.0);
+    grad = (-1.0) * b;
+  } else {
+    gm.multiply ( Ax, x );
+    grad = Ax - b;
+  }
+
+  PartialGenericMatrix::SetType wholeSet;
+  for ( uint i = 0 ; i < b.size() ; i++ )
+    wholeSet.push_back(i);
+
+  Timer t;
+
+  if ( timeAnalysis )
+    t.start();
+
+  // start with our iterations
+  do {
+
+    // Although the objective of the corresponding quadratic program decreases,
+    // this is not necessarily true for the residual. We know that at the bottom we get a zero
+    // gradient (and a residual) but we can not prove anything about the development of it during
+    // optimization. 
+    double residualNorm = grad.normInf();
+    if ( verbose )
+      cerr << "GBCDSolver: [ " << iteration << " / " << maxIterations << " ] " << residualNorm << endl;
+
+    Vector deltaAlpha;
+    PartialGenericMatrix::SetType B;
+
+    // -------- the main part: solve the sub-problem of finding a good search direction 
+    greedyApproximation ( gm, b, grad, B, deltaAlpha );
+
+    // --------
+    if ( verbose && b.size() <= 10 )
+      cerr << "GBCDSolver: " << deltaAlpha << endl;
+
+    uint ii = 0;
+    for ( PartialGenericMatrix::SetType::const_iterator i = B.begin(); i != B.end(); i++, ii++)
+    {
+      // update our current estimate, but only at certain positions
+      x[ *i ] += deltaAlpha[ ii ];
+    }
+
+
+    double deltaNorm = deltaAlpha.normL2();
+    if ( verbose )
+      cerr << "GBCDSolver: delta = " << deltaNorm << endl;
+
+    if ( deltaNorm < minDelta ) {
+      if ( verbose )
+        cerr << "GBCDSolver: minimum delta reached" << endl;
+      return iteration;
+    }
+
+    Vector A_deltaAlpha;
+    gm.multiply ( wholeSet, B, A_deltaAlpha, deltaAlpha );
+
+    grad += A_deltaAlpha;
+ 
+    if ( timeAnalysis ) 
+    {
+      t.stop();
+      cerr << "GBCDSolver: TIME " << t.getSum() << " " << grad.normL2() << " " << grad.normInf() << endl;
+      t.start();
+    }
+   
+    iteration++; 
+  } while ( iteration < maxIterations );
+
+  return iteration;
+}

+ 80 - 0
core/algebra/GBCDSolver.h

@@ -0,0 +1,80 @@
+/** 
+* @file GBCDSolver.h
+* @author Erik Rodner
+* @date 01/26/2012
+
+*/
+#ifndef _NICE_GBCDSOLVERINCLUDE
+#define _NICE_GBCDSOLVERINCLUDE
+
+#include "PartialGenericMatrix.h"
+
+namespace NICE {
+  
+/** @class GBCDSolver
+ * Greedy Block Coordinate Descent Algorithm 
+ *
+ * Details are included in the paper:
+ * "Greedy Block Coordinate Descent for Large Scale Gaussian Process Regression"
+ * by Liefeng Bo and Cristian Sminchisescu, 2008
+ *
+ * Their code can be found at: http://www.cs.washington.edu/homes/lfb/software/GBCD.htm
+ * We re-implemented their approach using the description of the algorithm in the paper.
+ *
+ * @author Erik Rodner
+ */
+class GBCDSolver
+{
+
+  protected:
+    bool verbose;
+
+    uint maxIterations;
+
+    //! known as kappa in the paper
+    uint randomSetSize;
+
+    //! known as M in the paper
+    uint stepComponents;
+
+    double minDelta;
+
+    //! detailed time analysis
+    bool timeAnalysis;
+
+    void greedyApproximation ( const PartialGenericMatrix & gm, const Vector & b, const Vector & grad,
+                               PartialGenericMatrix::SetType & B, Vector & deltaAlpha );
+
+  public:
+
+    /** simple constructor */
+    GBCDSolver( uint randomSetSize = 60, uint stepComponents = 500, bool verbose = false, uint maxIterations = 10000, double minDelta = 1e-7 );
+      
+    /** simple destructor */
+    virtual ~GBCDSolver();
+    
+    /**
+    * @brief Solve a linear system given a PartialGenericMatrix interface
+    *
+    * @param gm PartialGenericMatrix interface providing sub-matrix multiplications
+    * @param b right hand side of the system
+    * @param x initial and final estimate
+    *
+    * @return method specific status information
+    */
+    virtual int solveLin ( const PartialGenericMatrix & gm, const Vector & b, Vector & x );
+
+    
+    /**
+    * @brief set time analysis flag, this needs additional time and is only
+    * important if you want to generate some time plots
+    *
+    * @param timeAnalysis
+    */
+    void setTimeAnalysis(bool timeAnalysis);
+     
+};
+
+}
+
+#endif

+ 324 - 0
core/algebra/GMSparseVectorMatrix.cpp

@@ -0,0 +1,324 @@
+#include "GMSparseVectorMatrix.h"
+#include <assert.h>
+
+using namespace NICE;
+using namespace NICE;
+using namespace std;
+
+GMSparseVectorMatrix::GMSparseVectorMatrix (uint _rows, uint _cols):m_rows (_rows), m_cols (_cols)
+{
+	resize (_rows, _cols);
+}
+
+GMSparseVectorMatrix::GMSparseVectorMatrix (const NICE::Matrix & iceA, double epsilon)
+{
+	m_rows = iceA.rows ();
+	m_cols = iceA.cols ();
+	newvectors = true;
+	for (uint r = 0; r < m_rows; r++)
+	{
+		SparseVector *tmp = new SparseVector (m_cols);
+		for (uint c = 0; c < m_cols; c++)
+		{
+			if (fabs (iceA (r, c)) > epsilon)
+				(*tmp)[c] = iceA (r, c);
+		}
+		A.push_back (tmp);
+	}
+}
+
+GMSparseVectorMatrix::~GMSparseVectorMatrix ()
+{
+	clear ();
+}
+
+SparseVector & GMSparseVectorMatrix::operator[](int i) const
+{
+ return *A[i];
+}
+
+void GMSparseVectorMatrix::addRow (const NICE::Vector & x)
+{
+	SparseVector *v = new SparseVector (x);
+	m_cols = x.size ();
+	v->setDim (m_cols);
+	A.push_back (v);
+	++m_rows;
+}
+
+void
+GMSparseVectorMatrix::addRow (SparseVector * x)
+{
+	newvectors = false;
+	A.push_back (x);
+	++m_rows;
+	m_cols = x->getDim ();
+}
+
+void
+GMSparseVectorMatrix::clear ()
+{
+	if (newvectors)
+	{
+		for (uint i = 0; i < A.size (); i++)
+		{
+			delete A[i];
+		}
+	}
+	A.clear ();
+}
+
+void
+GMSparseVectorMatrix::resize (int _rows, int _cols)
+{
+	m_rows = _rows;
+	m_cols = _cols;
+	newvectors = true;
+	for (uint i = 0; i < m_rows; i++)
+	{
+		SparseVector *tmp = new SparseVector (m_cols);
+		A.push_back (tmp);
+	}
+}
+
+void
+GMSparseVectorMatrix::mult2 (GMSparseVectorMatrix & y, GMSparseVectorMatrix & out, bool transpx, bool transpy)
+{
+	int rowsx, colsx, rowsy, colsy;
+	if (transpx)
+	{
+		colsx = m_rows;
+		rowsx = m_cols;
+	} else
+	{
+		rowsx = m_rows;
+		colsx = m_cols;
+	}
+
+	if (transpy)
+	{
+		colsy = y.rows ();
+		rowsy = y.cols ();
+	} else
+	{
+		rowsy = y.rows ();
+		colsy = y.cols ();
+	}
+
+	if (rowsy != colsx)
+	{
+		cout << "GMSparse::mult matrix sizes missmatched" << endl;
+		exit (1);
+	}
+
+	out.resize (rowsx, colsy);
+
+	double xval, yval, val, val2;
+
+	for (int c = 0; c < colsy; c++)
+	{
+		for (int i = 0; i < rowsy; i++)
+		{
+			if (transpy)
+				yval = y[c].get (i);
+			else
+				yval = y[i].get (c);
+
+			if (yval != 0.0)
+			{
+				for (int r = 0; r < rowsx; r++)
+				{
+					if (transpx)
+						xval = (*A[i]).get (r);
+					else
+						xval = (*A[r]).get (i);
+
+					val = out[r].get (c);
+					val2 = val + xval * yval;
+					if (fabs (val2) > 10e-10)
+						out[r][c] = val2;
+					else if (val != 0.0)
+						out[r].erase (c);
+				}
+			}
+		}
+	}
+}
+
+void
+GMSparseVectorMatrix::mult (GMSparseVectorMatrix & y, GMSparseVectorMatrix & out, bool transpx, bool transpy)
+{
+	int rowsx, colsx, rowsy, colsy;
+	if (transpx)
+	{
+		colsx = m_rows;
+		rowsx = m_cols;
+	} else
+	{
+		rowsx = m_rows;
+		colsx = m_cols;
+	}
+
+	if (transpy)
+	{
+		colsy = y.rows ();
+		rowsy = y.cols ();
+	} else
+	{
+		rowsy = y.rows ();
+		colsy = y.cols ();
+	}
+
+	if (rowsy != colsx)
+	{
+		cout << "GMSparse::mult matrix sizes missmatched" << endl;
+		exit (1);
+	}
+
+	out.resize (rowsx, colsy);
+
+	double xval, yval, val;
+	for (int r = 0; r < rowsx; r++)
+	{
+
+		for (int c = 0; c < colsy; c++)
+		{
+			val = 0.0;
+			for (int i = 0; i < rowsy; i++)
+			{
+				if (transpx)
+					xval = (*A[i]).get (r);
+				else
+					xval = (*A[r]).get (i);
+
+				if (transpy)
+					yval = y[c].get (i);
+				else
+					yval = y[i].get (c);
+
+				val += xval * yval;
+			}
+
+			if (fabs (val) > 10e-7)
+				out[r][c] = val;
+
+			if (!finite (val * val))
+			{
+				cout << "val " << val << endl;
+				for (int i = 0; i < rowsy; i++)
+				{
+					if (transpx)
+						xval = (*A[i]).get (r);
+					else
+						xval = (*A[r]).get (i);
+
+					if (transpy)
+						yval = y[c].get (i);
+					else
+						yval = y[i].get (c);
+
+					val += xval * yval;
+					cout << " xval: " << xval << " yval " << yval << endl;
+				}
+				getchar ();
+			}
+		}
+	}
+
+
+}
+
+void
+GMSparseVectorMatrix::mult (SparseVector & y, GMSparseVectorMatrix & out, bool transpx, bool transpy)
+{
+	int rowsx, colsx, rowsy, colsy;
+	if (transpx)
+	{
+		colsx = m_rows;
+		rowsx = m_cols;
+	} else
+	{
+		rowsx = m_rows;
+		colsx = m_cols;
+	}
+
+	if (transpy)
+	{
+		colsy = 1;
+		rowsy = y.getDim ();
+	} else
+	{
+		rowsy = 1;
+		colsy = y.getDim ();
+	}
+
+	if (rowsy != colsx)
+    fthrow(Exception, "GMSparseVectorMatrix::mult sizes of the input matrices do not match!");
+
+	out.resize (rowsx, colsy);
+
+	double xval, yval, val;
+	for (int r = 0; r < rowsx; r++)
+	{
+
+		for (int c = 0; c < colsy; c++)
+		{
+			val = 0.0;
+			for (int i = 0; i < rowsy; i++)
+			{
+				if (transpx)
+					xval = (*A[i]).get (r);
+				else
+					xval = (*A[r]).get (i);
+
+				if (transpy)
+					yval = y.get (i);
+				else
+					yval = y.get (c);
+
+				val += xval * yval;
+			}
+
+			if (fabs (val) > 10e-7)
+				out[r][c] = val;
+		}
+	}
+}
+
+void
+GMSparseVectorMatrix::multiply (NICE::Vector & y, const NICE::Vector & x) const
+{
+	//FIXME: einbauen
+}
+
+void
+GMSparseVectorMatrix::store (ostream & os, int format) const
+{
+	os << m_rows << " " << m_cols << " " << A.size () << endl;
+	for (int i = 0; i < (int) A.size (); i++)
+	{
+		A[i]->store (os, format);
+	}
+}
+
+void
+GMSparseVectorMatrix::restore (istream & is, int format)
+{
+	A.clear ();
+	is >> m_rows;
+	is >> m_cols;
+	int size;
+	is >> size;
+	for (int i = 0; i < size; i++)
+	{
+		SparseVector *s = new SparseVector (m_cols);
+		s->restore (is, format);
+		A.push_back (s);
+	}
+}
+
+void
+GMSparseVectorMatrix::setDel (bool del)
+{
+	newvectors = del;
+}

+ 163 - 0
core/algebra/GMSparseVectorMatrix.h

@@ -0,0 +1,163 @@
+/** 
+ * @file GMSparseVectorMatrix.h
+ * @brief Sparse Matrix depends on SparseVectors
+ * @author Björn Fröhlich
+ * @date 05/14/2009
+
+ */
+#ifndef GMSPARSE2INCLUDE
+#define GMSPARSE2INCLUDE
+
+#include "GenericMatrix.h"
+
+namespace NICE
+{
+
+  /** implementation of GenericMatrix using a sparse representation of a matrix as a collection of sparse vectors 
+   * @remark the functions in this class do not really exploit the sparseness of the involved vectors */
+	class GMSparseVectorMatrix : public GenericMatrix
+	{
+	protected:
+		//! the sparse matrix
+		std::vector < NICE::SparseVector * >A;
+
+		//! count of rows
+		uint m_rows;
+
+		//! count of columns
+		uint m_cols;
+
+		//! are the vectors new ones or come they from somewhere else
+		bool newvectors;
+
+	public:
+		/**
+		 * simple constructor -> does nothing
+		 */
+    GMSparseVectorMatrix ()
+		{
+			resize (0, 0);
+		};
+
+		/**
+		 * constructor which set the rows and cols of the SparseMatrix
+		 * @param _rows number of rows of the matrix
+		 * @param _cols number of cols of the matrix
+		 */
+    GMSparseVectorMatrix (uint _rows, uint _cols);
+
+		/**
+		 * converts a dense matrix to a sparse matrix
+		 * @param A input ICE::Matrix
+		 * @param epsilon tolerance value
+		 */
+    GMSparseVectorMatrix (const NICE::Matrix & iceA, double epsilon = 1e-9);
+
+		/**
+		 * simple destructor
+		 */
+   ~GMSparseVectorMatrix ();
+
+		/**
+		 * resize the matrix
+		 * @param _rows new count of rows
+		 * @param _cols new count of cols
+		 */
+		void resize (int _rows, int _cols);
+
+		/**
+		 * clean up
+		 */
+		void clear ();
+
+		/** get the number of rows in A */
+		uint rows () const
+		{
+			return m_rows;
+		};
+
+		/** get the number of columns in A */
+		uint cols () const
+		{
+			return m_cols;
+		};
+
+		/** multiply with a vector: A*x = y */
+		void multiply (NICE::Vector & y, const NICE::Vector & x) const;
+
+		/**
+		 * return the i-th row
+		 * @param i 
+		 * @return SparseVector at row i
+		 */
+    NICE::SparseVector & operator[] (int i) const;
+
+		/**
+		 * restore the information of the sparse matrix
+		 * @param is inputstream
+		 * @param format 
+		 */
+		void restore (std::istream & is, int format = 0);
+
+		/**
+		 * store the information of the sparse matrix
+		 * @param os outputstream
+		 * @param format 
+		 */
+		void store (std::ostream & os, int format = 0) const;
+
+		/**
+		 * Should the data be deleted when the destructor is called
+		 * @param del 
+		 */
+		void setDel (bool del = true);
+
+		/**
+		 * add a new row 
+		 * @param x ICE::Vector
+		 */
+		void addRow (const NICE::Vector & x);
+
+		/**
+		 * add a new row
+		 * @param x SparseVector
+		 */
+		void addRow (NICE::SparseVector * x);
+
+		/**
+		 * matrixmultiplication x*y = out
+		 * @param y input
+		 * @param out output
+		 * @param transpx use the transpose of x 
+		 * @param transpy use the transpose of y
+		 * @return z
+		 */
+		void mult (GMSparseVectorMatrix & y, GMSparseVectorMatrix & out, bool transpx =
+							 false, bool transpy = false);
+
+		/**
+		 * matrixmultiplication x*y = out
+		 * @param y input Sparse Vector
+		 * @param out output
+		 * @param transpx use the transpose of x 
+		 * @param transpy use the transpose of y
+		 * @return z
+		 */
+		void mult (NICE::SparseVector & y, GMSparseVectorMatrix & out, bool transpx =
+							 false, bool transpy = false);
+
+		/**
+		 * same like mult, but faster when y ist very sparse and slower if not
+		 * @param y input
+		 * @param out output
+		 * @param transpx use the transpose of x 
+		 * @param transpy use the transpose of y
+		 * @return z
+		 */
+		void mult2 (GMSparseVectorMatrix & y, GMSparseVectorMatrix & out, bool transpx =
+								false, bool transpy = false);
+	};
+
+}	// namespace
+
+#endif

+ 35 - 0
core/algebra/GMStandard.cpp

@@ -0,0 +1,35 @@
+#include <core/basics/Exception.h>
+
+#include "GMStandard.h"
+
+using namespace NICE;
+using namespace std;
+
+void GMStandard::multiply ( const SetType & rowSet, const SetType & columnSet, NICE::Vector & y, const NICE::Vector & x) const
+{
+  if ( x.size() != columnSet.size() ) 
+    fthrow(Exception, "Size of the column set is different from the size of the given input vector: " << columnSet.size() << " vs " << x.size());
+  
+  y.resize( rowSet.size() );
+
+  // memory inefficient
+  Matrix Asub ( rowSet.size(), columnSet.size() );
+
+  int ii = 0;
+  for ( SetType::const_iterator i = rowSet.begin(); i != rowSet.end(); i++,ii++ )
+  {
+    int jj = 0;
+    for ( SetType::const_iterator j = columnSet.begin(); j != columnSet.end(); j++,jj++ )
+      Asub ( ii, jj ) = A( *i, *j ); 
+  }
+
+  y.multiply ( Asub, x );
+}
+    
+double GMStandard::getDiagonalElement ( uint i ) const
+{
+  if ( (i >= A.rows()) || (i >= A.cols()) )
+    fthrow(Exception, "Invalid index to access diagonal element: " << i << " (" << A.rows() << " x " << A.cols() << ")" );
+
+  return A(i,i);
+}

+ 48 - 0
core/algebra/GMStandard.h

@@ -0,0 +1,48 @@
+#ifndef GMSTANDARDINCLUDE
+#define GMSTANDARDINCLUDE
+
+#include "PartialGenericMatrix.h"
+
+
+namespace NICE
+{
+
+
+/** implementation of PartialGenericMatrix using simple direct multiplication */
+class GMStandard : public PartialGenericMatrix
+{
+	protected:
+		NICE::Matrix A;
+
+	public:
+		GMStandard (const NICE::Matrix & _A):A (_A)
+		{
+		};
+
+    /** get the number of rows in A */
+		uint rows () const
+		{
+			return A.rows ();
+		};
+
+    /** get the number of columns in A */
+		uint cols () const
+		{
+			return A.cols ();
+		};
+
+    /** multiply with a vector: A*x = y */
+		void multiply (NICE::Vector & y, const NICE::Vector & x) const
+		{
+      y.resize(rows());
+			y.multiply (A, x);
+		};
+
+    virtual void multiply ( const PartialGenericMatrix::SetType & rowSet, const PartialGenericMatrix::SetType & columnSet, NICE::Vector & y, const NICE::Vector & x) const;
+    
+    virtual double getDiagonalElement ( uint i ) const;
+};
+
+}
+
+#endif

+ 87 - 0
core/algebra/GenericMatrix.cpp

@@ -0,0 +1,87 @@
+/**
+* @file GenericMatrix.cpp
+* @brief matrix interface for indirect matrix multiplications
+* @author Erik Rodner
+* @date 05/14/2009
+
+*/
+
+#include "GenericMatrix.h"
+
+using namespace NICE;
+using namespace std;
+
+GMSparse::GMSparse ( const NICE::Matrix & A, double epsilon )
+{
+  // derive a sparse matrix from a dense one
+  m_rows = A.rows ();
+  m_cols = A.cols ();
+  for ( u_int i = 0; i < m_rows; i++ )
+    for ( u_int j = 0; j < m_cols; j++ )
+      if ( fabs ( A ( i, j ) ) > epsilon )
+        this->A.insert ( this->A.begin (), NICE::triplet < int, int,
+                         double > ( i, j, A ( i, j ) ) );
+}
+
+void
+GMSparse::multiply ( NICE::Vector & y, const NICE::Vector & x ) const
+{
+  if ( x.size() != m_cols )
+    fthrow ( Exception, "GMSparse::multiply: vector and matrix size do not match!" );
+
+  y.resize ( m_rows );
+  y.set ( 0.0 );
+
+  // perform sparse multiplication
+  for ( vector < NICE::triplet < int, int, double > >::const_iterator k =
+          this->A.begin (); k != this->A.end (); k++ )
+  {
+    int i = k->first;
+    int j = k->second;
+    double value = k->third;  // = a_ij
+    y[i] += value * x[j];
+  }
+}
+
+GMCovariance::GMCovariance ( const NICE::Matrix *data )
+{
+  this->data = data;
+}
+
+void
+GMCovariance::multiply ( NICE::Vector & y, const NICE::Vector & x ) const
+{
+  if ( x.size() != data->rows() )
+    fthrow ( Exception, "GMCovariance::multiply: vector and matrix size do not match!" );
+
+  /*******************************************************************
+   * d_k = data(:,k) vector k in the data set
+   * f_k = d_k^T x
+   * fSum = \sum_k f_k
+   * In the following we use the following relationship
+   * S = \sum_i d_i ( d_i - \mu )^T = \sum_i (d_i - \mu) (d_i - \mu)^T
+   * Sx = \sum_i d_i ( f_i - fSum/N )
+   * which seems to be very efficient
+   * *****************************************************************/
+
+  NICE::Vector f ( data->cols () );
+  f.set ( 0.0 );
+  double fSum = 0.0;
+
+  for ( uint k = 0; k < data->cols (); k++ )
+  {
+    for ( uint d = 0; d < data->rows (); d++ )
+      f[k] += ( *data ) ( d, k ) * x[d];
+    fSum += f[k];
+  }
+
+  y.resize ( x.size () );
+  y.set ( 0.0 );
+  int N = data->cols ();
+  for ( uint k = 0; k < data->cols (); k++ )
+    for ( int l = 0; l < ( int ) y.size (); l++ )
+      y[l] += ( f[k] - fSum / N ) * ( ( *data ) ( l, k ) );
+
+  for ( int i = 0; i < ( int ) y.size (); i++ )
+    y[i] /= N;
+}

+ 121 - 0
core/algebra/GenericMatrix.h

@@ -0,0 +1,121 @@
+/**
+* @file GenericMatrix.h
+* @brief matrix interface for indirect matrix multiplications
+* @author Erik Rodner
+* @date 05/14/2009
+
+*/
+#ifndef GENERICMATRIXINCLUDE
+#define GENERICMATRIXINCLUDE
+
+#include "core/basics/triplet.h"
+#include "core/vector/SparseVectorT.h"
+
+
+namespace NICE
+{
+
+/** matrix interface for indirect matrix multiplications */
+class GenericMatrix
+{
+  public:
+
+    /** multiply with a vector: A*x = y */
+    virtual void multiply ( NICE::Vector & y, const NICE::Vector & x ) const = 0;
+
+    /** get the number of rows in A */
+    virtual uint rows () const = 0;
+
+    /** get the number of columns in A */
+    virtual uint cols () const = 0;
+
+    /** simple destructor */
+    virtual ~ GenericMatrix ()
+    {
+    };
+
+};
+
+
+/** sparse matrix vector multiplication */
+class GMSparse : public GenericMatrix
+{
+  protected:
+    // our representation of sparse matrices
+    std::vector < NICE::triplet < int, int, double > > A;
+
+    // we also have to store the size of the matrix
+    uint m_rows;
+    uint m_cols;
+
+  public:
+
+    /**
+    * @brief empty constructor only initializing the size
+    *
+    * @param _rows number of rows of the matrix
+    * @param _cols number of cols of the matrix
+    */
+    GMSparse ( uint _rows, uint _cols ) : m_rows ( _rows ), m_cols ( _cols )
+    {
+    }
+
+    /**
+    * @brief initialize the sparse structure with a dense matrix and a given
+    * sparseness threshold
+    *
+    * @param A input matrix
+    * @param epsilon if fabs(x) < epsilon, x is considered as zero
+    */
+    GMSparse ( const NICE::Matrix & A, double epsilon = 1e-9 );
+
+    /** get the number of rows in A */
+    uint rows () const
+    {
+      return m_rows;
+    };
+
+    /** get the number of columns in A */
+    uint cols () const
+    {
+      return m_cols;
+    };
+
+    /** multiply with a vector: A*x = y */
+    void multiply ( NICE::Vector & y, const NICE::Vector & x ) const;
+
+};
+
+/** implicit representation of a covariance matrix */
+class GMCovariance: public GenericMatrix
+{
+  protected:
+
+    // our data vectors stored in a matrix
+    const NICE::Matrix *data;
+
+  public:
+    GMCovariance ( const NICE::Matrix * data );
+
+    /** get the number of rows in A */
+    uint rows () const
+    {
+      return data->rows();
+    };
+
+    /** get the number of columns in A */
+    uint cols () const
+    {
+      return data->rows();
+    };
+
+    /** multiply with a vector: A*x = y */
+    void multiply ( NICE::Vector & y, const NICE::Vector & x ) const;
+
+};
+
+
+
+}                // namespace
+
+#endif

+ 207 - 0
core/algebra/ILSConjugateGradients.cpp

@@ -0,0 +1,207 @@
+/** 
+* @file ILSConjugateGradients.cpp
+* @brief abstract interface for iterative linear solvers working with GenericMatrix
+* @author Erik Rodner
+* @date 12/21/2011
+
+*/
+#include <iostream>
+
+#include <core/basics/Timer.h>
+#include "ILSConjugateGradients.h"
+
+using namespace NICE;
+using namespace std;
+
+
+ILSConjugateGradients::ILSConjugateGradients( bool verbose, uint maxIterations, double minDelta, double minResidual, bool useFlexibleVersion )
+{
+  this->minDelta = minDelta;
+  this->maxIterations = maxIterations;
+  this->verbose = verbose;
+  this->minResidual = minResidual;
+  this->useFlexibleVersion = useFlexibleVersion;
+  this->timeAnalysis = false;
+}
+
+ILSConjugateGradients::~ILSConjugateGradients()
+{
+}
+
+void ILSConjugateGradients::setTimeAnalysis( bool timeAnalysis )
+{
+  this->timeAnalysis = timeAnalysis;
+}
+
+void ILSConjugateGradients::setJacobiPreconditioner ( const Vector & jacobiPreconditioner )
+{
+  this->jacobiPreconditioner = jacobiPreconditioner;
+}
+    
+int ILSConjugateGradients::solveLin ( const GenericMatrix & gm, const Vector & b, Vector & x )
+{
+  Timer t;
+
+  if ( timeAnalysis )
+    t.start();
+
+  if ( b.size() != gm.rows() ) {
+    fthrow(Exception, "Size of vector b (" << b.size() << ") mismatches with the size of the given GenericMatrix (" << gm.rows() << ").");
+  }
+
+  if ( x.size() != gm.cols() )
+  {
+    x.resize(gm.cols());
+    x.set(0.0); // bad initial solution, but whatever
+  }
+
+
+  // CG-Method: http://www.netlib.org/templates/templates.pdf
+  //
+
+  Vector a;
+
+  // compute r^0 = b - A*x^0
+  gm.multiply( a, x ); 
+  Vector r = b - a;
+  
+  if ( timeAnalysis ) {
+    t.stop();
+    cerr << "r = " << r << endl;
+    cerr << "ILSConjugateGradients: TIME " << t.getSum() << " " << r.normL2() << " " << r.normInf() << endl;
+    t.start();
+  }
+
+  Vector rold ( r.size(), 0.0 );
+
+  // store optimal values 
+  double res_min = r.scalarProduct(r);
+  Vector current_x = x;
+  
+  double rhoold = 0.0;
+  Vector z ( r.size() );
+  Vector p ( z.size() );
+
+  uint i = 1;
+  while ( i <= maxIterations )
+  {
+    // pre-conditioned vector, currently M=I, i.e. no pre-condition
+    // otherwise set z = M * r
+    if ( jacobiPreconditioner.size() != r.size() )
+      z = r;
+    else {
+      // use simple Jacobi pre-conditioning
+      for ( uint jj = 0 ; jj < z.size() ; jj++ )
+        z[jj] = r[jj] / jacobiPreconditioner[jj];
+    }
+
+    double rho = z.scalarProduct( r );
+
+    if ( verbose ) {
+      cerr << "ILSConjugateGradients: iteration " << i << " / " << maxIterations << endl;
+      if ( current_x.size() <= 20 )
+        cerr << "ILSConjugateGradients: current solution " << current_x << endl;
+    }
+
+    if ( i == 1 ) {
+      p = z;
+    } else {
+      double beta;
+      if ( useFlexibleVersion ) {
+        beta = ( rho - z.scalarProduct(rold) ) / rhoold;
+      } else {
+        beta = rho / rhoold;
+      }
+      p = z + beta * p;
+    }
+    Vector q ( gm.rows() );
+    // q = A*p
+    gm.multiply ( q, p );
+
+    // sp = p^T A p
+    // if A is next to zero this gets nasty, because we divide by sp
+    // later on
+    double sp = p.scalarProduct(q);
+    if ( fabs(sp) < 1e-20 ) {
+      // we achieved some kind of convergence, at least this
+      // is a termination condition used in the wiki article
+      if ( verbose )
+        cerr << "ILSConjugateGradients: p^T*q is quite small" << endl;
+      break;
+    }
+    double alpha = rho / sp;
+  
+    current_x = current_x + alpha * p;
+
+    rold = r;
+    r = r - alpha * q;
+    
+    double res = r.scalarProduct(r);
+    double resMax = r.normInf();
+
+    // store optimal x that produces smallest residual
+    if (res < res_min) {
+      
+      x = current_x;
+      res_min = res;
+    }
+    
+    // check convergence
+    double delta = fabs(alpha) * p.normL2();
+    if ( verbose ) {
+      cerr << "ILSConjugateGradients: delta = " << delta << " lower bound = " << minDelta << endl;
+      cerr << "ILSConjugateGradients: residual = " << res << endl;
+      cerr << "ILSConjugateGradients: L_inf residual = " << resMax << " lower bound = " << minResidual << endl;      
+      if (resMax < 0)
+      {
+        std::cerr << "WARNING: resMax is smaller than zero! " << std::endl;
+        std::cerr << "ILSConjugateGradients: vector r: " << r << std::endl;
+      }
+    }
+ 
+    if ( timeAnalysis ) {
+      t.stop();
+      cerr << "ILSConjugateGradients: TIME " << t.getSum() << " " << res << " " << resMax << endl;
+      t.start();
+    }
+
+   
+    if ( delta < minDelta ) {
+      if ( verbose )
+        cerr << "ILSConjugateGradients: small delta" << endl;
+      break;
+    }
+
+    //fabs was necessary, since the IPP-implementation from normInf was not working correctly
+//     if ( fabs(resMax) < minResidual ) {
+    if ( resMax < minResidual ) {      
+      if ( verbose )
+      {
+        cerr << "ILSConjugateGradients: small residual -- resMax: "<< resMax << " minRes: " << minResidual << endl;
+      }
+      break;
+    }
+
+    rhoold = rho;
+    i++;
+  }
+  
+  if (verbose)
+  {
+    cerr << "ILSConjugateGradients: iterations needed: " << std::min<uint>(i,maxIterations) << endl;
+    cerr << "ILSConjugateGradients: minimal residual achieved: " << res_min << endl;
+  }
+  if (verbose)
+  {    
+    if ( x.size() <= 20 )
+      cerr << "ILSConjugateGradients: optimal solution: " << x << endl;
+  }
+  
+  return 0;
+}
+
+void ILSConjugateGradients::setVerbose(const bool& _verbose)
+{
+  this->verbose = _verbose;
+}
+

+ 86 - 0
core/algebra/ILSConjugateGradients.h

@@ -0,0 +1,86 @@
+/** 
+* @file ILSConjugateGradients.h
+* @author Erik Rodner
+* @date 12/21/2011
+
+*/
+#ifndef _NICE_ILSConjugateGradients_INCLUDE
+#define _NICE_ILSConjugateGradients_INCLUDE
+
+#include "core/vector/VectorT.h"
+#include "GenericMatrix.h"
+#include "IterativeLinearSolver.h"
+
+namespace NICE {
+  
+/** @class ILSConjugateGradients
+ * Iteratively solving linear equation systems with the conjugate gradients method 
+ *
+ * @author Erik Rodner
+ */
+class ILSConjugateGradients : public IterativeLinearSolver
+{
+
+    protected:
+      bool verbose;
+      uint maxIterations;
+      double minDelta;
+      double minResidual;
+      bool useFlexibleVersion;
+      bool timeAnalysis;
+
+      Vector jacobiPreconditioner;
+
+    public:
+
+    /**
+    * @brief constructor 
+    *
+    * @param verbose output the residual and some debug information for each iteration
+    * @param maxIterations maximum number of iterations
+    * @param minDelta minimum difference between two solutions x_t and x_{t+1}
+    * @param useFlexibleVersion use the Polak-Ribiere formula instead of the Fletcher–Reeves formula (we did not see any benefit from it)
+    */
+    ILSConjugateGradients( bool verbose = false, uint maxIterations = 10000, double minDelta = 1e-7, double minResidual = 1e-20, bool useFlexibleVersion = false);
+		  
+		/** simple destructor */
+		virtual ~ILSConjugateGradients();
+
+    /**
+    * @brief set a vector of diagonal elements for the jacobi preconditioner
+    *
+    * @param jacobiPreconditioner
+    */
+    void setJacobiPreconditioner ( const Vector & jacobiPreconditioner );
+
+    /**
+    * @brief Solve the linear System A*x = b, where A is indirectly presented
+    * by the GenericMatrix gm
+    *
+    * @param gm GenericMatrix providing matrix-vector multiplications
+    * @param b Vector on the right hand side of the system
+    * @param x initial and final estimate
+    *
+    * @return method specific status information
+    */
+    int solveLin ( const GenericMatrix & gm, const Vector & b, Vector & x );
+
+
+    /**
+    * @brief switch to detailed time analysis
+    *
+    * @param timeAnalysis
+    */
+    void setTimeAnalysis( bool timeAnalysis = true );
+
+    /**
+    * @brief Enable or disable output
+    *
+    * @param _verbose
+    */    
+    void setVerbose( const bool & _verbose );
+};
+
+}
+
+#endif

+ 209 - 0
core/algebra/ILSConjugateGradientsLanczos.cpp

@@ -0,0 +1,209 @@
+/** 
+* @file ILSConjugateGradientsLanczos.cpp
+* @brief Iteratively solving linear equation systems with the conjugate gradients method using Lanczos process
+* @author Paul Bodesheim
+* @date 20/01/2012 (dd/mm/yyyy)
+
+*/
+#include <iostream>
+
+#include "ILSConjugateGradientsLanczos.h"
+
+using namespace NICE;
+using namespace std;
+
+
+ILSConjugateGradientsLanczos::ILSConjugateGradientsLanczos( bool verbose, uint maxIterations, double minDelta) //, bool useFlexibleVersion )
+{
+  this->minDelta = minDelta;
+  this->maxIterations = maxIterations;
+  this->verbose = verbose;
+//   this->useFlexibleVersion = useFlexibleVersion;
+}
+
+ILSConjugateGradientsLanczos::~ILSConjugateGradientsLanczos()
+{
+}
+
+// void ILSConjugateGradientsLanczos::setJacobiPreconditionerLanczos ( const Vector & jacobiPreconditioner )
+// {
+//   this->jacobiPreconditioner = jacobiPreconditioner;
+// }
+    
+int ILSConjugateGradientsLanczos::solveLin ( const GenericMatrix & gm, const Vector & b, Vector & x )
+{
+  if ( b.size() != gm.rows() ) {
+    fthrow(Exception, "Size of vector b (" << b.size() << ") mismatches with the size of the given GenericMatrix (" << gm.rows() << ").");
+  }
+
+  if ( x.size() != gm.cols() )
+  {
+    x.resize(gm.cols());
+    x.set(0.0); // bad initial solution, but whatever
+  }
+
+//   if ( verbose ) cerr << "initial solution: " << x << endl;
+
+  // CG-Method based on Lanczos vectors: implementation based on the following:
+  //
+  // C.C. Paige and M.A. Saunders: "Solution of sparse indefinite systems of linear equations". SIAM Journal on Numerical Analysis, p. 617--629, vol. 12, no. 4, 1975
+  // 
+  // http://www.netlib.org/templates/templates.pdf
+  //
+
+  // init some helping vectors
+  Vector Av(b.size(),0.0); // Av = A * v_j
+  Vector Ac(b.size(),0.0); // Ac = A * c_j
+  Vector r(b.size(),0.0); // current residual
+  Vector *v_new = new Vector(x.size(),0.0); // new Lanczos vector v_j
+  Vector *v_old = new Vector(x.size(),0.0); // Lanczos vector v_{j-1} of the iteration before 
+  Vector *v_older = 0; // Lanczos vector v_{j-2} of the iteration before 
+  Vector *c_new = new Vector(x.size(),0.0); // current update vector c_j for the solution x
+  Vector *c_old = 0; // update vector of iteration before
+
+  // declare some helpers
+  double d_new = 0; // current element of diagonal matrix D normally obtained from Cholesky factorization of tridiagonal matrix T, where T consists alpha and beta as below
+  double d_old = 0; // corresponding element of the iteration before
+  double l_new = 0; // current element of lower unit bidiagonal matrix L normally obtained from Cholesky factorization of tridiagonal matrix T
+  double p_new = 0; // current element of vector p, where p is the solution of the modified linear system
+  double p_old = 0; // corresponding element of the iteration before
+  double alpha = 0; // alpha_j = v_j^T * A * v_j for new Lanczos vector v_j
+  double beta = b.normL2(); // beta_1 = norm(b), in general beta_j = norm(v_j) for new Lanczos vector v_j
+  
+  // first iteration + initialization, where b will be used as the first Lanczos vector
+  *v_new = (1/beta)*b; // init v_1, v_1 = b / norm(b)
+  gm.multiply(Av,*v_new); // Av = A * v_1
+  alpha = v_new->scalarProduct(Av); // alpha_1 = v_1^T * A * v_1
+  d_new=alpha; // d_1 = alpha_1, d_1 is the first element of diagonal matrix D
+  p_new = beta/d_new; // p_1 = beta_1 / d_1
+  
+  *c_new = *v_new; // c_1 = v_1
+  Ac = Av; // A*c_1 = A*v_1
+  
+  // store current solution
+  Vector current_x = (p_new*(*c_new)); // first approx. of x: x_1 = p_1 * c_1
+
+  // calculate current residual
+  r = b - (p_new*Ac);
+  double res = r.scalarProduct(r);
+  
+  // store minimal residual
+  double res_min = res;
+  
+  // store optimal solution in output variable x
+  x = current_x;
+  
+  double delta_x = fabs(p_new) * c_new->normL2();
+  if ( verbose ) {
+    cerr << "ILSConjugateGradientsLanczos: iteration 1 / " << maxIterations << endl;
+    if ( current_x.size() <= 20 )
+      cerr << "ILSConjugateGradientsLanczos: current solution " << current_x << endl;
+    cerr << "ILSConjugateGradientsLanczos: delta_x = " << delta_x << endl;
+    cerr << "ILSConjugateGradientsLanczos: residual = " << r.scalarProduct(r) << endl;
+  }  
+  
+  // start with second iteration
+  uint j = 2;
+  while (j <= maxIterations )
+  {
+    // prepare d and p for next iteration
+    d_old = d_new;
+    p_old = p_new;
+    
+    // prepare vectors v_older, v_old, v_new for next iteration
+    if ( v_older == 0) v_older = v_old;
+    else {
+      
+      delete v_older;
+      v_older = v_old;
+    }
+    v_old = v_new;
+    v_new = new Vector(v_old->size(),0.0);
+    
+    // prepare vectors c_old, c_new for next iteration
+    if ( c_old == 0 ) c_old = c_new;
+    else {
+      
+      delete c_old;
+      c_old = c_new;
+    }
+    c_new = new Vector(c_old->size(),0.0);
+    
+    //start next iteration:
+    // calulate new Lanczos vector v_j based on older ones
+    *v_new = Av - (alpha*(*v_old)) - (beta*(*v_older)); // unnormalized v_j = ( A * v_{j-1} ) - ( alpha_{j-1} * v_{j-1} ) - ( beta_{j-1} * v_{j-2} )
+
+    // calculate new weight beta_j and normalize v_j
+    beta = v_new->normL2(); // beta_j = norm(v_j) 
+    v_new->normalizeL2(); // normalize v_j 
+
+    // calculate new weight alpha_j
+    gm.multiply(Av,*v_new); // Av = A * v_j
+    alpha = v_new->scalarProduct(Av); // alpha_j =  v_j^T * A * v_j
+
+    // calculate l_j and d_j as the elements of the Cholesky Factorization of current tridiagonal matrix T, where T = L * D * L^T  with diagonal matrix D and
+    // lower bidiagonal matrix L; l_j and d_j are necessary for computing the new update vector c_j for the solution x and the corresponding weight
+    l_new = beta/sqrt(d_old); // unnormalized l_j = beta_j / sqrt(d_{j-1})
+    d_new = alpha-(l_new*l_new); // d_j = alpha_j - l_j^2
+
+    l_new/=sqrt(d_old); // normalize l_j by sqrt(d_{j-1})
+
+    // calculate the new weight p_j of the new update vector c_j for the solution x
+    p_new = -p_old*l_new*d_old/d_new; 
+
+    // calculate the new update vector c_j for the solution x
+    *c_new = *v_new - (l_new*(*c_old));
+
+    // calculate new residual vector
+    Ac = Av - (l_new*Ac);
+    r-=p_new*Ac;
+    res = r.scalarProduct(r);
+    
+    // update solution x
+    current_x+=(p_new*(*c_new)); 
+    
+    if ( verbose ) {
+      cerr << "ILSConjugateGradientsLanczos: iteration " << j << " / " << maxIterations << endl;
+      if ( current_x.size() <= 20 )
+        cerr << "ILSConjugateGradientsLanczos: current solution " << current_x << endl;
+    }
+    
+    // store optimal x that produces smallest residual
+    if (res < res_min) {
+      
+      x = current_x;
+      res_min = res;
+    }     
+
+    // check convergence
+    delta_x = fabs(p_new) * c_new->normL2();
+    if ( verbose ) {
+      cerr << "ILSConjugateGradientsLanczos: delta_x = " << delta_x << endl;
+      cerr << "ILSConjugateGradientsLanczos: residual = " << r.scalarProduct(r) << endl;
+    }  
+
+    if ( delta_x < minDelta ) {
+      if ( verbose )
+        cerr << "ILSConjugateGradientsLanczos: small delta_x" << endl;
+      break;
+    } 
+    
+    j++;
+  }
+  
+//   if ( verbose ) {
+    cerr << "ILSConjugateGradientsLanczos: iterations needed: " << std::min<uint>(j,maxIterations) << endl;
+    cerr << "ILSConjugateGradientsLanczos: minimal residual achieved: " << res_min << endl;
+    if ( x.size() <= 20 )
+      cerr << "ILSConjugateGradientsLanczos: optimal solution: " << x << endl;
+//   }  
+   
+  delete v_new;
+  delete v_old;
+  delete v_older;
+  delete c_new;
+  delete c_old;
+
+  return 0;
+}
+

+ 70 - 0
core/algebra/ILSConjugateGradientsLanczos.h

@@ -0,0 +1,70 @@
+/** 
+* @file ILSConjugateGradientsLanczos.h
+* @author Paul Bodesheim
+* @date 20/01/2012 (dd/mm/yyyy)
+
+*/
+#ifndef _NICE_ILSConjugateGradientsLanczos_INCLUDE
+#define _NICE_ILSConjugateGradientsLanczos_INCLUDE
+
+#include "core/vector/VectorT.h"
+#include "GenericMatrix.h"
+#include "IterativeLinearSolver.h"
+#include "EigValues.h"
+#include "ILSConjugateGradients.h"
+
+namespace NICE {
+  
+/** @class ILSConjugateGradientsLanczos
+ * Iteratively solving linear equation systems with the conjugate gradients method using Lanczos process
+ *
+ * @author Paul Bodesheim
+ */
+class ILSConjugateGradientsLanczos : public IterativeLinearSolver
+{
+
+    protected:
+      bool verbose;
+      uint maxIterations;
+      double minDelta;
+//       bool useFlexibleVersion;
+
+//       Vector jacobiPreconditioner;
+
+    public:
+
+    /**
+    * @brief constructor 
+    *
+    * @param verbose output the residual and some debug information for each iteration
+    * @param maxIterations maximum number of iterations
+    * @param minDelta minimum difference between two solutions x_t and x_{t+1}
+    */
+    ILSConjugateGradientsLanczos( bool verbose = false, uint maxIterations = 10000, double minDelta = 1e-7);//, bool useFlexibleVersion = false);
+		  
+    /** simple destructor */
+    virtual ~ILSConjugateGradientsLanczos();
+
+//     /**
+//     * @brief set a vector of diagonal elements for the jacobi preconditioner
+//     *
+//     * @param jacobiPreconditioner
+//     */
+//     void setJacobiPreconditioner ( const Vector & jacobiPreconditioner );
+
+    /**
+    * @brief Solve the linear System A*x = b, where A is indirectly presented
+    * by the GenericMatrix gm
+    *
+    * @param gm GenericMatrix providing matrix-vector multiplications
+    * @param b Vector on the right hand side of the system
+    * @param x initial and final estimate
+    *
+    * @return method specific status information
+    */
+    int solveLin ( const GenericMatrix & gm, const Vector & b, Vector & x );
+};
+
+}
+
+#endif

+ 212 - 0
core/algebra/ILSMinResLanczos.cpp

@@ -0,0 +1,212 @@
+/** 
+* @file ILSMinResLanczos.cpp
+* @brief Iteratively solving linear equation systems with the minimum residual (MINRES) method using Lanczos process
+* @author Paul Bodesheim
+* @date 20/01/2012 (dd/mm/yyyy)
+
+*/
+#include <iostream>
+
+#include "ILSMinResLanczos.h"
+
+using namespace NICE;
+using namespace std;
+
+
+ILSMinResLanczos::ILSMinResLanczos( bool verbose, uint maxIterations, double minDelta) //, bool useFlexibleVersion )
+{
+  this->minDelta = minDelta;
+  this->maxIterations = maxIterations;
+  this->verbose = verbose;
+//   this->useFlexibleVersion = useFlexibleVersion;
+}
+
+ILSMinResLanczos::~ILSMinResLanczos()
+{
+}
+
+// void ILSMinResLanczos::setJacobiPreconditionerLanczos ( const Vector & jacobiPreconditioner )
+// {
+//   this->jacobiPreconditioner = jacobiPreconditioner;
+// }
+    
+int ILSMinResLanczos::solveLin ( const GenericMatrix & gm, const Vector & b, Vector & x )
+{
+  if ( b.size() != gm.rows() ) {
+    fthrow(Exception, "Size of vector b (" << b.size() << ") mismatches with the size of the given GenericMatrix (" << gm.rows() << ").");
+  }
+
+  if ( x.size() != gm.cols() )
+  {
+    x.resize(gm.cols());
+    x.set(0.0); // bad initial solution, but whatever
+  }
+
+//   if ( verbose ) cerr << "initial solution: " << x << endl;
+
+  // MINRES-Method based on Lanczos vectors: implementation based on the following:
+  //
+  // C.C. Paige and M.A. Saunders: "Solution of sparse indefinite systems of linear equations". SIAM Journal on Numerical Analysis, p. 617--629, vol. 12, no. 4, 1975
+  // 
+  // http://www.netlib.org/templates/templates.pdf
+  //
+  
+  // declare some helpers
+  double gamma = 0.0;
+  double gamma_bar = 0.0;
+  double alpha = 0.0; // alpha_j = v_j^T * A * v_j for new Lanczos vector v_j
+  double beta = b.normL2(); // beta_1 = norm(b), in general beta_j = norm(v_j) for new Lanczos vector v_j
+  double beta_next = 0.0; // beta_{j+1}
+  double c_new = 0.0;
+  double c_old = -1.0;
+  double s_new = 0.0;
+  double s_old = 0.0;
+  double delta_new = 0.0;
+  double epsilon_next = 0.0;
+  double t_new = 0.0;
+
+  // init some helping vectors
+  Vector Av(b.size(),0.0); // Av = A * v_j
+  Vector Ac(b.size(),0.0); // Ac = A * c_j
+  Vector *v_new = new Vector(b.size(),0.0); // new Lanczos vector v_j
+  Vector *v_old = 0; // Lanczos vector of the iteration before: v_{j-1}
+  Vector *v_next = new Vector(b.size(),0.0); // Lanczos vector of the next iteration: v_{j+1}
+  Vector *m_new = new Vector(x.size(),0.0); // current update vector m_j for the solution x
+  Vector *m_old = new Vector(x.size(),0.0); // update vector m_{j-1} of iteration before
+  Vector *m_older = 0; // update vector m_{j-2} of iteration before
+  
+  // first iteration + initialization, where b will be used as the first Lanczos vector
+  *v_new = (1/beta)*b; // init v_1, v_1 = b / norm(b)
+  gm.multiply(Av,*v_new); // Av = A * v_1
+  alpha = v_new->scalarProduct(Av); // alpha_1 = v_1^T * A * v_1  
+  gamma_bar = alpha; // (gamma_bar_1 is equal to alpha_1 in ILSConjugateGradientsLanczos)
+  *v_next = Av - (alpha*(*v_new));
+  beta_next = v_next->normL2();
+  v_next->normalizeL2();
+  
+  // calculate helpers (equation 5.6 in the paper mentioned above)
+  gamma = sqrt( (gamma_bar*gamma_bar) + (beta_next*beta_next) );
+  c_new = gamma_bar/gamma;
+  s_new = beta_next/gamma;
+
+  t_new = beta*c_new; // t_1 = beta_1 * c_1
+  *m_new = (1/gamma)*(*v_new); // m_1 = ( 1 / gamma_1 ) * v_1
+  
+  x = t_new*(*m_new); // first approximation of x
+  
+  // calculate current residual of x
+  double res = (beta*beta)*(s_new*s_new);
+  
+  // calculate delta of x_L
+  double delta_x = fabs(t_new) * m_new->normL2();
+  if ( verbose ) {
+    cerr << "ILSMinResLanczos: iteration 1 / " << maxIterations << endl;
+    if ( x.size() <= 20 )
+      cerr << "ILSMinResLanczos: current solution x: " << x << endl;
+    cerr << "ILSMinResLanczos: delta_x = " << delta_x << endl;
+  }
+  
+  // start with second iteration
+  uint j = 2;
+  while (j <= maxIterations )
+  {
+  
+    // prepare next iteration
+    if ( v_old == 0 ) v_old = v_new;
+    else {
+      
+      delete v_old;
+      v_old = v_new;
+    }
+    v_new = v_next;
+    v_next = new Vector(b.size(),0.0);
+
+    if ( m_older == 0 ) m_older = m_old;
+    else {
+      
+      delete m_older;
+      m_older = m_old;
+    }     
+    m_old = m_new;
+    m_new = new Vector(x.size(),0.0);
+
+    beta = beta_next;
+    s_old = s_new;
+    t_new /= c_new;
+    
+    // start next iteration:
+    // calculate next Lanczos vector v_ {j+1} based on older ones
+    gm.multiply(Av,*v_new);
+    alpha = v_new->scalarProduct(Av);
+    *v_next = Av - (alpha*(*v_new)) - (beta*(*v_old)); // calculate v_{j+1} 
+    beta_next = v_next->normL2(); // calculate beta_{j+1} 
+    v_next->normalizeL2(); // normalize v_{j+1}  
+    
+    // calculate elements of matrix L_bar_{j}
+    gamma_bar = -c_old*s_new*beta - c_new*alpha; // calculate gamma_bar_{j} 
+    delta_new = -c_old*c_new*beta + s_new*alpha; // calculate delta_{j} 
+    
+    //NOTE updating c_old after using it to calculate gamma_bar and delta_new is important!!
+    c_old = c_new;
+    
+    // calculate helpers (equation 5.6 in the paper mentioned above)
+    gamma = sqrt( (gamma_bar*gamma_bar) + (beta_next*beta_next) ); // calculate gamma_{j}
+    c_new = gamma_bar/gamma; // calculate c_{j-1}
+    s_new = beta_next/gamma; // calculate s_{j-1}
+    
+    // calculate t_{j} according to equation 6.7 of the paper mentioned above
+    t_new *= s_old*c_new;
+    
+    // calculate m_{j}
+    *m_new = (1/gamma)*(*v_new - (delta_new*(*m_old)) - (epsilon_next*(*m_older)) );
+       
+    epsilon_next = s_old*beta_next; // calculate epsilon_{j+1} of matrix L_bar_{j+1}
+      
+    x += t_new*(*m_new); // update x
+
+    // calculate residual of current solution x 
+    res *= (s_new*s_new);
+    
+    if ( verbose ) {
+      cerr << "ILSMinResLanczos: iteration " << j << " / " << maxIterations << endl;
+      if ( x.size() <= 20 )
+      {
+        cerr << "ILSMinResLanczos: current solution x: " << x << endl;
+      }
+    }
+
+    // check convergence
+    delta_x = fabs(t_new) * m_new->normL2();
+    if ( verbose ) {
+      cerr << "ILSMinResLanczos: delta_x = " << delta_x << endl;
+      cerr << "ILSMinResLanczos: residual = " << res << endl;
+    }  
+
+    if ( delta_x < minDelta ) {
+      if ( verbose )
+        cerr << "ILSMinResLanczos: small delta_x" << endl;
+      break;
+    } 
+    
+    j++;
+  }
+
+  // Normally, we do not need this, because the last iteration produces the optimal solution with minimal residual. 
+  // However, we will have this outputs equally to the other ILS methods.
+//   if ( verbose ) {
+    cerr << "ILSMinResLanczos: iterations needed: " << std::min<uint>(j,maxIterations) << endl;
+    cerr << "ILSMinResLanczos: minimal residual achieved: " << res << endl;
+    if ( x.size() <= 20 )
+      cerr << "ILSMinResLanczos: optimal solution: " << x << endl;
+//   }
+  
+  delete v_new;
+  delete v_old;
+  delete v_next;
+  delete m_new;
+  delete m_old;
+  delete m_older;
+  
+  return 0;
+}
+

+ 70 - 0
core/algebra/ILSMinResLanczos.h

@@ -0,0 +1,70 @@
+/** 
+* @file ILSMinResLanczos.h
+* @author Paul Bodesheim
+* @date 30/01/2012 (dd/mm/yyyy)
+
+*/
+#ifndef _NICE_ILSMinResLanczos_INCLUDE
+#define _NICE_ILSMinResLanczos_INCLUDE
+
+#include "core/vector/VectorT.h"
+#include "GenericMatrix.h"
+#include "IterativeLinearSolver.h"
+#include "EigValues.h"
+// #include "ILSConjugateGradients.h"
+
+namespace NICE {
+  
+/** @class ILSMinResLanczos
+ * Iteratively solving linear equation systems with the minimum residual method using Lanczos process
+ *
+ * @author Paul Bodesheim
+ */
+class ILSMinResLanczos : public IterativeLinearSolver
+{
+
+    protected:
+      bool verbose;
+      uint maxIterations;
+      double minDelta;
+//       bool useFlexibleVersion;
+
+//       Vector jacobiPreconditioner;
+
+    public:
+
+    /**
+    * @brief constructor 
+    *
+    * @param verbose output the residual and some debug information for each iteration
+    * @param maxIterations maximum number of iterations
+    * @param minDelta minimum difference between two solutions x_t and x_{t+1}
+    */
+    ILSMinResLanczos( bool verbose = false, uint maxIterations = 10000, double minDelta = 1e-7);//, bool useFlexibleVersion = false);
+		  
+    /** simple destructor */
+    virtual ~ILSMinResLanczos();
+
+//     /**
+//     * @brief set a vector of diagonal elements for the jacobi preconditioner
+//     *
+//     * @param jacobiPreconditioner
+//     */
+//     void setJacobiPreconditioner ( const Vector & jacobiPreconditioner );
+
+    /**
+    * @brief Solve the linear System A*x = b, where A is indirectly presented
+    * by the GenericMatrix gm
+    *
+    * @param gm GenericMatrix providing matrix-vector multiplications
+    * @param b Vector on the right hand side of the system
+    * @param x initial and final estimate
+    *
+    * @return method specific status information
+    */
+    int solveLin ( const GenericMatrix & gm, const Vector & b, Vector & x );
+};
+
+}
+
+#endif

+ 107 - 0
core/algebra/ILSPlainGradient.cpp

@@ -0,0 +1,107 @@
+/** 
+* @file ILSPlainGradient.cpp
+* @brief abstract interface for iterative linear solvers working with GenericMatrix
+* @author Erik Rodner
+* @date 12/21/2011
+
+*/
+#include <iostream>
+
+#include "core/optimization/gradientBased/FirstOrderRasmussen.h"
+#include "core/optimization/gradientBased/FirstOrderTrustRegion.h"
+#include "ILSPlainGradient.h"
+
+using namespace NICE;
+using namespace std;
+
+
+
+ILSPlainGradient::ILSPlainGradient(bool verbose, int maxIterations, bool minResidual)
+{
+  this->verbose = verbose;
+  optimizer = new FirstOrderRasmussen(this->verbose);
+  ( dynamic_cast< FirstOrderRasmussen * > (optimizer) )->setMaxIterations(maxIterations);
+  
+  // another optimization method
+  //optimizer = new FirstOrderTrustRegion(0.1, false);
+  //( dynamic_cast< FirstOrderTrustRegion * > (optimizer) )->setMaxIterations(maxIterations);
+  
+  this->minResidual = minResidual;
+}
+
+ILSPlainGradient::~ILSPlainGradient()
+{
+  delete optimizer;
+}
+
+
+int ILSPlainGradient::solveLin ( const GenericMatrix & gm, const Vector & b, Vector & x )
+{
+  if ( b.size() != gm.rows() ) {
+    fthrow(Exception, "Size of vector b mismatches with the size of the given GenericMatrix.");
+  }
+
+  if ( x.size() != gm.cols() )
+  {
+    x.resize(gm.cols());
+    x.set(0.0); // bad initial solution, but whatever
+  }
+
+  // use x as an initial solution
+  ILSPlainGradientOptimizationProblem op ( &gm, b, x, this->minResidual );
+
+  optimizer->optimizeFirst(op);
+
+  x = op.position();
+  return 0;
+}
+    
+ILSPlainGradientOptimizationProblem::ILSPlainGradientOptimizationProblem( const GenericMatrix *gm, const Vector & b, const Vector & x0, bool minResidual ) : OptimizationProblemFirst(gm->cols())
+{
+  this->m_gm = gm;
+  this->m_b = b;
+  this->parameters() = x0;
+  this->minResidual = minResidual;
+}
+
+double ILSPlainGradientOptimizationProblem::computeObjective()
+{
+  // we need to compute A*x
+  Vector v_Ax;
+  m_gm->multiply ( v_Ax, position() );
+
+  if ( minResidual ) 
+  {
+    // we need to compute A*x-b
+    Vector diff ( v_Ax - m_b );
+
+    // ... and the quadratic norm
+    return 0.5 * diff.scalarProduct(diff);
+  } else {
+    // x^T A x - b^T x = (A x - b)^T x (A is symmetric!)
+    return (0.5 * v_Ax - m_b).scalarProduct ( position() );
+  }
+}
+
+void ILSPlainGradientOptimizationProblem::computeGradient(Vector& newGradient)
+{
+  // the gradient is A*(A*x - b) (note that we exploited the symmetry of A)
+  Vector v_Ax;
+
+  // we need to compute A*x
+  m_gm->multiply ( v_Ax, position() );
+
+  // we need to compute A*x-b
+  Vector diff ( v_Ax - m_b );
+
+  newGradient.resize ( m_gm->cols() );
+  if ( minResidual ) 
+  {
+    // computing A*(Ax - b)
+    m_gm->multiply ( newGradient, diff );
+  } else {
+    newGradient = diff;
+  }
+}
+
+

+ 96 - 0
core/algebra/ILSPlainGradient.h

@@ -0,0 +1,96 @@
+/** 
+* @file ILSPlainGradient.h
+* @author Erik Rodner
+* @date 12/21/2011
+
+*/
+#ifndef _NICE_ILSPlainGradient_INCLUDE
+#define _NICE_ILSPlainGradient_INCLUDE
+
+#include "core/vector/VectorT.h"
+#include "core/optimization/gradientBased/OptimizationProblemFirst.h"
+#include "core/optimization/gradientBased/OptimizationAlgorithmFirst.h"
+
+#include "IterativeLinearSolver.h"
+
+
+namespace NICE {
+  
+/** @class ILSPlainGradient
+ * Iterative linear solver using our own non-linear optimization techniques
+ * and assuming symmetric matrices
+ *
+ * @author Erik Rodner
+ */
+class ILSPlainGradient : public IterativeLinearSolver
+{
+
+  protected:
+
+    bool verbose;
+    bool minResidual;
+
+    OptimizationAlgorithmFirst *optimizer;
+
+  public:
+
+		/** simple constructor */
+		ILSPlainGradient( bool verbose = false, int maxIterations = 1000, bool minResidual = true );
+	
+		/** simple destructor */
+		virtual ~ILSPlainGradient();
+
+    /**
+    * @brief Solve the linear System A*x = b, where A is indirectly presented
+    * by the GenericMatrix gm and A is symmetric
+    *
+    * @param gm GenericMatrix providing matrix-vector multiplications (symmetry required!)
+    * @param b Vector on the right hand side of the system
+    * @param x solution
+    *
+    * @return method specific status information
+    */
+    virtual int solveLin ( const GenericMatrix & gm, const Vector & b, Vector & x );
+     
+};
+
+/**
+* @brief This class implements a quadratic optimization problem, trying to minimize $0.5 * \| A x - b \|^2$ (minimum residual)
+*        or $0.5 * x^T A x - b^T x$ for symmetric A but without any additional constraints.
+*/
+class ILSPlainGradientOptimizationProblem : public OptimizationProblemFirst
+{
+  protected:
+    const GenericMatrix *m_gm;
+    Vector m_b;
+
+    bool minResidual;
+
+  public:
+
+    /**
+    * @brief Constructor
+    *
+    * @param gm input generic matrix object
+    */
+    ILSPlainGradientOptimizationProblem( const GenericMatrix *gm, const Vector & b, const Vector & x0, bool minResidual = true );
+
+    /**
+    * @brief Compute the objective
+    *
+    * @return 
+    */
+    virtual double computeObjective();
+
+    /**
+    * @brief Compute the gradient of the problem
+    *
+    * @param newGradient output gradient vector
+    */
+    virtual void computeGradient(Vector& newGradient);
+
+};
+
+}
+
+#endif

+ 247 - 0
core/algebra/ILSSymmLqLanczos.cpp

@@ -0,0 +1,247 @@
+/** 
+* @file ILSSymmLqLanczos.cpp
+* @brief Iteratively solving linear equation systems with the symmetric LQ (SYMMLQ) method using Lanczos process
+* @author Paul Bodesheim
+* @date 20/01/2012 (dd/mm/yyyy)
+
+*/
+#include <iostream>
+
+#include "ILSSymmLqLanczos.h"
+
+using namespace NICE;
+using namespace std;
+
+
+ILSSymmLqLanczos::ILSSymmLqLanczos( bool verbose, uint maxIterations, double minDelta) //, bool useFlexibleVersion )
+{
+  this->minDelta = minDelta;
+  this->maxIterations = maxIterations;
+  this->verbose = verbose;
+//   this->useFlexibleVersion = useFlexibleVersion;
+}
+
+ILSSymmLqLanczos::~ILSSymmLqLanczos()
+{
+}
+
+// void ILSSymmLqLanczos::setJacobiPreconditionerLanczos ( const Vector & jacobiPreconditioner )
+// {
+//   this->jacobiPreconditioner = jacobiPreconditioner;
+// }
+    
+int ILSSymmLqLanczos::solveLin ( const GenericMatrix & gm, const Vector & b, Vector & x )
+{
+  if ( b.size() != gm.rows() ) {
+    fthrow(Exception, "Size of vector b (" << b.size() << ") mismatches with the size of the given GenericMatrix (" << gm.rows() << ").");
+  }
+
+  if ( x.size() != gm.cols() )
+  {
+    x.resize(gm.cols());
+    x.set(0.0); // bad initial solution, but whatever
+  }
+
+//   if ( verbose ) cerr << "initial solution: " << x << endl;
+
+  // SYMMLQ-Method based on Lanczos vectors: implementation based on the following:
+  //
+  // C.C. Paige and M.A. Saunders: "Solution of sparse indefinite systems of linear equations". SIAM Journal on Numerical Analysis, p. 617--629, vol. 12, no. 4, 1975
+  // 
+  // http://www.netlib.org/templates/templates.pdf
+  //
+  
+  // declare some helpers
+  double gamma = 0.0;
+  double gamma_bar = 0.0;
+  double alpha = 0.0; // alpha_j = v_j^T * A * v_j for new Lanczos vector v_j
+  double beta = b.normL2(); // beta_1 = norm(b), in general beta_j = norm(v_j) for new Lanczos vector v_j
+  double beta_next = 0.0; // beta_{j+1}
+  double c_new = 0.0;
+  double c_old = -1.0;
+  double s_new = 0.0;
+  double s_old = 0.0;
+  double z_new = 0.0;
+  double z_old = 0.0;
+  double z_older = 0.0;
+  double delta_new = 0.0;
+  double epsilon_next = 0.0;
+
+  // init some helping vectors
+  Vector Av(b.size(),0.0); // Av = A * v_j
+  Vector Ac(b.size(),0.0); // Ac = A * c_j
+  Vector *v_new = new Vector(b.size(),0.0); // new Lanczos vector v_j
+  Vector *v_old = 0; // Lanczos vector of the iteration before: v_{j-1}
+  Vector *v_next = new Vector(b.size(),0.0); // Lanczos vector of the next iteration: v_{j+1}
+  Vector *w_new = new Vector(b.size(),0.0); 
+  Vector *w_bar = new Vector(b.size(),0.0); 
+  Vector x_L (b.size(),0.0); 
+//   Vector x_C (b.size(),0.0); // x_C is a much better approximation than x_L (according to the paper mentioned above)
+// NOTE we store x_C in output variable x and only update this solution if the residual decreases (we are able to calculate the residual of x_C without calculating x_C)
+  
+  // first iteration + initialization, where b will be used as the first Lanczos vector
+  *v_new = (1/beta)*b; // init v_1, v_1 = b / norm(b)
+  gm.multiply(Av,*v_new); // Av = A * v_1
+  alpha = v_new->scalarProduct(Av); // alpha_1 = v_1^T * A * v_1  
+  gamma_bar = alpha; // (gamma_bar_1 is equal to alpha_1 in ILSConjugateGradientsLanczos)
+  *v_next = Av - (alpha*(*v_new));
+  beta_next = v_next->normL2();
+  v_next->normalizeL2();
+  
+  gamma = sqrt( (gamma_bar*gamma_bar) + (beta_next*beta_next) );
+  c_new = gamma_bar/gamma;
+  s_new = beta_next/gamma;
+  
+  z_new = beta/gamma;
+  
+  *w_bar = *v_new;
+  
+  *w_new = c_new*(*w_bar) + s_new*(*v_next);
+  *w_bar = s_new*(*w_bar) - c_new*(*v_next);
+  
+  x_L = z_new*(*w_new); // first approximation of x
+  
+  // calculate current residual of x_C
+  double res_x_C = (beta*beta)*(s_new*s_new)/(c_new*c_new);
+  
+  // store minimal residual
+  double res_x_C_min = res_x_C;
+  
+  // store optimal solution x_C in output variable x instead of additional variable x_C
+  x = x_L + (z_new/c_new)*(*w_bar); // x_C = x_L + (z_new/c_new)*(*w_bar); 
+  
+  // calculate delta of x_L
+  double delta_x_L = fabs(z_new) * w_new->normL2();
+  if ( verbose ) {
+    cerr << "ILSSymmLqLanczos: iteration 1 / " << maxIterations << endl;
+    if ( x.size() <= 20 )
+      cerr << "ILSSymmLqLanczos: current solution x_L: " << x_L << endl;
+    cerr << "ILSSymmLqLanczos: delta_x_L = " << delta_x_L << endl;
+  }
+  
+  // start with second iteration
+  uint j = 2;
+  while (j <= maxIterations )
+  {
+  
+    // prepare next iteration
+    if ( v_old == 0 ) v_old = v_new;
+    else {
+      
+      delete v_old;
+      v_old = v_new;
+    }
+    v_new = v_next;
+    v_next = new Vector(b.size(),0.0);
+    beta = beta_next;
+    z_older = z_old;
+    z_old = z_new;
+    s_old = s_new;
+    res_x_C *= (c_new*c_new);
+    
+    // start next iteration:
+    // calculate next Lanczos vector v_ {j+1} based on older ones
+    gm.multiply(Av,*v_new);
+    alpha = v_new->scalarProduct(Av);
+    *v_next = Av - (alpha*(*v_new)) - (beta*(*v_old)); // calculate v_{j+1} 
+    beta_next = v_next->normL2(); // calculate beta_{j+1} 
+    v_next->normalizeL2(); // normalize v_{j+1}  
+    
+    // calculate elements of matrix L_bar_{j}
+    gamma_bar = -c_old*s_new*beta - c_new*alpha; // calculate gamma_bar_{j} 
+    delta_new = -c_old*c_new*beta + s_new*alpha; // calculate delta_{j} 
+    
+    //NOTE updating c_old after using it to calculate gamma_bar and delta_new is important!!
+    c_old = c_new;
+    
+    // calculate helpers (equation 5.6 in the paper mentioned above)
+    gamma = sqrt( (gamma_bar*gamma_bar) + (beta_next*beta_next) ); // calculate gamma_{j}
+    c_new = gamma_bar/gamma; // calculate c_{j-1}
+    s_new = beta_next/gamma; // calculate s_{j-1}
+    
+    // calculate next component z_{j} of vector z
+    z_new = - (delta_new*z_old + epsilon_next*z_older)/gamma;
+    
+    //NOTE updating epsilon_next after using it to calculate z_new is important!!
+    epsilon_next = s_old*beta_next; // calculate epsilon_{j+1} of matrix L_bar_{j+1}
+
+    // calculate residual of current solution x_C without computing this solution x_C before
+    res_x_C *= (s_new*s_new)/(c_new*c_new);
+    
+    // we only update our solution x (originally x_C ) if the residual is smaller
+    if ( res_x_C < res_x_C_min ) 
+    {
+      x = x_L + (z_new/c_new)*(*w_bar);  // x_C = x_L + (z_new/c_new)*(*w_bar); // update x
+      res_x_C_min = res_x_C;
+    }
+        
+    // calculate new vectors w_{j} and w_bar_{j+1} according to equation 5.9 of the paper mentioned above
+    *w_new = c_new*(*w_bar) + s_new*(*v_next);
+    *w_bar = s_new*(*w_bar) - c_new*(*v_next);
+   
+    x_L += z_new*(*w_new); // update x_L
+        
+    if ( verbose ) {
+      cerr << "ILSSymmLqLanczos: iteration " << j << " / " << maxIterations << endl;
+      if ( x.size() <= 20 )
+        cerr << "ILSSymmLqLanczos: current solution x_L: " << x_L << endl;
+    }
+
+    // check convergence
+    delta_x_L = fabs(z_new) * w_new->normL2();
+    if ( verbose ) {
+      cerr << "ILSSymmLqLanczos: delta_x_L = " << delta_x_L << endl;
+      cerr << "ILSSymmLqLanczos: residual = " << res_x_C << endl;
+    }  
+
+    if ( delta_x_L < minDelta ) {
+      if ( verbose )
+        cerr << "ILSSymmLqLanczos: small delta_x_L" << endl;
+      break;
+    } 
+    
+    j++;
+  }
+  
+//   if ( verbose ) {
+    cerr << "ILSSymmLqLanczos: iterations needed: " << std::min<uint>(j,maxIterations) << endl;
+    cerr << "ILSSymmLqLanczos: minimal residual achieved: " << res_x_C_min << endl;
+    if ( x.size() <= 20 )
+      cerr << "ILSSymmLqLanczos: optimal solution: " << x << endl;
+//   }
+  
+//  WE DO NOT WANT TO CALCULATE THE RESIDUAL EXPLICITLY  
+//  
+//   Vector tmp;
+//   gm.multiply(tmp,x_C);
+//   Vector res ( b - tmp );
+//   double res_x_C = res.scalarProduct(res);
+//   
+//   gm.multiply(tmp,x_L);
+//   res = b - tmp;
+//   double res_x_L = res.scalarProduct(res);
+//   
+//   if ( res_x_L < res_x_C )
+//   {
+//     x = x_L;
+//     if ( verbose )
+//       cerr << "ILSSymmLqLanczos: x_L used with residual " << res_x_L << " < " << res_x_C << endl;
+//     
+//   } else 
+//   {
+//     
+//     x = x_C;
+//     if ( verbose )
+//       cerr << "ILSSymmLqLanczos: x_C used with residual " << res_x_C << " < " << res_x_L << endl;    
+//     
+//   }
+   
+  delete v_new;
+  delete v_old;
+  delete v_next;
+  delete w_new;
+  delete w_bar;
+  
+  return 0;
+}
+

+ 70 - 0
core/algebra/ILSSymmLqLanczos.h

@@ -0,0 +1,70 @@
+/** 
+* @file ILSSymmLqLanczos.h
+* @author Paul Bodesheim
+* @date 20/01/2012 (dd/mm/yyyy)
+
+*/
+#ifndef _NICE_ILSSymmLqLanczos_INCLUDE
+#define _NICE_ILSSymmLqLanczos_INCLUDE
+
+#include "core/vector/VectorT.h"
+#include "GenericMatrix.h"
+#include "IterativeLinearSolver.h"
+#include "EigValues.h"
+#include "ILSConjugateGradients.h"
+
+namespace NICE {
+  
+/** @class ILSSymmLqLanczos
+ * Iteratively solving linear equation systems with the symmetric LQ (SYMMLQ) method using Lanczos process
+ *
+ * @author Paul Bodesheim
+ */
+class ILSSymmLqLanczos : public IterativeLinearSolver
+{
+
+    protected:
+      bool verbose;
+      uint maxIterations;
+      double minDelta;
+//       bool useFlexibleVersion;
+
+//       Vector jacobiPreconditioner;
+
+    public:
+
+    /**
+    * @brief constructor 
+    *
+    * @param verbose output the residual and some debug information for each iteration
+    * @param maxIterations maximum number of iterations
+    * @param minDelta minimum difference between two solutions x_t and x_{t+1}
+    */
+    ILSSymmLqLanczos( bool verbose = false, uint maxIterations = 10000, double minDelta = 1e-7);//, bool useFlexibleVersion = false);
+		  
+    /** simple destructor */
+    virtual ~ILSSymmLqLanczos();
+
+//     /**
+//     * @brief set a vector of diagonal elements for the jacobi preconditioner
+//     *
+//     * @param jacobiPreconditioner
+//     */
+//     void setJacobiPreconditioner ( const Vector & jacobiPreconditioner );
+
+    /**
+    * @brief Solve the linear System A*x = b, where A is indirectly presented
+    * by the GenericMatrix gm
+    *
+    * @param gm GenericMatrix providing matrix-vector multiplications
+    * @param b Vector on the right hand side of the system
+    * @param x initial and final estimate
+    *
+    * @return method specific status information
+    */
+    int solveLin ( const GenericMatrix & gm, const Vector & b, Vector & x );
+};
+
+}
+
+#endif

+ 22 - 0
core/algebra/IterativeLinearSolver.cpp

@@ -0,0 +1,22 @@
+/** 
+* @file IterativeLinearSolver.cpp
+* @brief abstract interface for iterative linear solvers working with GenericMatrix
+* @author Erik Rodner
+* @date 12/21/2011
+
+*/
+#include <iostream>
+
+#include "IterativeLinearSolver.h"
+
+using namespace NICE;
+
+
+IterativeLinearSolver::IterativeLinearSolver()
+{
+}
+
+IterativeLinearSolver::~IterativeLinearSolver()
+{
+}
+

+ 48 - 0
core/algebra/IterativeLinearSolver.h

@@ -0,0 +1,48 @@
+/** 
+* @file IterativeLinearSolver.h
+* @author Erik Rodner
+* @date 12/21/2011
+
+*/
+#ifndef _NICE_ITERATIVELINEARSOLVERINCLUDE
+#define _NICE_ITERATIVELINEARSOLVERINCLUDE
+
+#include "core/vector/VectorT.h"
+#include "GenericMatrix.h"
+
+namespace NICE {
+  
+/** @class IterativeLinearSolver
+ * abstract interface for iterative linear solvers working with GenericMatrix 
+ *
+ * @author Erik Rodner
+ */
+class IterativeLinearSolver
+{
+
+    protected:
+
+    public:
+
+		/** simple constructor */
+		IterativeLinearSolver();
+		  
+		/** simple destructor */
+		virtual ~IterativeLinearSolver();
+
+    /**
+    * @brief Solve the linear System A*x = b, where A is indirectly presented
+    * by the GenericMatrix gm
+    *
+    * @param gm GenericMatrix providing matrix-vector multiplications
+    * @param b Vector on the right hand side of the system
+    * @param x initial and final estimate
+    *
+    * @return method specific status information
+    */
+    virtual int solveLin ( const GenericMatrix & gm, const Vector & b, Vector & x ) = 0;
+};
+
+}
+
+#endif

+ 224 - 0
core/algebra/LUDecomposition.cpp

@@ -0,0 +1,224 @@
+/**
+* @file LUDecomposition.cpp
+* @brief: LU-Decomposition of a matrix
+* @author: Alexander Freytag, Wolfgang Ortmann
+* @date: 22-10-2012
+*/
+
+// Note: for further matrix operations, you might use the ICE library available at http://www.inf-cv.uni-jena.de/ice.html
+
+#include "LUDecomposition.h"
+
+using namespace std;
+using namespace NICE;  
+
+LUDecomposition::LUDecomposition()
+{
+}
+
+
+LUDecomposition::~LUDecomposition()
+{
+}
+
+void LUDecomposition::decompose( const NICE::Matrix & m, NICE::Matrix & L, NICE::Matrix  &U )
+{
+  NICE::Matrix LU;
+
+  this->decomposePacked( m, LU );
+
+  int i,j;
+  L = LU; 
+  U = LU;
+  
+  // get the actual matrices
+  // U is an upper triangular matrix
+  for (i = 0; i < (int)U.cols(); i++)
+  {
+    for (j = i + 1; j < (int)U.rows(); j++)
+      U(j,i) = 0;
+  }  
+   
+  // L is a lower triangular matrix
+  for (i = 0; i < (int)L.cols(); i++)
+  {
+    for (j = 0; j < i; j++)
+      L(j,i) = 0;
+
+    L(i,i) = 1.0;
+  }  
+}
+
+
+Vector LUSolve(const NICE::Matrix & LU, const NICE::VectorT<int> & indx, const NICE::Vector & b)
+{
+  NICE::Vector res(b);
+  double sum;
+
+  int dim = LU.cols();
+  
+  //is the given matrix square?
+  if (dim!=(int)LU.rows()) 
+  {
+    fthrow(Exception, "Matrix is not square");    
+    return res;
+  }
+
+  //do the matrix LU and the given index vector have same sizes?
+  if ((int)indx.size()!=dim) 
+  {
+    fthrow(Exception, "Wrong dimensions of matrix and index-vector");
+    return res;
+  }
+  
+  //do the matrix LU and the given b-vector have same sizes?
+  if ((int)b.size()!=dim) 
+  {
+    fthrow(Exception, "Wrong dimensions of matrix and b-vector");      
+    return res;
+  }
+  
+  int i, ii, ip, j;
+  ii = -1;
+  
+  for (i = 0; i < dim; i++)
+  {
+    ip = indx[i];
+    sum = res[ip];
+    res[ip] = res[i];    
+    
+    if (ii >= 0)
+    {
+      for (j = ii; j < i; j++)
+        sum -= LU(i, j) * res[j];
+    }
+    else
+    {
+      if (sum) 
+        ii = i;
+    }
+
+    res[i] = sum;    
+  }
+
+  for (i = dim - 1; i >= 0; i--)
+  {
+    sum = res[i];
+
+    for (j = i + 1; j < dim; j++)
+      sum -= LU(i, j) * res[j];
+
+    res[i] = sum / LU(i, i);
+  }
+
+  return res;
+}
+
+void LUDecomposition::decomposePacked(const NICE::Matrix & m, NICE::Matrix & LU, NICE::VectorT<int> &indx, bool pivot)
+{
+  int dim = m.cols();
+  
+  // check, whether the matrix is square
+  if (dim != (int)m.rows())
+  {
+    fthrow(Exception, "Matrix is not square");
+  }
+  
+  LU = m;
+  
+  NICE::Vector vv(dim);
+  indx.resize(dim);
+
+  int i, j, k, imax;
+  double sum, big, dum;
+  int dsign = 1;
+
+  for (i = 0; i < dim; i++)
+  {
+    big = 0.0;
+
+    for (j = 0; j < dim; j++)
+    {
+      double temp = fabs(LU(i, j));
+
+      if (temp > big)
+        big = temp;
+    }    
+    //check for singularity, i.e., the largest absolute singular value is zero
+    if (big == 0) 
+    {
+      fthrow(Exception, "Matrix is singular");
+    }
+    
+    vv[i] = 1.0 / big;
+  }
+
+  // loop over all columns
+  for (j = 0; j < dim; j++)
+  {
+    //and over all rows
+    for (i = 0; i < j; i++)
+    {
+      sum = LU(i,j);
+      
+      for (k = 0; k < i; k++)
+        sum -= LU(i, k) * LU(k, j);
+      
+      LU(i,j)=sum;
+    }
+    
+    big = 0.0;
+    imax = 0; // avoid warning
+        
+    for (i = j; i < dim; i++)
+    {
+      sum = LU(i, j);
+      
+      for (k = 0; k < j; k++)
+        sum -= LU(i, k) * LU(k, j);
+
+      LU(i, j) = sum;
+      dum = vv[i] * fabs(sum);
+
+      if (dum >= big)
+      {
+        big = dum;
+        imax = i;
+      }
+    }
+
+    //pivotization?
+    if (pivot)
+    {
+      if (j != imax)
+      {
+        LU.exchangeRows(j, imax);
+        dsign = -dsign;
+        vv[imax] = vv[j];
+      }
+      
+      indx[j] = imax;     
+    }
+    else indx[j] = j;
+
+    if (LU(j, j) == 0) 
+    {
+      fthrow(Exception, "Matrix is singular");
+    }
+
+    if (j < dim - 1)
+    {
+      dum = 1.0 / LU(j, j);
+
+      for (i = j + 1; i < dim; i++)
+        LU(i, j) *= dum;
+    }
+  } // all columns
+}
+
+void LUDecomposition::decomposePacked(const NICE::Matrix & m, NICE::Matrix & LU)
+{
+  NICE::VectorT<int> ndx; // dummy, not used (without pivotization)
+  this->decomposePacked(m, LU, ndx, false);
+}
+

+ 85 - 0
core/algebra/LUDecomposition.h

@@ -0,0 +1,85 @@
+/**
+* @file LUDecomposition.h
+* @brief: LU-Decomposition of a matrix
+* @author: Alexander Freytag, Wolfgang Ortmann
+* @date: 22-10-2012
+*/
+
+// Note: for further matrix operations, you might use the ICE library available at http://www.inf-cv.uni-jena.de/ice.html
+
+#ifndef _NICE_LUDECOMPOSITION_
+#define _NICE_LUDECOMPOSITION_
+
+#include "core/vector/MatrixT.h"
+#include "core/vector/VectorT.h"
+#include "MatrixDecomposition.h"
+
+namespace NICE
+{
+
+  /*!
+      LU-Decomposition of a matrix
+  */
+
+  class LUDecomposition : MatrixDecomposition  
+  {
+    public:
+
+
+      /*!
+        default constructor
+      */
+      LUDecomposition();
+
+      /*!
+          Destructor.
+      */
+      virtual ~LUDecomposition();
+      
+      /**
+       * @brief decompose a square matrix m into lower and upper triangular matrices L and U
+       * @date 22-10-2012
+       * @author Alexander Freytag
+       * @param m a square matrix
+       * @param L the resulting lower triangular matrix
+       * @param U the resulting upper triangular matrix
+       */      
+      void decompose( const NICE::Matrix & m, NICE::Matrix & L, NICE::Matrix & U);
+      
+      /**
+       * @brief solve a linear equation system, using the LU-decomposition of a square matrix m
+       * @date 22-10-2012
+       * @author Alexander Freytag
+       * @param LU the given LU-decomposition of a square matrix m
+       * @param indx vector containing information about the exchange of rows during the decomposition (when pivotization is done)
+       * @param b the right-hand-side of the linear equation system
+       */
+      NICE::Vector solve( const NICE::Matrix &LU,const NICE::VectorT<int> &indx, const NICE::Vector &b);
+
+      /**
+       * @brief decompose a square matrix m into lower and upper triangular matrices L and U, which are packed into a single matrix 
+       * @date 22-10-2012
+       * @author Alexander Freytag
+       * @param m a square matrix
+       * @param LU the decomposition of m in a single matrix (LU_ij: i<=j -> LU_ij=U_ij, i>j -> LU_ij=L_ij, L_ii = 1.0)
+       * @param indx vector containing information about the exchange of rows during the decomposition (when pivotization is done)
+       * @param pivot use pivotization? (default true)
+       */         
+      void decomposePacked(const NICE::Matrix & m, NICE::Matrix & LU, NICE::VectorT<int> & indx, bool pivot=true); 
+      
+      /**
+       * @brief decompose a square matrix m into lower and upper triangular matrices L and U, which are packed into a single matrix, NO pivotization
+       * @date 22-10-2012
+       * @author Alexander Freytag
+       * @param m a square matrix
+       * @param LU the decomposition of m in a single matrix (LU_ij: i<=j -> LU_ij=U_ij, i>j -> LU_ij=L_ij, L_ii = 1.0)
+       */          
+      void decomposePacked(const NICE::Matrix & m, NICE::Matrix & LU);      
+      
+    protected:
+
+  };
+  
+} //namespace
+
+#endif

+ 8 - 0
core/algebra/Makefile

@@ -0,0 +1,8 @@
+#TARGETS_FROM:=$(notdir $(patsubst %/,%,$(shell pwd)))/$(TARGETS_FROM)
+#$(info recursivly going up: $(TARGETS_FROM) ($(shell pwd)))
+
+all:
+
+%:
+	$(MAKE) TARGETS_FROM=$(notdir $(patsubst %/,%,$(shell pwd)))/$(TARGETS_FROM) -C .. $@
+

+ 103 - 0
core/algebra/Makefile.inc

@@ -0,0 +1,103 @@
+# LIBRARY-DIRECTORY-MAKEFILE
+# conventions:
+# - all subdirectories containing a "Makefile.inc" are considered sublibraries
+#   exception: "progs/" and "tests/" subdirectories!
+# - all ".C", ".cpp" and ".c" files in the current directory are linked to a
+#   library
+# - the library depends on all sublibraries 
+# - the library name is created with $(LIBNAME), i.e. it will be somehow
+#   related to the directory name and with the extension .a
+#   (e.g. lib1/sublib -> lib1_sublib.a)
+# - the library will be added to the default build list ALL_LIBRARIES
+
+# --------------------------------
+# - remember the last subdirectory
+#
+# set the variable $(SUBDIR) correctly to the current subdirectory. this
+# variable can be used throughout the current makefile.inc. The many 
+# SUBDIR_before, _add, and everything are only required so that we can recover
+# the previous content of SUBDIR before exitting the makefile.inc
+
+SUBDIR_add:=$(dir $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)))
+SUBDIR_before:=$(SUBDIR)
+SUBDIR:=$(strip $(SUBDIR_add))
+SUBDIR_before_$(SUBDIR):=$(SUBDIR_before)
+ifeq "$(SUBDIR)" "./"
+SUBDIR:=
+endif
+
+# ------------------------
+# - include subdirectories
+#
+# note the variables $(SUBDIRS_OF_$(SUBDIR)) are required later on to recover
+# the dependencies automatically. if you handle dependencies on your own, you
+# can also dump the $(SUBDIRS_OF_$(SUBDIR)) variable, and include the
+# makefile.inc of the subdirectories on your own...
+
+SUBDIRS_OF_$(SUBDIR):=$(patsubst %/Makefile.inc,%,$(wildcard $(SUBDIR)*/Makefile.inc))
+include $(SUBDIRS_OF_$(SUBDIR):%=%/Makefile.inc)
+
+# ----------------------------
+# - include local dependencies
+#
+# you can specify libraries needed by the individual objects or by the whole
+# directory. the object specific additional libraries are only considered
+# when compiling the specific object files
+# TODO: update documentation...
+
+-include $(SUBDIR)libdepend.inc
+
+$(foreach d,$(filter-out %progs %tests,$(SUBDIRS_OF_$(SUBDIR))),$(eval $(call PKG_DEPEND_INT,$(d))))
+
+# ---------------------------
+# - objects in this directory
+#
+# the use of the variable $(OBJS) is not mandatory. it is mandatory however
+# to update $(ALL_OBJS) in a way that it contains the path and name of
+# all objects. otherwise we can not include the appropriate .d files.
+
+OBJS:=$(patsubst %.cpp,$(OBJDIR)%.o,$(notdir $(wildcard $(SUBDIR)*.cpp))) \
+      $(patsubst %.C,$(OBJDIR)%.o,$(notdir $(wildcard $(SUBDIR)*.C))) \
+	  $(shell grep -ls Q_OBJECT $(SUBDIR)*.h | sed -e's@^@/@;s@.*/@$(OBJDIR)moc_@;s@\.h$$@.o@') \
+      $(patsubst %.c,$(OBJDIR)%.o,$(notdir $(wildcard $(SUBDIR)*.c)))
+ALL_OBJS += $(OBJS)
+
+# ----------------------------
+# - binaries in this directory
+#
+# output of binaries in this directory. none of the variables has to be used.
+# but everything you add to $(ALL_LIBRARIES) and $(ALL_BINARIES) will be
+# compiled with `make all`. be sure again to add the files with full path.
+
+LIBRARY_BASENAME:=$(call LIBNAME,$(SUBDIR))
+ifneq "$(SUBDIR)" ""
+ALL_LIBRARIES+=$(LIBDIR)$(LIBRARY_BASENAME).$(LINK_FILE_EXTENSION)
+endif
+
+# ---------------------
+# - binary dependencies
+#
+# there is no way of determining the binary dependencies automatically, so we
+# follow conventions. the current library depends on all sublibraries.
+# all other dependencies have to be added manually by specifying, that the
+# current .pc file depends on some other .pc file. binaries depending on
+# libraries should exclusivelly use the .pc files as well.
+
+ifeq "$(SKIP_BUILD_$(OBJDIR))" "1"
+$(LIBDIR)$(LIBRARY_BASENAME).a:
+else
+$(LIBDIR)$(LIBRARY_BASENAME).a:$(OBJS) \
+	$(call PRINT_INTLIB_DEPS,$(PKGDIR)$(LIBRARY_BASENAME).a,.$(LINK_FILE_EXTENSION))
+endif
+
+$(PKGDIR)$(LIBRARY_BASENAME).pc: \
+	$(call PRINT_INTLIB_DEPS,$(PKGDIR)$(LIBRARY_BASENAME).pc,.pc)
+
+# -------------------
+# - subdir management
+#
+# as the last step, always add this line to correctly recover the subdirectory
+# of the makefile including this one!
+
+SUBDIR:=$(SUBDIR_before_$(SUBDIR))
+

+ 40 - 0
core/algebra/MatrixDecomposition.h

@@ -0,0 +1,40 @@
+/**
+* @file MatrixDecomposition.h
+* @brief: Abstract class for matrix decompositions (LU, SVD, cholesky, householder, ...)
+* @author: Alexander Freytag
+* @date: 22-10-2012
+*/
+
+#ifndef _NICE_MATRIXDECOMPOSITION_
+#define _NICE_MATRIXDECOMPOSITION_
+
+namespace NICE
+{
+
+  /*!
+      Abstract class for matrix decompositions (LU, SVD, cholesky, householder, ...) 
+  */
+
+  class MatrixDecomposition  
+  {
+    public:
+
+
+      /*!
+        default constructor
+      */
+      MatrixDecomposition(){};
+
+      /*!
+          Destructor.
+      */
+      virtual ~MatrixDecomposition(){};
+
+
+    protected:
+
+  };
+  
+} //namespace
+
+#endif

+ 45 - 0
core/algebra/PartialGenericMatrix.h

@@ -0,0 +1,45 @@
+/** 
+* @file PartialGenericMatrix.h
+* @brief matrix interface for indirect sub-matrix multiplications
+* @author Erik Rodner
+* @date 01/26/2011
+*/
+#ifndef PARTIALGENERICMATRIXINCLUDE
+#define PARTIALGENERICMATRIXINCLUDE
+
+#include <set> 
+#include <vector> 
+
+#include "GenericMatrix.h"
+
+
+namespace NICE
+{
+
+/** matrix interface for indirect sub-matrix multiplications */
+class PartialGenericMatrix : public GenericMatrix
+{
+  public:
+
+    typedef std::vector<int> SetType;
+
+    /** multiply a sub-matrix with a given vector: Asub * xsub = ysub */
+    virtual void multiply ( const SetType & rowSet, const SetType & columnSet, NICE::Vector & y, const NICE::Vector & x) const = 0;
+
+    /** multiply with a vector: A*x = y */
+    virtual void multiply (NICE::Vector & y, const NICE::Vector & x) const = 0;
+
+    virtual double getDiagonalElement ( uint i ) const = 0;
+
+    /** simple destructor */
+    virtual ~ PartialGenericMatrix ()
+    {
+    };
+
+};
+
+
+
+}		// namespace
+
+#endif

+ 8 - 0
core/algebra/libdepend.inc

@@ -0,0 +1,8 @@
+$(call PKG_DEPEND_INT,core/basics)
+$(call PKG_DEPEND_INT,core/vector)
+# we need the optimization library for our linear solvers
+$(call PKG_DEPEND_INT,core/optimization)
+# this is just an optional package
+$(call PKG_DEPEND_INT,cholesky-gpu/niceinterface)
+# this is an additional external optional package
+$(call PKG_DEPEND_EXT,TRLAN)

+ 8 - 0
core/algebra/progs/Makefile

@@ -0,0 +1,8 @@
+#TARGETS_FROM:=$(notdir $(patsubst %/,%,$(shell pwd)))/$(TARGETS_FROM)
+#$(info recursivly going up: $(TARGETS_FROM) ($(shell pwd)))
+
+all:
+
+%:
+	$(MAKE) TARGETS_FROM=$(notdir $(patsubst %/,%,$(shell pwd)))/$(TARGETS_FROM) -C .. $@
+

+ 88 - 0
core/algebra/progs/Makefile.inc

@@ -0,0 +1,88 @@
+# BINARY-DIRECTORY-MAKEFILE
+# conventions:
+# - there are no subdirectories, they are ignored!
+# - all ".C", ".cpp" and ".c" files in the current directory are considered
+#   independent binaries, and linked as such.
+# - the binaries depend on the library of the parent directory
+# - the binary names are created with $(BINNAME), i.e. it will be more or less
+#   the name of the .o file
+# - all binaries will be added to the default build list ALL_BINARIES
+
+# --------------------------------
+# - remember the last subdirectory
+#
+# set the variable $(SUBDIR) correctly to the current subdirectory. this
+# variable can be used throughout the current makefile.inc. The many 
+# SUBDIR_before, _add, and everything are only required so that we can recover
+# the previous content of SUBDIR before exitting the makefile.inc
+
+SUBDIR_add:=$(dir $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)))
+SUBDIR_before:=$(SUBDIR)
+SUBDIR:=$(strip $(SUBDIR_add))
+SUBDIR_before_$(SUBDIR):=$(SUBDIR_before)
+
+# ------------------------
+# - include subdirectories
+#
+# note the variables $(SUBDIRS_OF_$(SUBDIR)) are required later on to recover
+# the dependencies automatically. if you handle dependencies on your own, you
+# can also dump the $(SUBDIRS_OF_$(SUBDIR)) variable, and include the
+# makefile.inc of the subdirectories on your own...
+
+#SUBDIRS_OF_$(SUBDIR):=$(patsubst %/Makefile.inc,%,$(wildcard $(SUBDIR)*/Makefile.inc))
+#include $(SUBDIRS_OF_$(SUBDIR):%=%/Makefile.inc)
+
+# ----------------------------
+# - include local dependencies
+#
+# include the libdepend.inc file, which gives additional dependencies for the
+# libraries and binaries. additionally, an automatic dependency from the library
+# of the parent directory is added (commented out in the code below).
+
+-include $(SUBDIR)libdepend.inc
+
+PARENTDIR:=$(patsubst %/,%,$(dir $(patsubst %/,%,$(SUBDIR))))
+$(eval $(call PKG_DEPEND_INT,$(PARENTDIR)))
+
+# ---------------------------
+# - objects in this directory
+#
+# the use of the variable $(OBJS) is not mandatory. it is mandatory however
+# to update $(ALL_OBJS) in a way that it contains the path and name of
+# all objects. otherwise we can not include the appropriate .d files.
+
+OBJS:=$(patsubst %.cpp,$(OBJDIR)%.o,$(notdir $(wildcard $(SUBDIR)*.cpp))) \
+      $(patsubst %.C,$(OBJDIR)%.o,$(notdir $(wildcard $(SUBDIR)*.C))) \
+      $(shell grep -ls Q_OBJECT $(SUBDIR)*.h | sed -e's@^@/@;s@.*/@$(OBJDIR)moc_@;s@\.h$$@.o@') \
+      $(patsubst %.c,$(OBJDIR)%.o,$(notdir $(wildcard $(SUBDIR)*.c)))
+ALL_OBJS += $(OBJS)
+
+# ----------------------------
+# - binaries in this directory
+#
+# output of binaries in this directory. none of the variables has to be used.
+# but everything you add to $(ALL_LIBRARIES) and $(ALL_BINARIES) will be
+# compiled with `make all`. be sure again to add the files with full path.
+
+BINARIES:=$(patsubst %.o,$(BINDIR)%,$(filter-out moc_%,$(notdir $(OBJS))))
+ALL_BINARIES+=$(BINARIES)
+
+# ---------------------
+# - binary dependencies
+#
+# there is no way of determining the binary dependencies automatically, so we
+# follow conventions. each binary depends on the corresponding .o file and
+# on the libraries specified by the INTLIBS/EXTLIBS. these dependencies can be
+# specified manually or they are automatically stored in a .bd file.
+
+$(foreach head,$(wildcard $(SUBDIR)*.h),$(eval $(shell grep -q Q_OBJECT $(head) && echo $(head) | sed -e's@^@/@;s@.*/\(.*\)\.h$$@$(BINDIR)\1:$(OBJDIR)moc_\1.o@')))
+-include $(OBJS:%.o=%.bd)
+
+# -------------------
+# - subdir management
+#
+# as the last step, always add this line to correctly recover the subdirectory
+# of the makefile including this one!
+
+SUBDIR:=$(SUBDIR_before_$(SUBDIR))
+

+ 94 - 0
core/algebra/progs/testILSConjugateGradients.cpp

@@ -0,0 +1,94 @@
+/** 
+* @file testILSConjugateGradients.cpp
+* @author Paul Bodesheim
+* @date  23/01/2012
+* @brief test routine for Iterative Linear Solver: Conjugate Gradients Method (CGM)
+*/
+
+#include "core/vector/MatrixT.h"
+#include "core/vector/VectorT.h"
+#include <stdio.h>
+#include <ctime>
+#include "iostream"
+#include "core/basics/Exception.h"
+#include "core/vector/Algorithms.h"
+#include "core/algebra/ILSConjugateGradients.h"
+#include "core/algebra/GMStandard.h"
+
+using namespace std;
+using namespace NICE;
+
+int main(int argc, char* argv[])
+{
+  
+	int mySize = 20; // number of equations
+	FILE * logfile;
+	std::string logfilename;
+	
+	if ( argc < 2 )
+	  logfilename = "/home/bodesheim/testILS-CGM.log";
+	else
+	  logfilename = argv[1];
+	
+	logfile = fopen(logfilename.c_str(), "w");
+	
+	// generate matrix A
+	Matrix A(mySize,mySize,0.0);
+	fprintf(logfile, "A:\n");
+	for (uint i = 0; i < A.rows(); i++)
+	{
+		for (uint j = 0; j < A.cols(); j++)
+		{
+			if ( j == i ) A(i,j) = (i+1)+(j+1);
+			else {
+			  
+			    A(i,j) = sqrt((i+1)*(j+1));
+			}
+
+			fprintf(logfile, "%f  ",A(i,j));
+		}
+		fprintf(logfile, "\n");
+	}
+	
+	// generate vector b (RHS of LS)
+	Vector b(mySize,0.0);
+	fprintf(logfile, "b:\n");
+	for (uint i = 0; i < b.size(); i++)
+	{	
+	    b(i) = (i+1)*sqrt(i+1);
+	    fprintf(logfile, "%f  ",b(i));
+	}
+	fprintf(logfile, "\n");
+	
+	// solve Ax = b
+	Vector x(mySize,0.0);
+	ILSConjugateGradients cgm(true,mySize);
+	
+	//tic
+	time_t  start = clock();
+	cgm.solveLin(GMStandard(A),b,x);
+	//toc
+	float duration = (float) (clock() - start);
+	std::cerr << "Time for solveLin: " << duration/CLOCKS_PER_SEC << std::endl;	
+
+	fprintf(logfile, "x:\n");
+	for (uint i = 0; i < x.size(); i++)
+	{	
+	    fprintf(logfile, "%f  ",x(i));
+	}
+	fprintf(logfile, "\n");
+	
+  // check result
+  Vector Ax(mySize,0.0);
+  Ax = A*x;
+  fprintf(logfile, "A*x:\n");
+  for (uint i = 0; i < Ax.size(); i++)
+  { 
+      fprintf(logfile, "%f  ",Ax(i));
+  }
+  fprintf(logfile, "\n"); 	
+	
+	fclose(logfile);
+	
+	return 0;
+}

+ 465 - 0
core/algebra/progs/testILSConjugateGradientsLanczos.cpp

@@ -0,0 +1,465 @@
+/** 
+* @file testILSConjugateGradientsLanczos.cpp
+* @author Paul Bodesheim
+* @date  23/01/2012
+* @brief test routine for Iterative Linear Solver: Conjugate Gradients Method (CGM) using Lanczos vectors
+*/
+
+#include "core/vector/MatrixT.h"
+#include "core/vector/VectorT.h"
+#include <stdio.h>
+#include <ctime>
+#include "iostream"
+#include "core/basics/Exception.h"
+#include "core/vector/Algorithms.h"
+// #include "core/algebra/ILSConjugateGradients.h"
+#include "core/algebra/GMStandard.h"
+#include "core/algebra/ILSConjugateGradientsLanczos.h"
+
+
+using namespace std;
+using namespace NICE;
+
+int main(int argc, char* argv[])
+{
+  
+	int mySize = 20; // number of equations
+	FILE * logfile;
+	std::string logfilename;
+	
+	if ( argc < 2 )
+	  logfilename = "/home/bodesheim/testILS-CGM-Lanczos.log";
+	else
+	  logfilename = argv[1];
+	
+	logfile = fopen(logfilename.c_str(), "w");
+	
+	// generate matrix A
+	Matrix A(mySize,mySize,0.0);
+	fprintf(logfile, "A:\n");
+	for (uint i = 0; i < A.rows(); i++)
+	{
+		for (uint j = 0; j < A.cols(); j++)
+		{
+			if ( j == i ) A(i,j) = (i+1)+(j+1);
+			else {
+			  
+			    A(i,j) = sqrt((i+1)*(j+1));
+			}
+
+			fprintf(logfile, "%f  ",A(i,j));
+		}
+		fprintf(logfile, "\n");
+	}
+	
+	// generate vector b (RHS of LS)
+	Vector b(mySize,0.0);
+	fprintf(logfile, "b:\n");
+	for (uint i = 0; i < b.size(); i++)
+	{	
+	    b(i) = (i+1)*sqrt(i+1);
+	    fprintf(logfile, "%f  ",b(i));
+	}
+	fprintf(logfile, "\n");
+	
+	// solve Ax = b
+	Vector x(mySize,0.0);
+	ILSConjugateGradientsLanczos cgm(true,mySize);
+	
+	//tic
+	time_t  start = clock();
+	cgm.solveLin(GMStandard(A),b,x);
+	//toc
+	float duration = (float) (clock() - start);
+	std::cerr << "Time for solveLin: " << duration/CLOCKS_PER_SEC << std::endl;	
+
+	fprintf(logfile, "x:\n");
+	for (uint i = 0; i < x.size(); i++)
+	{	
+	    fprintf(logfile, "%f  ",x(i));
+	}
+	fprintf(logfile, "\n");
+	
+  // check result
+  Vector Ax(mySize,0.0);
+  Ax = A*x;
+  fprintf(logfile, "A*x:\n");
+  for (uint i = 0; i < Ax.size(); i++)
+  { 
+      fprintf(logfile, "%f  ",Ax(i));
+  }
+  fprintf(logfile, "\n"); 	
+	
+	fclose(logfile);
+	
+	return 0;
+}
+
+
+
+// Algorithm without using class ILSConjugateGradientsLanczos works for 10x10 matrix A
+
+// int main(int argc, char* argv[])
+// {
+//   
+// 	int mySize = 10; // number of equations
+// 	FILE * logfile;
+// 	std::string logfilename;
+// 	
+// 	if ( argc < 2 )
+// 	  logfilename = "/home/bodesheim/testILS-CGM-Lanczos.log";
+// 	else
+// 	  logfilename = argv[1];
+// 	
+// 	logfile = fopen(logfilename.c_str(), "w");
+// 	
+// 	// generate matrix A
+// 	Matrix A(mySize,mySize,0.0);
+// 	fprintf(logfile, "A:\n");
+// 	for (uint i = 0; i < A.rows(); i++)
+// 	{
+// 		for (uint j = 0; j < A.cols(); j++)
+// 		{
+// 			if ( j == i ) A(i,j) = (i+1)+(j+1);
+// 			else {
+// 			  
+// 			    A(i,j) = sqrt((i+1)*(j+1));
+// 			}
+// 
+// 			fprintf(logfile, "%f  ",A(i,j));
+// 		}
+// 		fprintf(logfile, "\n");
+// 	}
+// 	
+// 	// generate vector b (RHS of LS)
+// 	Vector b(mySize,0.0);
+// 	fprintf(logfile, "b:\n");
+// 	for (uint i = 0; i < b.size(); i++)
+// 	{	
+// 	    b(i) = (i+1)*sqrt(i+1);
+// 	    fprintf(logfile, "%f  ",b(i));
+// 	}
+// 	fprintf(logfile, "\n");
+// 	
+// 	double beta1 = b.normL2();
+// 	fprintf(logfile, "norm of b: %f\n\n",beta1);
+// 	
+// 	// init some helpers
+// 	Matrix Tmatrix(mySize,mySize,0.0);
+// 	Matrix Vmatrix(mySize,mySize,0.0);
+// 	Matrix Cmatrix(mySize,mySize,0.0);
+// 	Matrix Dmatrix(mySize,mySize,0.0);
+// 	Matrix Lmatrix(mySize,mySize,0.0);
+// 	Vector p(mySize,0.0);
+// 	
+// 	Vector Av(mySize,0.0);
+// 	Vector v_new(mySize,0.0);
+// 	Vector v_old(mySize,0.0);
+// 	Vector v_older(mySize,0.0);
+// 	Vector c_new(mySize,0.0);
+// 	Vector c_old(mySize,0.0);
+// 	
+// 	Vector x(mySize,0.0);
+// 	
+// 	double d_new = 0;
+// 	double d_old = 0;
+// 	double l_new = 0;
+// 	double p_new = 0;
+// 	double p_old = 0;
+// 	double alpha = 0;
+// 	double beta = 0;
+// 	
+// 	for (uint iter = 0; iter < Tmatrix.rows(); iter++)
+// 	{
+// 	  
+// 	      if ( iter == 0 ) {
+// 		
+// 		v_new = (1/beta1)*b; // init v1
+// 		Av.multiply(A,v_new);
+// 		alpha = v_new.scalarProduct(Av); 
+// 		d_new=alpha;
+// 		p_new = beta1/d_new;
+// 
+// 		Tmatrix(iter,iter)=alpha;
+// 
+// 	      } else {
+// 		
+// 		v_new = Av - (alpha*v_old) - (beta*v_older);
+// 		
+// 		beta = v_new.normL2();
+// 		v_new.normalizeL2();
+// 		
+// 		Av.multiply(A,v_new);
+// 		alpha = v_new.scalarProduct(Av);
+// 		
+// 		l_new = beta/sqrt(d_old);
+// 		d_new = alpha-(l_new*l_new);
+// 		
+// 		l_new/=sqrt(d_old);
+// 		
+// 		p_new = -p_old*l_new*d_old/d_new;
+// 		
+// 		Tmatrix(iter,iter-1)=beta;
+// 		Tmatrix(iter-1,iter)=beta;
+// 		Tmatrix(iter,iter)=alpha;
+// 		Lmatrix(iter,iter-1)=l_new;
+// 	      }
+// 	      
+// 	      c_new = v_new - (l_new*c_old);
+// 
+// 	      x+=(p_new*c_new);
+// 	      
+// 	      fprintf(logfile, "\n x after iteration %d:\n",iter+1);
+// 	      for (uint i = 0; i < x.size(); i++)
+// 	      {
+// 		      fprintf(logfile, "%f  ",x(i));
+// 	      }
+// 	
+// 	      Dmatrix(iter,iter)=d_new;
+// 	      Lmatrix(iter,iter)=1;
+// 	      Vmatrix.getColumnRef(iter) = v_new;
+// 	      Cmatrix.getColumnRef(iter) = c_new;
+// 	      p(iter)=p_new;
+// 	      
+// 	      d_old = d_new;
+// 	      p_old = p_new;
+// 	      v_older = v_old;
+// 	      v_old = v_new;
+// 	      c_old = c_new;
+// 	}
+// 
+// 	fprintf(logfile, "\n\n Result of CGM w/o Lanczos: \n");
+// 	ILSConjugateGradients cgm(true,x.size());
+// 	Vector xCGM (x.size(),0.0);
+// 	cgm.solveLin(GMStandard(A),b,xCGM);
+// 	for (uint i = 0; i < xCGM.size(); i++)
+// 	{
+// 	      fprintf(logfile, "%f  ",xCGM(i));
+// 	}
+// 	fprintf(logfile, "\n");
+// 	
+// 	fprintf(logfile, "\n\n Result using QR decomp: \n");
+// 	solveLinearEquationQR(A, b, xCGM);
+// 	for (uint i = 0; i < xCGM.size(); i++)
+// 	{
+// 	      fprintf(logfile, "%f  ",xCGM(i));
+// 	}
+// 	fprintf(logfile, "\n");	
+// 
+// 	fprintf(logfile, "\n\n Check Iterative Results: \n");
+// 	Vector Cp(p.size(),0.0);
+// 	Cp.multiply(Cmatrix,p);
+// 	fprintf(logfile, "\nC*p:\n");
+// 	for (uint i = 0; i < Cp.size(); i++)
+// 	{
+// 		fprintf(logfile, "%f  ",Cp(i));
+// 	}
+// 	fprintf(logfile, "\n");
+// 	
+// 	fprintf(logfile, "\ntransposed Vmatrix:\n");
+// 	for (uint i = 0; i < Vmatrix.rows(); i++)
+// 	{
+// 		for (uint j = 0; j < Vmatrix.cols(); j++)
+// 		{
+// 			fprintf(logfile, "%f  ",Vmatrix(j,i));
+// 		}
+// 		fprintf(logfile, "\n");
+// 	}	
+// 	
+// 	fprintf(logfile, "\nL times C^T:\n");
+// 	Matrix LC (Lmatrix.rows(),Cmatrix.rows(),0.0);
+// 	LC.multiply(Lmatrix,Cmatrix.transpose());
+// 	for (uint i = 0; i < LC.rows(); i++)
+// 	{
+// 		for (uint j = 0; j < LC.cols(); j++)
+// 		{
+// 			fprintf(logfile, "%f  ",LC(i,j));
+// 		}
+// 		fprintf(logfile, "\n");
+// 	}	
+// 	
+// 	fprintf(logfile, "\n\n Check Cholesky of T: \n");
+// 	fprintf(logfile, "Tmatrix:\n");
+// 	for (uint i = 0; i < Tmatrix.rows(); i++)
+// 	{
+// 		for (uint j = 0; j < Tmatrix.cols(); j++)
+// 		{
+// 			fprintf(logfile, "%f  ",Tmatrix(i,j));
+// 		}
+// 		fprintf(logfile, "\n");
+// 	}	
+// 	
+// 	fprintf(logfile, "\nDmatrix:\n");
+// 	for (uint i = 0; i < Dmatrix.rows(); i++)
+// 	{
+// 		for (uint j = 0; j < Dmatrix.cols(); j++)
+// 		{
+// 			fprintf(logfile, "%f  ",Dmatrix(i,j));
+// 		}
+// 		fprintf(logfile, "\n");
+// 	}
+// 	
+// 	fprintf(logfile, "\nLmatrix:\n");
+// 	for (uint i = 0; i < Lmatrix.rows(); i++)
+// 	{
+// 		for (uint j = 0; j < Lmatrix.cols(); j++)
+// 		{
+// 			fprintf(logfile, "%f  ",Lmatrix(i,j));
+// 		}
+// 		fprintf(logfile, "\n");
+// 	}
+// 	
+// 	Matrix LD(mySize,mySize,0.0);
+// 	Matrix LDL(mySize,mySize,0.0);
+// 	LD.multiply(Lmatrix,Dmatrix);
+// 	LDL.multiply(LD,Lmatrix.transpose());
+// 	
+// 	fprintf(logfile, "\nLDL:\n");
+// 	for (uint i = 0; i < LDL.rows(); i++)
+// 	{
+// 		for (uint j = 0; j < LDL.cols(); j++)
+// 		{
+// 			fprintf(logfile, "%f  ",LDL(i,j));
+// 		}
+// 		fprintf(logfile, "\n");
+// 	}
+// 	
+// 	Vector LDp;
+// 	LDp.multiply(LD,p);
+// 	
+// 	fprintf(logfile, "\nL*D*p:\n");
+// 	for (uint i = 0; i < LDp.size(); i++)
+// 	{
+// 		fprintf(logfile, "%f  ",LDp(i));
+// 	}	
+// 	
+// 	
+// 	fclose(logfile);
+// 	
+// 	return 0;
+// }
+
+
+// CHOLESKY FACTORIZATION OF TRIDIAGONAL MATRIX T WORKS:
+
+// int main(int argc, char* argv[])
+// {
+//   
+// 	FILE * logfile;
+// 	std::string logfilename;
+// 	
+// 	if ( argc < 2 )
+// 	  logfilename = "/home/bodesheim/testILS-CGM-Lanczos.log";
+// 	else
+// 	  logfilename = argv[1];
+// 	
+// 	logfile = fopen(logfilename.c_str(), "w");
+// 	
+// 	Matrix Tmatrix(5,5,0.0);
+// 	fprintf(logfile, "Tmatrix:\n");
+// 	for (uint i = 0; i < Tmatrix.rows(); i++)
+// 	{
+// 		for (uint j = 0; j < Tmatrix.cols(); j++)
+// 		{
+// 			if ( j == i ) Tmatrix(i,j) = (i+1)+(j+1);
+// 			else if ( j == (i+1) ) {
+// 			  
+// 			    Tmatrix(i,j) = sqrt((i+1)*(j+1));
+// 			    Tmatrix(j,i) = Tmatrix(i,j);
+// 			}
+// 
+// 			fprintf(logfile, "%f  ",Tmatrix(i,j));
+// 		}
+// 		fprintf(logfile, "\n");
+// 	}
+// 	
+// 	Matrix Dmatrix(5,5,0.0);
+// 	Matrix Lmatrix(5,5,0.0);
+// 	Vector p(5,0.0);
+// 	
+// 	double beta = 2.4;
+// 	double d_new = 0;
+// 	double d_old = 0;
+// 	double l_new = 0;
+// 	double p_new = 0;
+// 	double p_old = 0;
+// 	
+// 	for (uint iter = 0; iter < Tmatrix.rows(); iter++)
+// 	{
+// 	  
+// 	      if ( iter == 0 ) {
+// 		
+// 		d_new = Tmatrix(iter,iter);
+// 		l_new = 1;
+// 		p_new = beta/d_new;
+// 		
+// 	      } else {
+// 		
+// 		l_new = Tmatrix(iter,iter-1)/sqrt(d_old);
+// 		d_new = Tmatrix(iter,iter)-(l_new*l_new);
+// 		
+// 		l_new/=sqrt(d_old);
+// 		Lmatrix(iter,iter-1)=l_new;
+// 		
+// 		p_new = -p_old*l_new*d_old/d_new;
+// 
+// 	      }
+// 	      
+// 	      Dmatrix(iter,iter)=d_new;
+// 	      Lmatrix(iter,iter)=1;
+// 	      p(iter)=p_new;
+// 	      
+// 	      d_old = d_new;
+// 	      p_old = p_new;
+// 	}
+// 	
+// 	fprintf(logfile, "Dmatrix:\n");
+// 	for (uint i = 0; i < Dmatrix.rows(); i++)
+// 	{
+// 		for (uint j = 0; j < Dmatrix.cols(); j++)
+// 		{
+// 			fprintf(logfile, "%f  ",Dmatrix(i,j));
+// 		}
+// 		fprintf(logfile, "\n");
+// 	}
+// 	
+// 	fprintf(logfile, "Lmatrix:\n");
+// 	for (uint i = 0; i < Lmatrix.rows(); i++)
+// 	{
+// 		for (uint j = 0; j < Lmatrix.cols(); j++)
+// 		{
+// 			fprintf(logfile, "%f  ",Lmatrix(i,j));
+// 		}
+// 		fprintf(logfile, "\n");
+// 	}
+// 	
+// 	Matrix LD(5,5,0.0);
+// 	Matrix LDL(5,5,0.0);
+// 	LD.multiply(Lmatrix,Dmatrix);
+// 	LDL.multiply(LD,Lmatrix.transpose());
+// 	
+// 	fprintf(logfile, "LDL:\n");
+// 	for (uint i = 0; i < LDL.rows(); i++)
+// 	{
+// 		for (uint j = 0; j < LDL.cols(); j++)
+// 		{
+// 			fprintf(logfile, "%f  ",LDL(i,j));
+// 		}
+// 		fprintf(logfile, "\n");
+// 	}
+// 	
+// 	Vector result;
+// 	result.multiply(LD,p);
+// 	
+// 	fprintf(logfile, "result:\n");
+// 	for (uint i = 0; i < result.size(); i++)
+// 	{
+// 		fprintf(logfile, "%f  ",result(i));
+// 	}	
+// 	
+// 	
+// 	fclose(logfile);
+// 	
+// 	return 0;
+// }
+

+ 612 - 0
core/algebra/progs/testILSMinResLanczos.cpp

@@ -0,0 +1,612 @@
+/** 
+* @file testILSMinResLanczos.cpp
+* @author Paul Bodesheim
+* @date  23/01/2012
+* @brief test routine for Iterative Linear Solver: minimum residual method (MINRES) using Lanczos vectors
+*/
+
+#include "core/vector/MatrixT.h"
+#include "core/vector/VectorT.h"
+#include <stdio.h>
+#include <ctime>
+#include "iostream"
+#include "core/basics/Exception.h"
+#include "core/vector/Algorithms.h"
+// #include "core/algebra/ILSConjugateGradients.h"
+#include "core/algebra/GMStandard.h"
+#include "core/algebra/ILSMinResLanczos.h"
+
+
+using namespace std;
+using namespace NICE;
+
+int main(int argc, char* argv[])
+{
+  
+	int mySize = 20; // number of equations
+	FILE * logfile;
+	std::string logfilename;
+	
+	if ( argc < 2 )
+	  logfilename = "/home/bodesheim/testILS-MinRes-Lanczos.log";
+	else
+	  logfilename = argv[1];
+	
+	logfile = fopen(logfilename.c_str(), "w");
+	
+	// generate matrix A
+	Matrix A(mySize,mySize,0.0);
+	fprintf(logfile, "A:\n");
+	for (uint i = 0; i < A.rows(); i++)
+	{
+		for (uint j = 0; j < A.cols(); j++)
+		{
+			if ( j == i ) A(i,j) = (i+1)+(j+1);
+			else {
+			  
+			    A(i,j) = sqrt((i+1)*(j+1));
+			}
+
+			fprintf(logfile, "%f  ",A(i,j));
+		}
+		fprintf(logfile, "\n");
+	}
+	
+	// generate vector b (RHS of LS)
+	Vector b(mySize,0.0);
+	fprintf(logfile, "b:\n");
+	for (uint i = 0; i < b.size(); i++)
+	{	
+	    b(i) = (i+1)*sqrt(i+1);
+	    fprintf(logfile, "%f  ",b(i));
+	}
+	fprintf(logfile, "\n");
+	
+	// solve Ax = b
+	Vector x(mySize,0.0);
+	ILSMinResLanczos ils(true,mySize);
+	
+	//tic
+	time_t  start = clock();
+	ils.solveLin(GMStandard(A),b,x);
+	//toc
+	float duration = (float) (clock() - start);
+	std::cerr << "Time for solveLin: " << duration/CLOCKS_PER_SEC << std::endl;	
+
+	fprintf(logfile, "x:\n");
+	for (uint i = 0; i < x.size(); i++)
+	{	
+	    fprintf(logfile, "%f  ",x(i));
+	}
+	fprintf(logfile, "\n");
+	
+	// check result
+	Vector Ax(mySize,0.0);
+	Ax = A*x;
+	fprintf(logfile, "A*x:\n");
+	for (uint i = 0; i < Ax.size(); i++)
+	{	
+	    fprintf(logfile, "%f  ",Ax(i));
+	}
+	fprintf(logfile, "\n");	
+	
+	fclose(logfile);
+	
+	return 0;
+}
+
+// Algorithm without using class ILSConjugateGradientsLanczos works for 10x10 matrix A
+
+
+// int main(int argc, char* argv[])
+// {
+//   
+//   int mySize = 10; // number of equations
+//   FILE * logfile;
+//   std::string logfilename;
+//   
+//   if ( argc < 2 )
+//     logfilename = "/home/bodesheim/testILS-MinRes-Lanczos.log";
+//   else
+//     logfilename = argv[1];
+//   
+//   logfile = fopen(logfilename.c_str(), "w");
+//   
+//   // generate matrix A
+//   Matrix A(mySize,mySize,0.0);
+//   fprintf(logfile, "A:\n");
+//   for (uint i = 0; i < A.rows(); i++)
+//   {
+//     for (uint j = 0; j < A.cols(); j++)
+//     {
+//       if ( j == i ) A(i,j) = (i+1)+(j+1);
+//       else {
+//         
+//           A(i,j) = sqrt((i+1)*(j+1));
+//       }
+// 
+//       fprintf(logfile, "%f  ",A(i,j));
+//     }
+//     fprintf(logfile, "\n");
+//   }
+//   
+//   // generate vector b (RHS of LS)
+//   Vector b(mySize,0.0);
+//   fprintf(logfile, "b:\n");
+//   for (uint i = 0; i < b.size(); i++)
+//   { 
+//       b(i) = (i+1)*sqrt(i+1);
+//       fprintf(logfile, "%f  ",b(i));
+//   }
+//   fprintf(logfile, "\n");
+//   
+//   // solve Ax = b
+//   Vector x(mySize,0.0);
+//   ILSMinResLanczos ils(true,mySize);
+//   
+//   //tic
+//   time_t  start = clock();
+// //  ils.solveLin(GMStandard(A),b,x);
+//   
+//               uint maxIterations = (uint) mySize;
+//               double minDelta = 1e-7;
+//               bool verbose = true;
+//               GMStandard gm(A);
+//   
+//               Matrix T(mySize,mySize,0.0);
+//               Matrix L(mySize,mySize,0.0);
+//               Matrix Q(mySize,mySize,0.0);
+//               Matrix Q_tmp(mySize,mySize,0.0);
+//               
+//               for (int kk = 0; kk < mySize; kk++)
+//                 Q(kk,kk) = 1.0;
+//   
+//               if ( b.size() != gm.rows() ) {
+//                 fthrow(Exception, "Size of vector b (" << b.size() << ") mismatches with the size of the given GenericMatrix (" << gm.rows() << ").");
+//               }
+// 
+//               if ( x.size() != gm.cols() )
+//               {
+//                 x.resize(gm.cols());
+//                 x.set(0.0); // bad initial solution, but whatever
+//               }
+// 
+//             //   if ( verbose ) cerr << "initial solution: " << x << endl;
+// 
+//               // SYMMLQ-Method based on Lanczos vectors: implementation based on the following:
+//               //
+//               // C.C. Paige and M.A. Saunders: "Solution of sparse indefinite systems of linear equations". SIAM Journal on Numerical Analysis, p. 617--629, vol. 12, no. 4, 1975
+//               // 
+//               // http://www.netlib.org/templates/templates.pdf
+//               //
+//               
+//               // declare some helpers
+//               double gamma = 0;
+//               double gamma_bar = 0;
+//               double alpha = 0; // alpha_j = v_j^T * A * v_j for new Lanczos vector v_j
+//               double beta = b.normL2(); // beta_1 = norm(b), in general beta_j = norm(v_j) for new Lanczos vector v_j
+//               double beta_next = 0; // beta_{j+1}
+//               double c_new = 0;
+//               double c_old = -1;
+//               double s_new = 0;
+//               double s_old = 0;
+//               double z_new = 0;
+//               double z_old = 0;
+//               double z_older = 0;
+//               double delta_new = 0;
+//               double epsilon_new = 0;
+//               double epsilon_next = 0;
+// 
+//               // init some helping vectors
+//               Vector Av(b.size(),0.0); // Av = A * v_j
+//               Vector Ac(b.size(),0.0); // Ac = A * c_j
+//             //   Vector r(b.size(),0.0); // current residual
+//               Vector *v_new = new Vector(b.size(),0.0); // new Lanczos vector v_j
+//               Vector *v_old = 0; // Lanczos vector of the iteration before: v_{j-1}
+//               Vector *v_next = new Vector(b.size(),0.0); // Lanczos vector of the next iteration: v_{j+1}
+//               Vector *w_new = new Vector(b.size(),0.0); 
+//               Vector *w_bar = new Vector(b.size(),0.0); 
+//               Vector x_L (b.size(),0.0); 
+//               Vector x_C (b.size(),0.0); 
+//               
+//               // first iteration + initialization, where b will be used as the first Lanczos vector
+//               *v_new = (1/beta)*b; // init v_1, v_1 = b / norm(b)
+//               gm.multiply(Av,*v_new); // Av = A * v_1
+//               alpha = v_new->scalarProduct(Av); // alpha_1 = v_1^T * A * v_1  
+//               gamma_bar = alpha; // (gamma_bar_1 is equal to alpha_1 in ILSConjugateGradientsLanczos)
+//               *v_next = Av - (alpha*(*v_new));
+//               beta_next = v_next->normL2();
+//               v_next->normalizeL2();
+//               
+//               gamma = sqrt( (gamma_bar*gamma_bar) + (beta_next*beta_next) );
+//               c_new = gamma_bar/gamma;
+//               s_new = beta_next/gamma;
+//               
+//               z_new = beta/gamma;
+//               
+//               *w_bar = *v_new;
+//               
+//               *w_new = c_new*(*w_bar) + s_new*(*v_next);
+//               *w_bar = s_new*(*w_bar) - c_new*(*v_next);
+//               
+//               x_L = z_new*(*w_new); // first approximation of x
+//               
+//               double delta = fabs(z_new) * w_new->normL2();
+//               if ( verbose ) {
+//                 cerr << "ILSMinResLanczos: iteration 1 / " << maxIterations << endl;
+//                 if ( x.size() <= 20 )
+//                   cerr << "ILSMinResLanczos: current solution x_L: " << x_L << endl;
+//                 cerr << "ILSMinResLanczos: delta = " << delta << endl;
+//             //     cerr << "ILSMinResLanczos: residual = " << r.scalarProduct(r) << endl;
+//               }
+//               
+//               T(0,0) = alpha;
+//               L(0,0) = gamma;
+//               
+//               // start with second iteration
+//               uint j = 2;
+//               while (j <= maxIterations )
+//               {
+//               
+//                 // prepare next iteration
+//                 if ( v_old == 0 ) v_old = v_new;
+//                 else {
+//                   
+//                   delete v_old;
+//                   v_old = v_new;
+//                 }
+//                 v_new = v_next;
+//                 v_next = new Vector(b.size(),0.0);
+//                 beta = beta_next;
+//                 z_older = z_old;
+//                 z_old = z_new;
+//                 s_old = s_new;
+//                 epsilon_new = epsilon_next;
+//                 
+//                 gm.multiply(Av,*v_new);
+//                 alpha = v_new->scalarProduct(Av);
+//                 *v_next = Av - (alpha*(*v_new)) - (beta*(*v_old));
+//                 beta_next = v_next->normL2();
+//                 v_next->normalizeL2();
+//                 
+//                 gamma_bar = -c_old*s_new*beta - c_new*alpha;
+//                 delta_new = -c_old*c_new*beta + s_new*alpha;
+// /*                epsilon_new = s_old*beta;*/
+//                 c_old = c_new;
+//                 
+//                 gamma = sqrt( (gamma_bar*gamma_bar) + (beta_next*beta_next) );
+//                 c_new = gamma_bar/gamma;
+//                 s_new = beta_next/gamma;  
+//                 
+//                 z_new = - (delta_new*z_old + epsilon_new*z_older)/gamma;
+//                 epsilon_next = s_old*beta_next;
+// 
+//                 // NOTE this update step is necessary before computing the new w_bar !!
+//                 x_C = x_L + (z_new/c_new)*(*w_bar); // update x
+// 
+//                 *w_new = c_new*(*w_bar) + s_new*(*v_next);
+//                 *w_bar = s_new*(*w_bar) - c_new*(*v_next);
+//               
+//                 x_L += z_new*(*w_new); // update x
+//                 
+//                 Vector tmp;
+//                 gm.multiply(tmp,x_C);
+//                 Vector res ( b - tmp );
+//                 double res_x_C = res.scalarProduct(res);
+//                 
+//                 gm.multiply(tmp,x_L);
+//                 res = b - tmp;
+//                 double res_x_L = res.scalarProduct(res);
+//                 
+//                 if ( res_x_L < res_x_C )
+//                 {
+//                   x = x_L;
+//                   if ( verbose )
+//                     cerr << "ILSMinResLanczos: x_L used with residual " << res_x_L << " < " << res_x_C << endl;
+//                   
+//                 } else 
+//                 {
+//                   
+//                   x = x_C;
+//                   if ( verbose )
+//                     cerr << "ILSMinResLanczos: x_C used with residual " << res_x_C << " < " << res_x_L << endl;    
+//                   
+//                 }    
+//                 
+//                 
+//                 if ( verbose ) {
+//                   cerr << "ILSMinResLanczos: iteration " << j << " / " << maxIterations << endl;
+//                   if ( x.size() <= 20 )
+//                   {
+//                     cerr << "ILSMinResLanczos: current solution x_L: " << x_L << endl;
+//                     cerr << "ILSMinResLanczos: current solution x_C: " << x_C << endl;
+//                   }
+//                 }
+//                 
+//                 // store optimal x that produces smallest residual
+//             //     if (res < res_min) {
+//             //       
+//             //       x_opt = x;
+//             //       res_min = res;
+//             //     }
+// 
+//                 // check convergence
+//                 delta = fabs(z_new) * w_new->normL2();
+//                 if ( verbose ) {
+//                   cerr << "ILSMinResLanczos: delta = " << delta << endl;
+//             //       cerr << "ILSMinResLanczos: residual = " << r.scalarProduct(r) << endl;
+//                 }  
+// 
+//                 if ( delta < minDelta ) {
+//                   if ( verbose )
+//                     cerr << "ILSMinResLanczos: small delta" << endl;
+//                   break;
+//                 } 
+//                 
+//                 T(j-1,j-1) = alpha;
+//                 T(j-2,j-1) = beta;
+//                 T(j-1,j-2) = beta;
+//                 
+//                 L(j-1,j-1) = gamma;
+//                 L(j-1,j-2) = delta_new;
+//                 if (j >= 3) 
+//                   L(j-1,j-3) = epsilon_new;
+// 
+//                 Q_tmp = 0.0;
+//                 for (uint kk = 0; kk < mySize; kk++)
+//                 {
+//                   Q_tmp(kk,kk) = 1.0;                
+//                   if (kk == j-2)
+//                   {
+//                     Q_tmp(kk,kk) = c_old;
+//              
+//                   } else if (kk == j-1)
+//                   {
+//                     Q_tmp(kk,kk) = -c_old;
+//                     Q_tmp(kk-1,kk) = s_old;
+//                     Q_tmp(kk,kk-1) = s_old;
+//                   } 
+//                   
+//                 }
+//                 
+//                 Matrix tmpQ(Q);
+//                 Q.multiply(tmpQ,Q_tmp);
+//                 
+//                 tmpQ.multiply(T,Q);
+//                 
+//                 fprintf(logfile, "\n iteration %i\n",j);
+//                 fprintf(logfile, "T:\n");
+//                 for (uint i = 0; i < T.rows(); i++)
+//                 {
+//                   for (uint j = 0; j < T.cols(); j++)
+//                   {
+//                     fprintf(logfile, "%f  ",T(i,j));
+//                   }
+//                   fprintf(logfile, "\n");
+//                 }
+//                 
+//                 fprintf(logfile, "Q:\n");
+//                 for (uint i = 0; i < Q.rows(); i++)
+//                 {
+//                   for (uint j = 0; j < Q.cols(); j++)
+//                   {
+//                     fprintf(logfile, "%f  ",Q(i,j));
+//                   }
+//                   fprintf(logfile, "\n");
+//                 } 
+//                 
+//                 fprintf(logfile, "Q_tmp:\n");
+//                 for (uint i = 0; i < Q_tmp.rows(); i++)
+//                 {
+//                   for (uint j = 0; j < Q_tmp.cols(); j++)
+//                   {
+//                     fprintf(logfile, "%f  ",Q_tmp(i,j));
+//                   }
+//                   fprintf(logfile, "\n");
+//                 }  
+//                 
+//                 fprintf(logfile, "L:\n");
+//                 for (uint i = 0; i < L.rows(); i++)
+//                 {
+//                   for (uint j = 0; j < L.cols(); j++)
+//                   {
+//                     fprintf(logfile, "%f  ",L(i,j));
+//                   }
+//                   fprintf(logfile, "\n");
+//                 }
+//                 
+//                 fprintf(logfile, "T*Q:\n");
+//                 for (uint i = 0; i < tmpQ.rows(); i++)
+//                 {
+//                   for (uint j = 0; j < tmpQ.cols(); j++)
+//                   {
+//                     fprintf(logfile, "%f  ",tmpQ(i,j));
+//                   }
+//                   fprintf(logfile, "\n");
+//                 }                
+//                 fprintf(logfile, "gamma_bar: %f\n",gamma_bar);
+//                 
+//                 j++;
+//               }
+//               
+//               Vector tmp;
+//               gm.multiply(tmp,x_C);
+//               Vector res ( b - tmp );
+//               double res_x_C = res.scalarProduct(res);
+//               
+//               gm.multiply(tmp,x_L);
+//               res = b - tmp;
+//               double res_x_L = res.scalarProduct(res);
+//               
+//               if ( res_x_L < res_x_C )
+//               {
+//                 x = x_L;
+//                 if ( verbose )
+//                   cerr << "ILSMinResLanczos: x_L used with residual " << res_x_L << " < " << res_x_C << endl;
+//                 
+//               } else 
+//               {
+//                 
+//                 x = x_C;
+//                 if ( verbose )
+//                   cerr << "ILSMinResLanczos: x_C used with residual " << res_x_C << " < " << res_x_L << endl;    
+//                 
+//               }
+//               
+//               delete v_new;
+//               delete v_old;
+//               delete v_next;
+//               delete w_new;
+//               delete w_bar;
+//   
+//   
+//   //toc
+//   float duration = (float) (clock() - start);
+//   std::cerr << "Time for solveLin: " << duration/CLOCKS_PER_SEC << std::endl; 
+// 
+//   fprintf(logfile, "x:\n");
+//   for (uint i = 0; i < x.size(); i++)
+//   { 
+//       fprintf(logfile, "%f  ",x(i));
+//   }
+//   fprintf(logfile, "\n");
+//   
+//   // check result
+//   Vector Ax(mySize,0.0);
+//   Ax = A*x;
+//   fprintf(logfile, "A*x:\n");
+//   for (uint i = 0; i < Ax.size(); i++)
+//   { 
+//       fprintf(logfile, "%f  ",Ax(i));
+//   }
+//   fprintf(logfile, "\n"); 
+//   
+//   fclose(logfile);
+//   
+//   return 0;
+// }
+
+
+// CHOLESKY FACTORIZATION OF TRIDIAGONAL MATRIX T WORKS:
+
+// int main(int argc, char* argv[])
+// {
+//   
+// 	FILE * logfile;
+// 	std::string logfilename;
+// 	
+// 	if ( argc < 2 )
+// 	  logfilename = "/home/bodesheim/testILS-CGM-Lanczos.log";
+// 	else
+// 	  logfilename = argv[1];
+// 	
+// 	logfile = fopen(logfilename.c_str(), "w");
+// 	
+// 	Matrix Tmatrix(5,5,0.0);
+// 	fprintf(logfile, "Tmatrix:\n");
+// 	for (uint i = 0; i < Tmatrix.rows(); i++)
+// 	{
+// 		for (uint j = 0; j < Tmatrix.cols(); j++)
+// 		{
+// 			if ( j == i ) Tmatrix(i,j) = (i+1)+(j+1);
+// 			else if ( j == (i+1) ) {
+// 			  
+// 			    Tmatrix(i,j) = sqrt((i+1)*(j+1));
+// 			    Tmatrix(j,i) = Tmatrix(i,j);
+// 			}
+// 
+// 			fprintf(logfile, "%f  ",Tmatrix(i,j));
+// 		}
+// 		fprintf(logfile, "\n");
+// 	}
+// 	
+// 	Matrix Dmatrix(5,5,0.0);
+// 	Matrix Lmatrix(5,5,0.0);
+// 	Vector p(5,0.0);
+// 	
+// 	double beta = 2.4;
+// 	double d_new = 0;
+// 	double d_old = 0;
+// 	double l_new = 0;
+// 	double p_new = 0;
+// 	double p_old = 0;
+// 	
+// 	for (uint iter = 0; iter < Tmatrix.rows(); iter++)
+// 	{
+// 	  
+// 	      if ( iter == 0 ) {
+// 		
+// 		d_new = Tmatrix(iter,iter);
+// 		l_new = 1;
+// 		p_new = beta/d_new;
+// 		
+// 	      } else {
+// 		
+// 		l_new = Tmatrix(iter,iter-1)/sqrt(d_old);
+// 		d_new = Tmatrix(iter,iter)-(l_new*l_new);
+// 		
+// 		l_new/=sqrt(d_old);
+// 		Lmatrix(iter,iter-1)=l_new;
+// 		
+// 		p_new = -p_old*l_new*d_old/d_new;
+// 
+// 	      }
+// 	      
+// 	      Dmatrix(iter,iter)=d_new;
+// 	      Lmatrix(iter,iter)=1;
+// 	      p(iter)=p_new;
+// 	      
+// 	      d_old = d_new;
+// 	      p_old = p_new;
+// 	}
+// 	
+// 	fprintf(logfile, "Dmatrix:\n");
+// 	for (uint i = 0; i < Dmatrix.rows(); i++)
+// 	{
+// 		for (uint j = 0; j < Dmatrix.cols(); j++)
+// 		{
+// 			fprintf(logfile, "%f  ",Dmatrix(i,j));
+// 		}
+// 		fprintf(logfile, "\n");
+// 	}
+// 	
+// 	fprintf(logfile, "Lmatrix:\n");
+// 	for (uint i = 0; i < Lmatrix.rows(); i++)
+// 	{
+// 		for (uint j = 0; j < Lmatrix.cols(); j++)
+// 		{
+// 			fprintf(logfile, "%f  ",Lmatrix(i,j));
+// 		}
+// 		fprintf(logfile, "\n");
+// 	}
+// 	
+// 	Matrix LD(5,5,0.0);
+// 	Matrix LDL(5,5,0.0);
+// 	LD.multiply(Lmatrix,Dmatrix);
+// 	LDL.multiply(LD,Lmatrix.transpose());
+// 	
+// 	fprintf(logfile, "LDL:\n");
+// 	for (uint i = 0; i < LDL.rows(); i++)
+// 	{
+// 		for (uint j = 0; j < LDL.cols(); j++)
+// 		{
+// 			fprintf(logfile, "%f  ",LDL(i,j));
+// 		}
+// 		fprintf(logfile, "\n");
+// 	}
+// 	
+// 	Vector result;
+// 	result.multiply(LD,p);
+// 	
+// 	fprintf(logfile, "result:\n");
+// 	for (uint i = 0; i < result.size(); i++)
+// 	{
+// 		fprintf(logfile, "%f  ",result(i));
+// 	}	
+// 	
+// 	
+// 	fclose(logfile);
+// 	
+// 	return 0;
+// }
+

+ 612 - 0
core/algebra/progs/testILSSymmLqLanczos.cpp

@@ -0,0 +1,612 @@
+/** 
+* @file testILSSymmLqLanczos.cpp
+* @author Paul Bodesheim
+* @date  23/01/2012
+* @brief test routine for Iterative Linear Solver: symmetric LQ Method (SYMMLQ) using Lanczos vectors
+*/
+
+#include "core/vector/MatrixT.h"
+#include "core/vector/VectorT.h"
+#include <stdio.h>
+#include <ctime>
+#include "iostream"
+#include "core/basics/Exception.h"
+#include "core/vector/Algorithms.h"
+// #include "core/algebra/ILSConjugateGradients.h"
+#include "core/algebra/GMStandard.h"
+#include "core/algebra/ILSSymmLqLanczos.h"
+
+
+using namespace std;
+using namespace NICE;
+
+int main(int argc, char* argv[])
+{
+  
+	int mySize = 20; // number of equations
+	FILE * logfile;
+	std::string logfilename;
+	
+	if ( argc < 2 )
+	  logfilename = "/home/bodesheim/testILS-SymmLq-Lanczos.log";
+	else
+	  logfilename = argv[1];
+	
+	logfile = fopen(logfilename.c_str(), "w");
+	
+	// generate matrix A
+	Matrix A(mySize,mySize,0.0);
+	fprintf(logfile, "A:\n");
+	for (uint i = 0; i < A.rows(); i++)
+	{
+		for (uint j = 0; j < A.cols(); j++)
+		{
+			if ( j == i ) A(i,j) = (i+1)+(j+1);
+			else {
+			  
+			    A(i,j) = sqrt((i+1)*(j+1));
+			}
+
+			fprintf(logfile, "%f  ",A(i,j));
+		}
+		fprintf(logfile, "\n");
+	}
+	
+	// generate vector b (RHS of LS)
+	Vector b(mySize,0.0);
+	fprintf(logfile, "b:\n");
+	for (uint i = 0; i < b.size(); i++)
+	{	
+	    b(i) = (i+1)*sqrt(i+1);
+	    fprintf(logfile, "%f  ",b(i));
+	}
+	fprintf(logfile, "\n");
+	
+	// solve Ax = b
+	Vector x(mySize,0.0);
+	ILSSymmLqLanczos ils(true,mySize);
+	
+	//tic
+	time_t  start = clock();
+	ils.solveLin(GMStandard(A),b,x);
+	//toc
+	float duration = (float) (clock() - start);
+	std::cerr << "Time for solveLin: " << duration/CLOCKS_PER_SEC << std::endl;	
+
+	fprintf(logfile, "x:\n");
+	for (uint i = 0; i < x.size(); i++)
+	{	
+	    fprintf(logfile, "%f  ",x(i));
+	}
+	fprintf(logfile, "\n");
+	
+	// check result
+	Vector Ax(mySize,0.0);
+	Ax = A*x;
+	fprintf(logfile, "A*x:\n");
+	for (uint i = 0; i < Ax.size(); i++)
+	{	
+	    fprintf(logfile, "%f  ",Ax(i));
+	}
+	fprintf(logfile, "\n");	
+	
+	fclose(logfile);
+	
+	return 0;
+}
+
+// Algorithm without using class ILSConjugateGradientsLanczos works for 10x10 matrix A
+
+
+// int main(int argc, char* argv[])
+// {
+//   
+//   int mySize = 10; // number of equations
+//   FILE * logfile;
+//   std::string logfilename;
+//   
+//   if ( argc < 2 )
+//     logfilename = "/home/bodesheim/testILS-SymmLq-Lanczos.log";
+//   else
+//     logfilename = argv[1];
+//   
+//   logfile = fopen(logfilename.c_str(), "w");
+//   
+//   // generate matrix A
+//   Matrix A(mySize,mySize,0.0);
+//   fprintf(logfile, "A:\n");
+//   for (uint i = 0; i < A.rows(); i++)
+//   {
+//     for (uint j = 0; j < A.cols(); j++)
+//     {
+//       if ( j == i ) A(i,j) = (i+1)+(j+1);
+//       else {
+//         
+//           A(i,j) = sqrt((i+1)*(j+1));
+//       }
+// 
+//       fprintf(logfile, "%f  ",A(i,j));
+//     }
+//     fprintf(logfile, "\n");
+//   }
+//   
+//   // generate vector b (RHS of LS)
+//   Vector b(mySize,0.0);
+//   fprintf(logfile, "b:\n");
+//   for (uint i = 0; i < b.size(); i++)
+//   { 
+//       b(i) = (i+1)*sqrt(i+1);
+//       fprintf(logfile, "%f  ",b(i));
+//   }
+//   fprintf(logfile, "\n");
+//   
+//   // solve Ax = b
+//   Vector x(mySize,0.0);
+//   ILSSymmLqLanczos ils(true,mySize);
+//   
+//   //tic
+//   time_t  start = clock();
+// //  ils.solveLin(GMStandard(A),b,x);
+//   
+//               uint maxIterations = (uint) mySize;
+//               double minDelta = 1e-7;
+//               bool verbose = true;
+//               GMStandard gm(A);
+//   
+//               Matrix T(mySize,mySize,0.0);
+//               Matrix L(mySize,mySize,0.0);
+//               Matrix Q(mySize,mySize,0.0);
+//               Matrix Q_tmp(mySize,mySize,0.0);
+//               
+//               for (int kk = 0; kk < mySize; kk++)
+//                 Q(kk,kk) = 1.0;
+//   
+//               if ( b.size() != gm.rows() ) {
+//                 fthrow(Exception, "Size of vector b (" << b.size() << ") mismatches with the size of the given GenericMatrix (" << gm.rows() << ").");
+//               }
+// 
+//               if ( x.size() != gm.cols() )
+//               {
+//                 x.resize(gm.cols());
+//                 x.set(0.0); // bad initial solution, but whatever
+//               }
+// 
+//             //   if ( verbose ) cerr << "initial solution: " << x << endl;
+// 
+//               // SYMMLQ-Method based on Lanczos vectors: implementation based on the following:
+//               //
+//               // C.C. Paige and M.A. Saunders: "Solution of sparse indefinite systems of linear equations". SIAM Journal on Numerical Analysis, p. 617--629, vol. 12, no. 4, 1975
+//               // 
+//               // http://www.netlib.org/templates/templates.pdf
+//               //
+//               
+//               // declare some helpers
+//               double gamma = 0;
+//               double gamma_bar = 0;
+//               double alpha = 0; // alpha_j = v_j^T * A * v_j for new Lanczos vector v_j
+//               double beta = b.normL2(); // beta_1 = norm(b), in general beta_j = norm(v_j) for new Lanczos vector v_j
+//               double beta_next = 0; // beta_{j+1}
+//               double c_new = 0;
+//               double c_old = -1;
+//               double s_new = 0;
+//               double s_old = 0;
+//               double z_new = 0;
+//               double z_old = 0;
+//               double z_older = 0;
+//               double delta_new = 0;
+//               double epsilon_new = 0;
+//               double epsilon_next = 0;
+// 
+//               // init some helping vectors
+//               Vector Av(b.size(),0.0); // Av = A * v_j
+//               Vector Ac(b.size(),0.0); // Ac = A * c_j
+//             //   Vector r(b.size(),0.0); // current residual
+//               Vector *v_new = new Vector(b.size(),0.0); // new Lanczos vector v_j
+//               Vector *v_old = 0; // Lanczos vector of the iteration before: v_{j-1}
+//               Vector *v_next = new Vector(b.size(),0.0); // Lanczos vector of the next iteration: v_{j+1}
+//               Vector *w_new = new Vector(b.size(),0.0); 
+//               Vector *w_bar = new Vector(b.size(),0.0); 
+//               Vector x_L (b.size(),0.0); 
+//               Vector x_C (b.size(),0.0); 
+//               
+//               // first iteration + initialization, where b will be used as the first Lanczos vector
+//               *v_new = (1/beta)*b; // init v_1, v_1 = b / norm(b)
+//               gm.multiply(Av,*v_new); // Av = A * v_1
+//               alpha = v_new->scalarProduct(Av); // alpha_1 = v_1^T * A * v_1  
+//               gamma_bar = alpha; // (gamma_bar_1 is equal to alpha_1 in ILSConjugateGradientsLanczos)
+//               *v_next = Av - (alpha*(*v_new));
+//               beta_next = v_next->normL2();
+//               v_next->normalizeL2();
+//               
+//               gamma = sqrt( (gamma_bar*gamma_bar) + (beta_next*beta_next) );
+//               c_new = gamma_bar/gamma;
+//               s_new = beta_next/gamma;
+//               
+//               z_new = beta/gamma;
+//               
+//               *w_bar = *v_new;
+//               
+//               *w_new = c_new*(*w_bar) + s_new*(*v_next);
+//               *w_bar = s_new*(*w_bar) - c_new*(*v_next);
+//               
+//               x_L = z_new*(*w_new); // first approximation of x
+//               
+//               double delta = fabs(z_new) * w_new->normL2();
+//               if ( verbose ) {
+//                 cerr << "ILSSymmLqLanczos: iteration 1 / " << maxIterations << endl;
+//                 if ( x.size() <= 20 )
+//                   cerr << "ILSSymmLqLanczos: current solution x_L: " << x_L << endl;
+//                 cerr << "ILSSymmLqLanczos: delta = " << delta << endl;
+//             //     cerr << "ILSSymmLqLanczos: residual = " << r.scalarProduct(r) << endl;
+//               }
+//               
+//               T(0,0) = alpha;
+//               L(0,0) = gamma;
+//               
+//               // start with second iteration
+//               uint j = 2;
+//               while (j <= maxIterations )
+//               {
+//               
+//                 // prepare next iteration
+//                 if ( v_old == 0 ) v_old = v_new;
+//                 else {
+//                   
+//                   delete v_old;
+//                   v_old = v_new;
+//                 }
+//                 v_new = v_next;
+//                 v_next = new Vector(b.size(),0.0);
+//                 beta = beta_next;
+//                 z_older = z_old;
+//                 z_old = z_new;
+//                 s_old = s_new;
+//                 epsilon_new = epsilon_next;
+//                 
+//                 gm.multiply(Av,*v_new);
+//                 alpha = v_new->scalarProduct(Av);
+//                 *v_next = Av - (alpha*(*v_new)) - (beta*(*v_old));
+//                 beta_next = v_next->normL2();
+//                 v_next->normalizeL2();
+//                 
+//                 gamma_bar = -c_old*s_new*beta - c_new*alpha;
+//                 delta_new = -c_old*c_new*beta + s_new*alpha;
+// /*                epsilon_new = s_old*beta;*/
+//                 c_old = c_new;
+//                 
+//                 gamma = sqrt( (gamma_bar*gamma_bar) + (beta_next*beta_next) );
+//                 c_new = gamma_bar/gamma;
+//                 s_new = beta_next/gamma;  
+//                 
+//                 z_new = - (delta_new*z_old + epsilon_new*z_older)/gamma;
+//                 epsilon_next = s_old*beta_next;
+// 
+//                 // NOTE this update step is necessary before computing the new w_bar !!
+//                 x_C = x_L + (z_new/c_new)*(*w_bar); // update x
+// 
+//                 *w_new = c_new*(*w_bar) + s_new*(*v_next);
+//                 *w_bar = s_new*(*w_bar) - c_new*(*v_next);
+//               
+//                 x_L += z_new*(*w_new); // update x
+//                 
+//                 Vector tmp;
+//                 gm.multiply(tmp,x_C);
+//                 Vector res ( b - tmp );
+//                 double res_x_C = res.scalarProduct(res);
+//                 
+//                 gm.multiply(tmp,x_L);
+//                 res = b - tmp;
+//                 double res_x_L = res.scalarProduct(res);
+//                 
+//                 if ( res_x_L < res_x_C )
+//                 {
+//                   x = x_L;
+//                   if ( verbose )
+//                     cerr << "ILSSymmLqLanczos: x_L used with residual " << res_x_L << " < " << res_x_C << endl;
+//                   
+//                 } else 
+//                 {
+//                   
+//                   x = x_C;
+//                   if ( verbose )
+//                     cerr << "ILSSymmLqLanczos: x_C used with residual " << res_x_C << " < " << res_x_L << endl;    
+//                   
+//                 }    
+//                 
+//                 
+//                 if ( verbose ) {
+//                   cerr << "ILSSymmLqLanczos: iteration " << j << " / " << maxIterations << endl;
+//                   if ( x.size() <= 20 )
+//                   {
+//                     cerr << "ILSSymmLqLanczos: current solution x_L: " << x_L << endl;
+//                     cerr << "ILSSymmLqLanczos: current solution x_C: " << x_C << endl;
+//                   }
+//                 }
+//                 
+//                 // store optimal x that produces smallest residual
+//             //     if (res < res_min) {
+//             //       
+//             //       x_opt = x;
+//             //       res_min = res;
+//             //     }
+// 
+//                 // check convergence
+//                 delta = fabs(z_new) * w_new->normL2();
+//                 if ( verbose ) {
+//                   cerr << "ILSSymmLqLanczos: delta = " << delta << endl;
+//             //       cerr << "ILSSymmLqLanczos: residual = " << r.scalarProduct(r) << endl;
+//                 }  
+// 
+//                 if ( delta < minDelta ) {
+//                   if ( verbose )
+//                     cerr << "ILSSymmLqLanczos: small delta" << endl;
+//                   break;
+//                 } 
+//                 
+//                 T(j-1,j-1) = alpha;
+//                 T(j-2,j-1) = beta;
+//                 T(j-1,j-2) = beta;
+//                 
+//                 L(j-1,j-1) = gamma;
+//                 L(j-1,j-2) = delta_new;
+//                 if (j >= 3) 
+//                   L(j-1,j-3) = epsilon_new;
+// 
+//                 Q_tmp = 0.0;
+//                 for (uint kk = 0; kk < mySize; kk++)
+//                 {
+//                   Q_tmp(kk,kk) = 1.0;                
+//                   if (kk == j-2)
+//                   {
+//                     Q_tmp(kk,kk) = c_old;
+//              
+//                   } else if (kk == j-1)
+//                   {
+//                     Q_tmp(kk,kk) = -c_old;
+//                     Q_tmp(kk-1,kk) = s_old;
+//                     Q_tmp(kk,kk-1) = s_old;
+//                   } 
+//                   
+//                 }
+//                 
+//                 Matrix tmpQ(Q);
+//                 Q.multiply(tmpQ,Q_tmp);
+//                 
+//                 tmpQ.multiply(T,Q);
+//                 
+//                 fprintf(logfile, "\n iteration %i\n",j);
+//                 fprintf(logfile, "T:\n");
+//                 for (uint i = 0; i < T.rows(); i++)
+//                 {
+//                   for (uint j = 0; j < T.cols(); j++)
+//                   {
+//                     fprintf(logfile, "%f  ",T(i,j));
+//                   }
+//                   fprintf(logfile, "\n");
+//                 }
+//                 
+//                 fprintf(logfile, "Q:\n");
+//                 for (uint i = 0; i < Q.rows(); i++)
+//                 {
+//                   for (uint j = 0; j < Q.cols(); j++)
+//                   {
+//                     fprintf(logfile, "%f  ",Q(i,j));
+//                   }
+//                   fprintf(logfile, "\n");
+//                 } 
+//                 
+//                 fprintf(logfile, "Q_tmp:\n");
+//                 for (uint i = 0; i < Q_tmp.rows(); i++)
+//                 {
+//                   for (uint j = 0; j < Q_tmp.cols(); j++)
+//                   {
+//                     fprintf(logfile, "%f  ",Q_tmp(i,j));
+//                   }
+//                   fprintf(logfile, "\n");
+//                 }  
+//                 
+//                 fprintf(logfile, "L:\n");
+//                 for (uint i = 0; i < L.rows(); i++)
+//                 {
+//                   for (uint j = 0; j < L.cols(); j++)
+//                   {
+//                     fprintf(logfile, "%f  ",L(i,j));
+//                   }
+//                   fprintf(logfile, "\n");
+//                 }
+//                 
+//                 fprintf(logfile, "T*Q:\n");
+//                 for (uint i = 0; i < tmpQ.rows(); i++)
+//                 {
+//                   for (uint j = 0; j < tmpQ.cols(); j++)
+//                   {
+//                     fprintf(logfile, "%f  ",tmpQ(i,j));
+//                   }
+//                   fprintf(logfile, "\n");
+//                 }                
+//                 fprintf(logfile, "gamma_bar: %f\n",gamma_bar);
+//                 
+//                 j++;
+//               }
+//               
+//               Vector tmp;
+//               gm.multiply(tmp,x_C);
+//               Vector res ( b - tmp );
+//               double res_x_C = res.scalarProduct(res);
+//               
+//               gm.multiply(tmp,x_L);
+//               res = b - tmp;
+//               double res_x_L = res.scalarProduct(res);
+//               
+//               if ( res_x_L < res_x_C )
+//               {
+//                 x = x_L;
+//                 if ( verbose )
+//                   cerr << "ILSSymmLqLanczos: x_L used with residual " << res_x_L << " < " << res_x_C << endl;
+//                 
+//               } else 
+//               {
+//                 
+//                 x = x_C;
+//                 if ( verbose )
+//                   cerr << "ILSSymmLqLanczos: x_C used with residual " << res_x_C << " < " << res_x_L << endl;    
+//                 
+//               }
+//               
+//               delete v_new;
+//               delete v_old;
+//               delete v_next;
+//               delete w_new;
+//               delete w_bar;
+//   
+//   
+//   //toc
+//   float duration = (float) (clock() - start);
+//   std::cerr << "Time for solveLin: " << duration/CLOCKS_PER_SEC << std::endl; 
+// 
+//   fprintf(logfile, "x:\n");
+//   for (uint i = 0; i < x.size(); i++)
+//   { 
+//       fprintf(logfile, "%f  ",x(i));
+//   }
+//   fprintf(logfile, "\n");
+//   
+//   // check result
+//   Vector Ax(mySize,0.0);
+//   Ax = A*x;
+//   fprintf(logfile, "A*x:\n");
+//   for (uint i = 0; i < Ax.size(); i++)
+//   { 
+//       fprintf(logfile, "%f  ",Ax(i));
+//   }
+//   fprintf(logfile, "\n"); 
+//   
+//   fclose(logfile);
+//   
+//   return 0;
+// }
+
+
+// CHOLESKY FACTORIZATION OF TRIDIAGONAL MATRIX T WORKS:
+
+// int main(int argc, char* argv[])
+// {
+//   
+// 	FILE * logfile;
+// 	std::string logfilename;
+// 	
+// 	if ( argc < 2 )
+// 	  logfilename = "/home/bodesheim/testILS-CGM-Lanczos.log";
+// 	else
+// 	  logfilename = argv[1];
+// 	
+// 	logfile = fopen(logfilename.c_str(), "w");
+// 	
+// 	Matrix Tmatrix(5,5,0.0);
+// 	fprintf(logfile, "Tmatrix:\n");
+// 	for (uint i = 0; i < Tmatrix.rows(); i++)
+// 	{
+// 		for (uint j = 0; j < Tmatrix.cols(); j++)
+// 		{
+// 			if ( j == i ) Tmatrix(i,j) = (i+1)+(j+1);
+// 			else if ( j == (i+1) ) {
+// 			  
+// 			    Tmatrix(i,j) = sqrt((i+1)*(j+1));
+// 			    Tmatrix(j,i) = Tmatrix(i,j);
+// 			}
+// 
+// 			fprintf(logfile, "%f  ",Tmatrix(i,j));
+// 		}
+// 		fprintf(logfile, "\n");
+// 	}
+// 	
+// 	Matrix Dmatrix(5,5,0.0);
+// 	Matrix Lmatrix(5,5,0.0);
+// 	Vector p(5,0.0);
+// 	
+// 	double beta = 2.4;
+// 	double d_new = 0;
+// 	double d_old = 0;
+// 	double l_new = 0;
+// 	double p_new = 0;
+// 	double p_old = 0;
+// 	
+// 	for (uint iter = 0; iter < Tmatrix.rows(); iter++)
+// 	{
+// 	  
+// 	      if ( iter == 0 ) {
+// 		
+// 		d_new = Tmatrix(iter,iter);
+// 		l_new = 1;
+// 		p_new = beta/d_new;
+// 		
+// 	      } else {
+// 		
+// 		l_new = Tmatrix(iter,iter-1)/sqrt(d_old);
+// 		d_new = Tmatrix(iter,iter)-(l_new*l_new);
+// 		
+// 		l_new/=sqrt(d_old);
+// 		Lmatrix(iter,iter-1)=l_new;
+// 		
+// 		p_new = -p_old*l_new*d_old/d_new;
+// 
+// 	      }
+// 	      
+// 	      Dmatrix(iter,iter)=d_new;
+// 	      Lmatrix(iter,iter)=1;
+// 	      p(iter)=p_new;
+// 	      
+// 	      d_old = d_new;
+// 	      p_old = p_new;
+// 	}
+// 	
+// 	fprintf(logfile, "Dmatrix:\n");
+// 	for (uint i = 0; i < Dmatrix.rows(); i++)
+// 	{
+// 		for (uint j = 0; j < Dmatrix.cols(); j++)
+// 		{
+// 			fprintf(logfile, "%f  ",Dmatrix(i,j));
+// 		}
+// 		fprintf(logfile, "\n");
+// 	}
+// 	
+// 	fprintf(logfile, "Lmatrix:\n");
+// 	for (uint i = 0; i < Lmatrix.rows(); i++)
+// 	{
+// 		for (uint j = 0; j < Lmatrix.cols(); j++)
+// 		{
+// 			fprintf(logfile, "%f  ",Lmatrix(i,j));
+// 		}
+// 		fprintf(logfile, "\n");
+// 	}
+// 	
+// 	Matrix LD(5,5,0.0);
+// 	Matrix LDL(5,5,0.0);
+// 	LD.multiply(Lmatrix,Dmatrix);
+// 	LDL.multiply(LD,Lmatrix.transpose());
+// 	
+// 	fprintf(logfile, "LDL:\n");
+// 	for (uint i = 0; i < LDL.rows(); i++)
+// 	{
+// 		for (uint j = 0; j < LDL.cols(); j++)
+// 		{
+// 			fprintf(logfile, "%f  ",LDL(i,j));
+// 		}
+// 		fprintf(logfile, "\n");
+// 	}
+// 	
+// 	Vector result;
+// 	result.multiply(LD,p);
+// 	
+// 	fprintf(logfile, "result:\n");
+// 	for (uint i = 0; i < result.size(); i++)
+// 	{
+// 		fprintf(logfile, "%f  ",result(i));
+// 	}	
+// 	
+// 	
+// 	fclose(logfile);
+// 	
+// 	return 0;
+// }
+

+ 93 - 0
core/algebra/progs/testILSmethods.cpp

@@ -0,0 +1,93 @@
+/** 
+* @file testILSmethods.cpp
+* @author Paul Bodesheim
+* @date  23/01/2012
+* @brief test routine for Iterative Linear Solvers
+*/
+
+#include "core/vector/MatrixT.h"
+#include "core/vector/VectorT.h"
+#include <stdio.h>
+#include <ctime>
+#include "core/basics/Exception.h"
+#include "core/vector/Algorithms.h"
+#include "core/algebra/GMStandard.h"
+#include "core/algebra/ILSConjugateGradients.h"
+#include "core/algebra/ILSConjugateGradientsLanczos.h"
+#include "core/algebra/ILSSymmLqLanczos.h"
+#include "core/algebra/ILSMinResLanczos.h"
+
+using namespace std;
+using namespace NICE;
+
+int main(int argc, char* argv[])
+{
+  
+	int mySize = 10000; // number of equations
+	
+	srand ( time(NULL) );
+  
+	// generate matrix A
+	Matrix A(mySize,mySize,0.0);
+	for (uint i = 0; i < A.rows(); i++)
+	{
+		for (uint j = i; j < A.cols(); j++)
+		{
+			if ( j == i ) A(i,j) = (i+1)+(j+1);
+			else {
+			  
+          double r = ( (double) rand() ) / (RAND_MAX);
+			    A(i,j) = r;
+          A(j,i) = r;
+			}
+
+		}
+	}
+	
+	// generate vector b (RHS of LS)
+	Vector b(mySize,0.0);
+	for (uint i = 0; i < b.size(); i++)
+	{	
+	    b(i) = ( (double) rand() ) / (RAND_MAX);
+	}
+	
+	// solve Ax = b with cgm method
+	ILSConjugateGradients cgm(false,mySize);
+  ILSConjugateGradientsLanczos cgm_L(false,mySize);
+  ILSSymmLqLanczos symmlq(false,mySize);
+  ILSMinResLanczos minres(false,mySize);
+	
+  Vector x(mySize,0.0);
+	//tic
+	time_t  start = clock();
+	cgm.solveLin(GMStandard(A),b,x);
+	//toc
+	float duration = (float) (clock() - start);
+	std::cerr << "Time for solveLin (ILSConjugateGradients): " << duration/CLOCKS_PER_SEC << std::endl;	
+
+  x.set(0.0);
+  //tic
+  start = clock();
+  cgm_L.solveLin(GMStandard(A),b,x);
+  //toc
+  duration = (float) (clock() - start);
+  std::cerr << "Time for solveLin (ILSConjugateGradientsLanczos): " << duration/CLOCKS_PER_SEC << std::endl;   
+
+  x.set(0.0);
+  //tic
+  start = clock();
+  symmlq.solveLin(GMStandard(A),b,x);
+  //toc
+  duration = (float) (clock() - start);
+  std::cerr << "Time for solveLin (ILSSymmLqLanczos): " << duration/CLOCKS_PER_SEC << std::endl; 
+
+  x.set(0.0);
+  //tic
+  start = clock();
+  minres.solveLin(GMStandard(A),b,x);
+  //toc
+  duration = (float) (clock() - start);
+  std::cerr << "Time for solveLin (ILSMinResLanczos): " << duration/CLOCKS_PER_SEC << std::endl;   
+  
+	return 0;
+}

+ 89 - 0
core/algebra/tests/Makefile.inc

@@ -0,0 +1,89 @@
+# BINARY-DIRECTORY-MAKEFILE
+# conventions:
+# - there are no subdirectories, they are ignored!
+# - all ".C", ".cpp" and ".c" files in the current directory are considered
+#   independent binaries, and linked as such.
+# - the binaries depend on the library of the parent directory
+# - the binary names are created with $(BINNAME), i.e. it will be more or less
+#   the name of the .o file
+# - all binaries will be added to the default build list ALL_BINARIES
+
+# --------------------------------
+# - remember the last subdirectory
+#
+# set the variable $(SUBDIR) correctly to the current subdirectory. this
+# variable can be used throughout the current makefile.inc. The many 
+# SUBDIR_before, _add, and everything are only required so that we can recover
+# the previous content of SUBDIR before exitting the makefile.inc
+
+SUBDIR_add:=$(dir $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)))
+SUBDIR_before:=$(SUBDIR)
+SUBDIR:=$(strip $(SUBDIR_add))
+SUBDIR_before_$(SUBDIR):=$(SUBDIR_before)
+
+# ------------------------
+# - include subdirectories
+#
+# note the variables $(SUBDIRS_OF_$(SUBDIR)) are required later on to recover
+# the dependencies automatically. if you handle dependencies on your own, you
+# can also dump the $(SUBDIRS_OF_$(SUBDIR)) variable, and include the
+# makefile.inc of the subdirectories on your own...
+
+#SUBDIRS_OF_$(SUBDIR):=$(patsubst %/Makefile.inc,%,$(wildcard $(SUBDIR)*/Makefile.inc))
+#include $(SUBDIRS_OF_$(SUBDIR):%=%/Makefile.inc)
+
+# ----------------------------
+# - include local dependencies
+#
+# include the libdepend.inc file, which gives additional dependencies for the
+# libraries and binaries. additionally, an automatic dependency from the library
+# of the parent directory is added (commented out in the code below).
+
+-include $(SUBDIR)libdepend.inc
+
+PARENTDIR:=$(patsubst %/,%,$(dir $(patsubst %/,%,$(SUBDIR))))
+$(call PKG_DEPEND_INT,$(PARENTDIR))
+$(call PKG_DEPEND_EXT,CPPUNIT)
+
+# ---------------------------
+# - objects in this directory
+#
+# the use of the variable $(OBJS) is not mandatory. it is mandatory however
+# to update $(ALL_OBJS) in a way that it contains the path and name of
+# all objects. otherwise we can not include the appropriate .d files.
+
+OBJS:=$(patsubst %.cpp,$(OBJDIR)%.o,$(notdir $(wildcard $(SUBDIR)*.cpp))) \
+      $(patsubst %.C,$(OBJDIR)%.o,$(notdir $(wildcard $(SUBDIR)*.C))) \
+      $(shell grep -ls Q_OBJECT $(SUBDIR)*.h | sed -e's@^@/@;s@.*/@$(OBJDIR)moc_@;s@\.h$$@.o@') \
+      $(patsubst %.c,$(OBJDIR)%.o,$(notdir $(wildcard $(SUBDIR)*.c)))
+ALL_OBJS += $(OBJS)
+
+# ----------------------------
+# - binaries in this directory
+#
+# output of binaries in this directory. none of the variables has to be used.
+# but everything you add to $(ALL_LIBRARIES) and $(ALL_BINARIES) will be
+# compiled with `make all`. be sure again to add the files with full path.
+
+CHECKS:=$(BINDIR)$(call LIBNAME,$(SUBDIR))
+ALL_CHECKS+=$(CHECKS)
+
+# ---------------------
+# - binary dependencies
+#
+# there is no way of determining the binary dependencies automatically, so we
+# follow conventions. each binary depends on the corresponding .o file and
+# on the libraries specified by the INTLIBS/EXTLIBS. these dependencies can be
+# specified manually or they are automatically stored in a .bd file.
+
+$(foreach head,$(wildcard $(SUBDIR)*.h),$(eval $(shell grep -q Q_OBJECT $(head) && echo $(head) | sed -e's@^@/@;s@.*/\(.*\)\.h$$@$(BINDIR)\1:$(OBJDIR)moc_\1.o@')))
+$(eval $(foreach c,$(CHECKS),$(c):$(BUILDDIR)$(CPPUNIT_MAIN_OBJ) $(OBJS) $(call PRINT_INTLIB_DEPS,$(c),.a)))
+
+# -------------------
+# - subdir management
+#
+# as the last step, always add this line to correctly recover the subdirectory
+# of the makefile including this one!
+
+SUBDIR:=$(SUBDIR_before_$(SUBDIR))
+

+ 85 - 0
core/algebra/tests/TestDiagApprox.cpp

@@ -0,0 +1,85 @@
+/**
+ * @file TestDiagApprox.cpp
+ * @brief TestDiagApprox
+ * @author Michael Koch
+ * @date Di Aug 4 2009
+ */
+
+#include "TestDiagApprox.h"
+#include <string>
+
+#include "core/basics/cppunitex.h"
+#include "core/basics/numerictools.h"
+#include "core/vector/Distance.h"
+
+#include "core/algebra/DiagonalMatrixApprox.h"
+
+using namespace std;
+using namespace NICE;
+
+CPPUNIT_TEST_SUITE_REGISTRATION(TestDiagApprox);
+
+void TestDiagApprox::setUp()
+{
+}
+
+void TestDiagApprox::tearDown()
+{
+}
+
+void TestDiagApprox::TestDiagApproxComputation()
+{
+    // size of the matrix
+    uint rows = 2;
+    uint cols = rows;
+  
+    // number of eigenvalues used
+    uint maxiterations =  20;
+   
+   // use a fixed seed, its a test case
+    srand48(0);
+ 
+    DiagonalMatrixApprox diagApprox ( true /*verbose*/ );
+    
+    Vector D ( rows, 0.0 );
+
+    Matrix Tdiag ( rows, rows, 0.0 );
+   
+    for (uint j = 0 ; j < rows ; j++)
+    {
+      Tdiag(j, j) = drand48();
+    }
+ 
+    diagApprox.approx ( Tdiag, D );
+    cerr << Tdiag << endl;
+    cerr << D << endl;
+
+    double error = 0.0;
+    for ( uint i = 0 ; i < rows; i++ )
+      error += fabs(Tdiag(i,i) - D[i]);
+
+    CPPUNIT_ASSERT_DOUBLES_EQUAL_NOT_NAN( 0.0, error, 0.1 );
+
+    
+    D.set(0.0); 
+    
+    NICE::Matrix T(rows, cols, 0.0);
+
+   
+    // generate random symmetric matrix
+    for (uint i = 0 ; i < rows ; i++)
+        for (uint j = i ; j < cols ; j++)
+        {
+            T(i, j) = drand48();
+            T(j, i) = T(i, j);
+        }
+
+    // create a positive definite matrix
+    T = T*T;
+    
+    diagApprox.approx ( T, D );
+    cerr << T << endl;
+    cerr << D << endl;
+
+
+}

+ 38 - 0
core/algebra/tests/TestDiagApprox.h

@@ -0,0 +1,38 @@
+/** 
+ * @file TestDiagApprox.h
+ * @brief TestDiagApprox
+ * @author Michael Koch
+ * @date Di Aug 4 2009
+ */
+ 
+
+#ifndef OBJREC_TestDiagApprox_H
+#define OBJREC_TestDiagApprox_H
+
+
+#include <cppunit/extensions/HelperMacros.h>
+
+/**
+ * CppUnit-Testcase. 
+ * Tests for EigenValue Operations
+ */
+class TestDiagApprox : public CppUnit::TestFixture
+{
+     CPPUNIT_TEST_SUITE( TestDiagApprox );
+
+    
+     CPPUNIT_TEST( TestDiagApproxComputation );
+
+     CPPUNIT_TEST_SUITE_END();
+
+     private:
+
+     public:
+          void setUp();
+          void tearDown();
+          void TestDiagApproxComputation();
+       
+};
+
+#endif // _TestDiagApprox_H_
+

+ 128 - 0
core/algebra/tests/TestEigenValue.cpp

@@ -0,0 +1,128 @@
+/**
+ * @file TestEigenValue.cpp
+ * @brief TestEigenValue
+ * @author Michael Koch
+ * @date Di Aug 4 2009
+ */
+
+#include "TestEigenValue.h"
+#include <string>
+
+#include "core/basics/cppunitex.h"
+#include "core/basics/numerictools.h"
+#include "core/vector/Distance.h"
+
+#include "core/algebra/EigValues.h"
+#include "core/algebra/EigValuesTRLAN.h"
+#include "core/algebra/GenericMatrix.h"
+#include "core/algebra/GMStandard.h"
+
+using namespace std;
+using namespace NICE;
+
+CPPUNIT_TEST_SUITE_REGISTRATION(TestEigenValue);
+
+void TestEigenValue::setUp()
+{
+}
+
+void TestEigenValue::tearDown()
+{
+}
+
+void TestEigenValue::TestEigenValueComputation()
+{
+    // size of the matrix
+    uint rows = 100;
+    uint cols = rows;
+  
+    // number of eigenvalues used
+    uint k = 10;
+    uint maxiterations =  200;
+    double mindelta = 1e-8;
+
+    
+    double sparse_prob = 0.3;
+    int trlan_magnitude = 1;
+
+    NICE::Matrix T(rows, cols, 0.0);
+
+    // use a fixed seed, its a test case
+    srand48(0);
+
+    // generate random symmetric matrix
+    for (uint i = 0 ; i < rows ; i++)
+        for (uint j = i ; j < cols ; j++)
+        {
+            if (sparse_prob != 0.0)
+                if (drand48() < sparse_prob)
+                    continue;
+            T(i, j) = drand48();
+            T(j, i) = T(i, j);
+        }
+
+    // create a positive definite matrix
+    T = T*T;
+
+    EigValues *eig;
+    for (int trlan = 0;trlan <= 1;trlan++) //this is creepy but funny
+    {
+        if (trlan) //this is creepy but saves lot of code
+        {
+#ifdef NICE_USELIB_TRLAN
+            eig = new EigValuesTRLAN(trlan_magnitude);
+#else
+            cerr << "EigValuesTRLAN is not checked, because TRLAN was not installed." << endl;
+            break;
+#endif
+        }
+        else
+        {
+            eig = new EVArnoldi(false, maxiterations, mindelta);
+        }
+
+        NICE::Vector eigvalues_dense;
+        NICE::Matrix eigvect_dense;
+        NICE::Vector eigvalues_sparse;
+        NICE::Matrix eigvect_sparse;
+
+        GMStandard Tg(T);
+        eig->getEigenvalues(Tg, eigvalues_dense, eigvect_dense, k);
+
+        GMSparse Ts(T);
+        eig->getEigenvalues(Ts, eigvalues_sparse, eigvect_sparse, k);
+
+        // test property
+        NICE::EuclidianDistance<double> eucliddist;
+        for (uint i = 0 ; i < k ; i++)
+        {
+            NICE::Vector v_dense = eigvect_dense.getColumn(i);
+            double lambda_dense = eigvalues_dense[i];
+            NICE::Vector Tv_dense;
+            Tv_dense.multiply(T, v_dense);
+            NICE::Vector lv_dense = v_dense;
+            lv_dense *= lambda_dense;
+            double err_dense = eucliddist(Tv_dense, lv_dense);
+
+            // check whether the eigenvector definition holds
+            NICE::Vector v_sparse = eigvect_sparse.getColumn(i);
+            double lambda_sparse = eigvalues_sparse[i];
+            NICE::Vector Tv_sparse;
+            Tv_sparse.multiply(T, v_sparse);
+            NICE::Vector lv_sparse = v_sparse;
+            lv_sparse *= lambda_sparse;
+            double err_sparse = eucliddist(Tv_sparse, lv_sparse);
+
+//             cerr << "||Av - lambda v|| (dense) = " << err_dense << endl;
+//             cerr << "||Av - lambda v|| (sparse) = " << err_sparse << endl;
+
+            // use relative errors instead of absolute errors
+            err_sparse /= Tv_sparse.normL2();
+            err_dense /= Tv_dense.normL2();
+
+        
+            CPPUNIT_ASSERT_DOUBLES_EQUAL_NOT_NAN(0.0,err_dense,1e-2);
+            CPPUNIT_ASSERT_DOUBLES_EQUAL_NOT_NAN(0.0,err_sparse,1e-2);
+        }
+    }
+}

+ 38 - 0
core/algebra/tests/TestEigenValue.h

@@ -0,0 +1,38 @@
+/** 
+ * @file TestEigenValue.h
+ * @brief TestEigenValue
+ * @author Michael Koch
+ * @date Di Aug 4 2009
+ */
+ 
+
+#ifndef OBJREC_TestEigenValue_H
+#define OBJREC_TestEigenValue_H
+
+
+#include <cppunit/extensions/HelperMacros.h>
+
+/**
+ * CppUnit-Testcase. 
+ * Tests for EigenValue Operations
+ */
+class TestEigenValue : public CppUnit::TestFixture
+{
+     CPPUNIT_TEST_SUITE( TestEigenValue );
+
+    
+     CPPUNIT_TEST( TestEigenValueComputation );
+
+     CPPUNIT_TEST_SUITE_END();
+
+     private:
+
+     public:
+          void setUp();
+          void tearDown();
+          void TestEigenValueComputation();
+       
+};
+
+#endif // _TestEigenValue_H_
+

+ 78 - 0
core/algebra/tests/TestLUDecomposition.cpp

@@ -0,0 +1,78 @@
+/**
+ * @file TestLUDecomposition.cpp
+ * @brief TestLUDecomposition
+ * @author Alexander Freytag
+ * @date 22-10-2012
+ */
+
+#include <string>
+#include <vector>
+
+#include <core/vector/MatrixT.h>
+#include "core/algebra/LUDecomposition.h"
+
+#include "TestLUDecomposition.h"
+
+using namespace std;
+using namespace NICE;
+
+CPPUNIT_TEST_SUITE_REGISTRATION(TestLUDecomposition);
+
+void TestLUDecomposition::setUp()
+{
+}
+
+void TestLUDecomposition::tearDown()
+{
+}
+
+void TestLUDecomposition::testLUDecomposition()
+{
+    // verbose flag for additional output for each iteration
+    bool verbose (false);
+    
+    NICE::Matrix m (4, 4, 0.0);
+    
+    for (int j = 0; j < 4; j++)
+      for (int i = 0; i < 4; i++)
+        m(i,j) = i*4+(j+1);
+      
+    //ensure the non-singularity :)
+    m.addIdentity(1.0);
+    
+    LUDecomposition luDecomp;
+    
+    NICE::Matrix L;
+    NICE::Matrix U;
+
+    //perform the actual decomposition - with pivotization if needed
+    luDecomp.decompose(m, L, U);
+   
+    
+    NICE::Matrix mult;
+    mult.multiply(L,U);
+    
+    double diff(0.0);
+    
+    for (int j = 0; j < 4; j++)
+      for (int i = 0; i < 4; i++)
+        diff += pow( mult(i,j) - m(i,j) , 2);
+      
+    diff = sqrt(diff);
+
+    if (verbose)
+    {
+      std::cerr << "LUDecomposition test: " << std::endl;    
+      std::cerr << "m: " << m << std::endl;    
+      std::cerr << "L: " << L << std::endl;
+      std::cerr << "U: " << U << std::endl;
+      std::cerr << "LU: " << mult << std::endl;
+      std::cerr << "LUDecomposition test done " << std::endl;
+    }
+
+    double tol(10e-6);    
+    if (verbose)
+      std::cerr << "tol: " << tol << " diff: " << diff << std::endl;   
+    CPPUNIT_ASSERT( diff < tol);
+    
+}

+ 37 - 0
core/algebra/tests/TestLUDecomposition.h

@@ -0,0 +1,37 @@
+/** 
+ * @file TestLUDecomposition.h
+ * @brief TestLUDecomposition 
+ * @author Alexander Freytag
+ * @date 22-10-2012
+ */
+ 
+
+#ifndef NICE_TESTLINEARSOLVE
+#define NICE_TESTLINEARSOLVE
+
+
+#include <cppunit/extensions/HelperMacros.h>
+
+/**
+ * CppUnit-Testcase. 
+ * Tests for LU Decomposition
+ */
+class TestLUDecomposition : public CppUnit::TestFixture
+{
+     CPPUNIT_TEST_SUITE( TestLUDecomposition );
+
+    
+     CPPUNIT_TEST( testLUDecomposition );
+
+     CPPUNIT_TEST_SUITE_END();
+
+     private:
+
+     public:
+          void setUp();
+          void tearDown();
+          void testLUDecomposition();
+       
+};
+
+#endif // NICE_TESTLINEARSOLVE

+ 152 - 0
core/algebra/tests/TestLinearSolve.cpp

@@ -0,0 +1,152 @@
+/**
+ * @file TestLinearSolve.cpp
+ * @brief TestLinearSolve
+ * @author Erik Rodner
+ * @date 21.12.2011
+ */
+
+#include "TestLinearSolve.h"
+#include <string>
+#include <vector>
+
+#include "core/basics/cppunitex.h"
+#include "core/basics/numerictools.h"
+#include "core/vector/Distance.h"
+#include "core/vector/Algorithms.h"
+
+#include "core/algebra/ILSPlainGradient.h"
+#include "core/algebra/ILSConjugateGradients.h"
+#include "core/algebra/ILSConjugateGradientsLanczos.h"
+#include "core/algebra/ILSSymmLqLanczos.h"
+#include "core/algebra/ILSMinResLanczos.h"
+#include "core/algebra/GMStandard.h"
+
+#include "core/algebra/GBCDSolver.h"
+
+using namespace std;
+using namespace NICE;
+
+CPPUNIT_TEST_SUITE_REGISTRATION(TestLinearSolve);
+
+void TestLinearSolve::setUp()
+{
+}
+
+void TestLinearSolve::tearDown()
+{
+}
+
+void TestLinearSolve::TestLinearSolveComputation()
+{
+    // verbose flag for additional output for each iteration
+    bool verbose = false;
+
+    // size of the matrix
+    uint rows = 15;
+    uint cols = rows;
+ 
+    // probability of zero entries
+    double sparse_prob = 0.0;
+
+    NICE::Matrix T(rows, cols, 0.0);
+
+    // use a fixed seed, its a test case
+    srand48(0);
+
+    // generate random symmetric matrix
+    for (uint i = 0 ; i < rows ; i++)
+        for (uint j = i ; j < cols ; j++)
+        {
+            if (sparse_prob != 0.0)
+                if (drand48() < sparse_prob)
+                    continue;
+            T(i, j) = drand48();
+            T(j, i) = T(i, j);
+        }
+    // use positive definite matrices
+    T = T*T;
+
+    T.addIdentity(1.0);
+    NICE::Vector b = Vector::UniformRandom( rows, 0.0, 1.0, 0 ); 
+
+    GMStandard Tg(T);
+    GMSparse Ts(T, 0.0);
+
+    CPPUNIT_ASSERT_EQUAL((int)T.rows(),(int)Ts.rows());
+    CPPUNIT_ASSERT_EQUAL((int)T.cols(),(int)Ts.cols());
+
+    // first of all test the generic matrix interface
+    for ( uint i = 0 ; i < rows ; i++ )
+    {
+      NICE::Vector x ( rows );
+      for ( uint j = 0 ; j < x.size(); j++ )
+        x[j] = drand48();
+      Vector yg;
+      Vector ys;
+      Tg.multiply ( yg, x );
+      Ts.multiply ( ys, x );
+      CPPUNIT_ASSERT_DOUBLES_EQUAL_NOT_NAN(0.0,(yg-ys).normL2(),1e-10);
+    }
+
+    vector< IterativeLinearSolver * > methods;
+    int max_iterations = 100;
+    methods.push_back ( new ILSPlainGradient(verbose, max_iterations*10) );
+    methods.push_back ( new ILSConjugateGradients(verbose, max_iterations) );
+    methods.push_back ( new ILSConjugateGradientsLanczos(verbose, max_iterations) );
+    methods.push_back ( new ILSSymmLqLanczos(verbose, max_iterations) );
+    methods.push_back ( new ILSMinResLanczos(verbose, max_iterations) );
+    // the following method is pretty instable!! and needs to much time
+    //methods.push_back ( new ILSPlainGradient(verbose, max_iterations, false /* minResidual */) );
+    //methods.push_back ( new ILSPlainGradient(verbose, max_iterations, true /* minResidual */) );
+
+    //Vector solstd;
+    //solveLinearEquationQR( T, b, solstd );
+
+    for ( vector< IterativeLinearSolver * >::const_iterator i = methods.begin();
+        i != methods.end(); i++ ) 
+    {
+      IterativeLinearSolver *method = *i;
+      Vector solg (Tg.cols(), 0.0);
+      Vector sols (Ts.cols(), 0.0);
+      
+      if ( verbose )
+        cerr << "solving the sparse system ..." << endl;
+      method->solveLin ( Ts, b, sols );
+      if ( verbose )
+        cerr << "solving the dense system ..." << endl;
+      method->solveLin ( Tg, b, solg );
+
+      Vector bg;
+      Tg.multiply ( bg, solg );
+      Vector bs;
+      Ts.multiply ( bs, sols );
+     
+      // compute residuals
+      if ( verbose ) 
+      {
+        cerr << "solg = " << solg << endl;
+        cerr << "sols = " << sols << endl;
+        cerr << "bg = " << bg << endl;
+        cerr << "bs = " << bs << endl;
+        cerr << "b = " << b << endl;
+      }
+      double err_dense = ( b - bg ).normL2();
+      double err_sparse = ( b - bs ).normL2();
+   
+   
+      CPPUNIT_ASSERT_DOUBLES_EQUAL_NOT_NAN(0.0,err_dense,1e-1);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL_NOT_NAN(0.0,err_sparse,1e-1);
+    }
+    
+    // ---------- check the greedy block coordinate descent method
+    Vector solg (0.0);
+    
+    GBCDSolver gbcd ( 5, 10, verbose, 100 /*maximum iterations*/ );
+    gbcd.solveLin ( Tg, b, solg );
+
+    Vector bg;
+    Tg.multiply ( bg, solg );
+      
+    double err_dense = ( b - bg ).normL2();
+    CPPUNIT_ASSERT_DOUBLES_EQUAL_NOT_NAN(0.0,err_dense,1e-4);
+}

+ 38 - 0
core/algebra/tests/TestLinearSolve.h

@@ -0,0 +1,38 @@
+/** 
+ * @file TestLinearSolve.h
+ * @brief TestLinearSolve
+ * @author Erik Rodner
+ * @date 21.12.2011
+ */
+ 
+
+#ifndef OBJREC_TestLinearSolve_H
+#define OBJREC_TestLinearSolve_H
+
+
+#include <cppunit/extensions/HelperMacros.h>
+
+/**
+ * CppUnit-Testcase. 
+ * Tests for Iterative Linear Solvers
+ */
+class TestLinearSolve : public CppUnit::TestFixture
+{
+     CPPUNIT_TEST_SUITE( TestLinearSolve );
+
+    
+     CPPUNIT_TEST( TestLinearSolveComputation );
+
+     CPPUNIT_TEST_SUITE_END();
+
+     private:
+
+     public:
+          void setUp();
+          void tearDown();
+          void TestLinearSolveComputation();
+       
+};
+
+#endif // _TestLinearSolve_H_
+

+ 17 - 0
core/basics/BFSColor.h

@@ -0,0 +1,17 @@
+/*
+ * NICE-Core - efficient algebra and computer vision methods
+ * See file License for license information.
+ */
+#ifndef MULTICALIB_DEFINITIONS_H
+#define MULTICALIB_DEFINITIONS_H
+
+namespace NICE {
+
+namespace BFS {
+  enum BFSColor {white, gray, black};
+} // namespace
+typedef BFS::BFSColor BFSColor;
+
+} // namespace
+
+#endif

+ 77 - 0
core/basics/BinStreamable.cpp

@@ -0,0 +1,77 @@
+/*
+ * NICE-Core - efficient algebra and computer vision methods
+ *  - libfbasics - library of some basic tools
+ * See file License for license information.
+ */
+/*****************************************************************************/
+#include "core/basics/BinStreamable.h"
+#include <stdexcept>
+#include <fstream>
+#include <core/basics/gzbinstream.h>
+
+#include "core/basics/Exception.h"
+
+namespace NICE {
+
+void BinStreamable::readFromBinFile(const char *filename, Format compression)
+{
+  switch(compression) {
+    case BIN: {
+      ifbinstream file(filename);
+      if (!file.good()) {
+        fthrow(Exception, "readFromBinFile(): could not open file.");
+      }
+      readBin(file);
+      file.close();
+      break;
+    }
+#ifdef NICE_USELIB_ZLIB
+    case BIN_GZ: {
+      igzbinstream file(filename);
+      if (!file.good()) {
+        fthrow(Exception, "readFromBinFile(): could not open file.");
+      }
+      readBin(file);
+      file.close();
+      break;
+    }
+#endif
+    default:
+      fthrow(Exception,
+             "File cannot be read! Compression method not supported.");
+      break;
+  }
+}
+
+void BinStreamable::writeToBinFile(const char *filename, 
+                                   Format compression) const
+{
+  switch(compression) {
+    case BIN: {
+      ofbinstream file(filename);
+      if (!file.good()) {
+        fthrow(Exception, "writeToBinFile(): could not open file.");
+      }
+      writeBin(file);
+      file.close();
+      break;
+    }
+#ifdef NICE_USELIB_ZLIB
+    case BIN_GZ: {
+      ogzbinstream file(filename);
+      if (!file.good()) {
+        fthrow(Exception, "writeToBinFile(): could not open file.");
+      }
+      writeBin(file);
+      file.close();
+      break;
+    }
+#endif
+    default:
+      fthrow(Exception,
+             "File cannot be written! Compression method not supported.");
+      break;
+  }
+}
+
+}; // namespace NICE 

+ 94 - 0
core/basics/BinStreamable.h

@@ -0,0 +1,94 @@
+/*
+ * NICE-Core - efficient algebra and computer vision methods
+ *  - libfbasics - library of some basic tools
+ * See file License for license information.
+ */
+/*****************************************************************************/
+#ifndef _BINSTREAMABLE_FBASICS_H
+#define _BINSTREAMABLE_FBASICS_H
+
+#include <iostream>
+
+#include <core/basics/binstream.h>
+
+namespace NICE {
+
+/**
+ * Abstract base class for binarily streamable classes.
+ */
+class BinStreamable {
+public:
+  /**
+   * Format (compression method)
+   */
+  enum Format {
+    /**
+     * Save in binary format which is compressed with gzip
+     * (only supported if compiled with zlib, use \#ifdef NICE_USELIB_ZLIB)
+     */
+    BIN_GZ=3,
+    /**
+     * Save in binary format (uncompressed)
+     */
+    BIN=4
+  };
+
+  virtual ~BinStreamable(){}
+
+  /**
+   * Read class attributes from ibinstream
+   * \param stream ibinstream to read elements from
+   */
+  virtual void read(ibinstream& stream) = 0;
+
+  /**
+   * Write class attributes to obinstream.
+   * \param stream obinstream to write elements to
+   */
+  virtual void write(obinstream& stream) const = 0;
+
+  /**
+   * Read class attributes from ibinstream
+   * \param stream ibinstream to read elements from
+     */
+  inline void readBin(ibinstream& stream) {
+    read(stream);
+  }
+
+  /**
+   * Write class attributes to obinstream.
+   * \param stream obinstream to write elements to
+   */
+  inline void writeBin(obinstream& stream) const {
+    write(stream);
+  }
+
+  /** Read class attributes from a file.
+   * \param filename Name of the file
+   * \param compression file format \see SaveMethod
+   */
+  virtual void readFromBinFile(const char *filename,
+                               Format compression=BIN);
+
+  /**
+   * Write class attributes to a file.
+   * \param filename Name of the file
+   * \param compression file format \see SaveMethod
+   */
+  virtual void writeToBinFile(const char *filename,
+                              Format compression=BIN) const;
+};
+
+inline obinstream& operator<<(obinstream &strm, const BinStreamable &ex) {
+  ex.writeBin(strm);
+  return strm;
+}
+
+inline ibinstream& operator>>(ibinstream &strm, BinStreamable &ex) {
+  ex.readBin(strm);
+  return strm;
+}
+
+}; // namespace NICE
+
+#endif /* _BINSTREAMABLE_FBASICS_H */

+ 566 - 0
core/basics/Config.cpp

@@ -0,0 +1,566 @@
+#include <assert.h>
+
+#include <fstream>
+
+#include "Config.h"
+#include "ossettings.h"
+
+#include "StringTools.h"
+
+using namespace NICE;
+  
+using namespace std;
+
+#undef DEBUGCONFIG
+#define DEBUGPRINT printf
+
+Config::Config ()
+{
+  ioUntilEndOfFile = true;
+}
+
+Config::Config ( const std::string & configfn )
+{
+  if ( configfn.size() >0 ) {
+    read(configfn);
+  }
+  ioUntilEndOfFile = true;
+}
+
+Config::Config ( int argc, 
+         char **argv )
+{
+  readFromArguments ( argc, argv );
+  std::string configfile = gS("main", "config", "" );
+  
+  std::cerr << "configfile: " << configfile << std::endl;
+  ioUntilEndOfFile = gB("main", "ioUntilEndOfFile", true );
+  if ( configfile.size() > 0 )
+    readWithoutOverwrite ( configfile.c_str(), CONFIG_DO_NOT_OVERWRITE_VALUES /*do not overwrite values*/ );
+}
+
+Config::Config ( const Config & conf ) : Persistent()
+{
+  ioUntilEndOfFile = true;
+	confB.copyFrom ( conf.confB );
+	confD.copyFrom ( conf.confD );
+	confI.copyFrom ( conf.confI );
+	confS.copyFrom ( conf.confS );
+}
+
+Config::~Config()
+{
+}
+
+void Config::clear()
+{
+#if defined DEBUGCONFIG
+	DEBUGPRINT( "Config: clear ...\n" );
+#endif
+  confB.clear();
+  confD.clear();
+  confI.clear();
+	confS.clear();
+}
+
+void Config::addKeyValuePair ( const std::string & block,
+			       const std::string & key, 
+			       const std::string & value )
+{
+    vector<string> submatches;
+#if defined DEBUGCONFIG
+	DEBUGPRINT( "Config: analyzing value %s\n", value.c_str() );
+#endif
+    if ( StringTools::regexMatch ( value, "^ *([-[:digit:]]+) *;?$", submatches ) &&
+	     (submatches.size() == 2) ) {
+#if defined DEBUGCONFIG
+	    DEBUGPRINT ( "Config: integer value\n");
+#endif
+	    int v;
+	    v = StringTools::convert<int> ( submatches[1] );
+	    confI.store ( block, key, v );
+    } else if ( value.compare("true") == 0 ) {
+#if defined DEBUGCONFIG
+	    DEBUGPRINT( "Config: boolean value\n");
+#endif
+		confB.store ( block, key, true );
+    } else if ( value.compare("false") == 0 ) {	    
+#if defined DEBUGCONFIG
+	    DEBUGPRINT ( "Config: boolean value\n");
+#endif
+		confB.store ( block, key, false );
+    } else if ( StringTools::regexMatch ( value, "^ *([-e.[:digit:]]+) *;?$", submatches ) &&
+	     (submatches.size() == 2) ) 
+    {
+	double v;
+	if ( ! StringTools::convert<double> ( submatches[1], v )  ) 
+	{
+	    DEBUGPRINT ( "Config: please ask Erik to debug this part of Config.cpp\n");
+	    exit(-1);
+	}
+	#if defined DEBUGCONFIG
+	    DEBUGPRINT ( "Config: double value\n");
+	#endif
+	confD.store ( block, key, v );
+    } else {
+#if defined DEBUGCONFIG
+	    DEBUGPRINT ( "Config: string value\n");
+#endif
+		string trimValue = value;
+	    StringTools::trimbounds ( trimValue, '\"' );
+	    StringTools::trimbounds ( trimValue, '\'' );
+	    confS.store ( block, key, trimValue );
+    }
+}
+
+void Config::readFromArguments ( int argc, char **argv )
+{
+    std::string section;
+    std::string key;
+    std::string value;
+    ioUntilEndOfFile = true;
+
+    for ( int i = 1 ; i < argc ; i++ )
+    {
+      if ( argv[i] == NULL ) break;
+      std::string arg ( argv[i] );
+
+      vector<string> submatches;
+      bool match = false;
+
+      match = StringTools::regexMatch ( arg, "^--?([[:alpha:]][[:alpha:][:digit:]_-]*):([[:alpha:][:digit:]_-]+)", submatches );
+      if ( (match) && (submatches.size() == 3) ) {
+        if ( key.size() > 0 ) {
+          addArgBoolean ( section, key );
+        }
+        section = submatches[1];
+        key     = submatches[2];
+        continue;
+      }
+
+      match = StringTools::regexMatch ( arg, "^--?([[:alpha:]][[:alpha:][:digit:]_-]*)", submatches );
+      if ( (match) && (submatches.size() == 2) ) {
+        if ( key.size() > 0 )	
+        {
+          addArgBoolean ( section, key );
+        }
+        section = "main";
+        key = submatches[1];
+        continue;
+      }
+
+      value = string(argv[i]);
+
+      if ( key.size() <= 0 )
+      {
+        // add to more options
+        moreOptions.push_back ( value );
+        continue;
+      }
+
+  #if defined DEBUGCONFIG
+      cout << "Config: add command line option: " << section << ":" << key << " = " << value << endl;
+  #endif
+      addKeyValuePair ( section, key, value );
+
+      key = "";
+    }
+ 
+    if ( key.size() > 0 )
+		addArgBoolean ( section, key );
+}
+
+// refactor-nice.pl: check this substitution
+// old: void Config::addArgBoolean ( const string & section, const string & key )
+void Config::addArgBoolean ( const std::string & section, const std::string & key )
+{
+    vector<string> submatches;
+    if ( StringTools::regexMatch ( key, "^no-(.*)$", submatches )
+		&& (submatches.size() == 2) )
+    {
+		confB.store ( section, submatches[1], false );
+    } else {
+		confB.store ( section, key, true );
+    }
+}
+
+void Config::restore (istream & is, int format)
+{
+    std::string block = "main";
+    std::string key;
+    std::string value;
+    std::string line;
+    int count = 0;
+    
+    //check for the first word
+    //if this is "Config::store--PreciseTermination" then we do not read until eof
+    //but bis the precise termination statement "Config::store--done" arises
+    std::string firstWord;
+    if (! is.eof() )
+    {
+      is >> firstWord;
+      if ( firstWord.compare( "Config::store--PreciseTermination" ) == 0)
+      {
+          ioUntilEndOfFile = false;
+      }
+      else
+          ioUntilEndOfFile = true;
+    }
+    
+    //jump to the beginning of the file
+    is.clear();
+    is.seekg(0, ios::beg);
+
+    //we keep the while-loop untached, but break out of ioUntilEndOfFile is false and we reached the termination-statement
+    while (! is.eof()) 
+    {
+      size_t i=0;
+
+      if ( !getline(is, line) )
+        break;
+      
+      //do we have to check for the precise termination statement and reaches it yet?
+      if ( (!ioUntilEndOfFile) &&  (line.compare("Config::store--done") == 0) ) 
+        break;
+
+      if ( line.size() <= 0 ) 
+        continue;
+
+      size_t len = line.size();
+      count++;
+      if ( (len < 1) || (line[0] == '#' ) )
+        continue;
+
+      line = StringTools::chomp ( line );
+
+  #if defined DEBUGCONFIG
+      DEBUGPRINT ("Config: (%d) '%s' (len = %d) / %s\n", (int)count, line.c_str(), (int)len,
+        block.c_str());
+  #endif
+
+      while ( ( (line[i] == '\t') || (line[i]==' ') ) && (i<len)) i++;
+      if ( i == len ) continue;
+      
+      if ( line[i] == '[' ) {
+        size_t j = i+1;
+        while ((line[j]!=']') && (j<len)) j++;
+        if ( (j == len) || (i==j-1) ) continue;
+
+        block = line.substr( i+1, j-i-1 );
+  #if defined DEBUGCONFIG
+        DEBUGPRINT ("Config: reading block %s\n", block.c_str());
+  #endif
+        StringTools::normalize_string(block);
+        continue;
+      }
+
+      if ( line[i] == '%' ) {
+        size_t j = i+1;
+        while ((line[j]!='%') && (j<len)) j++;
+        if ( (j == len) || (i==j-1) ) continue;
+
+        std::string includefile = line.substr( i+1, j-i-1 );
+
+  #if defined DEBUGCONFIG
+        DEBUGPRINT ("Config: including config file %s\n", includefile.c_str());
+  #endif
+        StringTools::normalize_string ( includefile );
+
+        readWithoutOverwrite ( includefile.c_str(), format );
+        continue;
+      }
+      
+      size_t p = i;
+      while ( (line[p]!='=') && (p<len) ) p++;
+      if ( (p >= len-1) || (p<=i) ) continue;
+      key = line.substr( i, p-i );
+      value = line.substr( p+1, len-p );
+
+      StringTools::normalize_string(value);
+      StringTools::normalize_string(key);
+    //	transform(key.begin(), key.end(), key.begin(), ::tolower);
+
+  #if defined DEBUGCONFIG
+      DEBUGPRINT ("Config: found key value pair (%s,%s) in section %s\n", 
+        key.c_str(), value.c_str(), block.c_str());
+  #endif
+
+      if ( (format == CONFIG_OVERWRITE_VALUES) || ( !keyExists(block, key) ) )
+        addKeyValuePair ( block, key, value );
+
+    }
+
+#if defined DEBUGCONFIG
+    DEBUGPRINT ("Config: successfully loaded.\n" );
+    DEBUGPRINT ("Config: %d double values\n", (int)confD.size() );
+    DEBUGPRINT ("Config: %d integer values\n", (int)confI.size() );
+    DEBUGPRINT ("Config: %d bool values\n", (int)confB.size() );
+    // refactor-nice.pl: check this substitution
+    // old: DEBUGPRINT ("Config: %d string values\n", (int)confS.size() );
+    DEBUGPRINT ("Config: %d std::string values\n", (int)confS.size() );
+#endif
+}
+      
+bool Config::keyExists ( const std::string & block, const std::string & key ) const
+{
+    return ( confS.keyExists ( block, key ) || 
+             confI.keyExists ( block, key ) ||
+	     confB.keyExists ( block, key ) ||
+	     confD.keyExists ( block, key ) );
+}
+
+void Config::addHelp ( const std::string & block, const std::string & key,
+		     const std::string & helpText )
+{
+    helpTexts[ block + "::" + key ] = helpText;
+}
+
+std::string Config::help ( const std::string & block, const std::string & key ) const
+{
+    std::string k = block + "::" + key;
+    map<string, string>::const_iterator i = helpTexts.find(k);
+    if ( i == helpTexts.end() )
+	return "no helping information for this variable, sorry!";
+    else
+	return i->second;
+}
+
+
+std::string Config::gS(const std::string & key) const
+{
+    return gS(key, "main");
+}
+
+std::string Config::gS(const std::string & block, const std::string & key) const
+{
+    std::string v ("");
+    if ( confS.find(block, key, v) ) {
+		return v;
+    } else {
+		fprintf (stderr, "Config: setting %s::%s not found !\n", block.c_str(), key.c_str() );
+		fprintf (stderr, "Config: %s\n", help(block, key).c_str() );
+		exit(-1);
+		return ""; // never reached
+    }
+
+}
+
+// refactor-nice.pl: check this substitution
+// old: string Config::gS(const string & block, const string & key, const string & defv) const
+std::string Config::gS(const std::string & block, const std::string & key, const std::string & defv) const
+{
+    // refactor-nice.pl: check this substitution
+    // old: string v ("");
+    std::string v ("");
+    if ( confS.find(block, key, v) ) {
+		return v;
+    } else {
+#if defined DEBUGCONFIG
+		DEBUGPRINT("Config: Setting %s::%s not found using default value %s\n", block.c_str(), key.c_str(), defv.c_str() );
+#endif
+		return defv;
+    }
+
+}
+
+// refactor-nice.pl: check this substitution
+// old: double Config::gD(const string & key) const
+double Config::gD(const std::string & key) const
+{
+    return gD(key, "main");
+}
+
+// refactor-nice.pl: check this substitution
+// old: double Config::gD(const string & block, const string & key) const
+double Config::gD(const std::string & block, const std::string & key) const
+{
+    double v = 0.0;
+    if ( confD.find(block, key, v) ) {
+		return v;
+    } else {
+		int vi;
+		if ( confI.find(block, key, vi) ) {
+			DEBUGPRINT("Config: Setting %s::%s should be double (please change in the config)\n", block.c_str(), key.c_str() );
+			return (int)vi;
+		}
+		fprintf (stderr, "Config: setting %s::%s not found !\n", block.c_str(), key.c_str() );
+		fprintf (stderr, "Config: %s\n", help(block, key).c_str() );
+		exit(-1);
+		return -1.0; // never reached
+    }
+}
+
+// refactor-nice.pl: check this substitution
+// old: double Config::gD(const string & block, const string & key, const double defv) const
+double Config::gD(const std::string & block, const std::string & key, const double defv) const
+{
+    double v = 0.0;
+    if ( confD.find(block, key,  v) ) {
+		return v;
+    } else {
+		int vi;
+		if ( confI.find(block, key, vi) ) {
+			DEBUGPRINT("Config: Setting %s::%s should be double (please change in the config)\n", block.c_str(), key.c_str() );
+			return (int)vi;
+		}
+#if defined DEBUGCONFIG
+		DEBUGPRINT("Config: Setting %s::%s not found using default value %f\n", block.c_str(), key.c_str(), defv );
+#endif
+		return defv;
+    }
+
+}
+
+// refactor-nice.pl: check this substitution
+// old: int Config::gI(const string & key) const
+int Config::gI(const std::string & key) const
+{
+    return gI(key, "main");
+}
+
+// refactor-nice.pl: check this substitution
+// old: int Config::gI(const string & block, const string & key) const
+int Config::gI(const std::string & block, const std::string & key) const
+{
+    int v = 0;
+    if ( confI.find(block, key, v) ) {
+		return v;
+    } else {
+		fprintf (stderr, "Config: setting %s::%s not found !\n", block.c_str(), key.c_str() );
+		fprintf (stderr, "Config: %s\n", help(block, key).c_str() );
+		exit(-1);
+		return 1; // never reached
+    }
+
+}
+
+// refactor-nice.pl: check this substitution
+// old: int Config::gI(const string & block, const string & key, int defv) const
+int Config::gI(const std::string & block, const std::string & key, int defv) const
+{
+    int v = 0;
+    if ( confI.find(block, key, v) ) {
+		return v;
+    } else {
+#if defined DEBUGCONFIG
+		DEBUGPRINT("Config: Setting %s::%s not found using default value %d\n", block.c_str(), key.c_str(), defv );
+#endif
+		return defv;
+    }
+}
+
+// refactor-nice.pl: check this substitution
+// old: bool Config::gB(const string & key) const
+bool Config::gB(const std::string & key) const
+{
+    return gB(key, "main");
+}
+
+// refactor-nice.pl: check this substitution
+// old: bool Config::gB(const string & block, const string & key) const
+bool Config::gB(const std::string & block, const std::string & key) const
+{
+    bool v = true;
+    if ( confB.find(block, key, v) ) {
+		return v;
+    } else {
+		fprintf (stderr, "Config: setting %s::%s not found !\n", block.c_str(), key.c_str() );
+		fprintf (stderr, "Config: %s\n", help(block, key).c_str() );
+		exit(-1);
+		return true; // never reached
+    }
+
+}
+
+// refactor-nice.pl: check this substitution
+// old: bool Config::gB(const string & block, const string & key, bool defv) const
+bool Config::gB(const std::string & block, const std::string & key, bool defv) const
+{
+    bool v = true;
+    if ( confB.find(block, key, v) ) {
+		return v;
+    } else {
+#if defined DEBUGCONFIG
+		DEBUGPRINT("Config: Setting %s::%s not found using default value %d\n", block.c_str(), key.c_str(), defv );
+#endif
+		return defv;
+    }
+}
+
+// refactor-nice.pl: check this substitution
+// old: void Config::getAllS ( const std::string & block, std::map< string, string > & list ) const
+void Config::getAllS ( const std::string & block, std::map< string, std::string > & list ) const
+{
+    confS.getAll ( block, list );
+}
+
+void Config::getAllD ( const std::string & block, std::map< string, double > & list ) const
+{
+    confD.getAll ( block, list );
+}
+
+void Config::getAllI ( const std::string & block, std::map< string, int > & list ) const
+{
+    confI.getAll ( block, list );
+}
+
+void Config::getAllB ( const std::string & block, std::map< string, bool > & list ) const
+{
+    confB.getAll ( block, list );
+}
+
+void Config::sD(const std::string & block, const std::string & key, const double defv)
+{
+    confD.store ( block, key, defv );
+}
+
+void Config::sI(const std::string & block, const std::string & key, const int defv)
+{
+	confI.store ( block, key, defv );
+}
+
+void Config::sB(const std::string & block, const std::string & key, const bool defv)
+{
+	confB.store ( block, key, defv );
+}
+
+void Config::sS(const std::string & block, const std::string & key, const std::string & defv)
+{
+	confS.store ( block, key, defv );
+}
+
+void Config::store (ostream & os, int format) const 
+{
+  if (!ioUntilEndOfFile)
+  {
+    //let's give us a hint that we do not have to restore until end of file but until "Config::store--done"
+    os << "Config::store--PreciseTermination" << std::endl;
+  }
+    os << "# -----------------------------------------" << endl;
+    os << "# |             Config                    |" << endl;
+    os << "# -----------------------------------------" << endl;
+
+    os << endl << "# ------------- double values" << endl;
+    confD.store( os, format );
+    os << endl << "# ------------- boolean values" << endl;
+    confB.store( os, format );
+    os << endl << "# ------------- integer values" << endl;
+    confI.store( os, format );
+    os << endl << "# ------------- string values" << endl;
+    confS.store( os, format );
+    os << "# -----------------------------------------" << endl;
+  if (!ioUntilEndOfFile)
+  {
+    os << "Config::store--done" << std::endl;
+  }
+
+}
+
+void Config::getAllBlocks ( std::set< std::string > & list ) const
+{
+    list.clear();
+    confB.getAllBlocks ( list );
+    confD.getAllBlocks ( list );
+    confS.getAllBlocks ( list );
+    confI.getAllBlocks ( list );
+}

+ 169 - 0
core/basics/Config.h

@@ -0,0 +1,169 @@
+/** 
+* @file Config.h
+* @brief configuration mgt
+* @author Erik Rodner
+* @date 2006-03-12
+*/
+#ifndef CONFIGINCLUDE
+#define CONFIGINCLUDE
+
+#include <iostream>
+#include <map>
+
+#include <math.h>
+#include <string>
+#include <vector>
+
+#include "StructuredMap.h"
+#include "core/basics/Persistent.h"
+  
+namespace NICE {
+
+/** @brief This class provides general configuration management. */
+class Config : public NICE::Persistent
+{
+  public:
+  	  enum {
+		  CONFIG_OVERWRITE_VALUES = 0,
+		  CONFIG_DO_NOT_OVERWRITE_VALUES
+	  };
+
+  protected:
+      /** storing all config double values */
+      StructuredMap<double> confD;
+      /** storing all config integer values */
+      StructuredMap<int> confI;
+      /** storing all config boolean valzes */
+      StructuredMap<bool> confB;
+      /** storing all config strings */
+      StructuredMap<std::string> confS;
+
+      void addArgBoolean ( const std::string & section, const std::string & key );
+
+	  /** add a setting */
+	  void addKeyValuePair ( const std::string & section,
+			     const std::string & key, 
+			     const std::string & value );
+
+    /** storing help text for a section/key pair */
+      std::map<std::string, std::string> helpTexts;
+
+    /** storing all aux. options (for use with argv, argc) */
+	  std::vector<std::string> moreOptions;
+    
+    /** read until end of file fore restore (default: yes)*/
+    bool ioUntilEndOfFile;
+
+  public:
+
+      /** simplest constructor, create an empty config */
+      Config ();
+
+      /** simple constructor
+	  @param configfn config file name */
+      Config( const std::string & configfn );
+      
+      /** read config data from arguments 
+	  @param argc number of arguments
+	  @param argv arguments */
+      Config ( int argc, 
+	       char **argv );
+
+	  /** copy constructor */
+	  Config ( const Config & conf );
+
+      /** simple destructor */
+      virtual ~Config();
+
+      /** get string value or abort the whole
+	  program when no value is given
+	  @param key name of the variable
+      */
+      std::string gS(const std::string & key) const;
+
+      /** get string value or abort the whole program
+	  when no value is given 
+	  @param block name of the block 
+	  @param key name of the variable
+      */
+      std::string gS(const std::string & block, const std::string & key) const;
+
+      /** get string value, if non-existant its standard
+          value is used
+	  @param block name of the block 
+	  @param key name of the variable
+	  @param defv default value of the variable
+     */
+      virtual std::string gS(const std::string & block, const std::string & key, const std::string & defv) const;
+
+      /** */
+      virtual double gD(const std::string & key) const;
+      virtual double gD(const std::string & block, const std::string & key) const;
+      virtual double gD(const std::string & block, const std::string & key, const double defv) const;
+     
+      virtual int gI(const std::string & key) const;
+      virtual int gI(const std::string & block, const std::string & key) const;
+      virtual int gI(const std::string & block, const std::string & key, const int defv) const;
+ 
+      virtual bool gB(const std::string & key) const;
+      virtual bool gB(const std::string & block, const std::string & key) const;
+      virtual bool gB(const std::string & block, const std::string & key, const bool defv) const;
+      /** } */
+
+      void getAllS ( const std::string & block, std::map< std::string, std::string > & list ) const; 
+      void getAllD ( const std::string & block, std::map< std::string, double> & list ) const; 
+      void getAllI ( const std::string & block, std::map< std::string, int > & list ) const; 
+      void getAllB ( const std::string & block, std::map< std::string, bool > & list ) const; 
+
+      void getAllBlocks ( std::set< std::string > & list ) const;
+	  
+	  /** set values */
+      void sD(const std::string & block, const std::string & key, const double defv);
+      void sI(const std::string & block, const std::string & key, const int defv);
+      void sB(const std::string & block, const std::string & key, const bool defv);
+      void sS(const std::string & block, const std::string & key, const std::string & defv);
+	  
+
+      /** read values from arguments 
+	  @param argc number of arguments
+	  @param argv list c-strings as provided by main-functions
+      */
+      void readFromArguments ( int argc, char **argv );
+
+      /** check whether a key exists
+	  @param block block of the variable
+	  @param key name of the variable
+      */
+      bool keyExists ( const std::string & block, const std::string & key ) const;
+
+      /** add a help text */
+      void addHelp ( const std::string & block, const std::string & key,
+		     const std::string & helpText );
+
+      /** get help text */
+      std::string help ( const std::string & block, const std::string & key ) const;
+
+      /** write all values of the config */
+	  void store (std::ostream & os, int format = 0) const;
+
+	  /** read config values from a stream
+	  @param is input stream
+	  @param format can be CONFIG_DO_NOT_OVERWRITE_VALUES or CONFIG_OVERWRITE_VALUES
+      */
+	  void restore (std::istream & is, int format = 0);
+
+	  /** clear all values */
+	  void clear ();
+
+	  /** get more options (command line arguments not covered by config values */
+	  const std::vector<std::string> & getMoreOptions() { return moreOptions; };
+    
+    /** set the flag wether we restore a config and read until end of file or until a precise statement*/
+    void setIoUntilEndOfFile(const bool & _ioUntilEndOfFile) { ioUntilEndOfFile = _ioUntilEndOfFile;};
+	  
+};
+
+
+} // namespace
+
+#endif

+ 59 - 0
core/basics/Exception.cpp

@@ -0,0 +1,59 @@
+/*
+ * NICE-Core - efficient algebra and computer vision methods
+ *  - libfbasics - library of some basic tools
+ * See file License for license information.
+ */
+#include "core/basics/Exception.h"
+#include <sstream>
+#include <iostream>
+
+using namespace std;
+
+namespace NICE {
+
+Exception::Exception(const std::string& _message, const exception& _cause)
+      : filename("unknown"), line(0), message(_message) {
+  // NOTE for some (?) causing exceptions, the following code is
+  // the ONLY working variant known -- DO NOT CHANGE!
+  const std::string& temp = _cause.what();
+  for (unsigned int i = 0; i < temp.size(); i++) {
+    cause += temp[i];
+  }
+}
+
+Exception::Exception(const char* _filename, const int _line,
+                       const std::string& _message, const exception& _cause)
+      : filename(_filename), line(_line), message(_message) {
+  // NOTE for some (?) causing exceptions, the following code is
+  // the ONLY working variant known -- DO NOT CHANGE!
+  const std::string& temp = _cause.what();
+  for (unsigned int i = 0; i < temp.size(); i++) {
+    cause += temp[i];
+  }
+}
+
+Exception::~Exception() throw() {
+}
+
+const char* Exception::what() const throw() {
+  try {
+    std::stringstream s;
+    s << "Exception " << name()
+      << " in file " << filename
+      << " line " << line
+      << " with message:" << std::endl << " " << message;
+    if (cause.size() > 0) {
+      s << std::endl << " caused by: " << cause;
+    }
+    whatBuffer = s.str();
+    return whatBuffer.c_str();
+  } catch(...) {
+    return "Exception: exception while formating what()-string";
+  }
+}
+
+const char* Exception::name() const throw() {
+  return "Exception";
+}
+
+} // namespace

+ 181 - 0
core/basics/Exception.h

@@ -0,0 +1,181 @@
+/*
+ * NICE-Core - efficient algebra and computer vision methods
+ *  - libfbasics - library of some basic tools
+ * See file License for license information.
+ */
+#ifndef _FEXCEPTION_H_
+#define _FEXCEPTION_H_
+
+#include <exception>
+#include <string>
+#include <iostream>
+#include <sstream>
+
+namespace NICE {
+
+/**
+ * Throw an exception of type \c type with message \c m
+ * and supply the exception's constructor with source code file and line.
+ * The message will be composed using a stream.
+ * Example: <code>fthrow(Exception, "ups. error: " << code)</code>
+ */
+#define fthrow(type, stream)                                  \
+  {                                     \
+   std::stringstream sneudfgiaenuiae;                         \
+   sneudfgiaenuiae << stream;                                 \
+   throw type((__FILE__), (__LINE__), sneudfgiaenuiae.str()); \
+  };
+
+/**
+ * Throw an exception of type \c type
+ * with message \c m and causing exception \c cause
+ * and supply the exception's constructor with source code file and line.
+ * Additionally specify the causing exception (when re-throwing).
+ * The message will be composed using a stream.
+ * Example: <code>fthrowc(Exception, "ups. error: " << code, cause)</code>
+ */
+#define fthrowc(type, stream, cause)                                   \
+  {using namespace NICE;                                              \
+   std::stringstream sneudfgiaenuiae;                                  \
+   sneudfgiaenuiae << stream;                                          \
+   throw type((__FILE__), (__LINE__), sneudfgiaenuiae.str(), (cause)); \
+  };
+
+/**
+ * @deprecated Same as fthrow
+ */
+#define fthrowstream(type, m) \
+  fthrow(type, m)
+//   {using namespace NICE; throw type((__FILE__), (__LINE__), (m));};
+
+/**
+ * @deprecated Same as fthrowc
+ */
+#define fthrowstreamc(type, m, cause) \
+  fthrowc(type, m, cause)
+//   {using namespace NICE; throw type((__FILE__), (__LINE__), (m), (cause));};
+
+/**
+ * A general purpose exception class.
+ * There are additional macros \c ::fthrow und \c ::fthrowc which simplify
+ * the usage of some features of this class.
+ */
+class Exception : public std::exception {
+public:
+  /**
+   * Create an exception with a message string.
+   * @param _message The message text
+   */
+  inline Exception(const std::string& _message)
+      : filename("unknown"), line(0), message(_message) {}
+
+  /**
+   * Create an exception with a message string and a causing exception
+   * @param _message The message text
+   * @param _cause The causing exception
+   */
+  Exception(const std::string& _message, const exception& _cause);
+
+  /**
+   * Create an exception with a message string and information about the
+   * throwing position in the source code.
+   * @param _filename Source code file
+   * @param _line Source code line
+   * @param _message The message text
+   */
+  inline Exception(const char* _filename, const int _line,
+                    const std::string& _message)
+      : filename(_filename), line(_line), message(_message) {}
+
+  /**
+   * Create an exception with a message string and a causing exception
+   * as well as information about the throwing position in the source code.
+   * @param _filename Source code file
+   * @param _line Source code line
+   * @param _message The message text
+   * @param _cause The causing exception
+   */
+  Exception(const char* _filename, const int _line,
+             const std::string& _message, const exception& _cause);
+
+  inline Exception(const Exception& e) throw()
+      : std::exception(e) {
+    *this = e;
+  }
+
+  Exception& operator=(const Exception& e) throw() {
+    filename = e.filename;
+    line = e.line;
+    message = e.message;
+    cause = e.cause;
+    return *this;
+  }
+
+  virtual ~Exception() throw();
+
+  /**
+   * The message text and additional information. Useful as output message.
+   */
+  virtual const char* what() const throw();
+
+  /**
+   * The name of the exception class. Should be re-implemented in subclasses.
+   */
+  virtual const char* name() const throw();
+
+protected:
+  //! Source code file
+  std::string filename;
+
+  //! Source code line
+  int line;
+
+  //! Message text
+  std::string message;
+
+  //! Causing exception
+  std::string cause;
+  
+  //! a buffer for the string returned by what()
+  mutable std::string whatBuffer;
+};
+
+} // namespace
+
+/**
+ * Define new exception classes.
+ * Example: <code>DEFINE_NICE_EXCEPTION(ImageException)</code>.
+ */
+#define DEFINE_NICE_EXCEPTION(ename) \
+class ename : public NICE::Exception { \
+public: \
+  inline ename(const std::string& _message) : Exception(_message) {} \
+  inline ename(const std::string& _message, const exception& _cause) \
+      : Exception(_message, _cause) {} \
+  inline ename(const char* _filename, const int _line, \
+               const std::string& _message) \
+      : Exception(_filename, _line, _message) {} \
+  inline ename(const char* _filename, const int _line, \
+               const std::string& _message, const exception& _cause) \
+      : Exception(_filename, _line, _message, _cause) {} \
+  inline ename(const ename& orig) throw() : NICE::Exception(orig) {} \
+  inline ename& operator=(const ename& orig) throw() { \
+    *this = orig; \
+    return *this; \
+  } \
+  virtual ~ename() throw() {} \
+  const char* name() const throw() { return #ename; } \
+};
+
+#define DEFINE_LIMUN_EXCEPTION(ename) DEFINE_NICE_EXCEPTION(ename)
+
+/*
+#define LIMUN_EXCEPTION_IMPLEMENTATION(ename) \
+ename::~ename()  throw() { \
+} \
+const char* ename::name() const throw() { \
+  return #ename; \
+}
+*/
+
+#endif //_FEXCEPTION_H_

+ 39 - 0
core/basics/FastMath.cpp

@@ -0,0 +1,39 @@
+/** 
+* @file FastMath.cpp
+* @brief lookup tables and more
+* @author Erik Rodner
+* @date 07/31/2008
+
+*/
+#include "FastMath.h"
+#include <stdio.h>
+#include <math.h>
+#include <assert.h>
+
+using namespace NICE;
+
+using namespace std;
+
+FastMath::~FastMath ()
+{
+    if ( sqrtTable != NULL )
+	delete [] sqrtTable;
+    if ( atan2Table != NULL )
+	delete [] atan2Table;
+}
+
+FastMath::FastMath()
+{
+    sqrtTable = new double[sqrtTableMaximum];
+    for ( int j = 0 ; j < sqrtTableMaximum; j++ )
+	sqrtTable[j] = sqrt((double)j);
+
+    atan2Table = new double[atan2TableMaximum];
+    long k = 0 ;
+    for ( int i = -gradientMaximum ; i <= gradientMaximum ; i++ )
+	for ( int j = -gradientMaximum ; j <= gradientMaximum ; j++,k++ )
+	    atan2Table[k] = atan2((double)i,(double)j);
+
+    assert ( k == atan2TableMaximum );
+}
+

+ 51 - 0
core/basics/FastMath.h

@@ -0,0 +1,51 @@
+/** 
+* @file FastMath.h
+* @brief lookup tables and more
+* @author Erik Rodner
+* @date 07/31/2008
+
+*/
+#ifndef FASTMATHINCLUDE
+#define FASTMATHINCLUDE
+
+
+namespace NICE {
+
+/** @brief some lookup tables suitable for image gradients */
+class FastMath
+{
+    public:
+	/** maximum value of image gradients */
+ 	static const int gradientMaximum = 255;
+
+	/** sqrt(.) 2*255^2 is the maximum value of the argument */
+	static const int sqrtTableMaximum = 2*gradientMaximum*gradientMaximum+1;
+
+	/** access to the sqrt table sqrtTable[y*gradientMaximum + x] */
+	double *sqrtTable;
+
+	/** lookup table for atan2 */
+	static const int atan2TableMaximum = (2*gradientMaximum+1)*(2*gradientMaximum+1);
+
+	/** access to the atan2 table atan2Table[y*gradientMaximum + x] */
+	double *atan2Table;
+ 
+	/** do not use this constructor directly */
+	FastMath ();
+	
+	/** destructor: removes all lookup tables  */
+	~FastMath ();
+
+	/** get the singleton object instance */
+	static FastMath & getSingleton () {
+	    static FastMath fastMathSingleton;
+	    return fastMathSingleton;
+	}
+     
+};
+
+
+
+} // namespace
+
+#endif

+ 121 - 0
core/basics/FileMgt.cpp

@@ -0,0 +1,121 @@
+/** 
+* @file FileMgt.cpp
+* @brief Misc file management utilities
+* @author Erik Rodner
+* @date 10/26/2007
+
+i*/
+#include <stdlib.h>
+
+#ifndef WIN32
+#include <unistd.h>
+#endif
+
+#include <sys/file.h>
+#include <sys/types.h>    // For stat()
+#include <sys/stat.h>     // For stat()
+
+#include <iostream>
+#include <algorithm>
+
+#include "FileMgt.h"
+
+#include "ossettings.h"
+#include "StringTools.h"
+
+#include <errno.h>
+#include <string.h>
+
+using namespace NICE;
+
+using namespace std;
+using namespace NICE;
+
+
+void FileMgt::DirectoryRecursive ( std::vector<string> & files, const std::string & dir )
+{	
+	std::string command = "find -L \"" + dir + "\" -type f";
+	//cerr << "FileMgt::DirectoryRecursive: find command (" << command << ")" << endl;
+
+	FILE *pipe = popen ( command.c_str(), "r" );
+	//cerr << "FileMgt::DirectoryRecursive: popen issued !" << endl;
+	if ( pipe == NULL ) {
+    int errsv = errno; //just to be sure that the writing on std::cerr does not change the errno
+		cerr << "FileMgt::DirectoryRecursive: find command failed (" << command << ")" << endl;
+    std::cerr << "FileMgt::DirectoryRecursive: popen error message is " << strerror(errsv) << std::endl;
+		return;
+	}
+	char line[MAXLINESIZE];
+
+	while (! feof(pipe) )
+	{
+	    if ( fgets ( line, MAXLINESIZE, pipe ) == NULL )
+                  break;
+
+	    std::string line_stl ( line );
+		
+	    line_stl = StringTools::chomp (line_stl);  
+
+	    files.push_back ( line_stl );
+	}
+
+	pclose ( pipe );
+
+	std::sort ( files.begin(), files.end() );
+}
+	
+std::string FileMgt::createTempFile ( const std::string & templatefn )
+{
+    int max_iterations = 1024;
+    int iteration = 0;
+    char fn[1024];
+    char subst[1024];
+    int pid = (int)getpid();
+    struct stat statbuf;
+    int statval = -1;
+    int fd = -1;
+
+    //srand(time(NULL));
+
+    do {
+		long id = rand() % 1000000000;
+		snprintf( subst, 1023, "%04d_%010ld", pid, id );
+		snprintf( fn, 1023, templatefn.c_str(), subst );
+		statval = stat( fn, &statbuf );
+		iteration++;
+
+		if ( statval != 0 )
+		{
+			fd = creat (fn, 0600 );
+			close(fd);
+		}
+		
+	} while ( (fd < 0) && (iteration < max_iterations) );
+
+	if ( fd < 0 ) 
+	{
+		string errormessage = "FileMgt::createTempFile: FATAL ERROR unable to create temporary filename with template "+templatefn+".\n";
+		fprintf (stderr, errormessage.c_str());
+		throw (errormessage.c_str());
+	}
+
+    return string(fn);
+}
+	
+void FileMgt::deleteTempFile ( const std::string & tempfile )
+{
+    if ( unlink(tempfile.c_str()) != 0 )
+    {
+		string errormessage = "FileMgt::deleteTempFile: FATAL ERROR removing "+tempfile+".\n";
+		fprintf (stderr, errormessage.c_str());
+		throw (errormessage.c_str());
+    }
+}
+
+bool FileMgt::fileExists ( const std::string & file )
+{
+    struct stat info;
+    int result = stat ( file.c_str(), &info );
+
+    return ( result == 0 );
+}

+ 52 - 0
core/basics/FileMgt.h

@@ -0,0 +1,52 @@
+/**
+* @file FileMgt.h
+* @brief Misc file management utilities
+* @author Erik Rodner
+* @date 10/26/2007
+*/
+#ifndef FILEMGTINCLUDE
+#define FILEMGTINCLUDE
+
+#include <vector>
+#include <string>
+
+
+namespace NICE {
+
+/** @brief Misc file management utilities */
+class FileMgt
+{
+
+  protected:
+
+  public:
+
+    /** collect all files in a directory (including all subdirectories
+        @param files resulting list of files
+        @param dir input directory
+    */
+    static void DirectoryRecursive ( std::vector<std::string> & files, const std::string & dir );
+
+    /** create a temporary file using a template prefix
+        @param templatefn template prefix of the temporary filename
+        @return generated temporary filename
+    */
+    static std::string createTempFile ( const std::string & templatefn );
+
+    /** delete a temporary filename
+        @param tempfile name of the file which will be deleted
+    */
+    static void deleteTempFile ( const std::string & tempfile );
+
+    /** returns true if a file exists
+        @param file input filename
+        @return true if the file exists
+    */
+    static bool fileExists ( const std::string & file );
+
+};
+
+
+} // namespace
+
+#endif

+ 139 - 0
core/basics/FileName.cpp

@@ -0,0 +1,139 @@
+#include "core/basics/FileName.h"
+#include <sys/stat.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+
+using namespace std;
+
+namespace NICE {
+
+FileName::FileName() {
+}
+
+FileName::FileName(const std::string& _fileName)
+    : fileName(_fileName) {
+}
+
+FileName::FileName(const char* _fileName)
+    : fileName(_fileName) {
+}
+
+FileName::FileName(const FileName& _fileName)
+    : fileName(_fileName.str()) {
+}
+
+FileName& FileName::operator=(const FileName& _fileName) {
+  fileName = _fileName.str();
+  return *this;
+}
+
+FileName& FileName::operator=(const std::string& _fileName) {
+  fileName = _fileName;
+  return *this;
+}
+
+FileName& FileName::operator=(const char* _fileName) {
+  fileName = _fileName;
+  return *this;
+}
+
+FileName::~FileName() {
+}
+
+const string& FileName::str() const {
+  return fileName;
+}
+
+FileName::operator const std::string&() const {
+  return str();
+}
+
+FileName::operator const char*() const {
+  return str().c_str();
+}
+
+FileName FileName::extractPath() const {
+  int pos = (int)fileName.find_last_of('/');
+  if (pos < 0) {
+    return FileName("");
+  } else {
+    return FileName(fileName.substr(0, pos + 1));
+  }
+}
+
+FileName FileName::extractFileName() const {
+  int pos = (int)fileName.find_last_of('/');
+  if (pos < 0) {
+    return FileName(fileName);
+  } else {
+    return FileName(fileName.substr(pos + 1));
+  }
+}
+
+FileName FileName::extractExtension() const {
+  int pos = (int)fileName.find_last_of('.');
+  if (pos < 0) {
+    return FileName("");
+  } else {
+    return FileName(fileName.substr(pos));
+  }
+}
+
+void FileName::removeExtension() {
+  int pos = (int)fileName.find_last_of('.');
+  if (pos > 0) {
+    fileName.erase(pos);
+  }
+}
+
+void FileName::addSlash() {
+  if (fileName.length() == 0) {
+    return;
+  }
+  
+  if (fileName[fileName.length() - 1] != '/') {
+    fileName += "/";
+  }
+}
+
+void FileName::removeSlash() {
+  if (fileName[fileName.length() - 1] == '/') {
+    fileName.erase(fileName.end() - 1);
+  }
+}
+
+void FileName::setExtension(const std::string& extension) {
+  if (extractExtension().str() != extension) {
+    fileName += extension;
+  }
+}
+
+bool FileName::fileExists() const {
+  struct stat my_stat;
+  return (stat(fileName.c_str(), &my_stat) == 0);
+}
+
+bool FileName::isDirectory() const {
+  struct stat my_stat;
+  if (stat(fileName.c_str(), &my_stat) != 0) {
+    return false;
+  } else {
+    return ((my_stat.st_mode & S_IFDIR) != 0);
+  }
+}
+
+void FileName::createDirectory() const {
+  if (fileName.length() == 0) {
+    return;
+  }
+
+  string command = string("mkdir -p ") + fileName;
+  system(command.c_str());
+}
+
+void FileName::deleteFile() const {
+  remove(fileName.c_str());
+}
+
+} // namespace

+ 155 - 0
core/basics/FileName.h

@@ -0,0 +1,155 @@
+#ifndef FILENAME_H
+#define FILENAME_H
+
+#include <string>
+
+namespace NICE {
+  
+/**
+ * Represents a file name.
+ * Supports special string and file operations.
+ * 
+ * @author Ferid Bajramovic (ferid [dot] bajramovic [at] informatik [dot] uni-jena [dot] de)
+ */
+class FileName {
+public:
+  /**
+   * Constructor: empty filename.
+   */
+  FileName();
+
+  /**
+   * Constructor.
+   * @param _fileName initial file name
+   */
+	FileName(const std::string& _fileName);
+
+  /**
+   * Constructor.
+   * @param _fileName initial file name
+   */
+  FileName(const char* _fileName);
+  
+  /**
+   * Copy-Constructor.
+   */
+  FileName(const FileName& _fileName);
+  
+  /**
+   * Assignment.
+   */
+  FileName& operator=(const FileName& _fileName);
+
+  /**
+   * Assignment.
+   */
+  FileName& operator=(const std::string& _fileName);
+
+  /**
+   * Assignment.
+   */
+  FileName& operator=(const char* _fileName);
+  
+	virtual ~FileName();
+  
+  /**
+   * Convert to \c string.
+   * @return the file name (as \c string)
+   */
+  const std::string& str() const;
+
+  /**
+   * Convert (cast) to <tt>char *</tt>.
+   * @return the file name (as <tt>char *</tt>)
+   */
+  operator const char*() const;
+
+  /**
+   * Convert (cast) to \c string.
+   * @return the file name (as \c string)
+   */
+  operator const std::string&() const;
+  
+  /**
+   * Set the FileName to \c s.
+   * @param s new filename
+   */
+  inline void set(const std::string& s) { fileName = s; }
+
+  /**
+   * Extract the path (including the last slash '/').
+   * Example: <tt> FileName("/a/b/c/file.txt").extractPath()</tt>
+   *          returns "/a/b/c/"
+   * @return the path
+   */
+  FileName extractPath() const;
+
+  /**
+   * Extract the file name (name and extension, no path)
+   * Example: <tt>FileName("/a/b/c/file.txt").extractFileName()</tt>
+   *          returns "file.txt"
+   * @return file name without path
+   */
+  FileName extractFileName() const;
+
+  /**
+   * Extract the extension (everything from the last dot '.', inclusive)
+   * Example: <tt>FileName("/a/b/c/file.txt").extractExtension()</tt>
+   *          returns ".txt"
+   * @return the file extension
+   */
+  FileName extractExtension() const;
+  
+  /**
+   * Remove the extension if one exists (everything from the last dot '.', inclusive)
+   */
+  void removeExtension();
+  
+  /**
+   * Add a slash '/' at the end if there is non
+   * (except when the FileName is empty "")
+   */
+  void addSlash();
+
+  /**
+   * Remove a slash '/' at the end if there is one
+   */
+  void removeSlash();
+  
+  /**
+   * Add \c extension as file name extension,
+   * except if the file name extension is already \c extension.
+   * @param extension The new file name extension
+   *        (should contain a leading dot ".")
+   */
+   void setExtension(const std::string& extension);
+  
+  /**
+   * Create a directory named as this FileName.
+   */
+  void createDirectory() const;
+  
+  /**
+   * Does this filename exist (i.e. a file with this name)?
+   * @return true if the file exists
+   */
+  bool fileExists() const;
+
+  /**
+   * Is this filename a directory?
+   * @return true if it's directory
+   */
+  bool isDirectory() const;
+  
+  /**
+   * Delete the file (does not work on directories).
+   */
+  void deleteFile() const;
+   
+private:
+  //! stores the file name
+  std::string fileName;
+};
+
+} // namespace
+#endif // FILENAME_H

+ 33 - 0
core/basics/FrameRateCounter.cpp

@@ -0,0 +1,33 @@
+/*
+ * NICE-Core - efficient algebra and computer vision methods
+ *  - libfbasics - library of some basic tools
+ * See file License for license information.
+ */
+#include "core/basics/FrameRateCounter.h"
+
+namespace NICE {
+
+FrameRateCounter::FrameRateCounter(unsigned int lookBack)
+    : m_lookBack(lookBack), m_counter(0), m_frameRate(0.0) {
+  reset();
+}
+
+FrameRateCounter::~FrameRateCounter() {
+}
+
+void FrameRateCounter::newFrame() {
+  m_counter++;
+  if (m_counter == m_lookBack) {
+    m_timer.stop();
+    m_timer.start();
+    m_frameRate = double(m_lookBack) / double(m_timer.getLastAbsolute());
+    m_counter = 0;
+  }
+}
+
+void FrameRateCounter::reset() {
+  m_timer.start();
+}
+
+} // namespace
+

+ 59 - 0
core/basics/FrameRateCounter.h

@@ -0,0 +1,59 @@
+/*
+ * NICE-Core - efficient algebra and computer vision methods
+ *  - libfbasics - library of some basic tools
+ * See file License for license information.
+ */
+#ifndef _FRAMERATECOUNTER_H_
+#define _FRAMERATECOUNTER_H_
+
+
+#include <string>
+#include <core/basics/Timer.h>
+
+namespace NICE {
+
+/**
+ * Frame rate counter: compute frames per second.
+ */
+class FrameRateCounter {
+public:
+  /**
+   * 
+   */
+  FrameRateCounter(unsigned int lookBack = 30);
+
+  ~FrameRateCounter();
+  
+  /**
+   * Reset measurements.
+   */
+  void reset();
+  
+  /**
+   * A new frame.
+   */
+  void newFrame();
+  
+  /**
+   * Frame rate in seconds (FPS).
+   */
+  inline double getFrameRate() const {
+    return m_frameRate;
+  }
+  
+  /**
+   * The number of calls to \c newFrame().
+   */
+  inline int getCounter() const {
+    return m_counter;
+  }
+
+private:
+  Timer m_timer;
+  unsigned int m_lookBack;
+  unsigned int m_counter;
+  double m_frameRate;
+};
+
+} // namespace
+#endif // _FRAMERATECOUNTER_H_

+ 21 - 0
core/basics/Log.cpp

@@ -0,0 +1,21 @@
+/*
+ * NICE-Core - efficient algebra and computer vision methods
+ *  - libfbasics - library of some basic tools
+ * See file License for license information.
+ */
+#include "Log.h"
+
+namespace NICE {
+  
+Log Log::_debugLog(std::cerr);
+Log Log::_errorLog(std::cerr);
+Log Log::_timingLog(std::cerr);
+Log Log::_detailLog(std::cerr);
+Log Log::_resultLog(std::cout);
+
+std::stringstream Log::dummy;
+  
+Log::~Log() {
+}
+
+} // namespace

+ 87 - 0
core/basics/Log.h

@@ -0,0 +1,87 @@
+/*
+ * NICE-Core - efficient algebra and computer vision methods
+ *  - libfbasics - library of some basic tools
+ * See file License for license information.
+ */
+#ifndef _LOG_H_
+#define _LOG_H_
+
+#include <iostream>
+#include <sstream>
+
+namespace NICE {
+
+/**
+ * A simple Logging mechanism.
+ * \note Interface might change in future versions!
+ */
+class Log { //: public std::ostream<char> {
+public:
+	inline Log(std::ostream& _target = std::cerr)
+         : target(&_target), quiet(false) {}
+	virtual ~Log();
+
+//  inline static Log& global() {
+//    return globalLog;
+//  }
+//
+//  inline static Log& error() {
+//    return globalLog;
+//  }
+
+  //! for debug messages
+  inline static std::ostream& debug() { return _debugLog(); }
+
+  //! for errors
+  inline static std::ostream& error() { return _errorLog(); }
+
+  //! for timing data
+  inline static std::ostream& timing() { return _timingLog(); }
+
+  //! for detailed results
+  inline static std::ostream& detail() { return _detailLog(); }
+
+  //! for main results (defaults to std::cout, not std::cerr)
+  inline static std::ostream& result() { return _resultLog(); }
+
+  //! for debug messages
+  inline static Log& debugLog() { return _debugLog; }
+
+  //! for errors
+  inline static Log& errorLog() { return _errorLog; }
+
+  //! for timing data
+  inline static Log& timingLog() { return _timingLog; }
+
+  //! for detailed results
+  inline static Log& detailLog() { return _detailLog; }
+
+  //! for main results (defaults to std::cout, not std::cerr)
+  inline static Log& resultLog() { return _resultLog; }
+
+  inline std::ostream& operator() () {
+    if (quiet) {
+      return dummy;
+    } else {
+      return *target;
+    }
+  }
+
+  inline void setQuiet(const bool _quiet = true) {
+    quiet = _quiet;
+  }
+
+private:
+  static Log _debugLog;
+  static Log _errorLog;
+  static Log _timingLog;
+  static Log _detailLog;
+  static Log _resultLog;
+  static std::stringstream dummy;
+
+  std::ostream* target;
+  bool quiet;
+};
+
+} // namespace
+#endif //_LOG_H_

+ 8 - 0
core/basics/Makefile

@@ -0,0 +1,8 @@
+#TARGETS_FROM:=$(notdir $(patsubst %/,%,$(shell pwd)))/$(TARGETS_FROM)
+#$(info recursivly going up: $(TARGETS_FROM) ($(shell pwd)))
+
+all:
+
+%:
+	$(MAKE) TARGETS_FROM=$(notdir $(patsubst %/,%,$(shell pwd)))/$(TARGETS_FROM) -C .. $@
+

+ 103 - 0
core/basics/Makefile.inc

@@ -0,0 +1,103 @@
+# LIBRARY-DIRECTORY-MAKEFILE
+# conventions:
+# - all subdirectories containing a "Makefile.inc" are considered sublibraries
+#   exception: "progs/" and "tests/" subdirectories!
+# - all ".C", ".cpp" and ".c" files in the current directory are linked to a
+#   library
+# - the library depends on all sublibraries 
+# - the library name is created with $(LIBNAME), i.e. it will be somehow
+#   related to the directory name and with the extension .a
+#   (e.g. lib1/sublib -> lib1_sublib.a)
+# - the library will be added to the default build list ALL_LIBRARIES
+
+# --------------------------------
+# - remember the last subdirectory
+#
+# set the variable $(SUBDIR) correctly to the current subdirectory. this
+# variable can be used throughout the current makefile.inc. The many 
+# SUBDIR_before, _add, and everything are only required so that we can recover
+# the previous content of SUBDIR before exitting the makefile.inc
+
+SUBDIR_add:=$(dir $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)))
+SUBDIR_before:=$(SUBDIR)
+SUBDIR:=$(strip $(SUBDIR_add))
+SUBDIR_before_$(SUBDIR):=$(SUBDIR_before)
+ifeq "$(SUBDIR)" "./"
+SUBDIR:=
+endif
+
+# ------------------------
+# - include subdirectories
+#
+# note the variables $(SUBDIRS_OF_$(SUBDIR)) are required later on to recover
+# the dependencies automatically. if you handle dependencies on your own, you
+# can also dump the $(SUBDIRS_OF_$(SUBDIR)) variable, and include the
+# makefile.inc of the subdirectories on your own...
+
+SUBDIRS_OF_$(SUBDIR):=$(patsubst %/Makefile.inc,%,$(wildcard $(SUBDIR)*/Makefile.inc))
+include $(SUBDIRS_OF_$(SUBDIR):%=%/Makefile.inc)
+
+# ----------------------------
+# - include local dependencies
+#
+# you can specify libraries needed by the individual objects or by the whole
+# directory. the object specific additional libraries are only considered
+# when compiling the specific object files
+# TODO: update documentation...
+
+-include $(SUBDIR)libdepend.inc
+
+$(foreach d,$(filter-out %progs %tests,$(SUBDIRS_OF_$(SUBDIR))),$(eval $(call PKG_DEPEND_INT,$(d))))
+
+# ---------------------------
+# - objects in this directory
+#
+# the use of the variable $(OBJS) is not mandatory. it is mandatory however
+# to update $(ALL_OBJS) in a way that it contains the path and name of
+# all objects. otherwise we can not include the appropriate .d files.
+
+OBJS:=$(patsubst %.cpp,$(OBJDIR)%.o,$(notdir $(wildcard $(SUBDIR)*.cpp))) \
+      $(patsubst %.C,$(OBJDIR)%.o,$(notdir $(wildcard $(SUBDIR)*.C))) \
+	  $(shell grep -ls Q_OBJECT $(SUBDIR)*.h | sed -e's@^@/@;s@.*/@$(OBJDIR)moc_@;s@\.h$$@.o@') \
+      $(patsubst %.c,$(OBJDIR)%.o,$(notdir $(wildcard $(SUBDIR)*.c)))
+ALL_OBJS += $(OBJS)
+
+# ----------------------------
+# - binaries in this directory
+#
+# output of binaries in this directory. none of the variables has to be used.
+# but everything you add to $(ALL_LIBRARIES) and $(ALL_BINARIES) will be
+# compiled with `make all`. be sure again to add the files with full path.
+
+LIBRARY_BASENAME:=$(call LIBNAME,$(SUBDIR))
+ifneq "$(SUBDIR)" ""
+ALL_LIBRARIES+=$(LIBDIR)$(LIBRARY_BASENAME).$(LINK_FILE_EXTENSION)
+endif
+
+# ---------------------
+# - binary dependencies
+#
+# there is no way of determining the binary dependencies automatically, so we
+# follow conventions. the current library depends on all sublibraries.
+# all other dependencies have to be added manually by specifying, that the
+# current .pc file depends on some other .pc file. binaries depending on
+# libraries should exclusivelly use the .pc files as well.
+
+ifeq "$(SKIP_BUILD_$(OBJDIR))" "1"
+$(LIBDIR)$(LIBRARY_BASENAME).a:
+else
+$(LIBDIR)$(LIBRARY_BASENAME).a:$(OBJS) \
+	$(call PRINT_INTLIB_DEPS,$(PKGDIR)$(LIBRARY_BASENAME).a,.$(LINK_FILE_EXTENSION))
+endif
+
+$(PKGDIR)$(LIBRARY_BASENAME).pc: \
+	$(call PRINT_INTLIB_DEPS,$(PKGDIR)$(LIBRARY_BASENAME).pc,.pc)
+
+# -------------------
+# - subdir management
+#
+# as the last step, always add this line to correctly recover the subdirectory
+# of the makefile including this one!
+
+SUBDIR:=$(SUBDIR_before_$(SUBDIR))
+

+ 42 - 0
core/basics/NonCopyable.h

@@ -0,0 +1,42 @@
+#ifndef _FBASICS_NONCOPYABLE_H_
+#define _FBASICS_NONCOPYABLE_H_
+
+#include <memory>
+
+// Note: this file is taken from the C++ Boost library (with minor adaptations).
+
+/**
+ * The namespace of NICE.
+ */
+namespace NICE {
+
+// protection from unintended ADL
+namespace noncopyable_ {
+  /**
+   * Private copy constructor and copy assignment ensure classes derived from
+   * class NonCopyable cannot be copied.
+   *
+   * @note
+   *  Contributed by Dave Abrahams
+   *
+   *  (C) Copyright Beman Dawes 1999-2003. Distributed under the Boost
+   *  Software License, Version 1.0. (See accompanying file
+   *  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+   *
+   *  See http://www.boost.org/libs/utility for documentation.
+   */
+  class NonCopyable {
+   protected:
+      NonCopyable() {}
+      ~NonCopyable() {}
+   private:  // emphasize the following members are private
+      NonCopyable( const NonCopyable& );
+      const NonCopyable& operator=( const NonCopyable& );
+  };
+} // namespace noncopyable_
+
+typedef noncopyable_::NonCopyable NonCopyable;
+
+} // namespace
+
+#endif // _FBASICS_NONCOPYABLE_H_

+ 23 - 0
core/basics/Observable.cpp

@@ -0,0 +1,23 @@
+#include "core/basics/Observable.h"
+
+namespace NICE {
+
+void Observable::notifyObservers() {
+  for (unsigned int i = 0; i < observers.size(); i++) {
+    observers[i]->notified();
+  }
+}
+
+void Observable::removeObserver(Observer* observer) {
+  for (std::vector<Observer*>::iterator iter = observers.begin();
+       iter != observers.end();
+       ++iter) {
+    if (*iter == observer) {
+      observers.erase(iter);
+      --iter;
+      break;
+    }
+  }
+}
+
+} // namespace

+ 39 - 0
core/basics/Observable.h

@@ -0,0 +1,39 @@
+#ifndef _OBSERVABLE_FBASICS_H
+#define _OBSERVABLE_FBASICS_H
+
+#include <vector>
+#include <core/basics/Observer.h>
+
+namespace NICE {
+  
+/**
+ * Observable as in Observer-pattern.
+ * 
+ * @author Ferid Bajramovic (ferid [dot] bajramovic [at] informatik [dot] uni-jena [dot] de)
+ */
+class Observable {
+public:
+  //! notify all observers
+  void notifyObservers();
+
+  /**
+   * Add an Observer (Ownership NOT taken.)
+   */
+  inline void addObserver(Observer* observer) {
+    observers.push_back(observer);
+    observer->setObserved(this);
+  }
+
+  /**
+   * Remove an Observer.
+   * @note If the Observer has been added multiple times,
+   *       all entries will be removed.
+   */
+  void removeObserver(Observer* observer);
+  
+private:
+  std::vector<Observer*> observers;
+};
+
+} // namespace
+#endif // _OBSERVABLE_FBASICS_H

+ 11 - 0
core/basics/Observer.cpp

@@ -0,0 +1,11 @@
+#include "core/basics/Observer.h"
+
+namespace NICE {
+
+Observer::~Observer() {
+  if (observed != NULL) {
+    observed->removeObserver(this);
+  }
+}
+
+} // namespace

+ 43 - 0
core/basics/Observer.h

@@ -0,0 +1,43 @@
+#ifndef _OBSERVER_FBASICS_H
+#define _OBSERVER_FBASICS_H
+
+#include <string>
+
+namespace NICE {
+
+class Observable;
+  
+/**
+ * Base class for Observer as in Observer-pattern.
+ * 
+ * @author Ferid Bajramovic (ferid [dot] bajramovic [at] informatik [dot] uni-jena [dot] de)
+ */
+class Observer {
+public:
+  inline Observer() : observed(NULL) {}
+
+  virtual ~Observer();
+
+protected:
+  inline Observable* getObserved() const { return observed; }
+
+  /**
+   * Called by Observable when its state has changed.
+   */
+  virtual void notified() = 0;
+  
+private:
+  Observable* observed;
+  
+  inline void setObserved(Observable* _observed) {
+    observed = _observed;
+  }
+  
+  friend class Observable;
+};
+
+} // namespace
+
+#include <core/basics/Observable.h>
+
+#endif // _OBSERVER_FBASICS_H

+ 135 - 0
core/basics/Persistent.h

@@ -0,0 +1,135 @@
+#ifndef PERSISTENTINCLUDE
+#define PERSISTENTINCLUDE
+
+#include <iostream>
+#include <sstream>
+#include <string>
+#include <fstream>
+#include <algorithm>
+
+#include "core/basics/Exception.h"
+
+namespace NICE {
+
+DEFINE_NICE_EXCEPTION ( IOException )
+
+ /** 
+ * @class Persistent
+ * @brief Persistent interface inspired by EGST
+ * @author 
+ */ 
+ 
+class Persistent {
+
+ 
+  public:
+    // Interface specifications
+    virtual void restore ( std::istream & is, int format = 0 ) = 0;
+    virtual void store ( std::ostream & os, int format = 0 ) const = 0;
+    virtual void clear () = 0;
+
+
+    // Provided functions and overloaded stream operators
+    virtual ~Persistent () {};
+    
+    // just to prevent senseless compiler warnings
+    Persistent() {};
+
+    inline std::ostream& operator>> ( std::ostream& os )
+    {
+      store ( os );
+      return os;
+    }
+
+    inline std::istream& operator<< ( std::istream& is )
+    {
+      clear ();
+      restore ( is );
+      return is;
+    }
+
+    inline std::istream& operator>= ( std::istream& is )
+    {
+      restore ( is );
+      return is;
+    }
+
+    inline std::string & operator<< ( std::string& s )
+    {
+      std::ostringstream os;
+      store ( os );
+      s = os.str();
+      return s;
+    }
+
+    inline const std::string & operator>> ( const std::string & s )
+    {
+      std::istringstream is ( s );
+      clear ();
+      restore ( is );
+      return s;
+    }
+
+    inline const std::string & operator>= ( const std::string & s )
+    {
+      std::istringstream is ( s );
+      restore ( is );
+      return s;
+    }
+
+
+    /** read */
+    virtual inline void read ( const std::string& s, int format = 0 )
+    {
+      std::ifstream ifs ( s.c_str(), std::ios::in );
+
+      if ( ! ifs.is_open() )
+        fthrow ( IOException, "Persistent: unable to read data file " + s + " !!\n" );
+
+      clear();
+      restore ( ifs, format );
+
+      ifs.close();
+    }
+
+    virtual inline void load ( const std::string& s, int format = 0 )
+    {
+      read ( s, format );
+    }
+
+
+    virtual inline void readWithoutOverwrite ( const std::string& s, int format = 0 )
+    {
+      std::ifstream ifs ( s.c_str(), std::ios::in );
+
+      if ( ! ifs.is_open() )
+        fthrow ( IOException, "Persistent: unable to read data file " + s + " !!\n" );
+
+      restore ( ifs, format );
+
+      ifs.close();
+    }
+
+    virtual inline void save ( const std::string& s, int format = 0 ) const
+    {
+      std::ofstream ofs ( s.c_str(), std::ios::out );
+
+      if ( ! ofs.is_open() )
+        fthrow ( IOException, "Persistent: unable to save data file " + s + " !!\n" );
+
+      store ( ofs, format );
+
+      ofs.close();
+    }
+
+    virtual inline void write ( const std::string& s, int format = 0 ) const
+    {
+      save ( s, format );
+    }
+
+};
+
+
+} // namespace
+
+#endif

+ 135 - 0
core/basics/ResourceStatistics.cpp

@@ -0,0 +1,135 @@
+/** 
+* @file ResourceStatistics.cpp
+* @brief Iteratively solving linear equation systems with the symmetric LQ (SYMMLQ) method using Lanczos process
+* @author Paul Bodesheim
+* @date 03/02/2012 (dd/mm/yyyy)
+
+*/
+
+#include "ResourceStatistics.h"
+
+using namespace NICE;
+using namespace std;
+
+ResourceStatistics::ResourceStatistics(int _mode)
+{
+  mode = _mode;
+}
+      
+ResourceStatistics::~ResourceStatistics()
+{
+}
+
+void ResourceStatistics::getMaximumMemory(long & memory)
+{
+  int check = getrusage(mode,&memoryStatistics);
+  
+  if ( check == -1 )
+  {
+    fthrow(Exception, "ResourceStatistics::getMaximumMemory:  getrusage failed");
+    return;
+  
+  } else if ( check == 0 )
+  {
+    
+    memory = memoryStatistics.ru_maxrss;
+    return;
+    
+  } else
+  {
+    fthrow(Exception, "ResourceStatistics::getMaximumMemory:  unexpected flag");
+    return;     
+    
+  }
+
+}
+    
+
+void ResourceStatistics::getUserCpuTime(double & time)
+{
+  int check = getrusage(mode,&memoryStatistics);
+  
+  if ( check == -1 )
+  {
+    fthrow(Exception, "ResourceStatistics::getUserCpuTime:  getrusage failed");
+    return;
+  
+  } else if ( check == 0 )
+  {
+    
+    double sec = (double) memoryStatistics.ru_utime.tv_sec;
+    double msec = (double) memoryStatistics.ru_utime.tv_usec;
+    time = sec + (msec/1e6);
+    return;
+    
+  } else
+  {
+    fthrow(Exception, "ResourceStatistics::getUserCpuTime:  unexpected flag");
+    return;     
+    
+  }
+
+}
+    
+
+void ResourceStatistics::getSystemCpuTime(double & time)
+{
+  int check = getrusage(mode,&memoryStatistics);
+  
+  if ( check == -1 )
+  {
+    fthrow(Exception, "ResourceStatistics::getSystemCpuTime:  getrusage failed");
+    return;
+  
+  } else if ( check == 0 )
+  {
+    
+    double sec = (double) memoryStatistics.ru_stime.tv_sec;
+    double msec = (double) memoryStatistics.ru_stime.tv_usec;
+    time = sec + (msec/1e6);
+    return;
+    
+  } else
+  {
+    fthrow(Exception, "ResourceStatistics::getSystemCpuTime:  unexpected flag");
+    return;     
+    
+  } 
+
+}
+
+void ResourceStatistics::getStatistics(long & memory, double & userCpuTime, double & systemCpuTime)
+{
+  int check = getrusage(mode,&memoryStatistics);
+  
+  if ( check == -1 )
+  {
+    fthrow(Exception, "ResourceStatistics::getStatistics:  getrusage failed");
+    return;
+  
+  } else if ( check == 0 )
+  {
+    double sec, msec;
+    
+    memory = memoryStatistics.ru_maxrss;
+    
+    sec = (double) memoryStatistics.ru_utime.tv_sec;
+    msec = (double) memoryStatistics.ru_utime.tv_usec;
+    userCpuTime = sec + (msec/1e6);    
+    
+    sec = (double) memoryStatistics.ru_stime.tv_sec;
+    msec = (double) memoryStatistics.ru_stime.tv_usec;
+    systemCpuTime = sec + (msec/1e6);
+    
+    return;
+    
+  } else
+  {
+    fthrow(Exception, "ResourceStatistics::getStatistics:  unexpected flag");
+    return;     
+    
+  }   
+  
+  
+  
+}

+ 77 - 0
core/basics/ResourceStatistics.h

@@ -0,0 +1,77 @@
+/** 
+* @file ResourceStatistics.h
+* @author Paul Bodesheim
+* @date 03/02/2012 (dd/mm/yyyy)
+
+*/
+#ifndef _NICE_ResourceStatistics_INCLUDE
+#define _NICE_ResourceStatistics_INCLUDE
+
+#include <sys/time.h>
+#include <sys/resource.h>
+#include <core/basics/Exception.h>
+
+namespace NICE {
+  
+/** @class ResourceStatistics
+ * Interface that provides statistics for runtime and memory usage based on the function "getrusage" of <sys/resource.h>
+ *
+ * @author Paul Bodesheim
+ */
+class ResourceStatistics
+{
+
+    private:
+      
+      // both variables are necessary for the function "getrusage"
+      int mode; 
+      struct rusage memoryStatistics;
+
+    public:
+
+    /**
+    * @brief simple constructor 
+    * 
+    * @param _mode mode for "getrusage", it is recommended to use the default value RUSAGE_SELF
+    */
+    ResourceStatistics(int _mode = RUSAGE_SELF);
+      
+    /**
+    * @brief simple destructor 
+    */
+    ~ResourceStatistics();
+
+    /**
+     * @brief get maximum memory (maximum resident set size) measured in kilo-bytes 
+     *
+     * @param memory maximum memory measured in KB
+     **/
+    void getMaximumMemory(long & memory);
+    
+    /**
+     * @brief get the user CPU time used (seconds)
+     *
+     * @param time user cpu time measured in seconds
+     **/
+    void getUserCpuTime(double & time);
+    
+    /**
+     * @brief get the system CPU time used (seconds)
+     *
+     * @param time system cpu time measured in seconds
+     **/
+    void getSystemCpuTime(double & time); 
+    
+    /**
+     * @brief get three measures of your program: maximum memory, user CPU time, system CPU time
+     *
+     * @param memory maximum memory measured in KB
+     * @param userCpuTime user cpu time measured in seconds
+     * @param systemCpuTime system cpu time measured in seconds
+     **/
+    void getStatistics(long & memory, double & userCpuTime, double & systemCpuTime);
+};
+
+}
+
+#endif

+ 75 - 0
core/basics/RoundToNearest.h

@@ -0,0 +1,75 @@
+#ifndef FBASICS_CASTS_H
+#define FBASICS_CASTS_H
+
+#include <cmath>
+
+namespace NICE {
+
+/// round_to_nearest_cast: cast to the nearest value in the target domain
+template<typename Target, typename Source> Target round_to_nearest_cast(Source x);
+
+
+// Allg. round - functor
+template<typename Target, typename Source>
+struct roundToNearest
+{
+      static  Target cast(Source x) { return static_cast<Target>(x); }
+};
+                                                                                                                                                                     
+// Part. spezialisiert
+template<typename Source>
+struct roundToNearest<long long, Source>
+{
+      static  long long cast(Source x) { return static_cast<long long>(floor(x+0.5)); }
+};
+
+template<typename Source>
+struct roundToNearest<unsigned long long, Source>
+{
+      static unsigned long long cast(Source x) { return static_cast<unsigned long long>(x+0.5); }
+};
+
+template<typename Source>
+struct roundToNearest<long, Source>
+{
+      static  long cast(Source x) { return static_cast<long>(floor(x+0.5)); }
+};
+
+template<typename Source>
+struct roundToNearest<unsigned long, Source>
+{
+      static unsigned long cast(Source x) { return static_cast<unsigned long>(x+0.5); }
+};
+
+template<typename Source>
+struct roundToNearest<int, Source>
+{
+      static  int cast(Source x) { return static_cast<int>(floor(x+0.5)); }
+};
+
+template<typename Source>
+struct roundToNearest<unsigned int, Source>
+{
+      static unsigned int cast(Source x) { return static_cast<unsigned int>(x+0.5); }
+};
+
+template<typename Source>
+struct roundToNearest<char, Source>
+{
+      static  char cast(Source x) { return static_cast<char>(floor(x+0.5)); }
+};
+
+template<typename Source>
+struct roundToNearest<unsigned char, Source>
+{
+      static unsigned char cast(Source x) { return static_cast<unsigned char>(x+0.5); }
+};
+                                                                                                                                                                     
+template<typename Target, typename Source> Target round_to_nearest_cast(Source x)
+{
+        return roundToNearest<Target,Source>::cast(x);
+}
+
+} // namespace NICE
+
+#endif // FBASICS_CASTS_H

+ 119 - 0
core/basics/Streamable.cpp

@@ -0,0 +1,119 @@
+/*
+ * NICE-Core - efficient algebra and computer vision methods
+ *  - libfbasics - library of some basic tools
+ * See file License for license information.
+ */
+/*****************************************************************************/
+#include "core/basics/Streamable.h"
+#include <stdexcept>
+#include <fstream>
+#include <sstream>
+#include <core/basics/gzstream.h>
+#include <core/basics/bzstream.h>
+
+#include "core/basics/Exception.h"
+
+namespace NICE {
+
+const char* GERMAN_LOCALE = "de_DE.utf8";
+const char* US_ENGLISH_LOCALE = "en_US.utf8";
+// const char* US_ENGLISH_LOCALE = "en_US";
+
+// set the global locale to US english at startup
+class __SetLocale__ {
+private:
+  inline __SetLocale__() {
+    std::locale::global(std::locale(US_ENGLISH_LOCALE));
+  }
+  static __SetLocale__ instance;
+};
+
+void Streamable::readFromFile(const char* filename, Format compression)
+{
+  switch(compression) {
+    case ASCII: {
+      std::ifstream file(filename);
+      if (!file.good() || !file.is_open()) {
+        fthrow(Exception, "readFromFile(): could not open file: " << filename);
+      }
+      read(file);
+      file.close();
+      break;
+    }
+#ifdef NICE_USELIB_ZLIB
+    case ASCII_GZ: {
+      igzstream file(filename);
+      if (!file.good()) {
+        fthrow(Exception, "readFromFile(): could not open file: " << filename);
+      }
+      read(file);
+      file.close();
+      break;
+    }
+#endif
+#ifdef NICE_USELIB_BZLIB
+    case ASCII_BZ: {
+      ibzstream file(filename);
+      if (!file.good()) {
+        fthrow(Exception, "readFromFile(): could not open file: " << filename);
+      }
+      read(file);
+      file.close();
+      break;
+    }
+#endif
+    default:
+      fthrow(Exception,
+             "File cannot be read! Compression method not supported.");
+      break;
+  }
+}
+
+void Streamable::writeToFile(const char* filename, Format compression) const
+{
+  switch(compression) {
+    case ASCII: {
+      std::ofstream file(filename);
+      if (!file.good()) {
+        fthrow(Exception, "writeToFile(): could not open file: " << filename);
+      }
+      write(file);
+      file.close();
+      break;
+    }
+#ifdef NICE_USELIB_ZLIB
+    case ASCII_GZ: {
+      ogzstream file(filename);
+      if (!file.good()) {
+        fthrow(Exception, "writeToFile(): could not open file: " << filename);
+      }
+      write(file);
+      file.close();
+      break;
+    }
+#endif
+#ifdef NICE_USELIB_BZLIB
+    case ASCII_BZ: {
+      obzstream file(filename);
+      if (!file.good()) {
+        fthrow(Exception, "writeToFile(): could not open file: " << filename);
+      }
+      write(file);
+      file.close();
+      break;
+    }
+#endif
+    default:
+      fthrow(Exception,
+             "File cannot be written! Compression method not supported.");
+      break;
+  }
+}
+
+std::string Streamable::toString() const {
+  std::stringstream s;
+  s << *this;
+  return s.str();
+}
+
+}; // namespace NICE

+ 115 - 0
core/basics/Streamable.h

@@ -0,0 +1,115 @@
+/*
+ * NICE-Core - efficient algebra and computer vision methods
+ *  - libfbasics - library of some basic tools
+ * See file License for license information.
+ */
+/*****************************************************************************/
+#ifndef _STREAMABLE_FBASICS_H
+#define _STREAMABLE_FBASICS_H
+
+#include <iostream>
+#include <string>
+
+
+namespace NICE {
+
+extern const char* GERMAN_LOCALE;
+extern const char* US_ENGLISH_LOCALE;
+
+/**
+ * Abstract base class for streamable classes.
+ */
+class Streamable {
+public:
+  /**
+   * Format (compression method)
+   */
+  enum Format {
+    /**
+     * Save in ascii format (uncompressed)
+     */
+    ASCII=0,
+    /**
+     * Compress the ascii format with bzip2
+     * (only supported if compiled with bzlib, use \#ifdef NICE_USELIB_BZLIB)
+     */
+    ASCII_BZ=1,
+    /**
+     * Compress the ascii format with gzip
+     * (only supported if compiled with zlib, use \#ifdef NICE_USELIB_ZLIB)
+     */
+    ASCII_GZ=2
+  };
+
+  virtual ~Streamable(){}
+
+  /**
+   * Read this object (class attributes) from \c ostream.
+   * \param stream istream to read elements from
+   */
+  virtual void read(std::istream& stream) = 0;
+
+  /**
+   * Write class atttributes to ostream
+   *  \param stream ostream to write elements to
+   */
+  virtual void write(std::ostream& stream) const = 0;
+
+  /** Read class attributes from a file.
+   * \param filename Name of the file
+   * \param compression file format \see SaveMethod
+   */
+  virtual void readFromFile(const char* filename,
+                            Format compression=ASCII);
+
+  //! see readFromFile(const char *, Format)
+  inline void readFromFile(const std::string& filename,
+                           Format compression=ASCII) {
+    readFromFile(filename.c_str(), compression);
+  }
+
+  /**
+   * Write class attributes to a file.
+   * \param filename Name of the file
+   * \param compression file format \see SaveMethod
+   */
+  virtual void writeToFile(const char* filename,
+                           Format compression=ASCII) const;
+
+  //! see writeToFile(const char *, Format)
+  inline void writeToFile(const std::string& filename,
+                          Format compression=ASCII) const {
+    writeToFile(filename.c_str(), compression);
+  }
+
+  /**
+   * Return a string representing this object.
+   * Default implementation streams the object to a string stream.
+   */
+  virtual std::string toString() const;
+};
+
+inline std::ostream& operator<<(std::ostream &strm, const Streamable &ex) {
+  ex.write(strm);
+  return strm;
+}
+
+inline std::istream& operator>>(std::istream &strm, Streamable &ex) {
+  ex.read(strm);
+  return strm;
+}
+
+inline void writeBool(std::ostream& output, bool b) {
+  int i = (b ? 1 : 0);
+  output << i;
+}
+
+inline bool readBool(std::istream& input) {
+  int i;
+  input >> i;
+  return i != 0;
+}
+
+}; // namespace NICE
+
+#endif /* _STREAMABLE_FBASICS_H */

+ 220 - 0
core/basics/StringTools.cpp

@@ -0,0 +1,220 @@
+/** 
+* @file StringTools.cpp
+// refactor-nice.pl: check this substitution
+// old: * @brief some string handling routines
+* @brief some std::string handling routines
+* @author Erik Rodner
+* @date 19.09.2007
+
+*/
+
+#include <iostream>
+#include <vector>
+#include <string>
+#include <sstream>
+#include <assert.h>
+
+#include "StringTools.h"
+
+#define USE_REGEX_LIB
+#ifdef USE_REGEX_LIB
+#include <regex.h>
+#endif
+
+#include "ossettings.h"
+
+using namespace NICE;
+
+using namespace std;
+
+/** return base of a filename */
+std::string StringTools::baseName(const std::string& str,bool extension)
+{
+     size_t begin = 0;
+     size_t end = str.length() - 1;
+
+     for (size_t i=0; i<str.length(); ++i) {
+          if (str[i] == FILESEP) begin = i+1;
+     }
+     //leave extension iff true
+     if (!extension)
+     {
+          for (size_t i=begin; i<str.length(); ++i) {
+               if (str[i] == '.') end = i-1;
+          }
+     }
+     return str.substr(begin,end - begin + 1);
+}
+
+void StringTools::normalize_string ( std::string & s )
+{
+    size_t j = 0;
+    while ( (j < s.length()) &&
+	    ((s[j] == ' ') || (s[j] == '\t') ) ) j++;
+	
+    int jj = s.length()-1;
+    while ( (jj >= 0) &&
+	    ((s[jj] == ' ') || (s[jj] == ';') ||
+	     (s[jj] == '\t')) ) jj--;
+   
+
+    std::string news = "";
+
+    for ( int k = j ; k <= jj ; k++ )
+    {
+	if ( s[k] != '\t' )
+	    news.push_back (s[k]);
+    }
+
+    s = news;
+}
+
+void StringTools::split ( const std::string & s, char splitChar, vector<string> & list )
+{
+    size_t pos = 0;
+    size_t oldpos = 0;
+
+    while ( (pos = s.find(splitChar,oldpos)) != string::npos )
+    {
+	list.push_back ( s.substr(oldpos, pos-oldpos) );
+	oldpos = pos+1;
+
+	if ( oldpos >= s.length() ) break;
+    }
+
+    if ( oldpos < s.length() )
+	list.push_back ( s.substr(oldpos) );
+
+    for ( vector<string>::iterator i = list.begin(); i != list.end() ; i++ )
+	normalize_string ( *i );
+}
+	
+void StringTools::splitVector ( const std::string & s, char splitChar, NICE::Vector & x )
+{
+    size_t pos = 0;
+    size_t oldpos = 0;
+    vector<double> xdyn;
+
+    double f;
+    while ( (pos = s.find(splitChar,oldpos)) != string::npos )
+    {
+	stringstream sstr;
+	sstr << s.substr(oldpos, pos-oldpos);
+	sstr >> f;
+	xdyn.push_back ( f );
+	oldpos = pos+1;
+
+	if ( oldpos >= s.length() ) break;
+    }
+
+    if ( oldpos < s.length() )
+    {
+	stringstream sstr;
+	sstr << s.substr(oldpos);
+	sstr >> f;
+	xdyn.push_back(f);
+    }
+
+    x = NICE::Vector(xdyn);
+}
+
+void StringTools::trimbounds ( std::string & value, char trimChar )
+{
+    // remove "
+    size_t pos1 = value.find(trimChar);
+    size_t pos2 = value.rfind(trimChar);
+
+    if ( (pos1 != pos2) && 
+	 (pos1 != string::npos) &&
+	 (pos2 != string::npos) )
+    {
+	value.erase( pos1, 1 );
+	value.erase( pos2-1, 1 );
+    }
+}
+
+/** @author Matti Bickel */
+std::string StringTools::trim(string s, const std::string& drop)
+{
+    std::string r=s.erase(s.find_last_not_of(drop)+1);
+    return r.erase(0,r.find_first_not_of(drop));
+}
+
+std::string StringTools::chomp(string s)
+{
+    return trim(trim(s, "\r"), "\n");
+}
+
+bool StringTools::regexSubstitute ( std::string & s, const std::string & regex, const std::string & subst )
+{
+#ifdef USE_REGEX_LIB
+    vector<string> submatches;
+    std::ostringstream os_regex;
+    
+    os_regex << "(.*)" << regex << "(.*)";
+    bool ok = regexMatch ( s, os_regex.str(), submatches );
+
+    if ( ! ok ) return false;
+
+    assert ( submatches.size() >= 3 );
+
+    std::string substc = subst;
+    for ( uint k = 2 ; k < submatches.size()-1 ; k++ )
+    {
+		uint index = k - 1;
+		std::ostringstream os;
+		os << "\\" << index;
+		size_t pos = subst.find(os.str());
+		assert( pos != string::npos );
+		substc.replace ( pos, 2, submatches[k] );
+    }
+
+    s = submatches[1] + substc + submatches[submatches.size()-1];
+
+    return true;
+#else
+	fthrow ( Exception, "You have to install the regex lib to use this function!");
+#endif
+}
+
+bool StringTools::regexMatch ( const string & s, const string & regex )
+{
+    vector<string> submatches;
+    return regexMatch ( s, regex, submatches );
+}
+
+bool StringTools::regexMatch ( const string & s, const string & regex, 
+			 vector<string> & submatches )
+{
+	submatches.clear();
+
+    int    status;
+    regex_t    re;
+    const int max_num_matches = 100;
+    regmatch_t pmatch[max_num_matches];
+
+    if (regcomp(&re, regex.c_str(), REG_EXTENDED) != 0) {
+		fthrow ( Exception, "The regular expression <" << regex << "> is invalid.");
+    }
+
+    status = regexec(&re, s.c_str(), max_num_matches, pmatch, 0);
+
+    if (status != 0) {
+		regfree(&re);
+        return false;
+    }
+
+    for (uint i = 0; !status && i <= re.re_nsub; i++)
+    {
+		char submatch[1024];
+		strncpy (submatch, s.c_str() + pmatch[i].rm_so,
+			pmatch[i].rm_eo - pmatch[i].rm_so);
+	  	submatch[pmatch[i].rm_eo - pmatch[i].rm_so] = '\0';
+		submatches.push_back(submatch);
+    }
+ 
+    regfree(&re);
+    return true;
+}
+
+

+ 142 - 0
core/basics/StringTools.h

@@ -0,0 +1,142 @@
+/** 
+ * @file StringTools.h
+ * @brief some string handling routines
+ * @author Erik Rodner
+ * @date 19.09.2007
+
+ */
+#ifndef STRINGTOOLSINCLUDE
+#define STRINGTOOLSINCLUDE
+
+#include <vector>
+#include <string>
+#include <sstream>
+
+#include <core/vector/VectorT.h>
+
+namespace NICE
+{
+
+/** @brief some string handling routines */
+class StringTools
+{
+public:
+	/** normalize the std::string value, remove leading and
+	 finishing whitespaces, tabulars, a finishing semicolon
+	 @param s input std::string which will be modified
+	 */
+	static void normalize_string(std::string & s);
+
+	/** split a std::string 
+	 @param s input string
+	 @param splitChar character which was used for seperation
+	 @param list resulting list of sub strings
+	 */
+	static void split(const std::string & s, char splitChar, std::vector<
+			std::string> & list);
+
+	/** split a std::string and convert the strings to double values
+	 @param input std::string value
+	 @param splitChar character which was used as a seperation
+	 @param x resulting std::vector of double values
+	 */
+	static void splitVector(const std::string & s, char splitChar,
+			NICE::Vector & x);
+
+	/** remove a leading and a finishing character
+	 @param value input std::string value
+	 @param trimChar e.g.
+	 */
+	static void trimbounds(std::string & value, char trimChar);
+
+	/** chomp off the end-of-line characters 
+	 @param s input and output string
+	 */
+	static std::string chomp(std::string s);
+
+	/** whatever */
+	static std::string trim(std::string s, const std::string& drop = " ");
+
+	/** trims the filename to be without directories, similar to basename in linux
+	 @param str input string
+	 @param extension specifies if output is with extension or not
+	 */
+	static std::string baseName(const std::string& str, bool extension = true);
+
+	/** perform regular expression matching and return true if the string \c s
+	 *  matches the regular expression in \c regex (GNU regex style!). 
+	 */
+	static bool regexMatch(const std::string & s, const std::string & regex);
+
+	/** perform regular expression matching and return true if the string \c s
+	 *  matches the regular expression in \c regex (GNU regex style!), 
+	 *  sub-pattern matches are stored in submatches and denoted with (...) in
+	 *  the regular expression.
+	 *  @note submatches[0] is the whole match and submatches[i] is the i'th sub-pattern match
+	 */
+	static bool regexMatch(const std::string & s, const std::string & regex,
+			std::vector<std::string> & submatches);
+
+	/** substitute a regular expression match with \c subst */
+	static bool regexSubstitute(std::string & s, const std::string & regex,
+			const std::string & subst);
+
+	/** convert a string to another type using stringstream */
+	template<class F>
+	static F convert(const std::string & s);
+
+	/** convert a string to another type using stringstream and returning true on success and
+	 * false if there is a parsing error */
+	template<class F>
+	static bool convert(const std::string & s, F & i);
+
+	/** convert another type to a string using stringstream */
+	template<class F>
+	static std::string convertToString(const F & s);
+
+	/** convert another type to a string using stringstream */
+	template<class F>
+	static std::string convertToString(const F & s, uint precision);
+
+};
+
+// template implementations
+
+template<class F>
+F StringTools::convert(const std::string & s)
+{
+	std::istringstream is(s);
+	F i;
+	is >> i;
+	return i;
+}
+
+template<class F>
+bool StringTools::convert(const std::string & s, F & i)
+{
+	std::istringstream is(s);
+	is >> i;
+	return (!is.fail());
+}
+
+template<class F>
+std::string StringTools::convertToString(const F & s)
+{
+	std::ostringstream os;
+	os << s;
+	return os.str();
+}
+
+template<class F>
+std::string StringTools::convertToString(const F & s, uint precision)
+{
+	std::ostringstream os;
+	os.precision(precision);
+	os.setf(std::ios::fixed,std::ios::floatfield);
+	os << s;
+	return os.str();
+}
+
+} // namespace
+
+#endif

+ 137 - 0
core/basics/StructuredMap.h

@@ -0,0 +1,137 @@
+/** 
+* @file Config.h
+* @brief configuration mgt
+* @author Erik Rodner
+* @date 2006-03-12
+*/
+#ifndef STRUCTUREDINCLUDE
+#define STRUCTUREDINCLUDE
+
+#include <iostream>
+#include <map>
+
+#include <string>
+#include <algorithm>
+#include <functional>
+#include <cctype>
+#include <set>
+
+#include <math.h>
+
+#include "core/basics/Persistent.h"
+  
+
+
+namespace NICE {
+
+template<class ValueType>
+/** This class provides a structured map. */
+class StructuredMap : public NICE::Persistent 
+{
+    protected:
+      typedef typename std::map<std::string, ValueType> MapValueType;
+      typedef typename std::map<std::string, ValueType>::const_iterator MapValueTypeCIterator;
+
+      MapValueType conf;
+
+    public:
+    
+      bool keyExists ( const std::string & block, const std::string & key ) const
+      {
+		  std::string newkey = block + "::" + key;
+		  MapValueTypeCIterator map_i = conf.find(newkey);
+		  return ( map_i != conf.end() );
+      }
+
+      bool find ( const std::string & block, const std::string & key, ValueType & value ) const
+      {
+		  std::string newkey = block + "::" + key;
+		  MapValueTypeCIterator map_i = conf.find(newkey);
+		  if ( map_i == conf.end() ) return false;
+		  value = map_i->second;
+		  return true;
+      }
+
+      void store ( const std::string & block, const std::string & key, const ValueType & value )
+      {
+		  std::string newkey = block + "::" + key;
+		  conf[newkey] = value;
+      }
+
+      void getAll ( const std::string & block, std::map<std::string, ValueType> & list ) const
+      {
+		  // FIXME: optimize this !
+		  for ( MapValueTypeCIterator map_i = conf.begin(); map_i != conf.end() ; map_i++ )
+		  {
+			  std::string key = map_i->first;
+			  ValueType val = map_i->second;
+			  if ( key.find (block + "::") == 0 ) 
+			  {
+			  size_t dpos = key.find_first_of(':', 0);
+			  size_t dend = key.find_first_not_of(':', dpos);
+			  list[key.substr(dend)] = val;
+			  }
+		  }
+      }
+
+      void getAllBlocks ( std::set<std::string> & blocks ) const
+      {
+		  for ( MapValueTypeCIterator map_i = conf.begin(); map_i != conf.end() ; map_i++ )
+		  {
+			  std::string key = map_i->first;
+			  size_t dpos = key.find_first_of(':', 0);
+			  std::string block = key.substr(0,dpos);
+			  if ( blocks.find(block) == blocks.end() )
+			  blocks.insert(block);
+		  }
+      }
+
+      size_t size () const
+      {
+		  return conf.size();
+      }
+
+	  void restore (std::istream & is, int format = 0)
+	  {
+		  fthrow ( Exception, "StructuredMap: restore function of structured map not implemented\n" );
+	  }
+
+      void clear()
+      {
+		  conf.clear();
+      }
+
+      void store ( std::ostream & os, int format = 0 ) const
+      {
+		  std::string lastblock = "";
+		  for ( MapValueTypeCIterator i = conf.begin();
+			i != conf.end();
+			i++ ) 
+		  {
+			  std::string k = i->first;
+			  size_t dpos = k.find_first_of(':', 0);
+			  size_t dend = k.find_first_not_of(':', dpos);
+			  std::string block = k.substr(0,dpos);
+			  std::string key = k.substr(dend);
+			  ValueType value = i->second;
+
+			  if ( block.compare(lastblock) != 0 ) {
+				  os << std::endl << "[" << block << "]" << std::endl;
+			  }
+			  os << key << " = " << value << std::endl;
+
+			  lastblock = block;
+		  }
+      }
+
+	  void copyFrom ( const StructuredMap & map )
+	  {
+		  conf.clear();
+		  conf = map.conf;		  
+	  }
+};
+
+
+} // namespace
+
+#endif

+ 135 - 0
core/basics/Timer.cpp

@@ -0,0 +1,135 @@
+/*
+ * NICE-Core - efficient algebra and computer vision methods
+ *  - libfbasics - library of some basic tools
+ * See file License for license information.
+ */
+#include "core/basics/Timer.h"
+#include <core/basics/Exception.h>
+#include <limits>
+
+namespace NICE {
+
+Timer::Timer() : printToLogWhenDestroyed ( false ), name ( "" ) {
+  reset();
+}
+
+Timer::Timer ( const std::string _name, bool _printToLogWhenDestroyed )
+    : printToLogWhenDestroyed ( _printToLogWhenDestroyed ), name ( _name ) {
+  reset();
+}
+
+Timer::~Timer() {
+  if ( printToLogWhenDestroyed ) {
+    Log::timing() << std::fixed << "Timer " << name << ":"
+    << " process_time=" << getSum()
+    << ", mean=" << getMean()
+    << "; absolute_time=" << getSumAbsolute()
+    << ", mean=" << getMeanAbsolute() << std::endl;
+  }
+}
+
+double Timer::getCurrentAbsoluteTime() const {
+#ifdef LIMUN_AIBO_MODE
+  struct SystemTime t;
+  GetSystemTime ( &t );
+  return double ( t.seconds ) + double ( t.useconds ) * 1e-6;
+#else
+  struct timezone tz;
+  struct timeval tv;
+  gettimeofday ( &tv, &tz );
+  return convertTime ( tv );
+#endif
+}
+
+void Timer::start() {
+  startClock = clock();
+  startTimeAbsolute = getCurrentAbsoluteTime();
+}
+
+void Timer::stop() {
+  const clock_t endClock = clock();
+  double passedClock = double ( endClock ) - double ( startClock );
+  if ( endClock < startClock ) {
+    passedClock += double ( std::numeric_limits<clock_t>::max() );
+  }
+  last = passedClock / double ( CLOCKS_PER_SEC );
+
+  double endTimeAbsolute = getCurrentAbsoluteTime();
+  lastAbsolute = endTimeAbsolute - startTimeAbsolute;
+
+  counter++;
+  sum += last;
+  sumAbsolute += lastAbsolute;
+}
+
+double Timer::getStartTime() const
+{
+  return startTimeAbsolute;
+}
+
+double Timer::getNow()
+{
+#ifdef LIMUN_AIBO_MODE
+  fthrow ( Exception, "Not supported on AIBO." );
+#else
+  struct timeval actTime;
+  struct timezone tz;
+  gettimeofday ( &actTime, &tz );
+  return Timer::convertTime ( actTime );
+#endif
+}
+
+std::string Timer::getNowString() {
+  time_t nowTime = time ( 0 );
+  tm* nowTm = localtime ( &nowTime );
+
+  std::stringstream s;
+  s << ( 1900 + nowTm->tm_year ) << "-" << ( nowTm->tm_mon + 1 )
+  << "-" << nowTm->tm_mday << "-" << nowTm->tm_hour
+  << "-" << nowTm->tm_min << "-" << nowTm->tm_sec;
+
+  return s.str();
+}
+
+long int Timer::getMicroseconds() {
+#ifdef LIMUN_AIBO_MODE
+  fthrow ( Exception, "Not supported on AIBO." );
+#else
+  struct timeval actTime;
+  struct timezone tz;
+  gettimeofday ( &actTime, &tz );
+  return actTime.tv_usec;
+#endif
+}
+
+
+double Timer::getEstimatedEndTime ( double fac ) const
+{
+  double actTime = getCurrentAbsoluteTime();
+  double expected = ( actTime - startTimeAbsolute
+                      + sumAbsolute - lastAbsolute ) * ( fac - 1.0 );
+  return actTime + expected;
+}
+
+std::string Timer::timeToString ( double sec )
+{
+  return Timer::timeToString ( static_cast<time_t> ( sec ) );
+}
+
+std::string Timer::timeToString ( time_t sec )
+{
+  std::string acttime = ctime ( &sec );
+  acttime = acttime.substr ( 0, acttime.size() - 1 );
+  return acttime;
+}
+
+void Timer::reset() {
+  counter = 0;
+  last = 0.0;
+  sum = 0.0;
+  lastAbsolute = 0.0;
+  sumAbsolute = 0.0;
+}
+
+} // namespace
+

+ 249 - 0
core/basics/Timer.h

@@ -0,0 +1,249 @@
+/*
+ * NICE-Core - efficient algebra and computer vision methods
+ *  - libfbasics - library of some basic tools
+ * See file License for license information.
+ */
+#ifndef _FBASICS_TIMER_H_
+#define _FBASICS_TIMER_H_
+
+
+#ifdef LIMUN_AIBO_MODE
+#ifndef PLATFORM_APERIOS
+#define PLATFORM_APERIOS
+#endif
+//#include <MCOOP.h>
+#include <Shared/TimeET.h>
+#else
+#include <ctime>
+#include <sys/time.h>
+#endif
+#include <string>
+#include <core/basics/Log.h>
+
+namespace NICE {
+
+/**
+ * A class to measure CPU time consumption. All times are measured in seconds.
+ * There are currently two measurement techniques refered to as "process time"
+ * and "absolute time". Process time only measures time while the process is
+ * active. Absolute time is indepentent of scheduling, but offers much higher
+ * precision and can measure longer times (see note).
+ * \note On a typical GNU Linux system, process time measurement
+ *       can only handle a maximum of approx 71.5 minutes
+ *       between calls to start() and stop(). Otherwise overflows occur
+ *       and the results are incorrect.
+ */
+class Timer {
+  public:
+    /**
+     * @name Constructors and destructor
+     * \{
+     */
+
+    /**
+     * Create a unnamed timer which will not print results to timing log.
+     */
+    Timer();
+
+    /**
+     * Create a named timer which will (optionally) print results to timing log
+     * Log::timing() when destroyed.
+     */
+    Timer ( const std::string _name, bool _printToLogWhenDestroyed = true );
+
+    ~Timer();
+
+    /**
+     * \}
+     * @name Measuring control.
+     * \{
+     */
+
+    /**
+     * Start time measurement.
+     */
+    void start();
+
+    /**
+     * Stop time measurement.
+     */
+    void stop();
+
+    /**
+     * Reset measurements.
+     */
+    void reset();
+
+    /**
+     * The number of calls to stop() since construction or last call of reset().
+     */
+    inline int getCounter() const {
+      return counter;
+    }
+
+    /**
+     * \}
+     * @name Get measurement results - low resolution process time.
+     * \{
+     */
+
+    /**
+     * Value of the previous measurement in process time.
+     * @return previous measurement
+     */
+    inline double getLast() const {
+      return last;
+    }
+
+    /**
+     * Sum of all measurement (since last \c reset()) in process time.
+     * @return Sum of all measurements
+     */
+    inline double getSum() const {
+      return sum;
+    }
+
+    /**
+     * Mean of the all measurement (since last \c reset()) in process time.
+     * @return Mean of all measurements
+     */
+    inline double getMean() const {
+      return sum / ( double ) counter;
+    }
+
+    /**
+     * \}
+     * @name Get measurement results - high resolution absolute time.
+     * \{
+     */
+
+    /**
+     * Value of the previous measurement in absolute time.
+     * @return previous measurement
+     */
+    inline double getLastAbsolute() const {
+      return lastAbsolute;
+    }
+
+    /**
+     * Sum of all measurement (since last \c reset()) in absolute time.
+     * @return Sum of all measurements
+     */
+    inline double getSumAbsolute() const {
+      return sumAbsolute;
+    }
+
+    /**
+     * Mean of the all measurement (since last \c reset()) in absolute time.
+     * @return Mean of all measurements
+     */
+    inline double getMeanAbsolute() const {
+      return sumAbsolute / ( double ) counter;
+    }
+
+    /**
+     * \}
+     * @name Estimation of finishing time of some task.
+     * \{
+     */
+
+    /**
+     * double value of start time in seconds since Epoch
+     * (00:00:00 UTC, January 1, 1970)
+     * @return double value of start time in sec
+     */
+    double getStartTime() const;
+
+    /**
+     * double value of estimated end time by multiplying the elapsed absolute
+     * sum with the factor \c fac.
+     * @param fac factor to multiply the elapsed absolute time sum
+     * @note use in a loop of i=0...max :  fac = max/(i+1.)
+     * @return estimated end time in seconds since Epoch
+     *         (00:00:00 UTC, January 1, 1970)
+     */
+    double getEstimatedEndTime ( double fac ) const;
+
+    /**
+     * \}
+     * @name Time functions, NOT related to measuring periods of time.
+     * \{
+     */
+
+    /**
+     * Current time in seconds since Epoch (00:00:00 UTC, January 1, 1970).
+     * Precision is up to one microsecond.
+     */
+    static double getNow();
+
+    /**
+     * Get current date and local time as a string of the following format:
+     * yyyy-mm-dd-hh-mm-ss.
+     */
+    static std::string getNowString();
+
+    /**
+     * Get current microseconds - a pretty useless value, but nice for srand().
+     */
+    static long int getMicroseconds();
+
+    /**
+     * convert timeval format to double value of time in seconds since Epoch
+     * (00:00:00 UTC, January 1, 1970)
+     * @return double value of time in seconds
+     */
+    static inline double convertTime ( const struct timeval &time ) {
+      return double ( time.tv_sec ) + double ( time.tv_usec ) * 1e-6;
+    }
+
+    /**
+     * Date string from time since Epoch (00:00:00 UTC, January 1, 1970),
+     * measured in seconds
+     * @ sec seconds since 00:00:00 UTC, January 1, 1970
+     * @return date string
+     */
+    static std::string timeToString ( time_t sec );
+
+    /**
+     * see \c timeToString(time_t)
+     */
+    static std::string timeToString ( double sec );
+
+    /**
+     * \}
+     */
+
+  private:
+    //! Start time of current measurement
+    clock_t startClock;
+
+    //! Start time of current measurement
+    double startTimeAbsolute;
+
+    //! Previous measurement
+    double last;
+
+    //! Sum of all measurement (since last \c reset())
+    double sum;
+
+    //! Previous measurement
+    double lastAbsolute;
+
+    //! Sum of all measurement (since last \c reset())
+    double sumAbsolute;
+
+    //! Number of measurements (since last \c reset())
+    int counter;
+
+    //! Print results in destructor?
+    bool printToLogWhenDestroyed;
+
+    //! Name of the timer.
+    std::string name;
+
+    //! internal
+    double getCurrentAbsoluteTime() const;
+};
+
+} // namespace
+#endif // _FBASICS_TIMER_H_

+ 29 - 0
core/basics/all.h

@@ -0,0 +1,29 @@
+/**
+ * @file all.h
+ * Include all important, conflict-free headers of libfbasics.
+ * @note
+ * This should NOT be used within libfbasics!
+ */
+#ifndef _FBASICS_ALL_H
+#define _FBASICS_ALL_H
+
+#include <core/basics/numerictools.h>
+#include <core/basics/tools.h>
+//#include <core/basics/stringutils.h>
+#include <core/basics/Exception.h>
+#include <core/basics/Streamable.h>
+#include <core/basics/BinStreamable.h>
+#include <core/basics/Timer.h>
+#include <core/basics/FrameRateCounter.h>
+#include <core/basics/FileName.h>
+#include <core/basics/NonCopyable.h>
+#include <core/basics/Log.h>
+#include <core/basics/Observable.h>
+#include <core/basics/Observer.h>
+//#include <core/basics/vectorio.h>
+#include <core/basics/assert.h>
+// #include <core/basics/ransac.h>
+#include <core/basics/deprecated.h>
+#include <core/basics/types.h>
+
+#endif

+ 66 - 0
core/basics/assert.h

@@ -0,0 +1,66 @@
+/*
+ * NICE-Core - efficient algebra and computer vision methods
+ *  - libfbasics - library of some basic tools
+ * See file License for license information.
+ */
+#ifndef _ASSERT_H_
+#define _ASSERT_H_
+
+#include <iostream>
+#include <string>
+#include <sstream>
+#include <core/basics/types.h>
+
+#include <core/basics/Exception.h>
+
+namespace NICE {
+
+//#define assert(t) if (!t) {cout << "Assertion failed." << endl;}
+
+/**
+ * Deprecated! A simple assertion function.
+ * @deprecated Use fassert() or fassert2() instead
+ */
+inline void assert2(const bool t, const std::string& message = std::string()) {
+  if (!t) {
+    std::cerr << "Assertion failed. " << message << std::endl;
+    //std::stringstream s;
+    //s << "Assertion failed: " << message;
+    //fthrow(Exception, s.str());
+  }
+}
+
+/**
+ * A simple assertion function. (Behavior might be changed in the future.)
+ */
+inline void __assert(const bool exp,
+                     std::string message = std::string(),
+                     std::string code = std::string(),
+                     const char* file = "",
+                     uint line = 0) {
+  if (!exp) {
+    //std::cerr << "Assertion failed. " << message << std::endl;
+    std::stringstream s;
+    s << "Assertion failed in file " << file << " at line " << line
+      << ". Code: '" << code << "'";
+    if (message.size() > 0) {
+      s << " Message: '" << message << "'";
+    }
+    s << ".";
+//     std::cerr << s.str() << std::endl;
+//     fthrow(Exception, s.str());
+    std::string* buffer = new std::string(s.str());
+    fthrow(Exception, *buffer);
+  }
+}
+
+#define fassert(exp) NICE::__assert((exp), "", #exp,__FILE__,__LINE__)
+#define fassert2(exp, msg) \
+{ \
+  std::stringstream s; \
+  s << msg; \
+  NICE::__assert((exp), s.str(), #exp,__FILE__,__LINE__); \
+}
+
+} // namespace
+#endif // _ASSERT_H_

Some files were not shown because too many files changed in this diff