[GSoC] Add Submaps and PoseGraph optimization for Large Scale Depth Fusion
* - Add HashTSDF class
- Implement Integrate function (untested)
* Integration seems to be working, raycasting does not
* Update integration code
* Integration and Raycasting fixes, (both work now)
* - Format code
- Clean up comments and few fixes
* Add Kinect Fusion backup file
* - Add interpolation for vertices and normals (slow and unreliable!)
- Format code
- Delete kinfu_back.cpp
* Bug fix for integration and noisy odometry
* - Create volume abstract class
- Address Review comments
* - Add getPoints and getNormals function
- Fix formatting according to comments
- Move volume abstract class to include/opencv2/rgbd/
- Write factory method for creating TSDFVolumes
- Small bug fixes
- Minor fixes according to comments
* - Add tests for hashTSDF
- Fix raycasting bug causing to loop forever
- Suppress warnings by explicit conversion
- Disable hashTsdf test until we figure out memory leak
- style changes
- Add missing license in a few files, correct precomp.hpp usage
* - Use CRTP based static polymorphism to choose between CPU and GPU for
HashTSDF volume
* Create submap and submapMgr
Implement overlap_ratio check to create new submaps
* Early draft of posegraph and submaps (Doesn't even compile)
* Minor cleanup (no compilation)
* Track all submaps (no posegraph update yet)
* Return inliers from ICP for weighting the constraints
(Huber threshold based inliers pending)
* Add updating constraints between submaps and retain same current map
* Fix constraints creation between submaps and allow for switching between
submaps
* - Fix bug in allocate volumeUnits
- Simplify calculation of visibleBlocks
* Remove inlier calculation in fast_icp (not required)
* Modify readFile to allow reading other datasets easily
* - Implement posegraph update, Gauss newton is unstable
- Minor changes to Gauss newton and Sparse matrix. Residual still
increases slightly over iterations
* Implement simplified levenberg marquardt
* Bug fixes for Levenberg Marquardt and minor changes
* minor changes
* Fixes, but Optimizer is still not well behaved
* Working Ceres optimizer
* - Reorganize IO code for samples in a separate file
- Minor fix for Ceres preprocessor definition
- Remove unused generatorJacobian, will be used for opencv implementation
of levenberg marquardt
- Doxygen docs fix
- Minor preprocessor fixes
* - Reorganize IO code for samples in a separate file
- Minor fix for Ceres preprocessor definition
- Remove unused generatorJacobian, will be used for opencv implementation
of levenberg marquardt
- Doxygen docs fix
- Minor preprocessor fixes
- Move inline functions to header, and make function params const
references
* - Add Python bindings for volume struct
- Remove makeVolume(const VolumeParams&) Python binding due to compilation
issues
- Minor changes according to comments
* - Remove dynafu::Params() since it is identical to kinfu::Params()
- Use common functions for dynafu_demo
- Suppress "unreachable code" in volume.cpp
* Minor API changes
* Minor
* Remove CRTP for HashTSDF class
* Bug fixes for HashTSDF integration
Added constructors and destructors for RgbdPlane
* declared constructors and destructors of RgbdPlane
* definitions written
* tests for python bindings added
DynamicFusion Implementation
* Add new nodes from points
* Addition of new node in the field
* Warp nodes demo
* Add newline before {
* Remove 3rd party flann dependency
* Regularisation Heirarchy
* Correct node radius
* Change default growth rate
* New node position = centroid of the neighbourhood
* Enlarge nodes while paused
* Dynafu TSDF
* TSDF demo
* Avoid double calc and adjust initial tsdf weight
* Fix bug that caused some voxels to disappear
* getNodePos helper
* Remove USE_INTRINSIC check
* Correct RT avg calculation and remove redundant knn calc
* Slight perf improvements
* Use LinearIndex
* Debug calculations
* set all nodes' RT
* Various bug fixes
* Separate camera and warpfield
* Add dynafu documentation
* Adhere to coding style
* Add dynafu unit test
* update demo
* Merge pull request #2133 from savuor:kinfu_truncate
KinectFusion: several updates (#2133)
* truncateThreshold added
* demo updated for RealSense
* first Kinect2, then RealSense
* more distance-based parameters
* Remove trailing whitespaces
* Replace bool vector with array
* create findNeighbours in WarpField
* Maintain nodesPos matrix in WarpField
* Fix warnings on Windows build
* Remove cameraPose from WarpField
* Use AutoBuffer
* Marching Cubes
* Fix MC
* Split mesh vertices & edges
* Change Mat types in MC
* OpenGL rendering
* Check for HAVE_OPENGL
* Error handling in case HAVE_OPENGL is not defined
* Replace Mat_ with std::vector inside marchCubes
* Parallelise marching cubes
* Fix warpfield and estimate depth inside DynaFuImpl::updateT()
* Linearise depth and use points/normals from MC
* Don't test dynafu without OpenGL support
* Analytical calculation of Jacobian matrices
* Add details about rotation and differentiate graph terms in J_r
* Use derivative of T^-1 from the tutorial
* Remove L2 norm from reg term
* Use chain rule to differentiate data term
* Markdown
* Fix markdown
* Replace MD file by HTML
* Change the data term expression
* Calculate J_d using vector identities
* Rasterize vertex and normals
* Apply warpfield before rendering
* Add CV_UNUSED for normImage to fix warning
* Render float image instead of uint8
* Implement ICP data term and other changes:
1. add option to applyWarp to normals
2. add option to `fetchPointNormals` to return points in voxel coordinates
3. Fix: Use voxel coordinates to update WarpField
* Fix non-OpenGL build
* Intialise newly discovered node transforms with DQB
* Fix data term
* Change data term normal and add kinfu-like distance/angle checks
* Implement regularisation
* Fix warnings
* Credit authors of DQB and table for MC
* cast size_t to int to supress warning
* Correct regularisation and add normal equation set up
* Delete html
* Dynafu unit test
* empty kinfu module created
* KinFu: skeleton is done
* some intermediate state fixed
* fixed normal calculation
* bilinear depth interp: fixing missing data
* TSDF integration optimized
* TSDF: adding constness
* utils: isNaN; Intr::Projector const reference fixed
* TSDF raycast: quality improvements
* TSDF fetchCloud is done
* render() added
* ICP implemented
* debug code moved to demo.cpp
* less TODOs
* partial refactoring
* TSDF: fetchPoints() and fetchNormals() rewritten in parallel manner
* platform choose added
* reordered
* data types isolated off the platform
* minor fixes
* ScopeTime added
* fixed iterations gathering
* volume::integrate() parallelized but works slow (big overhead for
* raycast is done in parallel
* got rid of kftype and p3type
* fetchNormals() fixed
* less code duplication
* nan check reduced, interpolate() refactored to fetchVoxel()
* ICP: optimizations
* TSDF: bilinear specialized
* TSDF: voxelSizeInv pushed away
* TSDF: interpolation optimized
* TSDF::integrate: parallel_for now works fast
* Frame::render: pow -> float ipow<int p>(x)
* ICP::getAb: parallel_for
* ICP::getAb: time print disabled
* ICP::getAb::bilinear: 2 calls joined
* refactored, extra functions removed
* optimized to use only 27 elems
* ICP::getAb: better optimized
* Points and Normals data type expanded to 4 channels
* ICP optimized (doesn't work)
* ICP::getAb is on intrinsics and it works
* NaN check is faster
* ICP::getAB: minors
* added non-SIMD code as fallback
* TSDF::fetchVoxel and interpolation: got rid of coord check
* TSDF::fetchVoxel: refactor
* TSDF::raycast: local copies of members
* TSDF::interpolate: refactored for simplier vectorization
* TSDF::getNormal: refactored for simplier vectorization
* minor
* include "intrin.hpp" moved to precomp.hpp
* TSDF::coords shifts moved to class body
* TSDF::getNormal vectorized
* TSDF::getNormal: little improvements
* TSDF::interpolate: little improvements
* TSDF::raycast vectorized
* more to precomp.hpp
* TSDF: minor optimizations
* TSDF::raycast cycles optimized
* TSDF::fetchPointsNormals instead of separate p and n
* TSDF::bilinearInterpolate: little speedup
* TSDF::interpolate: speed up
* TSDF::interpolate: more compact code
* TSDF::getNormal and raycast main cycle made faster
* ICP: few improvements
* Frame: a lot of parts parallelized
* TSDF::fetchPointsNormals minor improvements
* TSDF::integrate and bilinear vectorized
* TSDF::interpolate and getNormal: interpolation vectorized
* ICP: minor changes
* gradientDeltaFactor removed, coarseParams() added
* TSDF::raycast: fixed bug with tmin/tmax
* minors
* baseZ fixed
* ICP: interpolation fixed, non-parallelized code fixed
* TSDF::interpolate: bilinear fixed, less artifacts
* TSDF: minor refactoring
* TSDF: some members moved to parent class
* added tests for KinFu
* KinFu documented
* docs fixed
* warnings fixed
* license added, overrides added
* minors
* ScopeTime moved to separate file
* less memory allocations
* demo improved, java binding disabled
* viz module made optional
* fix to demo
* frameGenerator interface: got rid of refs to cv::Ptr
* demo made interactive
* trying to fix build
* trying to fix warnings
* warning fixed
* demo fixed
* raycast_step_factor tuned
* legal info added
* don't reset if ICP failed
* refactoring: KinFu::operator() => update()
* KinFu::KinFuParams => ::Params
* get/setParams
* fetch => get
* all src moved to cv::kinfu namespace
* struct Intr made internal
* kinfu_module merged into rgbd module
* License preambule updated
* minors
* frame.* renamed to kinfu_frame.*
* warnings fixed
* more warnings fixed
* RGBD normals: a fix against Inf/Nan values
* FastICP: fixed transformation direction
* RGBD Odometry tests: added epsilon for id transform; minors
* RGBD Odometry tests enabled
* modules list fixed