3d/4d

3D images can be acquired using the 3D/4D software package. To begin acquiring, press the 3D button and select either the 3D or 4D option. Adjust the yellow box over the region of interest. Press update to begin capture. If the 3D option is selected, the motor will stop after one sweep. When the 4D option is selected, the motor will continue to sweep until the freeze button is pressed.





Data Capture
When the image is frozen, capture a volume using the save option on the touchscreen. A thumbnail with a box will appear on the bottom of the screen once a 3D volume has been saved. Clicking on the thumbnail will open the volume in the 3D engine assuming it is within 24 hours of the scan.



Data Format
The volume data with a .3dd file extension is saved in the same folder location where regular print screen images are saved D:\PatientInfo\. The volume file contains the raw 2D images (not scan-converted) used to construct the 3D volume. To construct the volume from the .vol file will require scan conversion to be applied in the x-y and y-z planes.

An xml file with extension .3dd.xml is saved along with the volume data. The xml file contains additional volume and probe information and its format is shown below.

 

    32.252000 43.902439 31 50.512001 200 <roiSampleNum>164</roiSampleNum> <lineNum>72</lineNum> <frame_angle>57.985119</frame_angle> <frame_offset_mm>40.000000</frame_offset_mm> <roiSampleLOffset>55</roiSampleLOffset> <roiSampleROffset>55</roiSampleROffset> </FourD>

</Params>

The following is the pseudo code for reading the 2D images from the .vol data file. Note that the .vol file only contains the non-scan converted 2D images that the Sonix exam software uses to construct the volume. In order to use this file for volume reconstruction will require scan conversion to be applied in the x-y and y-z planes.

// calculate the buffer size // Unlike data from cine buffer, there is no header info in // the 3D rendering buffer, so don't +4 for each frame

int frameSize = lineNum * sampleNum; int nDataSize = frameSize * nimages_per_volume; BYTE* data = new BYTE[nDataSize]; fread(data, 1, nDataSize, pFile); fclose(pFile); BYTE* dp = data;

//read each image frame for (int i = nimages_per_volume - 1; i >= 0; i--) {   getImage(dp, sampleNum, lineNum, i); dp += frameSize; }