An open-source real-time ultrasound reconstruction system for four-dimensional imaging of moving organs

Pace, Danielle1*,Gobbi, David,Wedlake, Chris,Gumprecht, Jan,Boisvert, Jonathan,Tokuda, Junichi,Hata, Nobuhiko,Peters, Terry
1.Kitware Inc
Abstract
An open-source real-time ultrasound reconstruction system for four-dimensional imaging of moving organs

Abstract

Four-dimensional imaging is a necessary step in computer-assisted interventions (CAI) performed on moving surgical targets, such as those located within the beating heart or influenced by respiratory motion. Ultrasound (US) is often the best imaging modality for this application, as it provides good contrast and spatial resolution while remaining simple to integrate into the operating room. However, conventional 2D US imaging is often insufficient for preoperative planning and surgical guidance, real-time 3D ultrasound imaging using matrix array probes has a smaller field of view and lower spatial resolution, and 3D volumes created using 3D US reconstruction suffer from motion artifacts. As an alternative, gated 4D ultrasound reconstruction using a tracked 2D US probe is a promising technology. In this paper, we present SynchroGrab4D to the open-source community. SynchroGrab4D performs 3D and 4D US reconstruction in real-time while visualizing the output volume(s) within an OpenIGTLink-compliant CAI system, such as 3D Slicer. Also included are VTK classes that perform ECG-gating and that interface with several commercial tracking systems, as well as a 4D Imaging module in 3D Slicer. Our open-source imaging system can be used to collect the 4D image data required for computer-assisted surgical planning and intraoperative guidance for a variety of moving organs.

Keywords

Ultrasound reconstructionFour-dimensional imagingGatingCardiac proceduresRespiratory motionComputer assisted interventionsIntraoperative imagingImage-guided therapy
Manuscript
Source Code and Data

Source Code and Data

SynchroGrab4DSourcesApplications4DUltrasound.cxx48.6 KBCMakeLists.txt507 BvtkDataProcessor.cxx19.1 KBvtkDataProcessor.h5.3 KBvtkDataSender.cxx29.9 KBvtkDataSender.h7.7 KBvtkInstrumentTracker.cxx15.2 KBvtkInstrumentTracker.h4.9 KBCMakeAtamaiVTKThirdParty.cmake2.5 KBGetMissingVTKConfig42.cmake2.1 KBImportVTKUtilities.cmake1.9 KBKitCommonBlock.cmake6.5 KBLastConfigureStepCMakeLists.txt901 BCMakeLists.txt2.6 KBCMakeOptions.cmake4.7 KBOpenIGTLink.svnall-wcprops1.6 KBentries2.2 KBprop-baseigtlConfigure.h.in.svn-base49 BigtlTypeConfig.h.in.svn-base49 Bigtl_typeconfig.h.in.svn-base49 Btext-baseCMakeLists.txt.svn-base9.8 KBDartConfig.cmake.svn-base1.9 KBFindOpenIGTLink.cmake.svn-base3.9 KBGenerateOpenIGTLinkConfig.cmake.svn-base3.7 KBLICENSE.txt.svn-base1.5 KBOpenIGTLinkConfig.cmake.in.svn-base2.3 KBOpenIGTLinkConfigPlatform.cmake.svn-base3.4 KBREADME.txt.svn-base275 BUseOpenIGTLink.cmake.in.svn-base1.2 KBigtlConfigure.h.in.svn-base1 KBigtlTypeConfig.h.in.svn-base2 KBigtl_typeconfig.h.in.svn-base2 KBCMakeLists.txt9.8 KBDartConfig.cmake1.9 KBData.svnall-wcprops91 Bentries202 BDocuments.svnall-wcprops222 Bentries400 Btext-baseCMakeLists.txt.svn-base60 BCMakeLists.txt60 BDoxygen.svnall-wcprops784 Bentries980 Btext-baseDoxygenFooter.html.svn-base391 BDoxygenHeader.html.svn-base1.1 KBDoxygenStyle.css.svn-base937 BMainPage.dox.svn-base2.1 KBModules.dox.svn-baseDoxygenFooter.html391 BDoxygenHeader.html1.1 KBDoxygenStyle.css937 BMainPage.dox2.1 KBModules.doxPapers.svnall-wcprops236 Bentries390 Btext-baseCMakeLists.txt.svn-base41 BCMakeLists.txt41 BInsightJournal2008.svnall-wcprops2.2 KBentries2.3 KBprop-basepicins.sty.svn-base30 Btext-baseCMakeLists.txt.svn-base2.7 KBInsightArticle.cls.svn-base4.1 KBInsightJournal.bib.svn-base157.6 KBInsightJournal.ist.svn-base220 BInsightJournal.sty.svn-base34.6 KBOpenIGTLinkIJ2008.tex.svn-base3.8 KBalgorithm.sty.svn-base2.2 KBalgorithmic.sty.svn-base5.4 KBamssymb.sty.svn-base14.9 KBfancyhdr.sty.svn-base14.4 KBfloatflt.sty.svn-base10.8 KBfncychap.sty.svn-base10.1 KBpicins.sty.svn-base17.3 KBtimes.sty.svn-base857 BCMakeLists.txt2.7 KBInsightArticle.cls4.1 KBInsightJournal.bib157.6 KBInsightJournal.ist220 BInsightJournal.sty34.6 KBOpenIGTLinkIJ2008.tex3.8 KBalgorithm.sty2.2 KBalgorithmic.sty5.4 KBamssymb.sty14.9 KBfancyhdr.sty14.4 KBfloatflt.sty10.8 KBfncychap.sty10.1 KBpicins.sty17.3 KBtimes.sty857 BProtocol.svnall-wcprops240 Bentries376 Bprop-baseCMakeLists.txt.svn-base30 Btext-baseCMakeLists.txt.svn-base59 BCMakeLists.txt59 BExamples.svnall-wcprops220 Bentries413 Btext-baseCMakeLists.txt.svn-base338 BCMakeLists.txt338 BImager.svnall-wcprops506 Bentries685 Btext-baseCMakeLists.txt.svn-base403 BImagerClient.cxx.svn-base5.8 KBImagerServer.cxx.svn-base6.2 KBCMakeLists.txt403 BImagerClient.cxx5.8 KBImagerServer.cxx6.2 KBimg.svnall-wcprops970 Bentries1.2 KBprop-baseigtlTestImage1.raw.svn-base53 BigtlTestImage2.raw.svn-base53 BigtlTestImage3.raw.svn-base53 BigtlTestImage4.raw.svn-base53 BigtlTestImage5.raw.svn-base53 BigtlTestImage6.raw.svn-base53 Btext-baseigtlTestImage1.raw.svn-base64 KBigtlTestImage2.raw.svn-base64 KBigtlTestImage3.raw.svn-base64 KBigtlTestImage4.raw.svn-base64 KBigtlTestImage5.raw.svn-base64 KBigtlTestImage6.raw.svn-base64 KBigtlTestImage1.raw64 KBigtlTestImage2.raw64 KBigtlTestImage3.raw64 KBigtlTestImage4.raw64 KBigtlTestImage5.raw64 KBigtlTestImage6.raw64 KBReceiver.svnall-wcprops518 Bentries679 Btext-baseCMakeLists.txt.svn-base408 BReceiveClient.cxx.svn-base8.6 KBReceiveServer.cxx.svn-base8.7 KBCMakeLists.txt408 BReceiveClient.cxx8.6 KBReceiveServer.cxx8.7 KBStatus.svnall-wcprops506 Bentries675 Btext-baseCMakeLists.txt.svn-base401 BStatusClient.cxx.svn-base2.4 KBStatusServer.cxx.svn-base2.5 KBCMakeLists.txt401 BStatusClient.cxx2.4 KBStatusServer.cxx2.5 KBTracker.svnall-wcprops796 Bentries988 Btext-baseCMakeLists.txt.svn-base613 BTrackerClient.cxx.svn-base3.2 KBTrackerClient2.cxx.svn-base3.5 KBTrackerServer.cxx.svn-base3.2 KBTrackerServer2.cxx.svn-base3.2 KBCMakeLists.txt613 BTrackerClient.cxx3.2 KBTrackerClient2.cxx3.5 KBTrackerServer.cxx3.2 KBTrackerServer2.cxx3.2 KBFindOpenIGTLink.cmake3.9 KBGenerateOpenIGTLinkConfig.cmake3.7 KBLICENSE.txt1.5 KBOpenIGTLinkConfig.cmake.in2.3 KBOpenIGTLinkConfigPlatform.cmake3.4 KBREADME.txt275 BSource.svnall-wcprops6.1 KBentries7.8 KBprop-baseigtlClientSocket.cxx.svn-base49 BigtlClientSocket.h.svn-base49 BigtlConditionVariable.cxx.svn-base49 BigtlConditionVariable.h.svn-base49 BigtlCreateObjectFunction.h.svn-base49 BigtlFastMutexLock.cxx.svn-base49 BigtlFastMutexLock.h.svn-base49 BigtlImageMessage.cxx.svn-base49 BigtlImageMessage.h.svn-base49 BigtlLightObject.cxx.svn-base49 BigtlLightObject.h.svn-base49 BigtlMacro.h.svn-base49 BigtlMath.cxx.svn-base49 BigtlMath.h.svn-base49 BigtlMessageBase.cxx.svn-base49 BigtlMessageBase.h.svn-base49 BigtlMessageHeader.h.svn-base49 BigtlMultiThreader.cxx.svn-base49 BigtlMultiThreader.h.svn-base49 BigtlMutexLock.cxx.svn-base49 BigtlMutexLock.h.svn-base49 BigtlOSUtil.cxx.svn-base49 BigtlOSUtil.h.svn-base49 BigtlObject.cxx.svn-base49 BigtlObject.h.svn-base49 BigtlObjectFactory.h.svn-base49 BigtlObjectFactoryBase.cxx.svn-base49 BigtlObjectFactoryBase.h.svn-base49 BigtlPositionMessage.cxx.svn-base49 BigtlPositionMessage.h.svn-base49 BigtlServerSocket.cxx.svn-base49 BigtlServerSocket.h.svn-base49 BigtlSimpleFastMutexLock.cxx.svn-base49 BigtlSimpleFastMutexLock.h.svn-base49 BigtlSmartPointer.h.svn-base49 BigtlSocket.cxx.svn-base49 BigtlSocket.h.svn-base49 BigtlStatusMessage.cxx.svn-base49 BigtlStatusMessage.h.svn-base49 BigtlTimeStamp.cxx.svn-base49 BigtlTimeStamp.h.svn-base49 BigtlTransformMessage.cxx.svn-base49 BigtlTransformMessage.h.svn-base49 BigtlTypes.h.svn-base49 BigtlWin32Header.h.svn-base49 BigtlWindows.h.svn-base49 Btext-baseCMakeLists.txt.svn-base2.1 KBigtlClientSocket.cxx.svn-base2.4 KBigtlClientSocket.h.svn-base2 KBigtlConditionVariable.cxx.svn-base5.3 KBigtlConditionVariable.h.svn-base5.1 KBigtlCreateObjectFunction.h.svn-base2.8 KBigtlFastMutexLock.cxx.svn-base1.5 KBigtlFastMutexLock.h.svn-base3.5 KBigtlImageMessage.cxx.svn-base10.7 KBigtlImageMessage.h.svn-base4.1 KBigtlLightObject.cxx.svn-base6.2 KBigtlLightObject.h.svn-base4.8 KBigtlMacro.h.svn-base36.2 KBigtlMath.cxx.svn-base3.8 KBigtlMath.h.svn-base1017 BigtlMessageBase.cxx.svn-base7.4 KBigtlMessageBase.h.svn-base5.6 KBigtlMessageHeader.h.svn-base2.7 KBigtlMultiThreader.cxx.svn-base25.8 KBigtlMultiThreader.h.svn-base9.3 KBigtlMutexLock.cxx.svn-base2.8 KBigtlMutexLock.h.svn-base4.3 KBigtlOSUtil.cxx.svn-base1004 BigtlOSUtil.h.svn-base822 BigtlObject.cxx.svn-base11.7 KBigtlObject.h.svn-base7.2 KBigtlObjectFactory.h.svn-base2.4 KBigtlObjectFactoryBase.cxx.svn-base17.3 KBigtlObjectFactoryBase.h.svn-base7.5 KBigtlPositionMessage.cxx.svn-base4.5 KBigtlPositionMessage.h.svn-base2.2 KBigtlServerSocket.cxx.svn-base3.4 KBigtlServerSocket.h.svn-base2.5 KBigtlSimpleFastMutexLock.cxx.svn-base3 KBigtlSimpleFastMutexLock.h.svn-base2.9 KBigtlSmartPointer.h.svn-base4.9 KBigtlSocket.cxx.svn-base10.1 KBigtlSocket.h.svn-base5.3 KBigtlStatusMessage.cxx.svn-base3.3 KBigtlStatusMessage.h.svn-base3.1 KBigtlTimeStamp.cxx.svn-base4.6 KBigtlTimeStamp.h.svn-base2.1 KBigtlTransformMessage.cxx.svn-base4.9 KBigtlTransformMessage.h.svn-base1.8 KBigtlTypes.h.svn-base2.5 KBigtlWin32Header.h.svn-base5.6 KBigtlWindows.h.svn-base1.5 KBCMakeLists.txt2.1 KBigtlClientSocket.cxx2.5 KBigtlClientSocket.h2.2 KBigtlConditionVariable.cxx5.5 KBigtlConditionVariable.h5.3 KBigtlCreateObjectFunction.h3 KBigtlFastMutexLock.cxx1.7 KBigtlFastMutexLock.h3.7 KBigtlImageMessage.cxx10.9 KBigtlImageMessage.h4.2 KBigtlLightObject.cxx6.4 KBigtlLightObject.h5 KBigtlMacro.h36.4 KBigtlMath.cxx3.9 KBigtlMath.h1.1 KBigtlMessageBase.cxx7.5 KBigtlMessageBase.h5.8 KBigtlMessageHeader.h2.8 KBigtlMultiThreader.cxx26 KBigtlMultiThreader.h9.4 KBigtlMutexLock.cxx2.9 KBigtlMutexLock.h4.5 KBigtlOSUtil.cxx1.1 KBigtlOSUtil.h951 BigtlObject.cxx11.9 KBigtlObject.h7.4 KBigtlObjectFactory.h2.6 KBigtlObjectFactoryBase.cxx17.5 KBigtlObjectFactoryBase.h7.7 KBigtlPositionMessage.cxx4.6 KBigtlPositionMessage.h2.3 KBigtlServerSocket.cxx3.6 KBigtlServerSocket.h2.6 KBigtlSimpleFastMutexLock.cxx3.2 KBigtlSimpleFastMutexLock.h3.1 KBigtlSmartPointer.h5.1 KBigtlSocket.cxx10.2 KBigtlSocket.h5.4 KBigtlStatusMessage.cxx3.5 KBigtlStatusMessage.h3.2 KBigtlTimeStamp.cxx4.8 KBigtlTimeStamp.h2.2 KBigtlTransformMessage.cxx5.1 KBigtlTransformMessage.h1.9 KBigtlTypes.h2.7 KBigtlWin32Header.h5.8 KBigtlWindows.h1.7 KBigtlutil.svnall-wcprops2 KBentries2.6 KBprop-baseigtl_header.c.svn-base49 Bigtl_header.h.svn-base49 Bigtl_image.c.svn-base49 Bigtl_image.h.svn-base49 Bigtl_position.c.svn-base49 Bigtl_position.h.svn-base49 Bigtl_status.c.svn-base49 Bigtl_status.h.svn-base49 Bigtl_transform.c.svn-base49 Bigtl_transform.h.svn-base49 Bigtl_types.h.svn-base49 Bigtl_util.c.svn-base49 Bigtl_util.h.svn-base49 Bigtl_win32header.h.svn-base49 Btext-baseCMakeLists.txt.svn-base856 Bigtl_header.c.svn-base937 Bigtl_header.h.svn-base2 KBigtl_image.c.svn-base4.6 KBigtl_image.h.svn-base4.7 KBigtl_position.c.svn-base1.6 KBigtl_position.h.svn-base1.7 KBigtl_status.c.svn-base1.1 KBigtl_status.h.svn-base3.1 KBigtl_transform.c.svn-base1.1 KBigtl_transform.h.svn-base1.2 KBigtl_types.h.svn-base2.6 KBigtl_util.c.svn-base7.7 KBigtl_util.h.svn-base1.5 KBigtl_win32header.h.svn-base945 BCMakeLists.txt856 Bigtl_header.c1.1 KBigtl_header.h2.1 KBigtl_image.c4.7 KBigtl_image.h4.7 KBigtl_position.c1.7 KBigtl_position.h1.9 KBigtl_status.c1.3 KBigtl_status.h3.3 KBigtl_transform.c1.2 KBigtl_transform.h1.4 KBigtl_types.h2.7 KBigtl_util.c7.8 KBigtl_util.h1.6 KBigtl_win32header.h1.1 KBTesting.svnall-wcprops350 Bentries528 Btext-baseCMakeLists.txt.svn-base262 BigtlSocketTest.cxx.svn-base725 BCMakeLists.txt262 BigtlSocketTest.cxx725 Bigtlutil.svnall-wcprops800 Bentries992 Btext-baseCMakeLists.txt.svn-base751 Bigtl_header_test.c.svn-base1.1 KBigtl_image_test.c.svn-base1.2 KBigtl_transform_test.c.svn-base689 Bigtl_util_test.c.svn-base684 BCMakeLists.txt751 Bigtl_header_test.c1.1 KBigtl_image_test.c1.2 KBigtl_transform_test.c689 Bigtl_util_test.c684 BTools.svnall-wcprops214 Bentries363 Bprop-baseCMakeLists.txt.svn-base30 Btext-baseCMakeLists.txt.svn-base64 BCMakeLists.txt64 BUseOpenIGTLink.cmake.in1.2 KBUtilities.svnall-wcprops96 Bentries221 BDoxygen.svnall-wcprops514 Bentries695 Bprop-baseigtldoxygen.pl.in.svn-base30 Bigtlgroup.pl.svn-base30 Btext-basedoxygen.config.in.svn-base57.4 KBigtldoxygen.pl.in.svn-base84 Bigtlgroup.pl.svn-base1.9 KBdoxygen.config.in57.4 KBigtldoxygen.pl.in84 Bigtlgroup.pl1.9 KBigtlConfigure.h.in1.2 KBigtlTypeConfig.h.in2.1 KBigtl_typeconfig.h.in2.1 KBQueensOpenIGTLibsConfigure.h.in358 BREADME.txt6.1 KBSynchroGrab4DSources.zip1.9 MBSynchroGrabConfigure.h.in998 BVTKLibsAtamaiVTKCMakeLists.txt121 BvtkAtamaiTrackingCMakeLists.txt2.2 KBhints88 BvtkFakeTracker.cxx3.8 KBvtkFakeTracker.h1.1 KBvtkFlockTracker.cxx15.9 KBvtkFlockTracker.h4.3 KBvtkFrameToTimeConverter.cxx6.4 KBvtkFrameToTimeConverter.h5.1 KBvtkMicronTracker.cxx27.2 KBvtkMicronTracker.h19.5 KBvtkNDICertusTracker.cxx28 KBvtkNDICertusTracker.h5.4 KBvtkNDITracker.cxx35.1 KBvtkNDITracker.h6.9 KBvtkPOLARISTracker.cxx28 KBvtkPOLARISTracker.h6.3 KBvtkTracker.cxx22.2 KBvtkTracker.h12.3 KBvtkTrackerBuffer.cxx24.2 KBvtkTrackerBuffer.h6.5 KBvtkTrackerTool.cxx12.3 KBvtkTrackerTool.h7.9 KBvtkAtamaiTrackingUtilsCMakeLists.txt220 BMicronTrackerFilesCMakeLists.txt2.2 KBCameras.cpp5.1 KBCameras.h1.6 KBCollection.cpp1.9 KBCollection.h883 BCurrentCameras.cpp16.6 KBCurrentCameras.h3.5 KBDistMTC.dll252 KBMTC.lib79.9 KBdigiclops.dll132 KBlibMTC.a140.9 KBlibMTVideo.a20.9 KBlibdigiclops.a304.2 KBlibpnmutils.a14.8 KBlibtriclops.a720 KBtriclops.dll184 KBFacet.cpp3.5 KBFacet.h1.3 KBImportStatements.h270 BMCamera.cpp10.6 KBMCamera.h2.1 KBMTC.h28.9 KBMTVideo.h4.7 KBMarker.cpp5 KBMarker.h1.3 KBMarkerTemplates.cpp5.1 KBMarkerTemplates.h1.5 KBMarkers.cpp5.7 KBMarkers.h1.5 KBMicronTracker Demo.ini285 BMicronTrackerInterface.cpp37.9 KBMicronTrackerInterface.h23.3 KBPersistence.cpp2.3 KBPersistence.h1015 BUtilityFunctions.cpp4.4 KBUtilityFunctions.h1.7 KBVector.cpp1.5 KBVector.h804 BXform3D.cpp2.4 KBXform3D.h1 KBcmake_install.cmake471 Bdrive.h1.6 KBdrive32.c11 KBdriveunx-merge.c13.2 KBhci3.c35.4 KBhci3.h12.8 KBvtkmicrontrackerfiles.def1.6 KBflockCMakeLists.txt457 BMakefile.in1.2 KBREADME.TXT2.4 KBconfig.h.in875 Bconfigure135.1 KBconfigure.in1.6 KBflock.c85.1 KBflock.def1 KBflock.dox31.2 KBflock.h13.3 KBflock.txt489 Bflockdll.dsp4.1 KBflockdll.dsw777 Bflocktest.c3.8 KBflocktest.dsp4.3 KBinstall-sh5.7 KBvtkflock.def976 BndicapiCMakeLists.txt540 BMakefile.in1.2 KBREADME.TXT2 KBconfig.h.in875 Bconfigure54 KBconfigure.in1.4 KBinstall-sh5.7 KBndicapi.c74.5 KBndicapi.dox31.9 KBndicapi.h68.5 KBndicapi.txt2.1 KBndicapi_math.c9.1 KBndicapi_math.h4.5 KBndicapi_serial.c27 KBndicapi_serial.h9.5 KBndicapi_thread.c7.2 KBndicapi_thread.h3.5 KBpolaris.dox31.9 KBpolaris.h50.9 KBpolaris.txt2.1 KBpolaris_math.h4.9 KBpolarismodule.c37.4 KBsetup.py347 Bvtkndicapi.def1.9 KBCMakeLists.txt41 BRobartsVTKCMakeLists.txt74 BvtkRobartsECGCMakeLists.txt1.2 KBvtkHeartSignalBox.cxx7 KBvtkHeartSignalBox.h2.8 KBvtkSignalBox.cxx8.7 KBvtkSignalBox.h5.6 KBvtkUSBECGBox.cxx11.4 KBvtkUSBECGBox.h5.2 KBvtkRobartsUltrasoundCMakeLists.txt979 Bfixed.h20.2 KBvtkFreehandUltrasound2.cxx95.3 KBvtkFreehandUltrasound2.h20.8 KBvtkFreehandUltrasound2Dynamic.cxx87.1 KBvtkFreehandUltrasound2Dynamic.h17.7 KBvtkFreehandUltrasound2Helper.h59.9 KBvtkUltrasoundWin32Header.h2.5 KBvtkRobartsVideoCMakeLists.txt1.6 KBREADME.txt490 BvtkMILVideoSource.cxx30.8 KBvtkMILVideoSource.h9.4 KBvtkMILVideoSource2.cxx30.7 KBvtkMILVideoSource2.h10.2 KBvtkSonixVideoSource.cxx30.5 KBvtkSonixVideoSource.h8.1 KBvtkV4L2VideoSource.cxx46.3 KBvtkV4L2VideoSource.h13.1 KBvtkVideoBuffer2.cxx13 KBvtkVideoBuffer2.h4.7 KBvtkVideoFrame2.cxx21.5 KBvtkVideoFrame2.h8.8 KBvtkVideoSource2.cxx47.2 KBvtkVideoSource2.h13.8 KBvtkWin32VideoSource2.cxx28.9 KBvtkWin32VideoSource2.h3.7 KBWrappinghints2 Bfreehand_summary.xml1.2 KB

Select a file to preview