-
Notifications
You must be signed in to change notification settings - Fork 25
OpenIGTLink US messaging proposal
This page is part of http://wiki.na-mic.org/Wiki/index.php/2016_Winter_Project_Week:TrackedUltrasoundStandardization.
The following are properties for a server residing on an ultrasound scanner. The structure is given in pseudocode, but the intended format is XML.
Parameters are either required, optional or extension:
- required: Defined by standard. Must be present in order to comply with standard.
- optional: Defined by standard. Might be present, if available from scanner and implemented.
- extension: not part of the standard, but added by vendor.
- Available_applications { list of names } (list of applications/presets available on the scanner)
- Application_name { name }
- Available_Probes { device_id list } ( List of all probes currently attached to the scanner.)
-
Available_Streams { device_id list } (these are an exhaustive list of all stream types that can be of interest from a scanner. Only those supported by the scanner are given. The scalar variants contain raw data, while the RGB/Gray versions are suitable for direct screen display. LUTs can be available when using the raw variants.)
- Display, (RGB)
- US_B-Mode (Gray)
- US_B-Mode-Raw (Scalar)
- US_Color-Doppler (RGB)
- US_Color-Doppler-Velocity (Scalar)
- US_Power-Doppler (RGB)
- US_Elastography (RGB)
- US_Elastography (Scalar)
- US_R0 (Scalar)
- US_R1 (Scalar)
- US_RF (Scalar)
- US_IQ (Complex)
-
Probe: {device_id_0} (one probe entry for each probe)
- probe parameters: Name, Center freq, focus pt, pitch, geometry model..?,
-
Stream: {device_id} (one stream entry for each stream)
- Image Format: {RGB, Gray, Complex, Scalar}. If Scalar, a color table might be available (in a separate field)
-
Probe sector: (A description handling 2D/3D sector/curvilinear/linear probes. Handles most cases, mask handles the rest. TODO: add figure. )
- origin {x,y} (position of sector arc center in image space)
- depth start (start offset from origin)
- depth stop (end offset from origin)
- azimuth (shape in the azimuth plane)
- type{linear, sector}
- width{angle/width}
- tilt {angle, optional}
- elevation (shape in the elevation plane, optional, NA for 2D probes)
- width{angle/width}
- type{linear, sector}
- tilt {angle, optional}
- exact: bool. If false, must use Mask stream to get exact geometry
- mask {device_id, optional}: a device_id that can be used to GET an IMAGE containing a mask describing the sector.
- Color table {device_id, optional} If given, points to a device_id that can be used to GET a COLORT, can be applied on scalar image values.
- optional parameters (name-value pairs, specified by description and value def (unit etc) examples given)
- frequency
- harmonic {y/n}
- focus points {array}
- pitch
- nyquist velocity
- packet size
- averaging window
- extension parameters (same as optional, but user-defined, nonstandard)
The scanner can be controlled by sending a state from client to server on a format similar to the one given in the properties section. This requires that the client know the value range, e.g. the available probes in order to set a probe.
The following must be controllable:
- current probe
- current application
- stream on/off for each stream
- probe sector shape for each stream.
The status can be organized as a xml document, and can thus be embedded into any text field in any message. XML also provides an easy system for optional and extension parameters. Each DOM-element can contain a reserved extension element. Here custom properties can be added without interfering with the required/optional properties.
The existing STATUS message can be reused for this purpose, or a new similar message can be defined. Status messages are defined for the scanner as a whole, and for each specific stream.
- GET_STATUS {no device_id} [CLI->SVR]: Request scanner to return STATUS{scanner_id}.
- STATUS{scanner_id} [SVR->CLI]: A status for the entire scanner, with a XML doc containing only root items (application, available probes, streams, current probe, streams.
- STT/STP_STATUS{scanner_id} [CLI->SVR]: start/stop streaming of scanner status. Status is only sent when changed.
- RTS_STATUS{scanner_id} [SVR->CLI]: reply when start/stop called
- GET_STATUS {no stream_id} [CLI->SVR]: Request scanner to return STATUS{stream_id}.
- STATUS{stream_id} [SVR->CLI]: A status for the stream, with a XML doc containing properties for this stream only.
- STT/STP_STATUS{stream_id} [CLI->SVR]: start/stop streaming of stream status. Status is only sent when changed.
- RTS_STATUS{stream_id} [SVR->CLI]: reply when start/stop called
- IMAGE{stream_id} [SVR->CLI]: An image from the given stream, corresponding to the status given in STATUS{stream_id}.
- STT/STP_IMAGE{stream_id} [CLI->SVR]: start/stop image streaming.
- RTS_IMAGE{stream_id} [SVR->CLI]: reply when start/stop called
- Not added: Available range for all settable properties. Not easy to query on scanners, overkill.
- Not added: General catch-all geometry description for sector. The proposal catches all normal cases, while the Mask Stream provides an exact description of other cases.