File Formats¶
This page gives information about the file formats used by Calcam to store data. This may be useful if you want to read the contents of these files from other software or manually manipulate them. The table below summarises the types of files used by Calcam; click on the file contents in the left-hand row of the table to go to the section below with more details.
File Contents | File Extension | Format Description |
---|---|---|
Calibrations | .ccc | Zip file |
Point Pairs | .csv | CSV table |
CAD Models | .ccm | Zip file |
Raycast Results | .nc | NetCDF |
Geometry Matrices | .npz | NuMPy zip format |
.mat | MATLAB binary | |
.zip | Zipped ASCII | |
Camera Movement Corrections | .cmc | JSON |
Calibrations¶
Calcam calibration files are zip archive files, i.e. can be opened with a zip archive manager, and have file extension .ccc. The structure inside the zip file can contain the following:
Calibration File (.ccc)
|
├── image.png # Camera image being calibrated, in display orientation (present for fitting or manual alignment calibrations)
├── subview_mask.png # Mask image showing which image pixels belong to which sub-views. Pixels with no image contain value 255.
├── pointpairs.csv # Calibration point pair coordinates, see section below for format (present for point fitting calibrations)
├── calibration.json # JSON file containing calibration metadata and configuration
|
├── calib_params_0.json # For each image sub-view 0 to N, JSON files containing the
├── ... # fitted intrinsic and extrinsic calibration paremeters
├── calib_params_N.json #
|
├── cad_config.json # JSON file containing last-used CAD model configuration (name of CAD model, viewport, enabled features).
|
└── intrinsics_constraints # Folder containing additional fitting constraints (e.g. chessboard images or images from other calibrations)
|
├── im_000.png # For each additional intrinsics constraint 0...N, an image PNG file and pointpairs CSV file.
├── points_000.csv
├── ...
├── im_NNN.png
└── points_NNN.png
Point Pairs¶
Point pairs are stored in human-readable comma-separated tables in .csv files. These give the correspondence between 3D coordimates on the CAD model and image pixel coordinates in each image sub-view. An example layout of a point pairs file for an image with 2 sub-views is shown below:
World Coordinates [m] | Sub-view 0 | Sub-view 1 | ||||||
Machine X | Machine Y | Machine Z | Image X | Image Y | Image X | Image Y | ||
-3.7296 | -0.2063 | -0.4603 | 201.23 | 339.66 | ||||
-3.7358 | 0.2128 | -0.4593 | 227.2 | 336.2 | ||||
-3.887 | -0.2041 | 0.4694 | 192.35 | 216.91 | ||||
-3.8964 | 0.2144 | 0.4628 | 218.54 | 223.7 |
There are 2 header rows, then each numerical row consists of, from left-to-right: 3D X, Y, Z of each point, then for each sub-view a blank cell followed by the image X and Y. Each point can have image coordinates in 1 or more sub-views (i.e. if a 3D point is visible in multiple sub-views, the image coordinates can be populated in the columns corresponding to all of those sub-views).
CAD Models¶
Similarly to calibrations, CAD model definition files are zip archives but with extension .ccm. The easiest (and recommended) way to construct or edit them is with the CAD Model Definition Editor. The contents of the zip file follow the structure shown below:
CAD Definition File (.ccm)
|
├── model.json # JSON file containing metadata including model variants, mapping of mesh files to named features, default colours, pre-set viewports.
├── wall_contour.txt # If present, 2-column ASCII table of R,Z locations tracing out the wall contour in the R,Z plane.
|
└── usercode # Folder containing python code for custom format coordinate display. May contain .py files and/or subfolders
|
└── .large # Folder containing the actual mesh data
|
├── Model variant 1 # Typically (but not necesserily) 1 folder per model variant
| |
| ├── featureA.stl # Individual CAD mesh files in .stl or .obj format.
| └── featureB.obj
|
└── Model variant 2
|
├── featureA.stl
└── featureB.obj
Raycast Results¶
Ray casting results are stored in NetCDF files with extension .nc
. This file contains:
NetCDF Attributes¶
history
Human readable provenance of the data.
image_transform_actions
List of geometrical transformations to convert the camera image corresponding to this calibration from Original to Display coordinates.
NetCDF Variables¶
PixelXLocation
Horizontal (x) position on the detector, in pixels, at each point which has been ray-casted. Note that these coordinates are Display coordinates, regardless of how the raycasting was called. Shape depends on how the ray-casting was called.
PixelYLocation
Vertical (y) position on the detector, in pixels, at each point which has been ray-casted. Note that these coordinates are Display coordinates, regardless of how the raycasting was called. Shape depends on how the ray-casting was called.
RayStartCoords
The 3D starting position of the rays (i.e. the camera pupil position) in metres. This array has the same shape as
PixelXLocation
andPixelYLocation
with an additional dimension to store the X,Y,Z components of the location.
RayEndCoords
The 3D ending position of the rays (i.e. the point where the ray intersects the CAD model) in metres. This array has the same shape as
PixelXLocation
andPixelYLocation
with an additional dimension to store the X,Y,Z components of the location.
ModelNormals
The 3D surface normal vectors at the points of intersection between the sight-lines and CAD model. This array has the same shape as
PixelXLocation
andPixelYLocation
with an additional dimension to store the X,Y,Z components of the vectors. This is only present if the calc_normals=True argument was used when doing the ray-casting.
Binning
If the raycast was for the entire image, this contains the image binning factor used when raycasting.
image_original_shape
2-element array containing the (width,height) shape of the image (in original orientation)
image_offset
2-element array giving the (x,y) offset of the (0,0) pixel position in this data compared with the full camera detector (i.e. used if the raycast is for a sub-window of the detector)
image_original_pixel_aspect
The pizel aspect ratio in the original image.
Geometry Matrices¶
Geometry matrices can be saved in 3 different formats: NumPy zip files (.npz
) which can be loaded with numpy.load()
; matlab .mat
files, or .zip
files containing ASCII data files. Whichever format the files are saved in, they contain the following variables / data:
Note
When saved in .zip
format, the follwing variables are saved as fields in a JSON
file called metadata.json
: mat_shape, binning, pixel_order, grid_type, history , im_transform_actions , im_px_aspect, im_coords
. The other variables listed below are saved in individual .txt files.
mat_shape
2-element array giving the shape (n_rows, n_columns) of the geometry matrix
im_shape
2-element array giving the (width,height) of the camera image
im_coords
Whether the pixel layout in this matrix is based on starting with an image in ‘Display’ or ‘Original’ orientation
mat_row_inds
Row indices of each matrix element stored in
mat_data
. This is a 1D array with number of elements = number of non-zero entries in the geometry matrix.
mat_col_inds
Column indices of each matrix element stored in
mat_data
. This is a 1D array with number of elements = number of non-zero entries in the geometry matrix.
mat_data
The actual geometry matrix data. The position of each element of this array in the geometry matrix is given by the corresponding entries in
mat_row_inds
andmat_col_inds
. This is a 1D array with number of elements = number of non-zero entries in the geometry matrix.
grid_verts
Nx2 array, where N is the number of vertices in the reconstruction grid. Each row of this array is the R,Z position of a vertex in the reconstruction grid.
grid_cells
N_cells x N_verts_per_cell array defining the reconstruction grid cells. Each row of this array corresponds to a single grid cell and gives the indices in to the first dimension of
grid_verts
for all of the vertices of that grid cell.
grid_wall
Array containing the device wall contour in the R, Z plane. This is an Nx2 array where N is the number of points in the wall contour.
binning
Image binning factor the matrix is to be used with
pixel_order
The order of 2D -> 1D array unwrapping when re-shaping the 2D image to a 1D vector for use with this matrix. This is a string, either ‘C’ for left-to-right, then row-by-row, or ‘F’ for top-to-bottom, then column-by-column.
pixel_mask
Boolean array the same size as the (un-binned) image indicating whether each pixel has been included (if True) or not included (if False) in the matrix.
history
Human readable provenance of the geometry matrix
grid_type
Name of the calcam class identifying the type of reconstruction grid
im_transforms
List of geometrical transforms to transform the camera image from Original to Display orientation
im_px_aspect
The pixel aspect ratio of the raw camera image.
Camera Movement Corrections¶
Movement corrections are saved as JSON formatted ASCII files with extension .cmc
. The JSON data contains the following fields:
transform_matrix
The affine transform matrix to transform “moved” coordinates in to alignment with “reference” coordinates.
im_array_shape
The (x,y) dimensions of the image to which this correction applies.
ref_points
Pixel coordinates (x,y in display coordinates) of the matching points used to determine the transform in the “reference” image.
moved_points
Pixel coordinates (x,y in display coordinates) of the matching points used to determine the transform in the “moved” image.
history
Human-readable provenance of the data.