Reformatting and deletion of useless files. Part of documentation updated

pull/38/head
biagio montesano 11 years ago
parent 79b8b2342f
commit eb9bb7d516
  1. 40
      modules/line_descriptor/CMakeCache.txt
  2. BIN
      modules/line_descriptor/CMakeFiles/CMakeDetermineCompilerABI_C.bin
  3. BIN
      modules/line_descriptor/CMakeFiles/CMakeDetermineCompilerABI_CXX.bin
  4. 263
      modules/line_descriptor/CMakeFiles/CMakeOutput.log
  5. 232
      modules/line_descriptor/CMakeFiles/CompilerIdC/CMakeCCompilerId.c
  6. BIN
      modules/line_descriptor/CMakeFiles/CompilerIdC/a.out
  7. 215
      modules/line_descriptor/CMakeFiles/CompilerIdCXX/CMakeCXXCompilerId.cpp
  8. BIN
      modules/line_descriptor/CMakeFiles/CompilerIdCXX/a.out
  9. 1
      modules/line_descriptor/CMakeFiles/cmake.check_cache
  10. 25
      modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/DependInfo.cmake
  11. 113
      modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/build.make
  12. 10
      modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/cmake_clean.cmake
  13. 2
      modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/depend.make
  14. 8
      modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/flags.make
  15. 1
      modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/link.txt
  16. 2
      modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/progress.make
  17. 25
      modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/DependInfo.cmake
  18. 113
      modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/build.make
  19. 10
      modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/cmake_clean.cmake
  20. 2
      modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/depend.make
  21. 8
      modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/flags.make
  22. 1
      modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/link.txt
  23. 2
      modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/progress.make
  24. 34
      modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/DependInfo.cmake
  25. 169
      modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/build.make
  26. 14
      modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/cmake_clean.cmake
  27. 2
      modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/depend.make
  28. 14
      modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/flags.make
  29. 1
      modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/link.txt
  30. 4
      modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/progress.make
  31. 18
      modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/DependInfo.cmake
  32. 113
      modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/build.make
  33. 11
      modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/cmake_clean.cmake
  34. 3
      modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/cmake_clean_target.cmake
  35. 2
      modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/depend.make
  36. 8
      modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/flags.make
  37. 2
      modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/link.txt
  38. 3
      modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/progress.make
  39. 13
      modules/line_descriptor/CMakeFiles/pch_Generate_opencv_line_descriptor.dir/DependInfo.cmake
  40. 80
      modules/line_descriptor/CMakeFiles/pch_Generate_opencv_line_descriptor.dir/build.make
  41. 10
      modules/line_descriptor/CMakeFiles/pch_Generate_opencv_line_descriptor.dir/cmake_clean.cmake
  42. 3
      modules/line_descriptor/CMakeFiles/pch_Generate_opencv_line_descriptor.dir/progress.make
  43. 1
      modules/line_descriptor/CMakeFiles/progress.marks
  44. 404
      modules/line_descriptor/Makefile
  45. 82
      modules/line_descriptor/cmake_install.cmake
  46. 217
      modules/line_descriptor/doc/BinaryDescriptor.rst~
  47. 10
      modules/line_descriptor/doc/binary_descriptor.rst
  48. 68
      modules/line_descriptor/doc/drawing_functions.rst
  49. 4
      modules/line_descriptor/doc/line_descriptor.rst
  50. 139
      modules/line_descriptor/doc/line_descriptor.rst~
  51. 141
      modules/line_descriptor/doc/matching.rst
  52. 2
      modules/line_descriptor/include/opencv2/line_descriptor.hpp
  53. 60
      modules/line_descriptor/include/opencv2/line_descriptor/array32.hpp
  54. 89
      modules/line_descriptor/include/opencv2/line_descriptor/bitarray.hpp
  55. 187
      modules/line_descriptor/include/opencv2/line_descriptor/bitops.hpp
  56. 25
      modules/line_descriptor/include/opencv2/line_descriptor/bucket_group.hpp
  57. 482
      modules/line_descriptor/include/opencv2/line_descriptor/descriptor.hpp
  58. 173
      modules/line_descriptor/include/opencv2/line_descriptor/line_structure.hpp
  59. 88
      modules/line_descriptor/include/opencv2/line_descriptor/mihasher.hpp
  60. 36
      modules/line_descriptor/include/opencv2/line_descriptor/sparse_hashtable.hpp
  61. 9
      modules/line_descriptor/samples/bak.txt
  62. 104
      modules/line_descriptor/samples/compute_descriptors.cpp
  63. 235
      modules/line_descriptor/samples/knn_matching.cpp
  64. 114
      modules/line_descriptor/samples/lines_extraction.cpp
  65. 125
      modules/line_descriptor/samples/matching.cpp
  66. 177
      modules/line_descriptor/src/array32.cpp
  67. 48
      modules/line_descriptor/src/binary_descriptor.cpp
  68. 785
      modules/line_descriptor/src/binary_descriptor_matcher.cpp
  69. 70
      modules/line_descriptor/src/bucket_group.cpp
  70. 246
      modules/line_descriptor/src/draw.cpp
  71. 6
      modules/line_descriptor/src/line_descriptor_init.cpp
  72. 340
      modules/line_descriptor/src/mihasher.cpp
  73. 42
      modules/line_descriptor/src/precomp.cpp
  74. 35
      modules/line_descriptor/src/sparse_hashtable.cpp

@ -1,40 +0,0 @@
# This is the CMakeCache file.
# For build in directory: /home/ubisum/src/opencv_contrib/modules/line_descriptor
# It was generated by CMake: /usr/bin/cmake
# You can edit this file to change values found and used by cmake.
# If you do not want to change any of the values, simply exit the editor.
# If you do want to change a value, simply edit, save, and exit the editor.
# The syntax for the file is as follows:
# KEY:TYPE=VALUE
# KEY is the name of a variable in the cache.
# TYPE is a hint to GUI's for the type of VALUE, DO NOT EDIT TYPE!.
# VALUE is the current value for the KEY.
########################
# EXTERNAL cache entries
########################
########################
# INTERNAL cache entries
########################
//This is the directory where this CMakeCache.txt was created
CMAKE_CACHEFILE_DIR:INTERNAL=/home/ubisum/src/opencv_contrib/modules/line_descriptor
//Major version of cmake used to create the current loaded cache
CMAKE_CACHE_MAJOR_VERSION:INTERNAL=2
//Minor version of cmake used to create the current loaded cache
CMAKE_CACHE_MINOR_VERSION:INTERNAL=8
//Patch version of cmake used to create the current loaded cache
CMAKE_CACHE_PATCH_VERSION:INTERNAL=7
//Path to CMake executable.
CMAKE_COMMAND:INTERNAL=/usr/bin/cmake
//Path to cpack program executable.
CMAKE_CPACK_COMMAND:INTERNAL=/usr/bin/cpack
//Path to ctest program executable.
CMAKE_CTEST_COMMAND:INTERNAL=/usr/bin/ctest
//Path to cache edit program executable.
CMAKE_EDIT_COMMAND:INTERNAL=/usr/bin/ccmake
//Path to CMake installation.
CMAKE_ROOT:INTERNAL=/usr/share/cmake-2.8

@ -1,263 +0,0 @@
The system is: Linux - 3.8.0-38-generic - x86_64
Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded.
Compiler: /usr/bin/gcc
Build flags:
Id flags:
The output was:
0
Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.out"
The C compiler identification is GNU, found in "/home/ubisum/src/opencv_contrib/modules/line_descriptor/CMakeFiles/CompilerIdC/a.out"
Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded.
Compiler: /usr/bin/c++
Build flags:
Id flags:
The output was:
0
Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out"
The CXX compiler identification is GNU, found in "/home/ubisum/src/opencv_contrib/modules/line_descriptor/CMakeFiles/CompilerIdCXX/a.out"
Determining if the C compiler works passed with the following output:
Change Dir: /home/ubisum/src/opencv_contrib/modules/line_descriptor/CMakeFiles/CMakeTmp
Run Build Command:/usr/bin/make "cmTryCompileExec/fast"
/usr/bin/make -f CMakeFiles/cmTryCompileExec.dir/build.make CMakeFiles/cmTryCompileExec.dir/build
make[1]: Entering directory `/home/ubisum/src/opencv_contrib/modules/line_descriptor/CMakeFiles/CMakeTmp'
/usr/bin/cmake -E cmake_progress_report /home/ubisum/src/opencv_contrib/modules/line_descriptor/CMakeFiles/CMakeTmp/CMakeFiles 1
Building C object CMakeFiles/cmTryCompileExec.dir/testCCompiler.c.o
/usr/bin/gcc -o CMakeFiles/cmTryCompileExec.dir/testCCompiler.c.o -c /home/ubisum/src/opencv_contrib/modules/line_descriptor/CMakeFiles/CMakeTmp/testCCompiler.c
Linking C executable cmTryCompileExec
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTryCompileExec.dir/link.txt --verbose=1
/usr/bin/gcc CMakeFiles/cmTryCompileExec.dir/testCCompiler.c.o -o cmTryCompileExec -rdynamic
make[1]: Leaving directory `/home/ubisum/src/opencv_contrib/modules/line_descriptor/CMakeFiles/CMakeTmp'
Detecting C compiler ABI info compiled with the following output:
Change Dir: /home/ubisum/src/opencv_contrib/modules/line_descriptor/CMakeFiles/CMakeTmp
Run Build Command:/usr/bin/make "cmTryCompileExec/fast"
/usr/bin/make -f CMakeFiles/cmTryCompileExec.dir/build.make CMakeFiles/cmTryCompileExec.dir/build
make[1]: Entering directory `/home/ubisum/src/opencv_contrib/modules/line_descriptor/CMakeFiles/CMakeTmp'
/usr/bin/cmake -E cmake_progress_report /home/ubisum/src/opencv_contrib/modules/line_descriptor/CMakeFiles/CMakeTmp/CMakeFiles 1
Building C object CMakeFiles/cmTryCompileExec.dir/CMakeCCompilerABI.c.o
/usr/bin/gcc -o CMakeFiles/cmTryCompileExec.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake-2.8/Modules/CMakeCCompilerABI.c
Linking C executable cmTryCompileExec
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTryCompileExec.dir/link.txt --verbose=1
/usr/bin/gcc -v CMakeFiles/cmTryCompileExec.dir/CMakeCCompilerABI.c.o -o cmTryCompileExec -rdynamic
Using built-in specs.
COLLECT_GCC=/usr/bin/gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.6/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-o' 'cmTryCompileExec' '-rdynamic' '-mtune=generic' '-march=x86-64'
/usr/lib/gcc/x86_64-linux-gnu/4.6/collect2 --sysroot=/ --build-id --no-add-needed --as-needed --eh-frame-hdr -m elf_x86_64 --hash-style=gnu -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -z relro -o cmTryCompileExec /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/4.6/crtbegin.o -L/usr/lib/gcc/x86_64-linux-gnu/4.6 -L/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/4.6/../../.. CMakeFiles/cmTryCompileExec.dir/CMakeCCompilerABI.c.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/x86_64-linux-gnu/4.6/crtend.o /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crtn.o
make[1]: Leaving directory `/home/ubisum/src/opencv_contrib/modules/line_descriptor/CMakeFiles/CMakeTmp'
Parsed C implicit link information from above output:
link line regex: [^( *|.*[/\])(ld|ld|collect2)[^/\]*( |$)]
ignore line: [Change Dir: /home/ubisum/src/opencv_contrib/modules/line_descriptor/CMakeFiles/CMakeTmp]
ignore line: []
ignore line: [Run Build Command:/usr/bin/make "cmTryCompileExec/fast"]
ignore line: [/usr/bin/make -f CMakeFiles/cmTryCompileExec.dir/build.make CMakeFiles/cmTryCompileExec.dir/build]
ignore line: [make[1]: Entering directory `/home/ubisum/src/opencv_contrib/modules/line_descriptor/CMakeFiles/CMakeTmp']
ignore line: [/usr/bin/cmake -E cmake_progress_report /home/ubisum/src/opencv_contrib/modules/line_descriptor/CMakeFiles/CMakeTmp/CMakeFiles 1]
ignore line: [Building C object CMakeFiles/cmTryCompileExec.dir/CMakeCCompilerABI.c.o]
ignore line: [/usr/bin/gcc -o CMakeFiles/cmTryCompileExec.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake-2.8/Modules/CMakeCCompilerABI.c]
ignore line: [Linking C executable cmTryCompileExec]
ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTryCompileExec.dir/link.txt --verbose=1]
ignore line: [/usr/bin/gcc -v CMakeFiles/cmTryCompileExec.dir/CMakeCCompilerABI.c.o -o cmTryCompileExec -rdynamic ]
ignore line: [Using built-in specs.]
ignore line: [COLLECT_GCC=/usr/bin/gcc]
ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.6/lto-wrapper]
ignore line: [Target: x86_64-linux-gnu]
ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu]
ignore line: [Thread model: posix]
ignore line: [gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) ]
ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/]
ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../:/lib/:/usr/lib/]
ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTryCompileExec' '-rdynamic' '-mtune=generic' '-march=x86-64']
link line: [ /usr/lib/gcc/x86_64-linux-gnu/4.6/collect2 --sysroot=/ --build-id --no-add-needed --as-needed --eh-frame-hdr -m elf_x86_64 --hash-style=gnu -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -z relro -o cmTryCompileExec /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/4.6/crtbegin.o -L/usr/lib/gcc/x86_64-linux-gnu/4.6 -L/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/4.6/../../.. CMakeFiles/cmTryCompileExec.dir/CMakeCCompilerABI.c.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/x86_64-linux-gnu/4.6/crtend.o /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crtn.o]
arg [/usr/lib/gcc/x86_64-linux-gnu/4.6/collect2] ==> ignore
arg [--sysroot=/] ==> ignore
arg [--build-id] ==> ignore
arg [--no-add-needed] ==> ignore
arg [--as-needed] ==> ignore
arg [--eh-frame-hdr] ==> ignore
arg [-m] ==> ignore
arg [elf_x86_64] ==> ignore
arg [--hash-style=gnu] ==> ignore
arg [-export-dynamic] ==> ignore
arg [-dynamic-linker] ==> ignore
arg [/lib64/ld-linux-x86-64.so.2] ==> ignore
arg [-zrelro] ==> ignore
arg [-o] ==> ignore
arg [cmTryCompileExec] ==> ignore
arg [/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o] ==> ignore
arg [/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crti.o] ==> ignore
arg [/usr/lib/gcc/x86_64-linux-gnu/4.6/crtbegin.o] ==> ignore
arg [-L/usr/lib/gcc/x86_64-linux-gnu/4.6] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/4.6]
arg [-L/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu]
arg [-L/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib]
arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu]
arg [-L/lib/../lib] ==> dir [/lib/../lib]
arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu]
arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib]
arg [-L/usr/lib/gcc/x86_64-linux-gnu/4.6/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/4.6/../../..]
arg [CMakeFiles/cmTryCompileExec.dir/CMakeCCompilerABI.c.o] ==> ignore
arg [-lgcc] ==> lib [gcc]
arg [--as-needed] ==> ignore
arg [-lgcc_s] ==> lib [gcc_s]
arg [--no-as-needed] ==> ignore
arg [-lc] ==> lib [c]
arg [-lgcc] ==> lib [gcc]
arg [--as-needed] ==> ignore
arg [-lgcc_s] ==> lib [gcc_s]
arg [--no-as-needed] ==> ignore
arg [/usr/lib/gcc/x86_64-linux-gnu/4.6/crtend.o] ==> ignore
arg [/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crtn.o] ==> ignore
remove lib [gcc]
remove lib [gcc_s]
remove lib [gcc]
remove lib [gcc_s]
collapse dir [/usr/lib/gcc/x86_64-linux-gnu/4.6] ==> [/usr/lib/gcc/x86_64-linux-gnu/4.6]
collapse dir [/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu]
collapse dir [/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib] ==> [/usr/lib]
collapse dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu]
collapse dir [/lib/../lib] ==> [/lib]
collapse dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu]
collapse dir [/usr/lib/../lib] ==> [/usr/lib]
collapse dir [/usr/lib/gcc/x86_64-linux-gnu/4.6/../../..] ==> [/usr/lib]
implicit libs: [c]
implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/4.6;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib]
Determining if the CXX compiler works passed with the following output:
Change Dir: /home/ubisum/src/opencv_contrib/modules/line_descriptor/CMakeFiles/CMakeTmp
Run Build Command:/usr/bin/make "cmTryCompileExec/fast"
/usr/bin/make -f CMakeFiles/cmTryCompileExec.dir/build.make CMakeFiles/cmTryCompileExec.dir/build
make[1]: Entering directory `/home/ubisum/src/opencv_contrib/modules/line_descriptor/CMakeFiles/CMakeTmp'
/usr/bin/cmake -E cmake_progress_report /home/ubisum/src/opencv_contrib/modules/line_descriptor/CMakeFiles/CMakeTmp/CMakeFiles 1
Building CXX object CMakeFiles/cmTryCompileExec.dir/testCXXCompiler.cxx.o
/usr/bin/c++ -o CMakeFiles/cmTryCompileExec.dir/testCXXCompiler.cxx.o -c /home/ubisum/src/opencv_contrib/modules/line_descriptor/CMakeFiles/CMakeTmp/testCXXCompiler.cxx
Linking CXX executable cmTryCompileExec
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTryCompileExec.dir/link.txt --verbose=1
/usr/bin/c++ CMakeFiles/cmTryCompileExec.dir/testCXXCompiler.cxx.o -o cmTryCompileExec -rdynamic
make[1]: Leaving directory `/home/ubisum/src/opencv_contrib/modules/line_descriptor/CMakeFiles/CMakeTmp'
Detecting CXX compiler ABI info compiled with the following output:
Change Dir: /home/ubisum/src/opencv_contrib/modules/line_descriptor/CMakeFiles/CMakeTmp
Run Build Command:/usr/bin/make "cmTryCompileExec/fast"
/usr/bin/make -f CMakeFiles/cmTryCompileExec.dir/build.make CMakeFiles/cmTryCompileExec.dir/build
make[1]: Entering directory `/home/ubisum/src/opencv_contrib/modules/line_descriptor/CMakeFiles/CMakeTmp'
/usr/bin/cmake -E cmake_progress_report /home/ubisum/src/opencv_contrib/modules/line_descriptor/CMakeFiles/CMakeTmp/CMakeFiles 1
Building CXX object CMakeFiles/cmTryCompileExec.dir/CMakeCXXCompilerABI.cpp.o
/usr/bin/c++ -o CMakeFiles/cmTryCompileExec.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-2.8/Modules/CMakeCXXCompilerABI.cpp
Linking CXX executable cmTryCompileExec
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTryCompileExec.dir/link.txt --verbose=1
/usr/bin/c++ -v CMakeFiles/cmTryCompileExec.dir/CMakeCXXCompilerABI.cpp.o -o cmTryCompileExec -rdynamic
Using built-in specs.
COLLECT_GCC=/usr/bin/c++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.6/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-o' 'cmTryCompileExec' '-rdynamic' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
/usr/lib/gcc/x86_64-linux-gnu/4.6/collect2 --sysroot=/ --build-id --no-add-needed --as-needed --eh-frame-hdr -m elf_x86_64 --hash-style=gnu -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -z relro -o cmTryCompileExec /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/4.6/crtbegin.o -L/usr/lib/gcc/x86_64-linux-gnu/4.6 -L/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/4.6/../../.. CMakeFiles/cmTryCompileExec.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/4.6/crtend.o /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crtn.o
make[1]: Leaving directory `/home/ubisum/src/opencv_contrib/modules/line_descriptor/CMakeFiles/CMakeTmp'
Parsed CXX implicit link information from above output:
link line regex: [^( *|.*[/\])(ld|ld|collect2)[^/\]*( |$)]
ignore line: [Change Dir: /home/ubisum/src/opencv_contrib/modules/line_descriptor/CMakeFiles/CMakeTmp]
ignore line: []
ignore line: [Run Build Command:/usr/bin/make "cmTryCompileExec/fast"]
ignore line: [/usr/bin/make -f CMakeFiles/cmTryCompileExec.dir/build.make CMakeFiles/cmTryCompileExec.dir/build]
ignore line: [make[1]: Entering directory `/home/ubisum/src/opencv_contrib/modules/line_descriptor/CMakeFiles/CMakeTmp']
ignore line: [/usr/bin/cmake -E cmake_progress_report /home/ubisum/src/opencv_contrib/modules/line_descriptor/CMakeFiles/CMakeTmp/CMakeFiles 1]
ignore line: [Building CXX object CMakeFiles/cmTryCompileExec.dir/CMakeCXXCompilerABI.cpp.o]
ignore line: [/usr/bin/c++ -o CMakeFiles/cmTryCompileExec.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-2.8/Modules/CMakeCXXCompilerABI.cpp]
ignore line: [Linking CXX executable cmTryCompileExec]
ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTryCompileExec.dir/link.txt --verbose=1]
ignore line: [/usr/bin/c++ -v CMakeFiles/cmTryCompileExec.dir/CMakeCXXCompilerABI.cpp.o -o cmTryCompileExec -rdynamic ]
ignore line: [Using built-in specs.]
ignore line: [COLLECT_GCC=/usr/bin/c++]
ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.6/lto-wrapper]
ignore line: [Target: x86_64-linux-gnu]
ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu]
ignore line: [Thread model: posix]
ignore line: [gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) ]
ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/]
ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../:/lib/:/usr/lib/]
ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTryCompileExec' '-rdynamic' '-shared-libgcc' '-mtune=generic' '-march=x86-64']
link line: [ /usr/lib/gcc/x86_64-linux-gnu/4.6/collect2 --sysroot=/ --build-id --no-add-needed --as-needed --eh-frame-hdr -m elf_x86_64 --hash-style=gnu -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -z relro -o cmTryCompileExec /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/4.6/crtbegin.o -L/usr/lib/gcc/x86_64-linux-gnu/4.6 -L/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/4.6/../../.. CMakeFiles/cmTryCompileExec.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/4.6/crtend.o /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crtn.o]
arg [/usr/lib/gcc/x86_64-linux-gnu/4.6/collect2] ==> ignore
arg [--sysroot=/] ==> ignore
arg [--build-id] ==> ignore
arg [--no-add-needed] ==> ignore
arg [--as-needed] ==> ignore
arg [--eh-frame-hdr] ==> ignore
arg [-m] ==> ignore
arg [elf_x86_64] ==> ignore
arg [--hash-style=gnu] ==> ignore
arg [-export-dynamic] ==> ignore
arg [-dynamic-linker] ==> ignore
arg [/lib64/ld-linux-x86-64.so.2] ==> ignore
arg [-zrelro] ==> ignore
arg [-o] ==> ignore
arg [cmTryCompileExec] ==> ignore
arg [/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o] ==> ignore
arg [/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crti.o] ==> ignore
arg [/usr/lib/gcc/x86_64-linux-gnu/4.6/crtbegin.o] ==> ignore
arg [-L/usr/lib/gcc/x86_64-linux-gnu/4.6] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/4.6]
arg [-L/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu]
arg [-L/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib]
arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu]
arg [-L/lib/../lib] ==> dir [/lib/../lib]
arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu]
arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib]
arg [-L/usr/lib/gcc/x86_64-linux-gnu/4.6/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/4.6/../../..]
arg [CMakeFiles/cmTryCompileExec.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore
arg [-lstdc++] ==> lib [stdc++]
arg [-lm] ==> lib [m]
arg [-lgcc_s] ==> lib [gcc_s]
arg [-lgcc] ==> lib [gcc]
arg [-lc] ==> lib [c]
arg [-lgcc_s] ==> lib [gcc_s]
arg [-lgcc] ==> lib [gcc]
arg [/usr/lib/gcc/x86_64-linux-gnu/4.6/crtend.o] ==> ignore
arg [/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crtn.o] ==> ignore
remove lib [gcc_s]
remove lib [gcc]
remove lib [gcc_s]
remove lib [gcc]
collapse dir [/usr/lib/gcc/x86_64-linux-gnu/4.6] ==> [/usr/lib/gcc/x86_64-linux-gnu/4.6]
collapse dir [/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu]
collapse dir [/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib] ==> [/usr/lib]
collapse dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu]
collapse dir [/lib/../lib] ==> [/lib]
collapse dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu]
collapse dir [/usr/lib/../lib] ==> [/usr/lib]
collapse dir [/usr/lib/gcc/x86_64-linux-gnu/4.6/../../..] ==> [/usr/lib]
implicit libs: [stdc++;m;c]
implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/4.6;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib]

@ -1,232 +0,0 @@
#ifdef __cplusplus
# error "A C++ compiler has been selected for C."
#endif
#if defined(__18CXX)
# define ID_VOID_MAIN
#endif
#if defined(__INTEL_COMPILER) || defined(__ICC)
# define COMPILER_ID "Intel"
#elif defined(__clang__)
# define COMPILER_ID "Clang"
#elif defined(__BORLANDC__)
# define COMPILER_ID "Borland"
#elif defined(__WATCOMC__)
# define COMPILER_ID "Watcom"
#elif defined(__SUNPRO_C)
# define COMPILER_ID "SunPro"
#elif defined(__HP_cc)
# define COMPILER_ID "HP"
#elif defined(__DECC)
# define COMPILER_ID "Compaq"
#elif defined(__IBMC__)
# if defined(__COMPILER_VER__)
# define COMPILER_ID "zOS"
# elif __IBMC__ >= 800
# define COMPILER_ID "XL"
# else
# define COMPILER_ID "VisualAge"
# endif
#elif defined(__PGI)
# define COMPILER_ID "PGI"
#elif defined(__PATHSCALE__)
# define COMPILER_ID "PathScale"
#elif defined(_CRAYC)
# define COMPILER_ID "Cray"
#elif defined(__TI_COMPILER_VERSION__)
# define COMPILER_ID "TI_DSP"
#elif defined(__TINYC__)
# define COMPILER_ID "TinyCC"
#elif defined(__SCO_VERSION__)
# define COMPILER_ID "SCO"
#elif defined(__GNUC__)
# define COMPILER_ID "GNU"
#elif defined(_MSC_VER)
# define COMPILER_ID "MSVC"
#elif defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__)
/* Analog Devices C++ compiler for Blackfin, TigerSHARC and
SHARC (21000) DSPs */
# define COMPILER_ID "ADSP"
/* IAR Systems compiler for embedded systems.
http://www.iar.com
Not supported yet by CMake
#elif defined(__IAR_SYSTEMS_ICC__)
# define COMPILER_ID "IAR" */
/* sdcc, the small devices C compiler for embedded systems,
http://sdcc.sourceforge.net */
#elif defined(SDCC)
# define COMPILER_ID "SDCC"
#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION)
# define COMPILER_ID "MIPSpro"
/* This compiler is either not known or is too old to define an
identification macro. Try to identify the platform and guess that
it is the native compiler. */
#elif defined(__sgi)
# define COMPILER_ID "MIPSpro"
#elif defined(__hpux) || defined(__hpua)
# define COMPILER_ID "HP"
#else /* unknown compiler */
# define COMPILER_ID ""
#endif
/* Construct the string literal in pieces to prevent the source from
getting matched. Store it in a pointer rather than an array
because some compilers will just produce instructions to fill the
array rather than assigning a pointer to a static array. */
char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
/* Identify known platforms by name. */
#if defined(__linux) || defined(__linux__) || defined(linux)
# define PLATFORM_ID "Linux"
#elif defined(__CYGWIN__)
# define PLATFORM_ID "Cygwin"
#elif defined(__MINGW32__)
# define PLATFORM_ID "MinGW"
#elif defined(__APPLE__)
# define PLATFORM_ID "Darwin"
#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
# define PLATFORM_ID "Windows"
#elif defined(__FreeBSD__) || defined(__FreeBSD)
# define PLATFORM_ID "FreeBSD"
#elif defined(__NetBSD__) || defined(__NetBSD)
# define PLATFORM_ID "NetBSD"
#elif defined(__OpenBSD__) || defined(__OPENBSD)
# define PLATFORM_ID "OpenBSD"
#elif defined(__sun) || defined(sun)
# define PLATFORM_ID "SunOS"
#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
# define PLATFORM_ID "AIX"
#elif defined(__sgi) || defined(__sgi__) || defined(_SGI)
# define PLATFORM_ID "IRIX"
#elif defined(__hpux) || defined(__hpux__)
# define PLATFORM_ID "HP-UX"
#elif defined(__HAIKU) || defined(__HAIKU__) || defined(_HAIKU)
# define PLATFORM_ID "Haiku"
/* Haiku also defines __BEOS__ so we must
put it prior to the check for __BEOS__
*/
#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
# define PLATFORM_ID "BeOS"
#elif defined(__QNX__) || defined(__QNXNTO__)
# define PLATFORM_ID "QNX"
#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
# define PLATFORM_ID "Tru64"
#elif defined(__riscos) || defined(__riscos__)
# define PLATFORM_ID "RISCos"
#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
# define PLATFORM_ID "SINIX"
#elif defined(__UNIX_SV__)
# define PLATFORM_ID "UNIX_SV"
#elif defined(__bsdos__)
# define PLATFORM_ID "BSDOS"
#elif defined(_MPRAS) || defined(MPRAS)
# define PLATFORM_ID "MP-RAS"
#elif defined(__osf) || defined(__osf__)
# define PLATFORM_ID "OSF1"
#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
# define PLATFORM_ID "SCO_SV"
#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
# define PLATFORM_ID "ULTRIX"
#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
# define PLATFORM_ID "Xenix"
#else /* unknown platform */
# define PLATFORM_ID ""
#endif
/* For windows compilers MSVC and Intel we can determine
the architecture of the compiler being used. This is because
the compilers do not have flags that can change the architecture,
but rather depend on which compiler is being used
*/
#if defined(_WIN32) && defined(_MSC_VER)
# if defined(_M_IA64)
# define ARCHITECTURE_ID "IA64"
# elif defined(_M_X64) || defined(_M_AMD64)
# define ARCHITECTURE_ID "x64"
# elif defined(_M_IX86)
# define ARCHITECTURE_ID "X86"
# else /* unknown architecture */
# define ARCHITECTURE_ID ""
# endif
#else
# define ARCHITECTURE_ID ""
#endif
/* Construct the string literal in pieces to prevent the source from
getting matched. Store it in a pointer rather than an array
because some compilers will just produce instructions to fill the
array rather than assigning a pointer to a static array. */
char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";
/*--------------------------------------------------------------------------*/
#ifdef ID_VOID_MAIN
void main() {}
#else
int main(int argc, char* argv[])
{
int require = 0;
require += info_compiler[argc];
require += info_platform[argc];
require += info_arch[argc];
(void)argv;
return require;
}
#endif

@ -1,215 +0,0 @@
/* This source file must have a .cpp extension so that all C++ compilers
recognize the extension without flags. Borland does not know .cxx for
example. */
#ifndef __cplusplus
# error "A C compiler has been selected for C++."
#endif
#if defined(__COMO__)
# define COMPILER_ID "Comeau"
#elif defined(__INTEL_COMPILER) || defined(__ICC)
# define COMPILER_ID "Intel"
#elif defined(__clang__)
# define COMPILER_ID "Clang"
#elif defined(__BORLANDC__)
# define COMPILER_ID "Borland"
#elif defined(__WATCOMC__)
# define COMPILER_ID "Watcom"
#elif defined(__SUNPRO_CC)
# define COMPILER_ID "SunPro"
#elif defined(__HP_aCC)
# define COMPILER_ID "HP"
#elif defined(__DECCXX)
# define COMPILER_ID "Compaq"
#elif defined(__IBMCPP__)
# if defined(__COMPILER_VER__)
# define COMPILER_ID "zOS"
# elif __IBMCPP__ >= 800
# define COMPILER_ID "XL"
# else
# define COMPILER_ID "VisualAge"
# endif
#elif defined(__PGI)
# define COMPILER_ID "PGI"
#elif defined(__PATHSCALE__)
# define COMPILER_ID "PathScale"
#elif defined(_CRAYC)
# define COMPILER_ID "Cray"
#elif defined(__TI_COMPILER_VERSION__)
# define COMPILER_ID "TI_DSP"
#elif defined(__SCO_VERSION__)
# define COMPILER_ID "SCO"
#elif defined(__GNUC__)
# define COMPILER_ID "GNU"
#elif defined(_MSC_VER)
# define COMPILER_ID "MSVC"
#elif defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__)
/* Analog Devices C++ compiler for Blackfin, TigerSHARC and
SHARC (21000) DSPs */
# define COMPILER_ID "ADSP"
#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION)
# define COMPILER_ID "MIPSpro"
/* This compiler is either not known or is too old to define an
identification macro. Try to identify the platform and guess that
it is the native compiler. */
#elif defined(__sgi)
# define COMPILER_ID "MIPSpro"
#elif defined(__hpux) || defined(__hpua)
# define COMPILER_ID "HP"
#else /* unknown compiler */
# define COMPILER_ID ""
#endif
/* Construct the string literal in pieces to prevent the source from
getting matched. Store it in a pointer rather than an array
because some compilers will just produce instructions to fill the
array rather than assigning a pointer to a static array. */
char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
/* Identify known platforms by name. */
#if defined(__linux) || defined(__linux__) || defined(linux)
# define PLATFORM_ID "Linux"
#elif defined(__CYGWIN__)
# define PLATFORM_ID "Cygwin"
#elif defined(__MINGW32__)
# define PLATFORM_ID "MinGW"
#elif defined(__APPLE__)
# define PLATFORM_ID "Darwin"
#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
# define PLATFORM_ID "Windows"
#elif defined(__FreeBSD__) || defined(__FreeBSD)
# define PLATFORM_ID "FreeBSD"
#elif defined(__NetBSD__) || defined(__NetBSD)
# define PLATFORM_ID "NetBSD"
#elif defined(__OpenBSD__) || defined(__OPENBSD)
# define PLATFORM_ID "OpenBSD"
#elif defined(__sun) || defined(sun)
# define PLATFORM_ID "SunOS"
#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
# define PLATFORM_ID "AIX"
#elif defined(__sgi) || defined(__sgi__) || defined(_SGI)
# define PLATFORM_ID "IRIX"
#elif defined(__hpux) || defined(__hpux__)
# define PLATFORM_ID "HP-UX"
#elif defined(__HAIKU) || defined(__HAIKU__) || defined(_HAIKU)
# define PLATFORM_ID "Haiku"
/* Haiku also defines __BEOS__ so we must
put it prior to the check for __BEOS__
*/
#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
# define PLATFORM_ID "BeOS"
#elif defined(__QNX__) || defined(__QNXNTO__)
# define PLATFORM_ID "QNX"
#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
# define PLATFORM_ID "Tru64"
#elif defined(__riscos) || defined(__riscos__)
# define PLATFORM_ID "RISCos"
#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
# define PLATFORM_ID "SINIX"
#elif defined(__UNIX_SV__)
# define PLATFORM_ID "UNIX_SV"
#elif defined(__bsdos__)
# define PLATFORM_ID "BSDOS"
#elif defined(_MPRAS) || defined(MPRAS)
# define PLATFORM_ID "MP-RAS"
#elif defined(__osf) || defined(__osf__)
# define PLATFORM_ID "OSF1"
#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
# define PLATFORM_ID "SCO_SV"
#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
# define PLATFORM_ID "ULTRIX"
#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
# define PLATFORM_ID "Xenix"
#else /* unknown platform */
# define PLATFORM_ID ""
#endif
/* For windows compilers MSVC and Intel we can determine
the architecture of the compiler being used. This is because
the compilers do not have flags that can change the architecture,
but rather depend on which compiler is being used
*/
#if defined(_WIN32) && defined(_MSC_VER)
# if defined(_M_IA64)
# define ARCHITECTURE_ID "IA64"
# elif defined(_M_X64) || defined(_M_AMD64)
# define ARCHITECTURE_ID "x64"
# elif defined(_M_IX86)
# define ARCHITECTURE_ID "X86"
# else /* unknown architecture */
# define ARCHITECTURE_ID ""
# endif
#else
# define ARCHITECTURE_ID ""
#endif
/* Construct the string literal in pieces to prevent the source from
getting matched. Store it in a pointer rather than an array
because some compilers will just produce instructions to fill the
array rather than assigning a pointer to a static array. */
char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";
/*--------------------------------------------------------------------------*/
int main(int argc, char* argv[])
{
int require = 0;
require += info_compiler[argc];
require += info_platform[argc];
(void)argv;
return require;
}

@ -1 +0,0 @@
# This file is generated by cmake for dependency checking of the CMakeCache.txt file

@ -1,25 +0,0 @@
# The set of languages for which implicit dependencies are needed:
SET(CMAKE_DEPENDS_LANGUAGES
"CXX"
)
# The set of files for implicit dependencies of each language:
SET(CMAKE_DEPENDS_CHECK_CXX
"/home/ubisum/src/opencv/modules/line_descriptor/samples/compute_descriptors.cpp" "/home/ubisum/src/opencv/modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/samples/compute_descriptors.cpp.o"
)
SET(CMAKE_CXX_COMPILER_ID "GNU")
# Preprocessor definitions for this target.
SET(CMAKE_TARGET_DEFINITIONS
"__OPENCV_BUILD=1"
)
# Targets to which this target links.
SET(CMAKE_TARGET_LINKED_INFO_FILES
"/home/ubisum/src/opencv/modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/DependInfo.cmake"
"/home/ubisum/src/opencv/modules/core/CMakeFiles/opencv_core.dir/DependInfo.cmake"
"/home/ubisum/src/opencv/modules/flann/CMakeFiles/opencv_flann.dir/DependInfo.cmake"
"/home/ubisum/src/opencv/modules/imgproc/CMakeFiles/opencv_imgproc.dir/DependInfo.cmake"
"/home/ubisum/src/opencv/modules/highgui/CMakeFiles/opencv_highgui.dir/DependInfo.cmake"
"/home/ubisum/src/opencv/modules/features2d/CMakeFiles/opencv_features2d.dir/DependInfo.cmake"
"/home/ubisum/src/opencv/modules/optim/CMakeFiles/opencv_optim.dir/DependInfo.cmake"
)

@ -1,113 +0,0 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 2.8
#=============================================================================
# Special targets provided by cmake.
# Disable implicit rules so canonical targets will work.
.SUFFIXES:
# Remove some rules from gmake that .SUFFIXES does not remove.
SUFFIXES =
.SUFFIXES: .hpux_make_needs_suffix_list
# Suppress display of executed commands.
$(VERBOSE).SILENT:
# A target that is always out of date.
cmake_force:
.PHONY : cmake_force
#=============================================================================
# Set environment variables for the build.
# The shell in which to execute make rules.
SHELL = /bin/sh
# The CMake executable.
CMAKE_COMMAND = /usr/bin/cmake
# The command to remove a file.
RM = /usr/bin/cmake -E remove -f
# The program to use to edit the cache.
CMAKE_EDIT_COMMAND = /usr/bin/ccmake
# The top-level source directory on which CMake was run.
CMAKE_SOURCE_DIR = /home/ubisum/src/opencv
# The top-level build directory on which CMake was run.
CMAKE_BINARY_DIR = /home/ubisum/src/opencv
# Include any dependencies generated for this target.
include modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/depend.make
# Include the progress variables for this target.
include modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/progress.make
# Include the compile flags for this target's objects.
include modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/flags.make
modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/samples/compute_descriptors.cpp.o: modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/flags.make
modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/samples/compute_descriptors.cpp.o: modules/line_descriptor/samples/compute_descriptors.cpp
$(CMAKE_COMMAND) -E cmake_progress_report /home/ubisum/src/opencv/CMakeFiles $(CMAKE_PROGRESS_1)
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Building CXX object modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/samples/compute_descriptors.cpp.o"
cd /home/ubisum/src/opencv/modules/line_descriptor && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/example_line_descriptor_compute_descriptors.dir/samples/compute_descriptors.cpp.o -c /home/ubisum/src/opencv/modules/line_descriptor/samples/compute_descriptors.cpp
modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/samples/compute_descriptors.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/example_line_descriptor_compute_descriptors.dir/samples/compute_descriptors.cpp.i"
cd /home/ubisum/src/opencv/modules/line_descriptor && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /home/ubisum/src/opencv/modules/line_descriptor/samples/compute_descriptors.cpp > CMakeFiles/example_line_descriptor_compute_descriptors.dir/samples/compute_descriptors.cpp.i
modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/samples/compute_descriptors.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/example_line_descriptor_compute_descriptors.dir/samples/compute_descriptors.cpp.s"
cd /home/ubisum/src/opencv/modules/line_descriptor && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /home/ubisum/src/opencv/modules/line_descriptor/samples/compute_descriptors.cpp -o CMakeFiles/example_line_descriptor_compute_descriptors.dir/samples/compute_descriptors.cpp.s
modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/samples/compute_descriptors.cpp.o.requires:
.PHONY : modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/samples/compute_descriptors.cpp.o.requires
modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/samples/compute_descriptors.cpp.o.provides: modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/samples/compute_descriptors.cpp.o.requires
$(MAKE) -f modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/build.make modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/samples/compute_descriptors.cpp.o.provides.build
.PHONY : modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/samples/compute_descriptors.cpp.o.provides
modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/samples/compute_descriptors.cpp.o.provides.build: modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/samples/compute_descriptors.cpp.o
# Object files for target example_line_descriptor_compute_descriptors
example_line_descriptor_compute_descriptors_OBJECTS = \
"CMakeFiles/example_line_descriptor_compute_descriptors.dir/samples/compute_descriptors.cpp.o"
# External object files for target example_line_descriptor_compute_descriptors
example_line_descriptor_compute_descriptors_EXTERNAL_OBJECTS =
bin/example_line_descriptor_compute_descriptors: modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/samples/compute_descriptors.cpp.o
bin/example_line_descriptor_compute_descriptors: lib/libopencv_line_descriptor.so.3.0.0
bin/example_line_descriptor_compute_descriptors: lib/libopencv_core.so.3.0.0
bin/example_line_descriptor_compute_descriptors: lib/libopencv_flann.so.3.0.0
bin/example_line_descriptor_compute_descriptors: lib/libopencv_imgproc.so.3.0.0
bin/example_line_descriptor_compute_descriptors: lib/libopencv_highgui.so.3.0.0
bin/example_line_descriptor_compute_descriptors: lib/libopencv_features2d.so.3.0.0
bin/example_line_descriptor_compute_descriptors: lib/libopencv_optim.so.3.0.0
bin/example_line_descriptor_compute_descriptors: lib/libopencv_highgui.so.3.0.0
bin/example_line_descriptor_compute_descriptors: lib/libopencv_flann.so.3.0.0
bin/example_line_descriptor_compute_descriptors: lib/libopencv_imgproc.so.3.0.0
bin/example_line_descriptor_compute_descriptors: lib/libopencv_core.so.3.0.0
bin/example_line_descriptor_compute_descriptors: modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/build.make
bin/example_line_descriptor_compute_descriptors: modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/link.txt
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --red --bold "Linking CXX executable ../../bin/example_line_descriptor_compute_descriptors"
cd /home/ubisum/src/opencv/modules/line_descriptor && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/example_line_descriptor_compute_descriptors.dir/link.txt --verbose=$(VERBOSE)
# Rule to build all files generated by this target.
modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/build: bin/example_line_descriptor_compute_descriptors
.PHONY : modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/build
modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/requires: modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/samples/compute_descriptors.cpp.o.requires
.PHONY : modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/requires
modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/clean:
cd /home/ubisum/src/opencv/modules/line_descriptor && $(CMAKE_COMMAND) -P CMakeFiles/example_line_descriptor_compute_descriptors.dir/cmake_clean.cmake
.PHONY : modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/clean
modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/depend:
cd /home/ubisum/src/opencv && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/ubisum/src/opencv /home/ubisum/src/opencv/modules/line_descriptor /home/ubisum/src/opencv /home/ubisum/src/opencv/modules/line_descriptor /home/ubisum/src/opencv/modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/DependInfo.cmake --color=$(COLOR)
.PHONY : modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/depend

@ -1,10 +0,0 @@
FILE(REMOVE_RECURSE
"CMakeFiles/example_line_descriptor_compute_descriptors.dir/samples/compute_descriptors.cpp.o"
"../../bin/example_line_descriptor_compute_descriptors.pdb"
"../../bin/example_line_descriptor_compute_descriptors"
)
# Per-language clean rules from dependency scanning.
FOREACH(lang CXX)
INCLUDE(CMakeFiles/example_line_descriptor_compute_descriptors.dir/cmake_clean_${lang}.cmake OPTIONAL)
ENDFOREACH(lang)

@ -1,2 +0,0 @@
# Empty dependencies file for example_line_descriptor_compute_descriptors.
# This may be replaced when dependencies are built.

@ -1,8 +0,0 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 2.8
# compile CXX with /usr/bin/c++
CXX_FLAGS = -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -msse -msse2 -mssse3 -msse4.1 -msse4.2 -ffunction-sections -fvisibility=hidden -fvisibility-inlines-hidden -O2 -g -I/home/ubisum/src/opencv/modules/optim/include -I/home/ubisum/src/opencv/modules/features2d/include -I/home/ubisum/src/opencv/modules/highgui/include -I/home/ubisum/src/opencv/modules/imgproc/include -I/home/ubisum/src/opencv/modules/flann/include -I/home/ubisum/src/opencv/modules/core/include -I/home/ubisum/src/opencv/modules/line_descriptor -I/home/ubisum/src/opencv/modules/line_descriptor/src -I/home/ubisum/src/opencv/modules/line_descriptor/include -I/home/ubisum/src/opencv -isystem /usr/local/include/eigen3
CXX_DEFINES = -D__OPENCV_BUILD=1

@ -1 +0,0 @@
/usr/bin/c++ -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -msse -msse2 -mssse3 -msse4.1 -msse4.2 -ffunction-sections -fvisibility=hidden -fvisibility-inlines-hidden -O2 -g CMakeFiles/example_line_descriptor_compute_descriptors.dir/samples/compute_descriptors.cpp.o -o ../../bin/example_line_descriptor_compute_descriptors -rdynamic ../../lib/libopencv_line_descriptor.so.3.0.0 ../../lib/libopencv_core.so.3.0.0 ../../lib/libopencv_flann.so.3.0.0 ../../lib/libopencv_imgproc.so.3.0.0 ../../lib/libopencv_highgui.so.3.0.0 ../../lib/libopencv_features2d.so.3.0.0 ../../lib/libopencv_optim.so.3.0.0 ../../lib/libopencv_highgui.so.3.0.0 ../../lib/libopencv_flann.so.3.0.0 ../../lib/libopencv_imgproc.so.3.0.0 ../../lib/libopencv_core.so.3.0.0 -Wl,-rpath,/home/ubisum/src/opencv/lib

@ -1,25 +0,0 @@
# The set of languages for which implicit dependencies are needed:
SET(CMAKE_DEPENDS_LANGUAGES
"CXX"
)
# The set of files for implicit dependencies of each language:
SET(CMAKE_DEPENDS_CHECK_CXX
"/home/ubisum/src/opencv/modules/line_descriptor/samples/lines_extraction.cpp" "/home/ubisum/src/opencv/modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/samples/lines_extraction.cpp.o"
)
SET(CMAKE_CXX_COMPILER_ID "GNU")
# Preprocessor definitions for this target.
SET(CMAKE_TARGET_DEFINITIONS
"__OPENCV_BUILD=1"
)
# Targets to which this target links.
SET(CMAKE_TARGET_LINKED_INFO_FILES
"/home/ubisum/src/opencv/modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/DependInfo.cmake"
"/home/ubisum/src/opencv/modules/core/CMakeFiles/opencv_core.dir/DependInfo.cmake"
"/home/ubisum/src/opencv/modules/flann/CMakeFiles/opencv_flann.dir/DependInfo.cmake"
"/home/ubisum/src/opencv/modules/imgproc/CMakeFiles/opencv_imgproc.dir/DependInfo.cmake"
"/home/ubisum/src/opencv/modules/highgui/CMakeFiles/opencv_highgui.dir/DependInfo.cmake"
"/home/ubisum/src/opencv/modules/features2d/CMakeFiles/opencv_features2d.dir/DependInfo.cmake"
"/home/ubisum/src/opencv/modules/optim/CMakeFiles/opencv_optim.dir/DependInfo.cmake"
)

@ -1,113 +0,0 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 2.8
#=============================================================================
# Special targets provided by cmake.
# Disable implicit rules so canonical targets will work.
.SUFFIXES:
# Remove some rules from gmake that .SUFFIXES does not remove.
SUFFIXES =
.SUFFIXES: .hpux_make_needs_suffix_list
# Suppress display of executed commands.
$(VERBOSE).SILENT:
# A target that is always out of date.
cmake_force:
.PHONY : cmake_force
#=============================================================================
# Set environment variables for the build.
# The shell in which to execute make rules.
SHELL = /bin/sh
# The CMake executable.
CMAKE_COMMAND = /usr/bin/cmake
# The command to remove a file.
RM = /usr/bin/cmake -E remove -f
# The program to use to edit the cache.
CMAKE_EDIT_COMMAND = /usr/bin/ccmake
# The top-level source directory on which CMake was run.
CMAKE_SOURCE_DIR = /home/ubisum/src/opencv
# The top-level build directory on which CMake was run.
CMAKE_BINARY_DIR = /home/ubisum/src/opencv
# Include any dependencies generated for this target.
include modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/depend.make
# Include the progress variables for this target.
include modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/progress.make
# Include the compile flags for this target's objects.
include modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/flags.make
modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/samples/lines_extraction.cpp.o: modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/flags.make
modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/samples/lines_extraction.cpp.o: modules/line_descriptor/samples/lines_extraction.cpp
$(CMAKE_COMMAND) -E cmake_progress_report /home/ubisum/src/opencv/CMakeFiles $(CMAKE_PROGRESS_1)
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Building CXX object modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/samples/lines_extraction.cpp.o"
cd /home/ubisum/src/opencv/modules/line_descriptor && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/example_line_descriptor_lines_extraction.dir/samples/lines_extraction.cpp.o -c /home/ubisum/src/opencv/modules/line_descriptor/samples/lines_extraction.cpp
modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/samples/lines_extraction.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/example_line_descriptor_lines_extraction.dir/samples/lines_extraction.cpp.i"
cd /home/ubisum/src/opencv/modules/line_descriptor && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /home/ubisum/src/opencv/modules/line_descriptor/samples/lines_extraction.cpp > CMakeFiles/example_line_descriptor_lines_extraction.dir/samples/lines_extraction.cpp.i
modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/samples/lines_extraction.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/example_line_descriptor_lines_extraction.dir/samples/lines_extraction.cpp.s"
cd /home/ubisum/src/opencv/modules/line_descriptor && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /home/ubisum/src/opencv/modules/line_descriptor/samples/lines_extraction.cpp -o CMakeFiles/example_line_descriptor_lines_extraction.dir/samples/lines_extraction.cpp.s
modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/samples/lines_extraction.cpp.o.requires:
.PHONY : modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/samples/lines_extraction.cpp.o.requires
modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/samples/lines_extraction.cpp.o.provides: modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/samples/lines_extraction.cpp.o.requires
$(MAKE) -f modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/build.make modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/samples/lines_extraction.cpp.o.provides.build
.PHONY : modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/samples/lines_extraction.cpp.o.provides
modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/samples/lines_extraction.cpp.o.provides.build: modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/samples/lines_extraction.cpp.o
# Object files for target example_line_descriptor_lines_extraction
example_line_descriptor_lines_extraction_OBJECTS = \
"CMakeFiles/example_line_descriptor_lines_extraction.dir/samples/lines_extraction.cpp.o"
# External object files for target example_line_descriptor_lines_extraction
example_line_descriptor_lines_extraction_EXTERNAL_OBJECTS =
bin/example_line_descriptor_lines_extraction: modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/samples/lines_extraction.cpp.o
bin/example_line_descriptor_lines_extraction: lib/libopencv_line_descriptor.so.3.0.0
bin/example_line_descriptor_lines_extraction: lib/libopencv_core.so.3.0.0
bin/example_line_descriptor_lines_extraction: lib/libopencv_flann.so.3.0.0
bin/example_line_descriptor_lines_extraction: lib/libopencv_imgproc.so.3.0.0
bin/example_line_descriptor_lines_extraction: lib/libopencv_highgui.so.3.0.0
bin/example_line_descriptor_lines_extraction: lib/libopencv_features2d.so.3.0.0
bin/example_line_descriptor_lines_extraction: lib/libopencv_optim.so.3.0.0
bin/example_line_descriptor_lines_extraction: lib/libopencv_highgui.so.3.0.0
bin/example_line_descriptor_lines_extraction: lib/libopencv_flann.so.3.0.0
bin/example_line_descriptor_lines_extraction: lib/libopencv_imgproc.so.3.0.0
bin/example_line_descriptor_lines_extraction: lib/libopencv_core.so.3.0.0
bin/example_line_descriptor_lines_extraction: modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/build.make
bin/example_line_descriptor_lines_extraction: modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/link.txt
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --red --bold "Linking CXX executable ../../bin/example_line_descriptor_lines_extraction"
cd /home/ubisum/src/opencv/modules/line_descriptor && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/example_line_descriptor_lines_extraction.dir/link.txt --verbose=$(VERBOSE)
# Rule to build all files generated by this target.
modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/build: bin/example_line_descriptor_lines_extraction
.PHONY : modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/build
modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/requires: modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/samples/lines_extraction.cpp.o.requires
.PHONY : modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/requires
modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/clean:
cd /home/ubisum/src/opencv/modules/line_descriptor && $(CMAKE_COMMAND) -P CMakeFiles/example_line_descriptor_lines_extraction.dir/cmake_clean.cmake
.PHONY : modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/clean
modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/depend:
cd /home/ubisum/src/opencv && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/ubisum/src/opencv /home/ubisum/src/opencv/modules/line_descriptor /home/ubisum/src/opencv /home/ubisum/src/opencv/modules/line_descriptor /home/ubisum/src/opencv/modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/DependInfo.cmake --color=$(COLOR)
.PHONY : modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/depend

@ -1,10 +0,0 @@
FILE(REMOVE_RECURSE
"CMakeFiles/example_line_descriptor_lines_extraction.dir/samples/lines_extraction.cpp.o"
"../../bin/example_line_descriptor_lines_extraction.pdb"
"../../bin/example_line_descriptor_lines_extraction"
)
# Per-language clean rules from dependency scanning.
FOREACH(lang CXX)
INCLUDE(CMakeFiles/example_line_descriptor_lines_extraction.dir/cmake_clean_${lang}.cmake OPTIONAL)
ENDFOREACH(lang)

@ -1,2 +0,0 @@
# Empty dependencies file for example_line_descriptor_lines_extraction.
# This may be replaced when dependencies are built.

@ -1,8 +0,0 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 2.8
# compile CXX with /usr/bin/c++
CXX_FLAGS = -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -msse -msse2 -mssse3 -msse4.1 -msse4.2 -ffunction-sections -fvisibility=hidden -fvisibility-inlines-hidden -O2 -g -I/home/ubisum/src/opencv/modules/optim/include -I/home/ubisum/src/opencv/modules/features2d/include -I/home/ubisum/src/opencv/modules/highgui/include -I/home/ubisum/src/opencv/modules/imgproc/include -I/home/ubisum/src/opencv/modules/flann/include -I/home/ubisum/src/opencv/modules/core/include -I/home/ubisum/src/opencv/modules/line_descriptor -I/home/ubisum/src/opencv/modules/line_descriptor/src -I/home/ubisum/src/opencv/modules/line_descriptor/include -I/home/ubisum/src/opencv -isystem /usr/local/include/eigen3
CXX_DEFINES = -D__OPENCV_BUILD=1

@ -1 +0,0 @@
/usr/bin/c++ -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -msse -msse2 -mssse3 -msse4.1 -msse4.2 -ffunction-sections -fvisibility=hidden -fvisibility-inlines-hidden -O2 -g CMakeFiles/example_line_descriptor_lines_extraction.dir/samples/lines_extraction.cpp.o -o ../../bin/example_line_descriptor_lines_extraction -rdynamic ../../lib/libopencv_line_descriptor.so.3.0.0 ../../lib/libopencv_core.so.3.0.0 ../../lib/libopencv_flann.so.3.0.0 ../../lib/libopencv_imgproc.so.3.0.0 ../../lib/libopencv_highgui.so.3.0.0 ../../lib/libopencv_features2d.so.3.0.0 ../../lib/libopencv_optim.so.3.0.0 ../../lib/libopencv_highgui.so.3.0.0 ../../lib/libopencv_flann.so.3.0.0 ../../lib/libopencv_imgproc.so.3.0.0 ../../lib/libopencv_core.so.3.0.0 -Wl,-rpath,/home/ubisum/src/opencv/lib

@ -1,34 +0,0 @@
# The set of languages for which implicit dependencies are needed:
SET(CMAKE_DEPENDS_LANGUAGES
"CXX"
)
# The set of files for implicit dependencies of each language:
SET(CMAKE_DEPENDS_CHECK_CXX
"/home/ubisum/src/opencv/modules/line_descriptor/src/BinaryDescriptor.cpp" "/home/ubisum/src/opencv/modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/BinaryDescriptor.cpp.o"
"/home/ubisum/src/opencv/modules/line_descriptor/src/line_descriptor_init.cpp" "/home/ubisum/src/opencv/modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/line_descriptor_init.cpp.o"
"/home/ubisum/src/opencv/modules/line_descriptor/src/precomp.cpp" "/home/ubisum/src/opencv/modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/precomp.cpp.o"
)
SET(CMAKE_CXX_COMPILER_ID "GNU")
# Preprocessor definitions for this target.
SET(CMAKE_TARGET_DEFINITIONS
"__OPENCV_BUILD=1"
"OPENCV_NOSTL"
)
# Pairs of files generated by the same build rule.
SET(CMAKE_MULTIPLE_OUTPUT_PAIRS
"/home/ubisum/src/opencv/lib/libopencv_line_descriptor.so" "/home/ubisum/src/opencv/lib/libopencv_line_descriptor.so.3.0.0"
"/home/ubisum/src/opencv/lib/libopencv_line_descriptor.so.3.0" "/home/ubisum/src/opencv/lib/libopencv_line_descriptor.so.3.0.0"
)
# Targets to which this target links.
SET(CMAKE_TARGET_LINKED_INFO_FILES
"/home/ubisum/src/opencv/modules/core/CMakeFiles/opencv_core.dir/DependInfo.cmake"
"/home/ubisum/src/opencv/modules/flann/CMakeFiles/opencv_flann.dir/DependInfo.cmake"
"/home/ubisum/src/opencv/modules/imgproc/CMakeFiles/opencv_imgproc.dir/DependInfo.cmake"
"/home/ubisum/src/opencv/modules/highgui/CMakeFiles/opencv_highgui.dir/DependInfo.cmake"
"/home/ubisum/src/opencv/modules/features2d/CMakeFiles/opencv_features2d.dir/DependInfo.cmake"
"/home/ubisum/src/opencv/modules/optim/CMakeFiles/opencv_optim.dir/DependInfo.cmake"
)

@ -1,169 +0,0 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 2.8
#=============================================================================
# Special targets provided by cmake.
# Disable implicit rules so canonical targets will work.
.SUFFIXES:
# Remove some rules from gmake that .SUFFIXES does not remove.
SUFFIXES =
.SUFFIXES: .hpux_make_needs_suffix_list
# Suppress display of executed commands.
$(VERBOSE).SILENT:
# A target that is always out of date.
cmake_force:
.PHONY : cmake_force
#=============================================================================
# Set environment variables for the build.
# The shell in which to execute make rules.
SHELL = /bin/sh
# The CMake executable.
CMAKE_COMMAND = /usr/bin/cmake
# The command to remove a file.
RM = /usr/bin/cmake -E remove -f
# The program to use to edit the cache.
CMAKE_EDIT_COMMAND = /usr/bin/ccmake
# The top-level source directory on which CMake was run.
CMAKE_SOURCE_DIR = /home/ubisum/src/opencv
# The top-level build directory on which CMake was run.
CMAKE_BINARY_DIR = /home/ubisum/src/opencv
# Include any dependencies generated for this target.
include modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/depend.make
# Include the progress variables for this target.
include modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/progress.make
# Include the compile flags for this target's objects.
include modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/flags.make
modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/line_descriptor_init.cpp.o: modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/flags.make
modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/line_descriptor_init.cpp.o: modules/line_descriptor/src/line_descriptor_init.cpp
$(CMAKE_COMMAND) -E cmake_progress_report /home/ubisum/src/opencv/CMakeFiles $(CMAKE_PROGRESS_1)
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Building CXX object modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/line_descriptor_init.cpp.o"
cd /home/ubisum/src/opencv/modules/line_descriptor && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -include "/home/ubisum/src/opencv/modules/line_descriptor/precomp.hpp" -Winvalid-pch -o CMakeFiles/opencv_line_descriptor.dir/src/line_descriptor_init.cpp.o -c /home/ubisum/src/opencv/modules/line_descriptor/src/line_descriptor_init.cpp
modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/line_descriptor_init.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/opencv_line_descriptor.dir/src/line_descriptor_init.cpp.i"
cd /home/ubisum/src/opencv/modules/line_descriptor && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -include "/home/ubisum/src/opencv/modules/line_descriptor/precomp.hpp" -Winvalid-pch -E /home/ubisum/src/opencv/modules/line_descriptor/src/line_descriptor_init.cpp > CMakeFiles/opencv_line_descriptor.dir/src/line_descriptor_init.cpp.i
modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/line_descriptor_init.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/opencv_line_descriptor.dir/src/line_descriptor_init.cpp.s"
cd /home/ubisum/src/opencv/modules/line_descriptor && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -include "/home/ubisum/src/opencv/modules/line_descriptor/precomp.hpp" -Winvalid-pch -S /home/ubisum/src/opencv/modules/line_descriptor/src/line_descriptor_init.cpp -o CMakeFiles/opencv_line_descriptor.dir/src/line_descriptor_init.cpp.s
modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/line_descriptor_init.cpp.o.requires:
.PHONY : modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/line_descriptor_init.cpp.o.requires
modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/line_descriptor_init.cpp.o.provides: modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/line_descriptor_init.cpp.o.requires
$(MAKE) -f modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/build.make modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/line_descriptor_init.cpp.o.provides.build
.PHONY : modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/line_descriptor_init.cpp.o.provides
modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/line_descriptor_init.cpp.o.provides.build: modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/line_descriptor_init.cpp.o
modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/BinaryDescriptor.cpp.o: modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/flags.make
modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/BinaryDescriptor.cpp.o: modules/line_descriptor/src/BinaryDescriptor.cpp
$(CMAKE_COMMAND) -E cmake_progress_report /home/ubisum/src/opencv/CMakeFiles $(CMAKE_PROGRESS_2)
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Building CXX object modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/BinaryDescriptor.cpp.o"
cd /home/ubisum/src/opencv/modules/line_descriptor && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -include "/home/ubisum/src/opencv/modules/line_descriptor/precomp.hpp" -Winvalid-pch -o CMakeFiles/opencv_line_descriptor.dir/src/BinaryDescriptor.cpp.o -c /home/ubisum/src/opencv/modules/line_descriptor/src/BinaryDescriptor.cpp
modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/BinaryDescriptor.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/opencv_line_descriptor.dir/src/BinaryDescriptor.cpp.i"
cd /home/ubisum/src/opencv/modules/line_descriptor && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -include "/home/ubisum/src/opencv/modules/line_descriptor/precomp.hpp" -Winvalid-pch -E /home/ubisum/src/opencv/modules/line_descriptor/src/BinaryDescriptor.cpp > CMakeFiles/opencv_line_descriptor.dir/src/BinaryDescriptor.cpp.i
modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/BinaryDescriptor.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/opencv_line_descriptor.dir/src/BinaryDescriptor.cpp.s"
cd /home/ubisum/src/opencv/modules/line_descriptor && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -include "/home/ubisum/src/opencv/modules/line_descriptor/precomp.hpp" -Winvalid-pch -S /home/ubisum/src/opencv/modules/line_descriptor/src/BinaryDescriptor.cpp -o CMakeFiles/opencv_line_descriptor.dir/src/BinaryDescriptor.cpp.s
modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/BinaryDescriptor.cpp.o.requires:
.PHONY : modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/BinaryDescriptor.cpp.o.requires
modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/BinaryDescriptor.cpp.o.provides: modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/BinaryDescriptor.cpp.o.requires
$(MAKE) -f modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/build.make modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/BinaryDescriptor.cpp.o.provides.build
.PHONY : modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/BinaryDescriptor.cpp.o.provides
modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/BinaryDescriptor.cpp.o.provides.build: modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/BinaryDescriptor.cpp.o
modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/precomp.cpp.o: modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/flags.make
modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/precomp.cpp.o: modules/line_descriptor/src/precomp.cpp
$(CMAKE_COMMAND) -E cmake_progress_report /home/ubisum/src/opencv/CMakeFiles $(CMAKE_PROGRESS_3)
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Building CXX object modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/precomp.cpp.o"
cd /home/ubisum/src/opencv/modules/line_descriptor && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -include "/home/ubisum/src/opencv/modules/line_descriptor/precomp.hpp" -Winvalid-pch -o CMakeFiles/opencv_line_descriptor.dir/src/precomp.cpp.o -c /home/ubisum/src/opencv/modules/line_descriptor/src/precomp.cpp
modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/precomp.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/opencv_line_descriptor.dir/src/precomp.cpp.i"
cd /home/ubisum/src/opencv/modules/line_descriptor && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -include "/home/ubisum/src/opencv/modules/line_descriptor/precomp.hpp" -Winvalid-pch -E /home/ubisum/src/opencv/modules/line_descriptor/src/precomp.cpp > CMakeFiles/opencv_line_descriptor.dir/src/precomp.cpp.i
modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/precomp.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/opencv_line_descriptor.dir/src/precomp.cpp.s"
cd /home/ubisum/src/opencv/modules/line_descriptor && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -include "/home/ubisum/src/opencv/modules/line_descriptor/precomp.hpp" -Winvalid-pch -S /home/ubisum/src/opencv/modules/line_descriptor/src/precomp.cpp -o CMakeFiles/opencv_line_descriptor.dir/src/precomp.cpp.s
modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/precomp.cpp.o.requires:
.PHONY : modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/precomp.cpp.o.requires
modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/precomp.cpp.o.provides: modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/precomp.cpp.o.requires
$(MAKE) -f modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/build.make modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/precomp.cpp.o.provides.build
.PHONY : modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/precomp.cpp.o.provides
modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/precomp.cpp.o.provides.build: modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/precomp.cpp.o
# Object files for target opencv_line_descriptor
opencv_line_descriptor_OBJECTS = \
"CMakeFiles/opencv_line_descriptor.dir/src/line_descriptor_init.cpp.o" \
"CMakeFiles/opencv_line_descriptor.dir/src/BinaryDescriptor.cpp.o" \
"CMakeFiles/opencv_line_descriptor.dir/src/precomp.cpp.o"
# External object files for target opencv_line_descriptor
opencv_line_descriptor_EXTERNAL_OBJECTS =
lib/libopencv_line_descriptor.so.3.0.0: modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/line_descriptor_init.cpp.o
lib/libopencv_line_descriptor.so.3.0.0: modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/BinaryDescriptor.cpp.o
lib/libopencv_line_descriptor.so.3.0.0: modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/precomp.cpp.o
lib/libopencv_line_descriptor.so.3.0.0: lib/libopencv_core.so.3.0.0
lib/libopencv_line_descriptor.so.3.0.0: lib/libopencv_flann.so.3.0.0
lib/libopencv_line_descriptor.so.3.0.0: lib/libopencv_imgproc.so.3.0.0
lib/libopencv_line_descriptor.so.3.0.0: lib/libopencv_highgui.so.3.0.0
lib/libopencv_line_descriptor.so.3.0.0: lib/libopencv_features2d.so.3.0.0
lib/libopencv_line_descriptor.so.3.0.0: lib/libopencv_optim.so.3.0.0
lib/libopencv_line_descriptor.so.3.0.0: lib/libopencv_flann.so.3.0.0
lib/libopencv_line_descriptor.so.3.0.0: lib/libopencv_highgui.so.3.0.0
lib/libopencv_line_descriptor.so.3.0.0: lib/libopencv_imgproc.so.3.0.0
lib/libopencv_line_descriptor.so.3.0.0: lib/libopencv_core.so.3.0.0
lib/libopencv_line_descriptor.so.3.0.0: modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/build.make
lib/libopencv_line_descriptor.so.3.0.0: modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/link.txt
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --red --bold "Linking CXX shared library ../../lib/libopencv_line_descriptor.so"
cd /home/ubisum/src/opencv/modules/line_descriptor && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/opencv_line_descriptor.dir/link.txt --verbose=$(VERBOSE)
cd /home/ubisum/src/opencv/modules/line_descriptor && $(CMAKE_COMMAND) -E cmake_symlink_library ../../lib/libopencv_line_descriptor.so.3.0.0 ../../lib/libopencv_line_descriptor.so.3.0 ../../lib/libopencv_line_descriptor.so
lib/libopencv_line_descriptor.so.3.0: lib/libopencv_line_descriptor.so.3.0.0
lib/libopencv_line_descriptor.so: lib/libopencv_line_descriptor.so.3.0.0
# Rule to build all files generated by this target.
modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/build: lib/libopencv_line_descriptor.so
.PHONY : modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/build
modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/requires: modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/line_descriptor_init.cpp.o.requires
modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/requires: modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/BinaryDescriptor.cpp.o.requires
modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/requires: modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/precomp.cpp.o.requires
.PHONY : modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/requires
modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/clean:
cd /home/ubisum/src/opencv/modules/line_descriptor && $(CMAKE_COMMAND) -P CMakeFiles/opencv_line_descriptor.dir/cmake_clean.cmake
.PHONY : modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/clean
modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/depend:
cd /home/ubisum/src/opencv && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/ubisum/src/opencv /home/ubisum/src/opencv/modules/line_descriptor /home/ubisum/src/opencv /home/ubisum/src/opencv/modules/line_descriptor /home/ubisum/src/opencv/modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/DependInfo.cmake --color=$(COLOR)
.PHONY : modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/depend

@ -1,14 +0,0 @@
FILE(REMOVE_RECURSE
"CMakeFiles/opencv_line_descriptor.dir/src/line_descriptor_init.cpp.o"
"CMakeFiles/opencv_line_descriptor.dir/src/BinaryDescriptor.cpp.o"
"CMakeFiles/opencv_line_descriptor.dir/src/precomp.cpp.o"
"../../lib/libopencv_line_descriptor.pdb"
"../../lib/libopencv_line_descriptor.so"
"../../lib/libopencv_line_descriptor.so.3.0.0"
"../../lib/libopencv_line_descriptor.so.3.0"
)
# Per-language clean rules from dependency scanning.
FOREACH(lang CXX)
INCLUDE(CMakeFiles/opencv_line_descriptor.dir/cmake_clean_${lang}.cmake OPTIONAL)
ENDFOREACH(lang)

@ -1,2 +0,0 @@
# Empty dependencies file for opencv_line_descriptor.
# This may be replaced when dependencies are built.

@ -1,14 +0,0 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 2.8
# compile CXX with /usr/bin/c++
CXX_FLAGS = -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -msse -msse2 -mssse3 -msse4.1 -msse4.2 -ffunction-sections -fvisibility=hidden -fvisibility-inlines-hidden -O2 -g -fPIC -I/home/ubisum/src/opencv/modules/optim/include -I/home/ubisum/src/opencv/modules/features2d/include -I/home/ubisum/src/opencv/modules/highgui/include -I/home/ubisum/src/opencv/modules/imgproc/include -I/home/ubisum/src/opencv/modules/flann/include -I/home/ubisum/src/opencv/modules/core/include -I/home/ubisum/src/opencv/modules/line_descriptor -I/home/ubisum/src/opencv/modules/line_descriptor/src -I/home/ubisum/src/opencv/modules/line_descriptor/include -I/home/ubisum/src/opencv -isystem /usr/local/include/eigen3
CXX_DEFINES = -DCVAPI_EXPORTS -D__OPENCV_BUILD=1 -DOPENCV_NOSTL
# Custom flags: modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/line_descriptor_init.cpp.o_FLAGS = -include "/home/ubisum/src/opencv/modules/line_descriptor/precomp.hpp" -Winvalid-pch
# Custom flags: modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/BinaryDescriptor.cpp.o_FLAGS = -include "/home/ubisum/src/opencv/modules/line_descriptor/precomp.hpp" -Winvalid-pch
# Custom flags: modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/precomp.cpp.o_FLAGS = -include "/home/ubisum/src/opencv/modules/line_descriptor/precomp.hpp" -Winvalid-pch

@ -1 +0,0 @@
/usr/bin/c++ -fPIC -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -msse -msse2 -mssse3 -msse4.1 -msse4.2 -ffunction-sections -fvisibility=hidden -fvisibility-inlines-hidden -O2 -g -shared -Wl,-soname,libopencv_line_descriptor.so.3.0 -o ../../lib/libopencv_line_descriptor.so.3.0.0 CMakeFiles/opencv_line_descriptor.dir/src/line_descriptor_init.cpp.o CMakeFiles/opencv_line_descriptor.dir/src/BinaryDescriptor.cpp.o CMakeFiles/opencv_line_descriptor.dir/src/precomp.cpp.o ../../lib/libopencv_core.so.3.0.0 ../../lib/libopencv_flann.so.3.0.0 ../../lib/libopencv_imgproc.so.3.0.0 ../../lib/libopencv_highgui.so.3.0.0 ../../lib/libopencv_features2d.so.3.0.0 ../../lib/libopencv_optim.so.3.0.0 -ldl -lm -lpthread -lrt -ltbb ../../lib/libopencv_flann.so.3.0.0 ../../lib/libopencv_highgui.so.3.0.0 ../../lib/libopencv_imgproc.so.3.0.0 ../../lib/libopencv_core.so.3.0.0 -Wl,-rpath,/home/ubisum/src/opencv/lib:

@ -1,4 +0,0 @@
CMAKE_PROGRESS_1 =
CMAKE_PROGRESS_2 =
CMAKE_PROGRESS_3 =

@ -1,18 +0,0 @@
# The set of languages for which implicit dependencies are needed:
SET(CMAKE_DEPENDS_LANGUAGES
"CXX"
)
# The set of files for implicit dependencies of each language:
SET(CMAKE_DEPENDS_CHECK_CXX
"/home/ubisum/src/opencv/modules/line_descriptor/opencv_line_descriptor_pch_dephelp.cxx" "/home/ubisum/src/opencv/modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/opencv_line_descriptor_pch_dephelp.cxx.o"
)
SET(CMAKE_CXX_COMPILER_ID "GNU")
# Preprocessor definitions for this target.
SET(CMAKE_TARGET_DEFINITIONS
"__OPENCV_BUILD=1"
)
# Targets to which this target links.
SET(CMAKE_TARGET_LINKED_INFO_FILES
)

@ -1,113 +0,0 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 2.8
#=============================================================================
# Special targets provided by cmake.
# Disable implicit rules so canonical targets will work.
.SUFFIXES:
# Remove some rules from gmake that .SUFFIXES does not remove.
SUFFIXES =
.SUFFIXES: .hpux_make_needs_suffix_list
# Suppress display of executed commands.
$(VERBOSE).SILENT:
# A target that is always out of date.
cmake_force:
.PHONY : cmake_force
#=============================================================================
# Set environment variables for the build.
# The shell in which to execute make rules.
SHELL = /bin/sh
# The CMake executable.
CMAKE_COMMAND = /usr/bin/cmake
# The command to remove a file.
RM = /usr/bin/cmake -E remove -f
# The program to use to edit the cache.
CMAKE_EDIT_COMMAND = /usr/bin/ccmake
# The top-level source directory on which CMake was run.
CMAKE_SOURCE_DIR = /home/ubisum/src/opencv
# The top-level build directory on which CMake was run.
CMAKE_BINARY_DIR = /home/ubisum/src/opencv
# Include any dependencies generated for this target.
include modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/depend.make
# Include the progress variables for this target.
include modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/progress.make
# Include the compile flags for this target's objects.
include modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/flags.make
modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/opencv_line_descriptor_pch_dephelp.cxx.o: modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/flags.make
modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/opencv_line_descriptor_pch_dephelp.cxx.o: modules/line_descriptor/opencv_line_descriptor_pch_dephelp.cxx
$(CMAKE_COMMAND) -E cmake_progress_report /home/ubisum/src/opencv/CMakeFiles $(CMAKE_PROGRESS_1)
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Building CXX object modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/opencv_line_descriptor_pch_dephelp.cxx.o"
cd /home/ubisum/src/opencv/modules/line_descriptor && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/opencv_line_descriptor_pch_dephelp.cxx.o -c /home/ubisum/src/opencv/modules/line_descriptor/opencv_line_descriptor_pch_dephelp.cxx
modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/opencv_line_descriptor_pch_dephelp.cxx.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/opencv_line_descriptor_pch_dephelp.cxx.i"
cd /home/ubisum/src/opencv/modules/line_descriptor && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /home/ubisum/src/opencv/modules/line_descriptor/opencv_line_descriptor_pch_dephelp.cxx > CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/opencv_line_descriptor_pch_dephelp.cxx.i
modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/opencv_line_descriptor_pch_dephelp.cxx.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/opencv_line_descriptor_pch_dephelp.cxx.s"
cd /home/ubisum/src/opencv/modules/line_descriptor && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /home/ubisum/src/opencv/modules/line_descriptor/opencv_line_descriptor_pch_dephelp.cxx -o CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/opencv_line_descriptor_pch_dephelp.cxx.s
modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/opencv_line_descriptor_pch_dephelp.cxx.o.requires:
.PHONY : modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/opencv_line_descriptor_pch_dephelp.cxx.o.requires
modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/opencv_line_descriptor_pch_dephelp.cxx.o.provides: modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/opencv_line_descriptor_pch_dephelp.cxx.o.requires
$(MAKE) -f modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/build.make modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/opencv_line_descriptor_pch_dephelp.cxx.o.provides.build
.PHONY : modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/opencv_line_descriptor_pch_dephelp.cxx.o.provides
modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/opencv_line_descriptor_pch_dephelp.cxx.o.provides.build: modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/opencv_line_descriptor_pch_dephelp.cxx.o
modules/line_descriptor/opencv_line_descriptor_pch_dephelp.cxx: modules/line_descriptor/src/precomp.hpp
$(CMAKE_COMMAND) -E cmake_progress_report /home/ubisum/src/opencv/CMakeFiles $(CMAKE_PROGRESS_2)
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold "Generating opencv_line_descriptor_pch_dephelp.cxx"
cd /home/ubisum/src/opencv/modules/line_descriptor && /usr/bin/cmake -E echo \#include\ \"/home/ubisum/src/opencv/modules/line_descriptor/src/precomp.hpp\" > /home/ubisum/src/opencv/modules/line_descriptor/opencv_line_descriptor_pch_dephelp.cxx
cd /home/ubisum/src/opencv/modules/line_descriptor && /usr/bin/cmake -E echo int\ testfunction\(\)\; >> /home/ubisum/src/opencv/modules/line_descriptor/opencv_line_descriptor_pch_dephelp.cxx
cd /home/ubisum/src/opencv/modules/line_descriptor && /usr/bin/cmake -E echo int\ testfunction\(\) >> /home/ubisum/src/opencv/modules/line_descriptor/opencv_line_descriptor_pch_dephelp.cxx
cd /home/ubisum/src/opencv/modules/line_descriptor && /usr/bin/cmake -E echo { >> /home/ubisum/src/opencv/modules/line_descriptor/opencv_line_descriptor_pch_dephelp.cxx
cd /home/ubisum/src/opencv/modules/line_descriptor && /usr/bin/cmake -E echo \ \ \ \ \return\ 0\; >> /home/ubisum/src/opencv/modules/line_descriptor/opencv_line_descriptor_pch_dephelp.cxx
cd /home/ubisum/src/opencv/modules/line_descriptor && /usr/bin/cmake -E echo } >> /home/ubisum/src/opencv/modules/line_descriptor/opencv_line_descriptor_pch_dephelp.cxx
# Object files for target opencv_line_descriptor_pch_dephelp
opencv_line_descriptor_pch_dephelp_OBJECTS = \
"CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/opencv_line_descriptor_pch_dephelp.cxx.o"
# External object files for target opencv_line_descriptor_pch_dephelp
opencv_line_descriptor_pch_dephelp_EXTERNAL_OBJECTS =
lib/libopencv_line_descriptor_pch_dephelp.a: modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/opencv_line_descriptor_pch_dephelp.cxx.o
lib/libopencv_line_descriptor_pch_dephelp.a: modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/build.make
lib/libopencv_line_descriptor_pch_dephelp.a: modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/link.txt
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --red --bold "Linking CXX static library ../../lib/libopencv_line_descriptor_pch_dephelp.a"
cd /home/ubisum/src/opencv/modules/line_descriptor && $(CMAKE_COMMAND) -P CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/cmake_clean_target.cmake
cd /home/ubisum/src/opencv/modules/line_descriptor && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/link.txt --verbose=$(VERBOSE)
# Rule to build all files generated by this target.
modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/build: lib/libopencv_line_descriptor_pch_dephelp.a
.PHONY : modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/build
modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/requires: modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/opencv_line_descriptor_pch_dephelp.cxx.o.requires
.PHONY : modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/requires
modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/clean:
cd /home/ubisum/src/opencv/modules/line_descriptor && $(CMAKE_COMMAND) -P CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/cmake_clean.cmake
.PHONY : modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/clean
modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/depend: modules/line_descriptor/opencv_line_descriptor_pch_dephelp.cxx
cd /home/ubisum/src/opencv && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/ubisum/src/opencv /home/ubisum/src/opencv/modules/line_descriptor /home/ubisum/src/opencv /home/ubisum/src/opencv/modules/line_descriptor /home/ubisum/src/opencv/modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/DependInfo.cmake --color=$(COLOR)
.PHONY : modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/depend

@ -1,11 +0,0 @@
FILE(REMOVE_RECURSE
"CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/opencv_line_descriptor_pch_dephelp.cxx.o"
"opencv_line_descriptor_pch_dephelp.cxx"
"../../lib/libopencv_line_descriptor_pch_dephelp.pdb"
"../../lib/libopencv_line_descriptor_pch_dephelp.a"
)
# Per-language clean rules from dependency scanning.
FOREACH(lang CXX)
INCLUDE(CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/cmake_clean_${lang}.cmake OPTIONAL)
ENDFOREACH(lang)

@ -1,3 +0,0 @@
FILE(REMOVE_RECURSE
"../../lib/libopencv_line_descriptor_pch_dephelp.a"
)

@ -1,2 +0,0 @@
# Empty dependencies file for opencv_line_descriptor_pch_dephelp.
# This may be replaced when dependencies are built.

@ -1,8 +0,0 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 2.8
# compile CXX with /usr/bin/c++
CXX_FLAGS = -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -msse -msse2 -mssse3 -msse4.1 -msse4.2 -ffunction-sections -fvisibility=hidden -fvisibility-inlines-hidden -O2 -g -I/home/ubisum/src/opencv/modules/optim/include -I/home/ubisum/src/opencv/modules/features2d/include -I/home/ubisum/src/opencv/modules/highgui/include -I/home/ubisum/src/opencv/modules/imgproc/include -I/home/ubisum/src/opencv/modules/flann/include -I/home/ubisum/src/opencv/modules/core/include -I/home/ubisum/src/opencv/modules/line_descriptor -I/home/ubisum/src/opencv/modules/line_descriptor/src -I/home/ubisum/src/opencv/modules/line_descriptor/include -I/home/ubisum/src/opencv -isystem /usr/local/include/eigen3
CXX_DEFINES = -D__OPENCV_BUILD=1

@ -1,2 +0,0 @@
/usr/bin/ar cr ../../lib/libopencv_line_descriptor_pch_dephelp.a CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/opencv_line_descriptor_pch_dephelp.cxx.o
/usr/bin/ranlib ../../lib/libopencv_line_descriptor_pch_dephelp.a

@ -1,13 +0,0 @@
# The set of languages for which implicit dependencies are needed:
SET(CMAKE_DEPENDS_LANGUAGES
)
# The set of files for implicit dependencies of each language:
# Preprocessor definitions for this target.
SET(CMAKE_TARGET_DEFINITIONS
"__OPENCV_BUILD=1"
)
# Targets to which this target links.
SET(CMAKE_TARGET_LINKED_INFO_FILES
)

@ -1,80 +0,0 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 2.8
#=============================================================================
# Special targets provided by cmake.
# Disable implicit rules so canonical targets will work.
.SUFFIXES:
# Remove some rules from gmake that .SUFFIXES does not remove.
SUFFIXES =
.SUFFIXES: .hpux_make_needs_suffix_list
# Suppress display of executed commands.
$(VERBOSE).SILENT:
# A target that is always out of date.
cmake_force:
.PHONY : cmake_force
#=============================================================================
# Set environment variables for the build.
# The shell in which to execute make rules.
SHELL = /bin/sh
# The CMake executable.
CMAKE_COMMAND = /usr/bin/cmake
# The command to remove a file.
RM = /usr/bin/cmake -E remove -f
# The program to use to edit the cache.
CMAKE_EDIT_COMMAND = /usr/bin/ccmake
# The top-level source directory on which CMake was run.
CMAKE_SOURCE_DIR = /home/ubisum/src/opencv
# The top-level build directory on which CMake was run.
CMAKE_BINARY_DIR = /home/ubisum/src/opencv
# Utility rule file for pch_Generate_opencv_line_descriptor.
# Include the progress variables for this target.
include modules/line_descriptor/CMakeFiles/pch_Generate_opencv_line_descriptor.dir/progress.make
modules/line_descriptor/CMakeFiles/pch_Generate_opencv_line_descriptor: modules/line_descriptor/precomp.hpp.gch/opencv_line_descriptor_RelWithDebInfo.gch
modules/line_descriptor/precomp.hpp.gch/opencv_line_descriptor_RelWithDebInfo.gch: modules/line_descriptor/src/precomp.hpp
modules/line_descriptor/precomp.hpp.gch/opencv_line_descriptor_RelWithDebInfo.gch: modules/line_descriptor/precomp.hpp
modules/line_descriptor/precomp.hpp.gch/opencv_line_descriptor_RelWithDebInfo.gch: lib/libopencv_line_descriptor_pch_dephelp.a
$(CMAKE_COMMAND) -E cmake_progress_report /home/ubisum/src/opencv/CMakeFiles $(CMAKE_PROGRESS_1)
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold "Generating precomp.hpp.gch/opencv_line_descriptor_RelWithDebInfo.gch"
cd /home/ubisum/src/opencv/modules/line_descriptor && /usr/bin/cmake -E make_directory /home/ubisum/src/opencv/modules/line_descriptor/precomp.hpp.gch
cd /home/ubisum/src/opencv/modules/line_descriptor && /usr/bin/c++ -O2 -g -fPIC -DOPENCV_NOSTL -I"/home/ubisum/src/opencv/modules/optim/include" -I"/home/ubisum/src/opencv/modules/features2d/include" -I"/home/ubisum/src/opencv/modules/highgui/include" -I"/home/ubisum/src/opencv/modules/imgproc/include" -I"/home/ubisum/src/opencv/modules/flann/include" -I"/home/ubisum/src/opencv/modules/core/include" -I"/home/ubisum/src/opencv/modules/line_descriptor" -I"/home/ubisum/src/opencv/modules/line_descriptor/src" -I"/home/ubisum/src/opencv/modules/line_descriptor/include" -isystem"/home/ubisum/src/opencv" -isystem"/usr/local/include/eigen3" -D__OPENCV_BUILD=1 -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -msse -msse2 -mssse3 -msse4.1 -msse4.2 -ffunction-sections -fvisibility=hidden -fvisibility-inlines-hidden -DCVAPI_EXPORTS -x c++-header -o /home/ubisum/src/opencv/modules/line_descriptor/precomp.hpp.gch/opencv_line_descriptor_RelWithDebInfo.gch /home/ubisum/src/opencv/modules/line_descriptor/precomp.hpp
modules/line_descriptor/precomp.hpp: modules/line_descriptor/src/precomp.hpp
$(CMAKE_COMMAND) -E cmake_progress_report /home/ubisum/src/opencv/CMakeFiles $(CMAKE_PROGRESS_2)
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold "Generating precomp.hpp"
cd /home/ubisum/src/opencv/modules/line_descriptor && /usr/bin/cmake -E copy /home/ubisum/src/opencv/modules/line_descriptor/src/precomp.hpp /home/ubisum/src/opencv/modules/line_descriptor/precomp.hpp
pch_Generate_opencv_line_descriptor: modules/line_descriptor/CMakeFiles/pch_Generate_opencv_line_descriptor
pch_Generate_opencv_line_descriptor: modules/line_descriptor/precomp.hpp.gch/opencv_line_descriptor_RelWithDebInfo.gch
pch_Generate_opencv_line_descriptor: modules/line_descriptor/precomp.hpp
pch_Generate_opencv_line_descriptor: modules/line_descriptor/CMakeFiles/pch_Generate_opencv_line_descriptor.dir/build.make
.PHONY : pch_Generate_opencv_line_descriptor
# Rule to build all files generated by this target.
modules/line_descriptor/CMakeFiles/pch_Generate_opencv_line_descriptor.dir/build: pch_Generate_opencv_line_descriptor
.PHONY : modules/line_descriptor/CMakeFiles/pch_Generate_opencv_line_descriptor.dir/build
modules/line_descriptor/CMakeFiles/pch_Generate_opencv_line_descriptor.dir/clean:
cd /home/ubisum/src/opencv/modules/line_descriptor && $(CMAKE_COMMAND) -P CMakeFiles/pch_Generate_opencv_line_descriptor.dir/cmake_clean.cmake
.PHONY : modules/line_descriptor/CMakeFiles/pch_Generate_opencv_line_descriptor.dir/clean
modules/line_descriptor/CMakeFiles/pch_Generate_opencv_line_descriptor.dir/depend:
cd /home/ubisum/src/opencv && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/ubisum/src/opencv /home/ubisum/src/opencv/modules/line_descriptor /home/ubisum/src/opencv /home/ubisum/src/opencv/modules/line_descriptor /home/ubisum/src/opencv/modules/line_descriptor/CMakeFiles/pch_Generate_opencv_line_descriptor.dir/DependInfo.cmake --color=$(COLOR)
.PHONY : modules/line_descriptor/CMakeFiles/pch_Generate_opencv_line_descriptor.dir/depend

@ -1,10 +0,0 @@
FILE(REMOVE_RECURSE
"CMakeFiles/pch_Generate_opencv_line_descriptor"
"precomp.hpp.gch/opencv_line_descriptor_RelWithDebInfo.gch"
"precomp.hpp"
)
# Per-language clean rules from dependency scanning.
FOREACH(lang)
INCLUDE(CMakeFiles/pch_Generate_opencv_line_descriptor.dir/cmake_clean_${lang}.cmake OPTIONAL)
ENDFOREACH(lang)

@ -1,404 +0,0 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 2.8
# Default target executed when no arguments are given to make.
default_target: all
.PHONY : default_target
#=============================================================================
# Special targets provided by cmake.
# Disable implicit rules so canonical targets will work.
.SUFFIXES:
# Remove some rules from gmake that .SUFFIXES does not remove.
SUFFIXES =
.SUFFIXES: .hpux_make_needs_suffix_list
# Suppress display of executed commands.
$(VERBOSE).SILENT:
# A target that is always out of date.
cmake_force:
.PHONY : cmake_force
#=============================================================================
# Set environment variables for the build.
# The shell in which to execute make rules.
SHELL = /bin/sh
# The CMake executable.
CMAKE_COMMAND = /usr/bin/cmake
# The command to remove a file.
RM = /usr/bin/cmake -E remove -f
# The program to use to edit the cache.
CMAKE_EDIT_COMMAND = /usr/bin/ccmake
# The top-level source directory on which CMake was run.
CMAKE_SOURCE_DIR = /home/ubisum/src/opencv
# The top-level build directory on which CMake was run.
CMAKE_BINARY_DIR = /home/ubisum/src/opencv
#=============================================================================
# Targets provided globally by CMake.
# Special rule for the target edit_cache
edit_cache:
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..."
/usr/bin/ccmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
.PHONY : edit_cache
# Special rule for the target edit_cache
edit_cache/fast: edit_cache
.PHONY : edit_cache/fast
# Special rule for the target install
install: preinstall
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
/usr/bin/cmake -P cmake_install.cmake
.PHONY : install
# Special rule for the target install
install/fast: preinstall/fast
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
/usr/bin/cmake -P cmake_install.cmake
.PHONY : install/fast
# Special rule for the target install/local
install/local: preinstall
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..."
/usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake
.PHONY : install/local
# Special rule for the target install/local
install/local/fast: install/local
.PHONY : install/local/fast
# Special rule for the target install/strip
install/strip: preinstall
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..."
/usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake
.PHONY : install/strip
# Special rule for the target install/strip
install/strip/fast: install/strip
.PHONY : install/strip/fast
# Special rule for the target list_install_components
list_install_components:
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\" \"main\""
.PHONY : list_install_components
# Special rule for the target list_install_components
list_install_components/fast: list_install_components
.PHONY : list_install_components/fast
# Special rule for the target rebuild_cache
rebuild_cache:
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
/usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
.PHONY : rebuild_cache
# Special rule for the target rebuild_cache
rebuild_cache/fast: rebuild_cache
.PHONY : rebuild_cache/fast
# The main all target
all: cmake_check_build_system
cd /home/ubisum/src/opencv && $(CMAKE_COMMAND) -E cmake_progress_start /home/ubisum/src/opencv/CMakeFiles /home/ubisum/src/opencv/modules/line_descriptor/CMakeFiles/progress.marks
cd /home/ubisum/src/opencv && $(MAKE) -f CMakeFiles/Makefile2 modules/line_descriptor/all
$(CMAKE_COMMAND) -E cmake_progress_start /home/ubisum/src/opencv/CMakeFiles 0
.PHONY : all
# The main clean target
clean:
cd /home/ubisum/src/opencv && $(MAKE) -f CMakeFiles/Makefile2 modules/line_descriptor/clean
.PHONY : clean
# The main clean target
clean/fast: clean
.PHONY : clean/fast
# Prepare targets for installation.
preinstall: all
cd /home/ubisum/src/opencv && $(MAKE) -f CMakeFiles/Makefile2 modules/line_descriptor/preinstall
.PHONY : preinstall
# Prepare targets for installation.
preinstall/fast:
cd /home/ubisum/src/opencv && $(MAKE) -f CMakeFiles/Makefile2 modules/line_descriptor/preinstall
.PHONY : preinstall/fast
# clear depends
depend:
cd /home/ubisum/src/opencv && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
.PHONY : depend
# Convenience name for target.
modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/rule:
cd /home/ubisum/src/opencv && $(MAKE) -f CMakeFiles/Makefile2 modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/rule
.PHONY : modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/rule
# Convenience name for target.
example_line_descriptor_compute_descriptors: modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/rule
.PHONY : example_line_descriptor_compute_descriptors
# fast build rule for target.
example_line_descriptor_compute_descriptors/fast:
cd /home/ubisum/src/opencv && $(MAKE) -f modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/build.make modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/build
.PHONY : example_line_descriptor_compute_descriptors/fast
# Convenience name for target.
modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/rule:
cd /home/ubisum/src/opencv && $(MAKE) -f CMakeFiles/Makefile2 modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/rule
.PHONY : modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/rule
# Convenience name for target.
example_line_descriptor_lines_extraction: modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/rule
.PHONY : example_line_descriptor_lines_extraction
# fast build rule for target.
example_line_descriptor_lines_extraction/fast:
cd /home/ubisum/src/opencv && $(MAKE) -f modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/build.make modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/build
.PHONY : example_line_descriptor_lines_extraction/fast
# Convenience name for target.
modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/rule:
cd /home/ubisum/src/opencv && $(MAKE) -f CMakeFiles/Makefile2 modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/rule
.PHONY : modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/rule
# Convenience name for target.
opencv_line_descriptor: modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/rule
.PHONY : opencv_line_descriptor
# fast build rule for target.
opencv_line_descriptor/fast:
cd /home/ubisum/src/opencv && $(MAKE) -f modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/build.make modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/build
.PHONY : opencv_line_descriptor/fast
# Convenience name for target.
modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/rule:
cd /home/ubisum/src/opencv && $(MAKE) -f CMakeFiles/Makefile2 modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/rule
.PHONY : modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/rule
# Convenience name for target.
opencv_line_descriptor_pch_dephelp: modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/rule
.PHONY : opencv_line_descriptor_pch_dephelp
# fast build rule for target.
opencv_line_descriptor_pch_dephelp/fast:
cd /home/ubisum/src/opencv && $(MAKE) -f modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/build.make modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/build
.PHONY : opencv_line_descriptor_pch_dephelp/fast
# Convenience name for target.
modules/line_descriptor/CMakeFiles/pch_Generate_opencv_line_descriptor.dir/rule:
cd /home/ubisum/src/opencv && $(MAKE) -f CMakeFiles/Makefile2 modules/line_descriptor/CMakeFiles/pch_Generate_opencv_line_descriptor.dir/rule
.PHONY : modules/line_descriptor/CMakeFiles/pch_Generate_opencv_line_descriptor.dir/rule
# Convenience name for target.
pch_Generate_opencv_line_descriptor: modules/line_descriptor/CMakeFiles/pch_Generate_opencv_line_descriptor.dir/rule
.PHONY : pch_Generate_opencv_line_descriptor
# fast build rule for target.
pch_Generate_opencv_line_descriptor/fast:
cd /home/ubisum/src/opencv && $(MAKE) -f modules/line_descriptor/CMakeFiles/pch_Generate_opencv_line_descriptor.dir/build.make modules/line_descriptor/CMakeFiles/pch_Generate_opencv_line_descriptor.dir/build
.PHONY : pch_Generate_opencv_line_descriptor/fast
opencv_line_descriptor_pch_dephelp.o: opencv_line_descriptor_pch_dephelp.cxx.o
.PHONY : opencv_line_descriptor_pch_dephelp.o
# target to build an object file
opencv_line_descriptor_pch_dephelp.cxx.o:
cd /home/ubisum/src/opencv && $(MAKE) -f modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/build.make modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/opencv_line_descriptor_pch_dephelp.cxx.o
.PHONY : opencv_line_descriptor_pch_dephelp.cxx.o
opencv_line_descriptor_pch_dephelp.i: opencv_line_descriptor_pch_dephelp.cxx.i
.PHONY : opencv_line_descriptor_pch_dephelp.i
# target to preprocess a source file
opencv_line_descriptor_pch_dephelp.cxx.i:
cd /home/ubisum/src/opencv && $(MAKE) -f modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/build.make modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/opencv_line_descriptor_pch_dephelp.cxx.i
.PHONY : opencv_line_descriptor_pch_dephelp.cxx.i
opencv_line_descriptor_pch_dephelp.s: opencv_line_descriptor_pch_dephelp.cxx.s
.PHONY : opencv_line_descriptor_pch_dephelp.s
# target to generate assembly for a file
opencv_line_descriptor_pch_dephelp.cxx.s:
cd /home/ubisum/src/opencv && $(MAKE) -f modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/build.make modules/line_descriptor/CMakeFiles/opencv_line_descriptor_pch_dephelp.dir/opencv_line_descriptor_pch_dephelp.cxx.s
.PHONY : opencv_line_descriptor_pch_dephelp.cxx.s
samples/compute_descriptors.o: samples/compute_descriptors.cpp.o
.PHONY : samples/compute_descriptors.o
# target to build an object file
samples/compute_descriptors.cpp.o:
cd /home/ubisum/src/opencv && $(MAKE) -f modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/build.make modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/samples/compute_descriptors.cpp.o
.PHONY : samples/compute_descriptors.cpp.o
samples/compute_descriptors.i: samples/compute_descriptors.cpp.i
.PHONY : samples/compute_descriptors.i
# target to preprocess a source file
samples/compute_descriptors.cpp.i:
cd /home/ubisum/src/opencv && $(MAKE) -f modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/build.make modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/samples/compute_descriptors.cpp.i
.PHONY : samples/compute_descriptors.cpp.i
samples/compute_descriptors.s: samples/compute_descriptors.cpp.s
.PHONY : samples/compute_descriptors.s
# target to generate assembly for a file
samples/compute_descriptors.cpp.s:
cd /home/ubisum/src/opencv && $(MAKE) -f modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/build.make modules/line_descriptor/CMakeFiles/example_line_descriptor_compute_descriptors.dir/samples/compute_descriptors.cpp.s
.PHONY : samples/compute_descriptors.cpp.s
samples/lines_extraction.o: samples/lines_extraction.cpp.o
.PHONY : samples/lines_extraction.o
# target to build an object file
samples/lines_extraction.cpp.o:
cd /home/ubisum/src/opencv && $(MAKE) -f modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/build.make modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/samples/lines_extraction.cpp.o
.PHONY : samples/lines_extraction.cpp.o
samples/lines_extraction.i: samples/lines_extraction.cpp.i
.PHONY : samples/lines_extraction.i
# target to preprocess a source file
samples/lines_extraction.cpp.i:
cd /home/ubisum/src/opencv && $(MAKE) -f modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/build.make modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/samples/lines_extraction.cpp.i
.PHONY : samples/lines_extraction.cpp.i
samples/lines_extraction.s: samples/lines_extraction.cpp.s
.PHONY : samples/lines_extraction.s
# target to generate assembly for a file
samples/lines_extraction.cpp.s:
cd /home/ubisum/src/opencv && $(MAKE) -f modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/build.make modules/line_descriptor/CMakeFiles/example_line_descriptor_lines_extraction.dir/samples/lines_extraction.cpp.s
.PHONY : samples/lines_extraction.cpp.s
src/BinaryDescriptor.o: src/BinaryDescriptor.cpp.o
.PHONY : src/BinaryDescriptor.o
# target to build an object file
src/BinaryDescriptor.cpp.o:
cd /home/ubisum/src/opencv && $(MAKE) -f modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/build.make modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/BinaryDescriptor.cpp.o
.PHONY : src/BinaryDescriptor.cpp.o
src/BinaryDescriptor.i: src/BinaryDescriptor.cpp.i
.PHONY : src/BinaryDescriptor.i
# target to preprocess a source file
src/BinaryDescriptor.cpp.i:
cd /home/ubisum/src/opencv && $(MAKE) -f modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/build.make modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/BinaryDescriptor.cpp.i
.PHONY : src/BinaryDescriptor.cpp.i
src/BinaryDescriptor.s: src/BinaryDescriptor.cpp.s
.PHONY : src/BinaryDescriptor.s
# target to generate assembly for a file
src/BinaryDescriptor.cpp.s:
cd /home/ubisum/src/opencv && $(MAKE) -f modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/build.make modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/BinaryDescriptor.cpp.s
.PHONY : src/BinaryDescriptor.cpp.s
src/line_descriptor_init.o: src/line_descriptor_init.cpp.o
.PHONY : src/line_descriptor_init.o
# target to build an object file
src/line_descriptor_init.cpp.o:
cd /home/ubisum/src/opencv && $(MAKE) -f modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/build.make modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/line_descriptor_init.cpp.o
.PHONY : src/line_descriptor_init.cpp.o
src/line_descriptor_init.i: src/line_descriptor_init.cpp.i
.PHONY : src/line_descriptor_init.i
# target to preprocess a source file
src/line_descriptor_init.cpp.i:
cd /home/ubisum/src/opencv && $(MAKE) -f modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/build.make modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/line_descriptor_init.cpp.i
.PHONY : src/line_descriptor_init.cpp.i
src/line_descriptor_init.s: src/line_descriptor_init.cpp.s
.PHONY : src/line_descriptor_init.s
# target to generate assembly for a file
src/line_descriptor_init.cpp.s:
cd /home/ubisum/src/opencv && $(MAKE) -f modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/build.make modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/line_descriptor_init.cpp.s
.PHONY : src/line_descriptor_init.cpp.s
src/precomp.o: src/precomp.cpp.o
.PHONY : src/precomp.o
# target to build an object file
src/precomp.cpp.o:
cd /home/ubisum/src/opencv && $(MAKE) -f modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/build.make modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/precomp.cpp.o
.PHONY : src/precomp.cpp.o
src/precomp.i: src/precomp.cpp.i
.PHONY : src/precomp.i
# target to preprocess a source file
src/precomp.cpp.i:
cd /home/ubisum/src/opencv && $(MAKE) -f modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/build.make modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/precomp.cpp.i
.PHONY : src/precomp.cpp.i
src/precomp.s: src/precomp.cpp.s
.PHONY : src/precomp.s
# target to generate assembly for a file
src/precomp.cpp.s:
cd /home/ubisum/src/opencv && $(MAKE) -f modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/build.make modules/line_descriptor/CMakeFiles/opencv_line_descriptor.dir/src/precomp.cpp.s
.PHONY : src/precomp.cpp.s
# Help Target
help:
@echo "The following are some of the valid targets for this Makefile:"
@echo "... all (the default if no target is provided)"
@echo "... clean"
@echo "... depend"
@echo "... edit_cache"
@echo "... example_line_descriptor_compute_descriptors"
@echo "... example_line_descriptor_lines_extraction"
@echo "... install"
@echo "... install/local"
@echo "... install/strip"
@echo "... list_install_components"
@echo "... opencv_line_descriptor"
@echo "... opencv_line_descriptor_pch_dephelp"
@echo "... pch_Generate_opencv_line_descriptor"
@echo "... rebuild_cache"
@echo "... opencv_line_descriptor_pch_dephelp.o"
@echo "... opencv_line_descriptor_pch_dephelp.i"
@echo "... opencv_line_descriptor_pch_dephelp.s"
@echo "... samples/compute_descriptors.o"
@echo "... samples/compute_descriptors.i"
@echo "... samples/compute_descriptors.s"
@echo "... samples/lines_extraction.o"
@echo "... samples/lines_extraction.i"
@echo "... samples/lines_extraction.s"
@echo "... src/BinaryDescriptor.o"
@echo "... src/BinaryDescriptor.i"
@echo "... src/BinaryDescriptor.s"
@echo "... src/line_descriptor_init.o"
@echo "... src/line_descriptor_init.i"
@echo "... src/line_descriptor_init.s"
@echo "... src/precomp.o"
@echo "... src/precomp.i"
@echo "... src/precomp.s"
.PHONY : help
#=============================================================================
# Special targets to cleanup operation of make.
# Special rule to run CMake to check the build system integrity.
# No rule that depends on this can have commands that come from listfiles
# because they might be regenerated.
cmake_check_build_system:
cd /home/ubisum/src/opencv && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
.PHONY : cmake_check_build_system

@ -1,82 +0,0 @@
# Install script for directory: /home/ubisum/src/opencv/modules/line_descriptor
# Set the install prefix
IF(NOT DEFINED CMAKE_INSTALL_PREFIX)
SET(CMAKE_INSTALL_PREFIX "/usr/local")
ENDIF(NOT DEFINED CMAKE_INSTALL_PREFIX)
STRING(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
# Set the install configuration name.
IF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
IF(BUILD_TYPE)
STRING(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
ELSE(BUILD_TYPE)
SET(CMAKE_INSTALL_CONFIG_NAME "RelWithDebInfo")
ENDIF(BUILD_TYPE)
MESSAGE(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
ENDIF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
# Set the component getting installed.
IF(NOT CMAKE_INSTALL_COMPONENT)
IF(COMPONENT)
MESSAGE(STATUS "Install component: \"${COMPONENT}\"")
SET(CMAKE_INSTALL_COMPONENT "${COMPONENT}")
ELSE(COMPONENT)
SET(CMAKE_INSTALL_COMPONENT)
ENDIF(COMPONENT)
ENDIF(NOT CMAKE_INSTALL_COMPONENT)
# Install shared libraries without execute permission?
IF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
SET(CMAKE_INSTALL_SO_NO_EXE "1")
ENDIF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
IF(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "main")
FOREACH(file
"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/libopencv_line_descriptor.so.3.0.0"
"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/libopencv_line_descriptor.so.3.0"
"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/libopencv_line_descriptor.so"
)
IF(EXISTS "${file}" AND
NOT IS_SYMLINK "${file}")
FILE(RPATH_CHECK
FILE "${file}"
RPATH "/usr/local/lib")
ENDIF()
ENDFOREACH()
FILE(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib" TYPE SHARED_LIBRARY FILES
"/home/ubisum/src/opencv/lib/libopencv_line_descriptor.so.3.0.0"
"/home/ubisum/src/opencv/lib/libopencv_line_descriptor.so.3.0"
"/home/ubisum/src/opencv/lib/libopencv_line_descriptor.so"
)
FOREACH(file
"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/libopencv_line_descriptor.so.3.0.0"
"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/libopencv_line_descriptor.so.3.0"
"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/libopencv_line_descriptor.so"
)
IF(EXISTS "${file}" AND
NOT IS_SYMLINK "${file}")
FILE(RPATH_CHANGE
FILE "${file}"
OLD_RPATH "/home/ubisum/src/opencv/lib:"
NEW_RPATH "/usr/local/lib")
IF(CMAKE_INSTALL_DO_STRIP)
EXECUTE_PROCESS(COMMAND "/usr/bin/strip" "${file}")
ENDIF(CMAKE_INSTALL_DO_STRIP)
ENDIF()
ENDFOREACH()
ENDIF(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "main")
IF(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "main")
FILE(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/include/opencv2" TYPE FILE FILES "/home/ubisum/src/opencv/modules/line_descriptor/include/opencv2/line_descriptor.hpp")
ENDIF(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "main")
IF(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "main")
FILE(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/include/opencv2/line_descriptor" TYPE FILE FILES "/home/ubisum/src/opencv/modules/line_descriptor/include/opencv2/line_descriptor/descriptor.hpp")
ENDIF(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "main")
IF(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "main")
FILE(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/include/opencv2/line_descriptor" TYPE FILE FILES "/home/ubisum/src/opencv/modules/line_descriptor/include/opencv2/line_descriptor/LineStructure.hpp")
ENDIF(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "main")

@ -1,217 +0,0 @@
BinaryDescriptor Class
======================
.. highlight:: cpp
BinaryDescriptor Class implements both functionalities for detection of lines and computation of their binary descriptor. Class' interface is mainly based on the ones of classical detectors and extractors, such as Feature2d's `FeatureDetector <http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_feature_detectors.html?highlight=featuredetector#featuredetector>`_ and `DescriptorExtractor <http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_extractors.html?highlight=extractor#DescriptorExtractor : public Algorithm>`_.
Retrieved information about lines is stored in *KeyLine* objects.
BinaryDescriptor::Params
-----------------------------------------------------------------------
.. ocv:struct:: BinaryDescriptor::Params
List of BinaryDescriptor parameters::
struct CV_EXPORTS_W_SIMPLE Params{
CV_WRAP Params();
/* the number of image octaves (default = 5) */
CV_PROP_RW int numOfOctave_;
/* the width of band; (default: 7) */
CV_PROP_RW int widthOfBand_;
/* image's reduction ratio in construction of Gaussian pyramids */
CV_PROP_RW int reductionRatio;
/* read parameters from a FileNode object and store them (struct function) */
void read( const FileNode& fn );
/* store parameters to a FileStorage object (struct function) */
void write( FileStorage& fs ) const;
};
BinaryDescriptor::BinaryDescriptor
----------------------------------
Constructor
.. ocv:function:: bool BinaryDescriptor::BinaryDescriptor( const BinaryDescriptor::Params &parameters = BinaryDescriptor::Params() )
:param parameters: configuration parameters :ocv:struct:`BinaryDescriptor::Params`
If no argument is provided, constructor sets default values (see comments in the code snippet in previous section). Default values are strongly reccomended.
BinaryDescriptor::getNumOfOctaves
---------------------------------
Get current number of octaves
.. ocv:function:: int BinaryDescriptor::getNumOfOctaves()
BinaryDescriptor::setNumOfOctaves
---------------------------------
Set number of octaves
.. ocv:function:: void BinaryDescriptor::setNumOfOctaves( int octaves )
:param octaves: number of octaves
BinaryDescriptor::getWidthOfBand
--------------------------------
Get current width of bands
.. ocv:function:: int BinaryDescriptor::getWidthOfBand()
BinaryDescriptor::setWidthOfBand
--------------------------------
Set width of bands
.. ocv:function:: void BinaryDescriptor::setWidthOfBand( int width )
:param width: width of bands
BinaryDescriptor::getReductionRatio
-----------------------------------
Get current reduction ratio (used in Gaussian pyramids)
.. ocv:function:: int BinaryDescriptor::getReductionRatio()
BinaryDescriptor::setReductionRatio
-----------------------------------
Set reduction ratio (used in Gaussian pyramids)
.. ocv:function:: void BinaryDescriptor::setReductionRatio( int rRatio )
:param rRatio: reduction ratio
BinaryDescriptor::createBinaryDescriptor
----------------------------------------
Create a BinaryDescriptor object with default parameters (or with the ones provided) and return a smart pointer to it
.. ocv:function:: Ptr<BinaryDescriptor> BinaryDescriptor::createBinaryDescriptor()
.. ocv:function:: Ptr<BinaryDescriptor> BinaryDescriptor::createBinaryDescriptor( Params parameters )
BinaryDescriptor::operator()
----------------------------
Define operator '()' to perform detection of KeyLines and computation of descriptors in a row.
.. ocv:function:: void BinaryDescriptor::operator()( InputArray image, InputArray mask, vector<KeyLine>& keylines, OutputArray descriptors, bool useProvidedKeyLines=false ) const
:param image: input image
:param mask: mask matrix to select which lines in KeyLines must be accepted among the ones extracted (used when *keylines* is not empty)
:param keylines: vector that contains input lines (when filled, the detection part will be skipped and input lines will be passed as input to the algorithm computing descriptors)
:param descriptors: matrix that will store final descriptors
:param useProvidedKeyLines: flag (when set to true, detection phase will be skipped and only computation of descriptors will be executed, using lines provided in *keylines*)
BinaryDescriptor::read
----------------------
Read parameters from a FileNode object and store them
.. ocv:function:: void BinaryDescriptor::read( const FileNode& fn )
:param fn: source FileNode file
BinaryDescriptor::write
-----------------------
Store parameters to a FileStorage object
.. ocv:function:: void BinaryDescriptor::write( FileStorage& fs ) const
:param fs: output FileStorage file
BinaryDescriptor::defaultNorm
-----------------------------
Return norm mode
.. ocv:function:: int BinaryDescriptor::defaultNorm() const
BinaryDescriptor::descriptorType
--------------------------------
Return data type
.. ocv:function:: int BinaryDescriptor::descriptorType() const
BinaryDescriptor::descriptorSize
--------------------------------
Return descriptor size
.. ocv:function:: int BinaryDescriptor::descriptorSize() const
BinaryDescriptor::empty
-----------------------
Check whether Gaussian pyramids were created
.. ocv:function:: bool BinaryDescriptor::empty() const
BinaryDescriptor::detect
------------------------
Requires line detection (for one or more images)
.. ocv:function:: void detect( const Mat& image, vector<KeyLine>& keylines, Mat& mask=Mat() )
.. ocv:function:: void detect( const vector<Mat>& images, vector<vector<KeyLine> >& keylines, vector<Mat>& masks=vector<Mat>() ) const
:param image: input image
:param images: input images
:param keylines: vector or set of vectors that will store extracted lines for one or more images
:param mask: mask matrix to detect only KeyLines of interest
:param masks: vector of mask matrices to detect only KeyLines of interest from each input image
BinaryDescriptor::compute
-------------------------
Requires descriptors computation (for one or more images)
.. ocv:function:: void compute( const Mat& image, vector<KeyLine>& keylines, Mat& descriptors ) const
.. ocv:function:: void compute( const vector<Mat>& images, vector<vector<KeyLine> >& keylines, vector<Mat>& descriptors ) const
:param image: input image
:param images: input images
:param keylines: vector or set of vectors containing lines for which descriptors must be computed
:param mask: mask to select for which lines, among the ones provided in input, descriptors must be computed
:param masks: set of masks to select for which lines, among the ones provided in input, descriptors must be computed

@ -17,7 +17,7 @@ List of BinaryDescriptor parameters::
struct CV_EXPORTS_W_SIMPLE Params{ struct CV_EXPORTS_W_SIMPLE Params{
CV_WRAP Params(); CV_WRAP Params();
/* the number of image octaves (default = 5) */ /* the number of image octaves (default = 1) */
CV_PROP_RW int numOfOctave_; CV_PROP_RW int numOfOctave_;
/* the width of band; (default = 7) */ /* the width of band; (default = 7) */
@ -215,3 +215,11 @@ Requires descriptors computation (for one or more images)
:param mask: mask to select for which lines, among the ones provided in input, descriptors must be computed :param mask: mask to select for which lines, among the ones provided in input, descriptors must be computed
:param masks: set of masks to select for which lines, among the ones provided in input, descriptors must be computed :param masks: set of masks to select for which lines, among the ones provided in input, descriptors must be computed
Related pages
-------------
* `Binary descriptors for lines extracted from an image <line_descriptor.html>`_
* `Matching with binary descriptors <matching.html>`_
* `Drawing Function of Keylines and Matches <drawing_functions.html>`_

@ -0,0 +1,68 @@
Drawing Function of Keylines and Matches
========================================
.. highlight:: cpp
drawLineMatches
---------------
Draws the found matches of keylines from two images.
.. ocv:function:: void drawLineMatches( const Mat& img1, const std::vector<KeyLine>& keylines1, const Mat& img2, const std::vector<KeyLine>& keylines2, const std::vector<DMatch>& matches1to2, Mat& outImg, const Scalar& matchColor=Scalar::all(-1), const Scalar& singleLineColor=Scalar::all(-1), const std::vector<char>& matchesMask=std::vector<char>(), int flags=DrawLinesMatchesFlags::DEFAULT )
:param img1: first image
:param keylines1: keylines extracted from first image
:param img2: second image
:param keylines2: keylines extracted from second image
:param matches1to2: vector of matches
:param outImg: output matrix to draw on
:param matchColor: drawing color for matches (chosen randomly in case of default value)
:param singleLineColor: drawing color for keylines (chosen randomly in case of default value)
:param matchesMask: mask to indicate which matches must be drawn
:param flags: drawing flags
.. note:: If both *matchColor* and *singleLineColor* are set to their default values, function draws matched lines and line connecting them with same color
The structure of drawing flags is shown in the following:
.. code-block:: cpp
/* struct for drawing options */
struct CV_EXPORTS DrawLinesMatchesFlags
{
enum
{
DEFAULT = 0, // Output image matrix will be created (Mat::create),
// i.e. existing memory of output image may be reused.
// Two source images, matches, and single keylines
// will be drawn.
DRAW_OVER_OUTIMG = 1, // Output image matrix will not be
// created (using Mat::create). Matches will be drawn
// on existing content of output image.
NOT_DRAW_SINGLE_LINES = 2 // Single keylines will not be drawn.
};
};
..
drawKeylines
------------
Draws keylines.
.. ocv:function:: void drawKeylines( const Mat& image, const std::vector<KeyLine>& keylines, Mat& outImage, const Scalar& color=Scalar::all(-1), int flags=DrawLinesMatchesFlags::DEFAULT )
:param image: input image
:param keylines: keylines to be drawn
:param outImage: output image to draw on
:param color: color of lines to be drawn (if set to defaul value, color is chosen randomly)
:param flags: drawing flags
Related pages
-------------
* `Binary descriptors for lines extracted from an image <line_descriptor.html>`_
* `BinaryDescriptor Class <binary_descriptor.html>`_
* `Matching with binary descriptors <matching.html>`_

@ -131,7 +131,9 @@ Once the LBD has been obtained, it must be converted into a binary form. For suc
Related Pages Related Pages
------------- -------------
* `BinaryDescriptor Class <BinaryDescriptor.html>`_ * `BinaryDescriptor Class <binary_descriptor.html>`_
* `Matching with binary descriptors <matching.html>`_
* `Drawing Function of Keylines and Matches <drawing_functions.html>`_
References References
---------- ----------

@ -1,139 +0,0 @@
Binary descriptors for lines extracted from an image
====================================================
.. highlight:: cpp
Introduction
------------
One of the most challenging activities in computer vision is the extraction of useful information from a given image. Such information, usually comes in the form of points that preserve some kind of property (for instance, they are scale-invariant) and are actually representative of input image.
The goal of this module is seeking a new kind of representative information inside an image and providing the functionalities for its extraction and representation. In particular, differently from previous methods for detection of relevant elements inside an image, lines are extracted in place of points; a new class is defined ad hoc to summarize a line's properties, for reuse and plotting purposes.
A class to represent a line: KeyLine
------------------------------------
As aformentioned, it is been necessary to design a class that fully stores the information needed to characterize completely a line and plot it on image it was extracted from, when required.
*KeyLine* class has been created for such goal; it is mainly inspired to Feature2d's KeyPoint class, since KeyLine shares some of *KeyPoint*'s fields, even if a part of them assumes a different meaning, when speaking about lines.
In particular:
* the *class_id* field is used to gather lines extracted from different octaves which refer to same line inside original image (such lines and the one they represent in original image share the same *class_id* value)
* the *angle* field represents line's slope with respect to (positive) X axis
* the *pt* field represents line's midpoint
* the *response* field is computed as the ratio between the line's length and maximum between image's width and height
* the *size* field is the area of the smallest rectangle containing line
Apart from fields inspired to KeyPoint class, KeyLines stores information about extremes of line in original image and in octave it was extracted from, about line's length and number of pixels it covers. Code relative to KeyLine class is reported in the following snippet:
.. ocv:class:: KeyLine
::
class CV_EXPORTS_W KeyLine
{
public:
/* orientation of the line */
float angle;
/* object ID, that can be used to cluster keylines by the line they represent */
int class_id;
/* octave (pyramid layer), from which the keyline has been extracted */
int octave;
/* coordinates of the middlepoint */
Point pt;
/* the response, by which the strongest keylines have been selected.
It's represented by the ratio between line's length and maximum between
image's width and height */
float response;
/* minimum area containing line */
float size;
/* lines's extremes in original image */
float startPointX;
float startPointY;
float endPointX;
float endPointY;
/* line's extremes in image it was extracted from */
float sPointInOctaveX;
float sPointInOctaveY;
float ePointInOctaveX;
float ePointInOctaveY;
/* the length of line */
float lineLength;
/* number of pixels covered by the line */
unsigned int numOfPixels;
/* constructor */
KeyLine(){}
};
Lines extraction methodology
----------------------------
The lines extraction methodology described in the following is mainly based on [LBD]_.
The extraction starts with a Gaussian pyramid generated from an original image, downsampled N-1 times, blurred N times, to obtain N layers (one for each octave), with layer 0 corresponding to input image. Then, from each layer (octave) in the pyramid, lines are extracted using LSD algorithm.
Differently from EDLine lines extractor used in original article, LSD furnishes information only about lines extremes; thus, additional information regarding slope and equation of line are computed via analytic methods. The number of pixels is obtained using `LineIterator <http://docs.opencv.org/modules/core/doc/drawing_functions.html#lineiterator>`_. Later on, all extracted lines are arranged in buckets: two lines fall in the same bucket if they represent the same line in different octave (they have the same direction and belong to same region of original image). The set of buckets becomes the input for descriptors computation.
Computation of binary descriptors
---------------------------------
To obtatin a binary descriptor representing a certain line detected from a certain octave of an image, we first compute a non-binary descriptor as described in [LBD]_. Given a line, we consider a rectangular region centered at it and called *line support region (LSR)*. Such region is divided into a set of bands :math:`\{B_1, B_2, ..., B_m\}`, whose length equals the one of line.
If we indicate with :math:`\bf{d}_L` the direction of line, the orthogonal and clockwise direction to line :math:`\bf{d}_{\perp}` can be determined; these two directions, are used to construct a reference frame centered in the middle point of line. The gradients of pixels :math:`\bf{g'}` inside LSR can be projected to the newly determined frame, obtaining their local equivalent :math:`\bf{g'} = (\bf{g}^T \cdot \bf{d}_{\perp}, \bf{g}^T \cdot \bf{d}_L)^T \triangleq (\bf{g'}_{d_{\perp}}, \bf{g'}_{d_L})^T`.
Later on, a Gaussian function is applied to all LSR's pixels along :math:`\bf{d}_\perp` direction; first, we assign a global weighting coefficient :math:`f_g(i) = (1/\sqrt{2\pi}\sigma_g)e^{-d^2_i/2\sigma^2_g}` to *i*-th row in LSR, where :math:`d_i` is the distance of *i*-th row from the center row in LSR, :math:`\sigma_g = 0.5(m \cdot w - 1)` and :math:`w` is the width of bands (the same for every band). Secondly, considering a band :math:`B_j` and its neighbor bands :math:`B_{j-1}, B_{j+1}`, we assign a local weighting :math:`F_l(k) = (1/\sqrt{2\pi}\sigma_l)e^{-d'^2_k/2\sigma_l^2}`, where :math:`d'_k` is the distance of *k*-th row from the center row in :math:`B_j` and :math:`\sigma_l = w`. Using the global and local weights, we obtain, at the same time, the reduction of role played by gradients far from line and of boundary effect, respectively.
Each band :math:`B_j` in LSR has an associated *band descriptor(BD)* which is computed considering previous and next band (top and bottom bands are ignored when computing descriptor for first and last band). Once each band has been assignen its BD, the LBD descriptor of line is simply given by
.. math::
LBD = (BD_1^T, BD_2^T, ... , BD^T_m)^T.
To compute a band descriptor :math:`B_j`, each *k*-th row in it is considered and the gradients in such row are accumulated:
.. math::
\begin{matrix} \bf{V1}^k_j = \lambda \sum\limits_{\bf{g}'_{d_\perp}>0}\bf{g}'_{d_\perp}, & \bf{V2}^k_j = \lambda \sum\limits_{\bf{g}'_{d_\perp}<0} -\bf{g}'_{d_\perp}, \\ \bf{V3}^k_j = \lambda \sum\limits_{\bf{g}'_{d_L}>0}\bf{g}'_{d_L}, & \bf{V4}^k_j = \lambda \sum\limits_{\bf{g}'_{d_L}<0} -\bf{g}'_{d_L}\end{matrix}.
with :math:`\lambda = f_g(k)f_l(k)`.
By stacking previous results, we obtain the *band description matrix (BDM)*
.. math::
BDM_j = \left(\begin{matrix} \bf{V1}_j^1 & \bf{V1}_j^2 & \ldots & \bf{V1}_j^n \\ \bf{V2}_j^1 & \bf{V2}_j^2 & \ldots & \bf{V2}_j^n \\ \bf{V3}_j^1 & \bf{V3}_j^2 & \ldots & \bf{V3}_j^n \\ \bf{V4}_j^1 & \bf{V4}_j^2 & \ldots & \bf{V4}_j^n \end{matrix} \right) \in \mathbb{R}^{4\times n},
with :math:`n` the number of rows in band :math:`B_j`:
.. math::
n = \begin{cases} 2w, & j = 1||m; \\ 3w, & \mbox{else}. \end{cases}
Each :math:`BD_j` can be obtained using the standard deviation vector :math:`S_j` and mean vector :math:`M_j` of :math:`BDM_J`. Thus, finally:
.. math::
LBD = (M_1^T, S_1^T, M_2^T, S_2^T, \ldots, M_m^T, S_m^T)^T \in \mathbb{R}^{8m}
Once the LBD has been obtained, it must be converted into a binary form. For such purpose, we consider 32 possible pairs of BD inside it; each couple of BD is compared bit by bit and comparison generates an 8 bit string. Concatenating 32 comparison strings, we get the 256-bit final binary representation of a single LBD.
Related Pages
-------------
* `BinaryDescriptor <BinaryDescriptor.html>`
References
----------
.. [LBD] Zhang, Lilian, and Reinhard Koch. *An efficient and robust line segment matching approach based on LBD descriptor and pairwise geometric consistency*, Journal of Visual Communication and Image Representation 24.7 (2013): 794-805.

@ -0,0 +1,141 @@
Matching with binary descriptors
================================
.. highlight:: cpp
Once descriptors have been extracted from an image (both they represent lines and points), it becomes interesting to be able to match a descriptor with another one extracted from a different image and representing the same line or point, seen from a differente perspective or on a different scale.
In reaching such goal, the main headache is designing an efficient search algorithm to associate a query descriptor to one extracted from a dataset.
In the following, a matching modality based on *Multi-Index Hashing (MiHashing)* will be described.
Multi-Index Hashing
-------------------
The theory described in this section is based on [MIH]_.
Given a dataset populated with binary codes, each code is indexed *m* times into *m* different hash tables, according to *m* substrings it has been divided into. Thus, given a query code, all the entries close to it at least in one substring are returned by search as *neighbor candidates*. Returned entries are then checked for validity by verifying that their full codes are not distant (in Hamming space) more than *r* bits from query code.
In details, each binary code **h** composed of *b* bits is divided into *m* disjoint substrings :math:`\mathbf{h}^{(1)}, ..., \mathbf{h}^{(m)}`, each with length :math:`\lfloor b/m \rfloor` or :math:`\lceil b/m \rceil` bits. Formally, when two codes **h** and **g** differ by at the most *r* bits, in at the least one of their *m* substrings they differ by at the most :math:`\lfloor r/m \rfloor` bits. In particular, when :math:`||\mathbf{h}-\mathbf{g}||_H \le r` (where :math:`||.||_H` is the Hamming norm), there must exist a substring *k* (with :math:`1 \le k \le m`) such that
.. math::
||\mathbf{h}^{(k)} - \mathbf{g}^{(k)}||_H \le \left\lfloor \frac{r}{m} \right\rfloor .
That means that if Hamming distance between each of the *m* substring is strictly greater than :math:`\lfloor r/m \rfloor`, then :math:`||\mathbf{h}-\mathbf{g}||_H` must be larger that *r* and that is a contradiction.
If the codes in dataset are divided into *m* substrings, then *m* tables will be built. Given a query **q** with substrings :math:`\{\mathbf{q}^{(i)}\}^m_{i=1}`, *i*-th hash table is searched for entries distant at the most :math:`\lfloor r/m \rfloor` from :math:`\mathbf{q}^{(i)}` and a set of candidates :math:`\mathcal{N}_i(\mathbf{q})` is obtained.
The union of sets :math:`\mathcal{N}(\mathbf{q}) = \bigcup_i \mathcal{N}_i(\mathbf{q})` is a superset of the *r*-neighbors of **q**. Then, last step of algorithm is computing the Hamming distance between **q** and each element in :math:`\mathcal{N}(\mathbf{q})`, deleting the codes that are distant more that *r* from **q**.
BinaryDescriptorMatcher Class
=============================
BinaryDescriptorMatcher Class furnishes all functionalities for querying a dataset provided by user or internal to class (that user must, anyway, populate) on the model of Feature2d's `DescriptorMatcher <http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_matchers.html?highlight=bfmatcher#descriptormatcher>`_.
BinaryDescriptorMatcher::BinaryDescriptorMatcher
--------------------------------------------------
Constructor.
.. ocv:function:: BinaryDescriptorMatcher::BinaryDescriptorMatcher()
The BinaryDescriptorMatcher constructed is able to store and manage 256-bits long entries.
BinaryDescriptorMatcher::createBinaryDescriptorMatcher
------------------------------------------------------
Create a BinaryDescriptorMatcher object and return a smart pointer to it.
.. ocv:function:: Ptr<BinaryDescriptorMatcher> BinaryDescriptorMatcher::createBinaryDescriptorMatcher()
BinaryDescriptorMatcher::add
----------------------------
Store locally new descriptors to be inserted in dataset, without updating dataset.
.. ocv:function:: void BinaryDescriptorMatcher::add( const std::vector<Mat>& descriptors )
:param descriptors: matrices containing descriptors to be inserted into dataset
.. note:: Each matrix *i* in **descriptors** should contain descriptors relative to lines extracted from *i*-th image.
BinaryDescriptorMatcher::train
------------------------------
Update dataset by inserting into it all descriptors that were stored locally by *add* function.
.. ocv:function:: void BinaryDescriptorMatcher::train()
.. note:: Every time this function is invoked, current dataset is deleted and locally stored descriptors are inserted into dataset. The locally stored copy of just inserted descriptors is then removed.
BinaryDescriptorMatcher::clear
------------------------------
Clear dataset and internal data
.. ocv:function:: void BinaryDescriptorMatcher::clear()
BinaryDescriptorMatcher::match
------------------------------
For every input query descriptor, retrieve the best matching one from a dataset provided from user or from the one internal to class
.. ocv:function:: void BinaryDescriptorMatcher::match( const Mat& queryDescriptors, const Mat& trainDescriptors, std::vector<DMatch>& matches, const Mat& mask=Mat() ) const
.. ocv:function:: void BinaryDescriptorMatcher::match( const Mat& queryDescriptors, std::vector<DMatch>& matches, const std::vector<Mat>& masks=std::vector<Mat>() )
:param queryDescriptors: query descriptors
:param trainDescriptors: dataset of descriptors furnished by user
:param matches: vector to host retrieved matches
:param mask: mask to select which input descriptors must be matched to one in dataset
:param masks: vector of masks to select which input descriptors must be matched to one in dataset (the *i*-th mask in vector indicates whether each input query can be matched with descriptors in dataset relative to *i*-th image)
BinaryDescriptorMatcher::knnMatch
---------------------------------
For every input query descriptor, retrieve the best *k* matching ones from a dataset provided from user or from the one internal to class
.. ocv:function:: void BinaryDescriptorMatcher::knnMatch( const Mat& queryDescriptors, const Mat& trainDescriptors, std::vector<std::vector<DMatch> >& matches, int k, const Mat& mask=Mat(), bool compactResult=false ) const
.. ocv:function:: void BinaryDescriptorMatcher::knnMatch( const Mat& queryDescriptors, std::vector<std::vector<DMatch> >& matches, int k, const std::vector<Mat>& masks=std::vector<Mat>(), bool compactResult=false )
:param queryDescriptors: query descriptors
:param trainDescriptors: dataset of descriptors furnished by user
:param matches: vector to host retrieved matches
:param k: number of the closest descriptors to be returned for every input query
:param mask: mask to select which input descriptors must be matched to ones in dataset
:param masks: vector of masks to select which input descriptors must be matched to ones in dataset (the *i*-th mask in vector indicates whether each input query can be matched with descriptors in dataset relative to *i*-th image)
:param compactResult: flag to obtain a compact result (if true, a vector that doesn't contain any matches for a given query is not inserted in final result)
BinaryDescriptorMatcher::radiusMatch
------------------------------------
For every input query descriptor, retrieve, from a dataset provided from user or from the one internal to class, all the descriptors that are not further than *maxDist* from input query
.. ocv:function:: void BinaryDescriptorMatcher::radiusMatch( const Mat& queryDescriptors, const Mat& trainDescriptors, std::vector<std::vector<DMatch> >& matches, float maxDistance, const Mat& mask=Mat(), bool compactResult=false ) const
.. ocv:function:: void BinaryDescriptorMatcher::radiusMatch( const Mat& queryDescriptors, std::vector<std::vector<DMatch> >& matches, float maxDistance, const std::vector<Mat>& masks=std::vector<Mat>(), bool compactResult=false )
:param queryDescriptors: query descriptors
:param trainDescriptors: dataset of descriptors furnished by user
:param matches: vector to host retrieved matches
:param maxDist: search radius
:param mask: mask to select which input descriptors must be matched to ones in dataset
:param masks: vector of masks to select which input descriptors must be matched to ones in dataset (the *i*-th mask in vector indicates whether each input query can be matched with descriptors in dataset relative to *i*-th image)
:param compactResult: flag to obtain a compact result (if true, a vector that doesn't contain any matches for a given query is not inserted in final result)
Related pages
-------------
* `Binary descriptors for lines extracted from an image <line_descriptor.html>`_
* `BinaryDescriptor Class <binary_descriptor.html>`_
* `Drawing Function of Keylines and Matches <drawing_functions.html>`_
References
----------
.. [MIH] Norouzi, Mohammad, Ali Punjani, and David J. Fleet. *Fast search in hamming space with multi-index hashing*, Computer Vision and Pattern Recognition (CVPR), 2012 IEEE Conference on. IEEE, 2012.

@ -47,7 +47,7 @@
namespace cv namespace cv
{ {
CV_EXPORTS bool initModule_line_descriptor(void); CV_EXPORTS bool initModule_line_descriptor( void );
} }

@ -45,52 +45,52 @@
#include "types.hpp" #include "types.hpp"
class Array32 { class Array32
{
private: private:
static double ARRAY_RESIZE_FACTOR; static double ARRAY_RESIZE_FACTOR;
static double ARRAY_RESIZE_ADD_FACTOR; static double ARRAY_RESIZE_ADD_FACTOR;
public: public:
/* set ARRAY_RESIZE_FACTOR */ /* set ARRAY_RESIZE_FACTOR */
static void setArrayResizeFactor(double arf); static void setArrayResizeFactor( double arf );
/* constructor */ /* constructor */
Array32(); Array32();
/* destructor */ /* destructor */
~Array32(); ~Array32();
/* cleaning function used in destructor */ /* cleaning function used in destructor */
void cleanup(); void cleanup();
/* push data */ /* push data */
void push(UINT32 data); void push( UINT32 data );
/* insert data at given index */ /* insert data at given index */
void insert(UINT32 index, UINT32 data); void insert( UINT32 index, UINT32 data );
/* return data */ /* return data */
UINT32* data(); UINT32* data();
/* return data size */ /* return data size */
UINT32 size(); UINT32 size();
/* return capacity */ /* return capacity */
UINT32 capacity(); UINT32 capacity();
/* definition of operator = */ /* definition of operator = */
void operator= (const Array32&); void operator=( const Array32& );
/* print data */ /* print data */
void print(); void print();
/* initializer */ /* initializer */
void init(int size); void init( int size );
/* data */
UINT32 *arr;
/* data */
UINT32 *arr;
}; };

@ -49,59 +49,62 @@
#include <string.h> #include <string.h>
/* class defining a sequence of bits */ /* class defining a sequence of bits */
class bitarray { class bitarray
{
public: public:
/* pointer to bits sequence and sequence's length */ /* pointer to bits sequence and sequence's length */
UINT32 *arr; UINT32 *arr;
UINT32 length; UINT32 length;
/* constructor setting default values */ /* constructor setting default values */
bitarray() bitarray()
{ {
arr = NULL; arr = NULL;
length = 0; length = 0;
} }
/* constructor setting sequence's length */ /* constructor setting sequence's length */
bitarray(UINT64 _bits) { bitarray( UINT64 _bits )
init(_bits); {
} init( _bits );
}
/* initializer of private fields */ /* initializer of private fields */
void init(UINT64 _bits) void init( UINT64 _bits )
{ {
length = (UINT32)ceil(_bits/32.00); length = (UINT32) ceil( _bits / 32.00 );
arr = new UINT32[length]; arr = new UINT32[length];
erase(); erase();
} }
/* destructor */ /* destructor */
~bitarray() { ~bitarray()
if (arr) {
delete[] arr; if( arr )
} delete[] arr;
}
inline void flip(UINT64 index) inline void flip( UINT64 index )
{ {
arr[index >> 5] ^= ((UINT32)0x01) << (index % 32); arr[index >> 5] ^= ( (UINT32) 0x01 ) << ( index % 32 );
} }
inline void set(UINT64 index) inline void set( UINT64 index )
{ {
arr[index >> 5] |= ((UINT32)0x01) << (index % 32); arr[index >> 5] |= ( (UINT32) 0x01 ) << ( index % 32 );
} }
inline UINT8 get(UINT64 index) inline UINT8 get( UINT64 index )
{ {
return (arr[index >> 5] & (((UINT32)0x01) << (index % 32))) != 0; return ( arr[index >> 5] & ( ( (UINT32) 0x01 ) << ( index % 32 ) ) ) != 0;
} }
/* reserve menory for an UINT32 */ /* reserve menory for an UINT32 */
inline void erase() inline void erase()
{ {
memset(arr, 0, sizeof(UINT32) * length); memset( arr, 0, sizeof(UINT32) * length );
} }
}; };

@ -49,129 +49,114 @@
#include "precomp.hpp" #include "precomp.hpp"
/* LUT */ /* LUT */
const int lookup [] = {0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,1,2, const int lookup[] =
2,3,2,3,3,4,2,3,3,4,3,4,4,5,1,2,2,3, { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2,
2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3,
4,5,3,4,4,5,4,5,5,6,1,2,2,3,2,3,3,4, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3,
2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 2, 3, 3, 4,
4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5,
4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8 };
6,7,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,
2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,
3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,
4,5,5,6,4,5,5,6,5,6,6,7,2,3,3,4,3,4,
4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,
4,5,5,6,5,6,6,7,3,4,4,5,4,5,5,6,4,5,
5,6,5,6,6,7,4,5,5,6,5,6,6,7,5,6,6,7,
6,7,7,8};
/*matching function */ /*matching function */
inline int match(UINT8*P, UINT8*Q, int codelb) inline int match( UINT8*P, UINT8*Q, int codelb )
{ {
switch(codelb) switch ( codelb )
{ {
case 4: // 32 bit case 4: // 32 bit
return popcnt(*(UINT32*)P ^ *(UINT32*)Q); return popcnt( *(UINT32*) P ^ *(UINT32*) Q );
break; break;
case 8: // 64 bit case 8: // 64 bit
return popcntll(((UINT64*)P)[0] ^ ((UINT64*)Q)[0]); return popcntll( ( (UINT64*) P )[0] ^ ( (UINT64*) Q )[0] );
break; break;
case 16: // 128 bit case 16: // 128 bit
return popcntll(((UINT64*)P)[0] ^ ((UINT64*)Q)[0]) \ return popcntll( ( (UINT64*) P )[0] ^ ( (UINT64*) Q )[0] ) + popcntll( ( (UINT64*) P )[1] ^ ( (UINT64*) Q )[1] );
+ popcntll(((UINT64*)P)[1] ^ ((UINT64*)Q)[1]); break;
break; case 32: // 256 bit
case 32: // 256 bit return popcntll( ( (UINT64*) P )[0] ^ ( (UINT64*) Q )[0] ) + popcntll( ( (UINT64*) P )[1] ^ ( (UINT64*) Q )[1] )
return popcntll(((UINT64*)P)[0] ^ ((UINT64*)Q)[0]) \ + popcntll( ( (UINT64*) P )[2] ^ ( (UINT64*) Q )[2] ) + popcntll( ( (UINT64*) P )[3] ^ ( (UINT64*) Q )[3] );
+ popcntll(((UINT64*)P)[1] ^ ((UINT64*)Q)[1]) \ break;
+ popcntll(((UINT64*)P)[2] ^ ((UINT64*)Q)[2]) \ case 64: // 512 bit
+ popcntll(((UINT64*)P)[3] ^ ((UINT64*)Q)[3]); return popcntll( ( (UINT64*) P )[0] ^ ( (UINT64*) Q )[0] ) + popcntll( ( (UINT64*) P )[1] ^ ( (UINT64*) Q )[1] )
break; + popcntll( ( (UINT64*) P )[2] ^ ( (UINT64*) Q )[2] ) + popcntll( ( (UINT64*) P )[3] ^ ( (UINT64*) Q )[3] )
case 64: // 512 bit + popcntll( ( (UINT64*) P )[4] ^ ( (UINT64*) Q )[4] ) + popcntll( ( (UINT64*) P )[5] ^ ( (UINT64*) Q )[5] )
return popcntll(((UINT64*)P)[0] ^ ((UINT64*)Q)[0]) \ + popcntll( ( (UINT64*) P )[6] ^ ( (UINT64*) Q )[6] ) + popcntll( ( (UINT64*) P )[7] ^ ( (UINT64*) Q )[7] );
+ popcntll(((UINT64*)P)[1] ^ ((UINT64*)Q)[1]) \ break;
+ popcntll(((UINT64*)P)[2] ^ ((UINT64*)Q)[2]) \ default:
+ popcntll(((UINT64*)P)[3] ^ ((UINT64*)Q)[3]) \ int output = 0;
+ popcntll(((UINT64*)P)[4] ^ ((UINT64*)Q)[4]) \ for ( int i = 0; i < codelb; i++ )
+ popcntll(((UINT64*)P)[5] ^ ((UINT64*)Q)[5]) \ output += lookup[P[i] ^ Q[i]];
+ popcntll(((UINT64*)P)[6] ^ ((UINT64*)Q)[6]) \ return output;
+ popcntll(((UINT64*)P)[7] ^ ((UINT64*)Q)[7]); break;
break; }
default:
int output = 0; return -1;
for (int i=0; i<codelb; i++)
output+= lookup[P[i] ^ Q[i]];
return output;
break;
}
return -1;
} }
/* splitting function (b <= 64) */ /* splitting function (b <= 64) */
inline void split (UINT64 *chunks, UINT8 *code, int m, int mplus, int b) inline void split( UINT64 *chunks, UINT8 *code, int m, int mplus, int b )
{ {
UINT64 temp = 0x0; UINT64 temp = 0x0;
int nbits = 0; int nbits = 0;
int nbyte = 0; int nbyte = 0;
UINT64 mask = b==64 ? 0xFFFFFFFFFFFFFFFFLLU : ((UINT64_1 << b) - UINT64_1); UINT64 mask = b == 64 ? 0xFFFFFFFFFFFFFFFFLLU : ( ( UINT64_1 << b ) - UINT64_1 );
for ( int i = 0; i < m; i++ )
{
while ( nbits < b )
{
temp |= ( (UINT64) code[nbyte++] << nbits );
nbits += 8;
}
chunks[i] = temp & mask;
temp = b == 64 ? 0x0 : temp >> b;
nbits -= b;
for (int i=0; i<m; i++) if( i == mplus - 1 )
{ {
while (nbits < b) b--; /* b <= 63 */
{ mask = ( ( UINT64_1 << b ) - UINT64_1 );
temp |= ((UINT64)code[nbyte++] << nbits);
nbits += 8;
}
chunks[i] = temp & mask;
temp = b==64 ? 0x0 : temp >> b;
nbits -= b;
if (i == mplus-1)
{
b--; /* b <= 63 */
mask = ((UINT64_1 << b) - UINT64_1);
}
} }
}
} }
/* generates the next binary code (in alphabetical order) with the /* generates the next binary code (in alphabetical order) with the
same number of ones as the input x. Taken from same number of ones as the input x. Taken from
http://www.geeksforgeeks.org/archives/10375 */ http://www.geeksforgeeks.org/archives/10375 */
inline UINT64 next_set_of_n_elements(UINT64 x) inline UINT64 next_set_of_n_elements( UINT64 x )
{ {
UINT64 smallest, ripple, new_smallest; UINT64 smallest, ripple, new_smallest;
smallest = x & -x; smallest = x & -x;
ripple = x + smallest; ripple = x + smallest;
new_smallest = x ^ ripple; new_smallest = x ^ ripple;
new_smallest = new_smallest / smallest; new_smallest = new_smallest / smallest;
new_smallest >>= 2; new_smallest >>= 2;
return ripple | new_smallest; return ripple | new_smallest;
} }
/* print code */ /* print code */
inline void print_code(UINT64 tmp, int b) inline void print_code( UINT64 tmp, int b )
{ {
for (int j=(b-1); j>=0; j--) for ( int j = ( b - 1 ); j >= 0; j-- )
{ {
printf("%llu", (long long int) tmp/(1 << j)); printf( "%llu", (long long int) tmp / ( 1 << j ) );
tmp = tmp - (tmp/(1 << j)) * (1 << j); tmp = tmp - ( tmp / ( 1 << j ) ) * ( 1 << j );
} }
printf("\n"); printf( "\n" );
} }
inline UINT64 choose(int n, int r) inline UINT64 choose( int n, int r )
{ {
UINT64 nchooser = 1; UINT64 nchooser = 1;
for (int k=0; k < r; k++) for ( int k = 0; k < r; k++ )
{ {
nchooser *= n-k; nchooser *= n - k;
nchooser /= k+1; nchooser /= k + 1;
} }
return nchooser; return nchooser;
} }
#endif #endif

@ -47,24 +47,25 @@
#include "array32.hpp" #include "array32.hpp"
#include "bitarray.hpp" #include "bitarray.hpp"
class BucketGroup { class BucketGroup
{
public: public:
/* constructor */ /* constructor */
BucketGroup(); BucketGroup();
/* destructor */ /* destructor */
~BucketGroup(); ~BucketGroup();
/* insert data into the bucket */ /* insert data into the bucket */
void insert(int subindex, UINT32 data); void insert( int subindex, UINT32 data );
/* perform a query to the bucket */ /* perform a query to the bucket */
UINT32* query(int subindex, int *size); UINT32* query( int subindex, int *size );
/* data fields */ /* data fields */
UINT32 empty; UINT32 empty;
Array32 *group; Array32 *group;
}; };

@ -39,7 +39,6 @@
// //
//M*/ //M*/
#ifndef __OPENCV_DESCRIPTOR_HPP__ #ifndef __OPENCV_DESCRIPTOR_HPP__
#define __OPENCV_DESCRIPTOR_HPP__ #define __OPENCV_DESCRIPTOR_HPP__
@ -55,342 +54,303 @@
namespace cv namespace cv
{ {
class CV_EXPORTS_W KeyLine class CV_EXPORTS_W KeyLine
{ {
public: public:
/* orientation of the line */ /* orientation of the line */
float angle; float angle;
/* object ID, that can be used to cluster keylines by the line they represent */
int class_id;
/* octave (pyramid layer), from which the keyline has been extracted */
int octave;
/* coordinates of the middlepoint */
Point pt;
/* the response, by which the strongest keylines have been selected.
It's represented by the ratio between line's length and maximum between
image's width and height */
float response;
/* minimum area containing line */
float size;
/* lines's extremes in original image */
float startPointX;
float startPointY;
float endPointX;
float endPointY;
/* line's extremes in image it was extracted from */
float sPointInOctaveX;
float sPointInOctaveY;
float ePointInOctaveX;
float ePointInOctaveY;
/* object ID, that can be used to cluster keylines by the line they represent */ /* the length of line */
int class_id; float lineLength;
/* octave (pyramid layer), from which the keyline has been extracted */ /* number of pixels covered by the line */
int octave; unsigned int numOfPixels;
/* coordinates of the middlepoint */ /* constructor */
Point pt; KeyLine()
{
}
};
/* the response, by which the strongest keylines have been selected. class CV_EXPORTS_W BinaryDescriptor : public Algorithm
It's represented by the ratio between line's length and maximum between {
image's width and height */
float response;
/* minimum area containing line */ public:
float size; struct CV_EXPORTS_W_SIMPLE Params
{
CV_WRAP
Params();
/* lines's extremes in original image */ /* the number of image octaves (default = 1) */
float startPointX; CV_PROP_RW
float startPointY; int numOfOctave_;
float endPointX;
float endPointY;
/* line's extremes in image it was extracted from */ /* the width of band; (default: 7) */
float sPointInOctaveX; CV_PROP_RW
float sPointInOctaveY; int widthOfBand_;
float ePointInOctaveX;
float ePointInOctaveY;
/* the length of line */ /* image's reduction ratio in construction of Gaussian pyramids */
float lineLength; CV_PROP_RW
int reductionRatio;
/* number of pixels covered by the line */ /* read parameters from a FileNode object and store them (struct function) */
unsigned int numOfPixels; void read( const FileNode& fn );
/* constructor */ /* store parameters to a FileStorage object (struct function) */
KeyLine(){} void write( FileStorage& fs ) const;
};
class CV_EXPORTS_W BinaryDescriptor: public Algorithm };
{
public: /* constructor */
struct CV_EXPORTS_W_SIMPLE Params{ CV_WRAP
CV_WRAP Params(); BinaryDescriptor( const BinaryDescriptor::Params &parameters = BinaryDescriptor::Params() );
/* the number of image octaves (default = 5) */ /* constructors with smart pointers */
CV_PROP_RW int numOfOctave_; static Ptr<BinaryDescriptor> createBinaryDescriptor();
static Ptr<BinaryDescriptor> createBinaryDescriptor( Params parameters );
/* the width of band; (default: 7) */ /* destructor */
CV_PROP_RW int widthOfBand_; ~BinaryDescriptor();
/* image's reduction ratio in construction of Gaussian pyramids */ /* setters and getters */
CV_PROP_RW int reductionRatio; int getNumOfOctaves();
void setNumOfOctaves( int octaves );
int getWidthOfBand();
void setWidthOfBand( int width );
int getReductionRatio();
void setReductionRatio( int rRatio );
/* read parameters from a FileNode object and store them (struct function) */ /* read parameters from a FileNode object and store them (class function ) */
void read( const FileNode& fn ); virtual void read( const cv::FileNode& fn );
/* store parameters to a FileStorage object (struct function) */ /* store parameters to a FileStorage object (class function) */
void write( FileStorage& fs ) const; virtual void write( cv::FileStorage& fs ) const;
}; /* requires line detection (only one image) */
CV_WRAP
void detect( const Mat& image, CV_OUT std::vector<KeyLine>& keypoints, const Mat& mask = Mat() );
/* constructor */ /* requires line detection (more than one image) */
CV_WRAP BinaryDescriptor(const BinaryDescriptor::Params &parameters = void detect( const std::vector<Mat>& images, std::vector<std::vector<KeyLine> >& keylines, const std::vector<Mat>& masks =
BinaryDescriptor::Params()); std::vector<Mat>() ) const;
/* constructors with smart pointers */ /* requires descriptors computation (only one image) */
static Ptr<BinaryDescriptor> createBinaryDescriptor(); CV_WRAP
static Ptr<BinaryDescriptor> createBinaryDescriptor(Params parameters); void compute( const Mat& image, CV_OUT CV_IN_OUT std::vector<KeyLine>& keylines, CV_OUT Mat& descriptors ) const;
/* destructor */ /* requires descriptors computation (more than one image) */
~BinaryDescriptor(); void compute( const std::vector<Mat>& images, std::vector<std::vector<KeyLine> >& keylines, std::vector<Mat>& descriptors ) const;
/* setters and getters */ /*return descriptor size */
int getNumOfOctaves(); int descriptorSize() const;
void setNumOfOctaves(int octaves);
int getWidthOfBand();
void setWidthOfBand(int width);
int getReductionRatio();
void setReductionRatio(int rRatio);
/* read parameters from a FileNode object and store them (class function ) */ /* return data type */
virtual void read( const cv::FileNode& fn ); int descriptorType() const;
/* store parameters to a FileStorage object (class function) */ /* return norm mode */
virtual void write( cv::FileStorage& fs ) const; int defaultNorm() const;
/* requires line detection (only one image) */ /* check whether Gaussian pyramids were created */
CV_WRAP void detect( const Mat& image, bool empty() const;
CV_OUT std::vector<KeyLine>& keypoints,
const Mat& mask=Mat() );
/* requires line detection (more than one image) */ /* definition of operator () */
void detect( const std::vector<Mat>& images, CV_WRAP_AS(detectAndCompute)
std::vector<std::vector<KeyLine> >& keylines, virtual void operator()( InputArray image, InputArray mask, CV_OUT std::vector<KeyLine>& keylines, OutputArray descriptors,
const std::vector<Mat>& masks=std::vector<Mat>() ) const; bool useProvidedKeyLines = false ) const;
/* requires descriptors computation (only one image) */ protected:
CV_WRAP void compute( const Mat& image, /* implementation of line detection */
CV_OUT CV_IN_OUT std::vector<KeyLine>& keylines, virtual void detectImpl( const Mat& imageSrc, std::vector<KeyLine>& keylines, const Mat& mask = Mat() ) const;
CV_OUT Mat& descriptors ) const;
/* requires descriptors computation (more than one image) */ /* implementation of descriptors' computation */
void compute( const std::vector<Mat>& images, virtual void computeImpl( const Mat& imageSrc, std::vector<KeyLine>& keylines, Mat& descriptors ) const;
std::vector<std::vector<KeyLine> >& keylines,
std::vector<Mat>& descriptors ) const;
/*return descriptor size */ /* function inherited from Algorithm */
int descriptorSize() const; AlgorithmInfo* info() const;
/* return data type */ private:
int descriptorType() const; /* conversion of an LBD descriptor to its binary representation */
unsigned char binaryConversion( float* f1, float* f2 );
/* return norm mode */ /* compute LBD descriptors */
int defaultNorm() const; int computeLBD( ScaleLines &keyLines );
/* check whether Gaussian pyramids were created */ /* compute Gaussian pyramid of input image */
bool empty() const; void computeGaussianPyramid( const Mat& image );
/* definition of operator () */ /* gather lines in groups.
CV_WRAP_AS(detectAndCompute) virtual void operator()( InputArray image, Each group contains the same line, detected in different octaves */
InputArray mask, int OctaveKeyLines( ScaleLines &keyLines );
CV_OUT std::vector<KeyLine>& keylines,
OutputArray descriptors,
bool useProvidedKeyLines=false ) const;
/* get coefficients of line passing by two points (in line_extremes) */
void getLineParameters( cv::Vec4i &line_extremes, cv::Vec3i &lineParams );
protected: /* compute the angle between line and X axis */
/* implementation of line detection */ float getLineDirection( cv::Vec3i &lineParams );
virtual void detectImpl( const Mat& imageSrc,
std::vector<KeyLine>& keylines,
const Mat& mask=Mat() ) const;
/* the local gaussian coefficient applied to the orthogonal line direction within each band */
std::vector<float> gaussCoefL_;
/* implementation of descriptors' computation */ /* the global gaussian coefficient applied to each Row within line support region */
virtual void computeImpl( const Mat& imageSrc, std::vector<float> gaussCoefG_;
std::vector<KeyLine>& keylines,
Mat& descriptors ) const;
/* function inherited from Algorithm */ /* vector to store horizontal and vertical derivatives of octave images */
AlgorithmInfo* info() const; std::vector<cv::Mat> dxImg_vector, dyImg_vector;
private: /* vectot to store sizes of octave images */
/* conversion of an LBD descriptor to its binary representation */ std::vector<cv::Size> images_sizes;
unsigned char binaryConversion(float* f1, float* f2);
/* compute LBD descriptors */ /* structure to store lines extracted from each octave image */
int computeLBD(ScaleLines &keyLines); std::vector<std::vector<cv::Vec4i> > extractedLines;
/* compute Gaussian pyramid of input image */ /* descriptor parameters */
void computeGaussianPyramid(const Mat& image); Params params;
/* gather lines in groups. /* vector to store the Gaussian pyramid od an input image */
Each group contains the same line, detected in different octaves */ std::vector<cv::Mat> octaveImages;
int OctaveKeyLines(ScaleLines &keyLines);
/* get coefficients of line passing by two points (in line_extremes) */ };
void getLineParameters(cv::Vec4i &line_extremes, cv::Vec3i &lineParams);
/* compute the angle between line and X axis */ class CV_EXPORTS_W BinaryDescriptorMatcher : public Algorithm
float getLineDirection(cv::Vec3i &lineParams); {
/* the local gaussian coefficient applied to the orthogonal line direction within each band */
std::vector<float> gaussCoefL_;
/* the global gaussian coefficient applied to each Row within line support region */
std::vector<float> gaussCoefG_;
/* vector to store horizontal and vertical derivatives of octave images */
std::vector<cv::Mat> dxImg_vector, dyImg_vector;
/* vectot to store sizes of octave images */
std::vector<cv::Size> images_sizes;
/* structure to store lines extracted from each octave image */
std::vector<std::vector<cv::Vec4i> > extractedLines;
/* descriptor parameters */
Params params;
/* vector to store the Gaussian pyramid od an input image */ public:
std::vector<cv::Mat> octaveImages; /* for every input descriptor,
find the best matching one (for a pair of images) */
void match( const Mat& queryDescriptors, const Mat& trainDescriptors, std::vector<DMatch>& matches, const Mat& mask = Mat() ) const;
}; /* for every input descriptor,
find the best matching one (from one image to a set) */
void match( const Mat& queryDescriptors, std::vector<DMatch>& matches, const std::vector<Mat>& masks = std::vector<Mat>() );
class CV_EXPORTS_W BinaryDescriptorMatcher: public Algorithm /* for every input descriptor,
{ find the best k matching descriptors (for a pair of images) */
void knnMatch( const Mat& queryDescriptors, const Mat& trainDescriptors, std::vector<std::vector<DMatch> >& matches, int k, const Mat& mask = Mat(),
bool compactResult = false ) const;
public: /* for every input descriptor,
/* for every input descriptor, find the best k matching descriptors (from one image to a set) */
find the best matching one (for a pair of images) */ void knnMatch( const Mat& queryDescriptors, std::vector<std::vector<DMatch> >& matches, int k, const std::vector<Mat>& masks = std::vector<Mat>(),
void match( const Mat& queryDescriptors, bool compactResult = false );
const Mat& trainDescriptors,
std::vector<DMatch>& matches,
const Mat& mask=Mat() ) const;
/* for every input descriptor, /* for every input desciptor, find all the ones falling in a
find the best matching one (from one image to a set) */ certaing atching radius (for a pair of images) */
void match( const Mat& queryDescriptors, void radiusMatch( const Mat& queryDescriptors, const Mat& trainDescriptors, std::vector<std::vector<DMatch> >& matches, float maxDistance,
std::vector<DMatch>& matches, const Mat& mask = Mat(), bool compactResult = false ) const;
const std::vector<Mat>& masks=std::vector<Mat>() );
/* for every input descriptor, /* for every input desciptor, find all the ones falling in a
find the best k matching descriptors (for a pair of images) */ certaing atching radius (from one image to a set) */
void knnMatch( const Mat& queryDescriptors, void radiusMatch( const Mat& queryDescriptors, std::vector<std::vector<DMatch> >& matches, float maxDistance, const std::vector<Mat>& masks =
const Mat& trainDescriptors, std::vector<Mat>(),
std::vector<std::vector<DMatch> >& matches, bool compactResult = false );
int k,
const Mat& mask=Mat(),
bool compactResult=false ) const;
/* for every input descriptor, /* store new descriptors to be inserted in dataset */
find the best k matching descriptors (from one image to a set) */ void add( const std::vector<Mat>& descriptors );
void knnMatch( const Mat& queryDescriptors,
std::vector<std::vector<DMatch> >& matches,
int k,
const std::vector<Mat>& masks=std::vector<Mat>(),
bool compactResult=false );
/* for every input desciptor, find all the ones falling in a /* store new descriptors into dataset */
certaing atching radius (for a pair of images) */ void train();
void radiusMatch( const Mat& queryDescriptors,
const Mat& trainDescriptors,
std::vector<std::vector<DMatch> >& matches,
float maxDistance,
const Mat& mask=Mat(),
bool compactResult=false ) const;
/* for every input desciptor, find all the ones falling in a /* constructor with smart pointer */
certaing atching radius (from one image to a set) */ static Ptr<BinaryDescriptorMatcher> createBinaryDescriptorMatcher();
void radiusMatch( const Mat& queryDescriptors,
std::vector<std::vector<DMatch> >& matches,
float maxDistance,
const std::vector<Mat>& masks=std::vector<Mat>(),
bool compactResult=false );
/* store new descriptors to be inserted in dataset */ /* clear dataset and internal data */
void add( const std::vector<Mat>& descriptors ); void clear();
/* store new descriptors into dataset */ /* constructor */
void train(); BinaryDescriptorMatcher();
/* constructor with smart pointer */ /* desctructor */
static Ptr<BinaryDescriptorMatcher> createBinaryDescriptorMatcher(); ~BinaryDescriptorMatcher()
{
}
/* clear dataset and internal data */ protected:
void clear(); /* function inherited from Algorithm */
AlgorithmInfo* info() const;
/* constructor */ private:
BinaryDescriptorMatcher(); /* retrieve Hamming distances */
void checkKDistances( UINT32 * numres, int k, std::vector<int>& k_distances, int row, int string_length ) const;
/* desctructor */ /* matrix to store new descriptors */
~BinaryDescriptorMatcher(){} Mat descriptorsMat;
protected: /* map storing where each bunch of descriptors benins in DS */
/* function inherited from Algorithm */ std::map<int, int> indexesMap;
AlgorithmInfo* info() const;
private: /* internal MiHaser representing dataset */
/* retrieve Hamming distances */ Mihasher* dataset;
void checkKDistances(UINT32 * numres,
int k,
std::vector<int>& k_distances,
int row,
int string_length) const;
/* matrix to store new descriptors */ /* index from which next added descriptors' bunch must begin */
Mat descriptorsMat; int nextAddedIndex;
/* map storing where each bunch of descriptors benins in DS */ /* number of images whose descriptors are stored in DS */
std::map<int, int> indexesMap; int numImages;
/* internal MiHaser representing dataset */
Mihasher* dataset;
/* index from which next added descriptors' bunch must begin */
int nextAddedIndex;
/* number of images whose descriptors are stored in DS */
int numImages;
/* number of descriptors in dataset */
int descrInDS;
};
/* number of descriptors in dataset */
int descrInDS;
};
/* -------------------------------------------------------------------------------------------- /* --------------------------------------------------------------------------------------------
UTILITY FUNCTIONS UTILITY FUNCTIONS
-------------------------------------------------------------------------------------------- */ -------------------------------------------------------------------------------------------- */
/* struct for drawing options */ /* struct for drawing options */
struct CV_EXPORTS DrawLinesMatchesFlags struct CV_EXPORTS DrawLinesMatchesFlags
{ {
enum enum
{ {
DEFAULT = 0, // Output image matrix will be created (Mat::create), DEFAULT = 0, // Output image matrix will be created (Mat::create),
// i.e. existing memory of output image may be reused. // i.e. existing memory of output image may be reused.
// Two source images, matches, and single keylines // Two source images, matches, and single keylines
// will be drawn. // will be drawn.
DRAW_OVER_OUTIMG = 1, // Output image matrix will not be DRAW_OVER_OUTIMG = 1, // Output image matrix will not be
// created (using Mat::create). Matches will be drawn // created (using Mat::create). Matches will be drawn
// on existing content of output image. // on existing content of output image.
NOT_DRAW_SINGLE_LINES = 2 // Single keylines will not be drawn. NOT_DRAW_SINGLE_LINES = 2 // Single keylines will not be drawn.
}; };
}; };
/* draw matches between two images */ /* draw matches between two images */
CV_EXPORTS_W void drawLineMatches( const Mat& img1, CV_EXPORTS_W void drawLineMatches( const Mat& img1, const std::vector<KeyLine>& keylines1, const Mat& img2, const std::vector<KeyLine>& keylines2,
const std::vector<KeyLine>& keylines1, const std::vector<DMatch>& matches1to2, Mat& outImg, const Scalar& matchColor = Scalar::all( -1 ),
const Mat& img2, const Scalar& singleLineColor = Scalar::all( -1 ), const std::vector<char>& matchesMask = std::vector<char>(),
const std::vector<KeyLine>& keylines2, int flags = DrawLinesMatchesFlags::DEFAULT );
const std::vector<DMatch>& matches1to2,
Mat& outImg,
const Scalar& matchColor=Scalar::all(-1),
const Scalar& singleLineColor=Scalar::all(-1),
const std::vector<char>& matchesMask=std::vector<char>(),
int flags=DrawLinesMatchesFlags::DEFAULT );
/* draw extracted lines on original image */ /* draw extracted lines on original image */
CV_EXPORTS_W void drawKeylines( const Mat& image, CV_EXPORTS_W void drawKeylines( const Mat& image, const std::vector<KeyLine>& keylines, Mat& outImage, const Scalar& color = Scalar::all( -1 ),
const std::vector<KeyLine>& keylines, int flags = DrawLinesMatchesFlags::DEFAULT );
Mat& outImage,
const Scalar& color=Scalar::all(-1),
int flags=DrawLinesMatchesFlags::DEFAULT );
} }
#endif #endif

@ -5,38 +5,38 @@
copy or use the software. copy or use the software.
License Agreement License Agreement
For Open Source Computer Vision Library For Open Source Computer Vision Library
Copyright (C) 2011-2012, Lilian Zhang, all rights reserved. Copyright (C) 2011-2012, Lilian Zhang, all rights reserved.
Copyright (C) 2013, Manuele Tamburrano, Stefano Fabri, all rights reserved. Copyright (C) 2013, Manuele Tamburrano, Stefano Fabri, all rights reserved.
Copyright (C) 2014, Biagio Montesano, all rights reserved. Copyright (C) 2014, Biagio Montesano, all rights reserved.
Third party copyrights are property of their respective owners. Third party copyrights are property of their respective owners.
Redistribution and use in source and binary forms, with or without modification, Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met: are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, * Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer. this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, * Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
* The name of the copyright holders may not be used to endorse or promote products * The name of the copyright holders may not be used to endorse or promote products
derived from this software without specific prior written permission. derived from this software without specific prior written permission.
This software is provided by the copyright holders and contributors "as is" and This software is provided by the copyright holders and contributors "as is" and
any express or implied warranties, including, but not limited to, the implied any express or implied warranties, including, but not limited to, the implied
warranties of merchantability and fitness for a particular purpose are disclaimed. warranties of merchantability and fitness for a particular purpose are disclaimed.
In no event shall the Intel Corporation or contributors be liable for any direct, In no event shall the Intel Corporation or contributors be liable for any direct,
indirect, incidental, special, exemplary, or consequential damages indirect, incidental, special, exemplary, or consequential damages
(including, but not limited to, procurement of substitute goods or services; (including, but not limited to, procurement of substitute goods or services;
loss of use, data, or profits; or business interruption) however caused loss of use, data, or profits; or business interruption) however caused
and on any theory of liability, whether in contract, strict liability, and on any theory of liability, whether in contract, strict liability,
or tort (including negligence or otherwise) arising in any way out of or tort (including negligence or otherwise) arising in any way out of
the use of this software, even if advised of the possibility of such damage. the use of this software, even if advised of the possibility of such damage.
*/ */
#ifndef __OPENCV_LINE_STRUCTURE_HH_ #ifndef __OPENCV_LINE_STRUCTURE_HH_
#define __OPENCV_LINE_STRUCTURE_HH_ #define __OPENCV_LINE_STRUCTURE_HH_
@ -44,42 +44,43 @@ the use of this software, even if advised of the possibility of such damage.
#include <vector> #include <vector>
/* struct to represent lines extracted from an octave */ /* struct to represent lines extracted from an octave */
struct OctaveLine{ struct OctaveLine
unsigned int octaveCount;//the octave which this line is detected {
unsigned int lineIDInOctave;//the line ID in that octave image unsigned int octaveCount; //the octave which this line is detected
unsigned int lineIDInScaleLineVec;//the line ID in Scale line vector unsigned int lineIDInOctave; //the line ID in that octave image
float lineLength; //the length of line in original image scale unsigned int lineIDInScaleLineVec; //the line ID in Scale line vector
float lineLength; //the length of line in original image scale
}; };
// A 2D line (normal equation parameters). // A 2D line (normal equation parameters).
struct SingleLine struct SingleLine
{ {
//note: rho and theta are based on coordinate origin, i.e. the top-left corner of image //note: rho and theta are based on coordinate origin, i.e. the top-left corner of image
double rho;//unit: pixel length double rho; //unit: pixel length
double theta;//unit: rad double theta; //unit: rad
double linePointX;// = rho * cos(theta); double linePointX; // = rho * cos(theta);
double linePointY;// = rho * sin(theta); double linePointY; // = rho * sin(theta);
//for EndPoints, the coordinate origin is the top-left corner of image. //for EndPoints, the coordinate origin is the top-left corner of image.
double startPointX; double startPointX;
double startPointY; double startPointY;
double endPointX; double endPointX;
double endPointY; double endPointY;
//direction of a line, the angle between positive line direction (dark side is in the left) and positive X axis. //direction of a line, the angle between positive line direction (dark side is in the left) and positive X axis.
double direction; double direction;
//mean gradient magnitude //mean gradient magnitude
double gradientMagnitude; double gradientMagnitude;
//mean gray value of pixels in dark side of line //mean gray value of pixels in dark side of line
double darkSideGrayValue; double darkSideGrayValue;
//mean gray value of pixels in light side of line //mean gray value of pixels in light side of line
double lightSideGrayValue; double lightSideGrayValue;
//the length of line //the length of line
double lineLength; double lineLength;
//the width of line; //the width of line;
double width; double width;
//number of pixels //number of pixels
int numOfPixels; int numOfPixels;
//the decriptor of line //the decriptor of line
std::vector<double> descriptor; std::vector<double> descriptor;
}; };
// Specifies a vector of lines. // Specifies a vector of lines.
@ -87,29 +88,29 @@ typedef std::vector<SingleLine> Lines_list;
struct OctaveSingleLine struct OctaveSingleLine
{ {
/*endPoints, the coordinate origin is the top-left corner of the original image. /*endPoints, the coordinate origin is the top-left corner of the original image.
*startPointX = sPointInOctaveX * (factor)^octaveCount; */ *startPointX = sPointInOctaveX * (factor)^octaveCount; */
float startPointX; float startPointX;
float startPointY; float startPointY;
float endPointX; float endPointX;
float endPointY; float endPointY;
//endPoints, the coordinate origin is the top-left corner of the octave image. //endPoints, the coordinate origin is the top-left corner of the octave image.
float sPointInOctaveX; float sPointInOctaveX;
float sPointInOctaveY; float sPointInOctaveY;
float ePointInOctaveX; float ePointInOctaveX;
float ePointInOctaveY; float ePointInOctaveY;
//direction of a line, the angle between positive line direction (dark side is in the left) and positive X axis. //direction of a line, the angle between positive line direction (dark side is in the left) and positive X axis.
float direction; float direction;
//the summation of gradient magnitudes of pixels on lines //the summation of gradient magnitudes of pixels on lines
float salience; float salience;
//the length of line //the length of line
float lineLength; float lineLength;
//number of pixels //number of pixels
unsigned int numOfPixels; unsigned int numOfPixels;
//the octave which this line is detected //the octave which this line is detected
unsigned int octaveCount; unsigned int octaveCount;
//the decriptor of line //the decriptor of line
std::vector<float> descriptor; std::vector<float> descriptor;
}; };
// Specifies a vector of lines. // Specifies a vector of lines.

@ -51,76 +51,76 @@
#include <opencv2/core.hpp> #include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp> #include <opencv2/imgproc.hpp>
class Mihasher
class Mihasher { {
private: private:
/* Bits per code */ /* Bits per code */
int B; int B;
/* B/8 */ /* B/8 */
int B_over_8; int B_over_8;
/* Bits per chunk (must be less than 64) */ /* Bits per chunk (must be less than 64) */
int b; int b;
/* Number of chunks */ /* Number of chunks */
int m; int m;
/* Number of chunks with b bits (have 1 bit more than others) */ /* Number of chunks with b bits (have 1 bit more than others) */
int mplus; int mplus;
/* Maximum hamming search radius (we use B/2 by default) */ /* Maximum hamming search radius (we use B/2 by default) */
int D; int D;
/* Maximum hamming search radius per substring */ /* Maximum hamming search radius per substring */
int d; int d;
/* Maximum results to return */ /* Maximum results to return */
int K; int K;
/* Number of codes */ /* Number of codes */
UINT64 N; UINT64 N;
/* Table of original full-length codes */ /* Table of original full-length codes */
cv::Mat codes; cv::Mat codes;
/* Counter for eliminating duplicate results (it is not thread safe) */ /* Counter for eliminating duplicate results (it is not thread safe) */
bitarray *counter; bitarray *counter;
/* Array of m hashtables */ /* Array of m hashtables */
SparseHashtable *H; SparseHashtable *H;
/* Volume of a b-bit Hamming ball with radius s (for s = 0 to d) */ /* Volume of a b-bit Hamming ball with radius s (for s = 0 to d) */
UINT32 *xornum; UINT32 *xornum;
/* Used within generation of binary codes at a certain Hamming distance */ /* Used within generation of binary codes at a certain Hamming distance */
int power[100]; int power[100];
public: public:
/* constructor */ /* constructor */
Mihasher(); Mihasher();
/* desctructor */ /* desctructor */
~Mihasher(); ~Mihasher();
/* constructor 2 */ /* constructor 2 */
Mihasher(int B, int m); Mihasher( int B, int m );
/* K setter */ /* K setter */
void setK(int K); void setK( int K );
/* populate tables */ /* populate tables */
void populate(cv::Mat & codes, UINT32 N, int dim1codes); void populate( cv::Mat & codes, UINT32 N, int dim1codes );
/* execute a batch query */ /* execute a batch query */
void batchquery (UINT32 * results, UINT32 *numres/*, qstat *stats*/,const cv::Mat & q, UINT32 numq, int dim1queries); void batchquery( UINT32 * results, UINT32 *numres/*, qstat *stats*/, const cv::Mat & q, UINT32 numq, int dim1queries );
private: private:
/* execute a single query */ /* execute a single query */
void query(UINT32 * results, UINT32* numres/*, qstat *stats*/, UINT8 *q, UINT64 * chunks, UINT32 * res); void query( UINT32 * results, UINT32* numres/*, qstat *stats*/, UINT8 *q, UINT64 * chunks, UINT32 * res );
}; };
#endif #endif

@ -51,34 +51,34 @@ class SparseHashtable
private: private:
/* Maximum bits per key before folding the table */ /* Maximum bits per key before folding the table */
static const int MAX_B; static const int MAX_B;
/* Bins (each bin is an Array object for duplicates of the same key) */ /* Bins (each bin is an Array object for duplicates of the same key) */
BucketGroup *table; BucketGroup *table;
public: public:
/* constructor */ /* constructor */
SparseHashtable(); SparseHashtable();
/* destructor */ /* destructor */
~SparseHashtable(); ~SparseHashtable();
/* initializer */ /* initializer */
int init(int _b); int init( int _b );
/* insert data */ /* insert data */
void insert(UINT64 index, UINT32 data); void insert( UINT64 index, UINT32 data );
/* query data */ /* query data */
UINT32* query(UINT64 index, int* size); UINT32* query( UINT64 index, int* size );
/* Bits per index */ /* Bits per index */
int b; int b;
/* Number of bins */ /* Number of bins */
UINT64 size; UINT64 size;
}; };

@ -1,9 +0,0 @@
cmake_minimum_required(VERSION 2.8)
project(line_descriptor)
find_package(OpenCV REQUIRED)
set(SOURCES lines_extraction.cpp compute_descriptors.cpp ../src/BinaryDescriptor.cpp)
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(lines_extraction compute_descriptors ${SOURCES} ${HEADERS})
target_link_libraries(lines_extraction compute_descriptors ${OpenCV_LIBS})

@ -41,7 +41,6 @@
#include <opencv2/line_descriptor.hpp> #include <opencv2/line_descriptor.hpp>
#include "opencv2/core/utility.hpp" #include "opencv2/core/utility.hpp"
#include "opencv2/core/private.hpp" #include "opencv2/core/private.hpp"
#include <opencv2/imgproc.hpp> #include <opencv2/imgproc.hpp>
@ -53,72 +52,55 @@
using namespace cv; using namespace cv;
static const char* keys = static const char* keys =
{ { "{@image_path | | Image path }" };
"{@image_path | | Image path }"
};
static void help() static void help()
{ {
std::cout << "\nThis example shows the functionalities of lines extraction " << std::cout << "\nThis example shows the functionalities of lines extraction " << "and descriptors computation furnished by BinaryDescriptor class\n"
"and descriptors computation furnished by BinaryDescriptor class\n" << << "Please, run this sample using a command in the form\n" << "./example_line_descriptor_compute_descriptors <path_to_input_image>"
"Please, run this sample using a command in the form\n" << << std::endl;
"./example_line_descriptor_compute_descriptors <path_to_input_image>"
<< std::endl;
}
inline void writeMat(cv::Mat m, std::string name, int n)
{
std::stringstream ss;
std::string s;
ss << n;
ss >> s;
std::string fileNameConf = name + s;
cv::FileStorage fsConf(fileNameConf, cv::FileStorage::WRITE);
fsConf << "m" << m;
fsConf.release();
} }
int main( int argc, char** argv ) int main( int argc, char** argv )
{ {
/* get parameters from comand line */ /* get parameters from command line */
CommandLineParser parser( argc, argv, keys ); CommandLineParser parser( argc, argv, keys );
String image_path = parser.get<String>( 0 ); String image_path = parser.get<String>( 0 );
if(image_path.empty()) if( image_path.empty() )
{ {
help(); help();
return -1; return -1;
} }
/* load image */ /* load image */
cv::Mat imageMat = imread(image_path, 1); cv::Mat imageMat = imread( image_path, 1 );
if(imageMat.data == NULL) if( imageMat.data == NULL )
{ {
std::cout << "Error, image could not be loaded. Please, check its path" << std::endl; std::cout << "Error, image could not be loaded. Please, check its path" << std::endl;
} }
/* create a random binary mask */ /* create a binary mask */
cv::Mat mask = Mat::ones(imageMat.size(), CV_8UC1); cv::Mat mask = Mat::ones( imageMat.size(), CV_8UC1 );
/* create a pointer to a BinaryDescriptor object with default parameters */ /* create a pointer to a BinaryDescriptor object with default parameters */
Ptr<BinaryDescriptor> bd = BinaryDescriptor::createBinaryDescriptor(); Ptr<BinaryDescriptor> bd = BinaryDescriptor::createBinaryDescriptor();
/* compute lines */ /* compute lines */
std::vector<KeyLine> keylines; std::vector<KeyLine> keylines;
bd->detect(imageMat, keylines, mask); bd->detect( imageMat, keylines, mask );
std::vector<KeyLine> octave0; /* select only lines from first octave */
for(size_t i = 0; i<keylines.size(); i++) std::vector<KeyLine> octave0;
{ for ( size_t i = 0; i < keylines.size(); i++ )
if(keylines[i].octave == 0) {
octave0.push_back(keylines[i]); if( keylines[i].octave == 0 )
} octave0.push_back( keylines[i] );
}
/* compute descriptors */
cv::Mat descriptors; /* compute descriptors */
cv::Mat descriptors;
bd->compute(imageMat, octave0, descriptors);
writeMat(descriptors, "old_code", 0); bd->compute( imageMat, octave0, descriptors );
} }

@ -53,158 +53,151 @@
using namespace cv; using namespace cv;
static const char* keys = static const char* keys =
{ { "{@image_path1 | | Image path 1 }"
"{@image_path1 | | Image path 1 }" "{@image_path2 | | Image path 2 }" };
"{@image_path2 | | Image path 2 }"
};
static void help() static void help()
{ {
std::cout << "\nThis example shows the functionalities of descriptors matching\n" << std::cout << "\nThis example shows the functionalities of descriptors matching\n" << "Please, run this sample using a command in the form\n"
"Please, run this sample using a command in the form\n" << << "./example_line_descriptor_matching <path_to_input_image 1>" << "<path_to_input_image 2>" << std::endl;
"./example_line_descriptor_matching <path_to_input_image 1>"
<< "<path_to_input_image 2>" << std::endl;
} }
/* invert numBits bits in input char */ /* invert numBits bits in input char */
uchar invertSingleBits (uchar dividend_char, int numBits) uchar invertSingleBits( uchar dividend_char, int numBits )
{ {
std::vector<int> bin_vector; std::vector<int> bin_vector;
long dividend; long dividend;
long bin_num; long bin_num;
/* convert input char to a long */ /* convert input char to a long */
dividend = (long)dividend_char; dividend = (long) dividend_char;
/*if a 0 has been obtained, just generate a 8-bit long vector of zeros */ /*if a 0 has been obtained, just generate a 8-bit long vector of zeros */
if(dividend == 0) if( dividend == 0 )
bin_vector = std::vector<int>(8, 0); bin_vector = std::vector<int>( 8, 0 );
/* else, apply classic decimal to binary conversion */ /* else, apply classic decimal to binary conversion */
else else
{
while ( dividend >= 1 )
{ {
while ( dividend >= 1 ) bin_num = dividend % 2;
{ dividend /= 2;
bin_num = dividend % 2; bin_vector.push_back( bin_num );
dividend /= 2;
bin_vector.push_back(bin_num);
}
} }
}
/* ensure that binary vector always has length 8 */ /* ensure that binary vector always has length 8 */
if(bin_vector.size()<8){ if( bin_vector.size() < 8 )
std::vector<int> zeros (8-bin_vector.size(), 0); {
bin_vector.insert(bin_vector.end(), zeros.begin(), zeros.end()); std::vector<int> zeros( 8 - bin_vector.size(), 0 );
} bin_vector.insert( bin_vector.end(), zeros.begin(), zeros.end() );
}
/* invert numBits bits */ /* invert numBits bits */
for(int index = 0; index<numBits; index++) for ( int index = 0; index < numBits; index++ )
{ {
if(bin_vector[index] == 0) if( bin_vector[index] == 0 )
bin_vector[index] = 1; bin_vector[index] = 1;
else else
bin_vector[index] = 0; bin_vector[index] = 0;
} }
/* reconvert to decimal */ /* reconvert to decimal */
uchar result; uchar result;
for(int i = (int)bin_vector.size()-1; i>=0; i--) for ( int i = (int) bin_vector.size() - 1; i >= 0; i-- )
result += bin_vector[i]*pow(2, i); result += bin_vector[i] * pow( 2, i );
return result; return result;
} }
int main( int argc, char** argv ) int main( int argc, char** argv )
{ {
/* get parameters from comand line */ /* get parameters from comand line */
CommandLineParser parser( argc, argv, keys ); CommandLineParser parser( argc, argv, keys );
String image_path1 = parser.get<String>( 0 ); String image_path1 = parser.get<String>( 0 );
String image_path2 = parser.get<String>( 1 ); String image_path2 = parser.get<String>( 1 );
if(image_path1.empty() || image_path2.empty()) if( image_path1.empty() || image_path2.empty() )
{
help();
return -1;
}
/* load image */
cv::Mat imageMat1 = imread( image_path1, 1 );
cv::Mat imageMat2 = imread( image_path2, 1 );
if( imageMat1.data == NULL || imageMat2.data == NULL )
{
std::cout << "Error, images could not be loaded. Please, check their paths" << std::endl;
}
/* create binary masks */
cv::Mat mask1 = Mat::ones( imageMat1.size(), CV_8UC1 );
cv::Mat mask2 = Mat::ones( imageMat2.size(), CV_8UC1 );
/* create a pointer to a BinaryDescriptor object with default parameters */
Ptr<BinaryDescriptor> bd = BinaryDescriptor::createBinaryDescriptor();
/* compute lines */
std::vector<KeyLine> keylines1, keylines2;
bd->detect( imageMat1, keylines1, mask1 );
bd->detect( imageMat2, keylines2, mask2 );
/* compute descriptors */
cv::Mat descr1, descr2;
bd->compute( imageMat1, keylines1, descr1 );
bd->compute( imageMat2, keylines2, descr2 );
/* create a BinaryDescriptorMatcher object */
Ptr<BinaryDescriptorMatcher> bdm = BinaryDescriptorMatcher::createBinaryDescriptorMatcher();
/* make a copy of descr2 mat */
Mat descr2Copy = descr1.clone();
/* randomly change some bits in original descriptors */
srand( time( NULL ) );
for ( int j = 0; j < descr1.rows; j++ )
{
/* select a random column */
int randCol = rand() % 32;
/* get correspondent data */
uchar u = descr1.at<uchar>( j, randCol );
/* change bits */
for ( int k = 1; k <= 5; k++ )
{ {
help(); /* copy current row to train matrix */
return -1; descr2Copy.push_back( descr1.row( j ) );
}
/* load image */ /* invert k bits */
cv::Mat imageMat1 = imread(image_path1, 1); uchar uc = invertSingleBits( u, k );
cv::Mat imageMat2 = imread(image_path2, 1);
if(imageMat1.data == NULL || imageMat2.data == NULL) /* update current row in train matrix */
{ descr2Copy.at<uchar>( descr2Copy.rows - 1, randCol ) = uc;
std::cout << "Error, images could not be loaded. Please, check their paths"
<< std::endl;
} }
}
/* create binary masks */ /* prepare a structure to host matches */
cv::Mat mask1 = Mat::ones(imageMat1.size(), CV_8UC1); std::vector<std::vector<DMatch> > matches;
cv::Mat mask2 = Mat::ones(imageMat2.size(), CV_8UC1);
/* create a pointer to a BinaryDescriptor object with default parameters */
Ptr<BinaryDescriptor> bd = BinaryDescriptor::createBinaryDescriptor();
/* compute lines */
std::vector<KeyLine> keylines1, keylines2;
bd->detect(imageMat1, keylines1, mask1);
bd->detect(imageMat2, keylines2, mask2);
/* compute descriptors */
cv::Mat descr1, descr2;
bd->compute(imageMat1, keylines1, descr1);
bd->compute(imageMat2, keylines2, descr2);
/* create a BinaryDescriptorMatcher object */ /* require knn match */
Ptr<BinaryDescriptorMatcher> bdm = BinaryDescriptorMatcher::createBinaryDescriptorMatcher(); bdm->knnMatch( descr1, descr2, matches, 6 );
/* make a copy of descr2 mat */ /* visualize matches and Hamming distances */
Mat descr2Copy = descr1.clone(); for ( size_t v = 0; v < matches.size(); v++ )
{
/* randomly change some bits in original descriptors */ for ( size_t m = 0; m < matches[v].size(); m++ )
srand (time(NULL));
for(int j = 0; j<descr1.rows; j++)
{
/* select a random column */
int randCol = rand() % 32;
/* get correspondent data */
uchar u = descr1.at<uchar>(j, randCol);
/* change bits */
for(int k = 1; k<=5; k++)
{
/* copy current row to train matrix */
descr2Copy.push_back(descr1.row(j));
/* invert k bits */
uchar uc = invertSingleBits(u, k);
/* update current row in train matrix */
descr2Copy.at<uchar>(descr2Copy.rows-1, randCol) = uc;
}
}
/* prepare a structure to host matches */
std::vector<std::vector<DMatch> > matches;
/* require knn match */
bdm->knnMatch(descr1, descr2, matches, 6);
/* visualize matches and Hamming distances */
for(size_t v = 0; v<matches.size(); v++)
{ {
for(size_t m = 0; m<matches[v].size(); m++) DMatch dm = matches[v][m];
{ std::cout << dm.queryIdx << " " << dm.trainIdx << " " << dm.distance << std::endl;
DMatch dm = matches[v][m];
std::cout << dm.queryIdx << " " << dm.trainIdx << " "
<< dm.distance << std::endl;
}
} }
}
} }

@ -53,76 +53,70 @@ using namespace cv;
using namespace std; using namespace std;
static const char* keys = static const char* keys =
{ { "{@image_path | | Image path }" };
"{@image_path | | Image path }"
};
static void help() static void help()
{ {
cout << "\nThis example shows the functionalities of lines extraction " << cout << "\nThis example shows the functionalities of lines extraction " << "furnished by BinaryDescriptor class\n"
"furnished by BinaryDescriptor class\n" << << "Please, run this sample using a command in the form\n" << "./example_line_descriptor_lines_extraction <path_to_input_image>" << endl;
"Please, run this sample using a command in the form\n" <<
"./example_line_descriptor_lines_extraction <path_to_input_image>" << endl;
} }
int main( int argc, char** argv ) int main( int argc, char** argv )
{ {
/* get parameters from comand line */ /* get parameters from comand line */
CommandLineParser parser( argc, argv, keys ); CommandLineParser parser( argc, argv, keys );
String image_path = parser.get<String>( 0 ); String image_path = parser.get<String>( 0 );
if(image_path.empty()) if( image_path.empty() )
{
help();
return -1;
}
/* load image */
cv::Mat imageMat = imread( image_path, 1 );
if( imageMat.data == NULL )
{
std::cout << "Error, image could not be loaded. Please, check its path" << std::endl;
}
/* create a ramdom binary mask */
cv::Mat mask = Mat::ones( imageMat.size(), CV_8UC1 );
/* create a pointer to a BinaryDescriptor object with deafult parameters */
Ptr<BinaryDescriptor> bd = BinaryDescriptor::createBinaryDescriptor();
/* create a structure to store extracted lines */
vector<KeyLine> lines;
/* extract lines */
bd->detect( imageMat, lines, mask );
/* draw lines extracted from octave 0 */
cv::Mat output = imageMat.clone();
if( output.channels() == 1 )
cvtColor( output, output, COLOR_GRAY2BGR );
for ( size_t i = 0; i < lines.size(); i++ )
{
KeyLine kl = lines[i];
if( kl.octave == 0 )
{ {
help(); /* get a random color */
return -1; int R = ( rand() % (int) ( 255 + 1 ) );
} int G = ( rand() % (int) ( 255 + 1 ) );
int B = ( rand() % (int) ( 255 + 1 ) );
/* load image */
cv::Mat imageMat = imread(image_path, 1);
if(imageMat.data == NULL)
{
std::cout << "Error, image could not be loaded. Please, check its path" << std::endl;
}
/* create a ramdom binary mask */ /* get extremes of line */
cv::Mat mask = Mat::ones(imageMat.size(), CV_8UC1); Point pt1 = Point( kl.startPointX, kl.startPointY );
Point pt2 = Point( kl.endPointX, kl.endPointY );
/* create a pointer to a BinaryDescriptor object with deafult parameters */
Ptr<BinaryDescriptor> bd = BinaryDescriptor::createBinaryDescriptor();
/* create a structure to store extracted lines */
vector<KeyLine> lines;
/* extract lines */
bd->detect(imageMat, lines, mask);
std::cout << lines.size() << std::endl;
/* draw lines extracted from octave 0 */
cv::Mat output = imageMat.clone();
if(output.channels() == 1)
cvtColor(output, output, COLOR_GRAY2BGR);
for(size_t i = 0; i<lines.size(); i++)
{
KeyLine kl = lines[i];
if(kl.octave == 0)
{
/* get a random color */
int R = (rand() % (int)(255 + 1));
int G = (rand() % (int)(255 + 1));
int B = (rand() % (int)(255 + 1));
/* get extremes of line */
Point pt1 = Point(kl.startPointX, kl.startPointY);
Point pt2 = Point(kl.endPointX, kl.endPointY);
/* draw line */
line(output, pt1, pt2, Scalar(B,G,R), 5);
}
/* draw line */
line( output, pt1, pt2, Scalar( B, G, R ), 5 );
} }
/* show lines on image */ }
imshow("Lines", output);
waitKey(); /* show lines on image */
imshow( "Lines", output );
waitKey();
} }

@ -52,80 +52,71 @@
using namespace cv; using namespace cv;
static const char* keys = static const char* keys =
{ { "{@image_path1 | | Image path 1 }"
"{@image_path1 | | Image path 1 }" "{@image_path2 | | Image path 2 }" };
"{@image_path2 | | Image path 2 }"
};
static void help() static void help()
{ {
std::cout << "\nThis example shows the functionalities of lines extraction " << std::cout << "\nThis example shows the functionalities of lines extraction " << "and descriptors computation furnished by BinaryDescriptor class\n"
"and descriptors computation furnished by BinaryDescriptor class\n" << << "Please, run this sample using a command in the form\n" << "./example_line_descriptor_compute_descriptors <path_to_input_image 1>"
"Please, run this sample using a command in the form\n" << << "<path_to_input_image 2>" << std::endl;
"./example_line_descriptor_compute_descriptors <path_to_input_image 1>"
<< "<path_to_input_image 2>" << std::endl;
} }
int main( int argc, char** argv ) int main( int argc, char** argv )
{ {
/* get parameters from comand line */ /* get parameters from comand line */
CommandLineParser parser( argc, argv, keys ); CommandLineParser parser( argc, argv, keys );
String image_path1 = parser.get<String>( 0 ); String image_path1 = parser.get<String>( 0 );
String image_path2 = parser.get<String>( 1 ); String image_path2 = parser.get<String>( 1 );
if(image_path1.empty() || image_path2.empty()) if( image_path1.empty() || image_path2.empty() )
{ {
help(); help();
return -1; return -1;
} }
/* load image */
/* load image */ cv::Mat imageMat1 = imread( image_path1, 1 );
cv::Mat imageMat1 = imread(image_path1, 1); cv::Mat imageMat2 = imread( image_path2, 1 );
cv::Mat imageMat2 = imread(image_path2, 1);
waitKey();
waitKey(); if( imageMat1.data == NULL || imageMat2.data == NULL )
if(imageMat1.data == NULL || imageMat2.data == NULL) {
{ std::cout << "Error, images could not be loaded. Please, check their path" << std::endl;
std::cout << "Error, images could not be loaded. Please, check their path" }
<< std::endl;
} /* create binary masks */
cv::Mat mask1 = Mat::ones( imageMat1.size(), CV_8UC1 );
/* create binary masks */ cv::Mat mask2 = Mat::ones( imageMat2.size(), CV_8UC1 );
cv::Mat mask1 = Mat::ones(imageMat1.size(), CV_8UC1);
cv::Mat mask2 = Mat::ones(imageMat2.size(), CV_8UC1); /* create a pointer to a BinaryDescriptor object with default parameters */
Ptr<BinaryDescriptor> bd = BinaryDescriptor::createBinaryDescriptor();
/* create a pointer to a BinaryDescriptor object with default parameters */
Ptr<BinaryDescriptor> bd = BinaryDescriptor::createBinaryDescriptor(); /* compute lines */
std::vector<KeyLine> keylines1, keylines2;
/* compute lines */ bd->detect( imageMat1, keylines1, mask1 );
std::vector<KeyLine> keylines1, keylines2; bd->detect( imageMat2, keylines2, mask2 );
bd->detect(imageMat1, keylines1, mask1);
bd->detect(imageMat2, keylines2, mask2); /* compute descriptors */
cv::Mat descr1, descr2;
/* compute descriptors */ bd->compute( imageMat1, keylines1, descr1 );
cv::Mat descr1, descr2; bd->compute( imageMat2, keylines2, descr2 );
bd->compute(imageMat1, keylines1, descr1);
bd->compute(imageMat2, keylines2, descr2); /* create a BinaryDescriptorMatcher object */
Ptr<BinaryDescriptorMatcher> bdm = BinaryDescriptorMatcher::createBinaryDescriptorMatcher();
/* create a BinaryDescriptorMatcher object */
Ptr<BinaryDescriptorMatcher> bdm = BinaryDescriptorMatcher::createBinaryDescriptorMatcher(); /* require match */
std::vector<DMatch> matches;
/* require match */ bdm->match( descr1, descr2, matches );
std::vector<DMatch> matches;
bdm->match(descr1, descr2, matches); /* plot matches */
cv::Mat outImg;
/* plot matches */ std::vector<char> mask( matches.size(), 1 );
cv::Mat outImg; drawLineMatches( imageMat1, keylines1, imageMat2, keylines2, matches, outImg, Scalar::all( -1 ), Scalar::all( -1 ), mask,
std::vector<char> mask (matches.size(), 1); DrawLinesMatchesFlags::DEFAULT );
drawLineMatches(imageMat1, keylines1, imageMat2, keylines2, matches,
outImg, Scalar::all(-1), Scalar::all(-1), mask, imshow( "Matches", outImg );
DrawLinesMatchesFlags::DEFAULT); waitKey();
std::cout << "num dmatch " << matches.size() << std::endl;
imshow("Matches", outImg);
waitKey();
} }

@ -42,151 +42,148 @@
#include "precomp.hpp" #include "precomp.hpp"
/* no need for the static keyword in the definition */ /* no need for the static keyword in the definition */
double Array32::ARRAY_RESIZE_FACTOR = 1.1; // minimum is 1.0 double Array32::ARRAY_RESIZE_FACTOR = 1.1; // minimum is 1.0
double Array32::ARRAY_RESIZE_ADD_FACTOR = 4; // minimum is 1 double Array32::ARRAY_RESIZE_ADD_FACTOR = 4; // minimum is 1
/* set ARRAY_RESIZE_FACTOR */ /* set ARRAY_RESIZE_FACTOR */
void Array32::setArrayResizeFactor(double arf) void Array32::setArrayResizeFactor( double arf )
{ {
ARRAY_RESIZE_FACTOR = arf; ARRAY_RESIZE_FACTOR = arf;
} }
/* constructor */ /* constructor */
Array32::Array32 () Array32::Array32()
{ {
arr = NULL; arr = NULL;
} }
/* definition of operator = /* definition of operator =
Array32& Array32::operator = (const Array32 &rhs) */ Array32& Array32::operator = (const Array32 &rhs) */
void Array32::operator = (const Array32 &rhs) void Array32::operator =( const Array32 &rhs )
{ {
if (&rhs != this) if( &rhs != this )
this->arr = rhs.arr; this->arr = rhs.arr;
} }
/* destructor */ /* destructor */
Array32::~Array32 () Array32::~Array32()
{ {
cleanup(); cleanup();
} }
/* cleaning function used in destructor */ /* cleaning function used in destructor */
void Array32::cleanup () void Array32::cleanup()
{ {
free(arr); free( arr );
} }
/* push data */ /* push data */
void Array32::push(UINT32 Data) void Array32::push( UINT32 Data )
{ {
if (arr) if( arr )
{
if( arr[0] == arr[1] )
{ {
if (arr[0] == arr[1]) arr[1] = std::max( ceil( arr[1] * ARRAY_RESIZE_FACTOR ), arr[1] + ARRAY_RESIZE_ADD_FACTOR );
{ UINT32* new_Data = static_cast<UINT32*>( realloc( arr, sizeof(UINT32) * ( 2 + arr[1] ) ) );
arr[1] = std::max(ceil(arr[1]*ARRAY_RESIZE_FACTOR), if( new_Data == NULL )
arr[1]+ARRAY_RESIZE_ADD_FACTOR); {
UINT32* new_Data = static_cast<UINT32*> /* could not realloc, but orig still valid */
(realloc (arr, sizeof(UINT32)*(2 + arr[1]))); std::cout << "ALERT!!!! Not enough memory, operation aborted!" << std::endl;
if (new_Data == NULL) exit( 0 );
{ }
/* could not realloc, but orig still valid */ else
std::cout << "ALERT!!!! Not enough memory, operation aborted!" {
<< std::endl; arr = new_Data;
exit(0); }
}
else
{
arr = new_Data;
}
}
arr[2 + arr[0]] = Data;
arr[0]++;
} }
else arr[2 + arr[0]] = Data;
{ arr[0]++;
arr = (UINT32*) malloc ((2+ARRAY_RESIZE_ADD_FACTOR)*sizeof(UINT32));
arr[0] = 1; }
arr[1] = 1;
arr[2] = Data; else
} {
arr = (UINT32*) malloc( ( 2 + ARRAY_RESIZE_ADD_FACTOR ) * sizeof(UINT32) );
arr[0] = 1;
arr[1] = 1;
arr[2] = Data;
}
} }
/* insert data at given index */ /* insert data at given index */
void Array32::insert(UINT32 index, UINT32 Data) { void Array32::insert( UINT32 index, UINT32 Data )
if (arr) { {
if (arr[0] == arr[1]) { if( arr )
arr[1] = ceil(arr[0]*1.1); {
UINT32* new_data = static_cast<UINT32*> if( arr[0] == arr[1] )
(realloc (arr, sizeof(UINT32)*(2 + arr[1])));
if (new_data == NULL)
{
// could not realloc, but orig still valid
std::cout << "ALERT!!!! Not enough memory, operation aborted!"
<< std::endl;
exit(0);
}
else
{
arr = new_data;
}
}
memmove(arr+(2+index)+1, arr+(2+index), (arr[0]-index)*sizeof(*arr));
arr[2+index] = Data;
arr[0]++;
}
else
{ {
arr = (UINT32*) malloc (3*sizeof(UINT32)); arr[1] = ceil( arr[0] * 1.1 );
arr[0] = 1; UINT32* new_data = static_cast<UINT32*>( realloc( arr, sizeof(UINT32) * ( 2 + arr[1] ) ) );
arr[1] = 1; if( new_data == NULL )
arr[2] = Data; {
// could not realloc, but orig still valid
std::cout << "ALERT!!!! Not enough memory, operation aborted!" << std::endl;
exit( 0 );
}
else
{
arr = new_data;
}
} }
}
memmove( arr + ( 2 + index ) + 1, arr + ( 2 + index ), ( arr[0] - index ) * sizeof ( *arr ) );
arr[2 + index] = Data;
arr[0]++;
}
else
{
arr = (UINT32*) malloc( 3 * sizeof(UINT32) );
arr[0] = 1;
arr[1] = 1;
arr[2] = Data;
}
}
/* return data */ /* return data */
UINT32* Array32::data() UINT32* Array32::data()
{ {
return arr? arr + 2 : NULL; return arr ? arr + 2 : NULL;
} }
/* return data size */ /* return data size */
UINT32 Array32::size () UINT32 Array32::size()
{ {
return arr ? arr[0] : 0; return arr ? arr[0] : 0;
} }
/* return capacity */ /* return capacity */
UINT32 Array32::capacity () UINT32 Array32::capacity()
{ {
return arr ? arr[1] : 0; return arr ? arr[1] : 0;
} }
/* print data */ /* print data */
void Array32::print() { void Array32::print()
for (int i=0; i<(int)size(); i++) {
printf("%d, ", arr[i+2]); for ( int i = 0; i < (int) size(); i++ )
printf( "%d, ", arr[i + 2] );
printf("\n"); printf( "\n" );
} }
/* initializer */ /* initializer */
void Array32::init(int Size) void Array32::init( int Size )
{ {
if (arr == NULL) if( arr == NULL )
{ {
arr = (UINT32*) malloc ((2+Size)*sizeof(UINT32)); arr = (UINT32*) malloc( ( 2 + Size ) * sizeof(UINT32) );
arr[0] = 0; arr[0] = 0;
arr[1] = Size; arr[1] = Size;
} }
} }

@ -352,6 +352,35 @@ void BinaryDescriptor::computeGaussianPyramid( const Mat& image )
} }
} }
/* check lines' extremes */
inline void checkLineExtremes( cv::Vec4i& extremes, cv::Size imageSize )
{
if( extremes[0] < 0 )
extremes[0] = 0;
if( extremes[0] >= imageSize.width )
extremes[0] = imageSize.width - 1;
if( extremes[2] < 0 )
extremes[2] = 0;
if( extremes[2] >= imageSize.width )
extremes[2] = imageSize.width - 1;
if( extremes[1] < 0 )
extremes[1] = 0;
if( extremes[1] >= imageSize.height )
extremes[1] = imageSize.height - 1;
if( extremes[3] < 0 )
extremes[3] = 0;
if( extremes[3] >= imageSize.height )
extremes[3] = imageSize.height - 1;
}
/* requires line detection (only one image) */ /* requires line detection (only one image) */
void BinaryDescriptor::detect( const Mat& image, CV_OUT std::vector<KeyLine>& keylines, const Mat& mask ) void BinaryDescriptor::detect( const Mat& image, CV_OUT std::vector<KeyLine>& keylines, const Mat& mask )
{ {
@ -389,7 +418,7 @@ void BinaryDescriptor::detectImpl( const Mat& imageSrc, std::vector<KeyLine>& ke
{ {
cv::Mat image; cv::Mat image;
if(imageSrc.channels() != 1) if( imageSrc.channels() != 1 )
cvtColor( imageSrc, image, COLOR_BGR2GRAY ); cvtColor( imageSrc, image, COLOR_BGR2GRAY );
else else
image = imageSrc.clone(); image = imageSrc.clone();
@ -422,11 +451,15 @@ void BinaryDescriptor::detectImpl( const Mat& imageSrc, std::vector<KeyLine>& ke
/* create a KeyLine object */ /* create a KeyLine object */
KeyLine kl; KeyLine kl;
/* check data validity */
cv::Vec4i extremes( osl.startPointX, osl.startPointY, osl.endPointX, osl.endPointY );
checkLineExtremes( extremes, image.size() );
/* fill KeyLine's fields */ /* fill KeyLine's fields */
kl.startPointX = osl.startPointX; kl.startPointX = extremes[0];
kl.startPointY = osl.startPointY; kl.startPointY = extremes[1];
kl.endPointX = osl.endPointX; kl.endPointX = extremes[2];
kl.endPointY = osl.endPointY; kl.endPointY = extremes[3];
kl.sPointInOctaveX = osl.sPointInOctaveX; kl.sPointInOctaveX = osl.sPointInOctaveX;
kl.sPointInOctaveY = osl.sPointInOctaveY; kl.sPointInOctaveY = osl.sPointInOctaveY;
kl.ePointInOctaveX = osl.ePointInOctaveX; kl.ePointInOctaveX = osl.ePointInOctaveX;
@ -448,6 +481,7 @@ void BinaryDescriptor::detectImpl( const Mat& imageSrc, std::vector<KeyLine>& ke
} }
/* delete undesired KeyLines, according to input mask */ /* delete undesired KeyLines, according to input mask */
std::cout << "Mask size " << mask.rows << " " << mask.cols << std::endl;
if( !mask.empty() ) if( !mask.empty() )
{ {
for ( size_t keyCounter = 0; keyCounter < keylines.size(); keyCounter++ ) for ( size_t keyCounter = 0; keyCounter < keylines.size(); keyCounter++ )
@ -478,7 +512,7 @@ void BinaryDescriptor::computeImpl( const Mat& imageSrc, std::vector<KeyLine>& k
{ {
/* convert input image to gray scale */ /* convert input image to gray scale */
cv::Mat image; cv::Mat image;
if(imageSrc.channels() != 1) if( imageSrc.channels() != 1 )
cvtColor( imageSrc, image, COLOR_BGR2GRAY ); cvtColor( imageSrc, image, COLOR_BGR2GRAY );
else else
image = imageSrc.clone(); image = imageSrc.clone();
@ -861,7 +895,7 @@ int BinaryDescriptor::OctaveKeyLines( ScaleLines &keyLines )
singleLine.octaveCount = octaveID; singleLine.octaveCount = octaveID;
singleLine.lineLength = octaveLines[lineID].lineLength; singleLine.lineLength = octaveLines[lineID].lineLength;
// decide the start point and end point // decide the start point and end point
shouldChange = false; shouldChange = false;
s1 = ( extractedLines[octaveID][lineIDInOctave] )[0]; //sx s1 = ( extractedLines[octaveID][lineIDInOctave] )[0]; //sx

@ -46,554 +46,505 @@ using namespace cv;
/* constructor */ /* constructor */
BinaryDescriptorMatcher::BinaryDescriptorMatcher() BinaryDescriptorMatcher::BinaryDescriptorMatcher()
{ {
dataset = new Mihasher(256, 32); dataset = new Mihasher( 256, 32 );
nextAddedIndex = 0; nextAddedIndex = 0;
numImages = 0; numImages = 0;
descrInDS = 0; descrInDS = 0;
} }
/* constructor with smart pointer */ /* constructor with smart pointer */
Ptr<BinaryDescriptorMatcher> BinaryDescriptorMatcher::createBinaryDescriptorMatcher() Ptr<BinaryDescriptorMatcher> BinaryDescriptorMatcher::createBinaryDescriptorMatcher()
{ {
return Ptr<BinaryDescriptorMatcher>(new BinaryDescriptorMatcher()); return Ptr<BinaryDescriptorMatcher>( new BinaryDescriptorMatcher() );
} }
/* store new descriptors to be inserted in dataset */ /* store new descriptors to be inserted in dataset */
void BinaryDescriptorMatcher::add( const std::vector<Mat>& descriptors ) void BinaryDescriptorMatcher::add( const std::vector<Mat>& descriptors )
{ {
for(size_t i = 0; i<descriptors.size(); i++) for ( size_t i = 0; i < descriptors.size(); i++ )
{ {
descriptorsMat.push_back(descriptors[i]); descriptorsMat.push_back( descriptors[i] );
indexesMap.insert(std::pair<int, int>(nextAddedIndex, numImages)); indexesMap.insert( std::pair<int, int>( nextAddedIndex, numImages ) );
nextAddedIndex += descriptors[i].rows; nextAddedIndex += descriptors[i].rows;
numImages++; numImages++;
} }
} }
/* store new descriptors into dataset */ /* store new descriptors into dataset */
void BinaryDescriptorMatcher::train() void BinaryDescriptorMatcher::train()
{ {
if(!dataset) if( !dataset )
dataset = new Mihasher(256, 32); dataset = new Mihasher( 256, 32 );
if(descriptorsMat.rows >0) if( descriptorsMat.rows > 0 )
dataset->populate(descriptorsMat, dataset->populate( descriptorsMat, descriptorsMat.rows, descriptorsMat.cols );
descriptorsMat.rows,
descriptorsMat.cols);
descrInDS = descriptorsMat.rows; descrInDS = descriptorsMat.rows;
descriptorsMat.release(); descriptorsMat.release();
} }
/* clear dataset and internal data */ /* clear dataset and internal data */
void BinaryDescriptorMatcher::clear() void BinaryDescriptorMatcher::clear()
{ {
descriptorsMat.release(); descriptorsMat.release();
indexesMap.clear(); indexesMap.clear();
dataset = 0; dataset = 0;
nextAddedIndex = 0; nextAddedIndex = 0;
numImages = 0; numImages = 0;
descrInDS = 0; descrInDS = 0;
} }
/* retrieve Hamming distances */ /* retrieve Hamming distances */
void BinaryDescriptorMatcher::checkKDistances(UINT32 * numres, int k, std::vector<int> & k_distances, int row, int string_length) const void BinaryDescriptorMatcher::checkKDistances( UINT32 * numres, int k, std::vector<int> & k_distances, int row, int string_length ) const
{ {
int k_to_found = k; int k_to_found = k;
UINT32 * numres_tmp = numres + ((string_length+1) * row); UINT32 * numres_tmp = numres + ( ( string_length + 1 ) * row );
for(int j = 0; j<(string_length+1) && k_to_found > 0; j++) for ( int j = 0; j < ( string_length + 1 ) && k_to_found > 0; j++ )
{
if( ( * ( numres_tmp + j ) ) > 0 )
{ {
if((*(numres_tmp+j))>0) for ( int i = 0; i < ( * ( numres_tmp + j ) ) && k_to_found > 0; i++ )
{ {
for(int i = 0; i<(*(numres_tmp+j)) && k_to_found > 0; i++) k_distances.push_back( j );
{ k_to_found--;
k_distances.push_back(j); }
k_to_found--;
}
}
} }
}
} }
/* for every input descriptor, /* for every input descriptor,
find the best matching one (from one image to a set) */ find the best matching one (from one image to a set) */
void BinaryDescriptorMatcher::match( const Mat& queryDescriptors, void BinaryDescriptorMatcher::match( const Mat& queryDescriptors, std::vector<DMatch>& matches, const std::vector<Mat>& masks )
std::vector<DMatch>& matches,
const std::vector<Mat>& masks )
{ {
/* check data validity */ /* check data validity */
if(masks.size() !=0 && (int)masks.size() != numImages) if( masks.size() != 0 && (int) masks.size() != numImages )
{ {
std::cout << "Error: the number of images in dataset is " << std::cout << "Error: the number of images in dataset is " << numImages << " but match function received " << masks.size()
numImages << " but match function received " << << " masks. Program will be terminated" << std::endl;
masks.size() << " masks. Program will be terminated"
<< std::endl;
return; return;
} }
/* add new descriptors to dataset, if needed */ /* add new descriptors to dataset, if needed */
train(); train();
/* set number of requested matches to return for each query */ /* set number of requested matches to return for each query */
dataset->setK(1); dataset->setK( 1 );
/* prepare structures for query */ /* prepare structures for query */
UINT32 *results = new UINT32[queryDescriptors.rows]; UINT32 *results = new UINT32[queryDescriptors.rows];
UINT32 * numres = new UINT32[(256+1)*(queryDescriptors.rows)]; UINT32 * numres = new UINT32[ ( 256 + 1 ) * ( queryDescriptors.rows )];
/* execute query */ /* execute query */
dataset->batchquery(results, numres, queryDescriptors, dataset->batchquery( results, numres, queryDescriptors, queryDescriptors.rows, queryDescriptors.cols );
queryDescriptors.rows, queryDescriptors.cols);
/* compose matches */ /* compose matches */
for(int counter = 0; counter<queryDescriptors.rows; counter++) for ( int counter = 0; counter < queryDescriptors.rows; counter++ )
{
/* create a map iterator */
std::map<int, int>::iterator itup;
/* get info about original image of each returned descriptor */
itup = indexesMap.upper_bound( results[counter] - 1 );
itup--;
/* data validity check */
if( !masks.empty() && ( masks[itup->second].rows != queryDescriptors.rows || masks[itup->second].cols != 1 ) )
{
std::cout << "Error: mask " << itup->second << " in knnMatch function " << "should have " << queryDescriptors.rows << " and "
<< "1 column. Program will be terminated" << std::endl;
CV_Assert( false );
}
/* create a DMatch object if required by mask of if there is
no mask at all */
else if( masks.empty() || masks[itup->second].at<uchar>( counter ) != 0 )
{ {
/* create a map iterator */ std::vector<int> k_distances;
std::map<int, int>::iterator itup; checkKDistances( numres, 1, k_distances, counter, 256 );
/* get info about original image of each returned descriptor */
itup = indexesMap.upper_bound(results[counter] - 1);
itup--;
/* data validity check */
if(!masks.empty() && (masks[itup->second].rows != queryDescriptors.rows
|| masks[itup->second].cols !=1))
{
std::cout << "Error: mask " << itup->second << " in knnMatch function "
<< "should have " << queryDescriptors.rows << " and "
<< "1 column. Program will be terminated"
<< std::endl;
CV_Assert(false);
}
/* create a DMatch object if required by mask of if there is
no mask at all */
else if(masks.empty() || masks[itup->second].at<uchar>(counter) !=0)
{
std::vector<int> k_distances;
checkKDistances(numres, 1, k_distances, counter, 256);
DMatch dm;
dm.queryIdx = counter;
dm.trainIdx = results[counter] - 1;
dm.imgIdx = itup->second;
dm.distance = k_distances[0];
matches.push_back(dm);
}
DMatch dm;
dm.queryIdx = counter;
dm.trainIdx = results[counter] - 1;
dm.imgIdx = itup->second;
dm.distance = k_distances[0];
matches.push_back( dm );
} }
/* delete data */ }
delete results;
delete numres; /* delete data */
delete results;
delete numres;
} }
/* for every input descriptor, find the best matching one (for a pair of images) */ /* for every input descriptor, find the best matching one (for a pair of images) */
void BinaryDescriptorMatcher::match( const Mat& queryDescriptors, void BinaryDescriptorMatcher::match( const Mat& queryDescriptors, const Mat& trainDescriptors, std::vector<DMatch>& matches, const Mat& mask ) const
const Mat& trainDescriptors,
std::vector<DMatch>& matches,
const Mat& mask ) const
{ {
/* check data validity */ /* check data validity */
if(!mask.empty() && (mask.rows != queryDescriptors.rows && mask.cols != 1)) if( !mask.empty() && ( mask.rows != queryDescriptors.rows && mask.cols != 1 ) )
{ {
std::cout << "Error: input mask should have " << std::cout << "Error: input mask should have " << queryDescriptors.rows << " rows and 1 column. " << "Program will be terminated" << std::endl;
queryDescriptors.rows << " rows and 1 column. " <<
"Program will be terminated" << std::endl;
return; return;
} }
/* create a new mihasher object */ /* create a new mihasher object */
Mihasher *mh = new Mihasher(256, 32); Mihasher *mh = new Mihasher( 256, 32 );
/* populate mihasher */ /* populate mihasher */
cv::Mat copy = trainDescriptors.clone(); cv::Mat copy = trainDescriptors.clone();
mh->populate(copy, copy.rows, copy.cols); mh->populate( copy, copy.rows, copy.cols );
mh->setK(1); mh->setK( 1 );
/* prepare structures for query */ /* prepare structures for query */
UINT32 *results = new UINT32[queryDescriptors.rows]; UINT32 *results = new UINT32[queryDescriptors.rows];
UINT32 * numres = new UINT32[(256+1)*(queryDescriptors.rows)]; UINT32 * numres = new UINT32[ ( 256 + 1 ) * ( queryDescriptors.rows )];
/* execute query */ /* execute query */
mh->batchquery(results, numres, queryDescriptors, mh->batchquery( results, numres, queryDescriptors, queryDescriptors.rows, queryDescriptors.cols );
queryDescriptors.rows, queryDescriptors.cols);
/* compose matches */ /* compose matches */
for(int counter = 0; counter<queryDescriptors.rows; counter++) for ( int counter = 0; counter < queryDescriptors.rows; counter++ )
{
/* create a DMatch object if required by mask of if there is
no mask at all */
if( mask.empty() || ( !mask.empty() && mask.at<uchar>( counter ) != 0 ) )
{ {
/* create a DMatch object if required by mask of if there is std::vector<int> k_distances;
no mask at all */ checkKDistances( numres, 1, k_distances, counter, 256 );
if( mask.empty() || (!mask.empty() && mask.at<uchar>(counter)!=0))
{
std::vector<int> k_distances;
checkKDistances(numres, 1, k_distances, counter, 256);
DMatch dm; DMatch dm;
dm.queryIdx = counter; dm.queryIdx = counter;
dm.trainIdx = results[counter] - 1; dm.trainIdx = results[counter] - 1;
dm.imgIdx = 0; dm.imgIdx = 0;
dm.distance = k_distances[0]; dm.distance = k_distances[0];
matches.push_back(dm); matches.push_back( dm );
}
} }
}
/* delete data */ /* delete data */
delete mh; delete mh;
delete results; delete results;
delete numres; delete numres;
} }
/* for every input descriptor, /* for every input descriptor,
find the best k matching descriptors (for a pair of images) */ find the best k matching descriptors (for a pair of images) */
void BinaryDescriptorMatcher::knnMatch( const Mat& queryDescriptors, void BinaryDescriptorMatcher::knnMatch( const Mat& queryDescriptors, const Mat& trainDescriptors, std::vector<std::vector<DMatch> >& matches, int k,
const Mat& trainDescriptors, const Mat& mask, bool compactResult ) const
std::vector<std::vector<DMatch> >& matches,
int k,
const Mat& mask,
bool compactResult ) const
{ {
/* check data validity */ /* check data validity */
if(!mask.empty() && (mask.rows != queryDescriptors.rows || mask.cols != 1)) if( !mask.empty() && ( mask.rows != queryDescriptors.rows || mask.cols != 1 ) )
{ {
std::cout << "Error: input mask should have " << std::cout << "Error: input mask should have " << queryDescriptors.rows << " rows and 1 column. " << "Program will be terminated" << std::endl;
queryDescriptors.rows << " rows and 1 column. " <<
"Program will be terminated" << std::endl;
return;
}
/* create a new mihasher object */ return;
Mihasher *mh = new Mihasher(256, 32); }
/* populate mihasher */ /* create a new mihasher object */
cv::Mat copy = trainDescriptors.clone(); Mihasher *mh = new Mihasher( 256, 32 );
mh->populate(copy, copy.rows, copy.cols);
/* set K */ /* populate mihasher */
mh->setK(k); cv::Mat copy = trainDescriptors.clone();
mh->populate( copy, copy.rows, copy.cols );
/* prepare structures for query */ /* set K */
UINT32 *results = new UINT32[k*queryDescriptors.rows]; mh->setK( k );
UINT32 * numres = new UINT32[(256+1)*(queryDescriptors.rows)];
/* execute query */ /* prepare structures for query */
mh->batchquery(results, numres, queryDescriptors, UINT32 *results = new UINT32[k * queryDescriptors.rows];
queryDescriptors.rows, queryDescriptors.cols); UINT32 * numres = new UINT32[ ( 256 + 1 ) * ( queryDescriptors.rows )];
/* compose matches */ /* execute query */
int index = 0; mh->batchquery( results, numres, queryDescriptors, queryDescriptors.rows, queryDescriptors.cols );
for(int counter = 0; counter<queryDescriptors.rows; counter++)
{
/* initialize a vector of matches */
std::vector<DMatch> tempVec;
/* chech whether query should be ignored */ /* compose matches */
if(!mask.empty() && mask.at<uchar>(counter) == 0) int index = 0;
{ for ( int counter = 0; counter < queryDescriptors.rows; counter++ )
/* if compact result is not requested, add an empty vector */ {
if(!compactResult) /* initialize a vector of matches */
matches.push_back(tempVec); std::vector<DMatch> tempVec;
}
/* query matches must be considered */ /* chech whether query should be ignored */
else if( !mask.empty() && mask.at<uchar>( counter ) == 0 )
{ {
std::vector<int> k_distances; /* if compact result is not requested, add an empty vector */
checkKDistances(numres, k, k_distances, counter, 256); if( !compactResult )
for(int j = index; j<index+k; j++) matches.push_back( tempVec );
{ }
DMatch dm;
dm.queryIdx = counter;
dm.trainIdx = results[j] - 1;
dm.imgIdx = 0;
dm.distance = k_distances[j-index];
tempVec.push_back(dm);
}
matches.push_back(tempVec);
}
/* increment pointer */ /* query matches must be considered */
index += k; else
{
std::vector<int> k_distances;
checkKDistances( numres, k, k_distances, counter, 256 );
for ( int j = index; j < index + k; j++ )
{
DMatch dm;
dm.queryIdx = counter;
dm.trainIdx = results[j] - 1;
dm.imgIdx = 0;
dm.distance = k_distances[j - index];
tempVec.push_back( dm );
}
matches.push_back( tempVec );
} }
/* delete data */ /* increment pointer */
delete mh; index += k;
delete results; }
delete numres;
/* delete data */
delete mh;
delete results;
delete numres;
} }
/* for every input descriptor, /* for every input descriptor,
find the best k matching descriptors (from one image to a set) */ find the best k matching descriptors (from one image to a set) */
void BinaryDescriptorMatcher::knnMatch( const Mat& queryDescriptors, void BinaryDescriptorMatcher::knnMatch( const Mat& queryDescriptors, std::vector<std::vector<DMatch> >& matches, int k, const std::vector<Mat>& masks,
std::vector<std::vector<DMatch> >& matches,
int k,
const std::vector<Mat>& masks,
bool compactResult ) bool compactResult )
{ {
/* check data validity */ /* check data validity */
if(masks.size() !=0 && (int)masks.size() != numImages) if( masks.size() != 0 && (int) masks.size() != numImages )
{ {
std::cout << "Error: the number of images in dataset is " << std::cout << "Error: the number of images in dataset is " << numImages << " but knnMatch function received " << masks.size()
numImages << " but knnMatch function received " << << " masks. Program will be terminated" << std::endl;
masks.size() << " masks. Program will be terminated"
<< std::endl;
return; return;
} }
/* add new descriptors to dataset, if needed */ /* add new descriptors to dataset, if needed */
train(); train();
/* set number of requested matches to return for each query */ /* set number of requested matches to return for each query */
dataset->setK(k); dataset->setK( k );
/* prepare structures for query */ /* prepare structures for query */
UINT32 *results = new UINT32[k*queryDescriptors.rows]; UINT32 *results = new UINT32[k * queryDescriptors.rows];
UINT32 * numres = new UINT32[(256+1)*(queryDescriptors.rows)]; UINT32 * numres = new UINT32[ ( 256 + 1 ) * ( queryDescriptors.rows )];
/* execute query */ /* execute query */
dataset->batchquery(results, numres, queryDescriptors, dataset->batchquery( results, numres, queryDescriptors, queryDescriptors.rows, queryDescriptors.cols );
queryDescriptors.rows, queryDescriptors.cols);
/* compose matches */ /* compose matches */
int index = 0; int index = 0;
for(int counter = 0; counter<queryDescriptors.rows; counter++) for ( int counter = 0; counter < queryDescriptors.rows; counter++ )
{
/* create a void vector of matches */
std::vector<DMatch> tempVector;
/* loop over k results returned for every query */
for ( int j = index; j < index + k; j++ )
{ {
/* create a void vector of matches */ /* retrieve which image returned index refers to */
std::vector<DMatch> tempVector; int currentIndex = results[j] - 1;
std::map<int, int>::iterator itup;
itup = indexesMap.upper_bound( currentIndex );
itup--;
/* data validity check */
if( !masks.empty() && ( masks[itup->second].rows != queryDescriptors.rows || masks[itup->second].cols != 1 ) )
{
std::cout << "Error: mask " << itup->second << " in knnMatch function " << "should have " << queryDescriptors.rows << " and "
<< "1 column. Program will be terminated" << std::endl;
/* loop over k results returned for every query */ return;
for(int j = index; j<index+k; j++) }
{
/* retrieve which image returned index refers to */ /* decide if, according to relative mask, returned match should be
int currentIndex = results[j]-1; considered */
std::map<int, int>::iterator itup; else if( masks.size() == 0 || masks[itup->second].at<uchar>( counter ) != 0 )
itup = indexesMap.upper_bound(currentIndex); {
itup--; std::vector<int> k_distances;
checkKDistances( numres, k, k_distances, counter, 256 );
/* data validity check */
if(!masks.empty() && (masks[itup->second].rows != queryDescriptors.rows
|| masks[itup->second].cols != 1))
{
std::cout << "Error: mask " << itup->second << " in knnMatch function "
<< "should have " << queryDescriptors.rows << " and "
<< "1 column. Program will be terminated"
<< std::endl;
return;
}
/* decide if, according to relative mask, returned match should be
considered */
else if(masks.size() == 0 || masks[itup->second].at<uchar>(counter) != 0)
{
std::vector<int> k_distances;
checkKDistances(numres, k, k_distances, counter, 256);
DMatch dm;
dm.queryIdx = counter;
dm.trainIdx = results[j] - 1;
dm.imgIdx = itup->second;
dm.distance = k_distances[j-index];
tempVector.push_back(dm);
}
}
/* decide whether temporary vector should be saved */ DMatch dm;
if((tempVector.size() == 0 && !compactResult) || tempVector.size()>0) dm.queryIdx = counter;
matches.push_back(tempVector); dm.trainIdx = results[j] - 1;
dm.imgIdx = itup->second;
dm.distance = k_distances[j - index];
/* increment pointer */ tempVector.push_back( dm );
index += k; }
} }
/* delete data */ /* decide whether temporary vector should be saved */
delete results; if( ( tempVector.size() == 0 && !compactResult ) || tempVector.size() > 0 )
delete numres; matches.push_back( tempVector );
/* increment pointer */
index += k;
}
/* delete data */
delete results;
delete numres;
} }
/* for every input desciptor, find all the ones falling in a /* for every input desciptor, find all the ones falling in a
certaing matching radius (for a pair of images) */ certaing matching radius (for a pair of images) */
void BinaryDescriptorMatcher::radiusMatch( const Mat& queryDescriptors, void BinaryDescriptorMatcher::radiusMatch( const Mat& queryDescriptors, const Mat& trainDescriptors, std::vector<std::vector<DMatch> >& matches,
const Mat& trainDescriptors, float maxDistance, const Mat& mask, bool compactResult ) const
std::vector<std::vector<DMatch> >& matches,
float maxDistance,
const Mat& mask,
bool compactResult ) const
{ {
/* check data validity */ /* check data validity */
if(!mask.empty() && (mask.rows != queryDescriptors.rows && mask.cols != 1)) if( !mask.empty() && ( mask.rows != queryDescriptors.rows && mask.cols != 1 ) )
{ {
std::cout << "Error: input mask should have " << std::cout << "Error: input mask should have " << queryDescriptors.rows << " rows and 1 column. " << "Program will be terminated" << std::endl;
queryDescriptors.rows << " rows and 1 column. " <<
"Program will be terminated" << std::endl;
return; return;
} }
/* create a new Mihasher */ /* create a new Mihasher */
Mihasher* mh = new Mihasher(256, 32); Mihasher* mh = new Mihasher( 256, 32 );
/* populate Mihasher */ /* populate Mihasher */
Mat copy = queryDescriptors.clone(); Mat copy = queryDescriptors.clone();
mh->populate(copy, copy.rows, copy.cols); mh->populate( copy, copy.rows, copy.cols );
/* set K */ /* set K */
mh->setK(trainDescriptors.rows); mh->setK( trainDescriptors.rows );
/* prepare structures for query */ /* prepare structures for query */
UINT32 *results = new UINT32[trainDescriptors.rows*queryDescriptors.rows]; UINT32 *results = new UINT32[trainDescriptors.rows * queryDescriptors.rows];
UINT32 * numres = new UINT32[(256+1)*(queryDescriptors.rows)]; UINT32 * numres = new UINT32[ ( 256 + 1 ) * ( queryDescriptors.rows )];
/* execute query */ /* execute query */
mh->batchquery(results, numres, queryDescriptors, mh->batchquery( results, numres, queryDescriptors, queryDescriptors.rows, queryDescriptors.cols );
queryDescriptors.rows, queryDescriptors.cols);
/* compose matches */ /* compose matches */
int index = 0; int index = 0;
for (int i = 0; i<queryDescriptors.rows; i++) for ( int i = 0; i < queryDescriptors.rows; i++ )
{ {
std::vector<int> k_distances; std::vector<int> k_distances;
checkKDistances(numres, trainDescriptors.rows, k_distances, i, 256); checkKDistances( numres, trainDescriptors.rows, k_distances, i, 256 );
std::vector<DMatch> tempVector; std::vector<DMatch> tempVector;
for(int j = 0; j<index+trainDescriptors.rows; j++) for ( int j = 0; j < index + trainDescriptors.rows; j++ )
{
if( numres[j] <= maxDistance )
{
if( mask.empty() || mask.at<uchar>( i ) != 0 )
{ {
if(numres[j] <= maxDistance) DMatch dm;
{ dm.queryIdx = i;
if(mask.empty() || mask.at<uchar>(i) != 0){ dm.trainIdx = results[j] - 1;
DMatch dm; dm.imgIdx = 0;
dm.queryIdx = i; dm.distance = k_distances[j - index];
dm.trainIdx = results[j] - 1;
dm.imgIdx = 0; tempVector.push_back( dm );
dm.distance = k_distances[j-index];
tempVector.push_back(dm);
}
}
} }
}
}
/* decide whether temporary vector should be saved */ /* decide whether temporary vector should be saved */
if((tempVector.size() == 0 && !compactResult) || tempVector.size()>0) if( ( tempVector.size() == 0 && !compactResult ) || tempVector.size() > 0 )
matches.push_back(tempVector); matches.push_back( tempVector );
/* increment pointer */ /* increment pointer */
index += trainDescriptors.rows; index += trainDescriptors.rows;
} }
/* delete data */ /* delete data */
delete mh; delete mh;
delete results; delete results;
delete numres; delete numres;
} }
/* for every input desciptor, find all the ones falling in a /* for every input desciptor, find all the ones falling in a
certaing atching radius (from one image to a set) */ certaing atching radius (from one image to a set) */
void BinaryDescriptorMatcher::radiusMatch( const Mat& queryDescriptors, void BinaryDescriptorMatcher::radiusMatch( const Mat& queryDescriptors, std::vector<std::vector<DMatch> >& matches, float maxDistance,
std::vector<std::vector<DMatch> >& matches, const std::vector<Mat>& masks, bool compactResult )
float maxDistance,
const std::vector<Mat>& masks,
bool compactResult )
{ {
/* check data validity */ /* check data validity */
if(masks.size() !=0 && (int)masks.size() != numImages) if( masks.size() != 0 && (int) masks.size() != numImages )
{ {
std::cout << "Error: the number of images in dataset is " << std::cout << "Error: the number of images in dataset is " << numImages << " but radiusMatch function received " << masks.size()
numImages << " but radiusMatch function received " << << " masks. Program will be terminated" << std::endl;
masks.size() << " masks. Program will be terminated"
<< std::endl;
return; return;
} }
/* populate dataset */ /* populate dataset */
train(); train();
/* set K */ /* set K */
dataset->setK(descrInDS); dataset->setK( descrInDS );
/* prepare structures for query */ /* prepare structures for query */
UINT32 *results = new UINT32[descrInDS*queryDescriptors.rows]; UINT32 *results = new UINT32[descrInDS * queryDescriptors.rows];
UINT32 * numres = new UINT32[(256+1)*(queryDescriptors.rows)]; UINT32 * numres = new UINT32[ ( 256 + 1 ) * ( queryDescriptors.rows )];
/* execute query */ /* execute query */
dataset->batchquery(results, numres, queryDescriptors, dataset->batchquery( results, numres, queryDescriptors, queryDescriptors.rows, queryDescriptors.cols );
queryDescriptors.rows, queryDescriptors.cols);
/* compose matches */ /* compose matches */
int index = 0; int index = 0;
for(int counter = 0; counter<queryDescriptors.rows; counter++) for ( int counter = 0; counter < queryDescriptors.rows; counter++ )
{
std::vector<DMatch> tempVector;
for ( int j = index; j < index + descrInDS; j++ )
{ {
std::vector<DMatch> tempVector; std::vector<int> k_distances;
for(int j = index; j<index+descrInDS; j++) checkKDistances( numres, descrInDS, k_distances, counter, 256 );
if( k_distances[j - index] <= maxDistance )
{
int currentIndex = results[j] - 1;
std::map<int, int>::iterator itup;
itup = indexesMap.upper_bound( currentIndex );
itup--;
/* data validity check */
if( !masks.empty() && ( masks[itup->second].rows != queryDescriptors.rows || masks[itup->second].cols != 1 ) )
{ {
std::vector<int> k_distances; std::cout << "Error: mask " << itup->second << " in radiusMatch function " << "should have " << queryDescriptors.rows << " and "
checkKDistances(numres, descrInDS, k_distances, counter, 256); << "1 column. Program will be terminated" << std::endl;
if(k_distances[j-index] <= maxDistance) return;
{
int currentIndex = results[j] - 1;
std::map<int, int>::iterator itup;
itup = indexesMap.upper_bound(currentIndex);
itup--;
/* data validity check */
if(!masks.empty() && (masks[itup->second].rows != queryDescriptors.rows
|| masks[itup->second].cols !=1))
{
std::cout << "Error: mask " << itup->second << " in radiusMatch function "
<< "should have " << queryDescriptors.rows << " and "
<< "1 column. Program will be terminated"
<< std::endl;
return;
}
/* add match if necessary */
else if(masks.empty() || masks[itup->second].at<uchar>(counter) !=0)
{
DMatch dm;
dm.queryIdx = counter;
dm.trainIdx = results[j] - 1;
dm.imgIdx = itup->second;
dm.distance = k_distances[j-index];
tempVector.push_back(dm);
}
}
} }
/* decide whether temporary vector should be saved */ /* add match if necessary */
if((tempVector.size() == 0 && !compactResult) || tempVector.size()>0) else if( masks.empty() || masks[itup->second].at<uchar>( counter ) != 0 )
matches.push_back(tempVector); {
DMatch dm;
dm.queryIdx = counter;
dm.trainIdx = results[j] - 1;
dm.imgIdx = itup->second;
dm.distance = k_distances[j - index];
/* increment pointer */ tempVector.push_back( dm );
index += descrInDS; }
}
} }
/* delete data */ /* decide whether temporary vector should be saved */
delete results; if( ( tempVector.size() == 0 && !compactResult ) || tempVector.size() > 0 )
delete numres; matches.push_back( tempVector );
/* increment pointer */
index += descrInDS;
}
/* delete data */
delete results;
delete numres;
} }

@ -45,56 +45,56 @@
/* constructor */ /* constructor */
BucketGroup::BucketGroup() BucketGroup::BucketGroup()
{ {
empty = 0; empty = 0;
group = NULL; group = NULL;
} }
/* destructor */ /* destructor */
BucketGroup::~BucketGroup() BucketGroup::~BucketGroup()
{ {
if (group != NULL) if( group != NULL )
delete group; delete group;
} }
/* insert data into the bucket */ /* insert data into the bucket */
void BucketGroup::insert(int subindex, UINT32 data) void BucketGroup::insert( int subindex, UINT32 data )
{ {
if (group == NULL) if( group == NULL )
{ {
group = new Array32(); group = new Array32();
group->push(0); group->push( 0 );
} }
UINT32 lowerbits = ((UINT32)1 << subindex) - 1; UINT32 lowerbits = ( (UINT32) 1 << subindex ) - 1;
int end = popcnt(empty & lowerbits); int end = popcnt( empty & lowerbits );
if (!(empty & ((UINT32)1 << subindex))) if( ! ( empty & ( (UINT32) 1 << subindex ) ) )
{ {
group->insert(end, group->arr[end+2]); group->insert( end, group->arr[end + 2] );
empty |= (UINT32)1 << subindex; empty |= (UINT32) 1 << subindex;
} }
int totones = popcnt(empty); int totones = popcnt( empty );
group->insert(totones+1+group->arr[2+end+1], data); group->insert( totones + 1 + group->arr[2 + end + 1], data );
for (int i=end+1; i<totones+1; i++) for ( int i = end + 1; i < totones + 1; i++ )
group->arr[2+i]++; group->arr[2 + i]++;
} }
/* perform a query to the bucket */ /* perform a query to the bucket */
UINT32* BucketGroup::query(int subindex, int *size) UINT32* BucketGroup::query( int subindex, int *size )
{ {
if (empty & ((UINT32)1 << subindex)) if( empty & ( (UINT32) 1 << subindex ) )
{ {
UINT32 lowerbits = ((UINT32)1 << subindex) - 1; UINT32 lowerbits = ( (UINT32) 1 << subindex ) - 1;
int end = popcnt(empty & lowerbits); int end = popcnt( empty & lowerbits );
int totones = popcnt(empty); int totones = popcnt( empty );
*size = group->arr[2+end+1]-group->arr[2+end]; *size = group->arr[2 + end + 1] - group->arr[2 + end];
return group->arr + 2 + totones+1 + group->arr[2+end]; return group->arr + 2 + totones + 1 + group->arr[2 + end];
} }
else else
{ {
*size = 0; *size = 0;
return NULL; return NULL;
} }
} }

@ -43,141 +43,129 @@
namespace cv namespace cv
{ {
/* draw matches between two images */ /* draw matches between two images */
void drawLineMatches( const Mat& img1, const std::vector<KeyLine>& keylines1, void drawLineMatches( const Mat& img1, const std::vector<KeyLine>& keylines1, const Mat& img2, const std::vector<KeyLine>& keylines2,
const Mat& img2, const std::vector<KeyLine>& keylines2, const std::vector<DMatch>& matches1to2, Mat& outImg, const Scalar& matchColor, const Scalar& singleLineColor,
const std::vector<DMatch>& matches1to2,
Mat& outImg, const Scalar& matchColor,
const Scalar& singleLineColor,
const std::vector<char>& matchesMask, int flags ) const std::vector<char>& matchesMask, int flags )
{
/* initialize output matrix (if necessary) */
if( flags == DrawLinesMatchesFlags::DEFAULT )
{
/* check how many rows are necessary for output matrix */
int totalRows = img1.rows >= img2.rows ? img1.rows : img2.rows;
/* initialize output matrix */
outImg = Mat::zeros( totalRows, img1.cols + img2.cols, img1.type() );
}
/* initialize random seed: */
srand( time( NULL ) );
Scalar singleLineColorRGB;
if( singleLineColor == Scalar::all( -1 ) )
{
int R = ( rand() % (int) ( 255 + 1 ) );
int G = ( rand() % (int) ( 255 + 1 ) );
int B = ( rand() % (int) ( 255 + 1 ) );
singleLineColorRGB = Scalar( R, G, B );
}
else
singleLineColorRGB = singleLineColor;
/* copy input images to output images */
Mat roi_left( outImg, Rect( 0, 0, img1.cols, img1.rows ) );
Mat roi_right( outImg, Rect( img1.cols, 0, img2.cols, img2.rows ) );
img1.copyTo( roi_left );
img2.copyTo( roi_right );
/* get columns offset */
int offset = img1.cols;
/* if requested, draw lines from both images */
if( flags != DrawLinesMatchesFlags::NOT_DRAW_SINGLE_LINES )
{
for ( size_t i = 0; i < keylines1.size(); i++ )
{
KeyLine k1 = keylines1[i];
line( outImg, Point( k1.startPointX, k1.startPointY ), Point( k1.endPointX, k1.endPointY ), singleLineColorRGB, 2 );
}
for ( size_t j = 0; j < keylines2.size(); j++ )
{
KeyLine k2 = keylines2[j];
line( outImg, Point( k2.startPointX + offset, k2.startPointY ), Point( k2.endPointX + offset, k2.endPointY ), singleLineColorRGB, 2 );
}
}
/* draw matches */
for ( size_t counter = 0; counter < matches1to2.size(); counter++ )
{
if( matchesMask[counter] != 0 )
{ {
DMatch dm = matches1to2[counter];
KeyLine left = keylines1[dm.queryIdx];
KeyLine right = keylines2[dm.trainIdx];
Scalar matchColorRGB;
if( matchColor == Scalar::all( -1 ) )
{
int R = ( rand() % (int) ( 255 + 1 ) );
int G = ( rand() % (int) ( 255 + 1 ) );
int B = ( rand() % (int) ( 255 + 1 ) );
matchColorRGB = Scalar( R, G, B );
if( singleLineColor == Scalar::all( -1 ) )
singleLineColorRGB = matchColorRGB;
}
else
matchColorRGB = matchColor;
/* draw lines if necessary */
line( outImg, Point( left.startPointX, left.startPointY ), Point( left.endPointX, left.endPointY ), singleLineColorRGB, 2 );
line( outImg, Point( right.startPointX + offset, right.startPointY ), Point( right.endPointX + offset, right.endPointY ), singleLineColorRGB,
2 );
/* initialize output matrix (if necessary) */ /* link correspondent lines */
if(flags == DrawLinesMatchesFlags::DEFAULT) line( outImg, Point( left.startPointX, left.startPointY ), Point( right.startPointX + offset, right.startPointY ), matchColorRGB, 1 );
{
/* check how many rows are necessary for output matrix */
int totalRows = img1.rows >= img2.rows?img1.rows:img2.rows;
/* initialize output matrix */
outImg = Mat::zeros(totalRows, img1.cols+img2.cols, img1.type());
}
/* initialize random seed: */
srand (time(NULL));
Scalar singleLineColorRGB;
if(singleLineColor == Scalar::all(-1))
{
int R = (rand() % (int)(255 + 1));
int G = (rand() % (int)(255 + 1));
int B = (rand() % (int)(255 + 1));
singleLineColorRGB = Scalar(R, G, B);
}
else
singleLineColorRGB = singleLineColor;
/* copy input images to output images */
Mat roi_left(outImg, Rect(0,0,img1.cols,img1.rows));
Mat roi_right(outImg, Rect(img1.cols,0,img2.cols,img2.rows));
img1.copyTo(roi_left);
img2.copyTo(roi_right);
/* get columns offset */
int offset = img1.cols;
/* if requested, draw lines from both images */
if(flags != DrawLinesMatchesFlags::NOT_DRAW_SINGLE_LINES)
{
for(size_t i = 0; i<keylines1.size(); i++)
{
KeyLine k1 = keylines1[i];
line(outImg,Point(k1.startPointX, k1.startPointY),
Point(k1.endPointX, k1.endPointY), singleLineColorRGB, 2);
}
for(size_t j = 0; j<keylines2.size(); j++)
{
KeyLine k2 = keylines2[j];
line(outImg,Point(k2.startPointX+offset, k2.startPointY),
Point(k2.endPointX+offset, k2.endPointY), singleLineColorRGB, 2);
}
}
/* draw matches */
for(size_t counter = 0; counter<matches1to2.size(); counter++)
{
if(matchesMask[counter] != 0)
{
DMatch dm = matches1to2[counter];
KeyLine left = keylines1[dm.queryIdx];
KeyLine right = keylines2[dm.trainIdx];
Scalar matchColorRGB;
if(matchColor == Scalar::all(-1))
{
int R = (rand() % (int)(255 + 1));
int G = (rand() % (int)(255 + 1));
int B = (rand() % (int)(255 + 1));
matchColorRGB = Scalar(R, G, B);
if(singleLineColor == Scalar::all(-1))
singleLineColorRGB = matchColorRGB;
}
else
matchColorRGB = matchColor;
/* draw lines if necessary */
line(outImg, Point(left.startPointX, left.startPointY),
Point(left.endPointX, left.endPointY), singleLineColorRGB, 2);
line(outImg, Point(right.startPointX+offset, right.startPointY),
Point(right.endPointX+offset, right.endPointY), singleLineColorRGB, 2);
/* link correspondent lines */
line(outImg, Point(left.startPointX, left.startPointY),
Point(right.startPointX+offset, right.startPointY), matchColorRGB, 1);
}
}
} }
}
}
/* draw extracted lines on original image */ /* draw extracted lines on original image */
void drawKeylines( const Mat& image, void drawKeylines( const Mat& image, const std::vector<KeyLine>& keylines, Mat& outImage, const Scalar& color, int flags )
const std::vector<KeyLine>& keylines, {
Mat& outImage, if( flags == DrawLinesMatchesFlags::DEFAULT )
const Scalar& color, outImage = image.clone();
int flags )
for ( size_t i = 0; i < keylines.size(); i++ )
{
/* decide lines' color */
Scalar lineColor;
if( color != Scalar::all( -1 ) )
{ {
if(flags == DrawLinesMatchesFlags::DEFAULT) int R = ( rand() % (int) ( 255 + 1 ) );
outImage = image.clone(); int G = ( rand() % (int) ( 255 + 1 ) );
int B = ( rand() % (int) ( 255 + 1 ) );
for(size_t i = 0; i<keylines.size(); i++)
{ lineColor = Scalar( R, G, B );
/* decide lines' color */
Scalar lineColor;
if(color != Scalar::all(-1))
{
int R = (rand() % (int)(255 + 1));
int G = (rand() % (int)(255 + 1));
int B = (rand() % (int)(255 + 1));
lineColor = Scalar(R, G, B);
}
else
lineColor = color;
/* get line */
KeyLine k = keylines[i];
/* draw line */
line(outImage, Point(k.startPointX, k.startPointY),
Point(k.endPointX, k.endPointY), lineColor, 1);
}
} }
else
lineColor = color;
/* get line */
KeyLine k = keylines[i];
/* draw line */
line( outImage, Point( k.startPointX, k.startPointY ), Point( k.endPointX, k.endPointY ), lineColor, 1 );
}
}
} }

@ -44,10 +44,10 @@
namespace cv namespace cv
{ {
CV_INIT_ALGORITHM(BinaryDescriptor, "BINARY.DESCRIPTOR",); CV_INIT_ALGORITHM( BinaryDescriptor, "BINARY.DESCRIPTOR", );
CV_INIT_ALGORITHM(BinaryDescriptorMatcher, "BINARY.DESCRIPTOR.MATCHER",); CV_INIT_ALGORITHM( BinaryDescriptorMatcher, "BINARY.DESCRIPTOR.MATCHER", );
bool initModule_line_descriptor(void) bool initModule_line_descriptor( void )
{ {
bool all = true; bool all = true;
all &= !BinaryDescriptor_info_auto.name().empty(); all &= !BinaryDescriptor_info_auto.name().empty();

@ -42,228 +42,228 @@
#include "precomp.hpp" #include "precomp.hpp"
/* execute a batch query */ /* execute a batch query */
void Mihasher::batchquery(UINT32 * results, UINT32 *numres, const cv::Mat & queries, UINT32 numq, int dim1queries) void Mihasher::batchquery( UINT32 * results, UINT32 *numres, const cv::Mat & queries, UINT32 numq, int dim1queries )
{ {
/* create and initialize a bitarray */ /* create and initialize a bitarray */
counter = new bitarray; counter = new bitarray;
counter->init(N); counter->init( N );
UINT32 *res = new UINT32[K*(D+1)]; UINT32 *res = new UINT32[K * ( D + 1 )];
UINT64 *chunks = new UINT64[m]; UINT64 *chunks = new UINT64[m];
UINT32 * presults = results; UINT32 * presults = results;
UINT32 *pnumres = numres; UINT32 *pnumres = numres;
/* make a copy of input queries */ /* make a copy of input queries */
cv::Mat queries_clone = queries.clone(); cv::Mat queries_clone = queries.clone();
/* set a pointer to first query (row) */ /* set a pointer to first query (row) */
UINT8 *pq = queries_clone.ptr(); UINT8 *pq = queries_clone.ptr();
/* loop over number of descriptors */ /* loop over number of descriptors */
for (size_t i=0; i<numq; i++) { for ( size_t i = 0; i < numq; i++ )
/* for every descriptor, query database */ {
query(presults, pnumres, pq, chunks, res); /* for every descriptor, query database */
query( presults, pnumres, pq, chunks, res );
/* move pointer to write next K indeces */ /* move pointer to write next K indeces */
presults += K; presults += K;
pnumres += B+1; pnumres += B + 1;
/* move forward pointer to current row in descriptors matrix */ /* move forward pointer to current row in descriptors matrix */
pq += dim1queries; pq += dim1queries;
} }
delete [] res; delete[] res;
delete [] chunks; delete[] chunks;
delete counter; delete counter;
} }
/* execute a single query */ /* execute a single query */
void Mihasher::query(UINT32* results, UINT32* numres, void Mihasher::query( UINT32* results, UINT32* numres, UINT8 * Query, UINT64 *chunks, UINT32 *res )
UINT8 * Query, UINT64 *chunks, UINT32 *res)
{ {
/* if K == 0 that means we want everything to be processed. /* if K == 0 that means we want everything to be processed.
So maxres = N in that case. Otherwise K limits the results processed */ So maxres = N in that case. Otherwise K limits the results processed */
UINT32 maxres = K ? K : N; UINT32 maxres = K ? K : N;
/* number of results so far obtained (up to a distance of s per chunk) */
UINT32 n = 0;
/* number of candidates tested with full codes (not counting duplicates) */ /* number of results so far obtained (up to a distance of s per chunk) */
UINT32 nc = 0; UINT32 n = 0;
/* counting everything retrieved (duplicates are counted multiple times) /* number of candidates tested with full codes (not counting duplicates) */
number of lookups (and xors) */ UINT32 nc = 0;
UINT32 nl = 0;
UINT32 nd = 0; /* counting everything retrieved (duplicates are counted multiple times)
UINT32 *arr; number of lookups (and xors) */
int size = 0; UINT32 nl = 0;
UINT32 index;
int hammd;
UINT32 nd = 0;
UINT32 *arr;
int size = 0;
UINT32 index;
int hammd;
counter->erase(); counter->erase();
memset(numres, 0, (B+1)*sizeof(*numres)); memset( numres, 0, ( B + 1 ) * sizeof ( *numres ) );
split(chunks, Query, m, mplus, b); split( chunks, Query, m, mplus, b );
/* the growing search radius per substring */ /* the growing search radius per substring */
int s; int s;
/* current b: for the first mplus substrings it is b, for the rest it is (b-1) */ /* current b: for the first mplus substrings it is b, for the rest it is (b-1) */
int curb = b; int curb = b;
for (s = 0; s <= d && n < maxres; s++) for ( s = 0; s <= d && n < maxres; s++ )
{
for ( int k = 0; k < m; k++ )
{ {
for (int k=0; k<m; k++) { if( k < mplus )
if (k < mplus) curb = b;
curb = b; else
else curb = b - 1;
curb = b-1; UINT64 chunksk = chunks[k];
UINT64 chunksk = chunks[k]; /* number of bit-strings with s number of 1s */
/* number of bit-strings with s number of 1s */ nl += xornum[s + 1] - xornum[s];
nl += xornum[s+1] - xornum[s];
/* the bit-string with s number of 1s */
/* the bit-string with s number of 1s */ UINT64 bitstr = 0;
UINT64 bitstr = 0; for ( int i = 0; i < s; i++ )
for (int i=0; i<s; i++) /* power[i] stores the location of the i'th 1 */
/* power[i] stores the location of the i'th 1 */ power[i] = i;
power[i] = i; /* used for stopping criterion (location of (s+1)th 1) */
/* used for stopping criterion (location of (s+1)th 1) */ power[s] = curb + 1;
power[s] = curb+1;
/* bit determines the 1 that should be moving to the left */
/* bit determines the 1 that should be moving to the left */ int bit = s - 1;
int bit = s-1;
/* start from the left-most 1, and move it to the left until
/* start from the left-most 1, and move it to the left until it touches another one */
it touches another one */
/* the loop for changing bitstr */
/* the loop for changing bitstr */ while ( true )
while (true) {
if( bit != -1 )
{
bitstr ^= ( power[bit] == bit ) ? (UINT64) 1 << power[bit] : (UINT64) 3 << ( power[bit] - 1 );
power[bit]++;
bit--;
}
else
{ /* bit == -1 */
/* the binary code bitstr is available for processing */
arr = H[k].query( chunksk ^ bitstr, &size ); // lookup
if( size )
{ /* the corresponding bucket is not empty */
nd += size;
for ( int c = 0; c < size; c++ )
{ {
if (bit != -1) index = arr[c];
{ if( !counter->get( index ) )
bitstr ^= (power[bit] == bit) ? (UINT64)1 << power[bit] : (UINT64)3 << (power[bit]-1); { /* if it is not a duplicate */
power[bit]++; counter->set( index );
bit--; hammd = match( codes.ptr() + (UINT64) index * ( B_over_8 ), Query, B_over_8 );
}
nc++;
else if( hammd <= D && numres[hammd] < maxres )
{ /* bit == -1 */ res[hammd * K + numres[hammd]] = index + 1;
/* the binary code bitstr is available for processing */
arr = H[k].query(chunksk ^ bitstr, &size); // lookup numres[hammd]++;
if (size) }
{ /* the corresponding bucket is not empty */
nd += size;
for (int c = 0; c < size; c++)
{
index = arr[c];
if (!counter->get(index))
{ /* if it is not a duplicate */
counter->set(index);
hammd = match(codes.ptr() + (UINT64)index*(B_over_8), Query, B_over_8);
nc++;
if (hammd <= D && numres[hammd] < maxres)
res[hammd * K + numres[hammd]] = index+1;
numres[hammd]++;
}
}
}
/* end of processing */
while (++bit < s && power[bit] == power[bit+1]-1) {
bitstr ^= (UINT64)1 << (power[bit]-1);
power[bit] = bit;
}
if (bit == s)
break;
}
} }
}
n = n + numres[s*m+k];
if (n >= maxres) /* end of processing */
while ( ++bit < s && power[bit] == power[bit + 1] - 1 )
{
bitstr ^= (UINT64) 1 << ( power[bit] - 1 );
power[bit] = bit;
}
if( bit == s )
break; break;
} }
} }
n = 0; n = n + numres[s * m + k];
for (s = 0; s <= D && (int)n < K; s++ ) if( n >= maxres )
{ break;
for (int c = 0; c < (int)numres[s] && (int)n < K; c++)
results[n++] = res[s*K + c];
} }
}
n = 0;
for ( s = 0; s <= D && (int) n < K; s++ )
{
for ( int c = 0; c < (int) numres[s] && (int) n < K; c++ )
results[n++] = res[s * K + c];
}
} }
/* constructor 2 */ /* constructor 2 */
Mihasher::Mihasher(int _B, int _m) Mihasher::Mihasher( int _B, int _m )
{ {
B = _B; B = _B;
B_over_8 = B/8; B_over_8 = B / 8;
m = _m; m = _m;
b = ceil((double)B/m); b = ceil( (double) B / m );
/* assuming that B/2 is large enough radius to include /* assuming that B/2 is large enough radius to include
all of the k nearest neighbors */ all of the k nearest neighbors */
D = ceil(B/2.0); D = ceil( B / 2.0 );
d = ceil((double)D/m); d = ceil( (double) D / m );
/* mplus is the number of chunks with b bits /* mplus is the number of chunks with b bits
(m-mplus) is the number of chunks with (b-1) bits */ (m-mplus) is the number of chunks with (b-1) bits */
mplus = B - m * (b-1); mplus = B - m * ( b - 1 );
xornum = new UINT32 [d+2]; xornum = new UINT32[d + 2];
xornum[0] = 0; xornum[0] = 0;
for (int i=0; i<=d; i++) for ( int i = 0; i <= d; i++ )
xornum[i+1] = xornum[i] + choose(b, i); xornum[i + 1] = xornum[i] + choose( b, i );
H = new SparseHashtable[m]; H = new SparseHashtable[m];
/* H[i].init might fail */ /* H[i].init might fail */
for (int i=0; i<mplus; i++) for ( int i = 0; i < mplus; i++ )
H[i].init(b); H[i].init( b );
for (int i=mplus; i<m; i++) for ( int i = mplus; i < m; i++ )
H[i].init(b-1); H[i].init( b - 1 );
} }
/* K setter */ /* K setter */
void Mihasher::setK(int _K) void Mihasher::setK( int _K )
{ {
K = _K; K = _K;
} }
/* desctructor */ /* desctructor */
Mihasher::~Mihasher() Mihasher::~Mihasher()
{ {
delete[] xornum; delete[] xornum;
delete[] H; delete[] H;
} }
/* populate tables */ /* populate tables */
void Mihasher::populate(cv::Mat & _codes, UINT32 _N, int dim1codes) void Mihasher::populate( cv::Mat & _codes, UINT32 _N, int dim1codes )
{ {
N = _N; N = _N;
codes = _codes; codes = _codes;
UINT64 * chunks = new UINT64[m]; UINT64 * chunks = new UINT64[m];
UINT8 * pcodes = codes.ptr(); UINT8 * pcodes = codes.ptr();
for (UINT64 i=0; i<N; i++, pcodes += dim1codes) for ( UINT64 i = 0; i < N; i++, pcodes += dim1codes )
{ {
split(chunks, pcodes, m, mplus, b); split( chunks, pcodes, m, mplus, b );
for (int k=0; k<m; k++) for ( int k = 0; k < m; k++ )
H[k].insert(chunks[k], i); H[k].insert( chunks[k], i );
if (i % (int)ceil(N/1000.0) == 0) if( i % (int) ceil( N / 1000.0 ) == 0 )
fflush(stdout); fflush( stdout );
} }
delete [] chunks; delete[] chunks;
} }

@ -1,42 +0,0 @@
/*M///////////////////////////////////////////////////////////////////////////////////////
//
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
//
// By downloading, copying, installing or using the software you agree to this license.
// If you do not agree to this license, do not download, install,
// copy or use the software.
//
//
// License Agreement
// For Open Source Computer Vision Library
//
// Copyright (C) 2014, Biagio Montesano, all rights reserved.
// Third party copyrights are property of their respective owners.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// * Redistribution's of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// * Redistribution's in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// * The name of the copyright holders may not be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// This software is provided by the copyright holders and contributors "as is" and
// any express or implied warranties, including, but not limited to, the implied
// warranties of merchantability and fitness for a particular purpose are disclaimed.
// In no event shall the Intel Corporation or contributors be liable for any direct,
// indirect, incidental, special, exemplary, or consequential damages
// (including, but not limited to, procurement of substitute goods or services;
// loss of use, data, or profits; or business interruption) however caused
// and on any theory of liability, whether in contract, strict liability,
// or tort (including negligence or otherwise) arising in any way out of
// the use of this software, even if advised of the possibility of such damage.
//
//M*/
#include "precomp.hpp"

@ -46,37 +46,40 @@ const int SparseHashtable::MAX_B = 37;
/* constructor */ /* constructor */
SparseHashtable::SparseHashtable() SparseHashtable::SparseHashtable()
{ {
table = NULL; table = NULL;
size = 0; size = 0;
b = 0; b = 0;
} }
/* initializer */ /* initializer */
int SparseHashtable::init(int _b) int SparseHashtable::init( int _b )
{ {
b = _b; b = _b;
if (b < 5 || b > MAX_B || b > (int)(sizeof(UINT64)*8)) if( b < 5 || b > MAX_B || b > (int) ( sizeof(UINT64) * 8 ) )
return 1; return 1;
size = UINT64_1 << (b-5); // size = 2 ^ b size = UINT64_1 << ( b - 5 ); // size = 2 ^ b
table = (BucketGroup*) calloc(size, sizeof(BucketGroup)); table = (BucketGroup*) calloc( size, sizeof(BucketGroup) );
return 0; return 0;
} }
/* destructor */ /* destructor */
SparseHashtable::~SparseHashtable () { SparseHashtable::~SparseHashtable()
free(table); {
free( table );
} }
/* insert data */ /* insert data */
void SparseHashtable::insert(UINT64 index, UINT32 data) { void SparseHashtable::insert( UINT64 index, UINT32 data )
table[index >> 5].insert((int)(index % 32), data); {
table[index >> 5].insert( (int) ( index % 32 ), data );
} }
/* query data */ /* query data */
UINT32* SparseHashtable::query(UINT64 index, int *Size) { UINT32* SparseHashtable::query( UINT64 index, int *Size )
return table[index >> 5].query((int)(index % 32), Size); {
return table[index >> 5].query( (int) ( index % 32 ), Size );
} }

Loading…
Cancel
Save