PlusLib  2.9.0
Software library for tracked ultrasound image acquisition, calibration, and processing.
Enhance US sequence (EnhanceUsTrpSequence)

This device applies a series of vtk image filter processing steps to US images. Filter parameters are read from the ImageProcessingOperations element of the config file.

Device configuration settings

  • attribute.png
    Type = "ImageProcessor"
    required.png
    • element.png
      Processor
      • attribute.png
        Type = "vtkPlusTransverseProcessEnhancer"
      • attribute.png
        NumberOfScanlines
        required.png
      • attribute.png
        NumberOfSamplesPerScanline
        required.png
      • element.png
        ScanConversion
        • attribute.png
          TransducerName
          required.png
        • attribute.png
          TransducerGeometry
          required.png
        • attribute.png
          RadiusStartMm
          optional.png
          Default = "50"
        • attribute.png
          RadiusStopMm
          optional.png
          Default = "120"
        • attribute.png
          ThetaStartDeg
          optional.png
          Default = "-24"
        • attribute.png
          ThetaStopDeg
          optional.png
          Default = "24"
        • attribute.png
          OutputImageSizePixel
          optional.png
          Default = "820 616"
        • attribute.png
          TransducerCenterPixel
          optional.png
          Default = "410 35"
        • attribute.png
          OutputImageSpacingMmPerPixel
          optional.png
          Default = "0.1526 0.1526"
      • element.png
        ImageProcessingOperations
        • attribute.png
          SaveIntermediateResults
          optional.png
          Default = "False"
        • attribute.png
          ReturnToFanImage
          optional.png
          Default = "True"
        • element.png
          GaussianSmoothing
          • attribute.png
            GaussianStdDev
            optional.png
            Default = "3.0"
          • attribute.png
            GaussianKernelSize
            optional.png
            Default = "5.0"
        • element.png
          Thresholding
          • attribute.png
            ThresholdOutValue
            optional.png
            Default = "0.0"
          • attribute.png
            LowerThreshold
            optional.png
            Default = "30.0"
          • attribute.png
            UpperThreshold
            optional.png
            Default = "255.0"
        • element.png
          IslandRemoval
          • attribute.png
            IslandAreaThreshold
            optional.png
            Default = "700"
        • element.png
          Erosion
          • attribute.png
            ErosionKernelSize
            optional.png
            Default = "5 5"
        • element.png
          Dilation
          • attribute.png
            DilationKernelSize
            optional.png
            Default = "10 5"
        • element.png
          vtkPlusUsSimulatorAlgo
          • attribute.png
            NumberOfScanlines
            required.png
          • attribute.png
            NumberOfSamplesPerScanline
            required.png

Example configuration file PlusDeviceSet_Server_Ultrasonix_C5-2_TransverseProcessEnhancer_2Processing.xml

<PlusConfiguration version="2.1">
<DataCollection StartupDelaySec="1.0" >
<DeviceSet
Name="PlusServer: Ultrasound transverse process enhancer component 2: Processing - with tracking"
Description="Runs on 64-bit processing machine. Receives tracked ultrasound frames at port 18944 from the 32-bit PlusServer running on the Ultrasonix machine (change ServerAddress from localhost to Ultrasonix IP), segments bone surfaces, and sends tracked bone frames to an IGTLink client at port 18945 in Slicer" />
<Device
Id="OpenIGTLinkVideoReceiveDevice"
Type="OpenIGTLinkVideo"
MessageType="TRACKEDFRAME"
ServerAddress="localhost"
ServerPort="18944"
ReconnectOnReceiveTimeout="false"
UseReceivedTimestamps="false"
IgtlMessageCrcCheckEnabled="false"
AcquisitionRate="30" >
<DataSources>
<DataSource Type="Video" Id="Video" BufferSize="50" PortUsImageOrientation="UF" />
</DataSources>
<OutputChannels>
<OutputChannel Id="TrackedVideoStream" VideoDataSourceId="Video" />
</OutputChannels>
</Device>
<Device
Id="BoneEnhancer"
Type="ImageProcessor" >
<DataSources>
<DataSource Type="Video" Id="Video" PortUsImageOrientation="UF" />
</DataSources>
<InputChannels>
<InputChannel Id="TrackedVideoStream" />
</InputChannels>
<OutputChannels>
<OutputChannel Id="BoneVideoStream" VideoDataSourceId="Video" />
</OutputChannels>
<Processor Type="vtkPlusBoneEnhancer" NumberOfScanLines="200" NumberOfSamplesPerScanLine="210">
<ScanConversion
TransducerName="Ultrasonix_C5-2"
TransducerGeometry="CURVILINEAR"
RadiusStartMm="50.0"
RadiusStopMm="120.0"
ThetaStartDeg="-24"
ThetaStopDeg="24"
OutputImageSizePixel="820 616"
TransducerCenterPixel="320 35"
OutputImageSpacingMmPerPixel="0.1526 0.1526"
NumberOfSamplesPerScanLine="210"/>
<ImageProcessingOperations
SaveIntermediateResults="True"
ConvertToLinesImage="True"
ThresholdingEnabled="True"
GaussianEnabled="True"
EdgeDetectorEnabled="True"
IslandRemovalEnabled="True"
ErosionEnabled="True"
DilationEnabled="True"
ReconvertBinaryToGreyscale="True"
ReturnToFanImage="True">
<GaussianSmoothing GaussianStdDev="3" GaussianKernelSize="5"/>
<Thresholding ThresholdOutValue="0" LowerThreshold="30" UpperThreshold="255"/>
<IslandRemoval IslandAreaThreshold="700"/>
<Erosion ErosionKernelSize="5 5"/>
<Dilation DilationKernelSize="10 5"/>
<vtkPlusUsSimulatorAlgo
IncomingIntensityMwPerCm2="300"
BrightnessConversionGamma="0.2"
BrighntessConversionOffset="30"
NumberOfScanlines="128"
NumberOfSamplesPerScanline="200"
NoiseAmplitude="5.0"
NoiseFrequency="2.5 3.5 1"
NoisePhase="50 20 0"
/>
</ImageProcessingOperations>
</Processor>
</Device>
<!-- These capture devices allow you to save and compare the same sequence, before and after processing, if both EnableCapturingOnStart="True". -->
<Device
Id="RawCaptureDevice"
Type="VirtualCapture"
BaseFilename="RawRecording.igs.mha"
EnableCapturingOnStart="False" >
<InputChannels>
<InputChannel Id="TrackedVideoStream" />
</InputChannels>
</Device>
<Device
Id="ProcessedCaptureDevice"
Type="VirtualCapture"
BaseFilename="ProcessedRecording.igs.mha"
EnableCapturingOnStart="False" >
<InputChannels>
<InputChannel Id="BoneVideoStream" />
</InputChannels>
</Device>
</DataCollection>
<CoordinateDefinitions>
<Transform From="BoneImage" To="Image"
Matrix="
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1" />
</CoordinateDefinitions>
<!-- Enable this Server's port in Slicer to see the processed image -->
<PlusOpenIGTLinkServer
MaxNumberOfIgtlMessagesToSend="1"
MaxTimeSpentWithProcessingMs="50"
ListeningPort="18945"
SendValidTransformsOnly="true"
OutputChannelId="BoneVideoStream" >
<DefaultClientInfo>
<MessageTypes>
<Message Type="IMAGE" />
</MessageTypes>
<ImageNames>
<Image Name="BoneImage" EmbeddedTransformToFrame="Image" />
</ImageNames>
</DefaultClientInfo>
</PlusOpenIGTLinkServer>
</PlusConfiguration>