GPS Data Collection

Transducer and Needle Tracking
In exam clinical mode, both the transducer and needle are position are tracked. The GPS drive bay has four slots for connecting sensors. The first two slots are designated for probes with a sensor built in (eg. L14-5/38 or C5-2/60). The last two slots are designated for needle sensors.

To program the correct transducer type and needle type that is plugged into the system, go to Menu->Administrator Settings->Sonix GPS. Under SonixGPS Settings, choose the transducer type (linear or convex) and the needle sensor type (0.9mm, 0.5mm, bracket, eTRAX). After setting up the GPS settings, turn on the GPS option on the touch screen. The display will show the needle and probe position status on screen. The quality indicator bar on screen will show the worse case between the needle and probe sensor if both the devices are plugged in.

Transducer Tracking Only
In research mode, the user has the option to turn off needle tracking to track only the ultrasound transducer. To disable needle tracking, go to the SonixGPS Settings dialog and check the 'Turn Off Needle Tracking' option. Once Sonix GPS is turned on, only the probe position will be tracked and the quality indicator on screen will be for the probe.

Data Format
The user has the option to save the positional information from both the transducer and needle from the data storage dialog. GPS1 is for the transducer while GPS2 is for the needle.

With the SonixGPS add-on, and a GPS-enabled transducer, users of the SonixTOUCH can collect positional information.

The file header of data collected from Ulterius or Exam is the same as other imaging files (link), and the structure for each GPS sample is as follows:

typedef struct tagDOUBLE_POSITION_MATRIX_TIME_Q_RECORD {   double x;    double y;    double z;    double s[3][3]; double time; unsigned short quality; } DOUBLE_POSITION_MATRIX_TIME_Q_RECORD;

There are 896 bits per sample, however, this structure is padded with an extra 6 bytes (48 bits) at the end, and should read 0xCCCCCC. Each double is 8 bytes, and the unsigned short is 2 bytes.

The matrix information based on the A, E, R, X, Y, and Z:

s[0][0] = cosE * cosA; s[0][1] = -1.0*cosR * sinA + sinR*sinE*cosA; s[0][2] = sinR*sinA + cosR*sinE*cosA; s[1][0] = cosE*sinA; s[1][1] = cosR*cosA + sinR*sinE*sinA; s[1][2] = -1*sinR*cosA + cosR*sinE*sinA; s[2][0] = -1*sinE; s[2][1] = sinR*cosE; s[2][2] = cosR*cosE;

All the parameters in GPS coordinate transformation is in mm. The matrix above is a rotation matrix between the receiver coordinate system to the transmit coordinate system. This matrix is constructed by the A, E, R values provided by the sensor. The x, y, z values for the translation are also saved in the same file. To reconstruct the whole 3D volume from 2D frames acquired with different rotations/translations, one needs to convert all 2D ultrasound image pixels to the global transmit coordinate system. This requires:
 * 1) Transfer from the ultrasound coordinate system to the probe receive coordinate system through a probe calibration matrix (see below)
 * 2) Transfer from the probe receive coordinate system to the global transmit coordinate system through the rotation matrix and translation vector.

One can assume the transmitter's coordinate system is the world reference coordinate system and that the receiver's coordinate system is the intermediary "local" coordinate system. The rotation matrix goes from transmit to receive, so the equation used is just x_world = Calibration * x.

The calibration matrix for the linear probe is:

The calibration matrix for the convex probe is:

and the ultrasound image should be put into a vector format like:
 * 1
 * y
 * x

If the sensor you are using is different from the calibrated sensor, there is an extra transform will be involved: RActual = record; RIdeal = RActual * transformMatrix; tempVector = RIdeal * transformVector; pIdeal.a = record.x - tempVector.a; pIdeal.b = record.y - tempVector.b; pIdeal.c = record.z - tempVector.c;

Where record is the values you read from the sensor inside the probe.

Then finally, the transmit coordinate can be calculated by: TransPt = RIdeal * Cali * uImpt + pIdeal;

Since each probe may be different, please request the transform Matrix and transform Vector from Ultrasonix.