From 7bd608ce16163a73ce4411aa9f6110e15699ebdf Mon Sep 17 00:00:00 2001 From: Vadim Pisarevsky Date: Fri, 2 Mar 2018 21:45:25 +0300 Subject: [PATCH] Created OE 20. Module Calibration (markdown) --- OE-20.-Module-Calibration.md | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 OE-20.-Module-Calibration.md diff --git a/OE-20.-Module-Calibration.md b/OE-20.-Module-Calibration.md new file mode 100644 index 0000000..ffd097b --- /dev/null +++ b/OE-20.-Module-Calibration.md @@ -0,0 +1,33 @@ +## Introduce a separate camera calibration module + +* Author: Vadim Pisarevsky +* Link: TBD +* Status: **Draft** +* Platforms: **All** +* Complexity: 1-2 man-months + +## Introduction and Rationale + +The module [calib3d](https://github.com/opencv/opencv/tree/master/modules/calib3d) from OpenCV 2.x and 3.x includes various functionality including camera calibration algorithms. At the same time, there is experimental [ccalib module in opencv_contrib](https://github.com/opencv/opencv_contrib/tree/master/modules/ccalib) that includes some new camera calibration algorithms. There is also [aruco](https://github.com/opencv/opencv_contrib/tree/master/modules/aruco) module that implements detection of the fancy camera calibration rig. It makes sense to consolidate all this code in a dedicated module. + +## Proposed solution + +Create a dedicated `calib` or `ccalib` module in the main repository with the refined camera calibration functionality from `calib3d` and `ccalib` (and may be `aruco`). All the functionality should be rewritten without using old C API. The obsolete non-robust code should be excluded. In particular, we now have many camera pose estimation algorithms (wrapped into `cv::solvePnP()`), but many of them do not work well and thus are excluded. The RANSAC variant of `cv::solvePnP()` also does not work well (links needed) and should be refined. + +There is also very good [interactive camera calibration app](https://github.com/opencv/opencv/tree/master/apps/interactive-calibration). Perhaps, parts of it should be put to the module as well, and the app itself can be made a sample inside this module. + +As a stretch goal, much more radical changes and new features can be put. For example, Rodrigues vector seems to be inferior to quaternions, so we should probably use the latter for rotation vectors. + +Also, there are some very interesting self-calibration algorithms, such as [BAZAR](https://cvlab.epfl.ch/software/bazar) (is it the correct link?) that may also be put into the library. But that's probably a longer-term goals. + +## Impact on existing code, compatibility + +Overall, the external API will change slightly, if any, but users will have to put some other include directives in their code (or keep using `#include "opencv2/opencv.hpp"`). + +## Possible alternatives + +nothing really; we need to consolidate the camera calibration code. + +## References + +TBD \ No newline at end of file