Giter Site home page Giter Site logo

halismai / bpvo Goto Github PK

View Code? Open in Web Editor NEW
135.0 13.0 69.0 10.39 MB

Faster than real time visual odometry

License: GNU Lesser General Public License v3.0

Python 0.53% CMake 11.41% C++ 66.43% C 0.58% Shell 0.25% Makefile 0.11% MATLAB 4.32% TeX 16.33% Objective-C 0.02% M 0.02%

bpvo's Introduction

BPVO

Coverity Scan Build Status Build Status Code Health

A library for (semi-dense) real-time visual odometry from stereo data using direct alignment of feature descriptors. There are descriptors implemented. First, is raw intensity (no descriptor), which runs in real-time or faster. Second, is an implementation of the Bit-Planes descriptor designed for robust performance under challenging illumination conditions as described here and here.

If you run into any issues, or have questions contact

halismai @ cs . cmu . edu

Building

Dependencies

  • Compiler with c++11 support. Code is tested with gcc-4.9, clang-3.5, and icc 16.0.1
  • Eigen version 3.2+
  • OpenCV version 2.11 usage of opencv is limited to a few function. You need the core, imgproc, and optionally highgui and contrib modules.
  • Optional, but recommended,tbb to speed up Bit-Planes. The code works with OpenMP as well, if available in the system.
  • Optional: boost program_options and circular_buffer. You need version 1.58, 1.59 (there seems to be a bug with boost version 1.60). Older versions of boost will not work, as they do not have support for move semantics. Other optional packages:

There are two libraries, the core bpvo and some utilities bpvo_utils. You do not need to compile the utilities if you want to embed the library in your code. If you are not building the utilities library, you do not need the following dependencies:

  • boost
  • opencv_highgui
  • opencv_contrib

You can drop opencv altogether if you provide your own stereo code (and edit the code slightly).

To build the code base

mkdir build && cmake .. && make -j2

See CMakeLists.txt for additional flags and configurations. You may also configure the library using cmake-gui

Building the Matlab interface

Get mexmat and install it on your system.

git clone https://github.com/halismai/mexmat.git

It is a header-only library, so no compilation is needed. Then, until the matlab interface is integrated into the build system,

cd matlab && make

You might need to modify matlab/Makefile to point to the right location of Matlab and the c++ compiler. As of the date of writing (04/2016) Matlab R2015a supports up to g++-4.7. The code will require g++4.8+

If you get issues with Matlab GLIB_xxx not found, start matlab as

LD_PRELOAD=`g++-4.8+ -print-file-name=libstdc++.so` matlab

There is an experimental support for building the Matlab interface directly from the CMake build system. To try it out configure the build as:

cmake -DBUILD_MATLAB=ON ..

If that does not work, try the manual makefile above.

In either case, you will have to manually edit the location of mexmat and the Matlab path. The process will be fully automated in the future.

Examples

A complete example is provided in apps/vo.cc

A simple example in apps/vo_example.cc

For real-time timting looin in apps/vo_perf.cc On my machine a dual core i7 from 2011, vo_perf.cc runs at 100+ Hz

A minimal example is as follows:

#include <bpvo/vo.h>
#include <bpvo/trajectory.h>  // if you want the trajectory
#include <bpvo/point_cloud.h> // if you want the point cloud

using namespace bpvo;

int main()
{
  //
  // initialize VO using the calibration and AlgorithmParameters
  //
  Matrix33 K; // your calibration (Eigen typedef)
  float b;    // the stereo baseline
  ImageSize image_size(rows, cols); // the image size

  VisualOdometry vo(K, b, image_size, AlgorithmParameters());

  //
  // for every frame
  //  image_ptr is a uint8_t* to the image data
  //  disparity_ptr is a float* to the disparity map
  //
  // Both, the image and disparity size must be the same as supplied to
  // VisualOdometry constructor
  //
  Result result = vo.addFrame(image_ptr, disparity_ptr);

  //
  // If you want the point cloud, you must check if it is available
  //
  if(result.pointCloud) {
    // do something with the point cloud
  }

  // you can also get the trajectory of the camera at any point by calling
  auto trajectory = vo.trajectory();

  // DONE, there is nothing special to do delete the object
  return EXIT_SUCCESS;
}

Matlab Example

params = VoMex.DefaultParameters;
vo = VoMex(K, baseline, image_size, params);

T = eye(4); % the accumulated camera poses
% get images and disparities
% the image must be uint8_t and disparity float
% this assertion must hold
% assert( isa(I, 'uint8') && isa(D, 'single') );
result = vo.addFrame(I, D);

% accumulate the pose
T(:,:,end+1) = T(:,:,end) * inv( result.pose );

See also the code in side matlab/

AlgorithmParameters

The parameters for the algorithm are documented in bpvo/types.h. It is important to get the parameters right for the type of data. Below are additional comments

Common parameters

  • numPyramidLevels You want this to be as small as possible to handle large motions. If you set it to -1, the code will automatically decide the number of pyramid levels. Sometimes, the lowest resolution image is too small and things might not work. For 640x480 images a value of 4 seems to works ok.

  • lossFunction this is the type of the robust loss function used in the IRLS optimization. Use kTukey, or kHuber. You can also run without weighting with kL2, which is much faster but fails too often too often.

  • goodPointThreshold Weights assigned to every point are between 0 and 1. Set this value to determine which points should be considered good. This will affect the number of 3D points you get in the point cloud. If the data is relatively clean, set this value to something high (e.g. 0.85), but if the data is fairly difficult without much stereo, set it to something lower (e.g. 0.6).

  • minNumPixelsForNonMaximaSuppression to achieve real-time VO, when the number of pixels in the image exceeds minNumPixelsForNonMaximaSuppression we do non-maxima suppression on a saliency map extracted from the descriptor image. This results in semi-dense maps at the highest resolution. If you do not want this, and instead want as many 3D points at possible, set minNumPixelsForNonMaximaSuppression to a value higher than the number of pixels of your image. You can also disable this option be setting nonMaxSuppRadius to negative value.

  • minSaliency minimum saliency to use a pixel. If you want to use all pixels irrespective of their saliency, set this to a negative value.

For Intensity descriptor

If you want to use intensity only, disable parallisim. Compile the code with

cmake .. -DWITH_TBB=OFF -DWITH_SIMD=OFF

Or in your code

bpvo::setNumThreads(1);

The overhead of threads with intensity is not worth it for medium resolution images.

Keyframing

  • minTranslationMagToKeyFrame
  • minRotationMagToKeyFrame
  • maxFractionOfGoodPointsToKeyFrame

If you want to disable keyframing in order to get pose and point clouds for every image you add, set minTranslationMagToKeyFrame=0.0

parameters specific to illumination robust mode

  • sigmaPriorToCensusTransform this is the standard deviation of a Gaussian to blur the image before computing Bit-Planes. This should have a value less than 1.5, otherwise too much information is lost. A value of 0.5-0.75 is good.

  • sigmaBitPlanes a standard deviation of Gaussian to smooth the Bit-Planes descriptor. You should experiment with this as it affects the basin of convergence. It also depends on how much motion there is in the data. A value of 0.75-1.5 is good.

3D point clouds

Point clouds are generated from the current keyframe. You should check if result.pointCloud is not NULL prior to accessing it. The point cloud comes with its pose as well in the world coordinate system.

Citation

If you find this work useful please cite either

@ARTICLE{2016arXiv160400990A,
   author = {{Alismail}, Hatem and {Browning}, Browning and {Lucey}, Simon},
    title = "{Direct Visual Odometry using Bit-Planes}",
  journal = {ArXiv e-prints arXiv:1064.00990},
  year = {2016}
}

or

@article{alismail2016bit,
  title={Bit-Planes: Dense Subpixel Alignment of Binary Descriptors},
  author={{Alismail}, Hatem and {Browning}, Brett and {Lucey}, Simon},
  journal={arXiv preprint arXiv:1602.00307},
  year={2016}
}

Keep an eye on [http://www.cs.cmu.edu/~halismai/] for additional data

bpvo's People

Contributors

halismai avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bpvo's Issues

Failing to link OpenCV libraries on OS X 10.11

Hello,

I have all of the dependencies installed and I can compile and a run a small opencv test program using CMake. However when I try to compile this project I get the following output


/usr/local/Cellar/cmake/3.4.3/bin/cmake -H/Users/Nate/Dropbox/ShiResearch/bpvo -B/Users/Nate/Dropbox/ShiResearch/bpvo/build --check-build-system CMakeFiles/Makefile.cmake 0
/usr/local/Cellar/cmake/3.4.3/bin/cmake -E cmake_progress_start /Users/Nate/Dropbox/ShiResearch/bpvo/build/CMakeFiles /Users/Nate/Dropbox/ShiResearch/bpvo/build/CMakeFiles/progress.marks
/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/Makefile2 all
/Applications/Xcode.app/Contents/Developer/usr/bin/make -f bpvo/CMakeFiles/bpvo.dir/build.make bpvo/CMakeFiles/bpvo.dir/depend
/Applications/Xcode.app/Contents/Developer/usr/bin/make -f utils/CMakeFiles/bpvo_utils.dir/build.make utils/CMakeFiles/bpvo_utils.dir/depend
/Applications/Xcode.app/Contents/Developer/usr/bin/make -f apps/CMakeFiles/bpvo_apps.dir/build.make apps/CMakeFiles/bpvo_apps.dir/depend
Scanning dependencies of target bpvo_apps
Scanning dependencies of target bpvo_utils
Scanning dependencies of target bpvo
/Applications/Xcode.app/Contents/Developer/usr/bin/make -f apps/CMakeFiles/bpvo_apps.dir/build.make apps/CMakeFiles/bpvo_apps.dir/build
[  1%] Building CXX object apps/CMakeFiles/bpvo_apps.dir/vo_app.cc.o
/Applications/Xcode.app/Contents/Developer/usr/bin/make -f bpvo/CMakeFiles/bpvo.dir/build.make bpvo/CMakeFiles/bpvo.dir/build
[  3%] Building CXX object bpvo/CMakeFiles/bpvo.dir/bitplanes_descriptor.cc.o
[  4%] Building CXX object bpvo/CMakeFiles/bpvo.dir/census.cc.o
/Applications/Xcode.app/Contents/Developer/usr/bin/make -f utils/CMakeFiles/bpvo_utils.dir/build.make utils/CMakeFiles/bpvo_utils.dir/build
[  6%] Building CXX object utils/CMakeFiles/bpvo_utils.dir/dataset.cc.o
[  8%] Building CXX object utils/CMakeFiles/bpvo_utils.dir/dataset_create.cc.o
[  9%] Building CXX object bpvo/CMakeFiles/bpvo.dir/config_file.cc.o
[ 11%] Building CXX object bpvo/CMakeFiles/bpvo.dir/dense_descriptor.cc.o
[ 12%] Building CXX object utils/CMakeFiles/bpvo_utils.dir/dataset_loader_thread.cc.o
[ 14%] Building CXX object utils/CMakeFiles/bpvo_utils.dir/file_loader.cc.o
[ 16%] Linking CXX shared library ../bin/libbpvo_apps.dylib
Undefined symbols for architecture x86_64:
  "cv::_InputArray::_InputArray(cv::Mat const&)", referenced from:
      bpvo::Viewer::showImages(bpvo::DatasetFrame const*) in vo_app.cc.o
  "cv::namedWindow(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int)", referenced from:
      bpvo::VoApp::Impl::mainLoop() in vo_app.cc.o
  "cv::Mat::deallocate()", referenced from:
      bpvo::VoApp::Impl::Impl(bpvo::VoApp::Options, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<bpvo::Dataset, std::__1::default_delete<bpvo::Dataset> >) in vo_app.cc.o
      bpvo::VoApp::Impl::~Impl() in vo_app.cc.o
  "cv::imshow(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, cv::_InputArray const&)", referenced from:
      bpvo::Viewer::showImages(bpvo::DatasetFrame const*) in vo_app.cc.o
  "cv::waitKey(int)", referenced from:
      bpvo::Viewer::showImages(bpvo::DatasetFrame const*) in vo_app.cc.o
  "cv::fastFree(void*)", referenced from:
      bpvo::VoApp::Impl::Impl(bpvo::VoApp::Options, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<bpvo::Dataset, std::__1::default_delete<bpvo::Dataset> >) in vo_app.cc.o
      bpvo::VoApp::Impl::~Impl() in vo_app.cc.o
  "bpvo::ConfigFile::ConfigFile(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)", referenced from:
      bpvo::VoApp::Impl::Impl(bpvo::VoApp::Options, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<bpvo::Dataset, std::__1::default_delete<bpvo::Dataset> >) in vo_app.cc.o
  "bpvo::PointCloud::reserve(unsigned long)", referenced from:
      bpvo::VoApp::Impl::mainLoop() in vo_app.cc.o
  "bpvo::PointCloud::PointCloud()", referenced from:
      bpvo::VoApp::Impl::mainLoop() in vo_app.cc.o
  "bpvo::PointCloud::~PointCloud()", referenced from:
      bpvo::VoApp::Impl::mainLoop() in vo_app.cc.o
  "bpvo::Calibration::~Calibration()", referenced from:
      bpvo::VoApp::Impl::Impl(bpvo::VoApp::Options, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<bpvo::Dataset, std::__1::default_delete<bpvo::Dataset> >) in vo_app.cc.o
  "bpvo::PointWithInfo::xyzw()", referenced from:
      bpvo::VoApp::Impl::mainLoop() in vo_app.cc.o
  "bpvo::VisualOdometry::addFrame(unsigned char const*, float const*)", referenced from:
      bpvo::VoApp::Impl::mainLoop() in vo_app.cc.o
  "bpvo::VisualOdometry::VisualOdometry(Eigen::Matrix<float, 3, 3, 0, 3, 3> const&, float, bpvo::ImageSize, bpvo::AlgorithmParameters)", referenced from:
      bpvo::VoApp::Impl::Impl(bpvo::VoApp::Options, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<bpvo::Dataset, std::__1::default_delete<bpvo::Dataset> >) in vo_app.cc.o
  "bpvo::VisualOdometry::~VisualOdometry()", referenced from:
      bpvo::VoApp::Impl::Impl(bpvo::VoApp::Options, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<bpvo::Dataset, std::__1::default_delete<bpvo::Dataset> >) in vo_app.cc.o
      bpvo::VoApp::Impl::~Impl() in vo_app.cc.o
  "bpvo::overlayDisparity(cv::Mat const&, cv::Mat const&, cv::Mat&, double, double, double)", referenced from:
      bpvo::Viewer::showImages(bpvo::DatasetFrame const*) in vo_app.cc.o
  "bpvo::colorizeDisparity(cv::Mat const&, cv::Mat&, double, double)", referenced from:
      bpvo::Viewer::showImages(bpvo::DatasetFrame const*) in vo_app.cc.o
  "bpvo::AlgorithmParameters::AlgorithmParameters(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)", referenced from:
      bpvo::VoApp::Impl::Impl(bpvo::VoApp::Options, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<bpvo::Dataset, std::__1::default_delete<bpvo::Dataset> >) in vo_app.cc.o
  "bpvo::DatasetLoaderThread::stop(bool)", referenced from:
      bpvo::VoApp::Impl::mainLoop() in vo_app.cc.o
  "bpvo::DatasetLoaderThread::DatasetLoaderThread(std::__1::unique_ptr<bpvo::Dataset, std::__1::default_delete<bpvo::Dataset> >, bpvo::BoundedBuffer<std::__1::unique_ptr<bpvo::DatasetFrame, std::__1::default_delete<bpvo::DatasetFrame> > >&)", referenced from:
      bpvo::VoApp::Impl::Impl(bpvo::VoApp::Options, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<bpvo::Dataset, std::__1::default_delete<bpvo::Dataset> >) in vo_app.cc.o
  "bpvo::DatasetLoaderThread::~DatasetLoaderThread()", referenced from:
      bpvo::VoApp::Impl::Impl(bpvo::VoApp::Options, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<bpvo::Dataset, std::__1::default_delete<bpvo::Dataset> >) in vo_app.cc.o
      bpvo::VoApp::Impl::~Impl() in vo_app.cc.o
  "bpvo::Sleep(int)", referenced from:
      bpvo::VoApp::VoApp(bpvo::VoApp::Options, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<bpvo::Dataset, std::__1::default_delete<bpvo::Dataset> >) in vo_app.cc.o
      bpvo::VoApp::VoApp(bpvo::VoApp::Options, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<bpvo::Dataset, std::__1::default_delete<bpvo::Dataset> >) in vo_app.cc.o
  "bpvo::Timer::stop()", referenced from:
      bpvo::VoApp::Impl::mainLoop() in vo_app.cc.o
  "bpvo::Timer::start()", referenced from:
      bpvo::VoApp::Impl::mainLoop() in vo_app.cc.o
  "bpvo::Format(char const*, ...)", referenced from:
      bpvo::VoApp::Impl::run() in vo_app.cc.o
      bpvo::VoApp::Impl::mainLoop() in vo_app.cc.o
  "bpvo::Result::Result()", referenced from:
      bpvo::VoApp::Impl::mainLoop() in vo_app.cc.o
  "bpvo::Result::~Result()", referenced from:
      bpvo::VoApp::Impl::mainLoop() in vo_app.cc.o
  "bpvo::Result::operator=(bpvo::Result&&)", referenced from:
      bpvo::VoApp::Impl::mainLoop() in vo_app.cc.o
  "bpvo::ToString(bpvo::KeyFramingReason)", referenced from:
      bpvo::VoApp::Impl::mainLoop() in vo_app.cc.o
  "bpvo::icompare(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
      bpvo::VoApp::Impl::Impl(bpvo::VoApp::Options, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<bpvo::Dataset, std::__1::default_delete<bpvo::Dataset> >) in vo_app.cc.o
  "bpvo::ToPlyFile(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::vector<bpvo::PointWithInfo, Eigen::aligned_allocator<bpvo::PointWithInfo> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)", referenced from:
      bpvo::VoApp::Impl::mainLoop() in vo_app.cc.o
  "bpvo::PointCloud::pose() const", referenced from:
      bpvo::VoApp::Impl::mainLoop() in vo_app.cc.o
  "bpvo::PointCloud::size() const", referenced from:
      bpvo::VoApp::Impl::mainLoop() in vo_app.cc.o
  "bpvo::PointCloud::points() const", referenced from:
      bpvo::VoApp::Impl::mainLoop() in vo_app.cc.o
  "bpvo::PointCloud::operator[](int) const", referenced from:
      bpvo::VoApp::Impl::mainLoop() in vo_app.cc.o
  "bpvo::Trajectory::writeCameraPath(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) const", referenced from:
      bpvo::VoApp::Impl::mainLoop() in vo_app.cc.o
  "bpvo::Trajectory::write(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) const", referenced from:
      bpvo::VoApp::Impl::mainLoop() in vo_app.cc.o
  "bpvo::PointWithInfo::xyzw() const", referenced from:
      bpvo::VoApp::Impl::mainLoop() in vo_app.cc.o
  "bpvo::PointWithInfo::weight() const", referenced from:
      bpvo::VoApp::Impl::mainLoop() in vo_app.cc.o
  "bpvo::VisualOdometry::trajectory() const", referenced from:
      bpvo::VoApp::getTrajectory() const in vo_app.cc.o
      bpvo::VoApp::Impl::mainLoop() in vo_app.cc.o
  "bpvo::VisualOdometry::numPointsAtLevel(int) const", referenced from:
      bpvo::VoApp::Impl::mainLoop() in vo_app.cc.o
  "bpvo::DatasetLoaderThread::isRunning() const", referenced from:
      bpvo::VoApp::Impl::mainLoop() in vo_app.cc.o
  "bpvo::CaseInsenstiveComparator::operator()(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const", referenced from:
      float bpvo::ConfigFile::get<float>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) const in vo_app.cc.o
      std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > bpvo::ConfigFile::get<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) const in vo_app.cc.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [bin/libbpvo_apps.dylib] Error 1
make[1]: *** [apps/CMakeFiles/bpvo_apps.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 17%] Building CXX object bpvo/CMakeFiles/bpvo.dir/dense_descriptor_pyramid.cc.o
[ 19%] Building CXX object bpvo/CMakeFiles/bpvo.dir/disparity_space_warp.cc.o
[ 20%] Building CXX object utils/CMakeFiles/bpvo_utils.dir/glob.cc.o
[ 22%] Building CXX object bpvo/CMakeFiles/bpvo.dir/image_pyramid.cc.o
[ 24%] Building CXX object utils/CMakeFiles/bpvo_utils.dir/image_frame.cc.o
[ 25%] Building CXX object bpvo/CMakeFiles/bpvo.dir/imgproc.cc.o
[ 27%] Building CXX object utils/CMakeFiles/bpvo_utils.dir/kitti_dataset.cc.o
[ 29%] Building CXX object utils/CMakeFiles/bpvo_utils.dir/kitti_eval.cc.o
[ 30%] Building CXX object bpvo/CMakeFiles/bpvo.dir/imwarp.cc.o
[ 32%] Building CXX object utils/CMakeFiles/bpvo_utils.dir/program_options.cc.o
[ 33%] Building CXX object utils/CMakeFiles/bpvo_utils.dir/rsgm.cc.o
[ 35%] Building CXX object bpvo/CMakeFiles/bpvo.dir/imwarp_init_sse4.cc.o
[ 37%] Building CXX object bpvo/CMakeFiles/bpvo.dir/intensity_descriptor.cc.o
[ 38%] Building CXX object bpvo/CMakeFiles/bpvo.dir/linear_system_builder.cc.o
[ 40%] Building CXX object utils/CMakeFiles/bpvo_utils.dir/sgm.cc.o
[ 41%] Building CXX object bpvo/CMakeFiles/bpvo.dir/mestimator.cc.o
[ 43%] Building CXX object utils/CMakeFiles/bpvo_utils.dir/stereo_algorithm.cc.o
/Users/Nate/Dropbox/ShiResearch/bpvo/bpvo/linear_system_builder.cc:287:20: warning: unused function 'getValidResiduals' [-Wunused-function]
static inline void getValidResiduals(const std::vector<uint8_t>& valid,
                   ^
1 warning generated.
[ 45%] Building CXX object utils/CMakeFiles/bpvo_utils.dir/stereo_calibration.cc.o
[ 46%] Building CXX object bpvo/CMakeFiles/bpvo.dir/parallel.cc.o
/Users/Nate/Dropbox/ShiResearch/bpvo/bpvo/mestimator.cc:439:7: warning: unused function 'ScaleEstimator' [-Wunused-function]
float ScaleEstimator(const ResidualsVector& residuals,
      ^
[ 48%] Building CXX object utils/CMakeFiles/bpvo_utils.dir/tsukuba_dataset.cc.o
1 warning generated.
[ 50%] Building CXX object bpvo/CMakeFiles/bpvo.dir/photo_error.cc.o
[ 51%] Building CXX object bpvo/CMakeFiles/bpvo.dir/point_cloud.cc.o
[ 53%] Building CXX object bpvo/CMakeFiles/bpvo.dir/pose_estimator_params.cc.o
[ 54%] Building CXX object utils/CMakeFiles/bpvo_utils.dir/tunnel_dataset.cc.o
[ 56%] Building CXX object bpvo/CMakeFiles/bpvo.dir/project_points.cc.o
[ 58%] Building CXX object utils/CMakeFiles/bpvo_utils.dir/viz.cc.o
[ 59%] Building CXX object bpvo/CMakeFiles/bpvo.dir/rigid_body_warp.cc.o
[ 61%] Building CXX object bpvo/CMakeFiles/bpvo.dir/template_data.cc.o
[ 62%] Building CXX object bpvo/CMakeFiles/bpvo.dir/timer.cc.o
[ 64%] Building CXX object bpvo/CMakeFiles/bpvo.dir/trajectory.cc.o
[ 66%] Linking CXX shared library ../bin/libbpvo_utils.dylib
Undefined symbols for architecture x86_64:
  "cv::StereoSGBM::StereoSGBM(int, int, int, int, int, int, int, int, int, int, bool)", referenced from:
      bpvo::StereoAlgorithm::Impl::Impl(bpvo::ConfigFile const&) in stereo_algorithm.cc.o
  "cv::_InputArray::_InputArray(cv::Mat const&)", referenced from:
      bpvo::toGray(cv::Mat const&, cv::Mat&) in dataset.cc.o
      bpvo::StereoDataset::getFrame(int) const in dataset.cc.o
      bpvo::StereoAlgorithm::Impl::run(cv::Mat const&, cv::Mat const&, cv::Mat&) in stereo_algorithm.cc.o
      bpvo::colorizeDisparity(cv::Mat const&, cv::Mat&, double, double) in viz.cc.o
      bpvo::overlayDisparity(cv::Mat const&, cv::Mat const&, cv::Mat&, double, double, double) in viz.cc.o
  "cv::addWeighted(cv::_InputArray const&, double, cv::_InputArray const&, double, double, cv::_OutputArray const&, int)", referenced from:
      bpvo::overlayDisparity(cv::Mat const&, cv::Mat const&, cv::Mat&, double, double, double) in viz.cc.o
  "cv::_OutputArray::_OutputArray(cv::Mat&)", referenced from:
      bpvo::DisparityDataset::getFrame(int) const in dataset.cc.o
      bpvo::toGray(cv::Mat const&, cv::Mat&) in dataset.cc.o
      bpvo::StereoDataset::getFrame(int) const in dataset.cc.o
      bpvo::DisparityFrame::DisparityFrame(cv::Mat const&, cv::Mat const&) in image_frame.cc.o
      bpvo::DisparityFrame::convertDisparityToFloat() in image_frame.cc.o
      bpvo::DisparityFrame::setDisparity(cv::Mat const&) in image_frame.cc.o
      bpvo::StereoAlgorithm::Impl::run(cv::Mat const&, cv::Mat const&, cv::Mat&) in stereo_algorithm.cc.o
      ...
  "cv::applyColorMap(cv::_InputArray const&, cv::_OutputArray const&, int)", referenced from:
      bpvo::colorizeDisparity(cv::Mat const&, cv::Mat&, double, double) in viz.cc.o
  "cv::Mat::deallocate()", referenced from:
      bpvo::DisparityDataset::DisparityFrame::DisparityFrame(cv::Mat, cv::Mat, cv::Mat, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in dataset.cc.o
      bpvo::DisparityDataset::getFrame(int) const in dataset.cc.o
      bpvo::toGray(cv::Mat const&, cv::Mat&) in dataset.cc.o
      bpvo::StereoDataset::getFrame(int) const in dataset.cc.o
      bpvo::StereoDataset::StereoFrame::~StereoFrame() in dataset.cc.o
      bpvo::StereoDataset::StereoFrame::StereoFrame(bpvo::StereoDataset::StereoFrame const&) in dataset.cc.o
      bpvo::DisparityDataset::DisparityFrame::~DisparityFrame() in dataset.cc.o
      ...
  "cv::Mat::create(int, int const*, int)", referenced from:
      bpvo::StereoAlgorithm::Impl::run(cv::Mat const&, cv::Mat const&, cv::Mat&) in stereo_algorithm.cc.o
  "cv::Mat::copySize(cv::Mat const&)", referenced from:
      bpvo::DisparityDataset::DisparityFrame::DisparityFrame(cv::Mat, cv::Mat, cv::Mat, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in dataset.cc.o
      bpvo::DisparityDataset::getFrame(int) const in dataset.cc.o
      bpvo::toGray(cv::Mat const&, cv::Mat&) in dataset.cc.o
      bpvo::StereoDataset::getFrame(int) const in dataset.cc.o
      bpvo::StereoDataset::StereoFrame::StereoFrame(bpvo::StereoDataset::StereoFrame const&) in dataset.cc.o
      bpvo::StereoFrame::StereoFrame(cv::Mat const&, cv::Mat const&) in image_frame.cc.o
      bpvo::StereoFrame::StereoFrame(cv::Mat const&, cv::Mat const&, cv::Mat const&) in image_frame.cc.o
      ...
  "cv::imread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int)", referenced from:
      bpvo::DisparityDataset::getFrame(int) const in dataset.cc.o
      bpvo::StereoDataset::getFrame(int) const in dataset.cc.o
  "cv::resize(cv::_InputArray const&, cv::_OutputArray const&, cv::Size_<int>, double, double, int)", referenced from:
      bpvo::StereoDataset::getFrame(int) const in dataset.cc.o
  "cv::noArray()", referenced from:
      bpvo::colorizeDisparity(cv::Mat const&, cv::Mat&, double, double) in viz.cc.o
  "cv::cvtColor(cv::_InputArray const&, cv::_OutputArray const&, int, int)", referenced from:
      bpvo::toGray(cv::Mat const&, cv::Mat&) in dataset.cc.o
      bpvo::overlayDisparity(cv::Mat const&, cv::Mat const&, cv::Mat&, double, double, double) in viz.cc.o
  "cv::fastFree(void*)", referenced from:
      bpvo::DisparityDataset::DisparityFrame::DisparityFrame(cv::Mat, cv::Mat, cv::Mat, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in dataset.cc.o
      bpvo::DisparityDataset::getFrame(int) const in dataset.cc.o
      bpvo::StereoDataset::getFrame(int) const in dataset.cc.o
      bpvo::StereoDataset::StereoFrame::~StereoFrame() in dataset.cc.o
      bpvo::StereoDataset::StereoFrame::StereoFrame(bpvo::StereoDataset::StereoFrame const&) in dataset.cc.o
      bpvo::DisparityDataset::DisparityFrame::~DisparityFrame() in dataset.cc.o
      bpvo::StereoFrame::~StereoFrame() in image_frame.cc.o
      ...
  "cv::minMaxLoc(cv::_InputArray const&, double*, double*, cv::Point_<int>*, cv::Point_<int>*, cv::_InputArray const&)", referenced from:
      bpvo::colorizeDisparity(cv::Mat const&, cv::Mat&, double, double) in viz.cc.o
  "bpvo::ConfigFile::ConfigFile(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)", referenced from:
      bpvo::DisparityDataset::DisparityDataset(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in dataset.cc.o
      bpvo::StereoDataset::StereoDataset(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in dataset.cc.o
      bpvo::Dataset::Create(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in dataset_create.cc.o
      bpvo::KittiDataset::KittiDataset(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in kitti_dataset.cc.o
      bpvo::StereoAlgorithm::StereoAlgorithm(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in stereo_algorithm.cc.o
      bpvo::StereoAlgorithm::StereoAlgorithm(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in stereo_algorithm.cc.o
      bpvo::TsukubaSyntheticDataset::TsukubaSyntheticDataset(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in tsukuba_dataset.cc.o
      ...
  "bpvo::fs::expand_tilde(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)", referenced from:
      bpvo::DisparityDataset::init(bpvo::ConfigFile const&) in dataset.cc.o
      bpvo::StereoDataset::init(bpvo::ConfigFile const&) in dataset.cc.o
      bpvo::FileLoader::FileLoader(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, int) in file_loader.cc.o
      bpvo::KittiDataset::init(bpvo::ConfigFile const&) in kitti_dataset.cc.o
      bpvo::TsukubaSyntheticDataset::init(bpvo::ConfigFile const&) in tsukuba_dataset.cc.o
      bpvo::TsukubaStereoDataset::init(bpvo::ConfigFile const&) in tsukuba_dataset.cc.o
  "bpvo::fs::dirsep(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)", referenced from:
      bpvo::FileLoader::FileLoader(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, int) in file_loader.cc.o
  "bpvo::fs::exists(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)", referenced from:
      bpvo::DisparityDataset::init(bpvo::ConfigFile const&) in dataset.cc.o
      bpvo::StereoDataset::init(bpvo::ConfigFile const&) in dataset.cc.o
      bpvo::FileLoader::FileLoader(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, int) in file_loader.cc.o
      bpvo::KittiDataset::init(bpvo::ConfigFile const&) in kitti_dataset.cc.o
      bpvo::TsukubaSyntheticDataset::init(bpvo::ConfigFile const&) in tsukuba_dataset.cc.o
      bpvo::TsukubaStereoDataset::init(bpvo::ConfigFile const&) in tsukuba_dataset.cc.o
  "bpvo::Sleep(int)", referenced from:
      bpvo::DatasetLoaderThread::start() in dataset_loader_thread.cc.o
  "bpvo::Format(char const*, ...)", referenced from:
      bpvo::DisparityDataset::DisparityDataset(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in dataset.cc.o
      bpvo::DisparityDataset::init(bpvo::ConfigFile const&) in dataset.cc.o
      bpvo::DisparityDataset::getFrame(int) const in dataset.cc.o
      bpvo::toGray(cv::Mat const&, cv::Mat&) in dataset.cc.o
      bpvo::StereoDataset::StereoDataset(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in dataset.cc.o
      bpvo::StereoDataset::getFrame(int) const in dataset.cc.o
      bpvo::StereoDataset::init(bpvo::ConfigFile const&) in dataset.cc.o
      ...
  "float bpvo::str2num<float>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
      (anonymous namespace)::set_kitti_camera_from_line(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in kitti_dataset.cc.o
  "bpvo::icompare(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
      bpvo::Dataset::Create(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in dataset_create.cc.o
      bpvo::StereoAlgorithm::Impl::Impl(bpvo::ConfigFile const&) in stereo_algorithm.cc.o
  "bpvo::splitstr(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char)", referenced from:
      (anonymous namespace)::set_kitti_camera_from_line(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in kitti_dataset.cc.o
  "boost::program_options::to_internal(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
      std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > boost::program_options::to_internal<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&) in program_options.cc.o
  "boost::program_options::variables_map::variables_map()", referenced from:
      bpvo::ProgramOptions::ProgramOptions(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in program_options.cc.o
  "boost::program_options::options_description::add_options()", referenced from:
      bpvo::ProgramOptions::ProgramOptions(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in program_options.cc.o
      bpvo::ProgramOptions::addOption(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in program_options.cc.o
  "boost::program_options::options_description::m_default_line_length", referenced from:
      bpvo::ProgramOptions::ProgramOptions(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in program_options.cc.o
  "boost::program_options::options_description::options_description(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned int, unsigned int)", referenced from:
      bpvo::ProgramOptions::ProgramOptions(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in program_options.cc.o
  "boost::program_options::options_description_easy_init::operator()(char const*, char const*)", referenced from:
      bpvo::ProgramOptions::ProgramOptions(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in program_options.cc.o
      bpvo::ProgramOptions::addOption(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in program_options.cc.o
  "boost::program_options::store(boost::program_options::basic_parsed_options<char> const&, boost::program_options::variables_map&, bool)", referenced from:
      bpvo::ProgramOptions::parse(int, char**) in program_options.cc.o
  "boost::program_options::detail::cmdline::set_additional_parser(boost::function1<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&>)", referenced from:
      boost::program_options::basic_command_line_parser<char>::extra_parser(boost::function1<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&>) in program_options.cc.o
  "boost::program_options::detail::cmdline::set_options_description(boost::program_options::options_description const&)", referenced from:
      boost::program_options::basic_parsed_options<char> boost::program_options::parse_command_line<char>(int, char const* const*, boost::program_options::options_description const&, int, boost::function1<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&>) in program_options.cc.o
  "boost::program_options::detail::cmdline::get_canonical_option_prefix()", referenced from:
      boost::program_options::basic_command_line_parser<char>::run() in program_options.cc.o
  "boost::program_options::detail::cmdline::run()", referenced from:
      boost::program_options::basic_command_line_parser<char>::run() in program_options.cc.o
  "boost::program_options::detail::cmdline::style(int)", referenced from:
      boost::program_options::basic_parsed_options<char> boost::program_options::parse_command_line<char>(int, char const* const*, boost::program_options::options_description const&, int, boost::function1<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&>) in program_options.cc.o
  "boost::program_options::detail::cmdline::cmdline(std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&)", referenced from:
      boost::program_options::basic_command_line_parser<char>::basic_command_line_parser(int, char const* const*) in program_options.cc.o
  "boost::program_options::notify(boost::program_options::variables_map&)", referenced from:
      bpvo::ProgramOptions::parse(int, char**) in program_options.cc.o
  "boost::program_options::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, boost::program_options::options_description const&)", referenced from:
      bpvo::ProgramOptions::printHelpAndExit(int) const in program_options.cc.o
  "cv::Mat::convertTo(cv::_OutputArray const&, int, double, double) const", referenced from:
      bpvo::DisparityDataset::getFrame(int) const in dataset.cc.o
      bpvo::DisparityFrame::DisparityFrame(cv::Mat const&, cv::Mat const&) in image_frame.cc.o
      bpvo::DisparityFrame::convertDisparityToFloat() in image_frame.cc.o
      bpvo::DisparityFrame::setDisparity(cv::Mat const&) in image_frame.cc.o
      bpvo::StereoAlgorithm::Impl::run(cv::Mat const&, cv::Mat const&, cv::Mat&) in stereo_algorithm.cc.o
      bpvo::colorizeDisparity(cv::Mat const&, cv::Mat&, double, double) in viz.cc.o
  "bpvo::CaseInsenstiveComparator::operator()(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const", referenced from:
      std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > bpvo::ConfigFile::get<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) const in dataset.cc.o
      float bpvo::ConfigFile::get<float>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) const in dataset.cc.o
      int bpvo::ConfigFile::get<int>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) const in dataset.cc.o
      std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > bpvo::ConfigFile::get<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) const in dataset_create.cc.o
      std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > bpvo::ConfigFile::get<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) const in kitti_dataset.cc.o
      int bpvo::ConfigFile::get<int>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) const in kitti_dataset.cc.o
      int bpvo::ConfigFile::get<int>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) const in stereo_algorithm.cc.o
      ...
  "vtable for boost::program_options::variables_map", referenced from:
      bpvo::ProgramOptions::ProgramOptions(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in program_options.cc.o
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "_cvCreateStereoBMState", referenced from:
      bpvo::StereoAlgorithm::Impl::Impl(bpvo::ConfigFile const&) in stereo_algorithm.cc.o
  "_cvFindStereoCorrespondenceBM", referenced from:
      bpvo::StereoAlgorithm::Impl::run(cv::Mat const&, cv::Mat const&, cv::Mat&) in stereo_algorithm.cc.o
  "_cvReleaseStereoBMState", referenced from:
      bpvo::StereoAlgorithm::Impl::~Impl() in stereo_algorithm.cc.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [bin/libbpvo_utils.dylib] Error 1
make[1]: *** [utils/CMakeFiles/bpvo_utils.dir/all] Error 2
[ 67%] Building CXX object bpvo/CMakeFiles/bpvo.dir/types.cc.o
[ 69%] Building CXX object bpvo/CMakeFiles/bpvo.dir/utils.cc.o
[ 70%] Building CXX object bpvo/CMakeFiles/bpvo.dir/v128.cc.o
[ 72%] Building CXX object bpvo/CMakeFiles/bpvo.dir/vector6.cc.o
[ 74%] Building CXX object bpvo/CMakeFiles/bpvo.dir/vo.cc.o
[ 75%] Building CXX object bpvo/CMakeFiles/bpvo.dir/vo_frame.cc.o
[ 77%] Building CXX object bpvo/CMakeFiles/bpvo.dir/vo_pose_estimator.cc.o
[ 79%] Building CXX object bpvo/CMakeFiles/bpvo.dir/warps.cc.o
[ 80%] Linking CXX shared library ../bin/libbpvo.dylib
Undefined symbols for architecture x86_64:
  "cv::_InputArray::_InputArray(cv::Mat const&)", referenced from:
      bpvo::BitPlanesComputeBody<float>::operator()(bpvo::Range const&) const in bitplanes_descriptor.cc.o
      bpvo::census(cv::Mat const&, float) in census.cc.o
      bpvo::ImagePyramid::compute(cv::Mat const&) in image_pyramid.cc.o
      bpvo::IntensityDescriptor::compute(cv::Mat const&) in intensity_descriptor.cc.o
  "cv::GaussianBlur(cv::_InputArray const&, cv::_OutputArray const&, cv::Size_<int>, double, double, int)", referenced from:
      bpvo::BitPlanesComputeBody<float>::operator()(bpvo::Range const&) const in bitplanes_descriptor.cc.o
      bpvo::census(cv::Mat const&, float) in census.cc.o
  "cv::_OutputArray::_OutputArray(cv::Mat&)", referenced from:
      bpvo::BitPlanesDescriptor::copyTo(bpvo::DenseDescriptor*) const in bitplanes_descriptor.cc.o
      bpvo::BitPlanesComputeBody<float>::operator()(bpvo::Range const&) const in bitplanes_descriptor.cc.o
      bpvo::census(cv::Mat const&, float) in census.cc.o
      bpvo::ImagePyramid::ImagePyramid(bpvo::ImagePyramid const&) in image_pyramid.cc.o
      bpvo::ImagePyramid::compute(cv::Mat const&) in image_pyramid.cc.o
      bpvo::IntensityDescriptor::IntensityDescriptor(bpvo::IntensityDescriptor const&) in intensity_descriptor.cc.o
      bpvo::VisualOdometryFrame::setData(cv::Mat const&, cv::Mat const&) in vo_frame.cc.o
      ...
  "cv::Mat::deallocate()", referenced from:
      bpvo::BitPlanesDescriptor::~BitPlanesDescriptor() in bitplanes_descriptor.cc.o
      bpvo::BitPlanesDescriptor::compute(cv::Mat const&) in bitplanes_descriptor.cc.o
      bpvo::BitPlanesDescriptor::computeSaliencyMap(cv::Mat&) const in bitplanes_descriptor.cc.o
      bpvo::BitPlanesComputeBody<float>::~BitPlanesComputeBody() in bitplanes_descriptor.cc.o
      bpvo::BitPlanesComputeBody<float>::~BitPlanesComputeBody() in bitplanes_descriptor.cc.o
      cv::Mat_<float>::operator=(cv::Mat const&) in bitplanes_descriptor.cc.o
      bpvo::census(cv::Mat const&, float) in census.cc.o
      ...
  "cv::Mat::create(int, int const*, int)", referenced from:
      bpvo::BitPlanesDescriptor::computeSaliencyMap(cv::Mat&) const in bitplanes_descriptor.cc.o
      bpvo::BitPlanesComputeBody<float>::operator()(bpvo::Range const&) const in bitplanes_descriptor.cc.o
      bpvo::census(cv::Mat const&, float) in census.cc.o
      bpvo::gradientAbsoluteMagnitude(cv::Mat_<float> const&, cv::Mat_<float>&) in imgproc.cc.o
      bpvo::IntensityDescriptor::computeSaliencyMap(cv::Mat&) const in intensity_descriptor.cc.o
  "cv::Mat::copySize(cv::Mat const&)", referenced from:
      bpvo::BitPlanesDescriptor::clone() const in bitplanes_descriptor.cc.o
      cv::Mat_<float>::operator=(cv::Mat const&) in bitplanes_descriptor.cc.o
      bpvo::census(cv::Mat const&, float) in census.cc.o
      bpvo::ImagePyramid::ImagePyramid(bpvo::ImagePyramid const&) in image_pyramid.cc.o
      bpvo::ImagePyramid::compute(cv::Mat const&) in image_pyramid.cc.o
      cv::Mat_<float>::operator=(cv::Mat const&) in intensity_descriptor.cc.o
      bpvo::VisualOdometryFrame::setTemplate() in vo_frame.cc.o
      ...
  "cv::pyrDown(cv::_InputArray const&, cv::_OutputArray const&, cv::Size_<int> const&, int)", referenced from:
      bpvo::ImagePyramid::compute(cv::Mat const&) in image_pyramid.cc.o
  "cv::cvtColor(cv::_InputArray const&, cv::_OutputArray const&, int, int)", referenced from:
      bpvo::IntensityDescriptor::compute(cv::Mat const&) in intensity_descriptor.cc.o
  "cv::fastFree(void*)", referenced from:
      bpvo::BitPlanesDescriptor::~BitPlanesDescriptor() in bitplanes_descriptor.cc.o
      bpvo::BitPlanesDescriptor::compute(cv::Mat const&) in bitplanes_descriptor.cc.o
      bpvo::BitPlanesDescriptor::computeSaliencyMap(cv::Mat&) const in bitplanes_descriptor.cc.o
      bpvo::BitPlanesComputeBody<float>::~BitPlanesComputeBody() in bitplanes_descriptor.cc.o
      bpvo::BitPlanesComputeBody<float>::~BitPlanesComputeBody() in bitplanes_descriptor.cc.o
      cv::Mat_<float>::operator=(cv::Mat const&) in bitplanes_descriptor.cc.o
      bpvo::census(cv::Mat const&, float) in census.cc.o
      ...
  "cv::Mat::copyTo(cv::_OutputArray const&) const", referenced from:
      bpvo::BitPlanesDescriptor::copyTo(bpvo::DenseDescriptor*) const in bitplanes_descriptor.cc.o
      bpvo::ImagePyramid::ImagePyramid(bpvo::ImagePyramid const&) in image_pyramid.cc.o
      bpvo::IntensityDescriptor::copyTo(bpvo::DenseDescriptor*) const in intensity_descriptor.cc.o
      bpvo::IntensityDescriptor::IntensityDescriptor(bpvo::IntensityDescriptor const&) in intensity_descriptor.cc.o
      bpvo::VisualOdometryFrame::setData(cv::Mat const&, cv::Mat const&) in vo_frame.cc.o
  "cv::Mat::reshape(int, int, int const*) const", referenced from:
      cv::Mat_<float>::operator=(cv::Mat const&) in bitplanes_descriptor.cc.o
      cv::Mat_<float>::operator=(cv::Mat const&) in intensity_descriptor.cc.o
  "cv::Mat::convertTo(cv::_OutputArray const&, int, double, double) const", referenced from:
      cv::Mat_<float>::operator=(cv::Mat const&) in bitplanes_descriptor.cc.o
      bpvo::IntensityDescriptor::compute(cv::Mat const&) in intensity_descriptor.cc.o
      cv::Mat_<float>::operator=(cv::Mat const&) in intensity_descriptor.cc.o
  "vtable for cv::_OutputArray", referenced from:
      cv::Mat_<float>::operator=(cv::Mat const&) in bitplanes_descriptor.cc.o
      bpvo::IntensityDescriptor::compute(cv::Mat const&) in intensity_descriptor.cc.o
      bpvo::IntensityDescriptor::copyTo(bpvo::DenseDescriptor*) const in intensity_descriptor.cc.o
      cv::Mat_<float>::operator=(cv::Mat const&) in intensity_descriptor.cc.o
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [bin/libbpvo.dylib] Error 1
make[1]: *** [bpvo/CMakeFiles/bpvo.dir/all] Error 2
make: *** [all] Error 2

All of the errors seem to be linking issues with opencv. Do you have any idea what might be causing this? I have OpenCV 2.12 instead of 2.11 but that doesn't seem likely to cause an issue.

Build error

Dear @halismai ,

I had followed your installation guide. I passed cmake step (log: https://gist.github.com/amiltonwong/d897a28251b4f67a69565745d7b16744)
However, I came across the following make error:

root@milton-OptiPlex-9010:~/bpvo/build# make
Scanning dependencies of target bpvo
[ 1%] Building CXX object bpvo/CMakeFiles/bpvo.dir/types.cc.o
c++: error: unrecognized command line option β€˜-fdiagnostics-color=auto’
make[2]: *** [bpvo/CMakeFiles/bpvo.dir/types.cc.o] Error 1
make[1]: *** [bpvo/CMakeFiles/bpvo.dir/all] Error 2
make: *** [all] Error 2

My g++ version is 4.8.4, could u suggest me how to fix it?

THX~

question about vo_example.cc

Hi, @halismai ,

I had run "vo_example" for simple example. However, no operation for useful output is implemented in vo_example.cc, it just pass the left images and depth images into vo. If I want to save the vo output into a text file, how should I modify the file vo_example.cc?

THX~

ROS port

Hi,

are there any plans on porting this to ROS? If not, do you mind giving me a few pointers on how to include this library in another cmake project and as a submodule to integrate it into a ROS package?

Thanks!

Depth for initialization or throughout?

Hi @halismai ,
BPVO is a really nice work.
I have been exploring BPVO for its use in a monocular system, and looking into the use of depth for pose estimates - whether it is only used for initialization or throughout (seems to be latter as it is primarily designed for RGB-D).
Is there any part of implementation which I overlooked that estimates depth on frame-frame basis (or similar) so that depth is not explicitly required other than for initialization?
Thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.