Skip to content

Commit 500986c

Browse files
authored
Merge branch 'main' into add-authors
2 parents bfd0167 + 6cedb63 commit 500986c

File tree

2 files changed

+66
-47
lines changed

2 files changed

+66
-47
lines changed

index.md

Lines changed: 64 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ Note that the number of dimensions is variable between 2 and 5 and that axis nam
8888
│ ├── zarr.json # All image arrays must be up to 5-dimensional
8989
│ │ # with the axis of type time before type channel, before spatial axes.
9090
│ │
91-
│ └─ ... # Chunks are stored conforming to the Zarr array specification and
91+
│ └─ ... # Chunks are stored conforming to the Zarr array specification and
9292
│ # metadata as specified in the array's `zarr.json`.
9393
9494
└── labels
@@ -137,7 +137,7 @@ A well group SHOULD NOT be present if there are no images in the well.
137137
│ │ ├── 0 # First field of view of well A1
138138
│ │ │ │
139139
│ │ │ ├── zarr.json # Implements "multiscales", "omero"
140-
│ │ │ ├── s0 # Resolution levels
140+
│ │ │ ├── s0 # Resolution levels
141141
│ │ │ ├── ...
142142
│ │ │ └── labels # Labels (optional)
143143
│ │ └── ... # Other fields of view
@@ -206,10 +206,10 @@ object that MUST contain a `version` key, the value of which MUST be a string sp
206206
### "coordinateSystems" metadata
207207
(coordinate-systems-md)=
208208

209-
A `coordinateSystem` is a JSON object with a `name` field and a `axes` field.
209+
A coordinate system is a JSON object with a `name` field and a `axes` field.
210210
Every coordinate system:
211211
- MUST contain the field `name`.
212-
The value MUST be a non-empty string that is unique among all entries under `coordinateSystems`.
212+
The value MUST be a non-empty string that is unique among all entries in a `coordinateSystems` array.
213213
- MUST contain the field `axes`, whose value is an array of valid `axes` (see below).
214214
The elements of `axes` correspond to the index of each array dimension and coordinates for points in that coordinate system.
215215
For the below example, the `x` dimension is the last dimension.
@@ -235,7 +235,7 @@ Coordinate Systems metadata example
235235
The axes of a coordinate system (see below) give information
236236
about the types, units, and other properties of the coordinate system's dimensions.
237237
Axis names may contain semantically meaningful information, but can be arbitrary.
238-
As a result, two coordinate systems that have identical axes in the same order
238+
As a result, two coordinate systems that have identical axes in the same order
239239
may not be "the same" in the sense that measurements at the same point
240240
refer to different physical entities and therefore should not be analyzed jointly.
241241
Tasks that require images, annotations, regions of interest, etc.,
@@ -333,7 +333,7 @@ Then `dim_0` has length 4, `dim_1` has length 3, and `dim_2` has length 5.
333333
The axes and their order align with the shape of the corresponding Zarr array,
334334
and whose data depends on the byte order used to store chunks.
335335
As described in the [Zarr array metadata](https://zarr.readthedocs.io/en/stable/spec/v3.html#arrays),
336-
the last dimension of an array in "C" order are stored contiguously on disk or in-memory when directly loaded.
336+
the last dimension of an array in "C" order are stored contiguously on disk or in-memory when directly loaded.
337337

338338
The name and axes names MAY be customized by including a `arrayCoordinateSystem` field
339339
in the user-defined attributes of the array whose value is a coordinate system object.
@@ -472,7 +472,7 @@ The following transformations are supported:
472472
| [`byDimension`](#bydimension-md) | `"transformations":List[Transformation]`.<br>Transformations in the array MUST have<br>`"input_axes": List[number]`, <br> and `"output_axes": List[number]` | A high dimensional transformation using lower dimensional transformations on subsets of dimensions. |
473473

474474
Implementations SHOULD prefer to store transformations as a sequence of less expressive transformations where possible
475-
(e.g., sequence[translation, rotation], instead of affine transformation with translation/rotation).
475+
(e.g., sequence[translation, rotation], instead of affine transformation with translation/rotation).
476476

477477
:::{dropdown} Example
478478
(spec:example:coordinate_transformation_scale)=
@@ -483,7 +483,7 @@ Implementations SHOULD prefer to store transformations as a sequence of less exp
483483
{ "name": "in", "axes": [{"name": "j"}, {"name": "i"}] },
484484
{ "name": "out", "axes": [{"name": "y"}, {"name": "x"}] }
485485
],
486-
"coordinateTransformations": [
486+
"coordinateTransformations": [
487487
{
488488
"type": "scale",
489489
"scale": [2, 3.12],
@@ -513,15 +513,15 @@ Conforming readers:
513513
- SHOULD be able to apply transformations to images;
514514

515515
Coordinate transformations can be stored in multiple places to reflect different use cases.
516-
516+
517517
- **Inside `multiscales > datasets`**: `coordinateTransformations` herein MUST be restricted
518518
to a single `scale`, `identity` or `sequence` of a scale followed by a translation transformation.
519519
For more information, see [multiscales section below](#multiscales-md).
520520
- **Inside `multiscales > coordinateTransformations`**: Additional transformations for single multiscale images MAY be stored here.
521521
The `coordinateTransformations` field MUST contain an array of valid [transformations](#trafo-types-md).
522522
The input to every one of these transformations MUST be the intrinsic coordinate system.
523523
The output can be another coordinate system defined under `multiscales > coordinateSystems`.
524-
524+
525525
- **Inside `scene > coordinateTransformations`**: Transformations between two or more images
526526
MUST be stored in the attributes of a [`scene` object](#scene-md) in a [scene Zarr group](#scene-format).
527527
In this case, the `input` and `output` values are objects
@@ -552,9 +552,9 @@ where a coordinate is the location/value of that point along its corresponding a
552552
The indexes of axis dimensions correspond to indexes into transformation parameter arrays (see examples).
553553

554554
**Image rendering**: When rendering transformed images and interpolating,
555-
implementations may need the "inverse" transformation - from the fixed
556-
image's to the source image's coordinate system. This transformation may
557-
not explicitly exist, but might be the require computing the inverse
555+
implementations may need the "inverse" transformation - from the fixed
556+
image's to the source image's coordinate system. This transformation may
557+
not explicitly exist, but might be the require computing the inverse
558558
(in closed form) of an explicitly specified forward transformation.
559559

560560
Inverse transformations used for image rendering may be specified
@@ -567,8 +567,8 @@ that the requested operation is unsupported.
567567

568568
:::{dropdown} Example
569569

570-
Implementations SHOULD be able to compute and apply the inverse of some coordinate
571-
transformations when they are computable in closed-form (as the
570+
Implementations SHOULD be able to compute and apply the inverse of some coordinate
571+
transformations when they are computable in closed-form (as the
572572
[Transformation types](#trafo-types-md) section below indicates).
573573
Implementations should be able to render the moving image into the fixed
574574
image by computing the inverse of this transformation.
@@ -581,10 +581,10 @@ image by computing the inverse of this transformation.
581581
}
582582
```
583583

584-
Software libraries that perform image registration often return the transformation
585-
from fixed image coordinates to moving image coordinates, because this "inverse"
584+
Software libraries that perform image registration often return the transformation
585+
from fixed image coordinates to moving image coordinates, because this "inverse"
586586
transformation is most often required when rendering the transformed moving image.
587-
Implementations should be able to render the moving image into the fixed image by
587+
Implementations should be able to render the moving image into the fixed image by
588588
applying this transformation directly.
589589

590590
```json
@@ -595,7 +595,7 @@ applying this transformation directly.
595595
}
596596
```
597597

598-
Implementations are not expected to be able to to render the moving image
598+
Implementations are not expected to be able to to render the moving image
599599
into the fixed image given this transformation. They may attempt
600600
to do so by estimating the transformations' inverse if they choose to.
601601

@@ -622,7 +622,7 @@ When stored as a 2D json array, the inner array contains rows (e.g. `[[1,2,3], [
622622
#### Transformation types
623623
(trafo-types-md)=
624624

625-
Input and output dimensionality may be determined by the coordinate system referred to by the `input` and `output` fields, respectively.
625+
Input and output dimensionality may be determined by the coordinate system referred to by the `input` and `output` fields, respectively.
626626
If the value of `input` is a path to an array, its shape gives the input dimension,
627627
otherwise it is given by the length of `axes` for the coordinate system with the name of the `input`.
628628
If the value of `output` is an array, its shape gives the output dimension,
@@ -733,7 +733,7 @@ The array MUST have length `N`.
733733
defines the function:
734734

735735
```
736-
x = i + 9
736+
x = i + 9
737737
y = j - 1.42
738738
```
739739
:::
@@ -978,7 +978,7 @@ of the `i`th output axis. See the example below.
978978

979979
`coordinates` and `displacements` transformations are not invertible in general,
980980
but implementations MAY approximate their inverses.
981-
Metadata for these coordinate transforms have the following fields:
981+
Metadata for these coordinate transforms have the following fields:
982982

983983
**path**
984984
: The location of the coordinate array in this (or another) container.
@@ -1032,7 +1032,7 @@ Example metadata for the array data at path `coordinates` above:
10321032
{ "name": "i", "type": "space", "discrete": true },
10331033
{ "name": "c", "type": "coordinate", "discrete": true }
10341034
]
1035-
}
1035+
}
10361036
],
10371037
"coordinateTransformations" : [
10381038
{
@@ -1046,7 +1046,7 @@ Example metadata for the array data at path `coordinates` above:
10461046
If the array in `coordinates` contains the data: `[-9, 9, 0]`, then this metadata defines the function:
10471047

10481048
```
1049-
x =
1049+
x =
10501050
if ( i < 0.5 ) -9
10511051
else if ( i >= 0.5 and i < 1.5 ) 9
10521052
else if ( i >= 1.5 ) 0
@@ -1078,7 +1078,7 @@ Example metadata for the array data at path `displacements` above:
10781078
{ "name": "x", "type": "space", "unit" : "nanometer" },
10791079
{ "name": "d", "type": "displacement", "discrete": true }
10801080
]
1081-
}
1081+
}
10821082
],
10831083
"coordinateTransformations" : [
10841084
{
@@ -1254,18 +1254,18 @@ It is stored in a multiple resolution representation.
12541254
Each `multiscales` object MUST contain the field `coordinateSystems`,
12551255
whose value is an array containing coordinate system metadata
12561256
(see [coordinate systems](#coordinate-systems-md)).
1257+
The following conditions apply to all coordinate systems inside multiscales metadata:
1258+
1259+
- The length of `axes` must be between 2 and 5 and MUST be equal to the dimensionality of the Zarr arrays storing the image data (see `datasets:path`).
1260+
- `axes` MUST contain 2 or 3 entries of `type:space`
1261+
- `axes` MAY contain one additional entry of `type:time`
1262+
- `axes` MAY contain one additional entry of `type:channel` or a null / custom type.
1263+
- `axes` entries MUST be ordered by `type` where the `time` axis must come first (if present),
1264+
followed by the `channel` or custom axis (if present) and the axes of type `space`.
1265+
- If there are three spatial axes where two correspond to the image plane (`yx`)
1266+
and images are stacked along the other (anisotropic) axis (`z`),
1267+
the spatial axes SHOULD be ordered as `zyx`.
12571268

1258-
The following MUST hold for all coordinate systems inside multiscales metadata.
1259-
The length of `axes` must be between 2 and 5
1260-
and MUST be equal to the dimensionality of the Zarr arrays storing the image data (see `datasets:path`).
1261-
The `axes` MUST contain 2 or 3 entries of `type:space`
1262-
and MAY contain one additional entry of `type:time`
1263-
and MAY contain one additional entry of `type:channel` or a null / custom type.
1264-
In addition, the entries MUST be ordered by `type` where the `time` axis must come first (if present),
1265-
followed by the `channel` or custom axis (if present) and the axes of type `space`.
1266-
If there are three spatial axes where two correspond to the image plane (`yx`)
1267-
and images are stacked along the other (anisotropic) axis (`z`),
1268-
the spatial axes SHOULD be ordered as `zyx`.
12691269
Each `multiscales` object MUST contain the field `datasets`,
12701270
which is an array of objects describing the arrays storing the individual resolution levels.
12711271
Each object in `datasets` MUST contain the field `path`,
@@ -1281,7 +1281,7 @@ that maps Zarr array coordinates for this resolution level to the "intrinsic" co
12811281
The transformation is defined according to [transformations metadata](#trafo-types-md).
12821282
The transformation MUST take as input points in the array coordinate system
12831283
corresponding to the Zarr array at location `path`.
1284-
The value of `input` MUST equal the value of `path`,
1284+
The value of `input` MUST equal the value of `path`,
12851285
implementations should always treat the value of `input` as if it were equal to the value of `path`.
12861286
The value of the transformation’s `output` coordinate system MUST be the same for every dataset in a single multiscales.
12871287
This coordinate system (the "intrinsic" coordinate system) will generally be a representation of the image in its native physical coordinate system.
@@ -1304,8 +1304,9 @@ If applications require additional transformations,
13041304
each `multiscales` object MAY contain the field `coordinateTransformations`,
13051305
describing transformations that are applied to all resolution levels in the same manner.
13061306
The value of `input` MUST equal the name of the "intrinsic" coordinate system.
1307-
The value of `output` MUST be the name of the output coordinate System
1308-
which is different from the "intrinsic" coordinate system.
1307+
The value of `output` MUST be the name of a coordinate system
1308+
which is different from the "intrinsic" coordinate system
1309+
and which is defined in the `coordinateSystems` field of the `multiscales` metadata.
13091310

13101311
Each `multiscales` object SHOULD contain the field `name`.
13111312

@@ -1450,7 +1451,7 @@ denoting arbitrary metadata associated with that label.
14501451
Label-value objects within the `properties` array do not need to have the same keys.
14511452

14521453
The value of the `source` key MUST be a JSON object containing information about the original image from which the label image derives.
1453-
This object MAY include a key `image`, whose value MUST be a string specifying the relative path to a Zarr image group.
1454+
This object MAY include a key `image`, whose value MUST be a string specifying the relative path to a Zarr image group.
14541455
The default value is `../../` since most labeled images are stored in a "labels" group that is nested within the original image group.
14551456

14561457

@@ -1557,10 +1558,10 @@ whose value MUST be an array of JSON objects specifying all fields of views for
15571558
Each image object MUST contain a `path` key
15581559
whose value MUST be a string specifying the path to the field of view.
15591560
The `path` MUST be case-sensitive, and MUST NOT be a duplicate of any other `path` in the `images` list.
1560-
The `path` MUST follow [Zarr node name naming conventions](https://github.com/zarr-developers/zarr-specs/blob/main/docs/v3/core/index.rst#node-names) including the recommended limitations of characters to ensure consistency across different storage systems and programming languages.
1561-
Specifically: The `path` MUST NOT consist only of periods (like `.` or `..`) or start with the reserved prefix `__`;
1562-
The `path` MUST NOT be an empty string and MUST NOT contain `/` characters;
1563-
The `path` MUST only use characters in the sets `a-z`, `A-Z`, `0-9`, `-`, `_`, `.`.
1561+
The `path` MUST follow [Zarr node name naming conventions](https://github.com/zarr-developers/zarr-specs/blob/main/docs/v3/core/index.rst#node-names) including the recommended limitations of characters to ensure consistency across different storage systems and programming languages.
1562+
Specifically: The `path` MUST NOT consist only of periods (like `.` or `..`) or start with the reserved prefix `__`;
1563+
The `path` MUST NOT be an empty string and MUST NOT contain `/` characters;
1564+
The `path` MUST only use characters in the sets `a-z`, `A-Z`, `0-9`, `-`, `_`, `.`.
15641565
If multiple acquisitions were performed in the plate,
15651566
it MUST contain an `acquisition` key whose value MUST be an integer identifying the acquisition
15661567
which MUST match one of the acquisition JSON objects defined in the [plate metadata](#plate-md).
@@ -1737,11 +1738,29 @@ but they should be updated in due course.
17371738

17381739
See [Tools](https://ngff.openmicroscopy.org/tools/index.html).
17391740

1741+
## License
1742+
1743+
This specification is derived from the [Community Specification Template](https://www.w3.org/People/Schepers/unoffical_template.html) provided by W3C,
1744+
under [the following terms](https://www.w3.org/copyright/software-license-2023/):
1745+
1746+
> By obtaining and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions:
1747+
> Permission to copy, modify, and distribute this work, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the work or portions thereof, including modifications:
1748+
>
1749+
> The full text of this NOTICE in a location viewable to users of the redistributed or derivative work.
1750+
> Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the W3C Software and Document Short Notice should be included.
1751+
> Notice of any changes or modifications, through a copyright statement on the new code or document such as:
1752+
> "This document includes material copied from or derived from Community Specification Template. Copyright &copy; 2025 W3C&reg; (MIT, ERCIM, Keio, Beihang)."
1753+
1754+
1755+
### Notice of Modifications:
1756+
This specification includes material copied from or derived from the Community Specification Template.
1757+
Copyright &copy; 2025 W3C&reg; (MIT, ERCIM, Keio, Beihang).
1758+
17401759
## Other resources
17411760

17421761
```{toctree}
17431762
:maxdepth: 1
17441763
17451764
examples/index
17461765
schemas/index
1747-
```
1766+
```

pre_build.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,8 +157,8 @@ def build_footer():
157157
year = datetime.now().year
158158
footer_content = f"""
159159
<div>
160-
Copyright © 2020-{year}
161-
<a href="https://www.openmicroscopy.org/"><abbr title="Open Microscopy Environment">OME</abbr></a><sup>®</sup>.
160+
Copyright &copy; 2020-{year}
161+
<a href="https://www.openmicroscopy.org/"><abbr title="Open Microscopy Environment">OME</abbr></a><sup>&reg;</sup>.
162162
OME trademark rules apply.
163163
</div>
164164
"""

0 commit comments

Comments
 (0)