BUG and spatial calibration in fCal

jonortegav
Wed, 30 Oct 2024 15:47:48 +0000
Support

Hi,

I’m experiencing an issue where fCal unexpectedly closes whenever I attempt to use the Spatial Calibration toolbox. I’m not sure why this is happening, and I haven’t been able to identify any specific error messages leading up to the crash.

Moreover, I have not the opportunity to perform the spatial calibration because it says that “Phantom registration is not available”

Here’s a summary of my setup and the image showing the error:

fCal Version: PlusApp-2.9.0.20240906-Clarius-Win64
Operating System: Windows 11

Here is my XML config file

<PlusConfiguration version="2.1" PlusRevision="Plus-2.9.0.d463ee5d - Win64">
  <DataCollection StartupDelaySec="2">
    <DeviceSet Name="PlusServer: (Jon) XML file after doing Temporal Calibration" Description="XML file created after temporal calibration between NDI Polaris tracker and Clarius ultrasound device temporal calibration " />
    <Device
      Id="TrackerDevice"
      Type="PolarisTracker"
      ToolReferenceFrame="Tracker"
      SerialPort="5"
      CheckDSR="true"
      LocalTimeOffsetSec="0.103834">
      <DataSources>
        <DataSource Type="Tool" Id="Tool" RomFile="NdiToolDefinitions/8700339.rom" BufferSize="150">
          <CustomProperties>
            <Manufacturer>
              NDI
            </Manufacturer>
            <NdiIdentity>
              01000000
            </NdiIdentity>
            <PartNumber>
              8700339
            </PartNumber>
            <Revision>
              000
            </Revision>
            <SerialNumber>
              34801403
            </SerialNumber>
          </CustomProperties>
          <CustomProperties>
            <Manufacturer>
              NDI
            </Manufacturer>
            <NdiIdentity>
              01000000
            </NdiIdentity>
            <PartNumber>
              8700339
            </PartNumber>
            <Revision>
              000
            </Revision>
            <SerialNumber>
              34801403
            </SerialNumber>
          </CustomProperties>
          <CustomProperties>
            <Manufacturer>
              NDI
            </Manufacturer>
            <NdiIdentity>
              01000000
            </NdiIdentity>
            <PartNumber>
              8700339
            </PartNumber>
            <Revision>
              000
            </Revision>
            <SerialNumber>
              34801403
            </SerialNumber>
          </CustomProperties>
        </DataSource>
        <DataSource Type="Tool" Id="Stylus" RomFile="NdiToolDefinitions/8700340.rom" BufferSize="150">
          <CustomProperties>
            <Manufacturer>
              NDI
            </Manufacturer>
            <NdiIdentity>
              02000001
            </NdiIdentity>
            <PartNumber>
              8700340
            </PartNumber>
            <Revision>
              000
            </Revision>
            <SerialNumber>
              34802401
            </SerialNumber>
          </CustomProperties>
          <CustomProperties>
            <Manufacturer>
              NDI
            </Manufacturer>
            <NdiIdentity>
              02000001
            </NdiIdentity>
            <PartNumber>
              8700340
            </PartNumber>
            <Revision>
              000
            </Revision>
            <SerialNumber>
              34802401
            </SerialNumber>
          </CustomProperties>
          <CustomProperties>
            <Manufacturer>
              NDI
            </Manufacturer>
            <NdiIdentity>
              02000001
            </NdiIdentity>
            <PartNumber>
              8700340
            </PartNumber>
            <Revision>
              000
            </Revision>
            <SerialNumber>
              34802401
            </SerialNumber>
          </CustomProperties>
        </DataSource>
        <DataSource Type="Tool" Id="Reference" RomFile="NdiToolDefinitions/8700449.rom" BufferSize="150">
          <CustomProperties>
            <Manufacturer>
              NDI
            </Manufacturer>
            <NdiIdentity>
              01000000
            </NdiIdentity>
            <PartNumber>
              8700449
            </PartNumber>
            <Revision>
              000
            </Revision>
            <SerialNumber>
              3532DC02
            </SerialNumber>
          </CustomProperties>
          <CustomProperties>
            <Manufacturer>
              NDI
            </Manufacturer>
            <NdiIdentity>
              01000000
            </NdiIdentity>
            <PartNumber>
              8700449
            </PartNumber>
            <Revision>
              000
            </Revision>
            <SerialNumber>
              3532DC02
            </SerialNumber>
          </CustomProperties>
          <CustomProperties>
            <Manufacturer>
              NDI
            </Manufacturer>
            <NdiIdentity>
              01000000
            </NdiIdentity>
            <PartNumber>
              8700449
            </PartNumber>
            <Revision>
              000
            </Revision>
            <SerialNumber>
              3532DC02
            </SerialNumber>
          </CustomProperties>
        </DataSource>
      </DataSources>
      <OutputChannels>
        <OutputChannel Id="TrackerStream">
          <DataSource Id="Tool" />
          <DataSource Id="Stylus" />
          <DataSource Id="Reference" />
        </OutputChannel>
      </OutputChannels>
      <Parameters />
    </Device>
    <Device
      Id="VideoDevice"
      Type="Clarius"
      IpAddress="192.168.1.1"
      TcpPort="5828"
      FrameWidth="640"
      FrameHeight="480"
      ImuEnabled="TRUE"
      ImuOutputFileName="ImuOutput.csv"
      WriteImagesToDisk="FALSE">
      <DataSources>
        <DataSource Type="Video" Id="Video" PortName="B" PortUsImageOrientation="UN" BufferSize="150" />
      </DataSources>
      <OutputChannels>
        <OutputChannel Id="VideoStream" VideoDataSourceId="Video" />
      </OutputChannels>
      <Parameters />
    </Device>
    <Device
      Id="CaptureDevice_NDIPolaris"
      Type="VirtualCapture"
      BaseFilename="NDIRecording.igs.nrrd"
      EnableFileCompression="TRUE"
      RequestedFrameRate="20"
      EnableCapturing="FALSE"
      AdquisitionRate="20"
      EnableCaptureOnStart="FALSE">
      <InputChannels>
        <InputChannel Id="TrackerStream" />
      </InputChannels>
      <Parameters />
    </Device>
    <Device
      Id="CaptureDevice_Clarius"
      Type="VirtualCapture"
      BaseFilename="ClariusRecording.igs.mha"
      EnableCapturing="FALSE"
      AdquisitionRate="20"
      RequestedFrameRate="20"
      EnableFileCompression="FALSE"
      EnableCaptureOnStart="FALSE">
      <InputChannels>
        <InputChannel Id="VideoStream" />
      </InputChannels>
      <Parameters />
    </Device>
    <Device Id="TrackedVideoDevice" Type="VirtualMixer">
      <InputChannels>
        <InputChannel Id="TrackerStream" />
        <InputChannel Id="VideoStream" />
      </InputChannels>
      <OutputChannels>
        <OutputChannel Id="TrackedVideoStream" />
      </OutputChannels>
      <Parameters />
    </Device>
  </DataCollection>
  <CoordinateDefinitions>
    <Transform From="Image" To="Reference"
      Matrix="
        0.2	0	0	0
        0	0.2	0	0
        0	0	0.2	0
        0	0	0	1"
       Date="2024.10.16 08:58:47" />
    <Transform From="Image" To="TransducerOriginPixel"
      Matrix="
        1	0	0	-410
        0	1	0	5
        0	0	1	0
        0	0	0	1"
       Date="2011.12.06 17:57:00" />
    <Transform From="StylusTip" To="Stylus"
      Matrix="
        0.993277	0	-0.115758	-18.3409
        -0.000238798	-0.999998	-0.00204904	-0.324654
        -0.115758	0.00206291	-0.993275	-157.376
        0	0	0	1"
       Error="0.296001" Date="102824_165712" />
    <Transform From="Phantom" To="Reference"
      Matrix="
        -0.0128807	-0.998959	-0.0437555	-0.0547717
        -0.999908	0.0130579	-0.00376595	-27.2892
        0.00433338	0.043703	-0.999035	230.147
        0	0	0	1"
       Error="1.35234" Date="103024_133300" />
  </CoordinateDefinitions>
  <Rendering WorldCoordinateFrame="Reference" DisplayedImageOrientation="MF">
    <DisplayableObject Type="Model" ObjectCoordinateFrame="TransducerOrigin" Id="ProbeModel" File="Probe_L14-5_38.stl"
      ModelToObjectTransform="
        -1	0	0	29.7
        0	-1	0	1.5
        0	0	1	-14
        0	0	0	1" />
    <DisplayableObject Type="Model" ObjectCoordinateFrame="Reference" Id="Volume" />
    <DisplayableObject Type="Model" ObjectCoordinateFrame="StylusTip" Id="StylusModel" File="Stylus_Example.stl" />
    <DisplayableObject
      Id="PhantomModel"
      Type="Model"
      ObjectCoordinateFrame="Phantom"
      Opacity="0.6"
      File="fCal_2.0.stl"
      ModelToObjectTransform="
        1	0	0	-35
        0	1	0	-10
        0	0	1	-5
        0	0	0	1" />
    <DisplayableObject Type="Image" ObjectCoordinateFrame="Image" Id="LiveImage" />
  </Rendering>
  <PlusOpenIGTLinkServer MaxNumberOfIgtlMessagesToSend="1" MaxTimeSpentWithProcessingMs="50" ListeningPort="18944" SendValidTransformsOnly="true" OutputChannelId="TrackerStream">
    <DefaultClientInfo>
      <MessageTypes>
        <Message Type="TRANSFORM" />
      </MessageTypes>
      <TransformNames>
        <Transform Name="StylusTipToReference" />
        <Transform Name="ToolToReference" />
        <Transform Name="ToolToTracker" />
        <Transform Name="StylusToTracker" />
        <Transform Name="ReferenceToTracker" />
      </TransformNames>
    </DefaultClientInfo>
  </PlusOpenIGTLinkServer>
  <PlusOpenIGTLinkServer MaxNumberOfIgtlMessagesToSend="1" MaxTimeSpentWithProcessingMs="50" ListeningPort="54474" SendValidTransformsOnly="false" OutputChannelId="VideoStream">
    <DefaultClientInfo>
      <MessageTypes>
        <Message Type="IMAGE" />
        <Message Type="TRANSFORM" />
      </MessageTypes>
      <ImageNames>
        <Image Name="Image" EmbeddedTransformToFrame="Reference" />
      </ImageNames>
      <TransformNames>
        <Transform Name="ImageToReference" />
      </TransformNames>
    </DefaultClientInfo>
  </PlusOpenIGTLinkServer>
  <PhantomDefinition>
    <Description Name="fCAL" Type="Multi-N" Version="2.0" WiringVersion="2.0" Institution="Queen's University PerkLab" />
    <Geometry>
      <Pattern Type="NWire">
        <Wire Name="7:G1_g1" EndPointFront="30.0 0.0 20.0" EndPointBack="30.0 40.0 20.0" />
        <Wire Name="8:L1_h1" EndPointFront="55.0 0.0 20.0" EndPointBack="35.0 40.0 20.0" />
        <Wire Name="9:M1_m1" EndPointFront="60.0 0.0 20.0" EndPointBack="60.0 40.0 20.0" />
      </Pattern>
      <Pattern Type="NWire">
        <Wire Name="4:G3_g3" EndPointFront="30.0 0.0 10.0" EndPointBack="30.0 40.0 10.0" />
        <Wire Name="5:H3_l3" EndPointFront="35.0 0.0 10.0" EndPointBack="55.0 40.0 10.0" />
        <Wire Name="6:M3_m3" EndPointFront="60.0 0.0 10.0" EndPointBack="60.0 40.0 10.0" />
      </Pattern>
      <Pattern Type="NWire">
        <Wire Name="1:H5_h5" EndPointFront="35.0 0.0 0.0" EndPointBack="35.0 40.0 0.0" />
        <Wire Name="2:L5_i5" EndPointFront="55.0 0.0 0.0" EndPointBack="40.0 40.0 0.0" />
        <Wire Name="3:M5_m5" EndPointFront="60.0 0.0 0.0" EndPointBack="60.0 40.0 0.0" />
      </Pattern>
      <Landmarks>
        <Landmark Name="#1" Position="104.3 5.0 20.0" />
        <Landmark Name="#2" Position="104.3 45.0 20.0" />
        <Landmark Name="#3" Position="104.3 45.0 0.0" />
        <Landmark Name="#4" Position="104.3 -5.0 0.0" />
        <Landmark Name="#5" Position="-34.3 45.0 15.0" />
        <Landmark Name="#6" Position="-34.3 -5.0 20.0" />
        <Landmark Name="#7" Position="-34.3 -5.0 0.0" />
        <Landmark Name="#8" Position="-34.3 45.0 0.0" />
      </Landmarks>
      <Planes>
        <Plane Name="Superior" BasePoint="5.5 3.0 35.0" EndPoint1="135.0 3.0 35.0" EndPoint2="135.0 55.0 35.0" />
        <Plane Name="Inferior" BasePoint="5.5 55.0 0.0" EndPoint1="135.0 55.0 0.0" EndPoint2="135.0 5.5 0.0" />
        <Plane Name="Outside Unmarked" BasePoint="140.0 5.0 30.0" EndPoint1="140.0 50.0 30.0" EndPoint2="140.0 50.0 5.0" />
        <Plane Name="Inside Unmarked" BasePoint="125.0 40.0 30.0" EndPoint1="125.0 20.0 10.0" EndPoint2="125.0 40.0 10.0" />
        <Plane Name="Outside Marked" BasePoint="0.0 40.0 30.0" EndPoint1="0.0 40.0 5.5" EndPoint2="0.0 15.5 5.5" />
        <Plane Name="Outside Posterior" BasePoint="130.0 0.0 30.0" EndPoint1="20.0 0.0 30.0" EndPoint2="20.0 0.0 15.0" />
        <Plane Name="Inside Posterior" BasePoint="110.0 10.0 30.0" EndPoint1="40.0 10.0 30.0" EndPoint2="30.0 10.0 10.0" />
        <Plane Name="Outside Anterior" BasePoint="130.0 60.0 30.0" EndPoint1="20.0 60.0 30.0" EndPoint2="20.0 60.0 5.0" />
      </Planes>
      <References>
        <Reference Name="#1" Position="104.3 5.0 20.0" />
        <Reference Name="#2" Position="104.3 45.0 20.0" />
        <Reference Name="#3" Position="104.3 45.0 0.0" />
        <Reference Name="#4" Position="104.3 -5.0 0.0" />
        <Reference Name="#5" Position="-34.3 45.0 15.0" />
        <Reference Name="#6" Position="-34.3 -5.0 20.0" />
        <Reference Name="#7" Position="-34.3 -5.0 0.0" />
        <Reference Name="#8" Position="-34.3 45.0 0.0" />
      </References>
    </Geometry>
  </PhantomDefinition>
  <VolumeReconstruction
    OutputSpacing="0.5 0.5 0.5"
    ClipRectangleOrigin="0 0"
    ClipRectangleSize="820 616"
    Interpolation="LINEAR"
    Optimization="FULL"
    CompoundingMode="MEAN"
    FillHoles="OFF" />

    <fCal
    PhantomModelId="PhantomModel"
    ReconstructedVolumeId="Volume"
    TransducerModelId="ProbeModel"
    StylusModelId="StylusModel"
    ImageDisplayableObjectId="LiveImage"
    NumberOfCalibrationImagesToAcquire="200"
    NumberOfValidationImagesToAcquire="100"
    NumberOfStylusCalibrationPointsToAcquire="200"
    RecordingIntervalMs="100"
    MaxTimeSpentWithProcessingMs="70"
    ImageCoordinateFrame="Image"
    ProbeCoordinateFrame="Probe"
    ReferenceCoordinateFrame="Reference"
    TransducerOriginCoordinateFrame="TransducerOrigin"
    TransducerOriginPixelCoordinateFrame="TransducerOriginPixel"
    TemporalCalibrationDurationSec="10"
    FixedChannelId="VideoStream"
    FixedSourceId="Video"
    MovingChannelId="TrackerStream"
    MovingSourceId="ProbeToTracker"
    DefaultSelectedChannelId="TrackedVideoStream"
    FreeHandStartupDelaySec="3" />

    <Segmentation
    ApproximateSpacingMmPerPixel="0.078"
    MorphologicalOpeningCircleRadiusMm="0.27"
    MorphologicalOpeningBarSizeMm="2"
    MaxLinePairDistanceErrorPercent="10"
    AngleToleranceDegrees="10"
    MaxAngleDifferenceDegrees="10"
    MinThetaDegrees="-70"
    MaxThetaDegrees="70"
    MaxLineShiftMm="10"
    ThresholdImagePercent="10"
    CollinearPointsMaxDistanceFromLineMm="0.6"
    UseOriginalImageIntensityForDotIntensityScore="FALSE"
    NumberOfMaximumFiducialPointCandidates="20"
    ClipRectangleOrigin="27 27"
    ClipRectangleSize="766 562" />



<vtkTemporalCalibrationAlgo ClipRectangleOrigin="27 27" ClipRectangleSize="766 562" />

<vtkPlusPivotCalibrationAlgo
ObjectMarkerCoordinateFrame="Stylus"
ReferenceCoordinateFrame="Reference"
ObjectPivotPointCoordinateFrame="StylusTip" />

<vtkPlusPhantomLandmarkRegistrationAlgo
  PhantomCoordinateFrame="Phantom"
  ReferenceCoordinateFrame="Reference"
  StylusTipCoordinateFrame="StylusTip"
  DetectionTimeSec="1.0"
  StylusTipMaximumDisplacementThresholdMm="1.8" />

<vtkPhantomLinearObjectRegistrationAlgo
  PhantomCoordinateFrame="Phantom"
  ReferenceCoordinateFrame="Reference"
  StylusTipCoordinateFrame="StylusTip" />

<vtkPlusProbeCalibrationAlgo
  ImageCoordinateFrame="Image"
  ProbeCoordinateFrame="Probe"
  PhantomCoordinateFrame="Phantom"
  ReferenceCoordinateFrame="Reference" />

  <fCal>
    <ImageCoordinateFrame>
      Image
    </ImageCoordinateFrame>
    <WorldCoordinateFrame>
      Reference
    </WorldCoordinateFrame>
    <PhantomModelId>
      PhantomModel
    </PhantomModelId>
    <ReconstructedVolumeId>
      Volume
    </ReconstructedVolumeId>
    <TransducerModelId>
      ProbeModel
    </TransducerModelId>
    <StylusModelId>
      StylusModel
    </StylusModelId>
  </fCal>

</PlusConfiguration>

(if you prefer in image format)

4 posts - 1 participant