Giter VIP home page Giter VIP logo

planesweeplib's Introduction

Content and Copyright
--------------------------------

This software package PlaneSweepLib (PSL) contains a C++/CUDA implementation of plane sweeping stereo matching for pinhole and fisheye images.
The package comes with test data and scripts to run the software on the test data.
It was tested on Linux using the GCC Toolchain and on Windows using Visual Studio.

Copyright 2016 Christian Haene (ETH Zuerich)
Copyright 2016 Bastien Jacquet, Louis Amore (Kitware) [for src/Apps/cudaPlanesweepMAPTk.cpp]

PSL is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

PSL is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with PSL.  If not, see <http://www.gnu.org/licenses/>.


Version
--------------------------------

1.0 - February 24 2016


Citation
--------------------------------

If you use this software package please cite the relevant publications.

For using the plane sweep code please cite:

Christian Häne, Lionel Heng, Gim Hee Lee, Alexey Sizov, Marc Pollefeys,
Real-Time Direct Dense Matching on Fisheye Images Using Plane-Sweeping Stereo,
Proc Int. Conf. on 3D Vison (3DV) 2014

The datasets provided with the pinhole version of the code were initially published in:

Christian Häne, Christopher Zach, Bernhard Zeisl, Marc Pollefeys,
A Patch Prior for Dense 3D Reconstruction in Man-Made Environments,
Proc. Int. Conf. on 3D Data, Imaging, Modeling, Processing, Visualization and Transmission (3DIMPVT) 2012


Furthermore this code served as a basis for the papers:

Christian Häne, Torsten Sattler, Marc Pollefeys,
Obstacle Detection for Self-Driving Cars Using Only Monocular Cameras and Wheel Odometry,
Proc. IEEE/RSJ Int. Conf. on Intelligent Robots and Systems (IROS) 2015

Thomas Schöps, Torsten Sattler, Christin Häne, Marc Pollefeys,
3D Modeling on the Go: Interactive 3D Reconstruction of Large-Scale Scenes on Mobile Devices,
Proc Int. Conf. on 3D Vison (3DV) 2015


Prerequisites
--------------------------------

The code is written in C++ and CUDA. To use it you need a CUDA compatible Nvidia GPU.
The following libraries are required:

GCC Toolchain on Linux
Visual Studio C++ on Windows
CMake
Nvidia CUDA
Boost (system filesystem program_options)
OpenCV
Eigen3


Instructions Linux
-----------------------------

To compile the code open a terminal and cd to the root directory PlaneSweepLib of the package and run:

mkdir build
cd build
cmake ..
make

The package comes with test data and applications that show how to use the plane sweep code.
To run the tests on the provided data cd to the root directory PlaneSweepLib of the package and run:

sh runPinholePlanesweepTestsLinux.sh
sh runFisheyePlanesweepTestsLinux.sh

The results are written to the folder PlaneSweepLib/testResults.
To check if the code runs correctly reference results are provided in the folder PlaneSweepLib/referenceTestResults


Instructions Windows
---------------------------------

Open a command prompt and cd to the root directory PlaneSweepLib of the package and run:

mkdir build
cd build
cmake -G "Visual Studio 10 Win64" ..    (Replace "Visual Studio 10 Win64" with your version, cmake without arguments provides a list.
                                        Alternatively use cmake-gui to generate the project files.)
                                             
Open the project file PlaneSweepLib/build/PSL.sln with Visual Studio and compile the whole solution in Release mode.


The package comes with test data and applications that show how to use the plane sweep code.
To run the tests on the provided data go to the command prompt and cd to the root directory PlaneSweepLib of the package and run:

runPinholePlanesweepTestsWindows.bat
runFisheyePlanesweepTestsWindows.bat

The results are written to the folder PlaneSweepLib/testResults.
To check if the code runs correctly reference results are provided in the folder PlaneSweepLib/referenceTestResults


Acknowledgements
----------------------------------

This code was written in the Computer Vision and Geometry Group (CVG) led by Prof. Marc Pollefeys.
Helpful discussions and suggestions from Thomas Schöps helped to improve the quality and performance of the code.
The code was written as part of the V-Charge project, grant #269916 under the European Community’s Seventh Framework Programme (FP7/2007-2013)



planesweeplib's People

Contributors

alouis38 avatar bastienjacquet avatar mleotta 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

planesweeplib's Issues

odometry data

Hi! thanks for sharing..

how is odometry data (system_poses.txt) obtained?
I read in "Obstacle Detection for Self-Driving Cars Using Only Monocular Cameras and Wheel Odometry" that only wheel encoders are used, however the provided system poses looks 6DoF.
Can you share more details on this?

thanks a lot!

test with self data

hi, thank you for sharing this great algorithm and code.

i tested it with my own dataset (just a pair of stereo images ) . I setup it as the left image as origin of world coordinates.
but the result is not as good as yours.
any advice for me to follow? ( I tested my rectified image pair with the pinhole mode. )

thanks a lot !

Compile issue

Hello.

I failed to build the source code.
The error message is,

/home/hide/hide_ws/mvs/PlaneSweepLib/src/PSL/psl_cudaBase/cudaFishEyeImageProcessor.cpp: In member function ‘std::pair<PSL_CUDA::DeviceImage, PSL::FishEyeCameraMatrix<double> > PSL_CUDA::CudaFishEyeImageProcessor::undistort(double, double, double, double, double, double)’:
/home/hide/hide_ws/mvs/PlaneSweepLib/src/PSL/psl_cudaBase/cudaFishEyeImageProcessor.cpp:78:92: error: no matching function for call to ‘make_pair<PSL_CUDA::DeviceImage, PSL::FishEyeCameraMatrix<double> >(PSL_CUDA::DeviceImage&, PSL::FishEyeCameraMatrix<double>&)’
     return std::make_pair<DeviceImage, FishEyeCameraMatrix<double> >(outputImage, newCamera);
                                                                                            ^
In file included from /usr/include/c++/7/bits/stl_algobase.h:64:0,
                 from /usr/include/c++/7/bits/char_traits.h:39,
                 from /usr/include/c++/7/ios:40,
                 from /usr/include/c++/7/istream:38,
                 from /usr/include/c++/7/sstream:38,
                 from /home/hide/hide_ws/mvs/PlaneSweepLib/src/PSL/psl_cudaBase/cudaCommon.h:21,
                 from /home/hide/hide_ws/mvs/PlaneSweepLib/src/PSL/psl_cudaBase/deviceImage.h:21,
                 from /home/hide/hide_ws/mvs/PlaneSweepLib/src/PSL/psl_cudaBase/cudaFishEyeImageProcessor.h:21,
                 from /home/hide/hide_ws/mvs/PlaneSweepLib/src/PSL/psl_cudaBase/cudaFishEyeImageProcessor.cpp:18:
/usr/include/c++/7/bits/stl_pair.h:524:5: note: candidate: template<class _T1, class _T2> constexpr std::pair<typename std::__decay_and_strip<_Tp>::__type, typename std::__decay_and_strip<_T2>::__type> std::make_pair(_T1&&, _T2&&)
     make_pair(_T1&& __x, _T2&& __y)
     ^~~~~~~~~
/usr/include/c++/7/bits/stl_pair.h:524:5: note:   template argument deduction/substitution failed:
/home/hide/hide_ws/mvs/PlaneSweepLib/src/PSL/psl_cudaBase/cudaFishEyeImageProcessor.cpp:78:92: note:   cannot convert ‘outputImage’ (type ‘PSL_CUDA::DeviceImage’) to type ‘PSL_CUDA::DeviceImage&&’
     return std::make_pair<DeviceImage, FishEyeCameraMatrix<double> >(outputImage, newCamera);
                                                                                            ^
src/PSL/CMakeFiles/PSL.dir/build.make:1545: recipe for target 'src/PSL/CMakeFiles/PSL.dir/psl_cudaBase/cudaFishEyeImageProcessor.cpp.o' failed
make[2]: *** [src/PSL/CMakeFiles/PSL.dir/psl_cudaBase/cudaFishEyeImageProcessor.cpp.o] Error 1
CMakeFiles/Makefile2:174: recipe for target 'src/PSL/CMakeFiles/PSL.dir/all' failed

Has anyone met this error before?
I use Ubuntu 18.04 and CUDA 11.1 .

Sincerely,

how to get the file "model-0-cams.txt"

Thank you for you excellent work! You get R and T matrix from model-0-cams.txt, but what does the R and T mean? I guess
R = cameraToSystem_R x SystemToWorld_R, and
T = cameraToSystem_T + SystemToWorld_T,
but I get error when running the code, wish someone can give me some advice.

Obtaining Point Cloud from Depth Image

Hello Mr. Jacquet

I am currently trying to use the PSL library to generate point cloud in a ROS environment. In the paper "Real-Time Direct Dense Matching on Fisheye Images Using Plane-Sweeping Stereo" the authors also used the depth images to compute Point Clouds. Would you have any suggestions on how i could proceed? Any insight would be highly appreciated.

Regards
Abhilash Nand Kumar

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.