monado/doc/example_configs/calibration_v2.schema.json

214 lines
6.1 KiB
JSON

{
"$schema": "http://json-schema.org/draft-07/schema",
"title": "Monado calibration file schema v2",
"type": "object",
"required": [
"metadata",
"cameras",
"opencv_stereo_calibrate"
],
"properties": {
"$schema": {
"type": "string",
"title": "JSON Schema directive",
"default": "https://monado.pages.freedesktop.org/monado/calibration_v2.schema.json"
},
"metadata": {
"description": "Calibration file metadata",
"type": "object",
"required": [
"version"
],
"properties": {
"version": {
"const": 2
}
}
},
"cameras": {
"type": "array",
"minItems": 2,
"maxItems": 2,
"description": "Stereo calibrated cameras",
"items": {
"$ref": "#/$defs/camera"
}
},
"opencv_stereo_calibrate": {
"$ref": "#/$defs/opencv_stereo_calibrate"
}
},
"$defs": {
"camera": {
"type": "object",
"required": [
"name",
"model",
"intrinsics",
"distortion",
"resolution"
],
"properties": {
"name": {
"$ref": "#/$defs/camera_name"
},
"model": {
"description": "Camera and distortion model",
"enum": [
"pinhole_radtan5",
"fisheye_equidistant4"
]
},
"intrinsics": {
"type": "object",
"required": [
"fx",
"fy",
"cx",
"cy"
],
"properties": {
"fx": {
"type": "number"
},
"fy": {
"type": "number"
},
"cx": {
"type": "number"
},
"cy": {
"type": "number"
}
}
},
"distortion": {
"description": "Parameters for the specified distortion model. radtan5: k1,k2,p1,p2,k3. equidistant4: k1,k2,k3,k4.",
"$comment": "There is no easy way to enforce the fields parameters in the schema based on the `model` property, the if-then validation could help but still would be very cumbersome.",
"oneOf": [
{
"$ref": "#/$defs/equidistant4"
},
{
"$ref": "#/$defs/radtan5"
}
]
},
"resolution": {
"type": "object",
"required": [
"width",
"height"
],
"properties": {
"width": {
"type": "integer"
},
"height": {
"type": "integer"
}
}
}
}
},
"camera_name": {
"description": "Display name; not necessarily unique.",
"type": "string",
"maxLength": 128
},
"opencv_stereo_calibrate": {
"description": "Data produced by cv::stereoCalibrate.",
"type": "object",
"required": [
"rotation",
"translation",
"essential",
"fundamental"
],
"additionalProperties": false,
"properties": {
"rotation": {
"$ref": "#/$defs/mat3x3d"
},
"translation": {
"$ref": "#/$defs/mat3x1d"
},
"essential": {
"$ref": "#/$defs/mat3x3d"
},
"fundamental": {
"$ref": "#/$defs/mat3x3d"
}
}
},
"mat3x3d": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 9,
"maxItems": 9
},
"mat3x1d": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 3,
"maxItems": 3
},
"equidistant4": {
"type": "object",
"required": [
"k1",
"k2",
"k3",
"k4"
],
"additionalProperties": false,
"properties": {
"k1": {
"type": "number"
},
"k2": {
"type": "number"
},
"k3": {
"type": "number"
},
"k4": {
"type": "number"
}
}
},
"radtan5": {
"type": "object",
"required": [
"k1",
"k2",
"p1",
"p2",
"k3"
],
"additionalProperties": false,
"properties": {
"k1": {
"type": "number"
},
"k2": {
"type": "number"
},
"p1": {
"type": "number"
},
"p2": {
"type": "number"
},
"k3": {
"type": "number"
}
}
}
}
}