OpenCV Calibration Audit
Executive summary
Quality gates: PASSED
3 accepted calibration views from 3 files. OpenCV RMS: 0.20340 px.
Pass/fail quality gates
- minimum_valid_images — 3 accepted views meet the minimum.
Dataset counts and metrics
{
"discovered_count": 3,
"readable_count": 3,
"detected_count": 3,
"accepted_count": 3,
"warning_count": 2,
"rejected_count": 0,
"unreadable_count": 0,
"detection_rate": 1.0,
"coverage_grid": [
[
0,
0,
0,
0
],
[
0,
0,
3,
0
],
[
0,
0,
0,
0
]
],
"occupied_coverage_cells": 1,
"coverage_ratio": 0.08333333333333333,
"corner_density_grid": [
[
0,
19,
26,
7
],
[
0,
29,
40,
17
],
[
0,
4,
16,
4
]
],
"scale_min": 0.26277651193271157,
"scale_max": 0.46862020197127985,
"scale_median": 0.41266563998664263,
"scale_iqr": 0.10292184501928414,
"occupied_scale_bins": 3,
"rotation_range_degrees": 89.3570877095579,
"horizontal_perspective_range": 0.1370729353299674,
"vertical_perspective_range": 0.2598575602435533,
"duplicate_count": 0
}Coverage heatmap
Sharpness distribution
Board-region variance of Laplacian for calibration views.
Scale and pose diversity
- Board area: min 0.26277651193271157, median 0.41266563998664263, max 0.46862020197127985
- Occupied scale bins: 3
- Rotation range: 89.3570877095579°
- Perspective ranges: horizontal 0.1370729353299674, vertical 0.2598575602435533
These assessments are heuristic, not a physical certificate.
Calibration parameters
{
"camera_model": "pinhole",
"image_size": [
640,
480
],
"opencv_rms": 0.20340291970181212,
"camera_matrix": [
[
535.4891370284612,
0.0,
341.6228649364716
],
[
0.0,
536.7293891622663,
234.43436418806436
],
[
0.0,
0.0,
1.0
]
],
"distortion_coefficients": [
-0.3167297374324814,
0.21519540968566292,
0.0016617683409911475,
0.0009056149866629888,
-0.16542528687003036
],
"rotation_vectors": [
[
-0.4343827824153476,
0.26711541650527393,
-3.0868237724543386
],
[
0.6878954813521805,
-0.4395432201112522,
1.6552546571540114
],
[
-0.2644229356490152,
-0.39376875227334673,
-2.747693589710688
]
],
"translation_vectors": [
[
0.14275680805780136,
0.02681254482728464,
0.4392453956190113
],
[
0.09962415135176081,
-0.05094937457297831,
0.25429897380302097
],
[
0.1186726034405404,
0.09085357999699209,
0.29068391619419687
]
],
"calibration_flags": 0,
"mean_per_view_rmse_px": 0.20260696602909348
}Reprojection-error chart
Accepted, warning, and rejected images
Annotated previews show detected inner corners and the evaluated physical board boundary.
| Preview | Image and decision | Metrics | Decision details |
|---|---|---|---|
|
|
left01.jpg ACCEPTED Accepted for calibration Detector: findChessboardCornersSB |
Physical board area: 0.26277651193271157 Board sharpness: 579.8427672879492 In-sample RMSE: 0.1974014474935786 |
No warnings or rejection reasons. |
|
|
left02.jpg WARNING Accepted with warning Detector: findChessboardCornersSB |
Physical board area: 0.41266563998664263 Board sharpness: 340.73278981353707 In-sample RMSE: 0.22675551335368663 |
|
|
|
left03.jpg WARNING Accepted with warning Detector: findChessboardCornersSB |
Physical board area: 0.46862020197127985 Board sharpness: 587.9059410669647 In-sample RMSE: 0.18366393724001526 |
|
Configuration and tool version
Version 0.2.1; generated 2026-07-31T12:00:00+03:00
{
"pattern": {
"cols": 9,
"rows": 6,
"square_size": 30.0,
"unit": "mm"
},
"recursive": false,
"min_valid_images": 3,
"min_board_area": 0.01,
"max_board_area": 0.9,
"min_sharpness": null,
"max_per_view_error": null,
"disable_fallback_detector": false,
"fail_on_warning": false,
"overwrite_output": false,
"log_level": "INFO",
"coverage_cols": 4,
"coverage_rows": 3,
"max_file_size_mb": 100,
"near_border_ratio": 0.01,
"relative_sharpness_factor": 0.35,
"duplicate_center_distance": 0.03,
"duplicate_log_area_distance": 0.08,
"duplicate_rotation_degrees": 5.0,
"duplicate_perspective_distance": 0.08,
"min_coverage_ratio": 0.35,
"min_scale_bins": 3,
"min_rotation_range_degrees": 15.0
}Metric limitations
Sharpness depends on resolution, optics, and target scale. Coverage and diversity thresholds are heuristics. Per-view reprojection error is an in-sample residual: it is calculated after fitting the camera model on the same accepted dataset and is not independent validation. Calibration results apply only to the accepted dataset and pinhole model.