nareshmlx/opencv-pr huggingface dataset:
**File:** samples/python/aruco_detect_board_charuco.py
**Change Type:** added
**Context:** PR #23139: add python charuco sample
**Review Line:** 74

**Code Changes:**
```diff
+    board = cv.aruco.CharucoBoard(board_size, sqruare_len, marker_len, aruco_dict)
+    charuco_detector = cv.aruco.CharucoDetector(board)
+
+    image = None
+    input_video = None
+    wait_time = 10
+    if video != "":
+        input_video = cv.VideoCapture(cv.samples.findFileOrKeep(video, False))
+        image = input_video.retrieve()[1] if input_video.grab() else None
+    elif img_path == "":
+        input_video = cv.VideoCapture(camera_id)
```

Review comment:
> wait_time = 10 We don't need this variable actually.
**File:** samples/python/aruco_detect_board_charuco.py
**Change Type:** added
**Context:** PR #23139: add python charuco sample

**Code Changes:**
```diff
@@ -0,0 +1,115 @@
+#!/usr/bin/env python
+
+"""aruco_detect_board_charuco.py
+Usage example:
+python aruco_detect_board_charuco.py -w=5 -h=7 -sl=0.04 -ml=0.02 -d=10 -c=../data/aruco/tutorial_camera_charuco.yml
+                                     -i=../data/aruco/choriginal.jpg
+"""
+
+import argparse
```

Review comment:
`sys.exit(...)`
**File:** samples/python/aruco_detect_board_charuco.py
**Change Type:** added
**Context:** PR #23139: add python charuco sample

**Code Changes:**
```diff
@@ -0,0 +1,115 @@
+#!/usr/bin/env python
+
+"""aruco_detect_board_charuco.py
+Usage example:
+python aruco_detect_board_charuco.py -w=5 -h=7 -sl=0.04 -ml=0.02 -d=10 -c=../data/aruco/tutorial_camera_charuco.yml
+                                     -i=../data/aruco/choriginal.jpg
+"""
+
+import argparse
```

Review comment:
`cv.samples.findFileOrKeep()` should be used in samples.
**File:** samples/python/aruco_detect_board_charuco.py
**Change Type:** added
**Context:** PR #23139: add python charuco sample

**Code Changes:**
```diff
@@ -0,0 +1,115 @@
+#!/usr/bin/env python
+
+"""aruco_detect_board_charuco.py
+Usage example:
+python aruco_detect_board_charuco.py -w=5 -h=7 -sl=0.04 -ml=0.02 -d=10 -c=../data/aruco/tutorial_camera_charuco.yml
+                                     -i=../data/aruco/choriginal.jpg
+"""
+
+import argparse
```

Review comment:
`cv.samples.findFile()`
**File:** samples/python/aruco_detect_board_charuco.py
**Change Type:** added
**Context:** PR #23139: add python charuco sample

**Code Changes:**
```diff
@@ -0,0 +1,115 @@
+#!/usr/bin/env python
+
+"""aruco_detect_board_charuco.py
+Usage example:
+python aruco_detect_board_charuco.py -w=5 -h=7 -sl=0.04 -ml=0.02 -d=10 -c=../data/aruco/tutorial_camera_charuco.yml
+                                     -i=../data/aruco/choriginal.jpg
+"""
+
+import argparse
```

Review comment:
> jpg images Why jpg?
**File:** samples/python/aruco_detect_board_charuco.py
**Change Type:** added
**Context:** PR #23139: add python charuco sample

**Code Changes:**
```diff
@@ -0,0 +1,115 @@
+#!/usr/bin/env python
+
+"""aruco_detect_board_charuco.py
+Usage example:
+python aruco_detect_board_charuco.py -w=5 -h=7 -sl=0.04 -ml=0.02 -d=10 -c=../data/aruco/tutorial_camera_charuco.yml
+                                     -i=../data/aruco/choriginal.jpg
+"""
+
+import argparse
```

Review comment:
renamed variables
**File:** samples/python/aruco_detect_board_charuco.py
**Change Type:** added
**Context:** PR #23139: add python charuco sample

**Code Changes:**
```diff
@@ -0,0 +1,115 @@
+#!/usr/bin/env python
+
+"""aruco_detect_board_charuco.py
+Usage example:
+python aruco_detect_board_charuco.py -w=5 -h=7 -sl=0.04 -ml=0.02 -d=10 -c=../data/aruco/tutorial_camera_charuco.yml
+                                     -i=../data/aruco/choriginal.jpg
+"""
+
+import argparse
```

Review comment:
The argument parser defaults does not match the proposed example. Path to image is not correct The camera calibration file is not provided.
**File:** modules/dnn/src/onnx/onnx_importer.cpp
**Change Type:** modified
**Context:** PR #22290: Support for YOLOv7 ONNX (not simplified)

**Code Changes:**
```diff
@@ -180,6 +180,7 @@ class ONNXImporter
     void parseCumSum               (LayerParams& layerParams, const opencv_onnx::NodeProto& node_proto);
     void parseElementWise          (LayerParams& layerParams, const opencv_onnx::NodeProto& node_proto);
     void parseDepthToSpace         (LayerParams& layerParams, const opencv_onnx::NodeProto& node_proto);
+    void parseRange                (LayerParams& layerParams, const opencv_onnx::NodeProto& node_proto);
     void parseSimpleLayers         (LayerParams& layerParams, const opencv_onnx::NodeProto& node_proto);
 
     // Domain: com.microsoft
@@ -2427,20 +2428,22 @@ void ONNXImporter::parseExpand(LayerParams& layerParams, const opencv_onnx::Node
 
```

Review comment:
I think we could move this code to parseSimpleLayers with minimal changed and we get support for more constant layers, what do you think?
**File:** modules/dnn/src/onnx/onnx_importer.cpp
**Change Type:** modified
**Context:** PR #22290: Support for YOLOv7 ONNX (not simplified)

**Code Changes:**
```diff
@@ -180,6 +180,7 @@ class ONNXImporter
     void parseCumSum               (LayerParams& layerParams, const opencv_onnx::NodeProto& node_proto);
     void parseElementWise          (LayerParams& layerParams, const opencv_onnx::NodeProto& node_proto);
     void parseDepthToSpace         (LayerParams& layerParams, const opencv_onnx::NodeProto& node_proto);
+    void parseRange                (LayerParams& layerParams, const opencv_onnx::NodeProto& node_proto);
     void parseSimpleLayers         (LayerParams& layerParams, const opencv_onnx::NodeProto& node_proto);
 
     // Domain: com.microsoft
@@ -2427,20 +2428,22 @@ void ONNXImporter::parseExpand(LayerParams& layerParams, const opencv_onnx::Node
 
```

Review comment:
I would say it should be a rare case for other simple layers to take a constant as input. But in terms of better compatibility, let me do this. Layers that trigger parseSimpleLayers: https://github.com/opencv/opencv/blob/42561e1233659c30ab8f88b49212122984f6d218/modules/dnn/src/onnx/onnx_importer.cpp#L3632-L3635
**File:** modules/videoio/include/opencv2/videoio.hpp
**Change Type:** modified
**Context:** PR #23291: remove flags of obsolete VideoCapture backends
**Review Line:** 105

**Code Changes:**
```diff
        CAP_ANDROID      = 1000,         //!< Android - not used
        CAP_XIAPI        = 1100,         //!< XIMEA Camera API
        CAP_AVFOUNDATION = 1200,         //!< AVFoundation framework for iOS (OS X Lion will have the same API)
-       CAP_GIGANETIX    = 1300,         //!< Smartek Giganetix GigEVisionSDK
        CAP_MSMF         = 1400,         //!< Microsoft Media Foundation (via videoInput)
        CAP_WINRT        = 1410,         //!< Microsoft Windows Runtime using Media Foundation
        CAP_INTELPERC    = 1500,         //!< RealSense (former Intel Perceptual Computing SDK)
```

Review comment:
> `CAP_OPENNI` There are other leftovers: ``` $ grep -Rn CAP_OPENNI ./ | grep -v 'CAP_OPENNI_' | grep -v 'CAP_OPENNI2' ./modules/videoio/misc/gen_dict.json:3: "CV_CAP_OPENNI", ./modules/videoio/include/opencv2/videoio/legacy/constants_c.h:40: CV_CAP_OPENNI =900, // OpenNI (for Kinect) ./doc/tutorials/app/kinect_openni.markdown:61: VideoCapture capture( CAP_OPENNI ); ./doc/tutorials/app/kinect_openni.markdown:73: VideoCapture capture(0); // or CAP_OPENNI ./doc/tutorials/app/kinect_openni.markdown:91: VideoCapture capture( CAP_OPENNI ); ``` They need to be changed / removed too. (except may be legacy C constants) --- **Other values should be checked too.**
**File:** modules/core/test/test_mat.cpp
**Change Type:** modified
**Context:** PR #22346: Changes separated from Mat 1D support in core #18594

**Code Changes:**
```diff
@@ -2354,6 +2354,96 @@ TEST(Mat, regression_18473)
     EXPECT_EQ((int)5, (int)m.at<short>(19, 49, 99));
 }
 
+// FITIT: remove DISABLE_ when 1D Mat is supported
+TEST(Mat1D, DISABLED_basic)
+{
+    std::vector<int> sizes { 100 };
+    Mat m1(sizes, CV_8UC1, Scalar::all(5));
+    m1.at<uchar>(50) = 10;
```

Review comment:
In the test of core module, there is no skip flag like the one in dnn tests. So comment for now.
**File:** modules/core/test/test_mat.cpp
**Change Type:** modified
**Context:** PR #22346: Changes separated from Mat 1D support in core #18594

**Code Changes:**
```diff
@@ -2354,6 +2354,96 @@ TEST(Mat, regression_18473)
     EXPECT_EQ((int)5, (int)m.at<short>(19, 49, 99));
 }
 
+// FITIT: remove DISABLE_ when 1D Mat is supported
+TEST(Mat1D, DISABLED_basic)
+{
+    std::vector<int> sizes { 100 };
+    Mat m1(sizes, CV_8UC1, Scalar::all(5));
+    m1.at<uchar>(50) = 10;
```

Review comment:
You can add DISABLED_ to test name. It's compiled and skipped during default test execution.
**File:** modules/core/test/test_mat.cpp
**Change Type:** modified
**Context:** PR #22346: Changes separated from Mat 1D support in core #18594

**Code Changes:**
```diff
@@ -2354,6 +2354,96 @@ TEST(Mat, regression_18473)
     EXPECT_EQ((int)5, (int)m.at<short>(19, 49, 99));
 }
 
+// FITIT: remove DISABLE_ when 1D Mat is supported
+TEST(Mat1D, DISABLED_basic)
+{
+    std::vector<int> sizes { 100 };
+    Mat m1(sizes, CV_8UC1, Scalar::all(5));
+    m1.at<uchar>(50) = 10;
```

Review comment:
https://github.com/google/googletest/blob/main/docs/advanced.md#temporarily-disabling-tests
**File:** modules/core/src/minmax.cpp
**Change Type:** modified
**Context:** PR #22346: Changes separated from Mat 1D support in core #18594

**Code Changes:**
```diff
@@ -1565,13 +1565,24 @@ void cv::minMaxLoc( InputArray _img, double* minVal, double* maxVal,
 {
     CV_INSTRUMENT_REGION();
 
-    CV_Assert(_img.dims() <= 2);
+    int dims = _img.dims();
+    CV_CheckLE(dims, 2, "");
 
     minMaxIdx(_img, minVal, maxVal, (int*)minLoc, (int*)maxLoc, mask);
     if( minLoc )
```

Review comment:
`CV_CheckLE(dims, 2, "")` is preferable.
**File:** modules/core/test/test_mat.cpp
**Change Type:** modified
**Context:** PR #22346: Changes separated from Mat 1D support in core #18594

**Code Changes:**
```diff
@@ -2354,6 +2354,96 @@ TEST(Mat, regression_18473)
     EXPECT_EQ((int)5, (int)m.at<short>(19, 49, 99));
 }
 
+// FITIT: remove DISABLE_ when 1D Mat is supported
+TEST(Mat1D, DISABLED_basic)
+{
+    std::vector<int> sizes { 100 };
+    Mat m1(sizes, CV_8UC1, Scalar::all(5));
+    m1.at<uchar>(50) = 10;
```

Review comment:
Added prefix DISABLED_ to the test.
**File:** samples/python/multiview_calibration.py
**Change Type:** added
**Context:** PR #22363: add multiview calibration [GSOC 2022]

**Code Changes:**
```diff
@@ -0,0 +1,736 @@
+# This file is part of OpenCV project.
+# It is subject to the license terms in the LICENSE file found in the top-level directory
+# of this distribution and at http://opencv.org/license.html.
+
+import argparse
+import glob
+import json
+import multiprocessing
+import os
```

Review comment:
`gray` is already resized here. Corners after `corners /= scale` do not correspond to image here.
**File:** modules/calib/test/test_multiview_calib.cpp
**Change Type:** added
**Context:** PR #22363: add multiview calibration [GSOC 2022]
**Review Line:** 150

**Code Changes:**
```diff
+        CV_LOG_INFO(NULL, "found distortions: " << distortions[c]);
+        EXPECT_MAT_NEAR(distortions_gt[c], distortions[c], dist_tol);
+        EXPECT_MAT_NEAR(Rs_gt[c], R, R_tol);
+        EXPECT_MAT_NEAR(Ts_gt[c], Ts[c], T_tol);
+    }
+}
+}}
```

Review comment:
There are stereoCalibrate tests for pinhole and fisheye cameras with real data. I recommend you to re-use their input and ground truth to add tests with real calibration points. See https://github.com/opencv/opencv/blob/99d216c8d4cc722b8d4387c462c6aec8f61504f4/modules/calib/test/test_fisheye.cpp#L694 and https://github.com/opencv/opencv/blob/99d216c8d4cc722b8d4387c462c6aec8f61504f4/modules/calib/test/test_cameracalibration.cpp#L1242
**File:** samples/python/multiview_calibration.py
**Change Type:** added
**Context:** PR #22363: add multiview calibration [GSOC 2022]

**Code Changes:**
```diff
@@ -0,0 +1,736 @@
+# This file is part of OpenCV project.
+# It is subject to the license terms in the LICENSE file found in the top-level directory
+# of this distribution and at http://opencv.org/license.html.
+
+import argparse
+import glob
+import json
+import multiprocessing
+import os
```

Review comment:
the function expects that the board is visible on all images or at least we have images from all cameras. I propose to generate visibility matrix here and relay on file names. Images with the same file name are captured by different cameras in the same time and observe the same pattern.
**File:** modules/calib/include/opencv2/calib.hpp
**Change Type:** modified
**Context:** PR #22363: add multiview calibration [GSOC 2022]

**Code Changes:**
```diff
@@ -1122,6 +1122,47 @@ CV_EXPORTS_W double stereoCalibrate( InputArrayOfArrays objectPoints,
                                      OutputArray perViewErrors, int flags = CALIB_FIX_INTRINSIC,
                                      TermCriteria criteria = TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, 1e-6) );
 
+/** @brief Estimates intrinsics and extrinsics (camera pose) for multi-camera system a.k.a multiview calibraton.
+
+@param[in] objPoints Calibration pattern object points. Expected shape: NUM_FRAMES x NUM_POINTS x 3. Supported data type: CV_32F.
+@param[in] imagePoints Detected pattern points on camera images. Expected shape: NUM_CAMERAS x NUM_FRAMES x NUM_POINTS x 2.
+@param[in] imageSize   Images resolution.
+@param[in] detectionMask Pattern detection mask. Each value defines if i-camera observes calibration pattern in j moment of time.
```

Review comment:
Please document axis direction.
**File:** samples/python/multiview_calibration.py
**Change Type:** added
**Context:** PR #22363: add multiview calibration [GSOC 2022]

**Code Changes:**
```diff
@@ -0,0 +1,736 @@
+# This file is part of OpenCV project.
+# It is subject to the license terms in the LICENSE file found in the top-level directory
+# of this distribution and at http://opencv.org/license.html.
+
+import argparse
+import glob
+import json
+import multiprocessing
+import os
```

Review comment:
Syntax error here. try block is not closed with catch or finally. I propose just to replace try with `if __name__ == '__main__':` and do not hide exceptions, if any.
**File:** samples/python/multiview_calibration.py
**Change Type:** added
**Context:** PR #22363: add multiview calibration [GSOC 2022]

**Code Changes:**
```diff
@@ -0,0 +1,736 @@
+# This file is part of OpenCV project.
+# It is subject to the license terms in the LICENSE file found in the top-level directory
+# of this distribution and at http://opencv.org/license.html.
+
+import argparse
+import glob
+import json
+import multiprocessing
+import os
```

Review comment:
I propose to skip empty lines, if any. It allows to not store frames, where the pattern is not visible.
**File:** samples/python/multiview_calibration.py
**Change Type:** added
**Context:** PR #22363: add multiview calibration [GSOC 2022]

**Code Changes:**
```diff
@@ -0,0 +1,736 @@
+# This file is part of OpenCV project.
+# It is subject to the license terms in the LICENSE file found in the top-level directory
+# of this distribution and at http://opencv.org/license.html.
+
+import argparse
+import glob
+import json
+import multiprocessing
+import os
```

Review comment:
Current version for 5.x fails with exception: ``` Traceback (most recent call last): File "/home/alexander/Projects/OpenCV/opencv-next/samples/python/multiview_calibration.py", line 220, in <module> params.pattern_type, [bool(int(v)) for v in params.fisheye.split(',')], params.pattern_distance) File "/home/alexander/Projects/OpenCV/opencv-next/samples/python/multiview_calibration.py", line 194, in calibrateFromImages calibrateFromPoints(pattern, image_points_cameras, image_sizes, is_fisheye, all_images_names) File "/home/alexander/Projects/OpenCV/opencv-next/samples/python/multiview_calibration.py", line 93, in calibrateFromPoints flags_intrinsics=0) cv2.error: OpenCV(5.0.0-pre) :-1: error: (-5:Bad argument) in function 'calibrateMultiview' > Overload resolution failed: > - Required argument 'Ks' (pos 5) not found > - Required argument 'Ks' (pos 5) not found ```
**File:** samples/python/multiview_calibration.py
**Change Type:** added
**Context:** PR #22363: add multiview calibration [GSOC 2022]

**Code Changes:**
```diff
@@ -0,0 +1,736 @@
+# This file is part of OpenCV project.
+# It is subject to the license terms in the LICENSE file found in the top-level directory
+# of this distribution and at http://opencv.org/license.html.
+
+import argparse
+import glob
+import json
+import multiprocessing
+import os
```

Review comment:
fixed, I forgot to add CV_OUT.
**File:** samples/python/multiview_calibration.py
**Change Type:** added
**Context:** PR #22363: add multiview calibration [GSOC 2022]

**Code Changes:**
```diff
@@ -0,0 +1,736 @@
+# This file is part of OpenCV project.
+# It is subject to the license terms in the LICENSE file found in the top-level directory
+# of this distribution and at http://opencv.org/license.html.
+
+import argparse
+import glob
+import json
+import multiprocessing
+import os
```

Review comment:
added in new commit: https://github.com/opencv/opencv/pull/22363/commits/af8359e79347c6d6a5f57e2ead5d3f340fc5fa4e
**File:** samples/python/multiview_calibration.py
**Change Type:** added
**Context:** PR #22363: add multiview calibration [GSOC 2022]

**Code Changes:**
```diff
@@ -0,0 +1,736 @@
+# This file is part of OpenCV project.
+# It is subject to the license terms in the LICENSE file found in the top-level directory
+# of this distribution and at http://opencv.org/license.html.
+
+import argparse
+import glob
+import json
+import multiprocessing
+import os
```

Review comment:
replaced 'try' with if __name__ == '__main__' in new commit here: https://github.com/opencv/opencv/commit/af8359e79347c6d6a5f57e2ead5d3f340fc5fa4e
**File:** modules/calib/include/opencv2/calib.hpp
**Change Type:** modified
**Context:** PR #22363: add multiview calibration [GSOC 2022]

**Code Changes:**
```diff
@@ -1122,6 +1122,47 @@ CV_EXPORTS_W double stereoCalibrate( InputArrayOfArrays objectPoints,
                                      OutputArray perViewErrors, int flags = CALIB_FIX_INTRINSIC,
                                      TermCriteria criteria = TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, 1e-6) );
 
+/** @brief Estimates intrinsics and extrinsics (camera pose) for multi-camera system a.k.a multiview calibraton.
+
+@param[in] objPoints Calibration pattern object points. Expected shape: NUM_FRAMES x NUM_POINTS x 3. Supported data type: CV_32F.
+@param[in] imagePoints Detected pattern points on camera images. Expected shape: NUM_CAMERAS x NUM_FRAMES x NUM_POINTS x 2.
+@param[in] imageSize   Images resolution.
+@param[in] detectionMask Pattern detection mask. Each value defines if i-camera observes calibration pattern in j moment of time.
```

Review comment:
Rs will be array of rotation vectors: https://github.com/opencv/opencv/pull/22363/commits/822cfa465d73035bad85e33c7b2e5821e65779be
**File:** modules/calib/test/test_multiview_calib.cpp
**Change Type:** added
**Context:** PR #22363: add multiview calibration [GSOC 2022]
**Review Line:** 150

**Code Changes:**
```diff
+        CV_LOG_INFO(NULL, "found distortions: " << distortions[c]);
+        EXPECT_MAT_NEAR(distortions_gt[c], distortions[c], dist_tol);
+        EXPECT_MAT_NEAR(Rs_gt[c], R, R_tol);
+        EXPECT_MAT_NEAR(Ts_gt[c], Ts[c], T_tol);
+    }
+}
+}}
```

Review comment:
tests are added: https://github.com/opencv/opencv/pull/22363/commits/019915854b897f22478ea76f30a9fe45357adc62
**File:** doc/tutorials/calib3d/camera_multiview_calibration/multiview_calibration.markdown
**Change Type:** added
**Context:** PR #22363: add multiview calibration [GSOC 2022]
**Review Line:** 39

**Code Changes:**
```diff
+
+The intrinsics calibration incorporates estimation of focal lengths, skew, and principal point of the camera; these parameters are combined in the intrinsic upper triangular matrix of size 3x3. Additionally, intrinsic calibration includes finding distortion parameters of the camera. The extrinsics parameters represent a relative rotation and translation between two cameras. Therefore, for \f$N\f$ cameras, a sufficient amount of correctly selected pairs of estimated relative rotations and translations is \f$N-1\f$, while extrinsics parameters for all possible pairs \f$N^2 = N * (N-1) / 2\f$ could be derived from those that are estimated. More details about intrinsics calibration could be found in this tutorial @ref tutorial_camera_calibration_pattern, and its implementation @ref cv::calibrateCamera.
+
+After intrinsics and extrinsics calibration, the projection matrices of cameras are found by combing intrinsic, rotation matrices and translation. The projection matrices enable doing triangulation (3D reconstruction), rectification, finding epipolar geometry etc.
+
+The following sections describes the individual algorithmic steps of the overall multi-camera calibration pipeline:
+
+Briefly
+----
+The algorithm consists of three major steps that could be enumerated as follows:
+
```

Review comment:
I propose to start from the problem statement. We have several cameras that have FoW intersection and want to estimate ther internal parameters (intrinsics) and relative positions (extrinsics) ....
**File:** doc/tutorials/calib3d/camera_multiview_calibration/multiview_calibration.markdown
**Change Type:** added
**Context:** PR #22363: add multiview calibration [GSOC 2022]

**Code Changes:**
```diff
@@ -0,0 +1,252 @@
+Multi-view Camera Calibration Tutorial {#tutorial_multiview_camera_calibration}
+==========================
+
+@tableofcontents
+
+@prev_tutorial{tutorial_interactive_calibration}
+
+|    |    |
+| -: | :- |
```

Review comment:
I propose to add references to intrinsics calibration tutorial, interactive calibration app and cameraCalibrate functions at least.
**File:** doc/tutorials/calib3d/camera_multiview_calibration/multiview_calibration.markdown
**Change Type:** added
**Context:** PR #22363: add multiview calibration [GSOC 2022]

**Code Changes:**
```diff
@@ -0,0 +1,252 @@
+Multi-view Camera Calibration Tutorial {#tutorial_multiview_camera_calibration}
+==========================
+
+@tableofcontents
+
+@prev_tutorial{tutorial_interactive_calibration}
+
+|    |    |
+| -: | :- |
```

Review comment:
Please use references. It'll be even better to have reference on detailed camera model description with flags rather then individual flags without formulas.
**File:** doc/tutorials/calib3d/camera_multiview_calibration/multiview_calibration.markdown
**Change Type:** added
**Context:** PR #22363: add multiview calibration [GSOC 2022]
**Review Line:** 39

**Code Changes:**
```diff
+
+The intrinsics calibration incorporates estimation of focal lengths, skew, and principal point of the camera; these parameters are combined in the intrinsic upper triangular matrix of size 3x3. Additionally, intrinsic calibration includes finding distortion parameters of the camera. The extrinsics parameters represent a relative rotation and translation between two cameras. Therefore, for \f$N\f$ cameras, a sufficient amount of correctly selected pairs of estimated relative rotations and translations is \f$N-1\f$, while extrinsics parameters for all possible pairs \f$N^2 = N * (N-1) / 2\f$ could be derived from those that are estimated. More details about intrinsics calibration could be found in this tutorial @ref tutorial_camera_calibration_pattern, and its implementation @ref cv::calibrateCamera.
+
+After intrinsics and extrinsics calibration, the projection matrices of cameras are found by combing intrinsic, rotation matrices and translation. The projection matrices enable doing triangulation (3D reconstruction), rectification, finding epipolar geometry etc.
+
+The following sections describes the individual algorithmic steps of the overall multi-camera calibration pipeline:
+
+Briefly
+----
+The algorithm consists of three major steps that could be enumerated as follows:
+
```

Review comment:
Also need to point that the cameras should be in sync otherwise the solution does not work.