Mercurial > hg > orthanc-stone
view OrthancStone/Resources/Documentation/Coordinates.txt @ 2174:2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 22 Oct 2024 21:52:34 +0200 |
parents | 20a0aba0ede5 |
children |
line wrap: on
line source
Some notes about the coordinate systems ======================================= Different systems ----------------- * "World" coordinates refer to (x,y,z) positions, typically expressed in millimeters (according to the DICOM conventions), which allows to define volumes and 3D cutting planes. As explained below, those coordinates actually correspond to "patient" coordinates if rendering DICOM images. The "world" coordinates are *not* used by the Stone Web viewer, because the latter is a 2D application. * "Scene" coordinates refer to (x,y) positions, typically expressed in millimeters (as a byproduct of world coordinates), which allows to define the 2D geometric elements that are part of the scene, and Y-axis pointing downward. * "Canvas" coordinates refer to (x,y) subpixel positions that will be blitted by a compositor onto a drawing canvas. The units are floating-point pixels, with (0,0) corresponding to the center of the display surface, and Y-axis pointing downward. The "canvas" coordinates modify the "scene" coordinates according the zoom/pan specified by the user. * "Pixels" coordinates refer to standard integer (x,y) coordinates of the surface in memory. (0,0) is the top-left pixel. Relations between 2D and 3D --------------------------- * The 3D coordinates are expressed in the PATIENT system, *not* the "gantry" coordinates. As a consequence, the tags "Image Position Patient" (0020,0032) and "Image Orientation Patient" (0020,0037) describe the 3D geometry of a slice. * The tag "Patient Position" (0018,5100) could be used to convert from patient coordinates to gantry coordinates, but this would be useful to device manufacturers, whereas Stone primarly deals with users of modalities. * The "Image Position Patient" gives the 3D coordinates of the CENTER of the top-left voxel of slice. * In 2D compositors, the origin of a texture corresponds to the CORNER of the top-left pixel of the texture (*not* to the center of this pixel). Roughly speaking, the operation "floor()" must be applied to move from canvas coordinates (floating-point numbers) to pixel coordinates in the image buffer (integer numbers). * The classes deriving from "IVolumeSlicer" must pay to attention to convert from centers of 3D voxels to bounding boxes of 2D pixels.