• Stars
    star
    114
  • Rank 306,316 (Top 7 %)
  • Language
    C++
  • License
    Apache License 2.0
  • Created almost 7 years ago
  • Updated 5 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A Slicer extension that enables user to interact with a Slicer scene using virtual reality.

SlicerVirtualReality

Extension for 3D slicer that enables user to interact with the 3D scene using virtual reality.

The extension works with all OpenVR-compatible headsets, such as HTC Vive, all Windows Mixed Reality headsets (by Acer, Lenovo, HP, etc.), and with Oculus Rift. See the YouTube video below or this Kitware blog post for some more background and application examples.

Demo: Pedicle screw insertion in virtual reality using Slicer

Features include:

  • View all content of any of the 3D viewers in Slicer, anytime, by a single click.
  • Show volumes as 2D image slices or volume rendering, render surfaces, points, etc.
  • View any 4D data sets, using any rendering technique (including volume rendering) - provided by Sequences extension
  • Align the headset's view to match viewpoint of the selected 3D view in Slicer
  • Fly around using the touchpad of the right controller: direction is specified by orientation of the controller; speed is determined by the position of the finger on the touchpad (touch at the top to fly forward, touch at the bottom to fly backward).
  • Grab and reposition objects using the grab button on the controller.
  • Translate, rotate, scale the world (all objects) by pressing grab buttons on both controllers at the same time.
  • Advanced volume rendering performance tuning: available in Virtual Reality module, to find good balance between image quality and refresh rate.
  • Make position of controllers available as transforms in the Slicer scene. These transforms can be used in custom modules to reslice volumes (using Volume Reslice Driver module in SlicerIGT extension) or transform any nodes in the scene.

Feature set of the extension is continuously improved. You can give us feedback and propose ideas for improvements by submitting them on the issue tracker.

Usage

Setup

Platform support: Currently the extension only works on Windows computers. Linux support is experimental: Steam VR has limited support on linux and the Slicer extension is built for Linux but not tested. The extension is not available on macOS, as currently there are no virtual reality headsets available for macOS. If you wish to use Virtual Reality extension on Linux or macOS and you have virtual reality capable hardware and Steam VR works well on your computer then add a comment in the issue tracker (macOS / Linux).

Configuring graphics: If both integrated display card and high-performance GPU are available in a system (typically this is the case on laptops with NVidia GPUs), then configure the graphics card application settings to use high-performance GPU for SlicerApp-real.exe (it is not necessary to use high-performance GPU for the launcher, Slicer.exe).

How to set up my HTC Vive headset

  • Install Steam and SteamVR and set up your headset (you should be able to see SteanVR home application running in your headset).
  • Install Slicer and SlicerVirtualReality extension.
  • To see content of content of the 3D view in your headset: click "Show scene in virtual reality" button on the toolbar in Slicer.

How to set up my Windows Mixed Reality headset

  • Install Steam and SteamVR and set up your headset.
  • Set up Windows Mixed Reality for SteamVR (you should be able to see SteanVR home application running in your headset).
  • Install Slicer and SlicerVirtualReality extension.
  • To see content of content of the 3D view in your headset: click "Show scene in virtual reality" button on the toolbar in Slicer.

How to set up my Oculus Rift headset

  • Install Steam and SteamVR and set up your headset to work with SteamVR.
  • Install Slicer and SlicerVirtualReality extension.
  • To see content of content of the 3D view in your headset:
    • Start Oculus app (put on the headset for a moment and it will be started)
    • Click the "Show scene in virtual reality" button on the toolbar in Slicer.

How to use controllers

HTC Vive Controller

Fly

Move around in space. Equivalent to physically walking around.

Controls:

  • Touchpad forward: fly forward
  • Touchpad backwad: fly backward

Notes:

  • Flying direction is specified by the orientation of the controller.
  • Speed is proportional to distance of the fingertip from the touchpad center.
  • Maximum speed is configurable in Virtual Reality module.

Transform entire scene

Translate/rotate/scale the entire rendered scene.

Controls: while keeping grip button depressed on both controllers

  • Move controllers closer together/farther apart: scale size of the entire scene
  • Translate controllers in parallel up/down/left/right/forward/backward: translate the entire scene
  • Pivot controllers around: rotate the entire scene

Notes:

  • Object positions in the scene are not modified.
  • Controllers must be outside of all selectable objects when grip buttons are pressed.

Transform objects

Translate/rotate a selected object.

Controls: press grip button when a controller is inside a selectable object

  • Move controllers closer together/farther apart: scale size of the entire rendered scene
  • Translate controllers in parallel up/down/left/right/forward/backward: translate all objects
  • Move controller

Notes:

  • When you grab and move object, a parent transform is automatically created for it (if it has not been under a transform already) and that transform is modified.
  • To move a group of objects together, assign the same parent transform to them. You can do that in Data module's Transform hierarchy tab by drag-and-dropping objects under the same transform (or by double-clicking in the Applied Transform column in Data module's Transform hierarchy tab and selecting a transform; or by selecting a transform in Transforms module and applying it to all the nodes that must move together).
  • Either left or right controller can be used to grab an object. Each controller can be used to grab an object and move independently.
  • By default all objects are selectable. An object can be made non-selectable (thus non-movable) in Data module / Subject hierarchy tab, right-clicking on the node and unchecking "Toggle Selectable".
  • Moving of segmentation nodes is slow. If you want to move segmentations using controllers then export them to model nodes (in Data module, right-click on the segmentation node and choose Export visible segments to models) and transform the model nodes.

Other features

Accessing VR transforms (controller, headset, generic trackers) in Slicer

Go to Virtual Reality module and check the desired checkbox to update linear transform nodes with the various devices' positions. Note: The magnification factor in advanced settings affects these transforms.

Frequently asked questions

How to clip models

3D Slicer can clip models using slice planes. This feature can be used in virtual reality by moving the slice plane using a transform, with the help of Volume reslice driver module.

The models, transforms, etc. only need to be set up once, because the scene can then be saved to file and next time it can be readily used.

Simple clipping

Move clipping planes continuously, as the controllers are moved.

  • Go to Models module, select the model to clip, and in Clipping section enable Clip selected model. By default the Red slice will be chosen for clipping.
  • Go to Virtual Reality module and enable making controller transform appear as transforms in the scene.
  • Go to Volume reslice driver module (in SlicerIGT extension) to make the controller transform move the Red slice.
  • Moved the controller inside the model to clip it

Clipping with handles

Grab and move clipping planes using controllers (clipping plane remains in place).

  • Go to Models module, select the model to clip, and in Clipping section enable Clip selected model. By default the Red slice will be chosen for clipping.
  • Add a small model, for example a box to the scene. It can be loaded from STL or created using Create models module (in SlicerIGT extension).
  • Move the model using a controller. This creates a parent transform for this model.
  • Go to Volume reslice driver module (in SlicerIGT extension) to make the model's parent transform move the Red slice.
  • Grab and move the model using the controller to move the clipping plane.

Rendering is slow

There are several settings that help in increasing the performance of virtual reality rendering:

  • If you are using a computer that has two graphics cards (for example, laptops often have an integrated Intel and a high-performance NVidia graphics card), make sure that Slicer is forced to use the high-performance card that the headset is connected to. Most laptops assign applications to the integrated card by default. When you need to select the application executable, choose SlicerApp-real.exe (and not the Slicer launcher application Slicer.exe).
  • Optimize scene for virtual reality button (magic wand icon on toolbar): this switches volume rendering to use GPU, turns off backface culling for all existing models (to see surfaces even when going inside an object), turns off slice intersection visibility for all existing models and segmentations (to make slice view updates faster)
  • Settings in virtual reality module panel related to performance (click on wrench icon in toolbar):
    • Update rate: Volume rendering quality is set to produce the highest possible quality while keeping the desired frame per second
    • Motion sensitivity: It is very important to keep rendering smooth when moving. This setting detects head movement and significantly lowers volume rendering quality while it is happening. At value of 0 motion is never detected, at high values a little motion triggers the quality change
  • Settings in Volume rendering module: open "Advanced" section / "Techniques" tab, try "Adaptive" setting with different "Interactive speed" values. Also try and "Normal" setting: it disables the automatic mechanism that tries to dynamically adjust rendering quality based on predicted rendering time (in some cases the prediction does not work well and results in sub-optimal image quality).
  • Switch layout of desktop Slicer: Any additional 3D view to render decreases virtual reality rendering performance. By switching to a layout that contains no 3D view (e.g. Red slice only), this can be prevented

Some scenes are too complex to render fluently by mid-range graphics cards. If the scene includes volume rendering of high-resolution CT for example, then it may be necessary to upgrade to a high-end GPU.

How to record virtual reality videos?

Enable screen mirroring in SteamVR and use the free of OBS Studio software to capture VR headset content, application window, webcam, etc.

Note that OBS Studio may crash if NVidia hardware-based compression is used. If this happens, choose CPU-based video compression option for recording.

How to ask questions, report problems, or suggest new features?

Visit Slicer forum and search for similar discussions. If you do not find related topics then createa a new one. Add virtual-reality tag to make sure people who monitor virtual reality related questions get a notification about your question.

If you are certain that you have found a software bug and no similar issue has been reported in the issue tracker) then please submit a new issue.

Please do not use "VR" acronym (you can spell out "virtual reality" instead), because "VR" may mean "volume rendering" just as well as "virtual reality" - you can even do volume rendering in virtual reality in Slicer - and so it becomes confusing very quickly.

For developers

Information for developers is available in the Developer Guide.

Contributors

Contributors include:

  • Kitware: Jean-Christophe Fillion-Robin, Jean-Baptiste Vimort
  • PerkLab (Queen's University): Csaba Pinter, Andras Lasso
  • VASST Lab (Robarts Research Insitute): Adam Rankin

How to cite

Pinter, C., Lasso, A., Choueib, S., Asselin, M., Fillion-Robin, J. C., Vimort, J. B., Martin, K., Jolley, M. A. & Fichtinger, G. (2020). SlicerVR for Medical Intervention Training and Planning in Immersive Virtual Reality. IEEE Transactions on Medical Robotics and Bionics, vol. 2, no. 2, pp. 108-117, May 2020, doi: 10.1109/TMRB.2020.2983199

License

It is covered by the Apache License, Version 2.0:

http://www.apache.org/licenses/LICENSE-2.0

More Repositories

1

dicom-anonymizer

Tool to anonymize DICOM files according to the DICOM standard
Python
93
star
2

ITKUltrasound

ITK module with classes particularly useful for ultrasound.
C++
50
star
3

SlicerCustomAppTemplate

Template to be used as a starting point for creating a custom 3D Slicer application
C++
46
star
4

ImageViewer

A lightweight, cross-platform 2D/3D medical image viewer.
C++
39
star
5

VTKPythonPackage

A setup script to generate VTK Python Wheels
Python
34
star
6

tensorboard-plugin-3d

HTML
31
star
7

ITKContourInterpolation

An implementation of morphological contour interpolation
C++
28
star
8

vtk.js-examples

These are a few examples for vtk.js
JavaScript
28
star
9

SlicerITKUltrasound

Ultrasound image formation, processing, and analysis. Interfaces built off the ITKUltrasound library.
C++
22
star
10

pyLAR

This repository contains python implementations on Low-rank-plus-sparse, Atlas-to-image Registration (pyLAR) framework and its applications in medical image analysis and computer vision.
Python
22
star
11

ITKPOCUS

An open source library for streaming and preprocessing point-of-care ultrasound video.
Jupyter Notebook
19
star
12

CardiacUltrasoundPhaseEstimation

This repository contains an image-based instantaneous phase estimation method for gating and temporal super-resolution of cardiac ultrasound
Jupyter Notebook
18
star
13

Deprecated-VesselView

VesselView is a demonstration application from Kitware Inc for the segmentation, registration and analysis of tubes( e.g, blood vessels) in 3D images (e.g, MRI, CT and Ultrasound).
C++
15
star
14

KitwareFileViewers

Browser extension to open URL in Kitware online viewers
JavaScript
14
star
15

CourseInBiomedicalImageAnalysisAndVisualization

Kitware Course in Biomedical Image Analysis and Visualization: ITK
Jupyter Notebook
14
star
16

ITKIOScanco

ITK Image IO for Scanco MicroCT .ISQ files
C++
12
star
17

vtk-js-cinematic-rendering-internship-2022-experiments

Collection of vtk.js based cinematic rendering experiments.
JavaScript
11
star
18

dicom-exporter

DICOM file converter in Python
Python
11
star
19

SlicerCAT

Example Application for Slicer Customization - Generated from KitwareMedical/SlicerCustomAppTemplate
C++
11
star
20

ITKStrain

ITK filters to estimate a strain tensor field from a displacement field or a spatial transformation.
C++
10
star
21

TubeTK-pypbm

Pattern-based morphometry for vascular analysis.
Python
9
star
22

IntersonArraySDKCxx

C++ Wrapper for the C# SDK for Interson's Linear Array Probe
C++
9
star
23

OsteotomyPlanner

3D Slicer extension to visualize and plan an osteotomy surgery.
Python
9
star
24

SlicerNNUnet

3D Slicer nnUNet integration to streamline usage for nnUNet based AI extensions.
Python
9
star
25

HistologyCancerDiagnosisDeepPersistenceHomology

Cancer Diagnosis in Histology Images using Deep Learning and Persistence Homology
Python
8
star
26

pydstk

Python Dynamical Systems Toolkit.
Python
8
star
27

UltrasoundIntersonApps

Interactive ultrasound applications using streamed images from an Interson linear array probe.
C++
7
star
28

SlicerCBCTToothSegmentation

Slicer extension for automated segmentation of individual teeth in cone-beam CT dental scans using a deep-learning based approach.
Python
7
star
29

HASI

High-throughput Applications for Skeletal Imaging
Python
6
star
30

paraview-glance-py

An extended version of ParaView Glance that supports an integrated python server, e.g., for running ITK algorithms...
JavaScript
6
star
31

2019-ImageXD-Registration-Tutorial

Jupyter Notebook
6
star
32

SlicerIMSTK

Extension for 3D slicer that enables user to prototype real-time multi-modal surgical simulation scenarios by leveraging iMSTK
CMake
6
star
33

Deprecated-paraview-glance-cornerstone

A demonstration of Cornerstone.js integration into ParaView Glance. Current version is an integration of VTK.js and OHIF.
JavaScript
6
star
34

itkARGUS-DARPA-POCUS_AI-Archive

Jupyter Notebook
5
star
35

SlicerSkeletalRepresentation

Collection of Skeletal Model Extensions for 3D Slicer/SlicerSALT
C++
5
star
36

VTKExternalModule

CMake buildsystem for externally building any built-in or remote VTK module outside of the VTK source tree.
CMake
5
star
37

AnatomicAugmentedRealityProjector

C++
5
star
38

lungair-desktop-application

Desktop application for AI-based BPD risk analysis
Python
5
star
39

Deprecated-vtkVolViewVessels

Archive of an initial implementation exploration for VTK.JS + Python. Working version is ParaviewGlancePy
JavaScript
5
star
40

Deprecated-UltrasoundSpectroscopyRecorder

C++
4
star
41

Slicer-CameraPath

Slicer module for Intelligent Virtual Surgical Planning
C++
4
star
42

UltrasoundScoliosis

A C++ Program for inferring the Cobb Angle of a Spinal Ultrasound in real time.
C++
4
star
43

ITKDICOM

Better support for DICOM in ITK.
C++
4
star
44

vtkColorCodedDepthVolume

Animate a sequence of NRRD volumes in VTK
C++
4
star
45

lungair-web-application

Web application based on VolView for AI-based BPD risk analysis
Vue
4
star
46

SlicerMixedReality

A Slicer extension that enables user to interact with a Slicer scene using mixed reality headset.
C++
4
star
47

UltrasoundIntersonApps-USpectScripts

Focused Assessment with Sonography for Trauma
Python
4
star
48

ITKRLEImage

Run-length encoded memory compression scheme for an itk::Image
C++
4
star
49

SlicerLookingGlass

Extension for 3D slicer that enables user to visualize the 3D scene using the Looking Glass hardware display.
C++
4
star
50

Deprecated-pv-web-vessels

Vessel viewer and extraction
JavaScript
3
star
51

IntersonSDKCxx

C++ Wrapper for the Interson C# SDK
C++
3
star
52

SlicerITKPython

A Slicer extension for ITK's Python wrapping.
CMake
3
star
53

ShapeRegressionExtension

Computation and visualization of time-regressed shapes in a collection of 3D shape inputs associated to a linear variable
Python
3
star
54

habet

HArmonization BEnchmarking Tool
Python
3
star
55

slicer-macos-codesign-scripts

macOS shell script to extract, codesign, and re-packsign a dmg package. Also create a pkg installer.
Shell
3
star
56

MONAI-GettingStarted

Jupyter Notebook
3
star
57

SlicerQReads

Slicer-based implementation of QREADS medical image viewer used at Mayo Clinic
Python
2
star
58

AtlasBuilder

Utilities for creating functional boxplots of 1D data
Python
2
star
59

IntersonManager

C++
2
star
60

SOFA

C++
2
star
61

Deprecated-SOViewer

Archive of an old library for viewing ITK Spatial Objects, Scenes, and such
C++
2
star
62

Bender

End-user application to manipulate voxelized anatomical models using an underlying armature
C++
2
star
63

vtk-vue-starter

Starter repo for vtk.js and vue.js
JavaScript
2
star
64

SlicerPipelines

Pipelines are an extension for 3DSlicer that will offer the ability to create simple modules (aka pipelines) via a GUI interface with no coding knowledge needed.
Python
2
star
65

slicer-extensions-webapp

Source code of the site allowing to browse and download Slicer extensions. This site is published at extensions.slicer.org and maintained by @Kitware on behalf of the 3D Slicer community.
Vue
2
star
66

vpaw

A surgical planning software system targeted to pediatric patients with airway obstruction.
Python
2
star
67

SlicerPythonTestRunner

Python test runner extension for 3D Slicer based on PyTest and PyTest JSON Report
Python
2
star
68

ITKHigherOrderAccurateGradient

http://www.insight-journal.org/browse/publication/775
C++
1
star
69

MTEC-Clarius-OpenIGTLink

Java
1
star
70

ITKTubeTK-CTLungs

Methods for forming models of the vessels and airways of the lungs
Python
1
star
71

SlicerSRep2

Slicer extension defining MRML nodes and operations for Skeletal Representations (SReps)
C++
1
star
72

UltrasoundMeasurementExplorer

A C++ program for exploring properties of RF Ultrasound images in real time
Jupyter Notebook
1
star
73

itkARGUS

Anatomic Reconstruction for Generalizable UltraSound (ARGUS) AI: A library for point-of-care ultrasound AI using MONAI and ITK
Python
1
star
74

Cleaver

C
1
star
75

steady

A Python-based workflow system with caching
Python
1
star
76

Deprecated-ITKTubeTK-DashboardScripts

Archive of scripts used to test ITKTubeTK. Now ITKTubeTK exists as an ITK module, which provides its own testing infrastructure
CMake
1
star
77

ITKMultipleImageIterator

ITK remote module from an IJ article at http://www.insight-journal.org/browse/publication/915
C++
1
star
78

SlicerMarkupConstraints

Slicer module to enable Slicer extension developers to constrain and synchronize markups and control points of different nodes.
Python
1
star