GPS Data Collection

From WikiSonix
Jump to: navigation, search
Transducer and Needle Tracking[edit]

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 GPS-enabled transducers (eg. L14-5/38 or C5-2/60). The last two slots are designated for needles with built in sensors.

To program the correct transducer and needle type that are 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).

SonixGPS Settings

Once the GPS mode is turned on using the 'GPS' touchscreen button, the display will show the needle and probe position status. The quality indicator bar on screen will show the worse case between the needle and probe sensor assuming both the devices are plugged in.

Probe and Needle Tracking
Transducer Tracking Only[edit]

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.

SonixGPS Dialog
SonixGPS Dialog
Data Format[edit]

With the SonixGPS add-on, and a GPS-enabled transducer, users of the SonixTOUCH can collect positional information. 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.

Data Storage Dialog

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:

Ultrasonix also provides Matlab code to read the GPS positional data file. It is available for download from the research forum (link)

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:

14.8449 0.9477 -0.0018
15.0061 0.0016 1.00
0.1638 0.0166 0.0052

The calibration matrix for the convex probe is:

-29.7558 0.9433 -0.0034
-0.087 0.0033 1.00
-0.7053 0.0132 -0.0087

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.