Commit Graph

58 Commits

Author SHA1 Message Date
Alexander Smorkalov
5af40a0269 Merge branch 4.x 2023-07-05 15:51:10 +03:00
Alexander Smorkalov
29dc07b1f3
Merge pull request #23186 from savuor:warnings_3d
MSVC warnings fixed in 3d module
2023-01-30 10:09:01 +03:00
Alexander Alekhin
f33598f55e Merge branch 4.x 2023-01-28 17:31:32 +00:00
Rostislav Vasilikhin
285218915c msvc cast warnings 2023-01-27 17:20:12 +01:00
Alexander Alekhin
593a376566 Merge branch 4.x 2023-01-09 11:08:02 +00:00
Rostislav Vasilikhin
d49958141e
Merge pull request #22925 from savuor:pytsdf_from_scratch
Fixes #22799

Replaces #21559 which was taken as a base

Connected PR in contrib: [#3388@contrib](https://github.com/opencv/opencv_contrib/pull/3388)

### Changes
OK, now this is more Odometry-related PR than Volume-related. Anyway,
* `Volume` class gets wrapped
* The same was done for helper classes like `VolumeSettings`, `OdometryFrame` and `OdometrySettings`
* `OdometryFrame` constructor signature changed to more convenient where depth goes on 1st place, RGB image on 2nd.
This works better for depth-only `Odometry` algorithms.
* `OdometryFrame` is checked for amount of pyramid layers inside `Odometry::compute()`
* `Odometry` was fully wrapped + more docs added
* Added Python tests for `Odometry`, `OdometryFrame` and `Volume`
* Added Python sample for `Volume`
* Minor fixes including better var names

### Pull Request Readiness Checklist

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [x] There is a reference to the original bug report and related work
- [x] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
      Patch to opencv_extra has the same branch name.
- [x] The feature is well documented and sample code can be built with the project CMake
2022-12-12 09:40:12 +03:00
Rostislav Vasilikhin
86c6e07326
Merge pull request #22863 from savuor:tsdf_tests_join
### Changes
* Duplicated code removal in TSDF tests by implementing them with fixtures and GTest params
  * e.g. separate OCL tests file removed
  * as a result, more test cases are covered
  * the same's done for perf tests

### Pull Request Readiness Checklist

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [x] There is a reference to the original bug report and related work
- [x] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
      Patch to opencv_extra has the same branch name.
- [x] The feature is well documented and sample code can be built with the project CMake
2022-12-06 12:15:39 +03:00
Rostislav Vasilikhin
a423b07149
Merge pull request #22845 from savuor:volume_interface_etc
Corresponding contrib PR: #3382@contrib

Changes

- Volume::raycast(): camera intrinsics can be explicitly passed to the function. If not, the ones from current volume settings are used
- getVolumeDimensions() renamed to getVolumeStrides() because they are strides actually
- TSDF tests: OpenCLStatusRevert and parametrized fixture
- ColorTSDF::integrate(): extra RGB projector is redundant, removed
- Minor changes
2022-11-24 17:16:18 +03:00
Rostislav Vasilikhin
2407ab4e61
Merge pull request #22178 from savuor:hash_tsdf_fixes
This PR contains:

- a new property enableGrowth which controls should the HashTSDF be extended during integration by adding new volume units or not
- a new method getBoundingBox which calculates the size of currently occupied data
- a set of tests to check that new functionality
- a fix for TSDF GPU reset (data is correctly zeroed now using floatToTsdf() function)
    minor changes
2022-11-22 09:24:41 +03:00
Rostislav Vasilikhin
a9d98bfb34
Merge pull request #22741 from savuor:hashtsdf_volposerot_fix
There's a bug which appears when volume pose contains non-trivial rotation.
It results in wrong depth integration which can be observed during raycasting 
or points/normals export.

- This PR fixes the bug for both CPU and OpenCL
- There is a reproducer for the bug
- The copy behavior of VolumeSettings fixed (now copy constructor creates a deep copy)
- Minor changes (e.g. unused vars removed)
2022-11-17 09:10:35 +03:00
Yuhang Wang
d976272d23
Merge pull request #22682 from TsingYiPainter:5.x
3D: Handle cases where the depth of Octree setting is too large

* Handle cases where the depth setting is too large
2022-11-03 07:15:17 +00:00
Rostislav Vasilikhin
a1820ff3d4 unused function removed 2022-10-25 02:45:42 +02:00
Rostislav Vasilikhin
097b0245da getScaledDepth -> getProcessedDepth 2022-10-25 02:45:28 +02:00
Rostislav Vasilikhin
8b7e586faa
Merge pull request #22598 from savuor:icp_oframe_readonly
Complement PR: #3366@contrib
Changes

    OdometryFrame losts its getters: a user can provide data at construction stage only, pyramids and other generated data is read-only now
    OdometryFrame is based on UMats: no TMat templates inside, CPU operations are done with UMat::getMat() method, chaining issues are solved ad-hoc
    No more Odometry::createOdometryFrame() method, frames are compatible with all odometry algorithms
    Normals computer is cached inside Odometry and exposed to API as well as its settings
    Volume::raycast() won't return the result in OdometryFrame anymore
    Added test for Odometry::prepareFrame*() & other test fixes
    Minor code improvements

TODOs:

    fix TODOs in code
    lower acceptable accuracy errors
2022-10-24 16:34:01 +03:00
Alexander Smorkalov
3857173845
Merge pull request #22287 from asenyaev:asen/disabled_compiling_warnings_5.x
Disabled compiling warnings in case of symbols in cmake for 5.x
2022-09-20 16:19:08 +03:00
Andrey Senyaev
752e5fdc26 Disabled compiling warnings in case of symbols in cmake for 5.x 2022-09-20 13:36:59 +03:00
Rostislav Vasilikhin
f92a1aa07d trying to fix MSVC compilation
double -> float warning

fix warnings in the rest 3d module files

extra var removed

try to fix warnings
2022-09-19 00:27:26 +02:00
Rostislav Vasilikhin
9ba4bb7355 initIntrisicParams2D() refactored
variables refactoring

levmarq fix

initIntrinsicParams2D() refactoring

undo LM fix

cameraCalcJErr: made a lambda; warnings fixed; vars rearranged & renamed, jacobian buffers, perViewErrors and allErrors fix, etc.

stereoCalibrate: internal vars in callback

stereoCalibrate: capture only useful variables

stereoCalibrate: perViewError fix + minors

rvecs and tvecs are not pointers anymore

no extra lambda

newObjPoints: no pointers

stdDevs: no pointers

_Jo removed: not used

Range::all() -> rowRange, colRange

param and mask are std::vectors now

indices shortened

tabs

less func-scoped vars; TODOs

less formatting & renaming changes

trailing whitespaces

less diff

less changes

less changes

Range::all() back

perViewErr ptr fix

NINTRINSIC captured

try to fix warning

trying to fix a warning

fix warnings, another attempt
2022-09-15 22:55:40 +02:00
Alexander Smorkalov
335d7bd16e
Merge pull request #22241 from savuor:normals_scale_test
More tests for normals
2022-08-24 10:25:55 +03:00
Alexander Smorkalov
3a02561c40 Merge pull request #22417 from savuor:levmarq_log_level_fix 2022-08-24 07:17:22 +00:00
Rostislav Vasilikhin
eb571b500b fixes warnings 2022-08-23 10:22:28 +02:00
Alexander Smorkalov
505bbab75b
Merge pull request #22413 from savuor:levmarq_log_level
LevMarq: log level lowered
2022-08-23 09:22:39 +03:00
Rostislav Vasilikhin
3cf3e3f6f7 LevMarq: log level lowered 2022-08-22 23:53:49 +02:00
Alexander Alekhin
c25f776151 Merge branch 4.x 2022-08-21 15:27:31 +00:00
Rostislav Vasilikhin
48c10620cb depthTo3d: fixed bug, added regression test
RgbdNormals: setMethod() removed as useless

RgbdNormals: tests + cross product, to be fixed

+ cross product

LINEMOD: diffThreshold param added + tests fixed

minor

diffThreshold fix

points3dToDepth16U fix

normals computer diffThreshold fix

random plane generation fixed + diffThreshold fix

Rendered normals test rewritten to GTest Params

random plane generation: scale

RGBD_Normals tests: thresholds tuned

Rendered normals tests: 64F support added

Random planes normal tests rewritten to GTest Params

LINEMOD and CrossProduct fix

SRI threshold raised

NormalsRandomPlanes: thresholds raised

assert on unknown alg; minor

fix

frame size reduced

TIFF replaced by YAML.GZ

depthTo3d test changed

cv::transform is used

fix warning

nanMask()

flipAxes()

absDotPixel() + forgotten code

helper functions removed

RGBDNormals: checkNormals() and compare LINEMOD's pts3d to depth input

Rendered: another criteria; thresholds; LINEMOD's pts3d to depth input comparison

thresholds raised a bit

SRI slightly optimized

assert change

normal tests refactored, parametrized, split

trailing namespace, thresholds raised

SRI caching optimized a lot

normal tests rewritten to fixture, no loop

minor

runCase() joined with testIt()

thresholds were put into GTest params

ternary operator

RgbdNormalsTest merged into NormalsRandomPlanes; RgbdPlanes moved closer to tests

normal test minor refactoring

plane finder tests refactored to GTest Params

skip tests

thresholds raised

plane test minor

plane tests: timers dropped, nPlanes put into GTest Params; refactoring

generated normals tests: minor refactoring

flipAxes() templated

rendered normals tests refactored: thresholds to GTest Params

CV_Error -> ASSERT_FALSE
2022-08-19 20:16:08 +02:00
Rostislav Vasilikhin
2b767f9bc8 whitespace fix 2022-06-30 16:51:01 +02:00
Rostislav Vasilikhin
fd14b959cf warpFrame() rewritten, interface changed 2022-06-29 23:55:07 +02:00
Rostislav Vasilikhin
162bd5be4c distCoeffs removed from warpFrame() signature 2022-06-27 01:23:07 +02:00
Rostislav Vasilikhin
770c0d1416 1. removed (almost all) additional scale parameter mentions
2. refactored funcptrs to switch/cases & more
2022-06-23 23:47:08 +02:00
Rostislav Vasilikhin
bee410c748 warpFrame() test draft + script generating test data 2022-06-23 23:18:59 +02:00
Saratovtsev
df490c6399 moving code from ICP+Scale 2022-06-14 13:40:14 +02:00
Wanli Zhong
b06544bd54
Merge pull request #21918 from No-Plane-Cannot-Be-Detected:5.x-region_growing_3d
Add normal estimation and region growing algorithm for point cloud

* Add normal estimation and region growing algorithm for point cloud

* 1.Modified documentation for normal estimation;2.Converted curvature in region growing to absolute values;3.Changed the data type of threshold from float to double;4.Fixed some bugs;

* Finished documentation

* Add tests for normal estimation. Test the normal and curvature of each point in the plane and sphere of the point cloud.

* Fix some warnings caused by to small numbers in test

* Change the test to calculate the average difference instead of comparing each normal and curvature

* Fixed the bugs found by testing

* Redesigned the interface and fixed problems:
1. Make the interface compatible with radius search.
2. Make region growing optionally sortable on results.
3. Modified the region growing interface.
4. Format reference.
5. Removed sphere test.

* Fix warnings

* Remove flann dependency

* Move the flann dependency to the corresponding test
2022-05-23 14:47:57 +00:00
Alexander Alekhin
8b3d2a57ad Merge pull request #21968 from No-Plane-Cannot-Be-Detected:5.x-randomSampling_bug 2022-05-17 21:17:29 +00:00
Klepikov Dmitrii
a99b4071a2
Merge pull request #20471 from ibvfteh:pointcloudio
GSoC module to save and load point cloud

* Add functionality to read point cloud data from files

* address issues found on review, add tests for mesh, refactor

* enable fail-safe execution and empty arrays as output

* Some improvements for point cloud io module

Co-authored-by: Julie Bareeva <julia.bareeva@xperience.ai>
2022-05-13 18:10:39 +00:00
Wanli Zhong
627e6a0447
Modify randomSampling in point cloud 2022-05-11 15:30:58 +08:00
Artem Saratovtsev
3d12581798
Merge pull request #21741 from DumDereDum:odometry_prepareFrame_fix
Odometry prepareFrame fix

* fix issue; add tests

* img fix

* mask fix

* minor fix
2022-04-04 21:14:31 +00:00
Rostislav Vasilikhin
aa5055261f
Merge pull request #21652 from savuor:fix/hash_tsdf_normals_simd32_compilation
Fix HashTSDF compilation

* big SIMD compilation fix (try 1)

* fixing compilation, try 2
2022-02-24 10:29:28 +00:00
Alexander Alekhin
899b4d1452 Merge branch 4.x 2022-02-22 19:55:26 +00:00
Ruan
e5d648d2d0
Merge pull request #21615 from No-Plane-Cannot-Be-Detected:5.x-ptcloud_comments
Added 3D point cloud code comments and copyright

1. update the code comments.
2. add author information.
2022-02-18 20:43:08 +03:00
Artem Saratovtsev
9c87d8bf9c
Merge pull request #21189 from DumDereDum:new_volume
New Volume pipeline
2022-02-18 14:50:26 +00:00
Artem Saratovtsev
4ba2b05df8
Merge pull request #21439 from DumDereDum:python_odometry
Odometry python support
2022-02-07 16:16:17 +00:00
Alexander Alekhin
a0d5277e0d Merge branch 4.x 2021-12-30 21:43:45 +00:00
Ruan
80c5d18f9c
Merge pull request #21276 from No-Plane-Cannot-Be-Detected:5.x-ptcloud
Add support for 3D point cloud segmentation, using the USAC framework.

* Modify the RANSAC framework in usac such that RANSAC can be used in 3D point cloud segmentation.

* 1. Add support for 3D point cloud segmentation, using the USAC framework.
2. Add solvers, error estimators for plane model and sphere model.

* Added code samples to the comments of class SACSegmentation.

* 1. Update the segment interface parameters of SACSegmentation.
2. Fix some errors in variable naming.

* Add tests for plane detection.

* 1. Add tests for sphere segmentation.
2. Fix some bugs found by tests.
3. Rename "segmentation" to "sac segmentation".
4. Rename "detect" to "segment".
TODO: Too much duplicate code, the structure of the test needs to be rebuilt.

* 1. Use SIMD acceleration for plane model and sphere model error estimation.
2. Optimize the RansacQualityImpl#getScore function to avoid multiple calls to the error#getError function.
3. Fix a warning in test_sac_segmentation.cpp.

* 1. Fix the warning of ModelConstraintFunction ambiguity.
2. Fix warning: no previous declaration for'void cv::usac::modelParamsToUsacConfig(cv::Ptr<cv::usac::SimpleUsacConfig>&, const cv::Ptr<const cv::usac::Model>& )

* Fix a warning in test_sac_segmentation.cpp about direct comparison of different types of data.

* Add code comments related to the interpretation of model coefficients.

* Update the use of custom model constraint functions.

* Simplified test code structure.

* Update the method of checking plane models.

* Delete test for cylinder.

* Add some comments about UniversalRANSAC.

* 1. The RANSAC paper in the code comments is referenced using the bibtex format.
2. The sample code in the code comments is replaced using @snippet.
3. Change the public API class SACSegmentation to interface.
4. Clean up the old useless code.

* fix warning(no previous declaration) in 3d_sac_segmentation.cpp.

* Fix compilation errors caused by 3d_sac_segmentation.cpp.

* Move the function sacModelMinimumSampleSize() from ptcloud.hpp to sac_segmentation.cpp.

* 1. Change the interface for setting the number of threads to the interface for setting whether to be parallel.
2. Move interface implementation code in ptcloud_utils.hpp to ptcloud_utils.cpp.

* SACSegmentation no longer inherits Algorithm.

* Add the constructor and destructor of SACSegmentation.

* 1. For the declaration of the common API, the prefix and suffix of the parameter names no longer contain underscores.
2. Rename the function _getMatFromInputArray -> getPointsMatFromInputArray.
3. Change part of CV_CheckDepth to CV_CheckDepthEQ.
4. Remove the doxygen flag from the source code.
5. Update the loop termination condition of SIMD in the point cloud section of 3D module.

* fix warning: passing 'bool' chooses 'int' over 'size_t {aka unsigned int}' .

* fix warning: passing 'bool' chooses 'int' over 'size_t {aka unsigned int}' .
2021-12-30 15:54:06 +00:00
Rostislav Vasilikhin
9d6f388809
Merge pull request #21018 from savuor:levmarqfromscratch
New LevMarq implementation

* Hash TSDF fix: apply volume pose when fetching pose

* DualQuat minor fix

* Pose Graph: getEdgePose(), getEdgeInfo()

* debugging code for pose graph

* add edge to submap

* pose averaging: DualQuats instead of matrix averaging

* overlapping ratio: rise it up; minor comment

* remove `Submap::addEdgeToSubmap`

* test_pose_graph: minor

* SparseBlockMatrix: support 1xN as well as Nx1 for residual vector

* small changes to old LMSolver

* new LevMarq impl

* Pose Graph rewritten to use new impl

* solvePnP(), findHomography() and findExtrinsicCameraParams2() use new impl

* estimateAffine...2D() use new impl

* calibration and stereo calibration use new impl

* BundleAdjusterBase::estimate() uses new impl

* new LevMarq interface

* PoseGraph: changing opt interface

* findExtrinsicCameraParams2(): opt interface updated

* HomographyRefine: opt interface updated

* solvePnPRefine opt interface fixed

* Affine2DRefine opt interface fixed

* BundleAdjuster::estimate() opt interface fixed

* calibration: opt interface fixed + code refactored a little

* minor warning fixes

* geodesic acceleration, Impl -> Backend rename

* calcFunc() always uses probe vars

* solveDecomposed, fixing negation

* fixing geodesic acceleration + minors

* PoseGraph exposes its optimizer now + its tests updated to check better convegence

* Rosenbrock test added for LevMarq

* LevMarq params upgraded

* Rosenbrock can do better

* fixing stereo calibration

* old implementation removed (as well as debug code)

* more debugging code removed

* fix warnings

* fixing warnings

* fixing Eigen dependency

* trying to fix Eigen deps

* debugging code for submat is now temporary

* trying to fix Eigen dependency

* relax sanity check for solvePnP

* relaxing sanity check even more

* trying to fix Eigen dependency

* warning fix

* Quat<T>: fixing warnings

* more warning fixes

* fixed warning

* fixing *KinFu OCL tests

* algo params -> struct Settings

* Backend moved to details

* BaseLevMarq -> LevMarqBase

* detail/pose_graph.hpp -> detail/optimizer.hpp

* fixing include stuff for details/optimizer.hpp

* doc fix

* LevMarqBase rework: Settings, pImpl, Backend

* Impl::settings and ::backend fix

* HashTSDFGPU fix

* fixing compilation

* warning fix for OdometryFrameImplTMat

* docs fix + compile warnings

* remake: new class LevMarq with pImpl and enums, LevMarqBase => detail, no Backend class, Settings() => .cpp, Settings==() removed, Settings.set...() inlines

* fixing warnings & whitespace
2021-12-27 21:51:32 +00:00
Saratovtsev
5714868726 odometry warnings fix 2021-12-16 13:52:00 +03:00
Artem Saratovtsev
6ab4659840
Merge pull request #20755 from DumDereDum:new_odometry
New odometry Pipeline

* first intergation

* tests run, but not pass

* add previous version of sigma calc

* add minor comment

* strange fixes

* fix fast ICP

* test changes; fast icp still not work correctly

* finaly, it works

* algtype fix

* change affine comparison

* boolean return

* fix bug with angle and cos

* test pass correctly

* fix for kinfu pipeline

* add compute points normals

* update for new odometry

* change odometry_evaluation

* odometry_evaluation works

* change debug logs

* minor changes

* change depth setting in odometryFrame

* fastICP works with 4num points

* all odometries work with 4mun points

* odometry full works on 4num points and normals

* replace ICP with DEPTH; comments replacements

* create prepareFrame; add docs for Odometry

* change getPyramids()

* delete extra code

* add intrinsics; but dont works

* bugfix with nan checking

* add gpu impl

* change createOdometryFrame func

* remove old fastICP code

* comments fix

* add comments

* minor fixes

* other minor fixes

* add channels assert

* add impl for odometry settings

* add pimpl to odometry

* linux warning fix

* linux warning fix 1

* linux warning fix 2

* linux error fix

* linux warning fix 3

* linux warning fix 4

* linux error fix 2

* fix test warnings

* python build fix

* doxygen fix

* docs fix

* change normal tests for 4channel point

* all Normal tests pass

* plane works

* add warp frame body

* minor fix

* warning fixes

* try to fix

* try to fix 1

* review fix

* lvls fix

* createOdometryFrame fix

* add comment

* const reference

* OPENCV_3D_ prefix

* const methods

* –OdometryFramePyramidType ifx

* add assert

* precomp moved upper

* delete types_c

* add assert for get and set functions

* minor fixes

* remove core.hpp from header

* ocl_run add

* warning fix

* delete extra comment

* minor fix

* setDepth fix

* delete underscore

* odometry settings fix

* show debug image fix

* build error fix

* other minor fix

* add const to signatures

* fix

* conflict fix

* getter fix
2021-12-02 20:53:44 +03:00
Ruan
0cf0a5e9d4
Merge pull request #21095 from No-Plane-Cannot-Be-Detected:next_SIMD
Accelerated 3D point cloud Farthest Point Sampling calculation using SIMD.

* Add several 3D point cloud sampling functions: Random, VoxelGrid, FarthestPoint.

* Made some code detail changes and exposed the random number generator parameters at the interface.

* Add simple tests for sampling.

* Modify interface output parameters.

* Modify interface return value.

* The sampling test is modified for the new changes of function interface.

* Improved test of VoxelGridFilterSampling

* Improved test of VoxelGridFilterSampling and FPS.

* Add test for the dist_lower_limit arguments of FPS function.

* Optimization function _getMatFromInputArray.

* Optimize the code style and some details according to the suggestions.

* Clear prefix cv: in the source code.

* Change the initialization of Mat in the sampling test.

* 1. Unified code style
2. Optimize randomSampling method

* 1. Optimize code comments.
2. Remove unused local variables.

* Rebuild the structure of the test, make the test case more reliable, and change the code style.

* Update test_sampling.cpp

Fix a warning.

* Use SIMD to optimize the farthest point sampling.

* Optimize the farthest point sampling SIMD code.

* 1. remove `\n` from the ptcloud.hpp comment.
2. updated the default value of the argument arrangement_of_points in the _getMatFromInputArray function in ptcloud_utils.hpp from 0 to 1, since the latter is more commonly used (such arrangement is easier for SIMD acceleration).
3. removed two functions in ptcloud_utils.hpp that were not used.

* Remove the <br> in the comment.

* Fix whitespace issues.
2021-11-30 12:33:44 +00:00
Ruan
1470f90c2a
Merge pull request #20784 from No-Plane-Cannot-Be-Detected:next
Add 3D point cloud sampling functions to branch next

* Add several 3D point cloud sampling functions: Random, VoxelGrid, FarthestPoint.

* Made some code detail changes and exposed the random number generator parameters at the interface.

* Add simple tests for sampling.

* Modify interface output parameters.

* Modify interface return value.

* The sampling test is modified for the new changes of function interface.

* Improved test of VoxelGridFilterSampling

* Improved test of VoxelGridFilterSampling and FPS.

* Add test for the dist_lower_limit arguments of FPS function.

* Optimization function _getMatFromInputArray.

* Optimize the code style and some details according to the suggestions.

* Clear prefix cv: in the source code.

* Change the initialization of Mat in the sampling test.

* 1. Unified code style
2. Optimize randomSampling method

* 1. Optimize code comments.
2. Remove unused local variables.

* Rebuild the structure of the test, make the test case more reliable, and change the code style.

* Update test_sampling.cpp

Fix a warning.
2021-10-29 01:41:21 +03:00
Alexander Alekhin
fce4a19d0d 5.x: cleanup compatibility code (2021-10) 2021-10-20 17:40:04 +00:00
Alexander Alekhin
7ba26ada12 Merge branch 4.x 2021-10-15 21:53:39 +00:00