-
Notifications
You must be signed in to change notification settings - Fork 62
Description
This is a preliminary proposal and discussion for axes and coordinate transformations. For more details see:
- this early version of the specification.
- this page of examples for a growing list of concrete descriptions of particular use cases.
- this page of notes, rationale, and brainstorming
Add discrete axes
Extend the axes specification, adding a new optional field discrete whose values are booleans. Discrete axes should not be interpolated, whereas continuous axes may be interpolated. For example, the channels are usually discrete:
{"name": "c", "type": "channel", "discrete": true },
{"name": "y", "type": "space", "unit": "micrometer"},
{"name": "x", "type": "space", "unit": "micrometer"},Add spaces
A space is a named list of axes and defines the coordinate system of the data. Two simple examples - a viewer may prefer the physical spatial coordinates of data:
{
"name" : "physical-micrometers",
"axes" : [
{"name": "y", "type": "space", "unit": "micrometer"},
{"name": "x", "type": "space", "unit": "micrometer"}
]
}where an algorithm that processes pixels may prefer the discrete pixel grid:
"name" : "pixel-space",
"axes" : [
{"name": "j", "type": "space", "discrete": true },
{"name": "i", "type": "space", "discrete": true }
]array space
This is a nice default that does not hurt much that I can see, and is more concise than alternatives. See my brainstorming here.
Every array / dataset has a default space whose name is the empty string. It's axes have default names dim_i, are discrete, and there exist as many axes as array dimensions. For example, a 3D dataset's array space is
{
"name" : "",
"axes" : [
{"name": "dim_0", "discrete": true },
{"name": "dim_1", "discrete": true }
]
}Array space is shared across all datasets, so if any applications need to differentiate between them, a new discrete space should be explicitly defined with other, unique axis names.
coordinateTransformations
This proposal adds the idea that a coordinateTransformation is a function from one space to another space to the existing coordinateTransformations metadata. coordinateTransformations will now have new fields:
input_spaceandoutput_space, whose values are strings corresponding to the names of definedspacesinput_axesandoutput_axeswhose values are arrays of strings corresponding to axis names. (See below)namewhose value is a string, makes it possible to reference a transformation.
For example, assuming "array space" and the "physical-micrometers" space defined above:
{
"name" : "pixels-to-micrometers",
"type" : "scale",
"scale" : [1.1, 2.2],
"input_space" : "",
"output_space": "physical-micrometers"
}this is equivalent to:
{
"name" : "pixels-to-micrometers",
"type" : "scale",
"scale" : [1.1, 2.2],
"input_axes" : ["dim_0", "dim_1"],
"output_axes": ["y", "x"]
}Providing input_axes and output_axes enables transforming subsets of axes as in this example.
Specific questions
- We considered using the name "view" instead of "space"
- but giving a name to the raw data array is nice, and that's arguably not a "view"
- Is the default, nameless "array space" worthwhile? Are its axis names appropriate?
- Where are these space + transform metadata stored in the container?
- all together in the root or special location? with the metadata for particular datasets?
- If you have a use case this does not cover, please add that use case here User stories transformations #84
- Are multiple transformations between two spaces, in the same direction allowed?
- I propose "not now, but probably later"
See also
- Add axes field to multiscale metadata #46
- User stories transformations #84
- Transformation Specification #28
- Compatibility with xarray #48
- affines and dimensions #74
- Data dimensionality and axes metadata #35
- Define the origin w.r.t. the pixel corner or center #89
- (Nonlinear) Transformation specification #30
Thanks
This took shape with the help of lots of people.
@constantinpape @xulman @tischi @sbesson @axtimwalde @tpietzsch @d-v-b @joshmoore @jbms @thewtex @dzenanz @lassoan @satra @jni
organizers and participants of the 2022 Bioimage Hackathon, and even more.