-
Notifications
You must be signed in to change notification settings - Fork 0
NotesJune2022
Notes for an in-person discussion at the Janelia Cell Map hackathon June 2022
Suppose we have an array 3 x N x M that should be interpreted as an N x M RGB image.
Example RGB image metadata
{
"spaces" : [
{
"name" : "rgb",
"axes" : [
{ "name" : "c", "type" : "channel", "discrete" : true },
{ "name" : "x", "type" : "space", "unit" : "micrometers" },
{ "name" : "y", "type" : "space", "unit" : "micrometers" }
]
}
],
"coordinateTransformations" : [
{ "type" : "scale", "scale" : [1, 0.1, 0.1], "output" : "rgb" }
]
}where the coordinate transform maps from array indexes to physical space. In this example, the pixel spacing is 0.1 micrometers in both x and y.
If channels need to be re-ordered create a new space, and make a transformation from the original to the new space.
like this
{
"spaces" : [
{
"name" : "rgb",
"axes" : [
{ "name" : "c", "type" : "channel", "discrete" : true },
{ "name" : "x", "type" : "space", "unit" : "micrometers" },
{ "name" : "y", "type" : "space", "unit" : "micrometers" }
]
},
{
"name" : "gbr",
"axes" : [
{ "name" : "c", "type" : "channel", "discrete" : true },
{ "name" : "x", "type" : "space", "unit" : "micrometers" },
{ "name" : "y", "type" : "space", "unit" : "micrometers" }
]
}
],
"coordinateTransformations" : [
{
"type" : "dimensionWise",
"transformations" : [ { "type" : "coordinates", "coordinates" : [2, 0, 1] }, "input" : ["c"], "output" : ["c"]
{ "type" : "scale", "scale" : [0.1, 0.1], "input" : ["x","y"], "output" : ["x","y"] },],
"input" : "rgb",
"output" : "gbr"
}
]
}
where the coordinate transform maps from array indexes to physical space. In this example, the pixel spacing is 0.1 micrometers in both x and y.
- Some transformations are not closed-form invertible
- Transformations applied to images need to be "inverse" transformations
inverseOf indicates to implementations that this is the situation.
for example
{
"type" : "inverseOf",
"transform" : { "type" : "displacementField", "path" : "/dfield" },
"input" : "src",
"output" : "tgt"
}indicates that the displacement field moves points from "tgt" to "src" space and therefore may be used to transform images from "src" to "tgt" space
Don't wrap in an inverseOf, but flip the input and output space names. Implementations need to find "inverse" transformations when applying transformations to images.
like this
{
"type" : "displacementField",
"path" : "/dfield",
"input" : "tgt",
"output" : "src"
}