The open source OpenXR runtime
1{
2 "$schema": "http://json-schema.org/draft-07/schema",
3 "title": "Monado calibration file schema v2",
4 "type": "object",
5 "required": [
6 "metadata",
7 "cameras",
8 "opencv_stereo_calibrate"
9 ],
10 "properties": {
11 "$schema": {
12 "type": "string",
13 "title": "JSON Schema directive",
14 "default": "https://monado.pages.freedesktop.org/monado/calibration_v2.schema.json"
15 },
16 "metadata": {
17 "description": "Calibration file metadata",
18 "type": "object",
19 "required": [
20 "version"
21 ],
22 "properties": {
23 "version": {
24 "const": 2
25 }
26 }
27 },
28 "cameras": {
29 "type": "array",
30 "minItems": 2,
31 "maxItems": 2,
32 "description": "Stereo calibrated cameras",
33 "items": {
34 "$ref": "#/$defs/camera"
35 }
36 },
37 "opencv_stereo_calibrate": {
38 "$ref": "#/$defs/opencv_stereo_calibrate"
39 }
40 },
41 "$defs": {
42 "camera": {
43 "type": "object",
44 "required": [
45 "name",
46 "model",
47 "intrinsics",
48 "distortion",
49 "resolution"
50 ],
51 "properties": {
52 "name": {
53 "$ref": "#/$defs/camera_name"
54 },
55 "model": {
56 "description": "Camera and distortion model",
57 "enum": [
58 "pinhole_radtan5",
59 "fisheye_equidistant4"
60 ]
61 },
62 "intrinsics": {
63 "type": "object",
64 "required": [
65 "fx",
66 "fy",
67 "cx",
68 "cy"
69 ],
70 "properties": {
71 "fx": {
72 "type": "number"
73 },
74 "fy": {
75 "type": "number"
76 },
77 "cx": {
78 "type": "number"
79 },
80 "cy": {
81 "type": "number"
82 }
83 }
84 },
85 "distortion": {
86 "description": "Parameters for the specified distortion model. radtan5: k1,k2,p1,p2,k3. equidistant4: k1,k2,k3,k4.",
87 "$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.",
88 "oneOf": [
89 {
90 "$ref": "#/$defs/equidistant4"
91 },
92 {
93 "$ref": "#/$defs/radtan5"
94 }
95 ]
96 },
97 "resolution": {
98 "type": "object",
99 "required": [
100 "width",
101 "height"
102 ],
103 "properties": {
104 "width": {
105 "type": "integer"
106 },
107 "height": {
108 "type": "integer"
109 }
110 }
111 }
112 }
113 },
114 "camera_name": {
115 "description": "Display name; not necessarily unique.",
116 "type": "string",
117 "maxLength": 128
118 },
119 "opencv_stereo_calibrate": {
120 "description": "Data produced by cv::stereoCalibrate.",
121 "type": "object",
122 "required": [
123 "rotation",
124 "translation",
125 "essential",
126 "fundamental"
127 ],
128 "additionalProperties": false,
129 "properties": {
130 "rotation": {
131 "$ref": "#/$defs/mat3x3d"
132 },
133 "translation": {
134 "$ref": "#/$defs/mat3x1d"
135 },
136 "essential": {
137 "$ref": "#/$defs/mat3x3d"
138 },
139 "fundamental": {
140 "$ref": "#/$defs/mat3x3d"
141 }
142 }
143 },
144 "mat3x3d": {
145 "type": "array",
146 "items": {
147 "type": "number"
148 },
149 "minItems": 9,
150 "maxItems": 9
151 },
152 "mat3x1d": {
153 "type": "array",
154 "items": {
155 "type": "number"
156 },
157 "minItems": 3,
158 "maxItems": 3
159 },
160 "equidistant4": {
161 "type": "object",
162 "required": [
163 "k1",
164 "k2",
165 "k3",
166 "k4"
167 ],
168 "additionalProperties": false,
169 "properties": {
170 "k1": {
171 "type": "number"
172 },
173 "k2": {
174 "type": "number"
175 },
176 "k3": {
177 "type": "number"
178 },
179 "k4": {
180 "type": "number"
181 }
182 }
183 },
184 "radtan5": {
185 "type": "object",
186 "required": [
187 "k1",
188 "k2",
189 "p1",
190 "p2",
191 "k3"
192 ],
193 "additionalProperties": false,
194 "properties": {
195 "k1": {
196 "type": "number"
197 },
198 "k2": {
199 "type": "number"
200 },
201 "p1": {
202 "type": "number"
203 },
204 "p2": {
205 "type": "number"
206 },
207 "k3": {
208 "type": "number"
209 }
210 }
211 }
212 }
213}