Difference between revisions of "Technical Information"

From NAMIC Wiki
Jump to: navigation, search
m (Fix MediaWiki formatting issue discovered while converting to GitHub Flavored Markdown using pandoc (via https://github.com/outofcontrol/mediawiki-to-gfm))
Tag: 2017 source edit
 
(108 intermediate revisions by 4 users not shown)
Line 1: Line 1:
=Technical information about the Connection of Synchrograb to Slicer=
+
=Technical information of 4D Ultrasound=
  
 
[http://wiki.na-mic.org/Wiki/index.php/User:Gumprecht <= Back to project page]
 
[http://wiki.na-mic.org/Wiki/index.php/User:Gumprecht <= Back to project page]
  
== SynchroGrab ==
 
  
[http://www.midasjournal.org/browse/publication/289 SynchroGrab] was developed at Queen's University Kingston, Canada. I generates 3D ultrasound volumes. In order create to create the 3D image it collects image data from an ultra sound device and combines them with the position data of a tracking device. With the combination of images and positions Synchrograb generates a 3D volume. At the end this 3D image is send to Slicer via OpenIGTLink.
+
You have to understand the following steps to use 4DUltrasound
  
In summary SynchroGrab does:
+
# Fullfill the requirements
* Continuous acquisition of ultrasound images using an open-interface ultrasound system
+
# Check out code and build
* Continuous acquisition of tracking information using a pose measurement system
+
# Prepare for use
* Explicit synchronization of the two acquisition threads
+
# Understand how to use 4DUltrasound Tutorial
* Reconstruction of 3D ultrasound volumes using the synchronized data
+
 
* Transfer of the raw ultrasound images, the 3D volumes and the probe tracking information to an OpenIGTLink-compliant system
+
===Requirement===
 +
In this section you will find requirements to run the software
 +
 
 +
==== Software ====
 +
* Compiled version of Slicer 3 ''(You must compile Slicer on your own. Follow the build instructions [https://www.slicer.org/wiki/Slicer3:Build_Instructions here] )''
 +
* Compiled version of VTK ''(Provided by Slicer 3 in the "<code>Slicer-lib/VTK-build</code>" directory)''
 +
* Source Code of OpenIGTLink ''(Provided by Slicer 3 in the "<code>Slicer-lib/OpenIGTLink</code>" directory)''
 +
* Compiled version of OpenIGTLink ''(Provided by Slicer 3 in "<code>Slicer-lib/OpenIGTLink-build</code>" directory)''
 +
 
 +
===== Modifications =====
 +
* OpenIGTLink Slicer Module:
 +
# Open the file vtkIGTLToMRMLImage.cxx in the source directory of the OpenIGTLinkIF module
 +
# Search for "crc" in this file -> You hit find the following lines <br> <br> <code> // If you want to skip CRC check, call Unpack() without argument. </code> <br> <code> int c = imgMsg->Unpack(1); </code> <br> <br>
 +
# Change the last line to: <code> int c = imgMsg->Unpack(); </code>
 +
# Recompile the OpenIGTLink Module
 +
## Change to the <code> Slicer-build </code> directory and type <code> $make </code>
 +
 
 +
* OpenIGTLink:
 +
# Open the file <code> igtlMessageBase.cxx </code> in the "Source" directory of OpenIGTLink
 +
# Search for "crc" -> You will hit the following line <code> igtl_uint64 crc = crc64(0, 0, 0LL); // initial crc </code>
 +
# Comment out this line -> <code> // igtl_uint64 crc = crc64(0, 0, 0LL); // initial crc </code>
 +
# Search for the next "crc" -> You will hit this line: <code> h->crc = crc64((unsigned char*)m_Body, GetBodyPackSize(), crc); </code>
 +
# Comment out this line -> <code> // h->crc = crc64((unsigned char*)m_Body, GetBodyPackSize(), crc); </code>
 +
# Recompile OpenIGTLink
 +
## Change to the OpenIGTLink-build directory and type <code> $make </code>
 +
 
 +
==== Hardware ====
 +
 
 +
[[Image:Drawing-System_Design_Hardware.png |600px]]
 +
 
 +
''a) Conventional computer with GPGPU graphics card and video capture board b) S-Video connection from US machine to Computer to transfer video information c) US machine d) Tracked US (2D US transducer with attached tracking sensor) e) Tracked surgical instrument f) Magnetic field generator of the tracking system g) EM tracker base station to control and to connect each tracking component h) Serial connection between EM tracker and computer to transfer position and orientation information.''
 +
 
 +
* NDI Aurora Tracker [http://www.ndigital.com/medical/aurora.php]
 +
** 2 * 6 DOF Sensors
 +
*** 1 Sensor attached to the ultrasound probe
 +
*** 1 Sensor can be used to simulate a tracked surgical instrument
 +
 
 +
* Ultrasound machine with Analog video output
 +
 
 +
* Frame Grabber Card
 +
The System has successfully been test with the following 2 frame grabber cards:
 +
** Hauppauge Impact VCB Model 558 [http://wiki.na-mic.org/Wiki/index.php/Technical_Information#Capture_Card_-_Hauppauge_WIN-TV_PCI_Board_ImpactVCB_Model_558]
 +
** Kuroutoshikou KRDM-CX23883
 +
 
 +
* Optional: nVidia Cuda compatible graphics card
 +
 
 +
===== Hardware Setup =====
 +
 
 +
Tracker attached to ultrasound transducer
 +
 
 +
[[Image:Photo-Tracker_attached_to_Ultrasound.png | 400px ]]
  
 
===Build Instructions===
 
===Build Instructions===
 +
 +
 +
 +
 +
 
It is highly recommended to have a compiled version of Slicer and to have good knowledge about ''cmake''.
 
It is highly recommended to have a compiled version of Slicer and to have good knowledge about ''cmake''.
# Check out version 3282 from http://svn.na-mic.org/NAMICSandBox/trunk/SynchroGrabJGumprecht <br><br>''This version works without an ultrasound device and without a tracking device''<br> <br>
 
# Configure via ccmake (version > 2.6) <br> <br>''You need a compiled version of VTK'' <br> <br>
 
# Compile Synchrograb <br> <br> The first time you compile Synchrograb in Linux you may get the following error message <br> <br> <code> /usr/bin/ld: cannot find -lws2_32 <br> collect2: ld returned 1 exit status <br> make[2]: *** [bin/SynchroGrab] Error 1 <br> make[1]: *** [Applications/CMakeFiles/SynchroGrab.dir/all] Error 2 <br> make: *** [all] Error 2 <br> </code> <br> to resolve this error you have to delete <br> <br> <code> -lws2_32 -lwsock32 </code> <br> <br> in the following file <br> <br> <code>$YOUR_BUILD_DIR/Applications/CMakeFiles/SynchroGrab.dir/link.txt </code> <br> <br> Now you should be able to compile the code without any errors
 
  
===Running Synchrograb===
+
A video of the build process can be found [http://wiki.na-mic.org/Wiki/images/1/1f/BuildInstructions.swf here ] <br> <br>
You need a working version of Slicer with OpenIGTLink
+
 
 +
# '''Check out''' 4D Ultrasound from http://svn.na-mic.org/NAMICSandBox/trunk/4DUltrasound <br> <br>
 +
# '''Configure''' via ccmake (version > 2.6) in your build directory <br> <br> ''You need a compiled version of VTK + OpenIGTLink as well as the source code of OpentIGTLink'' <br> <br> If you know how to do this, skip the next steps and procede with ''Compile'' <br> <br>
 +
## Make a new directory in with the name "Build" in the 4DUltrasound dir: <br> <br> <em>  .../4DUltrasound$ mkdir Build </em> <br> <br>
 +
## Change into the Build directory <br> <br> <em>  .../4DUltrasound$ cd Build </em> <br> <br>
 +
## Execute ccmake in this directory with the parent directory as parameter <br> <br> <em>  .../4DUltrasound/Build$ ccmake ../ </em> <br> <br> If ccmake (version > 2.6) is not installed in your system: the executable can as well be found in: <em> .../Slicer3-lib/CMAKE-build/bin/ccmake </em> <br> <br>
 +
## Type "c" to start the configuration -> You will receive an error message that VTK was not found -> Type "e" to exit the help message <br> <br>
 +
## Change the cursor to the variable with the name "VTK_DIR" and hit ENTER <br> <br>
 +
## Fill in your VTK-Build directory and hit ENTER (if you have a compiled version of Slicer you can use: <em> .../Slicer3-lib/VTK-build </em>) <br> <br> ''(In Ubuntu you must provide the absolute path no relative path will work)'' <br> <br>
 +
## Hit "c" to start the configuration <br> <br> -> If you receive a warning, ignore it an hit "e" -> hit "c" again -> hit "e" to ignore the next warning -> Fill in the VTK-Build directory again -> hit "c" again -> Ignore the Integer-Type Error hit "e" again <br> <br>
 +
## Hit "c" <br> <br>
 +
## Enter the path to the directory of the compiled version of OpenIGTLink at the ''OpenIGTLink'' variable <br> <br>
 +
## Enter the path to the directory of the OpenIGTLink source code at the ''OPENIGTLINKSOURCE'' variable <br> <br>
 +
## Hit "c" <br> <br>
 +
## Set "BUILD_SHARED_LIBS" to OFF <br> <br>
 +
## Hit "g" to generate the Make files <br> <br>
 +
# '''Compile''' 4D Ultrasound: Type <em>$ make </em> in your build directory<br> <br> <em>  .../4DUltrasound/Build$ make </em>
 +
 
 +
=== Preparation to use 4D Ultrasound===
 +
 
 +
Tutorials how to prepare 4D Ultrasound for use can be found here: [[4DUltrasound_Preparation_to_use]]
 +
 
 +
===Running 4D Ultrasound===
 +
 
 +
Here you can see a video tutorial on how to use the software: [http://wiki.na-mic.org/Wiki/images/f/f9/Usage.swf]
 +
 
 +
You need a working version of Slicer with OpenIGTLink and you must
 
# Copy "CalibrationFile.txt" from <code> YOUR_SOURCE_DIR </code> to <code> YOUR_BUILD_DIR/bin </code>
 
# Copy "CalibrationFile.txt" from <code> YOUR_SOURCE_DIR </code> to <code> YOUR_BUILD_DIR/bin </code>
 
# Run Slicer
 
# Run Slicer
 
# Add an "''activer Server Connector''" in the OpenIGTLink module which is waiting for data at port 18944
 
# Add an "''activer Server Connector''" in the OpenIGTLink module which is waiting for data at port 18944
# Run Synchrograb on the same machine you run Slicer
+
# Run 4DUltrasound on the same machine you run Slicer
   $YOUR_BUILD_DIR/bin/SynchroGrab -c CalibrationFile.txt --reconstruct-volume
+
   $YOUR_BUILD_DIR/bin/4DUltrasound -c CalibrationFile.txt -gf -tu
 +
 
 +
====Commandline Options====
 +
{|border="0" cellpadding="4"
 +
|- bgcolor="silver"
 +
! Command !! Alternative !! Description
 +
|-
 +
| --calibration-file xxx || -c xxx || Specify the calibration file (mandatory)
 +
|-
 +
| --grab-ultrasound-frames || -gf || Grab ultrasound frames from the capture board
 +
|-
 +
| --track-ultrasound || -tu || Enable ultrasound tracking
 +
|-
 +
| --track-instrument || -ti || Enable instrument tracking
 +
|-
 +
| --simulate-instrument || -si || Simulate instrument
 +
|-
 +
| --get-calibration-data || -gcd || Get calibration data
 +
|-
 +
| --grab-one-frame XXX || -gof XXX || Grab one frame and store as the specified bitmap file
 +
|-
 +
| --verbose || -v || Print more information
 +
|-
 +
|}
  
 
==== TO DO ====
 
==== TO DO ====
{|border="0", cellpadding="5"
+
{|border="0" cellpadding="5"
 
|- bgcolor="silver"
 
|- bgcolor="silver"
 
! Priority !! MUST
 
! Priority !! MUST
 
|-
 
|-
| align="center" | || Update vtkTrackerSimulator
+
| align="center" | ||
|-
 
| bgcolor="#009900" align="center" | DONE || Complete vtkVideoSourceSimulator
 
 
|-
 
|-
| bgcolor="#009900" align="center" | DONE || Use CaptureCard to acquire images
+
| align="center" | ||  
 
|- bgcolor="silver"
 
|- bgcolor="silver"
 
! Priority !! SHOULD
 
! Priority !! SHOULD
 
|-
 
|-
| align="center", width="70px" | || width="600px"| Use splitted up vtkSynchroGrabPipeline
+
| align="center", width="70px" | || width="600px"| Clean up Code and Make files (Remove unnecessary Koeniginen parts)
 +
|-
 +
| align="center", width="70px" | || width="600px"| Automatically copy Calibration file into binary directory
 +
|-
 +
| align="center", width="70px" | || width="600px"| Fix compiler checking in cmake
 +
|-
 +
| align="center", width="70px" | || width="600px"| Enable differnet video modes and channels in vtkVideo4Linux2
 +
|-
 +
| align="center", width="70px" bgcolor="#009900" | DONE || width="600px"| Outsource OpenIGTLink library
 
|-
 
|-
| align="center", width="70px" | || width="600px"| Clean up start parameters (Add new ones etc.)
 
 
|- bgcolor="silver"
 
|- bgcolor="silver"
 
! Priority !! COULD
 
! Priority !! COULD
 +
|-
 +
| align="center" bgcolor="#009900" width="70px" | DONE || width="600px"| Replace SonixGrabber with Ultrasound in source code
 +
|-
 +
| align="center", width="70px" | || width="600px"| OpenIGTLink test feature
 +
|-
 +
| align="center", width="70px" | || width="600px"| Tracker test feature
 +
|-
 +
| align="center", width="70px" | || width="600px"| Ultrasound test feature
 
|-
 
|-
 
|}
 
|}
 
 
* Replace image acquistion part. We have to use a frame grabber card instead of reading the images directly from memory
 
* <del>Crate and use a tracking device simulator</del>
 
* <del>Create and use a ultrasound simulator</del>
 
* <del>Find out what is already coverd by Synchrograb</del>
 
* <del>Compile Synchrograb and see if everthing is working</del>
 
 
Check the following
 
* greyscale YUV
 
* RGB grab
 
* xawtv
 
* change memory copy
 
* implement my own deinterlacing
 
 
==== Contacts ====
 
* Jonathan Boisver
 
** Post Doc from Canada who implemented most of Synchrograb
 
** E-Mail: boisvert ( a t ) cs.queensu.ca
 
  
 
=== Ultrasound device ===
 
=== Ultrasound device ===
 +
The ultrasound images are received via a video capture card. Linux uses V4L2 to support the card.
  
I will receive the ultrasound images via a video capture card. I am going to use V4L as the card driver.
+
==== Capture Card - Hauppauge WIN-TV PCI Board ImpactVCB Model 558====
 
+
* [http://www.haupauge.com/site/products/data_impactvcb.html Hauppauge Homepage]
==== Capture Card - Hauppauge WIN-TV PCI Board ImpactVCB====
+
* Incoming images are digitized using high quality 4:2:2 ([http://en.wikipedia.org/wiki/YUV Y:U:V]) video sampling
* Existing Videocard: Hauppauge WIN-TV PCI Board ImpactVCB Model 558 [http://www.haupauge.com/site/products/data_impactvcb.html]
+
===== Linux (Ubuntu 8.10 , Fedora 5)=====
 +
* The card is automatically correct detected. No further configuration needed.
 
* Linux Driver: Video4Linux2 bt878
 
* Linux Driver: Video4Linux2 bt878
 
** "bt" stands for Brooktree the original Manufacturer. Now bought by Conexant
 
** "bt" stands for Brooktree the original Manufacturer. Now bought by Conexant
* The Linux driver (bttv) for the WinTV card is now part of the Linux kernel (version 2.2 and newer).
+
* The Linux driver (bttv) for the WinTV card is now part of the Linux kernel (version 2.6.xxx and newer).
 
* [http://www.haupauge.com/site/support/support_pci_878.html Hauppage Linux Information]
 
* [http://www.haupauge.com/site/support/support_pci_878.html Hauppage Linux Information]
 
* Linux installation hints [http://www.haupauge.com/site/support/linux.html]
 
* Linux installation hints [http://www.haupauge.com/site/support/linux.html]
* Specific Hardware information: [http://www.bttv-gallery.de/] !!be carefull huge page, takes a long time to load!!
 
 
* Modprobe option # for specific drivers: http://tldp.org/HOWTO/BTTV/cards.html
 
* Modprobe option # for specific drivers: http://tldp.org/HOWTO/BTTV/cards.html
 
** The Impact VCB has # 10
 
** The Impact VCB has # 10
** enable driver via: "''$ modprobe bttv card=10''" or add to /etc/modprobe.conf the following line "''options bttv card=10 ''"
+
** enable kernel module via: "''$ modprobe bttv card=10''" or add to /etc/modprobe.conf the following line "''options bttv card=10 ''"
* Channel: 3 delivers the s-video signal
+
** to switch to another card first remove the module via: "''$ modprobe -r bttv''"
 +
* The card uses NTSC video interlacing per default
 +
===== Hardware Information =====
 +
* Channel 3 delivers the s-video signal
 
** To set the channel add the following at the end of void vtkV4L2VideoSource::InitDevice(void):
 
** To set the channel add the following at the end of void vtkV4L2VideoSource::InitDevice(void):
 
<code>   
 
<code>   
Line 90: Line 188:
 
     errno_exit ("VIDIOC_S_INPUT");  
 
     errno_exit ("VIDIOC_S_INPUT");  
 
</code>
 
</code>
* Incoming images are digitized using high quality 4:2:2 video sampling
+
* Specific Hardware information: [http://www.bttv-gallery.de/] !!be carefull huge page, takes a long time to load!!
  
==== Video4Linux ====
+
==== Video4Linux2 ====
 
Video4Linux is part of the Linux kernel since version 2.6.xx
 
Video4Linux is part of the Linux kernel since version 2.6.xx
* [http://linuxtv.org/v4lwiki/index.php/Main_Page V4L Wiki]
+
* V4L2 wiki [http://www.linuxtv.org/wiki/index.php/Main_Page]
 +
* API Specificattion: [http://www.linuxtv.org/downloads/video4linux/API/V4L2_API/spec-single/v4l2.html]
 +
* [http://linux.bytesex.org/xawtv/ xawtv] software for video preview from the guy who wrote the bt8xx driver
 +
===== Old links may soon be dead =====
 +
* [http://linuxtv.org/v4lwiki/index.php/Main_Page V4L Old wiki]
 
** [http://linuxtv.org/v4lwiki/index.php/Bttv_devices_%28bt848%2C_bt878%29 Driver for our Video Card]
 
** [http://linuxtv.org/v4lwiki/index.php/Bttv_devices_%28bt848%2C_bt878%29 Driver for our Video Card]
 
* Link collection for V4L: [http://www.exploits.org/v4l]
 
* Link collection for V4L: [http://www.exploits.org/v4l]
 
* Homepage of the original developer of the bttv driver: [http://linux.bytesex.org/v4l2/] Is not up to date anymore
 
* Homepage of the original developer of the bttv driver: [http://linux.bytesex.org/v4l2/] Is not up to date anymore
 
* [http://www.thedirks.org/v4l2/ Old Informaton] they might not be be up to date anymore
 
* [http://www.thedirks.org/v4l2/ Old Informaton] they might not be be up to date anymore
* API Specificattion: [http://www.linuxtv.org/downloads/video4linux/API/V4L2_API/spec-single/v4l2.html]
 
  
 
==== Contacts ====
 
==== Contacts ====
Line 106: Line 207:
  
 
=== Tracking device ===
 
=== Tracking device ===
Track data via vtk not itk <br>
+
We are using a NDI Aurora tracker. Synchrograb includes an NDI tracker class which works out of the box with the Aurora NDI tracker.
 +
 
 
=====Contacts=====
 
=====Contacts=====
 
* Haiying Liu
 
* Haiying Liu
** He knows how to do this part, so there should be no big issues
 
  
 
=== Calibration ===
 
=== Calibration ===
Line 119: Line 220:
  
 
== Slicer ==
 
== Slicer ==
 +
I am using the Slicer development version, i.e. Slicer trunk.
  
So far there is nothing to do in Slicer, since I am just sending the complete 3D Volume via OpenIGTLink. The only work that has to be done by Slicer is to render and visualize the data.
+
=== Python Synchrograb Module ===
 
+
I implemented a Pyhton module for Slicer to start Synchrograb. The module can be found in [http://svn.na-mic.org/NAMICSandBox/trunk/SynchroGrabJGumprecht/SlicerModule this] svn repository. Basically it starts a new shell and calls the Synchrograb binary within this shell. All Synchrograb commandline options are available in the module. So fare it is not part of the Slicer repository.
I am using the trunk version of Slicer (3.3) since this has the OpenIGTLink module and the CUDA module.
 
  
=== 3D CUDA ===
+
=== Volume Rendering ===
I might not use Cuda accerlation since there is no real performance advantage at this point
+
Module '''VolumeRenderingCuda''' was used in Slicer for volume rendering. This module has been moved out of Slicer3 trunk and saved in NAMICSandBox/CUDAForVolumeRendering, and is not actively being developed. Now, we should use '''VolumeRendering''' module. Updated by Haiying Liu on Oct 30, 2009.
 +
<!-- === 3D CUDA ===
 +
I might not use Cuda acceleration since there is no real performance advantage at this point
  
 
==== TO DO ====
 
==== TO DO ====
Line 131: Line 234:
  
 
==== Contacts ====
 
==== Contacts ====
* Ben Grauer: [http://www.slicer.org/slicerWiki/index.php/Slicer3:Volume_Rendering_With_Cuda Volume Rendering with CUDA]
+
* Ben Grauer: [https://www.slicer.org/wiki/Slicer3:Volume_Rendering_With_Cuda Volume Rendering with CUDA]
 
* Nicholas Harlambang: CUDA Guru
 
* Nicholas Harlambang: CUDA Guru
  
Line 140: Line 243:
 
* '''Scalar Color Mapping''': You can click into and than in the color circle above and select certain colors for a specific value
 
* '''Scalar Color Mapping''': You can click into and than in the color circle above and select certain colors for a specific value
 
* '''Composite''': Here you can select different rendering modes
 
* '''Composite''': Here you can select different rendering modes
* '''Volume''': You can also select just to display a slice instead of the whole volume. You can transform the slice in the ''Transforms Module'' and than select the transformation matrix in '''Slice Matrix'''
+
* '''Volume''': You can also select just to display a slice instead of the whole volume. You can transform the slice in the ''Transforms Module'' and than select the ~ transformation matrix in '''Slice Matrix'''
 
* '''Plus/Minus''': Select if you want to see everything or just the volume on one side of the slice and on the other
 
* '''Plus/Minus''': Select if you want to see everything or just the volume on one side of the slice and on the other
 +
-->
  
 
=== Links ===
 
=== Links ===
  
 
* Sandbox page [http://wiki.na-mic.org/Wiki/index.php/Engineering:SandBox]
 
* Sandbox page [http://wiki.na-mic.org/Wiki/index.php/Engineering:SandBox]
 +
* [https://intweb/Sponsored_Staff_and_Volunteers  SPL Intraweb web for incoming staff]
 +
 +
* [http://slicer.spl.harvard.edu/slicerWiki/index.php/Slicer3:DocumentationWink Wink - Software for Video Documentation]
 +
 +
* [http://bwhbri.partners.org/Editorial_Service/ BWH Editorial Service]
 +
 +
 +
 +
=== Infos on loadable Modules ===
 +
  
 +
 +
[https://www.slicer.org/wiki/Slicer3:Loadable_Modules:HOWTO HowTo Loadable Module] <br>
 +
 +
[http://slicer.spl.harvard.edu/slicerWiki/index.php/Slicer3:How_to_implement_an_Interactive_Module_GUI HowToLoadable Module GUI]<br>
 +
 +
[http://wiki.slicer.org/slicerWiki/index.php/Slicer3:Execution_Model_Documentation Infos about Executable Modules inSlicer] <br>
 +
 +
 +
 +
=== Subscribe to different meetings ===
 +
 +
* Journal Club
 +
 +
* 1st Monday Seminar
 +
 +
* Office OPRC
 +
 +
* Radiology Grand Rounds
 +
 +
* Cimit Forum
 +
 +
<!--
 
=== How to "Enable CUDA 2.0 in Fedora 8 for use with Slicer 3.3 Alpha" ===
 
=== How to "Enable CUDA 2.0 in Fedora 8 for use with Slicer 3.3 Alpha" ===
 
Date: Sept. 26th 2008
 
Date: Sept. 26th 2008
Line 172: Line 308:
 
   cd ~/Download/CUDA/Driver/
 
   cd ~/Download/CUDA/Driver/
 
* Now we have to change the permissions for the driver-binary and make it executable. This works with  
 
* Now we have to change the permissions for the driver-binary and make it executable. This works with  
   chmod +a BINARY-NAME
+
   chmod +x BINARY-NAME
 
(Replace 'BINARY-NAME' with the name of the driver binary)
 
(Replace 'BINARY-NAME' with the name of the driver binary)
 
* Now start the installation with:
 
* Now start the installation with:
   ./BINARU-NAME
+
   ./BINARY-NAME
 
I changed none of the default values during the installation
 
I changed none of the default values during the installation
  
Line 181: Line 317:
  
 
* In the next step we do the same for the toolkit and for the sdk, e.g chance to the according directory, change the permissions and run the installation with the default values
 
* In the next step we do the same for the toolkit and for the sdk, e.g chance to the according directory, change the permissions and run the installation with the default values
 +
  
 
==== Enable CUDA in Slicer 3.3 Alpha ====
 
==== Enable CUDA in Slicer 3.3 Alpha ====
Line 206: Line 343:
  
 
This installation worked for me on a DELL machine with XEON Dual Core and a Nvidia G8800. For fast rendering make sure not enable compiz(Desktop Effects).
 
This installation worked for me on a DELL machine with XEON Dual Core and a Nvidia G8800. For fast rendering make sure not enable compiz(Desktop Effects).
 +
-->

Latest revision as of 20:59, 11 April 2023

Home < Technical Information

Technical information of 4D Ultrasound

<= Back to project page


You have to understand the following steps to use 4DUltrasound

  1. Fullfill the requirements
  2. Check out code and build
  3. Prepare for use
  4. Understand how to use 4DUltrasound Tutorial

Requirement

In this section you will find requirements to run the software

Software

  • Compiled version of Slicer 3 (You must compile Slicer on your own. Follow the build instructions here )
  • Compiled version of VTK (Provided by Slicer 3 in the "Slicer-lib/VTK-build" directory)
  • Source Code of OpenIGTLink (Provided by Slicer 3 in the "Slicer-lib/OpenIGTLink" directory)
  • Compiled version of OpenIGTLink (Provided by Slicer 3 in "Slicer-lib/OpenIGTLink-build" directory)
Modifications
  • OpenIGTLink Slicer Module:
  1. Open the file vtkIGTLToMRMLImage.cxx in the source directory of the OpenIGTLinkIF module
  2. Search for "crc" in this file -> You hit find the following lines

    // If you want to skip CRC check, call Unpack() without argument.
    int c = imgMsg->Unpack(1);

  3. Change the last line to: int c = imgMsg->Unpack();
  4. Recompile the OpenIGTLink Module
    1. Change to the Slicer-build directory and type $make
  • OpenIGTLink:
  1. Open the file igtlMessageBase.cxx in the "Source" directory of OpenIGTLink
  2. Search for "crc" -> You will hit the following line igtl_uint64 crc = crc64(0, 0, 0LL); // initial crc
  3. Comment out this line -> // igtl_uint64 crc = crc64(0, 0, 0LL); // initial crc
  4. Search for the next "crc" -> You will hit this line: h->crc = crc64((unsigned char*)m_Body, GetBodyPackSize(), crc);
  5. Comment out this line -> // h->crc = crc64((unsigned char*)m_Body, GetBodyPackSize(), crc);
  6. Recompile OpenIGTLink
    1. Change to the OpenIGTLink-build directory and type $make

Hardware

Drawing-System Design Hardware.png

a) Conventional computer with GPGPU graphics card and video capture board b) S-Video connection from US machine to Computer to transfer video information c) US machine d) Tracked US (2D US transducer with attached tracking sensor) e) Tracked surgical instrument f) Magnetic field generator of the tracking system g) EM tracker base station to control and to connect each tracking component h) Serial connection between EM tracker and computer to transfer position and orientation information.

  • NDI Aurora Tracker [1]
    • 2 * 6 DOF Sensors
      • 1 Sensor attached to the ultrasound probe
      • 1 Sensor can be used to simulate a tracked surgical instrument
  • Ultrasound machine with Analog video output
  • Frame Grabber Card

The System has successfully been test with the following 2 frame grabber cards:

    • Hauppauge Impact VCB Model 558 [2]
    • Kuroutoshikou KRDM-CX23883
  • Optional: nVidia Cuda compatible graphics card
Hardware Setup

Tracker attached to ultrasound transducer

Photo-Tracker attached to Ultrasound.png

Build Instructions

It is highly recommended to have a compiled version of Slicer and to have good knowledge about cmake.

A video of the build process can be found here

  1. Check out 4D Ultrasound from http://svn.na-mic.org/NAMICSandBox/trunk/4DUltrasound

  2. Configure via ccmake (version > 2.6) in your build directory

    You need a compiled version of VTK + OpenIGTLink as well as the source code of OpentIGTLink

    If you know how to do this, skip the next steps and procede with Compile

    1. Make a new directory in with the name "Build" in the 4DUltrasound dir:

      .../4DUltrasound$ mkdir Build

    2. Change into the Build directory

      .../4DUltrasound$ cd Build

    3. Execute ccmake in this directory with the parent directory as parameter

      .../4DUltrasound/Build$ ccmake ../

      If ccmake (version > 2.6) is not installed in your system: the executable can as well be found in: .../Slicer3-lib/CMAKE-build/bin/ccmake

    4. Type "c" to start the configuration -> You will receive an error message that VTK was not found -> Type "e" to exit the help message

    5. Change the cursor to the variable with the name "VTK_DIR" and hit ENTER

    6. Fill in your VTK-Build directory and hit ENTER (if you have a compiled version of Slicer you can use: .../Slicer3-lib/VTK-build )

      (In Ubuntu you must provide the absolute path no relative path will work)

    7. Hit "c" to start the configuration

      -> If you receive a warning, ignore it an hit "e" -> hit "c" again -> hit "e" to ignore the next warning -> Fill in the VTK-Build directory again -> hit "c" again -> Ignore the Integer-Type Error hit "e" again

    8. Hit "c"

    9. Enter the path to the directory of the compiled version of OpenIGTLink at the OpenIGTLink variable

    10. Enter the path to the directory of the OpenIGTLink source code at the OPENIGTLINKSOURCE variable

    11. Hit "c"

    12. Set "BUILD_SHARED_LIBS" to OFF

    13. Hit "g" to generate the Make files

  3. Compile 4D Ultrasound: Type $ make in your build directory

    .../4DUltrasound/Build$ make

Preparation to use 4D Ultrasound

Tutorials how to prepare 4D Ultrasound for use can be found here: 4DUltrasound_Preparation_to_use

Running 4D Ultrasound

Here you can see a video tutorial on how to use the software: [3]

You need a working version of Slicer with OpenIGTLink and you must

  1. Copy "CalibrationFile.txt" from YOUR_SOURCE_DIR to YOUR_BUILD_DIR/bin
  2. Run Slicer
  3. Add an "activer Server Connector" in the OpenIGTLink module which is waiting for data at port 18944
  4. Run 4DUltrasound on the same machine you run Slicer
 $YOUR_BUILD_DIR/bin/4DUltrasound -c CalibrationFile.txt -gf -tu

Commandline Options

Command Alternative Description
--calibration-file xxx -c xxx Specify the calibration file (mandatory)
--grab-ultrasound-frames -gf Grab ultrasound frames from the capture board
--track-ultrasound -tu Enable ultrasound tracking
--track-instrument -ti Enable instrument tracking
--simulate-instrument -si Simulate instrument
--get-calibration-data -gcd Get calibration data
--grab-one-frame XXX -gof XXX Grab one frame and store as the specified bitmap file
--verbose -v Print more information

TO DO

Priority MUST
Priority SHOULD
Clean up Code and Make files (Remove unnecessary Koeniginen parts)
Automatically copy Calibration file into binary directory
Fix compiler checking in cmake
Enable differnet video modes and channels in vtkVideo4Linux2
DONE Outsource OpenIGTLink library
Priority COULD
DONE Replace SonixGrabber with Ultrasound in source code
OpenIGTLink test feature
Tracker test feature
Ultrasound test feature

Ultrasound device

The ultrasound images are received via a video capture card. Linux uses V4L2 to support the card.

Capture Card - Hauppauge WIN-TV PCI Board ImpactVCB Model 558

Linux (Ubuntu 8.10 , Fedora 5)
  • The card is automatically correct detected. No further configuration needed.
  • Linux Driver: Video4Linux2 bt878
    • "bt" stands for Brooktree the original Manufacturer. Now bought by Conexant
  • The Linux driver (bttv) for the WinTV card is now part of the Linux kernel (version 2.6.xxx and newer).
  • Hauppage Linux Information
  • Linux installation hints [4]
  • Modprobe option # for specific drivers: http://tldp.org/HOWTO/BTTV/cards.html
    • The Impact VCB has # 10
    • enable kernel module via: "$ modprobe bttv card=10" or add to /etc/modprobe.conf the following line "options bttv card=10 "
    • to switch to another card first remove the module via: "$ modprobe -r bttv"
  • The card uses NTSC video interlacing per default
Hardware Information
  • Channel 3 delivers the s-video signal
    • To set the channel add the following at the end of void vtkV4L2VideoSource::InitDevice(void):

 int channel = 3;
 if (-1 == xioctl (fd,VIDIOC_S_INPUT , &channel))
   errno_exit ("VIDIOC_S_INPUT"); 

  • Specific Hardware information: [5] !!be carefull huge page, takes a long time to load!!

Video4Linux2

Video4Linux is part of the Linux kernel since version 2.6.xx

  • V4L2 wiki [6]
  • API Specificattion: [7]
  • xawtv software for video preview from the guy who wrote the bt8xx driver
Old links may soon be dead

Contacts

Tracking device

We are using a NDI Aurora tracker. Synchrograb includes an NDI tracker class which works out of the box with the Aurora NDI tracker.

Contacts
  • Haiying Liu

Calibration

Description: To get the correct information from the ultrasound device it has to be calibrated

Contacts
  • Raul San Jose

Information:

  • I have serval links and information from Raul on which I have to go through

Slicer

I am using the Slicer development version, i.e. Slicer trunk.

Python Synchrograb Module

I implemented a Pyhton module for Slicer to start Synchrograb. The module can be found in this svn repository. Basically it starts a new shell and calls the Synchrograb binary within this shell. All Synchrograb commandline options are available in the module. So fare it is not part of the Slicer repository.

Volume Rendering

Module VolumeRenderingCuda was used in Slicer for volume rendering. This module has been moved out of Slicer3 trunk and saved in NAMICSandBox/CUDAForVolumeRendering, and is not actively being developed. Now, we should use VolumeRendering module. Updated by Haiying Liu on Oct 30, 2009.

Links


Infos on loadable Modules

HowTo Loadable Module

HowToLoadable Module GUI

Infos about Executable Modules inSlicer


Subscribe to different meetings

  • Journal Club
  • 1st Monday Seminar
  • Office OPRC
  • Radiology Grand Rounds
  • Cimit Forum