Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Coordinate systems and new coordinate transformations proposal #138

Draft
wants to merge 122 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
122 commits
Select commit Hold shift + click to select a range
f0da62a
start of named space and transform metadata
bogovicj Feb 1, 2022
4331deb
fwd and inv coordinate transforms
bogovicj Feb 9, 2022
8051e71
Merge remote-tracking branch 'upstream/main' into coord-transforms
bogovicj Feb 9, 2022
180568b
more transform details
bogovicj Feb 9, 2022
4f48364
start page on details and recommendations
bogovicj Feb 9, 2022
98a40de
transformation progress
bogovicj May 5, 2022
dd71953
change fields to camelCase
bogovicj May 9, 2022
1b26a8e
add details for coordinate and displacement fields
bogovicj May 12, 2022
cd9c431
add details on dimension order
bogovicj May 13, 2022
e210027
clean up array indexing section
bogovicj May 13, 2022
d873541
add more details for scale, translation, displacement
bogovicj May 15, 2022
63ed4ce
merge and cleanup
bogovicj May 16, 2022
a459492
Merge remote-tracking branch 'upstream/main' into coord-transforms
bogovicj May 24, 2022
9058b4b
clarify input and output dimensionality for transforms
bogovicj Jun 1, 2022
38ac6ac
update to transformations
bogovicj Jun 3, 2022
3a2aae1
rotation transformation details
Jun 3, 2022
ed12192
minor rephrase intro to coordinateTransformations section
Jun 3, 2022
3ec8543
add details for bijection ct
bogovicj Jun 6, 2022
30cade5
big changes to transformations spec
bogovicj Jun 9, 2022
df470d7
Add "coordinateSystems" and "coordinateTransformations" fields for ex…
bogovicj Sep 6, 2022
99f3a4e
coordinate transformation updates:
bogovicj Sep 7, 2022
de73c68
update multiscales_example
bogovicj Sep 11, 2022
163c8f4
rename dimensionWise byDimension
bogovicj Sep 11, 2022
7b35c28
add more transformation examples
bogovicj Sep 11, 2022
7baeed7
byDimension examples, rm input/outputAxes fields
bogovicj Sep 11, 2022
162a9e9
reorder, simplify sections.
Sep 15, 2022
a90662d
clean up example formatting
Sep 15, 2022
32656e5
add array coordinate system example
Sep 16, 2022
0245ca9
rm duplicate editor names, typo fix
bogovicj Sep 23, 2022
a3ff0b5
fix sequence example json. add inverseOf to input/output field exception
Sep 23, 2022
0df402d
be clearer re: half-open interval
Sep 23, 2022
f05d480
move axes section into coordinateSystems section
bogovicj Oct 4, 2022
ed17ed5
typo fixes
bogovicj Oct 4, 2022
b9f89e1
Merge branch 'coord-transforms' of github.com:bogovicj/ngff into coor…
bogovicj Oct 4, 2022
cd01ab7
add two new coordinate transformation examples
bogovicj Oct 4, 2022
86672e6
Allow tests to access all schemas
ivirshup Oct 4, 2022
b34875d
Fix how schemas are matched to examples
ivirshup Oct 4, 2022
35ea3e3
Add initial coordinate system schemas
ivirshup Oct 4, 2022
3fcba53
Add array coordinate schema
ivirshup Oct 4, 2022
883ff1c
Add test for array coordinate system
ivirshup Oct 4, 2022
c2a18c4
Stop adding cases for .config files
ivirshup Oct 4, 2022
027b55b
describe where to store coordinateTransformations
bogovicj Oct 5, 2022
5bfe442
corrections for coordinates and displacements
bogovicj Oct 5, 2022
aab7469
add optional "longName" field for axes
bogovicj Oct 6, 2022
9764451
Merge branch 'coord-transforms' into coord-transforms-schemas
ivirshup Oct 9, 2022
098bfb8
Add longName property to axes schema
ivirshup Oct 9, 2022
f04ebef
Add mapAxis and mapIndex schemas
ivirshup Oct 9, 2022
ead1f7b
Add affine transfrom, use reference for path_w_url
ivirshup Oct 9, 2022
281df32
Move rotation example to example directory
ivirshup Oct 9, 2022
87d78e8
Add schema for rotation
ivirshup Oct 9, 2022
033d4bb
Move inverseOf example to examples directory
ivirshup Oct 9, 2022
f78e441
Added schema for inverseOf
ivirshup Oct 9, 2022
55e35bd
Added byDimension transformation
ivirshup Oct 9, 2022
0833395
Sequence schemas
ivirshup Oct 9, 2022
85808cf
Merge remote-tracking branch 'upstream/main' into coord-transforms
bogovicj Oct 12, 2022
74466c5
Move rotation example to example directory
ivirshup Oct 9, 2022
9406ce1
Merge branch 'coord-transforms' into coord-transforms-schemas
ivirshup Oct 12, 2022
ff2bc86
Move inverseOf example to examples directory
ivirshup Oct 9, 2022
a68523f
multiscales example relative typo fix
bogovicj Oct 12, 2022
3fe7aa2
corrections and clarifications to coordinates and displacements
bogovicj Oct 12, 2022
f976a87
transforms MUST have "input"
bogovicj Oct 12, 2022
72b4f9c
cts: remove url parameters
bogovicj Mar 14, 2023
be7d849
ct: fix and clarify nested json representation for affine and rotatio…
bogovicj Mar 14, 2023
da94207
motivate coordinate systems
bogovicj Mar 15, 2023
b92f540
describe discrete axes, interpolation, etc
bogovicj Mar 15, 2023
383aa87
spec: remove 5D limits
d-v-b Sep 19, 2023
1849133
tforms: more details to conforming readers
bogovicj Oct 10, 2023
a2e7687
tforms: more sensible output name for sequence transform example
bogovicj Oct 10, 2023
5ce238a
tforms: typo fix
bogovicj Oct 10, 2023
676aeba
tforms: fix name of zgroup in example hierarchy comment
bogovicj Oct 10, 2023
be61476
Merge remote-tracking branch 'dvb/coord-transforms' into coord-transf…
bogovicj Oct 10, 2023
578dd72
fix header and link for axes metadata
bogovicj Oct 10, 2023
c33287d
example coordinate systems follow recommendations
bogovicj Oct 10, 2023
6da38f7
rm mapIndex transformation
bogovicj Oct 10, 2023
1451a47
start of coordinatTransformations schema
bogovicj Oct 11, 2023
1602832
missing_scale and duplicate_scale are valid
bogovicj Oct 12, 2023
417c7cd
Merge branch 'coord-transforms' into coord-transforms-schemas
bogovicj Nov 22, 2023
3c86a3b
rm mapIndex examples
bogovicj Dec 4, 2023
9021ae0
affine parameters can be nested arrays
bogovicj Dec 4, 2023
841e0aa
rm mapIndex from transform schema
bogovicj Dec 4, 2023
704173c
add bijection transformation to schema
bogovicj Dec 4, 2023
03fe664
add displacements and coordinates transformations to schema
bogovicj Dec 4, 2023
34e41d3
update tests with coordinateSystems
bogovicj Dec 5, 2023
a24aefd
update image schema with coordinate systems
bogovicj Dec 5, 2023
d22b663
axis schema: don't enforce types
bogovicj Dec 5, 2023
7add879
test: strict_image add coordinateSystems
bogovicj Dec 5, 2023
e5b351c
test image, strict_image add input/output to transforms
bogovicj Dec 5, 2023
9abfa1e
start to modularize coordinate systems and transforms schemas
bogovicj Dec 5, 2023
b7c28f9
axes schema: allow at most three space axes
bogovicj Dec 6, 2023
5818a1f
image_suite - one axis is valid
bogovicj Dec 6, 2023
3896ab4
image_suite - two scales are valid, but not recommended
bogovicj Dec 6, 2023
2f7c413
edit subspace example
bogovicj Dec 6, 2023
67cb6d2
coordinate_transformation arrays may not be empty
bogovicj Dec 6, 2023
fb88485
edit example byDimension2
bogovicj Dec 6, 2023
85437f2
edit multiscales examples
bogovicj Dec 6, 2023
a9fadf3
add schema config for subspace examples
bogovicj Dec 6, 2023
a0cd017
rm coordinate_transforms.schema
bogovicj Dec 6, 2023
150f1f8
multiscales-strict, re-order coordinate systems
bogovicj Dec 7, 2023
61eb70a
schema: add strict_axes, and strict_coordinate_systems
bogovicj Dec 7, 2023
0eb5040
Merge remote-tracking branch 'origin/coord-transforms-schemas' into c…
bogovicj Dec 8, 2023
aa0542d
correct byDimensionXarray transform example
bogovicj Dec 8, 2023
bc4f395
"units" -> "unit"
bogovicj Dec 8, 2023
802c94f
toward clarity on axis order
bogovicj Jul 25, 2024
51417a6
typo fix
bogovicj Jul 25, 2024
cd92ec1
rm spurious / in <img>
bogovicj Jul 26, 2024
701867e
clarify axis order for coordinate and displacement fields
bogovicj Jul 27, 2024
81cc4a5
minor rephrasing in inverseOf
bogovicj Jul 27, 2024
7dec4fe
toward resolving ambiguity in "sequence" transformations
bogovicj Jul 28, 2024
6ebcf5f
add anchors for transformation types
bogovicj Jul 29, 2024
00b79f1
clarification on affine and rotation transformation
bogovicj Jul 29, 2024
88b5f16
minor rephrasing
bogovicj Jul 29, 2024
cc6ade0
remove reference to non-existent note
bogovicj Aug 13, 2024
11729de
matrix transformations MUST be stored as 2D (json or zarr) arrays
bogovicj Aug 13, 2024
8e9bdb6
typo affine -> rotation
bogovicj Aug 13, 2024
d311848
merge edits from rfc
bogovicj Aug 28, 2024
b5ed81a
change examples to relative paths
bogovicj Aug 28, 2024
12a5338
typo and other minor fixes
bogovicj Sep 20, 2024
5376db5
fix affine matrix size, and other small fixes
bogovicj Sep 23, 2024
50e7759
correctly close code block
bogovicj Sep 23, 2024
e8bc1db
clarify invertibility of sequence transformation
bogovicj Sep 23, 2024
7d71127
fix byDimension header link
bogovicj Sep 25, 2024
3a7e76f
flesh out description for coordinates and displacements
bogovicj Sep 25, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions latest/examples/coordSystems/.config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"schema": "schemas/coordinate_systems_and_transforms.schema"
}
10 changes: 10 additions & 0 deletions latest/examples/coordSystems/arrayCoordSys.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"arrayCoordinateSystem" : {
"name" : "myDataArray",
"axes" : [
{"name": "k", "type": "array"},
{"name": "j", "type": "array"},
{"name": "i", "type": "array"}
]
}
}
42 changes: 24 additions & 18 deletions latest/examples/multiscales_strict/multiscales_example.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,44 +3,50 @@
{
"version": "0.5-dev",
"name": "example",
"axes": [
{"name": "t", "type": "time", "unit": "millisecond"},
{"name": "c", "type": "channel"},
{"name": "z", "type": "space", "unit": "micrometer"},
{"name": "y", "type": "space", "unit": "micrometer"},
{"name": "x", "type": "space", "unit": "micrometer"}
"coordinateSystems" : [
{
"name" : "example",
"axes": [
{"name": "t", "type": "time", "unit": "millisecond"},
{"name": "c", "type": "channel"},
{"name": "z", "type": "space", "unit": "micrometer"},
{"name": "y", "type": "space", "unit": "micrometer"},
{"name": "x", "type": "space", "unit": "micrometer"}
]
}
],
"datasets": [
{
"path": "0",
"coordinateTransformations": [{
// the voxel size for the first scale level (0.5 micrometer)
// the voxel size for the first scale level (0.5 micrometer), time unit (0.1 milliseconds)
"type": "scale",
"scale": [1.0, 1.0, 0.5, 0.5, 0.5]
"scale": [0.1, 1.0, 0.5, 0.5, 0.5],
"input" : "/0",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Trying to integrate the proposal from #114 which is orthognal to this proposal but is scheduled for discussion at the upcoming OME-NGFF call, how would this be modified?

Would the input still point at the relative path to the resolution group or should it point at the relative path to the resolution array i.e. `"/0/image"?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A secondary concern is whether this nomenclature is redundant with the multiscales.datasets.path metadata which also defines the path to the array?

"output" : "example"
}]
},
{
"path": "1",
"coordinateTransformations": [{
// the voxel size for the second scale level (downscaled by a factor of 2 -> 1 micrometer)
// the voxel size for the second scale level (downscaled by a factor of 2 -> 1 micrometer), time unit (0.1 milliseconds)
"type": "scale",
"scale": [1.0, 1.0, 1.0, 1.0, 1.0]
"scale": [0.1, 1.0, 1.0, 1.0, 1.0],
"input" : "/1`",
"output" : "example"
}]
},
{
"path": "2",
"coordinateTransformations": [{
// the voxel size for the third scale level (downscaled by a factor of 4 -> 2 micrometer)
// the voxel size for the third scale level (downscaled by a factor of 4 -> 2 micrometer), time unit (0.1 milliseconds)
"type": "scale",
"scale": [1.0, 1.0, 2.0, 2.0, 2.0]
"scale": [0.1, 1.0, 2.0, 2.0, 2.0],
"input" : "/2",
"output" : "example"
}]
}
],
"coordinateTransformations": [{
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this proposal effectively remove datasets level coordinateTransformations or is this only for example purposes?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It does not, I will add another example showing what datasets level coordinateTransformations looks like (it's same as before).

// the time unit (0.1 milliseconds), which is the same for each scale level
"type": "scale",
"scale": [0.1, 1.0, 1.0, 1.0, 1.0]
}],
"type": "gaussian",
"metadata": {
"description": "the fields in metadata depend on the downscaling implementation. Here, the parameters passed to the skimage function are given",
Expand All @@ -51,4 +57,4 @@
}
}
]
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
{
"multiscales": [
{
"version": "0.5-dev",
"name": "example",
"coordinateSystems" : [
{
"name" : "exampleCoordinateSystem",
"axes": [
{"name": "t", "type": "time", "unit": "millisecond"},
{"name": "c", "type": "channel"},
{"name": "z", "type": "space", "unit": "micrometer"},
{"name": "y", "type": "space", "unit": "micrometer"},
{"name": "x", "type": "space", "unit": "micrometer"}
]
},
{
"name" : "array_0",
"axes": [
{"name": "t", "type": "time", "unit": "millisecond"},
{"name": "c", "type": "channel"},
{"name": "z", "type": "space", "unit": "micrometer"},
{"name": "y", "type": "space", "unit": "micrometer"},
{"name": "x", "type": "space", "unit": "micrometer"}
]
}
],
"datasets": [
{
"path": "0",
// the transformation of other arrays are defined relative to this, the highest resolution, array
"coordinateTransformations": [{
"type": "identity",
"input": "/0",
"output": "array_0"
}]
},
{
"path": "1",
"coordinateTransformations": [{
// the second scale level (downscaled by a factor of 2 relative to "0" in zyx)
"type": "scale",
"scale": [1, 1, 2, 2, 2],
"input" : "/1",
"output" : "array_0"
}]
},
{
"path": "2",
"coordinateTransformations": [{
// the third scale level (downscaled by a factor of 4 relative to "0" in zyx)
"type": "scale",
"scale": [1, 1, 4, 4, 4],
"input" : "/2",
"output" : "array_0"
}]
}
],
"coordinateTransformations": [{
// the time unit (0.1 milliseconds), the voxel size for all spatial axes of "0" (0.5 micrometers)
"type": "scale",
"scale": [0.1, 1.0, 0.5, 0.5, 0.5],
"input" : "array_0",
"output" : "exampleCoordinateSystem"
}],
"type": "gaussian",
"metadata": {
"description": "the fields in metadata depend on the downscaling implementation. Here, the parameters passed to the skimage function are given",
"method": "skimage.transform.pyramid_gaussian",
"version": "0.16.1",
"args": "[true]",
"kwargs": {"multichannel": true}
}
}
]
}
38 changes: 20 additions & 18 deletions latest/examples/multiscales_strict/multiscales_transformations.json
Original file line number Diff line number Diff line change
@@ -1,39 +1,41 @@
{
"multiscales": [
{
"axes": [
"coordinateSystems" : [
{
"name": "y",
"type": "space",
"units": "micrometer"
"name": "multiscales_transformations",
"axes": [
{ "name": "y", "type": "space", "unit": "micrometer" },
{ "name": "x", "type": "space", "unit": "micrometer" }
]
},
{
"name": "x",
"type": "space",
"units": "micrometer"
"name": "multiscales_transformations_intermediate",
"axes": [
{ "name": "y", "type": "space", "unit": "micrometer" },
{ "name": "x", "type": "space", "unit": "micrometer" }
]
}
],
"datasets": [
{
"path": "0",
"coordinateTransformations": [
{
"scale": [
1,
1
],
"type": "scale"
"scale": [ 1, 1 ],
"type": "scale",
"input": "/0",
"output": "multiscales_transformations_intermediate"
}
]
}
],
"coordinateTransformations": [
{
"scale": [
10,
10
],
"type": "scale"
"scale": [ 10, 10 ],
"type": "scale",
"input": "multiscales_transformations_intermediate",
"output": "multiscales_transformations"
}
],
"version": "0.5-dev",
Expand All @@ -44,4 +46,4 @@
}
}
]
}
}
3 changes: 3 additions & 0 deletions latest/examples/subspace/.config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"schema": "schemas/coordinate_systems_and_transforms.schema"
}
44 changes: 44 additions & 0 deletions latest/examples/subspace/subspaceMultidim.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
{
"coordinateSystems": [
{
"name": "in",
"axes": [
{ "name": "0", "type": "array" },
{ "name": "1", "type": "array" },
{ "name": "2", "type": "array" },
{ "name": "3", "type": "array" },
{ "name": "4", "type": "array" }
]
},
{
"name": "out",
"axes": [
{ "name": "x", "type": "space" },
{ "name": "y", "type": "space" },
{ "name": "z", "type": "space" }
]
}
],
"coordinateTransformations": [
{
"type": "byDimension",
"name": "5D-to-3D-not-contiguous",
"input": "in",
"output": "out",
"transformations": [
{
"type": "mapAxis",
"mapAxis": { "0": "x", "2": "z" },
"input": [ "0", "2" ],
"output": [ "x", "z" ]
},
{
"type": "scale",
"scale": [ 2 ],
"input": [ "1" ],
"output": [ "y" ]
}
]
}
]
}
26 changes: 26 additions & 0 deletions latest/examples/subspace/subspacePermute.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{
"coordinateSystems" : [
{ "name" : "in", "axes" : [ {"name" : "i"}, {"name" : "j" } ]},
{ "name" : "out", "axes" : [ {"name" : "x"}, {"name" : "y" } ]}
],
"coordinateTransformations" : [
{
"type" : "byDimension",
"input" : "in",
"output" : "out",
"transformations" : [
{
"type": "identity",
"input" : ["j"],
"output" : ["x"]
},
{
"type": "scale",
"scale" : [2],
"input" : ["i"],
"output" : ["y"]
}
]
}
]
}
3 changes: 3 additions & 0 deletions latest/examples/transformations/.config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"schema": "schemas/coordinate_systems_and_transforms.schema"
}
14 changes: 14 additions & 0 deletions latest/examples/transformations/affine2d2d.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"coordinateSystems" : [
{ "name": "ji", "axes": [{"name": "j"}, {"name": "i"}] },
{ "name": "yx", "axes": [{"name": "y"}, {"name": "x"}] }
],
"coordinateTransformations" : [
{
"type": "affine",
"affine": [[1, 2, 3], [4, 5, 6]],
"input": "ji",
"output": "yx"
}
]
}
14 changes: 14 additions & 0 deletions latest/examples/transformations/affine2d3d.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"coordinateSystems": [
{ "name": "ij", "axes": [{"name": "i"}, {"name": "j"}] },
{ "name": "xyz", "axes": [{"name": "x"}, {"name": "y"}, {"name": "z"}] }
],
"coordinateTransformations": [
{
"type": "affine",
"affine": [[1, 2, 3], [4, 5, 6], [7, 8, 9]],
"input": "ij",
"output": "xyz"
}
]
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the first example where I really don't know at first glance what's going on...?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Related: #146 (comment) (please @bogovicj close the issue if the nested representation is adopted)

15 changes: 15 additions & 0 deletions latest/examples/transformations/bijection.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"coordinateSystems" : [
{ "name": "src", "axes": [{"name": "j"}, {"name": "i"}] },
{ "name": "tgt", "axes": [{"name": "y"}, {"name": "x"}] }
],
"coordinateTransformations" : [
{
"type": "bijection",
"forward": { "type" : "coordinates", "path" : "forward_coordinates" },
"inverse": { "type" : "coordinates", "path" : "inverse_coordinates" },
"input": "src",
"output": "tgt"
}
]
}
7 changes: 7 additions & 0 deletions latest/examples/transformations/bijection_verbose.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "bijection",
"forward": { "type" : "coordinates", "path" : "forward_coordinates", "input" : "src", "output" : "tgt" },
"inverse": { "type" : "coordinates", "path" : "inverse_coordinates", "input" : "tgt", "output" : "src" },
"input": "src",
"output": "tgt"
}
17 changes: 17 additions & 0 deletions latest/examples/transformations/byDimension1.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"coordinateSystems": [
{ "name": "in", "axes": [ {"name": "j"}, {"name": "i"} ] },
{ "name": "out", "axes": [ {"name": "y"}, {"name": "x"} ] }
],
"coordinateTransformations": [
{
"type": "byDimension",
"input": "in",
"output": "out",
"transformations": [
{ "type": "translation", "translation": [-1.0], "input": ["i"], "output": ["x"]},
{ "type": "scale", "scale": [2.0], "input": ["j"], "output": ["y"]}
]
}
]
}
Loading
Loading