Commit Graph

47 Commits

Author SHA1 Message Date
Wenfeng CAI
31be03a805 Merge pull request #12772 from xoox:calib-release-object
More accurate pinhole camera calibration with imperfect planar target (#12772)
43 commits:

* Add derivatives with respect to object points

Add an output parameter to calculate derivatives of image points with
respect to 3D coordinates of object points. The output jacobian matrix
is a 2Nx3N matrix where N is the number of points.

This commit introduces incompatibility to old function signature.

* Set zero for dpdo matrix before using

dpdo is a sparse matrix with only non-zero value close to major
diagonal. Set it to zero because only elements near major diagonal are
computed.

* Add jacobian columns to projectPoints()

The output jacobian matrix of derivatives with respect to coordinates of
3D object points are added. This might break callers who assume the
columns of jacobian matrix.

* Adapt test code to updated project functions

The test cases for projectPoints() and cvProjectPoints2() are updated to
fit new function signatures.

* Add accuracy test code for dpdo

* Add badarg test for dpdo

* Add new enum item for new calibration method

CALIB_RELEASE_OBJECT is used to whether to release 3D coordinates of
object points. The method was proposed in: K. H. Strobl and G. Hirzinger.
"More Accurate Pinhole Camera Calibration with Imperfect Planar Target".
In Proceedings of the IEEE International Conference on Computer Vision
(ICCV 2011), 1st IEEE Workshop on Challenges and Opportunities in Robot
Perception, Barcelona, Spain, pp. 1068-1075, November 2011.

* Add releasing object method into internal function

It's a simple extension of the standard calibration scheme. We choose to
fix the first and last object point and a user-selected fixed point.

* Add interfaces for extended calibration method

* Refine document for calibrateCamera()

When releasing object points, only the z coordinates of the
objectPoints[0].back is fixed.

* Add link to strobl2011iccv paper

* Improve documentation for calibrateCamera()

* Add implementations of wrapping calibrateCamera()

* Add checking for params of new calibration method

If input parameters are not qualified, then fall back to standard
calibration method.

* Add camera calibration method of releasing object

The current implementation is equal to or better than
https://github.com/xoox/calibrel

* Update doc for CALIB_RELEASE_OBJECT

CALIB_USE_QR or CALIB_USE_LU could be used for faster calibration with
potentially less precise and less stable in some rare cases.

* Add RELEASE_OBJECT calibration to tutorial code

To select the calibration method of releasing object points, a command
line parameter `-d=<number>` should be provided.

* Update tutorial doc for camera_calibration

If the method of releasing object points is merged into OpenCV. It will
be expected to be firstly released in 4.1, I think.

* Reduce epsilon for cornerSubPix()

Epsilon of 0.1 is a bigger one. Preciser corner positions are required
with calibration method of releasing object.

* Refine camera calibration tutorial

The hypothesis coordinates are used to indicate which distance must be
measured between two specified object points.

* Update sample calibration code method selection

Similar to camera_calibration tutorial application, a command line
argument `-dt=<number>` is used to select the calibration method.

* Add guard to flags of cvCalibrateCamera2()

cvCalibrateCamera2() doesn't accept CALIB_RELEASE_OBJECT unless overload
interface is added in the future.

* Simplify fallback when iFixedPoint is out of range

* Refactor projectPoints() to keep compatibilities

* Fix arg string "Bad rvecs header"

* Read calibration flags from test data files

Instead of being hard coded into source file, the calibration flags will
be read from test data files.
opencv_extra/testdata/cv/cameracalibration/calib?.dat must be sync with
the test code.

* Add new C interface of cvCalibrateCamera4()

With this new added C interface, the extended calibration method with
CALIB_RELEASE_OBJECT can be called by C API.

* Add regression test of extended calibration method

It has been tested with new added test data in xoox:calib-release-object
branch of opencv_extra.

* Fix assertion in test_cameracalibration.cpp

The total number of refined 3D object coordinates is checked.

* Add checker for iFixedPoint in cvCalibrateCamera4

If iFixedPoint is out of rational range, fall back to standard method.

* Fix documentation for overloaded calibrateCamera()

* Remove calibration flag of CALIB_RELEASE_OBJECT

The method selection is based on the range of the index of fixed point.
For minus values, standard calibration method will be chosen.  Values in
a rational range will make the object-releasing calibration method
selected.

* Use new interfaces instead of function overload

Existing interfaces are preserved and new interfaces are added. Since
most part of the code base are shared, calibrateCamera() is now a
wrapper function of calibrateCameraRO().

* Fix exported name of calibrateCameraRO()

* Update documentation for calibrateCameraRO()

The circumstances where this method is mostly helpful are described.

* Add note on the rigidity of the calibration target

* Update documentation for calibrateCameraRO()

It is clarified that iFixedPoint is used as a switch to select
calibration method. If input data are not qualified, exceptions will be
thrown instead of fallback scheme.

* Clarify iFixedPoint as switch and remove fallback

iFixedPoint is now used as a switch for calibration method selection. No
fallback scheme is utilized anymore. If the input data are not
qualified, exceptions will be thrown.

* Add badarg test for object-releasing method

* Fix document format of sample list

List items of same level should be indented the same way. Otherwise they
will be formatted as nested lists by Doxygen.

* Add brief intro for objectPoints and imagePoints

* Sync tutorial to sample calibration code

* Update tutorial compatibility version to 4.0
2018-10-25 19:38:55 +03:00
Alexander Alekhin
8a3c394d6a don't use constructors for C API structures 2018-09-06 14:34:16 +03:00
Alexander Alekhin
c7fc563dc0 calib3d: chessboard detector - replace OpenCV C API 2018-07-05 13:09:10 +03:00
Alexander Alekhin
e268fdc0ed Merge pull request #10793 from denmatfoton:master 2018-02-15 15:52:52 +00:00
Alexander Alekhin
f378f1d585 calib3d: add regression test for stereoCalibrate 2018-02-15 15:24:09 +03:00
Alexander Alekhin
4a297a2443 ts: refactor OpenCV tests
- removed tr1 usage (dropped in C++17)
- moved includes of vector/map/iostream/limits into ts.hpp
- require opencv_test + anonymous namespace (added compile check)
- fixed norm() usage (must be from cvtest::norm for checks) and other conflict functions
- added missing license headers
2018-02-03 19:39:47 +00:00
Pavel Rojtberg
203dc3bb48 Merge pull request #10667 from paroj:stereo_calib_ex
calib3d: add stereoCalibrateExtended (#10667)

* cvCalibrateCamera2Internal: simplify per view error computation

* calib3d: add stereoCalibrateExtended

- allow CALIB_USE_EXTRINSIC_GUESS
- returns per view errors

* calib3d: add stereoCalibrateExtended test
2018-01-26 22:05:13 +03:00
Vitaly Tuzov
51cb56ef2c Implementation of bit-exact resize. Internal calls to linear resize updated to use bit-exact version. (#9468) 2017-12-13 15:00:38 +03:00
Alexander Alekhin
7e12c879c2 core: extend traits::Type / traits::Depth for compatible types
DMatch and Keypoint are not compatible types (mixed float/int fields)
2017-08-31 19:35:48 +03:00
David Carlier
bacc210606 fixing segfaults occuring when launching those unit tests 2017-04-18 09:50:17 +01:00
Alexander Alekhin
ca6beb9ca8 calib3d: fix InputArray -> CvMat 2016-12-22 04:22:46 +03:00
Alexander Alekhin
4439ba09f9 test: update condition for Calib3d_StereoCalibrate 2016-10-20 16:54:40 +03:00
Sergei Nosov
b3d55489d3 fix compiler warning 2016-07-21 10:57:58 +03:00
Sergei Nosov
d06b8c4ea9 add test for #6836 2016-07-19 17:05:30 +03:00
Maksim Shabunin
7d007d212c Merge pull request #6828 from paroj:cmatvals_cpp 2016-07-14 11:31:48 +00:00
Vladislav Sovrasov
46fb46c54e Add an extended version of CalibrateCamera function 2016-06-07 12:31:11 +03:00
Pavel Rojtberg
8ed1945ccd calibrationMatrixValues: consider principalPoint in FOV computation
The FOV depends on the principal point location. Use formula of
viz::Camera.
2016-04-27 14:47:52 +02:00
Krishnaraj Bhat
9b8013d193 gcc6: fix misleading indentation warning
cosmetic changes to fix this warning.
real bugs not found
2016-03-07 17:06:16 +05:30
Vadim Pisarevsky
7fd5b3a0c5 added another triangulation test case from http://code.opencv.org/issues/3461; fixed partial derivative on distortion coefficients, as http://code.opencv.org/issues/4101 suggests 2015-05-23 14:15:11 +03:00
Vadim Pisarevsky
90a78585fb reproduced test case from http://code.opencv.org/issues/4334 2015-05-23 13:16:32 +03:00
Adil Ibragimov
8a4a1bb018 Several type of formal refactoring:
1. someMatrix.data -> someMatrix.prt()
2. someMatrix.data + someMatrix.step * lineIndex -> someMatrix.ptr( lineIndex )
3. (SomeType*) someMatrix.data -> someMatrix.ptr<SomeType>()
4. someMatrix.data -> !someMatrix.empty() ( or !someMatrix.data -> someMatrix.empty() ) in logical expressions
2014-08-13 15:21:35 +04:00
Roman Donchenko
799d2dabd6 Merge remote-tracking branch 'origin/2.4' into merge-2.4
Conflicts:
	modules/core/test/test_arithm.cpp
	modules/cuda/src/cascadeclassifier.cpp
	modules/imgproc/doc/geometric_transformations.rst
	modules/objdetect/src/hog.cpp
	modules/ocl/perf/perf_imgproc.cpp
	modules/ocl/src/gftt.cpp
	modules/ocl/src/moments.cpp
2014-04-14 16:08:02 +04:00
Maks Naumov
b033a63e63 fix typo in test_cameracalibration 2014-04-09 14:41:16 +03:00
Ilya Lavrenov
aa5326c231 cv::norm -> cvtest::norm in tests
Conflicts:

	modules/core/src/stat.cpp
2014-04-08 14:49:20 +04:00
Roman Donchenko
db85c35e69 Merge remote-tracking branch 'origin/2.4' into merge-2.4
Conflicts:
	modules/contrib/src/basicretinafilter.hpp
	modules/contrib/src/magnoretinafilter.hpp
	modules/contrib/src/parvoretinafilter.hpp
	modules/contrib/src/retinacolor.hpp
	modules/gpu/include/opencv2/gpu/gpu.hpp
	modules/highgui/src/cap_tyzx.cpp
	modules/ocl/perf/perf_filters.cpp
	modules/ocl/src/haar.cpp
	modules/ocl/src/opencl/haarobjectdetect.cl
	modules/ocl/test/test_filters.cpp
	modules/ocl/test/test_objdetect.cpp
2014-03-03 13:45:22 +04:00
Ilya Lavrenov
eedf86402d typos 2014-03-02 21:04:17 +04:00
Ilya Lavrenov
32eb38ec98 fixed defects from coverity.com 2014-02-23 20:21:08 +04:00
Roman Donchenko
721d0145e0 Merge pull request #2002 from abak:stereo_calibrate 2014-02-05 17:47:27 +04:00
Konstantin Matskevich
e9e9e00d45 replaced sprintf with cv::format 2014-01-17 13:01:12 +04:00
Konstantin Matskevich
ab18c2d132 changed testdata path for calib3d 2014-01-15 15:08:09 +04:00
Adrien BAK
c5c3fd4443 modify signature of stereoCalibrate for consistency 2013-12-17 14:53:44 +09:00
Andrey Kamaev
e5a33723fc Move C API of opencv_calib3d to separate file 2013-04-11 21:00:17 +04:00
Andrey Kamaev
2a6fb2867e Remove all using directives for STL namespace and members
Made all STL usages explicit to be able automatically find all usages of
particular class or function.
2013-02-25 15:04:17 +04:00
Andrey Kamaev
bd0e0b5800 Merged the trunk r8589:8653 - all changes related to build warnings 2012-06-15 13:04:17 +00:00
Andrey Kamaev
f2d3b9b4a1 Warning fixes continued 2012-06-09 15:00:04 +00:00
Vadim Pisarevsky
2fd1e2ea57 merged all the latest changes from 2.4 to trunk 2012-04-13 21:50:59 +00:00
Andrey Kamaev
c712f376d5 Fixed warnings about unused return value of fscanf, scanf and system 2012-04-10 15:44:07 +00:00
Marina Kolpakova
0ff5712d06 fixed few warnings 2012-04-07 12:47:23 +00:00
Ilya Lysenkov
1e1d7496ee Added a test for correctMatches (#1350) 2012-03-29 13:22:22 +00:00
Ilya Lysenkov
7901879e48 Added a test for the C++ wrapper of cvTriangulatePoints() 2012-03-29 10:39:48 +00:00
Andrey Kamaev
176eb83da6 Fixed Windows build 2012-03-27 20:56:30 +00:00
Ilya Lysenkov
e1378aad79 Added a check that Q reprojects to the same 3D points as reconstructed by triangulation (#1575) 2012-03-27 19:04:43 +00:00
Ilya Lysenkov
bc7b517e41 Added a check that Tx after rectification is equal to distance between cameras 2012-03-27 16:47:19 +00:00
Ilya Lysenkov
d9001d1a91 Added a check that Q (computed by rectification) reprojects a point before the camera 2012-03-27 15:01:26 +00:00
Vadim Pisarevsky
846e37ded5 fixed many warnings from GCC 4.6.1 2012-03-17 09:22:31 +00:00
Vadim Pisarevsky
abeeb40d46 a big patch; use special proxy types (Input/OutputArray, Input/OutputArrayOfArrays) for passing in vectors, matrices etc. 2011-04-17 13:14:45 +00:00
Vadim Pisarevsky
061b49e0b2 reworked nearly all of the OpenCV tests (except for opencv_gpu tests) - they now use the Google Test engine. 2011-02-09 20:55:11 +00:00