Data outputs from the Arbitrary Charts Module are very different from other modules in Imatest.
- Only JSON files are output, no CSV or XML.
- The structure of the JSON is substantially different than other modules.
- If many images are run in a batch, the results from all images are contained in a single JSON.
Since the Arbitrary Charts Module is based on the concept of custom layout of features, there is no fixed structure to the measurement results which it produces. Instead, the module simply produces results based on whatever it observes in the test image. The set of results produced depends on the set available for that type of feature (outlined below) and user options for enabling or disabling each analysis type.
Example: Slanted Edge ROI outputs
If Imatest observes a slanted edge (based on a SlantedEdgeFeature or from one side of a SlantedSquareFeature) in a test image, it will produce all of the results that can be calculated from a slanted edge, such as MTF (and from this, acutance), chromatic aberration, edge roughness, etc. (If each of these has been requested for calculation in the user options, that is. By default, they typically are.)
All of these results will then be grouped in the output JSON under a field entry named “Slanted_Edge_N”, where N is the unique index of the edge (more on this below). Each result based on this observed edge will be have its own entry, as seen in the diagram below.
ROI results vs System results
Very roughly speaking, Imatest offers some measurements based specifically on a single ROI and some measurements which tell you about the whole “system” based on multiple ROI.
For example, all the various results related to observing a single slanted edge (see the above figure) are ROI results while a geometric distortion result — which is based on many observed points around the entire image plane — would be a System result.
- Only one of each system result is produced per test image
- An ROI result is generated for each instance of the corresponding ROI type
Sometimes, a system result will contain an array of per-ROI results, with the relevant measurements gathered in these sub-results. This is very typical of grayscale- and color-patch features, which are used to generate measurements of noise, tonal response, color accuracy, etc. Though Imatest could give all such results individually for each patch at the top level, they are more usefully when offered in the context of the system result.
Per-ROI Result Indexing
Per-ROI results are reported in a JSON object located under a field labeled “<ROI TYPE>_N”, where N is the unique index value which identifies each ROI of a given type. (For example: “Random_Field_1”.) These indices correspond directly to the “ind” value entry defining each feature in the chart definition file.
To relate entries found in the Arbitrary Results JSON to specific features on the chart, cross-reference with the chart definition file. (Hint: The Chart Definition Utility can be useful for this, if you choose to show feature indices.)
Slanted Edge Indexing
Slanted edge ROI indexing extends the above rule. This is necessary because:
- there are two ways to create a slanted edge ROI on a chart (SlantedEdgeFeature and SlantedSquareFeature), and
- each SlantedSquareFeature implies four slanted edge ROIs, but itself only has only a single index.
The extended indexing rule for slanted edges is as follows (and is illustrated below):
- If there are S many SlantedEdgeFeatures defined on the chart, the first S indexed results correspond to those. (Note that S is simply 0 for charts that don’t have any SlantedEdgeFeatures defined, so any slanted-square-derived edges will start at index 1.)
- Every SlantedSquareFeature adds four edge indices to the list in the order of top, right, bottom, left edge. The order in which these are added is based on the index of the SlantedSquareFeatures.
Result JSON structure
JSON outputs from the Arbitrary Charts Module have the following hierarchical structure.
Top-level object (with fields) ;
Info (Object containing fields with information about the run time, Imatest version, etc)
Results_array_sources (array of strings naming the image sources which were used to generate the following array of results)
Results (array of objects, one per entry in Results_array_sources)
The Results entry of the top level JSON object is an array, each entry of which contains the measurements taken from an image. The ordering of the string entries to Results_array_sources indicates the ordering of the source images which produced the results-bearing-objects in the array contained in Results.
Note: Even in the case of a module run on a single image, the Results and Results_array_sources fields each contain a 1-element array containing their respective entries. This makes the JSON structure more consistent and predictable for simpler machine parsing.
Following is a listing of the hierarchical structure of the objects in the Results array. Below, we use the notation that text in bold indicates a JSON object, and the “[… something_n …]” construct indicates an array of objects each indexed by different values of n (typically relating to chart feature indices as described above). Standard text indicates a field in an object.
(Note: The following information about output JSONs indicates the structure as of the latest release of Imatest 5.0.n. Exact object names and organization may be slightly different in previous versions.)
Slanted Edges[ …
Dead Leaves/Spilled Coins Patterns[ …
*selected channel*_Grid (note: there may be multiple selected uniformity grid channels, each will have an entry)
*selected color error*_deltaC (note: there may be multiple selected uniformity grid color errors, each will have two entries)
*selected color error*_deltaE