<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.slicer.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hherhold</id>
	<title>Slicer Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.slicer.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hherhold"/>
	<link rel="alternate" type="text/html" href="https://www.slicer.org/wiki/Special:Contributions/Hherhold"/>
	<updated>2026-05-23T00:41:42Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.33.0</generator>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=User:Hherhold&amp;diff=63510</id>
		<title>User:Hherhold</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=User:Hherhold&amp;diff=63510"/>
		<updated>2021-01-07T01:12:04Z</updated>

		<summary type="html">&lt;p&gt;Hherhold: Tweaks to background. I'm in grad school now!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am a PhD Candidate at the Richard Gilder Graduate School at the American Museum of Natural History. &lt;br /&gt;
&lt;br /&gt;
I use uCT scans to study the evolution of both extant and fossil insects and arthropods. I've been a Slicer user since 2016, with a few papers published using Slicer. &lt;br /&gt;
&lt;br /&gt;
I've contributed to various pieces including the cross-section area plot.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hherhold</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/ScriptRepository&amp;diff=63478</id>
		<title>Documentation/Nightly/ScriptRepository</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/ScriptRepository&amp;diff=63478"/>
		<updated>2020-12-02T18:06:21Z</updated>

		<summary type="html">&lt;p&gt;Hherhold: /* Create keyboard shortcut for toggling sphere brush for paint and erase effects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Community-contributed modules=  &lt;br /&gt;
&lt;br /&gt;
The examples in this section are [[Documentation/{{documentation/version}}/Developers/Modules#Scripted_Modules| Scripted Modules]] that provide a user interface in the module panel along with specialized implementation logic.&lt;br /&gt;
&lt;br /&gt;
Usage: save the .py file to a directory, add the directory to the additional module paths in the Slicer application settings (choose in the menu: Edit / Application settings, click Modules, click &amp;gt;&amp;gt; next to Additional module paths, click Add, and choose the .py file's location).&lt;br /&gt;
&lt;br /&gt;
More information about python scripted modules and more usage examples can be found in the[[Documentation/{{documentation/version}}/Developers/Python_scripting | Python scripting]] wiki page.&lt;br /&gt;
&lt;br /&gt;
==Filters==&lt;br /&gt;
&lt;br /&gt;
*[https://raw.github.com/pieper/VolumeMasker/master/VolumeMasker.py VolumeMasker.py]: Update a target volume with the results of setting all input volume voxels to 0 except for those that correspond to a selected label value in an input label map (Used for example in the volume rendering in [https://www.youtube.com/watch?v=dfu2gugHLHs this video).&lt;br /&gt;
&lt;br /&gt;
==DICOM==&lt;br /&gt;
&lt;br /&gt;
*[https://gist.github.com/pieper/6186477 dicom header browser] to easily scroll through dicom files using dcmdump.&lt;br /&gt;
*[https://github.com/SlicerRt/SlicerRT/tree/master/BatchProcessing SlicerRT batch processing] to batch convert RT structure sets to labelmap NRRD files.&lt;br /&gt;
&lt;br /&gt;
==Informatics==&lt;br /&gt;
&lt;br /&gt;
*[https://gist.github.com/lassoan/bf0954d93cacc8cbe27cd4a3ad503f2f MarkupsInfo.py]: Compute the total length between all the points of a markup list.&lt;br /&gt;
*[https://github.com/lassoan/SlicerLineProfile/blob/master/LineProfile/LineProfile.py LineProfile.py]: Compute intensity profile in a volume along a line.&lt;br /&gt;
&lt;br /&gt;
=Community-contributed examples=&lt;br /&gt;
&lt;br /&gt;
Usage: Copy-paste the shown code lines or linked .py file contents into Python console in Slicer.  Or save them to a file and run them using execfile.&lt;br /&gt;
&lt;br /&gt;
==Get node object from the scene from node name or ID==&lt;br /&gt;
&lt;br /&gt;
Examples in the script repository commonly use &amp;lt;code&amp;gt;slicer.util.getNode()&amp;lt;/code&amp;gt; function for getting a node object from the scene. This method is only recommended for testing and interactive debugging. &lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;slicer.util.getNode()&amp;lt;/code&amp;gt; is recommended **only for interactive debugging** in the Python console/Jupyter notebook&lt;br /&gt;
** its input is intentionally defined vaguely (it can be either node ID or name and you can use wildcards such as &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;), which is good because it make it simpler to use, but the uncertain behavior is not good for general-purpose use in a module&lt;br /&gt;
** throws an exception so that the developer knows immediately that there was a typo or other unexpected error&lt;br /&gt;
* &amp;lt;code&amp;gt;slicer.mrmlScene.GetNodeByID()&amp;lt;/code&amp;gt; is optimized for usage in modules:&lt;br /&gt;
** its behavior is more predictable: it only accepts node ID as input. &amp;lt;code&amp;gt;slicer.mrmlScene.GetFirstNodeByName()&amp;lt;/code&amp;gt; can be used to get a node by its name, but since multiple nodes in the scene can have the same name, it is not recommended to keep reference to a node by its name.&lt;br /&gt;
** if node is not found it returns &amp;lt;code&amp;gt;None&amp;lt;/code&amp;gt; (instead of throwing an exception), because this is often not considered an error in module code (it is just used to check existence of a node) and using return value for not-found nodes allows simpler syntax&lt;br /&gt;
&lt;br /&gt;
==Capture==&lt;br /&gt;
&lt;br /&gt;
*Capture the full Slicer screen and save it into a file&lt;br /&gt;
&lt;br /&gt;
  img = qt.QPixmap.grabWidget(slicer.util.mainWindow()).toImage()&lt;br /&gt;
  img.save('c:/tmp/test.png')&lt;br /&gt;
&lt;br /&gt;
*Capture all the views save it into a file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import ScreenCapture&lt;br /&gt;
cap = ScreenCapture.ScreenCaptureLogic()&lt;br /&gt;
cap.showViewControllers(False)&lt;br /&gt;
cap.captureImageFromView(None,'c:/tmp/test.png')&lt;br /&gt;
cap.showViewControllers(True)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Capture a single view:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
viewNodeID = 'vtkMRMLViewNode1'&lt;br /&gt;
import ScreenCapture&lt;br /&gt;
cap = ScreenCapture.ScreenCaptureLogic()&lt;br /&gt;
view = cap.viewFromNode(slicer.mrmlScene.GetNodeByID(viewNodeID))&lt;br /&gt;
cap.captureImageFromView(view,'c:/tmp/test.png')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Common values for viewNodeID: vtkMRMLSliceNodeRed, vtkMRMLSliceNodeYellow, vtkMRMLSliceNodeGreen, vtkMRMLViewNode1, vtkMRMLViewNode2. &lt;br /&gt;
The ScreenCapture module can also create video animations of rotating views, slice sweeps, etc.&lt;br /&gt;
&lt;br /&gt;
*Capture a slice view sweep into a series of PNG files - for example, Red slice view, 30 images, from position -125.0 to 75.0, into c:/tmp folder, with name image_00001.png, image_00002.png, ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import ScreenCapture&lt;br /&gt;
ScreenCapture.ScreenCaptureLogic().captureSliceSweep(getNode('vtkMRMLSliceNodeRed'), -125.0, 75.0, 30, &amp;quot;c:/tmp&amp;quot;, &amp;quot;image_%05d.png&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Capture 3D view into PNG file with transparent background&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
renderWindow = slicer.app.layoutManager().threeDWidget(0).threeDView().renderWindow()&lt;br /&gt;
renderWindow.SetAlphaBitPlanes(1)&lt;br /&gt;
wti = vtk.vtkWindowToImageFilter()&lt;br /&gt;
wti.SetInputBufferTypeToRGBA()&lt;br /&gt;
wti.SetInput(renderWindow)&lt;br /&gt;
writer = vtk.vtkPNGWriter()&lt;br /&gt;
writer.SetFileName(&amp;quot;c:/tmp/screenshot.png&amp;quot;)&lt;br /&gt;
writer.SetInputConnection(wti.GetOutputPort())&lt;br /&gt;
writer.Write()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Launching Slicer==&lt;br /&gt;
&lt;br /&gt;
*How to open an .mrb file with Slicer at the command line?&lt;br /&gt;
&lt;br /&gt;
  Slicer.exe --python-code &amp;quot;slicer.util.loadScene( 'f:/2013-08-23-Scene.mrb' )&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*How to run a script in the Slicer environment in batch mode (without showing any graphical user interface)?&lt;br /&gt;
&lt;br /&gt;
  Slicer.exe --python-code &amp;quot;doSomething; doSomethingElse; etc.&amp;quot; --testing --no-splash --no-main-window&lt;br /&gt;
&lt;br /&gt;
==Load volume from file==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
loadedVolumeNode = slicer.util.loadVolume('c:/Users/abc/Documents/MRHead.nrrd')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Additional options may be specified in &amp;lt;code&amp;gt;properties&amp;lt;/code&amp;gt; argument. For example, load an image stack by disabling &amp;lt;code&amp;gt;singleFile&amp;lt;/code&amp;gt; option:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
loadedVolumeNode = slicer.util.loadVolume('c:/Users/abc/Documents/SomeImage/file001.png', {'singleFile': False})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get a MRML node in the scene based on the node name and call methods of that object. For the MRHead sample data:&lt;br /&gt;
&lt;br /&gt;
  vol=slicer.util.getNode('MR*')&lt;br /&gt;
  vol.GetImageData().GetDimensions()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Load volume from URL==&lt;br /&gt;
&lt;br /&gt;
Download a volume from a URL and load it into the scene using the code snippet below. Downloaded data is temporarily preserved in the application's cache folder and if the checksum of the already downloaded data matches the specified checksum (&amp;lt;algo&amp;gt;:&amp;lt;digest&amp;gt;) then the file is retrieved from the cache instead of being downloaded again. To compute digest with algo ''SHA256'', you can run &amp;lt;code&amp;gt;slicer.util.computeChecksum(&amp;quot;SHA256&amp;quot;, &amp;quot;path/to/file&amp;quot;)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import SampleData&lt;br /&gt;
sampleDataLogic = SampleData.SampleDataLogic()&lt;br /&gt;
loadedNodes = sampleDataLogic.downloadFromURL(&lt;br /&gt;
    nodeNames='MRHead',&lt;br /&gt;
    fileNames='MR-head25.nrrd',&lt;br /&gt;
    uris='https://github.com/Slicer/SlicerTestingData/releases/download/SHA256/cc211f0dfd9a05ca3841ce1141b292898b2dd2d3f08286affadf823a7e58df93',&lt;br /&gt;
    checksums='SHA256:cc211f0dfd9a05ca3841ce1141b292898b2dd2d3f08286affadf823a7e58df93')[0]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With interruptible progress reporting using a progress bar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import SampleData&lt;br /&gt;
&lt;br /&gt;
def reportProgress(msg, level=None):&lt;br /&gt;
    # Print progress in the console&lt;br /&gt;
    print(&amp;quot;Loading... {0}%&amp;quot;.format(sampleDataLogic.downloadPercent))&lt;br /&gt;
    # Abort download if cancel is clicked in progress bar&lt;br /&gt;
    if slicer.progressWindow.wasCanceled:&lt;br /&gt;
        raise Exception('download aborted')&lt;br /&gt;
    # Update progress window&lt;br /&gt;
    slicer.progressWindow.show()&lt;br /&gt;
    slicer.progressWindow.activateWindow()&lt;br /&gt;
    slicer.progressWindow.setValue(int(sampleDataLogic.downloadPercent))&lt;br /&gt;
    slicer.progressWindow.setLabelText(&amp;quot;Downloading...&amp;quot;)&lt;br /&gt;
    # Process events to allow screen to refresh&lt;br /&gt;
    slicer.app.processEvents() &lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    volumeNode = None&lt;br /&gt;
    slicer.progressWindow = slicer.util.createProgressDialog()&lt;br /&gt;
    sampleDataLogic = SampleData.SampleDataLogic()&lt;br /&gt;
    sampleDataLogic.logMessage = reportProgress&lt;br /&gt;
    loadedNodes = sampleDataLogic.downloadFromURL(&lt;br /&gt;
        nodeNames='MRHead',&lt;br /&gt;
        fileNames='MR-head25.nrrd',&lt;br /&gt;
        uris='https://github.com/Slicer/SlicerTestingData/releases/download/SHA256/cc211f0dfd9a05ca3841ce1141b292898b2dd2d3f08286affadf823a7e58df93',&lt;br /&gt;
        checksums='SHA256:cc211f0dfd9a05ca3841ce1141b292898b2dd2d3f08286affadf823a7e58df93')&lt;br /&gt;
    volumeNode = loadedNodes[0]&lt;br /&gt;
finally:&lt;br /&gt;
    slicer.progressWindow.close()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Show volume rendering automatically when a volume is loaded==&lt;br /&gt;
&lt;br /&gt;
To show volume rendering of a volume automatically when it is loaded, add the lines below to your &lt;br /&gt;
[[Documentation/{{documentation/version}}/Developers/Python_scripting#How_to_systematically_execute_custom_python_code_at_startup_.3F|.slicerrc file]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@vtk.calldata_type(vtk.VTK_OBJECT)&lt;br /&gt;
def onNodeAdded(caller, event, calldata):&lt;br /&gt;
  node = calldata&lt;br /&gt;
  if isinstance(node, slicer.vtkMRMLVolumeNode):&lt;br /&gt;
    # Call showVolumeRendering using a timer instead of calling it directly&lt;br /&gt;
    # to allow the volume loading to fully complete.&lt;br /&gt;
    qt.QTimer.singleShot(0, lambda: showVolumeRendering(node))&lt;br /&gt;
&lt;br /&gt;
def showVolumeRendering(volumeNode):&lt;br /&gt;
  print(&amp;quot;Show volume rendering of node &amp;quot;+volumeNode.GetName())&lt;br /&gt;
  volRenLogic = slicer.modules.volumerendering.logic()&lt;br /&gt;
  displayNode = volRenLogic.CreateDefaultVolumeRenderingNodes(volumeNode)&lt;br /&gt;
  displayNode.SetVisibility(True)&lt;br /&gt;
  scalarRange = volumeNode.GetImageData().GetScalarRange()&lt;br /&gt;
  if scalarRange[1]-scalarRange[0] &amp;lt; 1500:&lt;br /&gt;
    # small dynamic range, probably MRI&lt;br /&gt;
    displayNode.GetVolumePropertyNode().Copy(volRenLogic.GetPresetByName('MR-Default'))&lt;br /&gt;
  else:&lt;br /&gt;
    # larger dynamic range, probably CT&lt;br /&gt;
    displayNode.GetVolumePropertyNode().Copy(volRenLogic.GetPresetByName('CT-Chest-Contrast-Enhanced'))&lt;br /&gt;
    &lt;br /&gt;
slicer.mrmlScene.AddObserver(slicer.vtkMRMLScene.NodeAddedEvent, onNodeAdded)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Automatically load volumes that are copied into a folder==&lt;br /&gt;
&lt;br /&gt;
This example shows how to implement a simple background task by using a timer. The background task is to check for any new volume files in folder and if there is any then automatically load it.&lt;br /&gt;
&lt;br /&gt;
There are more efficient methods for file system monitoring or exchanging image data in real-time (for example, using OpenIGTLink), the example below is just for demonstration purposes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
incomingVolumeFolder = &amp;quot;c:/tmp/incoming&amp;quot;&lt;br /&gt;
incomingVolumesProcessed = []&lt;br /&gt;
&lt;br /&gt;
def checkForNewVolumes():&lt;br /&gt;
  # Check if there is a new file in the &lt;br /&gt;
  from os import listdir&lt;br /&gt;
  from os.path import isfile, join&lt;br /&gt;
  for f in listdir(incomingVolumeFolder):&lt;br /&gt;
    if f in incomingVolumesProcessed:&lt;br /&gt;
      # this is an incoming file, it was already there&lt;br /&gt;
      continue&lt;br /&gt;
    filePath = join(incomingVolumeFolder, f)&lt;br /&gt;
    if not isfile(filePath):&lt;br /&gt;
      # ignore directories&lt;br /&gt;
      continue&lt;br /&gt;
    logging.info(&amp;quot;Loading new file: &amp;quot;+f)&lt;br /&gt;
    incomingVolumesProcessed.append(f)&lt;br /&gt;
    slicer.util.loadVolume(filePath)&lt;br /&gt;
  # Check again in 3000ms&lt;br /&gt;
  qt.QTimer.singleShot(3000, checkForNewVolumes)&lt;br /&gt;
&lt;br /&gt;
# Start monitoring&lt;br /&gt;
checkForNewVolumes()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==DICOM==&lt;br /&gt;
===How to load DICOM files into the scene from a folder===&lt;br /&gt;
&lt;br /&gt;
This code loads all DICOM objects into the scene from a file folder. All the registered plugins are evaluated and the one with the highest confidence will be used to load the data. Files are imported into a temporary DICOM database, so the current Slicer DICOM database is not impacted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dicomDataDir = &amp;quot;c:/my/folder/with/dicom-files&amp;quot;  # input folder with DICOM files&lt;br /&gt;
loadedNodeIDs = []  # this list will contain the list of all loaded node IDs&lt;br /&gt;
  &lt;br /&gt;
from DICOMLib import DICOMUtils&lt;br /&gt;
with DICOMUtils.TemporaryDICOMDatabase() as db:&lt;br /&gt;
  DICOMUtils.importDicom(dicomDataDir, db)&lt;br /&gt;
  patientUIDs = db.patients()&lt;br /&gt;
  for patientUID in patientUIDs:&lt;br /&gt;
    loadedNodeIDs.extend(DICOMUtils.loadPatientByUID(patientUID))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How to import DICOM files into the application's DICOM database===&lt;br /&gt;
&lt;br /&gt;
This code snippet uses Slicer DICOM browser built-in indexer to import DICOM files into the database. Images are not loaded into the scene, but they show up in the DICOM browser. After import, data sets can be loaded using DICOMUtils functions (e.g., loadPatientByUID) - see above for an example.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# instantiate a new DICOM browser&lt;br /&gt;
slicer.util.selectModule(&amp;quot;DICOM&amp;quot;)&lt;br /&gt;
dicomBrowser = slicer.modules.DICOMWidget.browserWidget.dicomBrowser&lt;br /&gt;
# use dicomBrowser.ImportDirectoryCopy to make a copy of the files (useful for importing data from removable storage)&lt;br /&gt;
dicomBrowser.importDirectory(dicomFilesDirectory, dicomBrowser.ImportDirectoryAddLink)&lt;br /&gt;
# wait for import to finish before proceeding (optional, if removed then import runs in the background)&lt;br /&gt;
dicomBrowser.waitForImportFinished()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How to import DICOM files using DICOMweb===&lt;br /&gt;
&lt;br /&gt;
Download and import DICOM data set using DICOMweb from [https://kheops.online/ Kheops], Google Health API, etc.&lt;br /&gt;
&lt;br /&gt;
How to obtain accessToken:&lt;br /&gt;
* Google Cloud: Execute &amp;lt;code&amp;gt;gcloud auth print-access-token&amp;lt;/code&amp;gt; once you have logged in&lt;br /&gt;
* Kheops: create an album, create a sharing link (somethin like &amp;lt;code&amp;gt;https://demo.kheops.online/view/TfYXwbKAW7JYbAgZ7MyISf&amp;lt;/code&amp;gt;), the token is the string after the last slash&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicer.util.selectModule(&amp;quot;DICOM&amp;quot;)  # ensure DICOM database is initialized and &lt;br /&gt;
slicer.app.processEvents()&lt;br /&gt;
from DICOMLib import DICOMUtils&lt;br /&gt;
DICOMUtils.importFromDICOMWeb(&lt;br /&gt;
    dicomWebEndpoint=&amp;quot;http://demo.kheops.online/api&amp;quot;,&lt;br /&gt;
    studyInstanceUID=&amp;quot;1.3.6.1.4.1.14519.5.2.1.8421.4009.985792766370191766692237040819&amp;quot;,&lt;br /&gt;
    accessToken=&amp;quot;TfYXwbKAW7JYbAgZ7MyISf&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How to access top level tags of DICOM images imported into Slicer? For example, to print the first patient's first study's first series' &amp;quot;0020,0032&amp;quot; field:===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
db=slicer.dicomDatabase&lt;br /&gt;
patientList=db.patients()&lt;br /&gt;
studyList=db.studiesForPatient(patientList[0])&lt;br /&gt;
seriesList=db.seriesForStudy(studyList[0])&lt;br /&gt;
fileList=db.filesForSeries(seriesList[0])&lt;br /&gt;
# Note, fileValue accesses the database of cached top level tags&lt;br /&gt;
# (nested tags are not included)&lt;br /&gt;
print(db.fileValue(fileList[0],'0020,0032'))&lt;br /&gt;
# Get tag group,number from dicom dictionary&lt;br /&gt;
import pydicom as dicom&lt;br /&gt;
tagName = &amp;quot;StudyDate&amp;quot;&lt;br /&gt;
tagStr = str(dicom.tag.Tag(tagName))[1:-1].replace(' ','')&lt;br /&gt;
print(db.fileValue(fileList[0],tagStr))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How to access DICOM tags nested in a sequence===&lt;br /&gt;
  db=slicer.dicomDatabase&lt;br /&gt;
  patientList=db.patients()&lt;br /&gt;
  studyList=db.studiesForPatient(patientList[0])&lt;br /&gt;
  seriesList=db.seriesForStudy(studyList[0])&lt;br /&gt;
  fileList=db.filesForSeries(seriesList[0])&lt;br /&gt;
  # use pydicom to access the full header, which requires&lt;br /&gt;
  # re-reading the dataset instead of using the database cache&lt;br /&gt;
  import pydicom&lt;br /&gt;
  pydicom.dcmread(fileList[0])&lt;br /&gt;
  ds.CTExposureSequence[0].ExposureModulationType&lt;br /&gt;
&lt;br /&gt;
===How to access tag of a volume loaded from DICOM? For example, get the patient position stored in a volume:===&lt;br /&gt;
  volumeName='2: ENT IMRT'&lt;br /&gt;
  n=slicer.util.getNode(volumeName)&lt;br /&gt;
  instUids=n.GetAttribute('DICOM.instanceUIDs').split()&lt;br /&gt;
  filename=slicer.dicomDatabase.fileForInstance(instUids[0])&lt;br /&gt;
  print(slicer.dicomDatabase.fileValue(filename,'0018,5100'))&lt;br /&gt;
&lt;br /&gt;
===How to access tag of an item in the Subject Hierachy tree? For example, get the content time tag of a structure set:===&lt;br /&gt;
  rtStructName = '3: RTSTRUCT: PROS'&lt;br /&gt;
  rtStructNode = slicer.util.getNode(rtStructName)&lt;br /&gt;
  shNode = slicer.vtkMRMLSubjectHierarchyNode.GetSubjectHierarchyNode(slicer.mrmlScene)&lt;br /&gt;
  rtStructShItemID = shNode.GetItemByDataNode(rtStructNode)&lt;br /&gt;
  ctSliceInstanceUids = shNode.GetItemAttribute(rtStructShItemID, 'DICOM.ReferencedInstanceUIDs').split()&lt;br /&gt;
  filename = slicer.dicomDatabase.fileForInstance(ctSliceInstanceUids[0])&lt;br /&gt;
  print(slicer.dicomDatabase.fileValue(filename,'0008,0033'))&lt;br /&gt;
&lt;br /&gt;
===How to get path and filename of a loaded DICOM volume?===&lt;br /&gt;
  def pathFromNode(node):&lt;br /&gt;
    storageNode=node.GetStorageNode()&lt;br /&gt;
    if storageNode is not None: # loaded via drag-drop&lt;br /&gt;
        filepath=storageNode.GetFullNameFromFileName()&lt;br /&gt;
    else: # loaded via DICOM browser&lt;br /&gt;
        instanceUIDs=node.GetAttribute('DICOM.instanceUIDs').split()&lt;br /&gt;
        filepath=slicer.dicomDatabase.fileForInstance(instUids[0])&lt;br /&gt;
    return filepath&lt;br /&gt;
  &lt;br /&gt;
  # example:&lt;br /&gt;
  node=slicer.util.getNode('volume1')&lt;br /&gt;
  path=self.pathFromNode(node)&lt;br /&gt;
  print(&amp;quot;DICOM path=%s&amp;quot; % path)&lt;br /&gt;
&lt;br /&gt;
===How can I convert DICOM to NRRD on the command line?===&lt;br /&gt;
&lt;br /&gt;
 /Applications/Slicer-4.6.2.app/Contents/MacOS/Slicer --no-main-window --python-code &amp;quot;node=slicer.util.loadVolume('/tmp/series/im0.dcm'); slicer.util.saveNode(node, '/tmp/output.nrrd'); exit()&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The same can be done on windows by using the top level Slicer.exe.  Be sure to use forward slashes in the pathnames within quotes on the command line.&lt;br /&gt;
&lt;br /&gt;
===Export a volume to DICOM file format===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
volumeNode = getNode('CTChest')&lt;br /&gt;
outputFolder = &amp;quot;c:/tmp/dicom-output&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Create patient and study and put the volume under the study&lt;br /&gt;
shNode = slicer.vtkMRMLSubjectHierarchyNode.GetSubjectHierarchyNode(slicer.mrmlScene)&lt;br /&gt;
patientItemID = shNode.CreateSubjectItem(shNode.GetSceneItemID(), &amp;quot;test patient&amp;quot;)&lt;br /&gt;
studyItemID = shNode.CreateStudyItem(patientItemID, &amp;quot;test study&amp;quot;)&lt;br /&gt;
volumeShItemID = shNode.GetItemByDataNode(volumeNode)&lt;br /&gt;
shNode.SetItemParent(volumeShItemID, studyItemID)&lt;br /&gt;
&lt;br /&gt;
import DICOMScalarVolumePlugin&lt;br /&gt;
exporter = DICOMScalarVolumePlugin.DICOMScalarVolumePluginClass()&lt;br /&gt;
exportables = exporter.examineForExport(volumeShItemID)&lt;br /&gt;
for exp in exportables:&lt;br /&gt;
  exp.directory = outputFolder&lt;br /&gt;
&lt;br /&gt;
exporter.export(exportables)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Export a segmentation to DICOM segmentation object===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentationNode = ...&lt;br /&gt;
referenceVolumeNode = ...&lt;br /&gt;
outputFolder = &amp;quot;c:/tmp/dicom-output&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Associate segmentation node with a reference volume node&lt;br /&gt;
shNode = slicer.vtkMRMLSubjectHierarchyNode.GetSubjectHierarchyNode(slicer.mrmlScene)&lt;br /&gt;
referenceVolumeShItem = shNode.GetItemByDataNode(referenceVolumeNode)&lt;br /&gt;
studyShItem = shNode.GetItemParent(referenceVolumeShItem)&lt;br /&gt;
segmentationShItem = shNode.GetItemByDataNode(segmentationNode)&lt;br /&gt;
shNode.SetItemParent(segmentationShItem, studyShItem)&lt;br /&gt;
&lt;br /&gt;
# Export to DICOM&lt;br /&gt;
import DICOMSegmentationPlugin&lt;br /&gt;
exporter = DICOMSegmentationPlugin.DICOMSegmentationPluginClass()&lt;br /&gt;
exportables = exporter.examineForExport(segmentationShItem)&lt;br /&gt;
for exp in exportables:&lt;br /&gt;
    exp.directory = outputFolder&lt;br /&gt;
&lt;br /&gt;
exporter.export(exportables)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Customize table columns in DICOM browser===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Get browser and database&lt;br /&gt;
dicomBrowser = slicer.modules.dicom.widgetRepresentation().self().browserWidget.dicomBrowser&lt;br /&gt;
dicomDatabase = dicomBrowser.database()&lt;br /&gt;
&lt;br /&gt;
# Print list of available columns&lt;br /&gt;
print(dicomDatabase.patientFieldNames)&lt;br /&gt;
print(dicomDatabase.studyFieldNames)&lt;br /&gt;
print(dicomDatabase.seriesFieldNames)&lt;br /&gt;
&lt;br /&gt;
# Change column order&lt;br /&gt;
dicomDatabase.setWeightForField('Series', 'SeriesDescription', 7)&lt;br /&gt;
dicomDatabase.setWeightForField('Studies', 'StudyDescription', 6)&lt;br /&gt;
# Change column visibility&lt;br /&gt;
dicomDatabase.setVisibilityForField('Patients', 'PatientsBirthDate', False)&lt;br /&gt;
dicomDatabase.setVisibilityForField('Patients', 'PatientsComments', True)&lt;br /&gt;
dicomDatabase.setWeightForField('Patients', 'PatientsComments', 8)&lt;br /&gt;
# Change column name&lt;br /&gt;
dicomDatabase.setDisplayedNameForField('Series', 'DisplayedCount', 'Number of images')&lt;br /&gt;
# Customize table manager in DICOM browser&lt;br /&gt;
dicomTableManager = dicomBrowser.dicomTableManager()&lt;br /&gt;
dicomTableManager.selectionMode = qt.QAbstractItemView.SingleSelection&lt;br /&gt;
dicomTableManager.autoSelectSeries = False&lt;br /&gt;
&lt;br /&gt;
# Force database views update&lt;br /&gt;
dicomDatabase.closeDatabase()&lt;br /&gt;
dicomDatabase.openDatabase(dicomBrowser.database().databaseFilename)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Toolbar functions==&lt;br /&gt;
&lt;br /&gt;
*How to turn on slice intersections in the crosshair menu on the toolbar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
viewNodes = slicer.util.getNodesByClass('vtkMRMLSliceCompositeNode')&lt;br /&gt;
for viewNode in viewNodes:&lt;br /&gt;
  viewNode.SetSliceIntersectionVisibility(1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
How to find similar functions? For this one I searched for &amp;quot;slice intersections&amp;quot; text in the whole slicer source code, found that the function is implemented in Base\QTGUI\qSlicerViewersToolBar.cxx, then translated the qSlicerViewersToolBarPrivate::setSliceIntersectionVisible(bool visible) method to Python.&lt;br /&gt;
&lt;br /&gt;
==Switch to a different module==&lt;br /&gt;
&lt;br /&gt;
This utility function can be used to open a different module:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicer.util.selectModule('DICOM')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Manipulating objects in the slice viewer==&lt;br /&gt;
&lt;br /&gt;
*How to define/edit a circular region of interest in a slice viewer?&lt;br /&gt;
&lt;br /&gt;
Drop two markup points on a slice view and copy-paste the code below into the Python console. After this, as you move the markups you’ll see a circle following the markups.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Update the sphere from the fiducial points&lt;br /&gt;
def UpdateSphere(param1, param2):  &lt;br /&gt;
  import math&lt;br /&gt;
  centerPointCoord = [0.0, 0.0, 0.0]&lt;br /&gt;
  markups.GetNthFiducialPosition(0,centerPointCoord)&lt;br /&gt;
  circumferencePointCoord = [0.0, 0.0, 0.0]&lt;br /&gt;
  markups.GetNthFiducialPosition(1,circumferencePointCoord)&lt;br /&gt;
  sphere.SetCenter(centerPointCoord)&lt;br /&gt;
  radius=math.sqrt((centerPointCoord[0]-circumferencePointCoord[0])**2+(centerPointCoord[1]-circumferencePointCoord[1])**2+(centerPointCoord[2]-circumferencePointCoord[2])**2)&lt;br /&gt;
  sphere.SetRadius(radius)&lt;br /&gt;
  sphere.SetPhiResolution(30)&lt;br /&gt;
  sphere.SetThetaResolution(30)&lt;br /&gt;
  sphere.Update()&lt;br /&gt;
&lt;br /&gt;
# Get markup node from scene&lt;br /&gt;
markups=slicer.util.getNode('F')&lt;br /&gt;
sphere = vtk.vtkSphereSource()&lt;br /&gt;
UpdateSphere(0,0)&lt;br /&gt;
 &lt;br /&gt;
# Create model node and add to scene&lt;br /&gt;
modelsLogic = slicer.modules.models.logic()&lt;br /&gt;
model = modelsLogic.AddModel(sphere.GetOutput())&lt;br /&gt;
model.GetDisplayNode().SetSliceIntersectionVisibility(True)&lt;br /&gt;
model.GetDisplayNode().SetSliceIntersectionThickness(3)&lt;br /&gt;
model.GetDisplayNode().SetColor(1,1,0)&lt;br /&gt;
 &lt;br /&gt;
# Call UpdateSphere whenever the fiducials are changed&lt;br /&gt;
markups.AddObserver(slicer.vtkMRMLMarkupsNode.PointModifiedEvent, UpdateSphere, 2)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Measure angle between two slice planes==&lt;br /&gt;
&lt;br /&gt;
Measure angle between red and yellow slice nodes. Whenever any of the slice nodes are moved, the updated angle is printed on the console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sliceNodeIds = ['vtkMRMLSliceNodeRed', 'vtkMRMLSliceNodeYellow']&lt;br /&gt;
&lt;br /&gt;
# Print angles between slice nodes&lt;br /&gt;
def ShowAngle(unused1=None, unused2=None):&lt;br /&gt;
    sliceNormalVector = []&lt;br /&gt;
    for sliceNodeId in sliceNodeIds:&lt;br /&gt;
        sliceToRAS = slicer.mrmlScene.GetNodeByID(sliceNodeId).GetSliceToRAS()&lt;br /&gt;
        sliceNormalVector.append([sliceToRAS.GetElement(0,2), sliceToRAS.GetElement(1,2), sliceToRAS.GetElement(2,2)])&lt;br /&gt;
    angleRad = vtk.vtkMath.AngleBetweenVectors(sliceNormalVector[0], sliceNormalVector[1])&lt;br /&gt;
    angleDeg = vtk.vtkMath.DegreesFromRadians(angleRad)&lt;br /&gt;
    print('Angle between slice planes = {0:0.3f}'.format(angleDeg))&lt;br /&gt;
&lt;br /&gt;
# Observe slice node changes&lt;br /&gt;
for sliceNodeId in sliceNodeIds:&lt;br /&gt;
    slicer.mrmlScene.GetNodeByID(sliceNodeId).AddObserver(vtk.vtkCommand.ModifiedEvent, ShowAngle)&lt;br /&gt;
&lt;br /&gt;
# Print current angle&lt;br /&gt;
ShowAngle()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Measure angle between two markup planes==&lt;br /&gt;
&lt;br /&gt;
Measure angle between two markup plane nodes. Whenever any of the plane nodes are moved, the updated angle is printed on the console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
planeNodeNames = ['P', 'P_1']&lt;br /&gt;
&lt;br /&gt;
# Print angles between slice nodes&lt;br /&gt;
def ShowAngle(unused1=None, unused2=None):&lt;br /&gt;
    planeNormalVectors = []&lt;br /&gt;
    for planeNodeName in planeNodeNames:&lt;br /&gt;
        planeNode = slicer.util.getFirstNodeByClassByName('vtkMRMLMarkupsPlaneNode', planeNodeName)&lt;br /&gt;
        planeNormalVector = [0.0, 0.0, 0.0]&lt;br /&gt;
        planeNode.GetNormalWorld(planeNormalVector)&lt;br /&gt;
        planeNormalVectors.append(planeNormalVector)&lt;br /&gt;
    angleRad = vtk.vtkMath.AngleBetweenVectors(planeNormalVectors[0], planeNormalVectors[1])&lt;br /&gt;
    angleDeg = vtk.vtkMath.DegreesFromRadians(angleRad)&lt;br /&gt;
    print('Angle between planes {0} and {1} = {2:0.3f}'.format(planeNodeNames[0], planeNodeNames[1], angleDeg))&lt;br /&gt;
&lt;br /&gt;
# Observe plane node changes&lt;br /&gt;
for planeNodeName in planeNodeNames:&lt;br /&gt;
    planeNode = slicer.util.getFirstNodeByClassByName('vtkMRMLMarkupsPlaneNode', planeNodeName)&lt;br /&gt;
    planeNode.AddObserver(slicer.vtkMRMLMarkupsPlaneNode.PointModifiedEvent, ShowAngle)&lt;br /&gt;
&lt;br /&gt;
# Print current angle&lt;br /&gt;
ShowAngle()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Measure angle between two markup lines==&lt;br /&gt;
&lt;br /&gt;
Measure angle between two markup line nodes. Whenever either line is moved, the updated angle is printed on the console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lineNodeNames = ['L', 'L_1']&lt;br /&gt;
&lt;br /&gt;
# Print angles between slice nodes&lt;br /&gt;
def ShowAngle(unused1=None, unused2=None):&lt;br /&gt;
    import numpy as np&lt;br /&gt;
    lineDirectionVectors = []&lt;br /&gt;
    for lineNodeName in lineNodeNames:&lt;br /&gt;
        lineNode = slicer.util.getFirstNodeByClassByName('vtkMRMLMarkupsLineNode', lineNodeName)&lt;br /&gt;
        lineStartPos = np.zeros(3)&lt;br /&gt;
        lineEndPos = np.zeros(3)&lt;br /&gt;
        lineNode.GetNthControlPointPositionWorld(0, lineStartPos)&lt;br /&gt;
        lineNode.GetNthControlPointPositionWorld(1, lineEndPos)&lt;br /&gt;
        lineDirectionVector = (lineEndPos-lineStartPos)/np.linalg.norm(lineEndPos-lineStartPos)&lt;br /&gt;
        lineDirectionVectors.append(lineDirectionVector)&lt;br /&gt;
    angleRad = vtk.vtkMath.AngleBetweenVectors(lineDirectionVectors[0], lineDirectionVectors[1])&lt;br /&gt;
    angleDeg = vtk.vtkMath.DegreesFromRadians(angleRad)&lt;br /&gt;
    print('Angle between lines {0} and {1} = {2:0.3f}'.format(lineNodeNames[0], lineNodeNames[1], angleDeg))&lt;br /&gt;
&lt;br /&gt;
# Observe line node changes&lt;br /&gt;
for lineNodeName in lineNodeNames:&lt;br /&gt;
    lineNode = slicer.util.getFirstNodeByClassByName('vtkMRMLMarkupsLineNode', lineNodeName)&lt;br /&gt;
    lineNode.AddObserver(slicer.vtkMRMLMarkupsLineNode.PointModifiedEvent, ShowAngle)&lt;br /&gt;
&lt;br /&gt;
# Print current angle&lt;br /&gt;
ShowAngle()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Set slice position and orientation from 3 markup fiducials==&lt;br /&gt;
&lt;br /&gt;
Drop 3 markup points in the scene and copy-paste the code below into the Python console. After this, as you move the markups you’ll see the red slice view position and orientation will be set to make it fit to the 3 points.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Update plane from fiducial points&lt;br /&gt;
def UpdateSlicePlane(param1=None, param2=None):&lt;br /&gt;
  # Get point positions as numpy array&lt;br /&gt;
  import numpy as np&lt;br /&gt;
  nOfFiduciallPoints = markups.GetNumberOfFiducials()&lt;br /&gt;
  if nOfFiduciallPoints &amp;lt; 3:&lt;br /&gt;
    return  # not enough points&lt;br /&gt;
  points = np.zeros([3,nOfFiduciallPoints])&lt;br /&gt;
  for i in range(0, nOfFiduciallPoints):&lt;br /&gt;
    markups.GetNthFiducialPosition(i, points[:,i])&lt;br /&gt;
  # Compute plane position and normal&lt;br /&gt;
  planePosition = points.mean(axis=1)&lt;br /&gt;
  planeNormal = np.cross(points[:,1] - points[:,0], points[:,2] - points[:,0])&lt;br /&gt;
  planeX = points[:,1] - points[:,0]&lt;br /&gt;
  sliceNode.SetSliceToRASByNTP(planeNormal[0], planeNormal[1], planeNormal[2],&lt;br /&gt;
    planeX[0], planeX[1], planeX[2],&lt;br /&gt;
    planePosition[0], planePosition[1], planePosition[2], 0)&lt;br /&gt;
&lt;br /&gt;
# Get markup node from scene&lt;br /&gt;
sliceNode = slicer.app.layoutManager().sliceWidget('Red').mrmlSliceNode()&lt;br /&gt;
markups = slicer.util.getNode('F')&lt;br /&gt;
&lt;br /&gt;
# Update slice plane manually&lt;br /&gt;
UpdateSlicePlane()&lt;br /&gt;
&lt;br /&gt;
# Update slice plane automatically whenever points are changed&lt;br /&gt;
markupObservation = [markups, markups.AddObserver(slicer.vtkMRMLMarkupsNode.PointModifiedEvent, UpdateSlicePlane, 2)]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To stop automatic updates, run this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
markupObservation[0].RemoveObserver(markupObservation[1])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Set slice position and orientation from a normal vector and position==&lt;br /&gt;
&lt;br /&gt;
This code snippet shows how to display a slice view defined by a normal vector and position in an anatomically sensible way: rotating slice view so that &amp;quot;up&amp;quot; direction (or &amp;quot;right&amp;quot; direction) is towards an anatomical axis.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def setSlicePoseFromSliceNormalAndPosition(sliceNode, sliceNormal, slicePosition, defaultViewUpDirection=None, backupViewRightDirection=None):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Set slice pose from the provided plane normal and position. View up direction is determined automatically,&lt;br /&gt;
    to make view up point towards defaultViewUpDirection.&lt;br /&gt;
    :param defaultViewUpDirection Slice view will be spinned in-plane to match point approximately this up direction. Default: patient superior.&lt;br /&gt;
    :param backupViewRightDirection Slice view will be spinned in-plane to match point approximately this right direction&lt;br /&gt;
        if defaultViewUpDirection is too similar to sliceNormal. Default: patient left.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    # Fix up input directions&lt;br /&gt;
    if defaultViewUpDirection is None:&lt;br /&gt;
        defaultViewUpDirection = [0,0,1]&lt;br /&gt;
    if backupViewRightDirection is None:&lt;br /&gt;
        backupViewRightDirection = [-1,0,0]&lt;br /&gt;
    if sliceNormal[1]&amp;gt;=0:&lt;br /&gt;
        sliceNormalStandardized = sliceNormal&lt;br /&gt;
    else:&lt;br /&gt;
        sliceNormalStandardized = [-sliceNormal[0], -sliceNormal[1], -sliceNormal[2]]&lt;br /&gt;
    # Compute slice axes&lt;br /&gt;
    sliceNormalViewUpAngle = vtk.vtkMath.AngleBetweenVectors(sliceNormalStandardized, defaultViewUpDirection)&lt;br /&gt;
    angleTooSmallThresholdRad = 0.25 # about 15 degrees&lt;br /&gt;
    if sliceNormalViewUpAngle &amp;gt; angleTooSmallThresholdRad and sliceNormalViewUpAngle &amp;lt; vtk.vtkMath.Pi() - angleTooSmallThresholdRad:&lt;br /&gt;
        viewUpDirection = defaultViewUpDirection&lt;br /&gt;
        sliceAxisY = viewUpDirection&lt;br /&gt;
        sliceAxisX = [0, 0, 0]&lt;br /&gt;
        vtk.vtkMath.Cross(sliceAxisY, sliceNormalStandardized, sliceAxisX)&lt;br /&gt;
    else:&lt;br /&gt;
        sliceAxisX = backupViewRightDirection&lt;br /&gt;
    # Set slice axes&lt;br /&gt;
    sliceNode.SetSliceToRASByNTP(sliceNormalStandardized[0], sliceNormalStandardized[1], sliceNormalStandardized[2],&lt;br /&gt;
        sliceAxisX[0], sliceAxisX[1], sliceAxisX[2],&lt;br /&gt;
        slicePosition[0], slicePosition[1], slicePosition[2], 0)&lt;br /&gt;
&lt;br /&gt;
# Example usage:&lt;br /&gt;
sliceNode = getNode('vtkMRMLSliceNodeRed')&lt;br /&gt;
transformNode = getNode('Transform_3')&lt;br /&gt;
transformMatrix = vtk.vtkMatrix4x4()&lt;br /&gt;
transformNode.GetMatrixTransformToParent(transformMatrix)&lt;br /&gt;
sliceNormal = [transformMatrix.GetElement(0,2), transformMatrix.GetElement(1,2), transformMatrix.GetElement(2,2)]&lt;br /&gt;
slicePosition = [transformMatrix.GetElement(0,3), transformMatrix.GetElement(1,3), transformMatrix.GetElement(2,3)]&lt;br /&gt;
setSlicePoseFromSliceNormalAndPosition(sliceNode, sliceNormal, slicePosition)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Switching to markup fiducial placement mode==&lt;br /&gt;
&lt;br /&gt;
To activate a fiducial placement mode, both interaction mode has to be set and a fiducial node has to be selected:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
interactionNode = slicer.app.applicationLogic().GetInteractionNode()&lt;br /&gt;
selectionNode = slicer.app.applicationLogic().GetSelectionNode()&lt;br /&gt;
selectionNode.SetReferenceActivePlaceNodeClassName(&amp;quot;vtkMRMLMarkupsFiducialNode&amp;quot;)&lt;br /&gt;
fiducialNode = slicer.vtkMRMLMarkupsFiducialNode()&lt;br /&gt;
slicer.mrmlScene.AddNode(fiducialNode)&lt;br /&gt;
fiducialNode.CreateDefaultDisplayNodes() &lt;br /&gt;
selectionNode.SetActivePlaceNodeID(fiducialNode.GetID())&lt;br /&gt;
interactionNode.SetCurrentInteractionMode(interactionNode.Place)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively, ''qSlicerMarkupsPlaceWidget'' widget can be used to initiate markup placement:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Temporary markups node&lt;br /&gt;
markupsNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLMarkupsFiducialNode&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def placementModeChanged(active):&lt;br /&gt;
  print(&amp;quot;Placement: &amp;quot; +(&amp;quot;active&amp;quot; if active else &amp;quot;inactive&amp;quot;))&lt;br /&gt;
  # You can inspect what is in the markups node here, delete the temporary markup node, etc.&lt;br /&gt;
&lt;br /&gt;
# Create and set up widget that contains a single &amp;quot;place markup&amp;quot; button. The widget can be placed in the module GUI.&lt;br /&gt;
placeWidget = slicer.qSlicerMarkupsPlaceWidget()&lt;br /&gt;
placeWidget.setMRMLScene(slicer.mrmlScene)&lt;br /&gt;
placeWidget.setCurrentNode(markupsNode)&lt;br /&gt;
placeWidget.buttonsVisible=False&lt;br /&gt;
placeWidget.placeButton().show()&lt;br /&gt;
placeWidget.connect('activeMarkupsFiducialPlaceModeChanged(bool)', placementModeChanged)&lt;br /&gt;
placeWidget.show()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Change markup fiducial display properties==&lt;br /&gt;
&lt;br /&gt;
Display properties are stored in display node(s) associated with the fiducial node.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fiducialNode = getNode('F')&lt;br /&gt;
fiducialDisplayNode = fiducialNode.GetDisplayNode()&lt;br /&gt;
fiducialDisplayNode.SetVisibility(False) # Hide all points&lt;br /&gt;
fiducialDisplayNode.SetVisibility(True) # Show all points&lt;br /&gt;
fiducialDisplayNode.SetSelectedColor(1,1,0) # Set color to yellow&lt;br /&gt;
fiducialDisplayNode.SetViewNodeIDs([&amp;quot;vtkMRMLSliceNodeRed&amp;quot;, &amp;quot;vtkMRMLViewNode1&amp;quot;]) # Only show in red slice view and first 3D view&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get a notification if a markup point position is modified==&lt;br /&gt;
&lt;br /&gt;
Event management of Slicer-4.11 version is still subject to change. The example below shows how point manipulation can be observed now.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def onMarkupChanged(caller,event):&lt;br /&gt;
    markupsNode = caller&lt;br /&gt;
    sliceView = markupsNode.GetAttribute('Markups.MovingInSliceView')&lt;br /&gt;
    movingMarkupIndex = markupsNode.GetDisplayNode().GetActiveControlPoint()&lt;br /&gt;
    if movingMarkupIndex &amp;gt;= 0:&lt;br /&gt;
        pos = [0,0,0]&lt;br /&gt;
        markupsNode.GetNthFiducialPosition(movingMarkupIndex, pos)&lt;br /&gt;
        isPreview = markupsNode.GetNthControlPointPositionStatus(movingMarkupIndex) == slicer.vtkMRMLMarkupsNode.PositionPreview&lt;br /&gt;
        if isPreview:&lt;br /&gt;
            logging.info(&amp;quot;Point {0} is previewed at {1} in slice view {2}&amp;quot;.format(movingMarkupIndex, pos, sliceView))&lt;br /&gt;
        else:&lt;br /&gt;
            logging.info(&amp;quot;Point {0} was moved {1} in slice view {2}&amp;quot;.format(movingMarkupIndex, pos, sliceView))&lt;br /&gt;
    else:&lt;br /&gt;
        logging.info(&amp;quot;Points modified: slice view = {0}&amp;quot;.format(sliceView))&lt;br /&gt;
&lt;br /&gt;
def onMarkupStartInteraction(caller, event):&lt;br /&gt;
    markupsNode = caller&lt;br /&gt;
    sliceView = markupsNode.GetAttribute('Markups.MovingInSliceView')&lt;br /&gt;
    movingMarkupIndex = markupsNode.GetDisplayNode().GetActiveControlPoint()    &lt;br /&gt;
    logging.info(&amp;quot;Start interaction: point ID = {0}, slice view = {1}&amp;quot;.format(movingMarkupIndex, sliceView))&lt;br /&gt;
&lt;br /&gt;
def onMarkupEndInteraction(caller, event):&lt;br /&gt;
    markupsNode = caller&lt;br /&gt;
    sliceView = markupsNode.GetAttribute('Markups.MovingInSliceView')&lt;br /&gt;
    movingMarkupIndex = markupsNode.GetDisplayNode().GetActiveControlPoint()&lt;br /&gt;
    logging.info(&amp;quot;End interaction: point ID = {0}, slice view = {1}&amp;quot;.format(movingMarkupIndex, sliceView))&lt;br /&gt;
&lt;br /&gt;
markupsNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLMarkupsFiducialNode&amp;quot;)&lt;br /&gt;
markupsNode.CreateDefaultDisplayNodes()&lt;br /&gt;
markupsNode.AddFiducial(0,0,0)&lt;br /&gt;
markupsNode.AddObserver(slicer.vtkMRMLMarkupsNode.PointModifiedEvent, onMarkupChanged)&lt;br /&gt;
markupsNode.AddObserver(slicer.vtkMRMLMarkupsNode.PointStartInteractionEvent, onMarkupStartInteraction)&lt;br /&gt;
markupsNode.AddObserver(slicer.vtkMRMLMarkupsNode.PointEndInteractionEvent, onMarkupEndInteraction)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get a notification if a transform is modified==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def onTransformNodeModified(transformNode, unusedArg2=None, unusedArg3=None):&lt;br /&gt;
  transformMatrix = vtk.vtkMatrix4x4()&lt;br /&gt;
  transformNode.GetMatrixTransformToWorld(transformMatrix)&lt;br /&gt;
  print(&amp;quot;Position: [{0}, {1}, {2}]&amp;quot;.format(transformMatrix.GetElement(0,3), transformMatrix.GetElement(1,3), transformMatrix.GetElement(2,3)))&lt;br /&gt;
&lt;br /&gt;
transformNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLTransformNode&amp;quot;)&lt;br /&gt;
transformNode.AddObserver(slicer.vtkMRMLTransformNode.TransformModifiedEvent, onTransformNodeModified)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Rotate a node around a specified point==&lt;br /&gt;
&lt;br /&gt;
Set up the scene:&lt;br /&gt;
&lt;br /&gt;
*Add a markup fiducial node (centerOfRotationMarkupsNode) with a single point to specify center of rotation.&lt;br /&gt;
*Add a rotation transform (rotationTransformNode) that will be edited in Transforms module to specify rotation angles.&lt;br /&gt;
*Add a transform (finalTransformNode) and apply it (not harden) to those nodes (images, models, etc.) that you want to rotate around the center of rotation point.&lt;br /&gt;
&lt;br /&gt;
Then run the script below, go to Transforms module, select rotationTransformNode, and move rotation sliders.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# This markups fiducial node specifies the center of rotation&lt;br /&gt;
centerOfRotationMarkupsNode = getNode('F')&lt;br /&gt;
# This transform can be  edited in Transforms module&lt;br /&gt;
rotationTransformNode = getNode('LinearTransform_3')&lt;br /&gt;
# This transform has to be applied to the image, model, etc.&lt;br /&gt;
finalTransformNode = getNode('LinearTransform_4')&lt;br /&gt;
&lt;br /&gt;
def updateFinalTransform(unusedArg1=None, unusedArg2=None, unusedArg3=None):&lt;br /&gt;
    rotationMatrix = vtk.vtkMatrix4x4()&lt;br /&gt;
    rotationTransformNode.GetMatrixTransformToParent(rotationMatrix)&lt;br /&gt;
    rotationCenterPointCoord = [0.0, 0.0, 0.0]&lt;br /&gt;
    centerOfRotationMarkupsNode.GetNthControlPointPositionWorld(0, rotationCenterPointCoord)&lt;br /&gt;
    finalTransform = vtk.vtkTransform()&lt;br /&gt;
    finalTransform.Translate(rotationCenterPointCoord)&lt;br /&gt;
    finalTransform.Concatenate(rotationMatrix)&lt;br /&gt;
    finalTransform.Translate(-rotationCenterPointCoord[0], -rotationCenterPointCoord[1], -rotationCenterPointCoord[2])&lt;br /&gt;
    finalTransformNode.SetAndObserveMatrixTransformToParent(finalTransform.GetMatrix())&lt;br /&gt;
&lt;br /&gt;
# Manual initial update&lt;br /&gt;
updateFinalTransform()&lt;br /&gt;
&lt;br /&gt;
# Automatic update when point is moved or transform is modified&lt;br /&gt;
rotationTransformNodeObserver = rotationTransformNode.AddObserver(slicer.vtkMRMLTransformNode.TransformModifiedEvent, updateFinalTransform)&lt;br /&gt;
centerOfRotationMarkupsNodeObserver = centerOfRotationMarkupsNode.AddObserver(slicer.vtkMRMLMarkupsNode.PointModifiedEvent, updateFinalTransform)&lt;br /&gt;
&lt;br /&gt;
# Execute these lines to stop automatic updates:&lt;br /&gt;
# rotationTransformNode.RemoveObserver(rotationTransformNodeObserver)&lt;br /&gt;
# centerOfRotationMarkupsNode.RemoveObserver(centerOfRotationMarkupsNodeObserver)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Rotate a node around a specified line==&lt;br /&gt;
&lt;br /&gt;
Set up the scene:&lt;br /&gt;
&lt;br /&gt;
*Add a markup line node (rotationAxisMarkupsNode) with 2 points to specify rotation axis.&lt;br /&gt;
*Add a rotation transform (rotationTransformNode) that will be edited in Transforms module to specify rotation angle.&lt;br /&gt;
*Add a transform (finalTransformNode) and apply it (not harden) to those nodes (images, models, etc.) that you want to rotate around the line.&lt;br /&gt;
&lt;br /&gt;
Then run the script below, go to Transforms module, select rotationTransformNode, and move Edit / Rotation / IS slider.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# This markups fiducial node specifies the center of rotation&lt;br /&gt;
rotationAxisMarkupsNode = getNode('L')&lt;br /&gt;
# This transform can be edited in Transforms module (Edit / Rotation / IS slider)&lt;br /&gt;
rotationTransformNode = getNode('LinearTransform_3')&lt;br /&gt;
# This transform has to be applied to the image, model, etc.&lt;br /&gt;
finalTransformNode = getNode('LinearTransform_4')&lt;br /&gt;
&lt;br /&gt;
def updateFinalTransform(unusedArg1=None, unusedArg2=None, unusedArg3=None):&lt;br /&gt;
    import numpy as np&lt;br /&gt;
    rotationAxisPoint1_World = np.zeros(3)&lt;br /&gt;
    rotationAxisMarkupsNode.GetNthControlPointPositionWorld(0, rotationAxisPoint1_World)&lt;br /&gt;
    rotationAxisPoint2_World = np.zeros(3)&lt;br /&gt;
    rotationAxisMarkupsNode.GetNthControlPointPositionWorld(1, rotationAxisPoint2_World)&lt;br /&gt;
    axisDirectionZ_World = rotationAxisPoint2_World-rotationAxisPoint1_World&lt;br /&gt;
    axisDirectionZ_World = axisDirectionZ_World/np.linalg.norm(axisDirectionZ_World)&lt;br /&gt;
    # Get transformation between world coordinate system and rotation axis aligned coordinate system&lt;br /&gt;
    worldToRotationAxisTransform = vtk.vtkMatrix4x4()&lt;br /&gt;
    p=vtk.vtkPlaneSource()&lt;br /&gt;
    p.SetNormal(axisDirectionZ_World)&lt;br /&gt;
    axisOrigin = np.array(p.GetOrigin())&lt;br /&gt;
    axisDirectionX_World = np.array(p.GetPoint1())-axisOrigin&lt;br /&gt;
    axisDirectionY_World = np.array(p.GetPoint2())-axisOrigin&lt;br /&gt;
    rotationAxisToWorldTransform = np.row_stack((np.column_stack((axisDirectionX_World, axisDirectionY_World, axisDirectionZ_World, rotationAxisPoint1_World)), (0, 0, 0, 1)))&lt;br /&gt;
    rotationAxisToWorldTransformMatrix = slicer.util.vtkMatrixFromArray(rotationAxisToWorldTransform)&lt;br /&gt;
    worldToRotationAxisTransformMatrix = slicer.util.vtkMatrixFromArray(np.linalg.inv(rotationAxisToWorldTransform))&lt;br /&gt;
    # Compute transformation chain&lt;br /&gt;
    rotationMatrix = vtk.vtkMatrix4x4()&lt;br /&gt;
    rotationTransformNode.GetMatrixTransformToParent(rotationMatrix)&lt;br /&gt;
    finalTransform = vtk.vtkTransform()&lt;br /&gt;
    finalTransform.Concatenate(rotationAxisToWorldTransformMatrix)&lt;br /&gt;
    finalTransform.Concatenate(rotationMatrix)&lt;br /&gt;
    finalTransform.Concatenate(worldToRotationAxisTransformMatrix)&lt;br /&gt;
    finalTransformNode.SetAndObserveMatrixTransformToParent(finalTransform.GetMatrix())&lt;br /&gt;
&lt;br /&gt;
# Manual initial update&lt;br /&gt;
updateFinalTransform()&lt;br /&gt;
&lt;br /&gt;
# Automatic update when point is moved or transform is modified&lt;br /&gt;
rotationTransformNodeObserver = rotationTransformNode.AddObserver(slicer.vtkMRMLTransformNode.TransformModifiedEvent, updateFinalTransform)&lt;br /&gt;
rotationAxisMarkupsNodeObserver = rotationAxisMarkupsNode.AddObserver(slicer.vtkMRMLMarkupsNode.PointModifiedEvent, updateFinalTransform)&lt;br /&gt;
&lt;br /&gt;
# Execute these lines to stop automatic updates:&lt;br /&gt;
# rotationTransformNode.RemoveObserver(rotationTransformNodeObserver)&lt;br /&gt;
# rotationAxisMarkupsNode.RemoveObserver(rotationAxisMarkupsNodeObserver)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Show a context menu when a markup point is clicked in a slice or 3D view==&lt;br /&gt;
&lt;br /&gt;
Subject hierarchy plugins can offer actions in the view context menu when right-clicking objects that support such picking (such as Markups fiducials). A comprehensive [https://github.com/Slicer/Slicer/blob/master/Modules/Loadable/Annotations/SubjectHierarchyPlugins/AnnotationsSubjectHierarchyPlugin.py subject hierarchy plugin example] is for the Annotations module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  def viewContextMenuActions(self):&lt;br /&gt;
    return [self.doSomething]&lt;br /&gt;
&lt;br /&gt;
  def showViewContextMenuActionsForItem(self, itemID, eventData):&lt;br /&gt;
    if not itemID:&lt;br /&gt;
      logging.error('Invalid item for view context menu ' + str(itemID))&lt;br /&gt;
      return&lt;br /&gt;
&lt;br /&gt;
    pluginHandlerSingleton = slicer.qSlicerSubjectHierarchyPluginHandler.instance()&lt;br /&gt;
    shNode = pluginHandlerSingleton.subjectHierarchyNode()&lt;br /&gt;
    if shNode is None:&lt;br /&gt;
      logging.error('Failed to access subject hierarchy node')&lt;br /&gt;
      return&lt;br /&gt;
&lt;br /&gt;
    associatedNode = shNode.GetItemDataNode(itemID)&lt;br /&gt;
    if not associatedNode or not associatedNode.IsA(&amp;quot;vtkMRMLMarkupsNode&amp;quot;):&lt;br /&gt;
      return&lt;br /&gt;
&lt;br /&gt;
    self.viewMenuEventData = eventData&lt;br /&gt;
    self.viewMenuEventData['NodeID'] = associatedNode.GetID()&lt;br /&gt;
&lt;br /&gt;
  def onDoSomething(self):&lt;br /&gt;
    nodeID = self.viewMenuEventData['NodeID']&lt;br /&gt;
    markupsNode = slicer.mrmlScene.GetNodeByID(nodeID)&lt;br /&gt;
    if markupsNode is None or not markupsNode.IsA(&amp;quot;vtkMRMLMarkupsNode&amp;quot;):&lt;br /&gt;
      logging.error('Failed to get fiducial markups node by ID ' + str(nodeID))&lt;br /&gt;
      return&lt;br /&gt;
&lt;br /&gt;
    componentIndex = self.viewMenuEventData['ComponentIndex']&lt;br /&gt;
    markupID = markupsNode.GetNthMarkupID(componentIndex)&lt;br /&gt;
    &lt;br /&gt;
    # Do something with the clicked fiducial&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Write markup positions to JSON file==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
markupNode = getNode('F')&lt;br /&gt;
outputFileName = 'c:/tmp/test.json'&lt;br /&gt;
&lt;br /&gt;
# Get markup positions&lt;br /&gt;
data = []&lt;br /&gt;
for fidIndex in range(markupNode.GetNumberOfFiducials()):&lt;br /&gt;
  coords=[0,0,0]&lt;br /&gt;
  markupNode.GetNthFiducialPosition(fidIndex,coords)&lt;br /&gt;
  data.append({'label': markupNode.GetNthFiducialLabel(), 'position': coords})&lt;br /&gt;
&lt;br /&gt;
import json&lt;br /&gt;
with open(outputFileName, 'w') as outfile:&lt;br /&gt;
  json.dump(data, outfile)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Write annotation ROI to JSON file==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
roiNode = getNode('R')&lt;br /&gt;
outputFileName = &amp;quot;c:/tmp/test.json&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Get annotation ROI data&lt;br /&gt;
center = [0,0,0]&lt;br /&gt;
radius = [0,0,0]&lt;br /&gt;
roiNode.GetControlPointWorldCoordinates(0, center)&lt;br /&gt;
roiNode.GetControlPointWorldCoordinates(1, radius)&lt;br /&gt;
data = {'center': radius, 'radius': radius}&lt;br /&gt;
&lt;br /&gt;
# Write to json file&lt;br /&gt;
import json&lt;br /&gt;
with open(outputFileName, 'w') as outfile:&lt;br /&gt;
  json.dump(data, outfile)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Show a simple surface mesh as a model node==&lt;br /&gt;
&lt;br /&gt;
This example shows how to display a simple surface mesh (a box, created by a VTK source filter) as a model node.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Create and set up polydata source&lt;br /&gt;
box = vtk.vtkCubeSource()&lt;br /&gt;
box.SetXLength(30)&lt;br /&gt;
box.SetYLength(20)&lt;br /&gt;
box.SetZLength(15)&lt;br /&gt;
box.SetCenter(10,20,5)&lt;br /&gt;
&lt;br /&gt;
# Create a model node that displays output of the source&lt;br /&gt;
boxNode = slicer.modules.models.logic().AddModel(box.GetOutputPort())&lt;br /&gt;
&lt;br /&gt;
# Adjust display properties&lt;br /&gt;
boxNode.GetDisplayNode().SetColor(1,0,0)&lt;br /&gt;
boxNode.GetDisplayNode().SetOpacity(0.8)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Measure distance of points from surface==&lt;br /&gt;
&lt;br /&gt;
This example computes closest distance of points (markups fiducial 'F') from a surface (model node 'mymodel') and writes results into a table.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
markupsNode = getNode('F')&lt;br /&gt;
modelNode = getNode('mymodel')&lt;br /&gt;
&lt;br /&gt;
# Transform model polydata to world coordinate system&lt;br /&gt;
if modelNode.GetParentTransformNode():&lt;br /&gt;
    transformModelToWorld = vtk.vtkGeneralTransform()&lt;br /&gt;
    slicer.vtkMRMLTransformNode.GetTransformBetweenNodes(modelNode.GetParentTransformNode(), None, transformModelToWorld)&lt;br /&gt;
    polyTransformToWorld = vtk.vtkTransformPolyDataFilter()&lt;br /&gt;
    polyTransformToWorld.SetTransform(transformModelToWorld)&lt;br /&gt;
    polyTransformToWorld.SetInputData(modelNode.GetPolyData())&lt;br /&gt;
    polyTransformToWorld.Update()&lt;br /&gt;
    surface_World = polyTransformToWorld.GetOutput()&lt;br /&gt;
else:&lt;br /&gt;
    surface_World = modelNode.GetPolyData()&lt;br /&gt;
&lt;br /&gt;
# Create arrays to store results&lt;br /&gt;
indexCol = vtk.vtkIntArray()&lt;br /&gt;
indexCol.SetName(&amp;quot;Index&amp;quot;)&lt;br /&gt;
labelCol = vtk.vtkStringArray()&lt;br /&gt;
labelCol.SetName(&amp;quot;Name&amp;quot;)&lt;br /&gt;
distanceCol = vtk.vtkDoubleArray()&lt;br /&gt;
distanceCol.SetName(&amp;quot;Distance&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
distanceFilter = vtk.vtkImplicitPolyDataDistance()&lt;br /&gt;
distanceFilter.SetInput(surface_World);&lt;br /&gt;
nOfFiduciallPoints = markupsNode.GetNumberOfFiducials()&lt;br /&gt;
for i in range(0, nOfFiduciallPoints):&lt;br /&gt;
    point_World = [0,0,0]&lt;br /&gt;
    markupsNode.GetNthControlPointPositionWorld(i, point_World)&lt;br /&gt;
    closestPointOnSurface_World = [0,0,0]&lt;br /&gt;
    closestPointDistance = distanceFilter.EvaluateFunctionAndGetClosestPoint(point_World, closestPointOnSurface_World)&lt;br /&gt;
    indexCol.InsertNextValue(i)&lt;br /&gt;
    labelCol.InsertNextValue(markupsNode.GetNthControlPointLabel(i))&lt;br /&gt;
    distanceCol.InsertNextValue(closestPointDistance)&lt;br /&gt;
&lt;br /&gt;
# Create a table from result arrays&lt;br /&gt;
resultTableNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLTableNode&amp;quot;, &amp;quot;Points from surface distance&amp;quot;)&lt;br /&gt;
resultTableNode.AddColumn(indexCol)&lt;br /&gt;
resultTableNode.AddColumn(labelCol)&lt;br /&gt;
resultTableNode.AddColumn(distanceCol)&lt;br /&gt;
&lt;br /&gt;
# Show table in view layout&lt;br /&gt;
slicer.app.layoutManager().setLayout(slicer.vtkMRMLLayoutNode.SlicerLayoutFourUpTableView)&lt;br /&gt;
slicer.app.applicationLogic().GetSelectionNode().SetReferenceActiveTableID(resultTableNode.GetID())&lt;br /&gt;
slicer.app.applicationLogic().PropagateTableSelection()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Add a texture mapped plane to the scene as a model==&lt;br /&gt;
Note that model textures are not exposed in the GUI and are not saved in the scene&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Create model node&lt;br /&gt;
planeSource = vtk.vtkPlaneSource()&lt;br /&gt;
planeSource.SetOrigin(-50.0, -50.0, 0.0)&lt;br /&gt;
planeSource.SetPoint1(50.0, -50.0, 0.0)&lt;br /&gt;
planeSource.SetPoint2(-50.0, 50.0, 0.0)&lt;br /&gt;
model = slicer.modules.models.logic().AddModel(planeSource.GetOutputPort())&lt;br /&gt;
&lt;br /&gt;
# Tune display properties&lt;br /&gt;
modelDisplay = model.GetDisplayNode()&lt;br /&gt;
modelDisplay.SetColor(1,1,0) # yellow&lt;br /&gt;
modelDisplay.SetBackfaceCulling(0)&lt;br /&gt;
&lt;br /&gt;
# Add texture (just use image of an ellipsoid)&lt;br /&gt;
e = vtk.vtkImageEllipsoidSource()&lt;br /&gt;
modelDisplay.SetTextureImageDataConnection(e.GetOutputPort())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get scalar values at surface of a model==&lt;br /&gt;
&lt;br /&gt;
The following script allows getting selected scalar value at a selected position of a model. Position can be selected by moving the mouse while holding down Shift key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
modelNode = getNode('sphere')&lt;br /&gt;
modelPointValues = modelNode.GetPolyData().GetPointData().GetArray(&amp;quot;Normals&amp;quot;)&lt;br /&gt;
markupsNode = slicer.mrmlScene.GetFirstNodeByName('F')&lt;br /&gt;
&lt;br /&gt;
if not markupsNode:&lt;br /&gt;
  markupsNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLMarkupsFiducialNode&amp;quot;,&amp;quot;F&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
pointsLocator = vtk.vtkPointLocator() # could try using vtk.vtkStaticPointLocator() if need to optimize&lt;br /&gt;
pointsLocator.SetDataSet(modelNode.GetPolyData())&lt;br /&gt;
pointsLocator.BuildLocator()&lt;br /&gt;
&lt;br /&gt;
def onMouseMoved(observer,eventid):  &lt;br /&gt;
  ras=[0,0,0]&lt;br /&gt;
  crosshairNode.GetCursorPositionRAS(ras)&lt;br /&gt;
  if markupsNode.GetNumberOfFiducials() == 0:&lt;br /&gt;
    markupsNode.AddFiducial(*ras)&lt;br /&gt;
  else:&lt;br /&gt;
    markupsNode.SetNthFiducialPosition(0,*ras)&lt;br /&gt;
  closestPointId = pointsLocator.FindClosestPoint(ras)&lt;br /&gt;
  closestPointValue = modelPointValues.GetTuple(closestPointId)&lt;br /&gt;
  print(&amp;quot;RAS = &amp;quot; + repr(ras) + &amp;quot;    value = &amp;quot; + repr(closestPointValue))&lt;br /&gt;
&lt;br /&gt;
crosshairNode=slicer.util.getNode('Crosshair') &lt;br /&gt;
observationId = crosshairNode.AddObserver(slicer.vtkMRMLCrosshairNode.CursorPositionModifiedEvent, onMouseMoved)&lt;br /&gt;
&lt;br /&gt;
# To stop printing of values run this:&lt;br /&gt;
# crosshairNode.RemoveObserver(observationId)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Select cells of a model using markups fiducial points==&lt;br /&gt;
&lt;br /&gt;
The following script selects cells of a model node that are closest to positions of markups fiducial points.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Get input nodes&lt;br /&gt;
modelNode = slicer.util.getNode('Segment_1') # select cells in this model&lt;br /&gt;
markupsNode = slicer.util.getNode('F') # points will be selected at positions specified by this markups fiducial node&lt;br /&gt;
&lt;br /&gt;
# Create scalar array that will store selection state&lt;br /&gt;
cellScalars = modelNode.GetMesh().GetCellData()&lt;br /&gt;
selectionArray = cellScalars.GetArray('selection')&lt;br /&gt;
if not selectionArray:&lt;br /&gt;
    selectionArray = vtk.vtkIntArray()&lt;br /&gt;
    selectionArray.SetName('selection')&lt;br /&gt;
    selectionArray.SetNumberOfValues(modelNode.GetMesh().GetNumberOfCells())&lt;br /&gt;
    selectionArray.Fill(0)&lt;br /&gt;
    cellScalars.AddArray(selectionArray)&lt;br /&gt;
&lt;br /&gt;
# Set up coloring by selection array&lt;br /&gt;
modelNode.GetDisplayNode().SetActiveScalar(&amp;quot;selection&amp;quot;, vtk.vtkAssignAttribute.CELL_DATA)&lt;br /&gt;
modelNode.GetDisplayNode().SetAndObserveColorNodeID(&amp;quot;vtkMRMLColorTableNodeWarm1&amp;quot;)&lt;br /&gt;
modelNode.GetDisplayNode().SetScalarVisibility(True)&lt;br /&gt;
&lt;br /&gt;
# Initialize cell locator&lt;br /&gt;
cell = vtk.vtkCellLocator()&lt;br /&gt;
cell.SetDataSet(modelNode.GetMesh())&lt;br /&gt;
cell.BuildLocator()&lt;br /&gt;
&lt;br /&gt;
def onPointsModified(observer=None, eventid=None):&lt;br /&gt;
    global markupsNode, selectionArray&lt;br /&gt;
    selectionArray.Fill(0) # set all cells to non-selected by default&lt;br /&gt;
    markupPoints = slicer.util.arrayFromMarkupsControlPoints(markupsNode)&lt;br /&gt;
    closestPoint = [0.0, 0.0, 0.0]&lt;br /&gt;
    cellObj = vtk.vtkGenericCell()&lt;br /&gt;
    cellId = vtk.mutable(0)&lt;br /&gt;
    subId = vtk.mutable(0)&lt;br /&gt;
    dist2 = vtk.mutable(0.0)&lt;br /&gt;
    for markupPoint in markupPoints:&lt;br /&gt;
        cell.FindClosestPoint(markupPoint, closestPoint, cellObj, cellId, subId, dist2)&lt;br /&gt;
        closestCell = cellId.get()&lt;br /&gt;
        if closestCell &amp;gt;=0:&lt;br /&gt;
            selectionArray.SetValue(closestCell, 100) # set selected cell's scalar value to non-zero&lt;br /&gt;
    selectionArray.Modified()&lt;br /&gt;
&lt;br /&gt;
# Initial update&lt;br /&gt;
onPointsModified()&lt;br /&gt;
# Automatic update each time when a markup point is modified&lt;br /&gt;
markupsNodeObserverTag = markupsNode.AddObserver(slicer.vtkMRMLMarkupsFiducialNode.PointModifiedEvent, onPointsModified)&lt;br /&gt;
&lt;br /&gt;
# To stop updating selection, run this:&lt;br /&gt;
# markupsNode.RemoveObserver(markupsNodeObserverTag)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Load volume from .vti file==&lt;br /&gt;
&lt;br /&gt;
Slicer does not provide reader for VTK XML image data file format (as they are not commonly used for storing medical images and they cannot store image axis directions) but such files can be read by using this script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
reader=vtk.vtkXMLImageDataReader()&lt;br /&gt;
reader.SetFileName(&amp;quot;/path/to/file.vti&amp;quot;)&lt;br /&gt;
reader.Update()&lt;br /&gt;
imageData = reader.GetOutput()&lt;br /&gt;
spacing = imageData.GetSpacing()&lt;br /&gt;
origin = imageData.GetOrigin()&lt;br /&gt;
imageData.SetOrigin(0,0,0)&lt;br /&gt;
imageData.SetSpacing(1,1,1)&lt;br /&gt;
volumeNode=slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLScalarVolumeNode&amp;quot;)&lt;br /&gt;
volumeNode.SetAndObserveImageData(imageData)&lt;br /&gt;
volumeNode.SetSpacing(spacing)&lt;br /&gt;
volumeNode.SetOrigin(origin)&lt;br /&gt;
slicer.util.setSliceViewerLayers(volumeNode, fit=True)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Export entire scene as VRML==&lt;br /&gt;
&lt;br /&gt;
Save all surface meshes displayed in the scene (models, markups, etc). Solid colors and coloring by scalar is preserved. Textures are not supported.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
exporter = vtk.vtkVRMLExporter()&lt;br /&gt;
exporter.SetRenderWindow(slicer.app.layoutManager().threeDWidget(0).threeDView().renderWindow())&lt;br /&gt;
exporter.SetFileName('C:/tmp/something.wrl')&lt;br /&gt;
exporter.Write()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Export model to Blender, including color by scalar==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
modelNode = getNode(&amp;quot;Model&amp;quot;)&lt;br /&gt;
plyFilePath = &amp;quot;c:/tmp/model.ply&amp;quot;&lt;br /&gt;
&lt;br /&gt;
modelDisplayNode = modelNode.GetDisplayNode()&lt;br /&gt;
triangles = vtk.vtkTriangleFilter()&lt;br /&gt;
triangles.SetInputConnection(modelDisplayNode.GetOutputPolyDataConnection())&lt;br /&gt;
&lt;br /&gt;
plyWriter = vtk.vtkPLYWriter()&lt;br /&gt;
plyWriter.SetInputConnection(triangles.GetOutputPort())&lt;br /&gt;
lut = vtk.vtkLookupTable()&lt;br /&gt;
lut.DeepCopy(modelDisplayNode.GetColorNode().GetLookupTable())&lt;br /&gt;
lut.SetRange(modelDisplayNode.GetScalarRange())&lt;br /&gt;
plyWriter.SetLookupTable(lut)&lt;br /&gt;
plyWriter.SetArrayName(modelDisplayNode.GetActiveScalarName())&lt;br /&gt;
&lt;br /&gt;
plyWriter.SetFileName(plyFilePath)&lt;br /&gt;
plyWriter.Write()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Export a tract (FiberBundle) to Blender, including color==&lt;br /&gt;
&amp;lt;div id=&amp;quot;Export_a_fiber_tracts_to_Blender.2C_including_color&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Note: an interactive version of this script is now included in the [http://dmri.slicer.org/ SlicerDMRI extension] ([https://github.com/SlicerDMRI/SlicerDMRI/tree/master/Modules/Scripted/TractographyExportPLY module code]). &lt;br /&gt;
After installing SlicerDMRI, go to ''Modules -&amp;gt; Diffusion -&amp;gt; Import and Export -&amp;gt; Export tractography to PLY (mesh)''.&lt;br /&gt;
&lt;br /&gt;
The example below shows how to export a tractography &amp;quot;FiberBundleNode&amp;quot; to a PLY file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lineDisplayNode = getNode(&amp;quot;*LineDisplay*&amp;quot;)&lt;br /&gt;
plyFilePath = &amp;quot;/tmp/fibers.ply&amp;quot;&lt;br /&gt;
&lt;br /&gt;
tuber = vtk.vtkTubeFilter()&lt;br /&gt;
tuber.SetInputData(lineDisplayNode.GetOutputPolyData())&lt;br /&gt;
tuber.Update()&lt;br /&gt;
tubes = tuber.GetOutputDataObject(0)&lt;br /&gt;
scalars = tubes.GetPointData().GetArray(0)&lt;br /&gt;
scalars.SetName(&amp;quot;scalars&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
triangles = vtk.vtkTriangleFilter()&lt;br /&gt;
triangles.SetInputData(tubes)&lt;br /&gt;
triangles.Update()&lt;br /&gt;
&lt;br /&gt;
colorNode = lineDisplayNode.GetColorNode()&lt;br /&gt;
lookupTable = vtk.vtkLookupTable()&lt;br /&gt;
lookupTable.DeepCopy(colorNode.GetLookupTable())&lt;br /&gt;
lookupTable.SetTableRange(0,1)&lt;br /&gt;
&lt;br /&gt;
plyWriter = vtk.vtkPLYWriter()&lt;br /&gt;
plyWriter.SetInputData(triangles.GetOutput())&lt;br /&gt;
plyWriter.SetLookupTable(lookupTable)&lt;br /&gt;
plyWriter.SetArrayName(&amp;quot;scalars&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
plyWriter.SetFileName(plyFilePath)&lt;br /&gt;
plyWriter.Write()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Iterate over tract (FiberBundle) streamline points==&lt;br /&gt;
&lt;br /&gt;
This example shows how to access the points in each line of a FiberBundle as a numpy array (view).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from vtk.util.numpy_support import vtk_to_numpy&lt;br /&gt;
&lt;br /&gt;
fb = getNode(&amp;quot;FiberBundle_F&amp;quot;) # &amp;lt;- fill in node ID here&lt;br /&gt;
&lt;br /&gt;
# get point data as 1d array&lt;br /&gt;
points = slicer.util.arrayFromModelPoints(fb)&lt;br /&gt;
&lt;br /&gt;
# get line cell ids as 1d array&lt;br /&gt;
line_ids = vtk_to_numpy(fb.GetPolyData().GetLines().GetData())&lt;br /&gt;
&lt;br /&gt;
# VTK cell ids are stored as&lt;br /&gt;
#   [ N0 c0_id0 ... c0_id0&lt;br /&gt;
#     N1 c1_id0 ... c1_idN1 ]&lt;br /&gt;
# so we need to&lt;br /&gt;
# - read point count for each line (cell)&lt;br /&gt;
# - grab the ids in that range from `line_ids` array defined above&lt;br /&gt;
# - index the `points` array by those ids&lt;br /&gt;
cur_idx = 1&lt;br /&gt;
for _ in range(pd.GetLines().GetNumberOfCells()):&lt;br /&gt;
    # - read point count for this line (cell)&lt;br /&gt;
    count = lines[cur_idx - 1]&lt;br /&gt;
&lt;br /&gt;
    # - grab the ids in that range from `lines`&lt;br /&gt;
    index_array = line_ids[ cur_idx : cur_idx + count]&lt;br /&gt;
    # update to the next range &lt;br /&gt;
    cur_idx += count + 1&lt;br /&gt;
&lt;br /&gt;
    # - index the point array by those ids&lt;br /&gt;
    line_points = points[index_array]&lt;br /&gt;
&lt;br /&gt;
    # do work here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Clone a node==&lt;br /&gt;
&lt;br /&gt;
This example shows how to make a copy of any node that appears in Subject Hierarchy (in Data module).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Get a node from SampleData that we will clone&lt;br /&gt;
import SampleData&lt;br /&gt;
nodeToClone = SampleData.SampleDataLogic().downloadMRHead()&lt;br /&gt;
&lt;br /&gt;
# Clone the node&lt;br /&gt;
shNode = slicer.vtkMRMLSubjectHierarchyNode.GetSubjectHierarchyNode(slicer.mrmlScene)&lt;br /&gt;
itemIDToClone = shNode.GetItemByDataNode(nodeToClone)&lt;br /&gt;
clonedItemID = slicer.modules.subjecthierarchy.logic().CloneSubjectHierarchyItem(shNode, itemIDToClone)&lt;br /&gt;
clonedNode = shNode.GetItemDataNode(clonedItemID)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Clone a volume==&lt;br /&gt;
This example shows how to clone the MRHead sample volume, including its pixel data and display settings.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sourceVolumeNode = slicer.util.getNode('MRHead')&lt;br /&gt;
volumesLogic = slicer.modules.volumes.logic()&lt;br /&gt;
clonedVolumeNode = volumesLogic.CloneVolume(slicer.mrmlScene, sourceVolumeNode, 'Cloned volume')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Create a new volume==&lt;br /&gt;
This example shows how to create a new empty volume.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nodeName = &amp;quot;MyNewVolume&amp;quot;&lt;br /&gt;
imageSize = [512, 512, 512]&lt;br /&gt;
voxelType=vtk.VTK_UNSIGNED_CHAR&lt;br /&gt;
imageOrigin = [0.0, 0.0, 0.0]&lt;br /&gt;
imageSpacing = [1.0, 1.0, 1.0]&lt;br /&gt;
imageDirections = [[1,0,0], [0,1,0], [0,0,1]]&lt;br /&gt;
fillVoxelValue = 0&lt;br /&gt;
&lt;br /&gt;
# Create an empty image volume, filled with fillVoxelValue&lt;br /&gt;
imageData = vtk.vtkImageData()&lt;br /&gt;
imageData.SetDimensions(imageSize)&lt;br /&gt;
imageData.AllocateScalars(voxelType, 1)&lt;br /&gt;
imageData.GetPointData().GetScalars().Fill(fillVoxelValue)&lt;br /&gt;
# Create volume node&lt;br /&gt;
volumeNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLScalarVolumeNode&amp;quot;, nodeName)&lt;br /&gt;
volumeNode.SetOrigin(imageOrigin)&lt;br /&gt;
volumeNode.SetSpacing(imageSpacing)&lt;br /&gt;
volumeNode.SetIJKToRASDirections(imageDirections)&lt;br /&gt;
volumeNode.SetAndObserveImageData(imageData)&lt;br /&gt;
volumeNode.CreateDefaultDisplayNodes()&lt;br /&gt;
volumeNode.CreateDefaultStorageNode()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get value of a volume at specific voxel coordinates==&lt;br /&gt;
&lt;br /&gt;
This example shows how to get voxel value of &amp;quot;volumeNode&amp;quot; at &amp;quot;ijk&amp;quot; volume voxel coordinates.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
volumeNode = slicer.util.getNode('MRHead')&lt;br /&gt;
ijk = [20,40,30]  # volume voxel coordinates&lt;br /&gt;
&lt;br /&gt;
voxels = slicer.util.arrayFromVolume(volumeNode)  # get voxels as a numpy array&lt;br /&gt;
voxelValue = voxels[ijk[2], ijk[1], ijk[0]]  # note that numpy array index order is kji (not ijk)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Modify voxels in a volume==&lt;br /&gt;
&lt;br /&gt;
Typically the fastest and simplest way of modifying voxels is by using numpy operators. Voxels can be retrieved in a numpy array using the `array` method and modified using standard numpy methods. For example, threshold a volume:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nodeName = 'MRHead'&lt;br /&gt;
thresholdValue = 100&lt;br /&gt;
voxelArray = array(nodeName) # get voxels as numpy array&lt;br /&gt;
voxelArray[voxelArray &amp;lt; thresholdValue] = 0 # modify voxel values&lt;br /&gt;
getNode(nodeName).Modified() # at the end of all processing, notify Slicer that the image modification is completed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This example shows how to change voxels values of the MRHead sample volume.&lt;br /&gt;
The values will be computed by function f(r,a,s,) = (r-10)*(r-10)+(a+15)*(a+15)+s*s.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
volumeNode=slicer.util.getNode('MRHead')&lt;br /&gt;
ijkToRas = vtk.vtkMatrix4x4()&lt;br /&gt;
volumeNode.GetIJKToRASMatrix(ijkToRas)&lt;br /&gt;
imageData=volumeNode.GetImageData()&lt;br /&gt;
extent = imageData.GetExtent()&lt;br /&gt;
for k in range(extent[4], extent[5]+1):&lt;br /&gt;
  for j in range(extent[2], extent[3]+1):&lt;br /&gt;
    for i in range(extent[0], extent[1]+1):&lt;br /&gt;
      position_Ijk=[i, j, k, 1]&lt;br /&gt;
      position_Ras=ijkToRas.MultiplyPoint(position_Ijk)&lt;br /&gt;
      r=position_Ras[0]&lt;br /&gt;
      a=position_Ras[1]&lt;br /&gt;
      s=position_Ras[2]      &lt;br /&gt;
      functionValue=(r-10)*(r-10)+(a+15)*(a+15)+s*s&lt;br /&gt;
      imageData.SetScalarComponentFromDouble(i,j,k,0,functionValue)&lt;br /&gt;
imageData.Modified()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get volume voxel coordinates from markup fiducial RAS coordinates==&lt;br /&gt;
&lt;br /&gt;
This example shows how to get voxel coordinate of a volume corresponding to a markup fiducial point position.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Inputs&lt;br /&gt;
volumeNode = getNode('MRHead')&lt;br /&gt;
markupsNode = getNode('F')&lt;br /&gt;
markupsIndex = 0&lt;br /&gt;
&lt;br /&gt;
# Get point coordinate in RAS&lt;br /&gt;
point_Ras = [0, 0, 0, 1]&lt;br /&gt;
markupsNode.GetNthFiducialWorldCoordinates(markupsIndex, point_Ras)&lt;br /&gt;
&lt;br /&gt;
# If volume node is transformed, apply that transform to get volume's RAS coordinates&lt;br /&gt;
transformRasToVolumeRas = vtk.vtkGeneralTransform()&lt;br /&gt;
slicer.vtkMRMLTransformNode.GetTransformBetweenNodes(None, volumeNode.GetParentTransformNode(), transformRasToVolumeRas)&lt;br /&gt;
point_VolumeRas = transformRasToVolumeRas.TransformPoint(point_Ras[0:3])&lt;br /&gt;
&lt;br /&gt;
# Get voxel coordinates from physical coordinates&lt;br /&gt;
volumeRasToIjk = vtk.vtkMatrix4x4()&lt;br /&gt;
volumeNode.GetRASToIJKMatrix(volumeRasToIjk)&lt;br /&gt;
point_Ijk = [0, 0, 0, 1]&lt;br /&gt;
volumeRasToIjk.MultiplyPoint(np.append(point_VolumeRas,1.0), point_Ijk)&lt;br /&gt;
point_Ijk = [ int(round(c)) for c in point_Ijk[0:3] ]&lt;br /&gt;
&lt;br /&gt;
# Print output&lt;br /&gt;
print(point_Ijk)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get markup fiducial RAS coordinates from volume voxel coordinates==&lt;br /&gt;
&lt;br /&gt;
This example shows how to get position of maximum intensity voxel of a volume (determined by numpy, in IJK coordinates) in RAS coordinates so that it can be marked with a markup fiducial.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Inputs&lt;br /&gt;
volumeNode = getNode('MRHead')&lt;br /&gt;
markupsNode = getNode('F')&lt;br /&gt;
&lt;br /&gt;
# Get voxel position in IJK coordinate system&lt;br /&gt;
import numpy as np&lt;br /&gt;
volumeArray = slicer.util.arrayFromVolume(volumeNode)&lt;br /&gt;
# Get position of highest voxel value&lt;br /&gt;
point_Kji = np.where(volumeArray == volumeArray.max())&lt;br /&gt;
point_Ijk = [point_Kji[2][0], point_Kji[1][0], point_Kji[0][0]]&lt;br /&gt;
&lt;br /&gt;
# Get physical coordinates from voxel coordinates&lt;br /&gt;
volumeIjkToRas = vtk.vtkMatrix4x4()&lt;br /&gt;
volumeNode.GetIJKToRASMatrix(volumeIjkToRas)&lt;br /&gt;
point_VolumeRas = [0, 0, 0, 1]&lt;br /&gt;
volumeIjkToRas.MultiplyPoint(np.append(point_Ijk,1.0), point_VolumeRas)&lt;br /&gt;
&lt;br /&gt;
# If volume node is transformed, apply that transform to get volume's RAS coordinates&lt;br /&gt;
transformVolumeRasToRas = vtk.vtkGeneralTransform()&lt;br /&gt;
slicer.vtkMRMLTransformNode.GetTransformBetweenNodes(volumeNode.GetParentTransformNode(), None, transformVolumeRasToRas)&lt;br /&gt;
point_Ras = transformVolumeRasToRas.TransformPoint(point_VolumeRas[0:3])&lt;br /&gt;
&lt;br /&gt;
# Add a markup at the computed position and print its coordinates&lt;br /&gt;
markupsNode.AddFiducial(point_Ras[0], point_Ras[1], point_Ras[2], &amp;quot;max&amp;quot;)&lt;br /&gt;
print(point_Ras)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get the values of all voxels for a label value==&lt;br /&gt;
&lt;br /&gt;
If you have a background image called ‘Volume’ and a mask called ‘Volume-label’ created with the Editor you could do something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import numpy&lt;br /&gt;
volume = array('Volume')&lt;br /&gt;
label = array('Volume-label')&lt;br /&gt;
points  = numpy.where( label == 1 )  # or use another label number depending on what you segmented&lt;br /&gt;
values  = volume[points] # this will be a list of the label values&lt;br /&gt;
values.mean() # should match the mean value of LabelStatistics calculation as a double-check&lt;br /&gt;
numpy.savetxt('values.txt', values)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Access values in a DTI tensor volume==&lt;br /&gt;
This example shows how to access individual tensors at the voxel level.&lt;br /&gt;
&lt;br /&gt;
First load your DWI volume and estimate tensors to produce a DTI volume called ‘Output DTI Volume’&lt;br /&gt;
&lt;br /&gt;
Then open the python window: View-&amp;gt;Python interactor&lt;br /&gt;
&lt;br /&gt;
Use this command to access tensors through numpy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tensors = array('Output DTI Volume')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Type the following code into the Python window to access all tensor components using vtk commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
volumeNode=slicer.util.getNode('Output DTI Volume')&lt;br /&gt;
imageData=volumeNode.GetImageData()&lt;br /&gt;
tensors = imageData.GetPointData().GetTensors()&lt;br /&gt;
extent = imageData.GetExtent()&lt;br /&gt;
idx = 0&lt;br /&gt;
for k in range(extent[4], extent[5]+1):&lt;br /&gt;
  for j in range(extent[2], extent[3]+1):&lt;br /&gt;
    for i in range(extent[0], extent[1]+1):&lt;br /&gt;
      tensors.GetTuple9(idx)&lt;br /&gt;
      idx += 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Change window/level (brightness/contrast) or colormap of a volume==&lt;br /&gt;
This example shows how to change window/level of the MRHead sample volume.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
volumeNode = getNode('MRHead')&lt;br /&gt;
displayNode = volumeNode.GetDisplayNode()&lt;br /&gt;
displayNode.AutoWindowLevelOff()&lt;br /&gt;
displayNode.SetWindow(50)&lt;br /&gt;
displayNode.SetLevel(100)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change color mapping from grayscale to rainbow:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
displayNode.SetAndObserveColorNodeID('vtkMRMLColorTableNodeRainbow')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Make mouse left-click and drag on the image adjust window/level==&lt;br /&gt;
&lt;br /&gt;
In older Slicer versions, by default, left-click and drag in a slice view adjusted window/level of the displayed image. Window/level adjustment is now a new mouse mode that can be activated by clicking on its toolbar button or running this code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicer.app.applicationLogic().GetInteractionNode().SetCurrentInteractionMode(slicer.vtkMRMLInteractionNode.AdjustWindowLevel)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Create custom color table==&lt;br /&gt;
This example shows how to create a new color table, for example with inverted color range from the default Ocean color table.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
invertedocean = slicer.vtkMRMLColorTableNode()&lt;br /&gt;
invertedocean.SetTypeToUser()&lt;br /&gt;
invertedocean.SetNumberOfColors(256)&lt;br /&gt;
invertedocean.SetName(&amp;quot;InvertedOcean&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
for i in range(0,255):&lt;br /&gt;
    invertedocean.SetColor(i, 0.0, 1 - (i+1e-16)/255.0, 1.0, 1.0)&lt;br /&gt;
&lt;br /&gt;
slicer.mrmlScene.AddNode(invertedocean)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Manipulate a Slice View==&lt;br /&gt;
&lt;br /&gt;
===Change slice offset===&lt;br /&gt;
&lt;br /&gt;
Equivalent to moving the slider in slice view controller.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
layoutManager = slicer.app.layoutManager()&lt;br /&gt;
red = layoutManager.sliceWidget('Red')&lt;br /&gt;
redLogic = red.sliceLogic()&lt;br /&gt;
# Print current slice offset position&lt;br /&gt;
print(redLogic.GetSliceOffset())&lt;br /&gt;
# Change slice position&lt;br /&gt;
redLogic.SetSliceOffset(20)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Change slice orientation===&lt;br /&gt;
&lt;br /&gt;
Get 'Red' slice node and rotate around X and Y axes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sliceNode = slicer.app.layoutManager().sliceWidget('Red').mrmlSliceNode()&lt;br /&gt;
sliceToRas = sliceNode.GetSliceToRAS()&lt;br /&gt;
transform=vtk.vtkTransform()&lt;br /&gt;
transform.SetMatrix(SliceToRAS)&lt;br /&gt;
transform.RotateX(20)&lt;br /&gt;
transform.RotateY(15)&lt;br /&gt;
sliceToRas.DeepCopy(transform.GetMatrix())&lt;br /&gt;
sliceNode.UpdateMatrices()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Show slice views in 3D window===&lt;br /&gt;
&lt;br /&gt;
Equivalent to clicking 'eye' icon in the slice view controller.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
layoutManager = slicer.app.layoutManager()&lt;br /&gt;
for sliceViewName in layoutManager.sliceViewNames():&lt;br /&gt;
  controller = layoutManager.sliceWidget(sliceViewName).sliceController()&lt;br /&gt;
  controller.setSliceVisible(True)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Reset field of view to show background volume maximized===&lt;br /&gt;
&lt;br /&gt;
Equivalent to click small rectangle button (&amp;quot;Adjust the slice viewer's field of view...&amp;quot;) in the slice view controller.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicer.util.resetSliceViews()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Rotate slice views to volume plane===&lt;br /&gt;
&lt;br /&gt;
Aligns slice views to volume axes, shows original image acquisition planes in slice views.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
volumeNode = slicer.util.getNode('MRHead')&lt;br /&gt;
layoutManager = slicer.app.layoutManager()&lt;br /&gt;
for sliceViewName in layoutManager.sliceViewNames():&lt;br /&gt;
  layoutManager.sliceWidget(sliceViewName).mrmlSliceNode().RotateToVolumePlane(volumeNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Iterate over current visible slice views, and set foreground and background images===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicer.util.setSliceViewerLayers(background=mrVolume, foreground=ctVolume)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Internally, this method performs something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
layoutManager = slicer.app.layoutManager()&lt;br /&gt;
for sliceViewName in layoutManager.sliceViewNames():&lt;br /&gt;
     compositeNode = layoutManager.sliceWidget(sliceViewName).sliceLogic().GetSliceCompositeNode()&lt;br /&gt;
     # setup background volume&lt;br /&gt;
     compositeNode.SetBackgroundVolumeID(mrVolume.GetID())&lt;br /&gt;
     # setup foreground volume&lt;br /&gt;
     compositeNode.SetForegroundVolumeID(ctVolume.GetID())&lt;br /&gt;
     # change opacity&lt;br /&gt;
     compositeNode.SetForegroundOpacity(0.3)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Show a volume in slice views==&lt;br /&gt;
&lt;br /&gt;
Recommended:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
volumeNode = slicer.util.getNode('YourVolumeNode')&lt;br /&gt;
slicer.util.setSliceViewerLayers(background=volumeNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
Show volume in all visible views where volume selection propagation is enabled:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
volumeNode = slicer.util.getNode('YourVolumeNode')&lt;br /&gt;
applicationLogic = slicer.app.applicationLogic()&lt;br /&gt;
selectionNode = applicationLogic.GetSelectionNode()&lt;br /&gt;
selectionNode.SetSecondaryVolumeID(volumeNode.GetID())&lt;br /&gt;
applicationLogic.PropagateForegroundVolumeSelection(0) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
Show volume in selected views:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n =  slicer.util.getNode('YourVolumeNode')&lt;br /&gt;
for color in ['Red', 'Yellow', 'Green']:&lt;br /&gt;
    slicer.app.layoutManager().sliceWidget(color).sliceLogic().GetSliceCompositeNode().SetForegroundVolumeID(n.GetID())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Show comparison view of all model files a folder==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Inputs&lt;br /&gt;
modelDir = &amp;quot;c:/some/folder/containing/models&amp;quot;&lt;br /&gt;
modelFileExt = &amp;quot;stl&amp;quot;&lt;br /&gt;
numberOfColumns = 4&lt;br /&gt;
&lt;br /&gt;
import math&lt;br /&gt;
import os&lt;br /&gt;
modelFiles = list(f for f in os.listdir(modelDir) if f.endswith('.' + modelFileExt))&lt;br /&gt;
&lt;br /&gt;
# Create a custom layout&lt;br /&gt;
numberOfRows = int(math.ceil(len(modelFiles)/numberOfColumns))&lt;br /&gt;
customLayoutId=567  # we pick a random id that is not used by others&lt;br /&gt;
slicer.app.setRenderPaused(True)&lt;br /&gt;
customLayout = '&amp;lt;layout type=&amp;quot;vertical&amp;quot;&amp;gt;'&lt;br /&gt;
viewIndex = 0&lt;br /&gt;
for rowIndex in range(numberOfRows):&lt;br /&gt;
  customLayout += '&amp;lt;item&amp;gt;&amp;lt;layout type=&amp;quot;horizontal&amp;quot;&amp;gt;'&lt;br /&gt;
  for colIndex in range(numberOfColumns):&lt;br /&gt;
    name = os.path.basename(modelFiles[viewIndex]) if viewIndex &amp;lt; len(modelFiles) else &amp;quot;compare &amp;quot;+str(viewIndex)&lt;br /&gt;
    customLayout += '&amp;lt;item&amp;gt;&amp;lt;view class=&amp;quot;vtkMRMLViewNode&amp;quot; singletontag=&amp;quot;'+name&lt;br /&gt;
    customLayout += '&amp;quot;&amp;gt;&amp;lt;property name=&amp;quot;viewlabel&amp;quot; action=&amp;quot;default&amp;quot;&amp;gt;'+name+'&amp;lt;/property&amp;gt;&amp;lt;/view&amp;gt;&amp;lt;/item&amp;gt;'&lt;br /&gt;
    viewIndex += 1&lt;br /&gt;
  customLayout += '&amp;lt;/layout&amp;gt;&amp;lt;/item&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
customLayout += '&amp;lt;/layout&amp;gt;'&lt;br /&gt;
if not slicer.app.layoutManager().layoutLogic().GetLayoutNode().SetLayoutDescription(customLayoutId, customLayout):&lt;br /&gt;
    slicer.app.layoutManager().layoutLogic().GetLayoutNode().AddLayoutDescription(customLayoutId, customLayout)&lt;br /&gt;
&lt;br /&gt;
slicer.app.layoutManager().setLayout(customLayoutId)&lt;br /&gt;
&lt;br /&gt;
# Load and show each model in a view&lt;br /&gt;
for modelIndex, modelFile in enumerate(modelFiles):&lt;br /&gt;
    # Show only one model in each view&lt;br /&gt;
    name = os.path.basename(modelFile)&lt;br /&gt;
    viewNode = slicer.mrmlScene.GetSingletonNode(name, &amp;quot;vtkMRMLViewNode&amp;quot;)&lt;br /&gt;
    viewNode.LinkedControlOn()&lt;br /&gt;
    modelNode = slicer.util.loadModel(modelDir+&amp;quot;/&amp;quot;+modelFile)&lt;br /&gt;
    modelNode.GetDisplayNode().AddViewNodeID(viewNode.GetID())&lt;br /&gt;
&lt;br /&gt;
slicer.app.setRenderPaused(False)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Change opacity of foreground volume in slice views==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicer.util.setSliceViewerLayers(foregroundOpacity=0.4)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
Change opacity in a selected view&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lm = slicer.app.layoutManager()&lt;br /&gt;
sliceLogic = lm.sliceWidget('Red').sliceLogic()&lt;br /&gt;
compositeNode = sliceLogic.GetSliceCompositeNode()&lt;br /&gt;
compositeNode.SetForegroundOpacity(0.4)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fit slice plane to markup fiducials==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sliceNode = slicer.mrmlScene.GetNodeByID(&amp;quot;vtkMRMLSliceNodeRed&amp;quot;)&lt;br /&gt;
markupsNode = slicer.mrmlScene.GetFirstNodeByName(&amp;quot;F&amp;quot;)&lt;br /&gt;
# Get markup point positions as numpy arrays&lt;br /&gt;
import numpy as np&lt;br /&gt;
p1 = np.zeros(3)&lt;br /&gt;
p2 = np.zeros(3)&lt;br /&gt;
p3 = np.zeros(3)&lt;br /&gt;
markupsNode.GetNthFiducialPosition(0, p1)&lt;br /&gt;
markupsNode.GetNthFiducialPosition(1, p2)&lt;br /&gt;
markupsNode.GetNthFiducialPosition(2, p3)&lt;br /&gt;
# Get plane axis directions&lt;br /&gt;
n = np.cross(p2-p1, p2-p3) # plane normal direction&lt;br /&gt;
n = n/np.linalg.norm(n)&lt;br /&gt;
t = np.cross([0.0, 0.0, 1], n) # plane transverse direction&lt;br /&gt;
t = t/np.linalg.norm(t)&lt;br /&gt;
# Set slice plane orientation and position&lt;br /&gt;
sliceNode.SetSliceToRASByNTP(n[0], n[1], n[2], t[0], t[1], t[2], p1[0], p1[1], p1[2], 0)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Save a series of images from a Slice View==&lt;br /&gt;
&lt;br /&gt;
You can use ScreenCapture module to capture series of images. To do it programmatically, save the following into a file such as '/tmp/record.py' and then in the slicer python console type &amp;quot;execfile('/tmp/record.py')&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
layoutName = 'Green'&lt;br /&gt;
imagePathPattern = '/tmp/image-%03d.png'&lt;br /&gt;
steps = 10&lt;br /&gt;
&lt;br /&gt;
widget = slicer.app.layoutManager().sliceWidget(layoutName)&lt;br /&gt;
view = widget.sliceView()&lt;br /&gt;
logic = widget.sliceLogic()&lt;br /&gt;
bounds = [0,]*6&lt;br /&gt;
logic.GetSliceBounds(bounds)&lt;br /&gt;
&lt;br /&gt;
for step in range(steps):&lt;br /&gt;
    offset = bounds[4] + step/(1.*steps) * (bounds[5]-bounds[4])&lt;br /&gt;
    logic.SetSliceOffset(offset)&lt;br /&gt;
    view.forceRender()&lt;br /&gt;
    image = qt.QPixmap.grabWidget(view).toImage()&lt;br /&gt;
    image.save(imagePathPattern % step)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Rasterize a model and save it to a series of image files==&lt;br /&gt;
&lt;br /&gt;
This example shows how to generate a stack of image files from an STL file:&lt;br /&gt;
&lt;br /&gt;
 inputModelFile = &amp;quot;/some/input/folder/SomeShape.stl&amp;quot;&lt;br /&gt;
 outputDir = &amp;quot;/some/output/folder&amp;quot;&lt;br /&gt;
 outputVolumeLabelValue = 100&lt;br /&gt;
 outputVolumeSpacingMm = [0.5, 0.5, 0.5]&lt;br /&gt;
 outputVolumeMarginMm = [10.0, 10.0, 10.0]&lt;br /&gt;
 &lt;br /&gt;
 # Read model&lt;br /&gt;
 inputModel = slicer.util.loadModel(inputModelFile)&lt;br /&gt;
 &lt;br /&gt;
 # Determine output volume geometry and create a corresponding reference volume&lt;br /&gt;
 import math&lt;br /&gt;
 import numpy as np&lt;br /&gt;
 bounds = np.zeros(6)&lt;br /&gt;
 inputModel.GetBounds(bounds)&lt;br /&gt;
 imageData = vtk.vtkImageData()&lt;br /&gt;
 imageSize = [ int((bounds[axis*2+1]-bounds[axis*2]+outputVolumeMarginMm[axis]*2.0)/outputVolumeSpacingMm[axis]) for axis in range(3) ]&lt;br /&gt;
 imageOrigin = [ bounds[axis*2]-outputVolumeMarginMm[axis] for axis in range(3) ]&lt;br /&gt;
 imageData.SetDimensions(imageSize)&lt;br /&gt;
 imageData.AllocateScalars(vtk.VTK_UNSIGNED_CHAR, 1)&lt;br /&gt;
 imageData.GetPointData().GetScalars().Fill(0)&lt;br /&gt;
 referenceVolumeNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLScalarVolumeNode&amp;quot;)&lt;br /&gt;
 referenceVolumeNode.SetOrigin(imageOrigin)&lt;br /&gt;
 referenceVolumeNode.SetSpacing(outputVolumeSpacingMm)&lt;br /&gt;
 referenceVolumeNode.SetAndObserveImageData(imageData)&lt;br /&gt;
 referenceVolumeNode.CreateDefaultDisplayNodes()&lt;br /&gt;
 &lt;br /&gt;
 # Convert model to labelmap&lt;br /&gt;
 seg = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLSegmentationNode')&lt;br /&gt;
 seg.SetReferenceImageGeometryParameterFromVolumeNode(referenceVolumeNode)&lt;br /&gt;
 slicer.modules.segmentations.logic().ImportModelToSegmentationNode(inputModel, seg)&lt;br /&gt;
 seg.CreateBinaryLabelmapRepresentation()&lt;br /&gt;
 outputLabelmapVolumeNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLLabelMapVolumeNode')&lt;br /&gt;
 slicer.modules.segmentations.logic().ExportVisibleSegmentsToLabelmapNode(seg, outputLabelmapVolumeNode, referenceVolumeNode)&lt;br /&gt;
 outputLabelmapVolumeArray = (slicer.util.arrayFromVolume(outputLabelmapVolumeNode) * outputVolumeLabelValue).astype('int8')&lt;br /&gt;
 &lt;br /&gt;
 # Write labelmap volume to series of TIFF files&lt;br /&gt;
 pip_install(&amp;quot;imageio&amp;quot;)&lt;br /&gt;
 import imageio&lt;br /&gt;
 for i in range(len(outputLabelmapVolumeArray)):&lt;br /&gt;
     imageio.imwrite(f'{outputDir}/image_{i:03}.tiff', outputLabelmapVolumeArray[i])&lt;br /&gt;
&lt;br /&gt;
==Save the scene into a new directory==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Create a new directory where the scene will be saved into&lt;br /&gt;
import time&lt;br /&gt;
sceneSaveDirectory = slicer.app.temporaryPath + &amp;quot;/saved-scene-&amp;quot; + time.strftime(&amp;quot;%Y%m%d-%H%M%S&amp;quot;)&lt;br /&gt;
if not os.access(sceneSaveDirectory, os.F_OK):&lt;br /&gt;
  os.makedirs(sceneSaveDirectory)&lt;br /&gt;
&lt;br /&gt;
# Save the scene&lt;br /&gt;
if slicer.app.applicationLogic().SaveSceneToSlicerDataBundleDirectory(sceneSaveDirectory, None):&lt;br /&gt;
  logging.info(&amp;quot;Scene saved to: {0}&amp;quot;.format(sceneSaveDirectory))&lt;br /&gt;
else:&lt;br /&gt;
  logging.error(&amp;quot;Scene saving failed&amp;quot;) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Save the scene into a single MRB file==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Generate file name&lt;br /&gt;
import time&lt;br /&gt;
sceneSaveFilename = slicer.app.temporaryPath + &amp;quot;/saved-scene-&amp;quot; + time.strftime(&amp;quot;%Y%m%d-%H%M%S&amp;quot;) + &amp;quot;.mrb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Save scene&lt;br /&gt;
if slicer.util.saveScene(sceneSaveFilename):&lt;br /&gt;
  logging.info(&amp;quot;Scene saved to: {0}&amp;quot;.format(sceneSaveFilename))&lt;br /&gt;
else:&lt;br /&gt;
  logging.error(&amp;quot;Scene saving failed&amp;quot;) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Save a node to file==&lt;br /&gt;
&lt;br /&gt;
Save a transform node to file (should work with any other node type, if file extension is set to a supported one):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
myNode = getNode(&amp;quot;LinearTransform_3&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
myStorageNode = myNode.CreateDefaultStorageNode()&lt;br /&gt;
myStorageNode.SetFileName(&amp;quot;c:/tmp/something.tfm&amp;quot;)&lt;br /&gt;
myStorageNode.WriteData(myNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Center the 3D View on the Scene==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
layoutManager = slicer.app.layoutManager()&lt;br /&gt;
threeDWidget = layoutManager.threeDWidget(0)&lt;br /&gt;
threeDView = threeDWidget.threeDView()&lt;br /&gt;
threeDView.resetFocalPoint()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Rotate the 3D View==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
layoutManager = slicer.app.layoutManager()&lt;br /&gt;
threeDWidget = layoutManager.threeDWidget(0)&lt;br /&gt;
threeDView = threeDWidget.threeDView()&lt;br /&gt;
threeDView.yaw()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Display text in a 3D view or slice view==&lt;br /&gt;
&lt;br /&gt;
The easiest way to show information overlaid on a viewer is to use corner annotations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
view=slicer.app.layoutManager().threeDWidget(0).threeDView()&lt;br /&gt;
# Set text to &amp;quot;Something&amp;quot;&lt;br /&gt;
view.cornerAnnotation().SetText(vtk.vtkCornerAnnotation.UpperRight,&amp;quot;Something&amp;quot;)&lt;br /&gt;
# Set color to red&lt;br /&gt;
view.cornerAnnotation().GetTextProperty().SetColor(1,0,0)&lt;br /&gt;
# Update the view&lt;br /&gt;
view.forceRender()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To display text in slice views, replace the first line by this line (and consider hiding slice view annotations, to prevent them from overwriting the text you place there):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
view=slicer.app.layoutManager().sliceWidget(&amp;quot;Red&amp;quot;).sliceView()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hide slice view annotations (DataProbe)==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Disable slice annotations immediately&lt;br /&gt;
slicer.modules.DataProbeInstance.infoWidget.sliceAnnotations.sliceViewAnnotationsEnabled=False&lt;br /&gt;
slicer.modules.DataProbeInstance.infoWidget.sliceAnnotations.updateSliceViewFromGUI()&lt;br /&gt;
# Disable slice annotations persistently (after Slicer restarts)&lt;br /&gt;
settings = qt.QSettings()&lt;br /&gt;
settings.setValue('DataProbe/sliceViewAnnotations.enabled', 0)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Turning off interpolation==&lt;br /&gt;
&lt;br /&gt;
You can turn off interpolation for newly loaded volumes with this script from Steve Pieper.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def NoInterpolate(caller,event):&lt;br /&gt;
  for node in slicer.util.getNodes('*').values():&lt;br /&gt;
    if node.IsA('vtkMRMLScalarVolumeDisplayNode'):&lt;br /&gt;
      node.SetInterpolate(0)&lt;br /&gt;
	&lt;br /&gt;
slicer.mrmlScene.AddObserver(slicer.mrmlScene.NodeAddedEvent, NoInterpolate)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The below link explains how to put this in your startup script.&lt;br /&gt;
&lt;br /&gt;
http://www.na-mic.org/Wiki/index.php/AHM2012-Slicer-Python#Refining_the_code_and_UI_with_slicerrc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Customize viewer layout==&lt;br /&gt;
&lt;br /&gt;
Show a custom layout of a 3D view on top of the red slice view:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
customLayout = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;layout type=&amp;quot;vertical&amp;quot; split=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;item&amp;gt;&lt;br /&gt;
   &amp;lt;view class=&amp;quot;vtkMRMLViewNode&amp;quot; singletontag=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;property name=&amp;quot;viewlabel&amp;quot; action=&amp;quot;default&amp;quot;&amp;gt;1&amp;lt;/property&amp;gt;&lt;br /&gt;
   &amp;lt;/view&amp;gt;&lt;br /&gt;
  &amp;lt;/item&amp;gt;&lt;br /&gt;
  &amp;lt;item&amp;gt;&lt;br /&gt;
   &amp;lt;view class=&amp;quot;vtkMRMLSliceNode&amp;quot; singletontag=&amp;quot;Red&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;property name=&amp;quot;orientation&amp;quot; action=&amp;quot;default&amp;quot;&amp;gt;Axial&amp;lt;/property&amp;gt;&lt;br /&gt;
    &amp;lt;property name=&amp;quot;viewlabel&amp;quot; action=&amp;quot;default&amp;quot;&amp;gt;R&amp;lt;/property&amp;gt;&lt;br /&gt;
    &amp;lt;property name=&amp;quot;viewcolor&amp;quot; action=&amp;quot;default&amp;quot;&amp;gt;#F34A33&amp;lt;/property&amp;gt;&lt;br /&gt;
   &amp;lt;/view&amp;gt;&lt;br /&gt;
  &amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/layout&amp;gt;&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Built-in layout IDs are all below 100, so you can choose any large random number&lt;br /&gt;
# for your custom layout ID.&lt;br /&gt;
customLayoutId=501&lt;br /&gt;
&lt;br /&gt;
layoutManager = slicer.app.layoutManager()&lt;br /&gt;
layoutManager.layoutLogic().GetLayoutNode().AddLayoutDescription(customLayoutId, customLayout)                                         &lt;br /&gt;
&lt;br /&gt;
# Switch to the new custom layout &lt;br /&gt;
layoutManager.setLayout(customLayoutId)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See description of standard layouts (that can be used as examples) here:&lt;br /&gt;
https://github.com/Slicer/Slicer/blob/master/Libs/MRML/Logic/vtkMRMLLayoutLogic.cxx&lt;br /&gt;
&lt;br /&gt;
You can use this code snippet to add a button to the layout selector toolbar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Add button to layout selector toolbar for this custom layout&lt;br /&gt;
viewToolBar = mainWindow().findChild('QToolBar', 'ViewToolBar')&lt;br /&gt;
layoutMenu = viewToolBar.widgetForAction(viewToolBar.actions()[0]).menu()&lt;br /&gt;
layoutSwitchActionParent = layoutMenu  # use `layoutMenu` to add inside layout list, use `viewToolBar` to add next the standard layout list&lt;br /&gt;
layoutSwitchAction = layoutSwitchActionParent.addAction(&amp;quot;My view&amp;quot;) # add inside layout list&lt;br /&gt;
layoutSwitchAction.setData(layoutId)&lt;br /&gt;
layoutSwitchAction.setIcon(qt.QIcon(':Icons/Go.png'))&lt;br /&gt;
layoutSwitchAction.setToolTip('3D and slice view')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Customize keyboard shortcuts==&lt;br /&gt;
&lt;br /&gt;
Keyboard shortcuts can be specified for activating any Slicer feature by adding a couple of lines to your &lt;br /&gt;
[[Documentation/{{documentation/version}}/Developers/Python_scripting#How_to_systematically_execute_custom_python_code_at_startup_.3F|.slicerrc file]].&lt;br /&gt;
&lt;br /&gt;
For example, this script registers ''Ctrl+b'', ''Ctrl+n'', ''Ctrl+m'', ''Ctrl+,'' keyboard shortcuts to switch between red, yellow, green, and 4-up view layouts.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
shortcuts = [&lt;br /&gt;
    ('Ctrl+b', lambda: slicer.app.layoutManager().setLayout(slicer.vtkMRMLLayoutNode.SlicerLayoutOneUpRedSliceView)),&lt;br /&gt;
    ('Ctrl+n', lambda: slicer.app.layoutManager().setLayout(slicer.vtkMRMLLayoutNode.SlicerLayoutOneUpYellowSliceView)),&lt;br /&gt;
    ('Ctrl+m', lambda: slicer.app.layoutManager().setLayout(slicer.vtkMRMLLayoutNode.SlicerLayoutOneUpGreenSliceView)),&lt;br /&gt;
    ('Ctrl+,', lambda: slicer.app.layoutManager().setLayout(slicer.vtkMRMLLayoutNode.SlicerLayoutFourUpView))&lt;br /&gt;
    ]&lt;br /&gt;
&lt;br /&gt;
for (shortcutKey, callback) in shortcuts:&lt;br /&gt;
    shortcut = qt.QShortcut(slicer.util.mainWindow())&lt;br /&gt;
    shortcut.setKey(qt.QKeySequence(shortcutKey))&lt;br /&gt;
    shortcut.connect( 'activated()', callback)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here's an example for cycling through Segment Editor effects (requested [https://discourse.slicer.org/t/is-there-a-keystroke-to-cycle-through-effects-in-segment-editor/10117/2 on the forum] for the [http://slicermorph.org SlicerMorph] project).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def cycleEffect(delta=1):&lt;br /&gt;
    try:&lt;br /&gt;
        orderedNames = list(slicer.modules.SegmentEditorWidget.editor.effectNameOrder())&lt;br /&gt;
        allNames = slicer.modules.SegmentEditorWidget.editor.availableEffectNames()&lt;br /&gt;
        for name in allNames:&lt;br /&gt;
            try:&lt;br /&gt;
                orderedNames.index(name)&lt;br /&gt;
            except ValueError:&lt;br /&gt;
                orderedNames.append(name)&lt;br /&gt;
        orderedNames.insert(0, None)&lt;br /&gt;
        activeEffect = slicer.modules.SegmentEditorWidget.editor.activeEffect()&lt;br /&gt;
        if activeEffect:&lt;br /&gt;
            activeName = slicer.modules.SegmentEditorWidget.editor.activeEffect().name&lt;br /&gt;
        else:&lt;br /&gt;
            activeName = None&lt;br /&gt;
        newIndex = (orderedNames.index(activeName) + delta) % len(orderedNames)&lt;br /&gt;
        slicer.modules.SegmentEditorWidget.editor.setActiveEffectByName(orderedNames[newIndex])&lt;br /&gt;
    except AttributeError:&lt;br /&gt;
        # module not active&lt;br /&gt;
        pass&lt;br /&gt;
&lt;br /&gt;
shortcuts = [&lt;br /&gt;
    ('`', lambda: cycleEffect(-1)),&lt;br /&gt;
    ('~', lambda: cycleEffect(1)),&lt;br /&gt;
    ]&lt;br /&gt;
&lt;br /&gt;
for (shortcutKey, callback) in shortcuts:&lt;br /&gt;
    shortcut = qt.QShortcut(slicer.util.mainWindow())&lt;br /&gt;
    shortcut.setKey(qt.QKeySequence(shortcutKey))&lt;br /&gt;
    shortcut.connect( 'activated()', callback)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Customize keyboard/mouse gestures in viewers==&lt;br /&gt;
&lt;br /&gt;
Example for making the 3D view rotate using right-click-and-drag:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
threeDViewWidget = slicer.app.layoutManager().threeDWidget(0)&lt;br /&gt;
cameraDisplayableManager = threeDViewWidget.threeDView().displayableManagerByClassName('vtkMRMLCameraDisplayableManager')&lt;br /&gt;
cameraWidget = cameraDisplayableManager.GetCameraWidget()&lt;br /&gt;
&lt;br /&gt;
# Remove old mapping from right-click-and-drag&lt;br /&gt;
cameraWidget.SetEventTranslationClickAndDrag(cameraWidget.WidgetStateIdle, vtk.vtkCommand.RightButtonPressEvent, vtk.vtkEvent.NoModifier,&lt;br /&gt;
    cameraWidget.WidgetStateRotate, vtk.vtkWidgetEvent.NoEvent, vtk.vtkWidgetEvent.NoEvent)&lt;br /&gt;
&lt;br /&gt;
# Make right-click-and-drag rotate the view&lt;br /&gt;
cameraWidget.SetEventTranslationClickAndDrag(cameraWidget.WidgetStateIdle, vtk.vtkCommand.RightButtonPressEvent, vtk.vtkEvent.NoModifier,&lt;br /&gt;
    cameraWidget.WidgetStateRotate, cameraWidget.WidgetEventRotateStart, cameraWidget.WidgetEventRotateEnd)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Disable certain user interactions in slice views==&lt;br /&gt;
&lt;br /&gt;
For example, disable slice browsing using mouse wheel and keyboard shortcuts in the red slice viewer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
interactorStyle = slicer.app.layoutManager().sliceWidget('Red').sliceView().sliceViewInteractorStyle()&lt;br /&gt;
interactorStyle.SetActionEnabled(interactorStyle.BrowseSlice, False)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hide all slice view controllers:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lm = slicer.app.layoutManager()&lt;br /&gt;
for sliceViewName in lm.sliceViewNames():&lt;br /&gt;
  lm.sliceWidget(sliceViewName).sliceController().setVisible(False)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hide all 3D view controllers:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lm = slicer.app.layoutManager()&lt;br /&gt;
for viewIndex in range(slicer.app.layoutManager().threeDViewCount):&lt;br /&gt;
  lm.threeDWidget(0).threeDController().setVisible(False)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Change default slice view orientation==&lt;br /&gt;
&lt;br /&gt;
You can left-right &amp;quot;flip&amp;quot; slice view orientation presets (show patient left side on left/right side of the screen) by copy-pasting the script below to your [[Documentation/{{documentation/version}}/Developers/FAQ/Python_Scripting#How_to_systematically_execute_custom_python_code_at_startup_.3F| .slicerrc.py file]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Axial slice axes:&lt;br /&gt;
#  1 0 0&lt;br /&gt;
#  0 1 0&lt;br /&gt;
#  0 0 1&lt;br /&gt;
axialSliceToRas=vtk.vtkMatrix3x3()&lt;br /&gt;
&lt;br /&gt;
# Coronal slice axes:&lt;br /&gt;
#  1 0 0 &lt;br /&gt;
#  0 0 -1&lt;br /&gt;
#  0 1 0&lt;br /&gt;
coronalSliceToRas=vtk.vtkMatrix3x3()&lt;br /&gt;
coronalSliceToRas.SetElement(1,1, 0)&lt;br /&gt;
coronalSliceToRas.SetElement(1,2, -1)&lt;br /&gt;
coronalSliceToRas.SetElement(2,1, 1)&lt;br /&gt;
coronalSliceToRas.SetElement(2,2, 0)&lt;br /&gt;
&lt;br /&gt;
# Replace orientation presets in all existing slice nodes and in the default slice node&lt;br /&gt;
sliceNodes = slicer.util.getNodesByClass('vtkMRMLSliceNode')&lt;br /&gt;
sliceNodes.append(slicer.mrmlScene.GetDefaultNodeByClass('vtkMRMLSliceNode'))&lt;br /&gt;
for sliceNode in sliceNodes:&lt;br /&gt;
  orientationPresetName = sliceNode.GetOrientation()&lt;br /&gt;
  sliceNode.RemoveSliceOrientationPreset(&amp;quot;Axial&amp;quot;)&lt;br /&gt;
  sliceNode.AddSliceOrientationPreset(&amp;quot;Axial&amp;quot;, axialSliceToRas)&lt;br /&gt;
  sliceNode.RemoveSliceOrientationPreset(&amp;quot;Coronal&amp;quot;)&lt;br /&gt;
  sliceNode.AddSliceOrientationPreset(&amp;quot;Coronal&amp;quot;, coronalSliceToRas)&lt;br /&gt;
  sliceNode.SetOrientation(orientationPresetName)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Set all slice views linked by default==&lt;br /&gt;
&lt;br /&gt;
You can make slice views linked by default (when application starts or the scene is cleared) by copy-pasting the script below to your [[Documentation/{{documentation/version}}/Developers/FAQ/Python_Scripting#How_to_systematically_execute_custom_python_code_at_startup_.3F| .slicerrc.py file]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Set linked slice views  in all existing slice composite nodes and in the default node&lt;br /&gt;
sliceCompositeNodes = slicer.util.getNodesByClass('vtkMRMLSliceCompositeNode')&lt;br /&gt;
defaultSliceCompositeNode = slicer.mrmlScene.GetDefaultNodeByClass('vtkMRMLSliceCompositeNode')&lt;br /&gt;
if not defaultSliceCompositeNode:&lt;br /&gt;
  defaultSliceCompositeNode = slicer.mrmlScene.CreateNodeByClass('vtkMRMLSliceCompositeNode')&lt;br /&gt;
  slicer.mrmlScene.AddDefaultNode(defaultSliceCompositeNode)&lt;br /&gt;
sliceCompositeNodes.append(defaultSliceCompositeNode)&lt;br /&gt;
for sliceCompositeNode in sliceCompositeNodes:&lt;br /&gt;
  sliceCompositeNode.SetLinkedControl(True)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Set crosshair jump mode to centered by default==&lt;br /&gt;
&lt;br /&gt;
You can change default slice jump mode (when application starts or the scene is cleared) by copy-pasting the script below to your [[Documentation/{{documentation/version}}/Developers/FAQ/Python_Scripting#How_to_systematically_execute_custom_python_code_at_startup_.3F| .slicerrc.py file]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
crosshair=slicer.mrmlScene.GetFirstNodeByClass(&amp;quot;vtkMRMLCrosshairNode&amp;quot;)&lt;br /&gt;
crosshair.SetCrosshairBehavior(crosshair.CenteredJumpSlice)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Set up custom units in slice view ruler==&lt;br /&gt;
&lt;br /&gt;
For microscopy or micro-CT images you may want to switch unit to micrometer instead of the default mm. To do that, 1. change the unit in Application settings / Units and 2. update ruler display settings using the script below (it can be copied to your Application startup script):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lm = slicer.app.layoutManager()&lt;br /&gt;
for sliceViewName in lm.sliceViewNames():&lt;br /&gt;
  sliceView = lm.sliceWidget(sliceViewName).sliceView()&lt;br /&gt;
  displayableManager = sliceView.displayableManagerByClassName(&amp;quot;vtkMRMLRulerDisplayableManager&amp;quot;)&lt;br /&gt;
  displayableManager.RemoveAllRulerScalePresets()&lt;br /&gt;
  displayableManager.AddRulerScalePreset(   0.001, 5, 2, &amp;quot;nm&amp;quot;, 1000.0)&lt;br /&gt;
  displayableManager.AddRulerScalePreset(   0.010, 5, 2, &amp;quot;nm&amp;quot;, 1000.0)&lt;br /&gt;
  displayableManager.AddRulerScalePreset(   0.100, 5, 2, &amp;quot;nm&amp;quot;, 1000.0)&lt;br /&gt;
  displayableManager.AddRulerScalePreset(   0.500, 5, 1, &amp;quot;nm&amp;quot;, 1000.0)&lt;br /&gt;
  displayableManager.AddRulerScalePreset(   1.0,   5, 2, &amp;quot;um&amp;quot;,    1.0)&lt;br /&gt;
  displayableManager.AddRulerScalePreset(   5.0,   5, 1, &amp;quot;um&amp;quot;,    1.0)&lt;br /&gt;
  displayableManager.AddRulerScalePreset(  10.0,   5, 2, &amp;quot;um&amp;quot;,    1.0)&lt;br /&gt;
  displayableManager.AddRulerScalePreset(  50.0,   5, 1, &amp;quot;um&amp;quot;,    1.0)&lt;br /&gt;
  displayableManager.AddRulerScalePreset( 100.0,   5, 2, &amp;quot;um&amp;quot;,    1.0)&lt;br /&gt;
  displayableManager.AddRulerScalePreset( 500.0,   5, 1, &amp;quot;um&amp;quot;,    1.0)&lt;br /&gt;
  displayableManager.AddRulerScalePreset(1000.0,   5, 2, &amp;quot;mm&amp;quot;,    0.001)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Show orientation marker in all views==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
viewNodes = slicer.util.getNodesByClass('vtkMRMLAbstractViewNode')&lt;br /&gt;
for viewNode in viewNodes:&lt;br /&gt;
  viewNode.SetOrientationMarkerType(slicer.vtkMRMLAbstractViewNode.OrientationMarkerTypeAxes)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Show a slice view outside the view layout==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
layoutName = &amp;quot;TestSlice1&amp;quot;&lt;br /&gt;
layoutLabel = &amp;quot;TS1&amp;quot;&lt;br /&gt;
# ownerNode manages this view instead of the layout manager (it can be any node in the scene)&lt;br /&gt;
viewOwnerNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLScriptedModuleNode&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Create MRML nodes&lt;br /&gt;
viewNode = slicer.vtkMRMLSliceNode()&lt;br /&gt;
viewNode.SetName(layoutName)&lt;br /&gt;
viewNode.SetLayoutName(layoutName)&lt;br /&gt;
viewNode.SetLayoutLabel(layoutLabel)&lt;br /&gt;
viewNode.SetLayoutColor(1, 1, 0)&lt;br /&gt;
viewNode.SetAndObserveParentLayoutNodeID(viewOwnerNode.GetID())&lt;br /&gt;
viewNode = slicer.mrmlScene.AddNode(viewNode)&lt;br /&gt;
sliceCompositeNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLSliceCompositeNode&amp;quot;)&lt;br /&gt;
sliceCompositeNode.SetLayoutName(layoutName)&lt;br /&gt;
&lt;br /&gt;
# Create widget&lt;br /&gt;
viewWidget = slicer.qMRMLSliceWidget()&lt;br /&gt;
viewWidget.sliceViewName = layoutName&lt;br /&gt;
viewWidget.sliceViewLabel = layoutLabel&lt;br /&gt;
c = viewNode.GetLayoutColor()&lt;br /&gt;
viewWidget.sliceViewColor = qt.QColor.fromRgbF(c[0],c[1],c[2])&lt;br /&gt;
viewWidget.setMRMLScene(slicer.mrmlScene)&lt;br /&gt;
viewWidget.setMRMLSliceNode(viewNode)&lt;br /&gt;
sliceLogics = slicer.app.applicationLogic().GetSliceLogics()&lt;br /&gt;
viewWidget.setSliceLogics(sliceLogics)&lt;br /&gt;
sliceLogics.AddItem(viewWidget.sliceLogic())&lt;br /&gt;
viewWidget.show()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Show a 3D view outside the view layout==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
layoutName = &amp;quot;Test3DView&amp;quot;&lt;br /&gt;
layoutLabel = &amp;quot;T3&amp;quot;&lt;br /&gt;
layoutColor = [1.0, 1.0, 0.0]&lt;br /&gt;
# ownerNode manages this view instead of the layout manager (it can be any node in the scene)&lt;br /&gt;
viewOwnerNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLScriptedModuleNode&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Create MRML node&lt;br /&gt;
viewNode = slicer.vtkMRMLViewNode()&lt;br /&gt;
viewNode.SetName(layoutName)&lt;br /&gt;
viewNode.SetLayoutName(layoutName)&lt;br /&gt;
viewNode.SetLayoutLabel(layoutLabel)&lt;br /&gt;
viewNode.SetLayoutColor(layoutColor)&lt;br /&gt;
viewNode.SetAndObserveParentLayoutNodeID(viewOwnerNode.GetID())&lt;br /&gt;
viewNode = slicer.mrmlScene.AddNode(viewNode)&lt;br /&gt;
&lt;br /&gt;
# Create widget&lt;br /&gt;
viewWidget = slicer.qMRMLThreeDWidget()&lt;br /&gt;
viewWidget.viewLabel = layoutLabel&lt;br /&gt;
viewWidget.viewColor = qt.QColor.fromRgbF(*layoutColor)&lt;br /&gt;
viewWidget.setMRMLScene(slicer.mrmlScene)&lt;br /&gt;
viewWidget.setMRMLViewNode(viewNode)&lt;br /&gt;
viewWidget.show()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get displayable manager of a certain type for a certain view==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
threeDViewWidget = slicer.app.layoutManager().threeDWidget(0)&lt;br /&gt;
modelDisplayableManager = threeDViewWidget.threeDView().displayableManagerByClassName('vtkMRMLModelDisplayableManager')&lt;br /&gt;
if modelDisplayableManager is None:&lt;br /&gt;
  logging.error('Failed to find the model displayable manager')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Running an ITK filter in Python using SimpleITK==&lt;br /&gt;
Open the &amp;quot;Sample Data&amp;quot; module and download &amp;quot;MR Head&amp;quot;, then paste the following snippet in Python interactor:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import SampleData&lt;br /&gt;
import SimpleITK as sitk&lt;br /&gt;
import sitkUtils&lt;br /&gt;
&lt;br /&gt;
# Get input volume node&lt;br /&gt;
inputVolumeNode = SampleData.SampleDataLogic().downloadMRHead()&lt;br /&gt;
# Create new volume node for output&lt;br /&gt;
outputVolumeNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLScalarVolumeNode', 'MRHeadFiltered')&lt;br /&gt;
&lt;br /&gt;
# Run processing&lt;br /&gt;
inputImage = sitkUtils.PullVolumeFromSlicer(inputVolumeNode)&lt;br /&gt;
filter = sitk.SignedMaurerDistanceMapImageFilter()&lt;br /&gt;
outputImage = filter.Execute(inputImage)&lt;br /&gt;
sitkUtils.PushVolumeToSlicer(outputImage, outputVolumeNode)&lt;br /&gt;
&lt;br /&gt;
# Show processing result&lt;br /&gt;
slicer.util.setSliceViewerLayers(background=outputVolumeNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More information:&lt;br /&gt;
&lt;br /&gt;
*See the SimpleITK documentation for SimpleITK examples: http://www.itk.org/SimpleITKDoxygen/html/examples.html&lt;br /&gt;
*sitkUtils in Slicer is used for pushing and pulling images from Slicer to SimpleITK: https://github.com/Slicer/Slicer/blob/master/Base/Python/sitkUtils.py&lt;br /&gt;
&lt;br /&gt;
==Get current mouse coordinates in a slice view==&lt;br /&gt;
&lt;br /&gt;
You can get 3D (RAS) coordinates of the current mouse cursor from the crosshair singleton node as shown in the example below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def onMouseMoved(observer,eventid):  &lt;br /&gt;
  ras=[0,0,0]&lt;br /&gt;
  crosshairNode.GetCursorPositionRAS(ras)&lt;br /&gt;
  print(ras)&lt;br /&gt;
&lt;br /&gt;
crosshairNode=slicer.util.getNode('Crosshair') &lt;br /&gt;
crosshairNode.AddObserver(slicer.vtkMRMLCrosshairNode.CursorPositionModifiedEvent, onMouseMoved)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get DataProbe text==&lt;br /&gt;
&lt;br /&gt;
You can get the mouse location in pixel coordinates along with the pixel value at the mouse by hitting the '.' (period) key in a slice view after pasting in the following code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def printDataProbe():&lt;br /&gt;
  infoWidget = slicer.modules.DataProbeInstance.infoWidget&lt;br /&gt;
  for layer in ('B', 'F', 'L'):&lt;br /&gt;
    print(infoWidget.layerNames[layer].text, infoWidget.layerIJKs[layer].text, infoWidget.layerValues[layer].text)&lt;br /&gt;
&lt;br /&gt;
s = qt.QShortcut(qt.QKeySequence('.'), mainWindow())&lt;br /&gt;
s.connect('activated()', printDataProbe)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get axial slice as numpy array==&lt;br /&gt;
&lt;br /&gt;
An axis-aligned (axial/sagittal/coronal/) slices of a volume can be extracted using simple numpy array indexing. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import SampleData&lt;br /&gt;
volumeNode = SampleData.SampleDataLogic().downloadMRHead()&lt;br /&gt;
sliceIndex = 12&lt;br /&gt;
&lt;br /&gt;
voxels = slicer.util.arrayFromVolume(volumeNode)  # Get volume as numpy array&lt;br /&gt;
slice = voxels[sliceIndex:,:]  # Get one slice of the volume as numpy array&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get reformatted image from a slice viewer as numpy array==&lt;br /&gt;
&lt;br /&gt;
Set up 'red' slice viewer to show thick slab reconstructed from 3 slices:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sliceNodeID = 'vtkMRMLSliceNodeRed'&lt;br /&gt;
&lt;br /&gt;
# Get image data from slice view&lt;br /&gt;
sliceNode = slicer.mrmlScene.GetNodeByID(sliceNodeID)&lt;br /&gt;
appLogic = slicer.app.applicationLogic()&lt;br /&gt;
sliceLogic = appLogic.GetSliceLogic(sliceNode)&lt;br /&gt;
sliceLayerLogic = sliceLogic.GetBackgroundLayer()&lt;br /&gt;
reslice = sliceLayerLogic.GetReslice()&lt;br /&gt;
reslicedImage = vtk.vtkImageData()&lt;br /&gt;
reslicedImage.DeepCopy(reslice.GetOutput())&lt;br /&gt;
&lt;br /&gt;
# Create new volume node using resliced image&lt;br /&gt;
volumeNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLScalarVolumeNode&amp;quot;)&lt;br /&gt;
volumeNode.SetIJKToRASMatrix(sliceNode.GetXYToRAS())&lt;br /&gt;
volumeNode.SetAndObserveImageData(reslicedImage)&lt;br /&gt;
volumeNode.CreateDefaultDisplayNodes()&lt;br /&gt;
volumeNode.CreateDefaultStorageNode()&lt;br /&gt;
&lt;br /&gt;
# Get voxels as a numpy array&lt;br /&gt;
voxels = slicer.util.arrayFromVolume(volumeNode)&lt;br /&gt;
print(voxels.shape)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Combine multiple volumes into one==&lt;br /&gt;
&lt;br /&gt;
This example combines two volumes into a new one by subtracting one from the other.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import SampleData&lt;br /&gt;
[input1Volume, input2Volume] = SampleData.SampleDataLogic().downloadDentalSurgery()&lt;br /&gt;
&lt;br /&gt;
import slicer.util&lt;br /&gt;
a = slicer.util.arrayFromVolume(input1Volume)&lt;br /&gt;
b = slicer.util.arrayFromVolume(input2Volume)&lt;br /&gt;
&lt;br /&gt;
# 'a' and 'b' are numpy arrays,&lt;br /&gt;
# they can be combined using any numpy array operations&lt;br /&gt;
# to produce the result array 'c'&lt;br /&gt;
c = b-a&lt;br /&gt;
&lt;br /&gt;
volumeNode = slicer.modules.volumes.logic().CloneVolume(input1Volume, &amp;quot;Difference&amp;quot;)&lt;br /&gt;
slicer.util.updateVolumeFromArray(volumeNode, c)&lt;br /&gt;
setSliceViewerLayers(background=volumeNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Add noise to image==&lt;br /&gt;
&lt;br /&gt;
This example shows how to add simulated noise to a volume.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import SampleData&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# Get a sample input volume node&lt;br /&gt;
volumeNode = SampleData.SampleDataLogic().downloadMRHead()&lt;br /&gt;
&lt;br /&gt;
# Get volume as numpy array and add noise&lt;br /&gt;
voxels = slicer.util.arrayFromVolume(volumeNode)&lt;br /&gt;
voxels[:] = voxels + np.random.normal(0.0, 20.0, size=voxels.shape)&lt;br /&gt;
slicer.util.arrayFromVolumeModified(volumeNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mask volume using segmentation==&lt;br /&gt;
&lt;br /&gt;
This example shows how to blank out voxels of a volume outside all segments.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Input nodes&lt;br /&gt;
volumeNode = getNode('MRHead')&lt;br /&gt;
segmentationNode = getNode('Segmentation')&lt;br /&gt;
&lt;br /&gt;
# Write segmentation to labelmap volume node with a geometry that matches the volume node&lt;br /&gt;
labelmapVolumeNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLLabelMapVolumeNode')&lt;br /&gt;
slicer.modules.segmentations.logic().ExportVisibleSegmentsToLabelmapNode(segmentationNode, labelmapVolumeNode, volumeNode)&lt;br /&gt;
&lt;br /&gt;
# Masking&lt;br /&gt;
import numpy as np&lt;br /&gt;
voxels = slicer.util.arrayFromVolume(volumeNode)&lt;br /&gt;
mask = slicer.util.arrayFromVolume(labelmapVolumeNode)&lt;br /&gt;
maskedVoxels = np.copy(voxels)  # we don't want to modify the original volume&lt;br /&gt;
maskedVoxels[mask==0] = 0&lt;br /&gt;
&lt;br /&gt;
# Write masked volume to volume node and show it&lt;br /&gt;
maskedVolumeNode = slicer.modules.volumes.logic().CloneVolume(volumeNode, &amp;quot;Masked&amp;quot;)&lt;br /&gt;
slicer.util.updateVolumeFromArray(maskedVolumeNode, maskedVoxels)&lt;br /&gt;
slicer.util.setSliceViewerLayers(maskedVolumeNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Apply random deformations to image==&lt;br /&gt;
&lt;br /&gt;
This example shows how to apply random translation, rotation, and deformations to a volume to simulate variation in patient positioning, soft tissue motion, and random anatomical variations.&lt;br /&gt;
Control points are placed on a regularly spaced grid and then each control point is displaced by a random amount.&lt;br /&gt;
Thin-plate spline transform is computed from the original and transformed point list.&lt;br /&gt;
&lt;br /&gt;
https://gist.github.com/lassoan/428af5285da75dc033d32ebff65ba940&lt;br /&gt;
&lt;br /&gt;
==Thick slab reconstruction and maximum/minimum intensity volume projections==&lt;br /&gt;
&lt;br /&gt;
Set up 'red' slice viewer to show thick slab reconstructed from 3 slices:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sliceNode = slicer.mrmlScene.GetNodeByID('vtkMRMLSliceNodeRed')&lt;br /&gt;
appLogic = slicer.app.applicationLogic()&lt;br /&gt;
sliceLogic = appLogic.GetSliceLogic(sliceNode)&lt;br /&gt;
sliceLayerLogic = sliceLogic.GetBackgroundLayer()&lt;br /&gt;
reslice = sliceLayerLogic.GetReslice()&lt;br /&gt;
reslice.SetSlabModeToMean()&lt;br /&gt;
reslice.SetSlabNumberOfSlices(10) # mean of 10 slices will computed&lt;br /&gt;
reslice.SetSlabSliceSpacingFraction(0.3) # spacing between each slice is 0.3 pixel (total 10 * 0.3 = 3 pixel neighborhood)&lt;br /&gt;
sliceNode.Modified()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Set up 'red' slice viewer to show maximum intensity projection (MIP):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sliceNode = slicer.mrmlScene.GetNodeByID('vtkMRMLSliceNodeRed')&lt;br /&gt;
appLogic = slicer.app.applicationLogic()&lt;br /&gt;
sliceLogic = appLogic.GetSliceLogic(sliceNode)&lt;br /&gt;
sliceLayerLogic = sliceLogic.GetBackgroundLayer()&lt;br /&gt;
reslice = sliceLayerLogic.GetReslice()&lt;br /&gt;
reslice.SetSlabModeToMax()&lt;br /&gt;
reslice.SetSlabNumberOfSlices(600) # use a large number of slices (600) to cover the entire volume&lt;br /&gt;
reslice.SetSlabSliceSpacingFraction(0.5) # spacing between slices are 0.5 pixel (supersampling is useful to reduce interpolation artifacts)&lt;br /&gt;
sliceNode.Modified()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The projected image is available in a ''vtkImageData'' object by calling ''reslice.GetOutput()''.&lt;br /&gt;
&lt;br /&gt;
==Change default file type for nodes (that have never been saved yet)==&lt;br /&gt;
Default node can be specified that will be used as a basis of all new storage nodes. This can be used for setting default file extension. For example, change file format to STL for model nodes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defaultModelStorageNode = slicer.vtkMRMLModelStorageNode()&lt;br /&gt;
defaultModelStorageNode.SetDefaultWriteFileExtension('stl')&lt;br /&gt;
slicer.mrmlScene.AddDefaultNode(defaultModelStorageNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To permanently change default file extension on your computer, copy-paste the code above into your application startup script (you can find its location in menu: Edit / Application settings / General / Application startup script).&lt;br /&gt;
&lt;br /&gt;
==Change file type for saving for all volumes (with already existing storage nodes)==&lt;br /&gt;
&lt;br /&gt;
If it is not necessary to preserve file paths then the simplest is to configure default storage node (as shown in the example above), then delete all existing storage nodes. When save dialog is opened, default storage nodes will be recreated.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Delete existing model storage nodes so that they will be recreated with default settings&lt;br /&gt;
existingModelStorageNodes = slicer.util.getNodesByClass('vtkMRMLModelStorageNode')&lt;br /&gt;
for modelStorageNode in existingModelStorageNodes:&lt;br /&gt;
  slicer.mrmlScene.RemoveNode(modelStorageNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To update existing storage nodes to use new file extension (but keep all other parameters unchanged) you can use this approach (example is for volume storage):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
requiredFileExtension = '.nia'&lt;br /&gt;
originalFileExtension = '.nrrd'&lt;br /&gt;
volumeNodes = slicer.util.getNodesByClass('vtkMRMLScalarVolumeNode')&lt;br /&gt;
for volumeNode in volumeNodes:&lt;br /&gt;
  volumeStorageNode = volumeNode.GetStorageNode()&lt;br /&gt;
  if not volumeStorageNode:&lt;br /&gt;
    volumeNode.AddDefaultStorageNode()&lt;br /&gt;
    volumeStorageNode = volumeNode.GetStorageNode()&lt;br /&gt;
    volumeStorageNode.SetFileName(volumeNode.GetName()+requiredFileExtension)&lt;br /&gt;
  else:&lt;br /&gt;
    volumeStorageNode.SetFileName(volumeStorageNode.GetFileName().replace(originalFileExtension, requiredFileExtension))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To set all volume nodes to save uncompressed by default (add this to .slicerrc.py so it takes effect for the whole session):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#set the default volume storage to not compress by default&lt;br /&gt;
defaultVolumeStorageNode = slicer.vtkMRMLVolumeArchetypeStorageNode()&lt;br /&gt;
defaultVolumeStorageNode.SetUseCompression(0)&lt;br /&gt;
slicer.mrmlScene.AddDefaultNode(defaultVolumeStorageNode)&lt;br /&gt;
logging.info(&amp;quot;Volume nodes will be stored uncompressed by default&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Same thing as above, but applied to all  segmentations instead of volumes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#set the default volume storage to not compress by default&lt;br /&gt;
defaultVolumeStorageNode = slicer.vtkMRMLSegmentationStorageNode()&lt;br /&gt;
defaultVolumeStorageNode.SetUseCompression(0)&lt;br /&gt;
slicer.mrmlScene.AddDefaultNode(defaultVolumeStorageNode)&lt;br /&gt;
logging.info(&amp;quot;Segmentation nodes will be stored uncompressed &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sequences==&lt;br /&gt;
&lt;br /&gt;
===Access voxels of a 4D volume as numpy array===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Get sequence node&lt;br /&gt;
import SampleData&lt;br /&gt;
sequenceNode = SampleData.SampleDataLogic().downloadSample('CTPCardioSeq')&lt;br /&gt;
# Alternatively, get the first sequence node in the scene:&lt;br /&gt;
# sequenceNode = slicer.util.getNodesByClass('vtkMRMLSequenceNode')[0]&lt;br /&gt;
&lt;br /&gt;
# Get voxels of itemIndex'th volume as numpy array&lt;br /&gt;
itemIndex = 5&lt;br /&gt;
voxelArray = slicer.util.arrayFromVolume(sequenceNode.GetNthDataNode(itemIndex))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Get index value===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
print(&amp;quot;Index value of {0}th item: {1} = {2} {3}&amp;quot;.format(&lt;br /&gt;
  itemIndex,&lt;br /&gt;
  sequenceNode.GetIndexName(),&lt;br /&gt;
  sequenceNode.GetNthIndexValue(itemIndex),&lt;br /&gt;
  sequenceNode.GetIndexUnit()))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Browse a sequence and access currently displayed nodes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Get a sequence node&lt;br /&gt;
import SampleData&lt;br /&gt;
sequenceNode = SampleData.SampleDataLogic().downloadSample('CTPCardioSeq')&lt;br /&gt;
&lt;br /&gt;
# Find corresponding sequence browser node&lt;br /&gt;
browserNode = slicer.modules.sequences.logic().GetFirstBrowserNodeForSequenceNode(sequenceNode)&lt;br /&gt;
&lt;br /&gt;
# Print sequence information&lt;br /&gt;
print(&amp;quot;Number of items in the sequence: {0}&amp;quot;.format(browserNode.GetNumberOfItems()))&lt;br /&gt;
print(&amp;quot;Index name: {0}&amp;quot;.format(browserNode.GetMasterSequenceNode().GetIndexName()))&lt;br /&gt;
&lt;br /&gt;
# Jump to a selected sequence item&lt;br /&gt;
browserNode.SetSelectedItemNumber(5)&lt;br /&gt;
&lt;br /&gt;
# Get currently displayed volume node voxels as numpy array&lt;br /&gt;
volumeNode = browserNode.GetProxyNode(sequenceNode)&lt;br /&gt;
voxelArray = slicer.util.arrayFromVolume(volumeNode)&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
===Concatenate all sequences in the scene into a new sequence===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Get all sequence nodes in the scene&lt;br /&gt;
sequenceNodes = slicer.util.getNodesByClass('vtkMRMLSequenceNode')&lt;br /&gt;
mergedSequenceNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLSequenceNode', 'Merged sequence')&lt;br /&gt;
&lt;br /&gt;
# Merge all sequence nodes into a new sequence node&lt;br /&gt;
mergedIndexValue = 0&lt;br /&gt;
for sequenceNode in sequenceNodes:&lt;br /&gt;
    for itemIndex in range(sequenceNode.GetNumberOfDataNodes()):&lt;br /&gt;
        dataNode = sequenceNode.GetNthDataNode(itemIndex)&lt;br /&gt;
        mergedSequenceNode.SetDataNodeAtValue(dataNode, str(mergedIndexValue))&lt;br /&gt;
        mergedIndexValue += 1&lt;br /&gt;
    # Delete the sequence node we copied the data from, to prevent sharing of the same&lt;br /&gt;
    # node by multiple sequences&lt;br /&gt;
    slicer.mrmlScene.RemoveNode(sequenceNode)&lt;br /&gt;
&lt;br /&gt;
# Create a sequence browser node for the new merged sequence&lt;br /&gt;
mergedSequenceBrowserNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLSequenceBrowserNode', 'Merged')&lt;br /&gt;
mergedSequenceBrowserNode.AddSynchronizedSequenceNode(mergedSequenceNode)&lt;br /&gt;
slicer.modules.sequencebrowser.setToolBarActiveBrowserNode(mergedSequenceBrowserNode)&lt;br /&gt;
# Show proxy node in slice viewers&lt;br /&gt;
mergedProxyNode = mergedSequenceBrowserNode.GetProxyNode(mergedSequenceNode)&lt;br /&gt;
slicer.util.setSliceViewerLayers(background=mergedProxyNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Segmentations==&lt;br /&gt;
&lt;br /&gt;
===Create a segmentation from a labelmap volume and display in 3D===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
labelmapVolumeNode = getNode('label')&lt;br /&gt;
seg = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLSegmentationNode')&lt;br /&gt;
slicer.modules.segmentations.logic().ImportLabelmapToSegmentationNode(labelmapVolumeNode, seg)&lt;br /&gt;
seg.CreateClosedSurfaceRepresentation()&lt;br /&gt;
slicer.mrmlScene.RemoveNode(labelmapVolumeNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last line is optional. It removes the original labelmap volume so that the same information is not shown twice.&lt;br /&gt;
&lt;br /&gt;
===Export labelmap node from segmentation node===&lt;br /&gt;
&lt;br /&gt;
Export labelmap matching reference geometry of the segmentation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentationNode = getNode('Segmentation')&lt;br /&gt;
labelmapVolumeNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLLabelMapVolumeNode')&lt;br /&gt;
slicer.modules.segmentations.logic().ExportAllSegmentsToLabelmapNode(segmentationNode, labelmapVolumeNode, slicer.vtkSegmentation.EXTENT_REFERENCE_GEOMETRY)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Export smallest possible labelmap:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentationNode = getNode('Segmentation')&lt;br /&gt;
labelmapVolumeNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLLabelMapVolumeNode')&lt;br /&gt;
slicer.modules.segmentations.logic().ExportAllSegmentsToLabelmapNode(segmentationNode, labelmapVolumeNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Export labelmap that matches geometry of a chosen reference volume:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentationNode = getNode('Segmentation')&lt;br /&gt;
labelmapVolumeNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLLabelMapVolumeNode')&lt;br /&gt;
slicer.modules.segmentations.logic().ExportVisibleSegmentsToLabelmapNode(segmentationNode, labelmapVolumeNode, referenceVolumeNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Export a selection of segments (identified by their names):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentNames = [&amp;quot;Prostate&amp;quot;, &amp;quot;Urethra&amp;quot;]&lt;br /&gt;
segmentIds = vtk.vtkStringArray()&lt;br /&gt;
for segmentName in segmentNames:&lt;br /&gt;
    segmentId = segmentationNode.GetSegmentation().GetSegmentIdBySegmentName(segmentName)&lt;br /&gt;
    segmentIds.InsertNextValue(segmentId)&lt;br /&gt;
slicer.vtkSlicerSegmentationsModuleLogic.ExportSegmentsToLabelmapNode(segmentationNode, segmentIds, labelmapVolumeNode, referenceVolumeNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Export to file by pressing Ctrl+Shift+S key:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
outputPath = &amp;quot;c:/tmp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def exportLabelmap():&lt;br /&gt;
    segmentationNode = slicer.mrmlScene.GetFirstNodeByClass(&amp;quot;vtkMRMLSegmentationNode&amp;quot;)&lt;br /&gt;
    referenceVolumeNode = slicer.mrmlScene.GetFirstNodeByClass(&amp;quot;vtkMRMLScalarVolumeNode&amp;quot;)&lt;br /&gt;
    labelmapVolumeNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLLabelMapVolumeNode')&lt;br /&gt;
    slicer.modules.segmentations.logic().ExportVisibleSegmentsToLabelmapNode(segmentationNode, labelmapVolumeNode, referenceVolumeNode)&lt;br /&gt;
    filepath = outputPath + &amp;quot;/&amp;quot; + referenceVolumeNode.GetName()+&amp;quot;-label.nrrd&amp;quot;&lt;br /&gt;
    slicer.util.saveNode(labelmapVolumeNode, filepath)&lt;br /&gt;
    slicer.mrmlScene.RemoveNode(labelmapVolumeNode.GetDisplayNode().GetColorNode())&lt;br /&gt;
    slicer.mrmlScene.RemoveNode(labelmapVolumeNode)&lt;br /&gt;
    slicer.util.delayDisplay(&amp;quot;Segmentation saved to &amp;quot;+filepath)&lt;br /&gt;
&lt;br /&gt;
shortcut = qt.QShortcut(slicer.util.mainWindow())&lt;br /&gt;
shortcut.setKey(qt.QKeySequence('Ctrl+Shift+s'))&lt;br /&gt;
shortcut.connect( 'activated()', exportLabelmap)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Export model nodes from segmentation node===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentationNode = getNode(&amp;quot;Segmentation&amp;quot;)&lt;br /&gt;
shNode = slicer.mrmlScene.GetSubjectHierarchyNode()&lt;br /&gt;
exportFolderItemId = shNode.CreateFolderItem(shNode.GetSceneItemID(), &amp;quot;Segments&amp;quot;)&lt;br /&gt;
slicer.modules.segmentations.logic().ExportAllSegmentsToModels(segmentationNode, exportFolderItemId)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Show a segmentation in 3D===&lt;br /&gt;
Segmentation can only be shown in 3D if closed surface representation (or other 3D-displayable representation) is available. To create closed surface representation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentation.CreateClosedSurfaceRepresentation()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Get a representation of a segment===&lt;br /&gt;
Access binary labelmap stored in a segmentation node (without exporting it to a volume node) - if it does not exist, it will return None:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
image = slicer.vtkOrientedImageData()&lt;br /&gt;
segmentationNode.GetBinaryLabelmapRepresentation(segmentID, image)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Get closed surface, if it does not exist, it will return None:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
outputPolyData = vtk.vtkPolyData()&lt;br /&gt;
segmentationNode.GetClosedSurfaceRepresentation(segmentID, outputPolyData)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Get binary labelmap representation. If it does not exist then it will be created for that single segment. Applies parent transforms by default (if not desired, another argument needs to be added to the end: false):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import vtkSegmentationCorePython as vtkSegmentationCore&lt;br /&gt;
outputOrientedImageData = vtkSegmentationCore.vtkOrientedImageData()&lt;br /&gt;
slicer.vtkSlicerSegmentationsModuleLogic.GetSegmentBinaryLabelmapRepresentation(segmentationNode, segmentID, outputOrientedImageData)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Same as above, for closed surface representation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
outputPolyData = vtk.vtkPolyData()&lt;br /&gt;
slicer.vtkSlicerSegmentationsModuleLogic.GetSegmentClosedSurfaceRepresentation(segmentationNode, segmentID, outputPolyData)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Convert all segments using default path and conversion parameters===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentationNode.CreateBinaryLabelmapRepresentation()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Convert all segments using custom path or conversion parameters===&lt;br /&gt;
Change reference image geometry parameter based on an existing referenceImageData image:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import vtkSegmentationCorePython as vtkSegmentationCore&lt;br /&gt;
referenceGeometry = vtkSegmentationCore.vtkSegmentationConverter.SerializeImageGeometry(referenceImageData)&lt;br /&gt;
segmentation.SetConversionParameter(vtkSegmentationCore.vtkSegmentationConverter.GetReferenceImageGeometryParameterName(), referenceGeometry)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Re-convert using a modified conversion parameter===&lt;br /&gt;
Changing smoothing factor for closed surface generation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import vtkSegmentationCorePython as vtkSegmentationCore&lt;br /&gt;
segmentation = getNode('Segmentation').GetSegmentation()&lt;br /&gt;
&lt;br /&gt;
# Turn of surface smoothing&lt;br /&gt;
segmentation.SetConversionParameter('Smoothing factor','0.0')&lt;br /&gt;
&lt;br /&gt;
# Recreate representation using modified parameters (and default conversion path)&lt;br /&gt;
segmentation.RemoveRepresentation(vtkSegmentationCore.vtkSegmentationConverter.GetSegmentationClosedSurfaceRepresentationName())&lt;br /&gt;
segmentation.CreateRepresentation(vtkSegmentationCore.vtkSegmentationConverter.GetSegmentationClosedSurfaceRepresentationName())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Create keyboard shortcut for toggling sphere brush for paint and erase effects===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def toggleSphereBrush():&lt;br /&gt;
    segmentEditorWidget = slicer.modules.segmenteditor.widgetRepresentation().self().editor&lt;br /&gt;
    paintEffect = segmentEditorWidget.effectByName(&amp;quot;Paint&amp;quot;)&lt;br /&gt;
    isSphere = paintEffect.integerParameter('BrushSphere')&lt;br /&gt;
    # BrushSphere is &amp;quot;common&amp;quot; parameter (shared between paint and erase)&lt;br /&gt;
    paintEffect.setCommonParameter(&amp;quot;BrushSphere&amp;quot;, 0 if isSphere else 1)&lt;br /&gt;
&lt;br /&gt;
shortcut = qt.QShortcut(slicer.util.mainWindow())&lt;br /&gt;
shortcut.setKey(qt.QKeySequence(&amp;quot;s&amp;quot;))&lt;br /&gt;
shortcut.connect('activated()', toggleSphereBrush)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Get centroid of a segment in world (RAS) coordinates===&lt;br /&gt;
&lt;br /&gt;
This example shows how to get centroid of a segment in world coordinates and show that position in all slice views.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentationNode = getNode('Segmentation')&lt;br /&gt;
segmentId = 'Segment_1'&lt;br /&gt;
&lt;br /&gt;
# Get array voxel coordinates&lt;br /&gt;
import numpy as np&lt;br /&gt;
seg=arrayFromSegment(segmentation_node, segmentId)&lt;br /&gt;
# numpy array has voxel coordinates in reverse order (KJI instead of IJK)&lt;br /&gt;
# and the array is cropped to minimum size in the segmentation&lt;br /&gt;
mean_KjiCropped = [coords.mean() for coords in np.nonzero(seg)]&lt;br /&gt;
&lt;br /&gt;
# Get segmentation voxel coordinates&lt;br /&gt;
segImage = segmentationNode.GetBinaryLabelmapRepresentation(segmentId)&lt;br /&gt;
segImageExtent = segImage.GetExtent()&lt;br /&gt;
# origin of the array in voxel coordinates is determined by the start extent&lt;br /&gt;
mean_Ijk = [mean_KjiCropped[2], mean_KjiCropped[1], mean_KjiCropped[0]] + np.array([segImageExtent[0], segImageExtent[2], segImageExtent[4]])&lt;br /&gt;
&lt;br /&gt;
# Get segmentation physical coordinates&lt;br /&gt;
ijkToWorld = vtk.vtkMatrix4x4()&lt;br /&gt;
segImage.GetImageToWorldMatrix(ijkToWorld)&lt;br /&gt;
mean_World = [0, 0, 0, 1]&lt;br /&gt;
ijkToRas.MultiplyPoint(np.append(mean_Ijk,1.0), mean_World)&lt;br /&gt;
mean_World = mean_World[0:3]&lt;br /&gt;
&lt;br /&gt;
# If segmentation node is transformed, apply that transform to get RAS coordinates&lt;br /&gt;
transformWorldToRas = vtk.vtkGeneralTransform()&lt;br /&gt;
slicer.vtkMRMLTransformNode.GetTransformBetweenNodes(segmentationNode.GetParentTransformNode(), None, transformWorldToRas)&lt;br /&gt;
mean_Ras = transformWorldToRas.TransformPoint(mean_World)&lt;br /&gt;
&lt;br /&gt;
# Show mean position value and jump to it in all slice viewers&lt;br /&gt;
print(mean_Ras)&lt;br /&gt;
slicer.modules.markups.logic().JumpSlicesToLocation(mean_Ras[0], mean_Ras[1], mean_Ras[2], True)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Get histogram of a segmented region===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Generate input data&lt;br /&gt;
################################################&lt;br /&gt;
&lt;br /&gt;
# Load master volume&lt;br /&gt;
import SampleData&lt;br /&gt;
sampleDataLogic = SampleData.SampleDataLogic()&lt;br /&gt;
masterVolumeNode = sampleDataLogic.downloadMRBrainTumor1()&lt;br /&gt;
&lt;br /&gt;
# Create segmentation&lt;br /&gt;
segmentationNode = slicer.vtkMRMLSegmentationNode()&lt;br /&gt;
slicer.mrmlScene.AddNode(segmentationNode)&lt;br /&gt;
segmentationNode.CreateDefaultDisplayNodes() # only needed for display&lt;br /&gt;
segmentationNode.SetReferenceImageGeometryParameterFromVolumeNode(masterVolumeNode)&lt;br /&gt;
&lt;br /&gt;
# Create segment&lt;br /&gt;
tumorSeed = vtk.vtkSphereSource()&lt;br /&gt;
tumorSeed.SetCenter(-6, 30, 28)&lt;br /&gt;
tumorSeed.SetRadius(25)&lt;br /&gt;
tumorSeed.Update()&lt;br /&gt;
segmentationNode.AddSegmentFromClosedSurfaceRepresentation(tumorSeed.GetOutput(), &amp;quot;Segment A&amp;quot;, [1.0,0.0,0.0])&lt;br /&gt;
&lt;br /&gt;
# Compute histogram&lt;br /&gt;
################################################&lt;br /&gt;
&lt;br /&gt;
labelValue = 1  # label value of first segment&lt;br /&gt;
&lt;br /&gt;
# Get segmentation as labelmap volume node&lt;br /&gt;
labelmapVolumeNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLLabelMapVolumeNode')&lt;br /&gt;
slicer.modules.segmentations.logic().ExportVisibleSegmentsToLabelmapNode(segmentationNode, labelmapVolumeNode, masterVolumeNode)&lt;br /&gt;
&lt;br /&gt;
# Extract all voxels of the segment as numpy array&lt;br /&gt;
volumeArray = slicer.util.arrayFromVolume(masterVolumeNode)&lt;br /&gt;
labelArray = slicer.util.arrayFromVolume(labelmapVolumeNode)&lt;br /&gt;
segmentVoxels = volumeArray[labelArray==labelValue]&lt;br /&gt;
&lt;br /&gt;
# Compute histogram&lt;br /&gt;
import numpy as np&lt;br /&gt;
histogram = np.histogram(segmentVoxels, bins=50)&lt;br /&gt;
&lt;br /&gt;
# Plot histogram&lt;br /&gt;
################################################&lt;br /&gt;
&lt;br /&gt;
slicer.util.plot(histogram, xColumnIndex = 1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Get segments visible at a selected position===&lt;br /&gt;
&lt;br /&gt;
Show in the console names of segments visible at a markups fiducial position:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentationNode = slicer.mrmlScene.GetFirstNodeByClass(&amp;quot;vtkMRMLSegmentationNode&amp;quot;)&lt;br /&gt;
markupsFiducialNode = slicer.mrmlScene.GetFirstNodeByClass(&amp;quot;vtkMRMLMarkupsFiducialNode&amp;quot;)&lt;br /&gt;
sliceViewLabel = &amp;quot;Red&amp;quot;  # any slice view where segmentation node is visible works&lt;br /&gt;
&lt;br /&gt;
def printSegmentNames(unused1=None, unused2=None):&lt;br /&gt;
    &lt;br /&gt;
    sliceViewWidget = slicer.app.layoutManager().sliceWidget(sliceViewLabel)&lt;br /&gt;
    segmentationsDisplayableManager = sliceViewWidget.sliceView().displayableManagerByClassName('vtkMRMLSegmentationsDisplayableManager2D')&lt;br /&gt;
    ras = [0,0,0]&lt;br /&gt;
    markupsFiducialNode.GetNthControlPointPositionWorld(0, ras)&lt;br /&gt;
    segmentIds = vtk.vtkStringArray()&lt;br /&gt;
    segmentationsDisplayableManager.GetVisibleSegmentsForPosition(ras, segmentationNode.GetDisplayNode(), segmentIds)&lt;br /&gt;
    for idIndex in range(segmentIds.GetNumberOfValues()):&lt;br /&gt;
        segment = segmentationNode.GetSegmentation().GetSegment(segmentIds.GetValue(idIndex))&lt;br /&gt;
        print('Segment found at position {0}: {1}'.format(ras, segment.GetName()))&lt;br /&gt;
&lt;br /&gt;
# Observe markup node changes&lt;br /&gt;
markupsFiducialNode.AddObserver(slicer.vtkMRMLMarkupsPlaneNode.PointModifiedEvent, printSegmentNames)&lt;br /&gt;
printSegmentNames()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Set default segmentation options===&lt;br /&gt;
&lt;br /&gt;
Allow segments to overlap each other by default:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defaultSegmentEditorNode = slicer.vtkMRMLSegmentEditorNode()&lt;br /&gt;
defaultSegmentEditorNode.SetOverwriteMode(slicer.vtkMRMLSegmentEditorNode.OverwriteNone)&lt;br /&gt;
slicer.mrmlScene.AddDefaultNode(defaultSegmentEditorNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To always make this the default, add the lines above to your &lt;br /&gt;
[[Documentation/{{documentation/version}}/Developers/Python_scripting#How_to_systematically_execute_custom_python_code_at_startup_.3F|.slicerrc file]].&lt;br /&gt;
&lt;br /&gt;
===How to run segment editor effects from a script===&lt;br /&gt;
&lt;br /&gt;
Editor effects are complex because they need to handle changing master volumes, undo/redo, masking operations, etc. Therefore, it is recommended to use the effect by instantiating a qMRMLSegmentEditorWidget or use/extract processing logic of the effect and use that from a script.&lt;br /&gt;
&lt;br /&gt;
==== Use Segment editor effects from script (qMRMLSegmentEditorWidget) ====&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
*[https://gist.github.com/lassoan/2d5a5b73645f65a5eb6f8d5f97abf31b brain tumor segmentation using grow from seeds effect]&lt;br /&gt;
*[https://gist.github.com/lassoan/ef30bc27a22a648ead7f82243f5cc7d5 AI-assisted brain tumor segmentation]&lt;br /&gt;
*[https://gist.github.com/lassoan/1673b25d8e7913cbc245b4f09ed853f9 skin surface extraction using thresholding and smoothing]&lt;br /&gt;
*[https://gist.github.com/lassoan/2f5071c562108dac8efe277c78f2620f mask a volume with segments and compute histogram for each region]&lt;br /&gt;
*[https://gist.github.com/lassoan/5ad51c89521d3cd9c5faf65767506b37 create fat/muscle/bone segment by thresholding and report volume of each segment]&lt;br /&gt;
*[https://gist.github.com/lassoan/4d0b94bda52d5b099432e424e03aa2b1 segment cranial cavity automatically in dry bone skull CT]&lt;br /&gt;
*[https://gist.github.com/lassoan/84d1f9a093dbb6a46c0fcc89279d8088 remove patient table from CT image]&lt;br /&gt;
&lt;br /&gt;
Description of effect parameters are available [https://slicer.readthedocs.io/en/latest/developer_guide/modules/segmenteditor.html#effect-parameters here].&lt;br /&gt;
&lt;br /&gt;
==== Use logic of effect from a script ====&lt;br /&gt;
&lt;br /&gt;
This example shows how to perform operations on segmentations using VTK filters ''extracted'' from an effect:&lt;br /&gt;
&lt;br /&gt;
*[https://gist.github.com/lassoan/7c94c334653010696b2bf96abc0ac8e7 brain tumor segmentation using grow from seeds effect]&lt;br /&gt;
&lt;br /&gt;
===Get information from segmentation nrrd file header===&lt;br /&gt;
&lt;br /&gt;
You can use this code snippet to get information from segmentation (.seg.nrrd), for example when creating numpy arrays for generating training data for deep learning networks. This script can be used in any Python environment, not just inside Slicer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# pip_install('pynrrd')&lt;br /&gt;
&lt;br /&gt;
def read_segmentation_info(filename):&lt;br /&gt;
    import nrrd&lt;br /&gt;
    header = nrrd.read_header(filename)&lt;br /&gt;
    segmentation_info = {}&lt;br /&gt;
    segments = []&lt;br /&gt;
    segment_index = 0&lt;br /&gt;
    while True:&lt;br /&gt;
        prefix = &amp;quot;Segment{0}_&amp;quot;.format(segment_index)&lt;br /&gt;
        if not prefix + &amp;quot;ID&amp;quot; in header.keys():&lt;br /&gt;
            break&lt;br /&gt;
        segment = {}&lt;br /&gt;
        segment[&amp;quot;index&amp;quot;] = segment_index&lt;br /&gt;
        segment[&amp;quot;color&amp;quot;] = [float(i) for i in header[prefix + &amp;quot;Color&amp;quot;].split(&amp;quot; &amp;quot;)]  # Segment0_Color:=0.501961 0.682353 0.501961&lt;br /&gt;
        segment[&amp;quot;colorAutoGenerated&amp;quot;] = int(header[prefix + &amp;quot;ColorAutoGenerated&amp;quot;]) != 0  # Segment0_ColorAutoGenerated:=1&lt;br /&gt;
        segment[&amp;quot;extent&amp;quot;] = [int(i) for i in header[prefix + &amp;quot;Extent&amp;quot;].split(&amp;quot; &amp;quot;)]  # Segment0_Extent:=68 203 53 211 24 118&lt;br /&gt;
        segment[&amp;quot;id&amp;quot;] = header[prefix + &amp;quot;ID&amp;quot;]  # Segment0_ID:=Segment_1&lt;br /&gt;
        segment[&amp;quot;labelValue&amp;quot;] = int(header[prefix + &amp;quot;LabelValue&amp;quot;])  # Segment0_LabelValue:=1&lt;br /&gt;
        segment[&amp;quot;layer&amp;quot;] = int(header[prefix + &amp;quot;Layer&amp;quot;])  # Segment0_Layer:=0&lt;br /&gt;
        segment[&amp;quot;name&amp;quot;] = header[prefix + &amp;quot;Name&amp;quot;]  # Segment0_Name:=Segment_1&lt;br /&gt;
        segment[&amp;quot;nameAutoGenerated&amp;quot;] = int(header[prefix + &amp;quot;NameAutoGenerated&amp;quot;]) != 0  # Segment0_NameAutoGenerated:=1&lt;br /&gt;
        # Segment0_Tags:=Segmentation.Status:inprogress|TerminologyEntry:Segmentation category and type - 3D Slicer General Anatomy list&lt;br /&gt;
        # ~SCT^85756007^Tissue~SCT^85756007^Tissue~^^~Anatomic codes - DICOM master list~^^~^^|&lt;br /&gt;
        tags = {}&lt;br /&gt;
        tags_str = header[prefix + &amp;quot;Tags&amp;quot;].split(&amp;quot;|&amp;quot;)&lt;br /&gt;
        for tag_str in tags_str:&lt;br /&gt;
            tag_str = tag_str.strip()&lt;br /&gt;
            if not tag_str:&lt;br /&gt;
                continue&lt;br /&gt;
            key, value = tag_str.split(&amp;quot;:&amp;quot;, maxsplit=1)&lt;br /&gt;
            tags[key] = value&lt;br /&gt;
        segment[&amp;quot;tags&amp;quot;] = tags&lt;br /&gt;
        segments.append(segment)&lt;br /&gt;
        segment_index += 1&lt;br /&gt;
    segmentation_info[&amp;quot;segments&amp;quot;] = segments&lt;br /&gt;
    return segmentation_info&lt;br /&gt;
&lt;br /&gt;
def segment_from_name(segmentation_info, segment_name):&lt;br /&gt;
    for segment in segmentation_info[&amp;quot;segments&amp;quot;]:&lt;br /&gt;
        if segment_name == segment[&amp;quot;name&amp;quot;]:&lt;br /&gt;
            return segment&lt;br /&gt;
    raise KeyError('segment not found by name ' + segment_name)&lt;br /&gt;
&lt;br /&gt;
def segment_names(segmentation_info):&lt;br /&gt;
    names = []&lt;br /&gt;
    for segment in segmentation_info[&amp;quot;segments&amp;quot;]:&lt;br /&gt;
        names.append(segment[&amp;quot;name&amp;quot;])&lt;br /&gt;
    return names&lt;br /&gt;
&lt;br /&gt;
def extract_segments(voxels, header, segmentation_info, segment_names_to_label_values):&lt;br /&gt;
    import numpy as np&lt;br /&gt;
    # Create empty array from last 3 dimensions (output will be flattened to a 3D array)&lt;br /&gt;
    output_voxels = np.zeros(voxels.shape[-3:])&lt;br /&gt;
    # Copy non-segmentation fields to the extracted header&lt;br /&gt;
    output_header = {}&lt;br /&gt;
    for key in header.keys():&lt;br /&gt;
        if not re.match(&amp;quot;^Segment[0-9]+_.+&amp;quot;, key):&lt;br /&gt;
            output_header[key] = header[key]&lt;br /&gt;
    # Copy extracted segments&lt;br /&gt;
    dims = len(voxels.shape)&lt;br /&gt;
    for output_segment_index, segment_name_to_label_value in enumerate(segment_names_to_label_values):&lt;br /&gt;
        # Copy relabeled voxel data&lt;br /&gt;
        segment = segment_from_name(segmentation_info, segment_name_to_label_value[0])&lt;br /&gt;
        input_label_value = segment[&amp;quot;labelValue&amp;quot;]&lt;br /&gt;
        output_label_value = segment_name_to_label_value[1]&lt;br /&gt;
        if dims == 3:&lt;br /&gt;
            output_voxels[voxels == input_label_value] = output_label_value&lt;br /&gt;
        elif dims == 4:&lt;br /&gt;
            inputLayer = segment[&amp;quot;layer&amp;quot;]&lt;br /&gt;
            output_voxels[voxels[inputLayer,:,:,:] == input_label_value] = output_label_value&lt;br /&gt;
        else:&lt;br /&gt;
            raise ValueError(&amp;quot;Voxel array dimension is invalid&amp;quot;)&lt;br /&gt;
        # Copy all segment fields corresponding to this segment&lt;br /&gt;
        for key in header.keys():&lt;br /&gt;
            prefix = &amp;quot;Segment{0}_&amp;quot;.format(segment[&amp;quot;index&amp;quot;])&lt;br /&gt;
            matched = re.match(&amp;quot;^&amp;quot;+prefix+&amp;quot;(.+)&amp;quot;, key)&lt;br /&gt;
            if matched:&lt;br /&gt;
                field_name = matched.groups()[0]&lt;br /&gt;
                if field_name == &amp;quot;LabelValue&amp;quot;:&lt;br /&gt;
                    value = output_label_value&lt;br /&gt;
                elif field_name == &amp;quot;Layer&amp;quot;:&lt;br /&gt;
                    # output is a single layer (3D volume)&lt;br /&gt;
                    value = 0&lt;br /&gt;
                else:&lt;br /&gt;
                    value = header[key]&lt;br /&gt;
                output_header[&amp;quot;Segment{0}_&amp;quot;.format(output_segment_index) + field_name] = value&lt;br /&gt;
    # Remove unnecessary 4th dimension (volume is collapsed into 3D)&lt;br /&gt;
    if dims == 4:&lt;br /&gt;
        # Remove &amp;quot;none&amp;quot; from &amp;quot;none (0,1,0) (0,0,-1) (-1.2999954223632812,0,0)&amp;quot;&lt;br /&gt;
        output_header[&amp;quot;space directions&amp;quot;] = output_header[&amp;quot;space directions&amp;quot;][-3:,:]&lt;br /&gt;
        # Remove &amp;quot;list&amp;quot; from &amp;quot;list domain domain domain&amp;quot;&lt;br /&gt;
        output_header[&amp;quot;kinds&amp;quot;] = output_header[&amp;quot;kinds&amp;quot;][-3:]&lt;br /&gt;
    return output_voxels, output_header&lt;br /&gt;
&lt;br /&gt;
# Read segmentation and show some information about segments&lt;br /&gt;
filename = &amp;quot;c:/Users/andra/OneDrive/Projects/SegmentationPynrrd/SegmentationOverlapping.seg.nrrd&amp;quot;&lt;br /&gt;
segmentation_info = read_segmentation_info(filename)&lt;br /&gt;
number_of_segments = len(segmentation_info[&amp;quot;segments&amp;quot;])&lt;br /&gt;
names = segment_names(segmentation_info)&lt;br /&gt;
label0 = segment_from_name(segmentation_info, names[0])[&amp;quot;labelValue&amp;quot;]&lt;br /&gt;
print(&amp;quot;Number of segments: &amp;quot; + str())&lt;br /&gt;
print(&amp;quot;Segment names: &amp;quot; + str(names))&lt;br /&gt;
print(&amp;quot;Label value of {0}: {1}&amp;quot;.format(names[0], label0))&lt;br /&gt;
&lt;br /&gt;
# Extract selected segments with chosen label values&lt;br /&gt;
extracted_filename = &amp;quot;c:/Users/andra/OneDrive/Projects/SegmentationPynrrd/SegmentationExtracted.seg.nrrd&amp;quot;&lt;br /&gt;
voxels, header = nrrd.read(filename)&lt;br /&gt;
segment_list = [(&amp;quot;Segment_1&amp;quot;, 10), (&amp;quot;Segment_3&amp;quot;, 12), (&amp;quot;Segment_4&amp;quot;, 6)]&lt;br /&gt;
extracted_voxels, extracted_header = extract_segments(voxels, header, segmentation_info, segment_list)&lt;br /&gt;
nrrd.write(extracted_filename, extracted_voxels, extracted_header)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Quantifying segments==&lt;br /&gt;
&lt;br /&gt;
===Get centroid of each segment===&lt;br /&gt;
&lt;br /&gt;
Place a markups fiducial point at the centroid of each segment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentationNode = getNode('Segmentation')&lt;br /&gt;
&lt;br /&gt;
# Compute centroids&lt;br /&gt;
import SegmentStatistics&lt;br /&gt;
segStatLogic = SegmentStatistics.SegmentStatisticsLogic()&lt;br /&gt;
segStatLogic.getParameterNode().SetParameter(&amp;quot;Segmentation&amp;quot;, segmentationNode.GetID())&lt;br /&gt;
segStatLogic.getParameterNode().SetParameter(&amp;quot;LabelmapSegmentStatisticsPlugin.centroid_ras.enabled&amp;quot;, str(True))&lt;br /&gt;
segStatLogic.computeStatistics()&lt;br /&gt;
stats = segStatLogic.getStatistics()&lt;br /&gt;
&lt;br /&gt;
# Place a markup point in each centroid&lt;br /&gt;
markupsNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLMarkupsFiducialNode&amp;quot;)&lt;br /&gt;
markupsNode.CreateDefaultDisplayNodes()&lt;br /&gt;
for segmentId in stats['SegmentIDs']:&lt;br /&gt;
    centroid_ras = stats[segmentId,&amp;quot;LabelmapSegmentStatisticsPlugin.centroid_ras&amp;quot;]&lt;br /&gt;
    segmentName = segmentationNode.GetSegmentation().GetSegment(segmentId).GetName()&lt;br /&gt;
    markupsNode.AddFiducialFromArray(centroid_ras, segmentName)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Get size, position, and orientation of each segment===&lt;br /&gt;
&lt;br /&gt;
This example computes oriented bounding box for each segment and displays them using annotation ROI.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentationNode = getNode('Segmentation')&lt;br /&gt;
&lt;br /&gt;
# Compute bounding boxes&lt;br /&gt;
import SegmentStatistics&lt;br /&gt;
segStatLogic = SegmentStatistics.SegmentStatisticsLogic()&lt;br /&gt;
segStatLogic.getParameterNode().SetParameter(&amp;quot;Segmentation&amp;quot;, segmentationNode.GetID())&lt;br /&gt;
segStatLogic.getParameterNode().SetParameter(&amp;quot;LabelmapSegmentStatisticsPlugin.obb_origin_ras.enabled&amp;quot;,str(True))&lt;br /&gt;
segStatLogic.getParameterNode().SetParameter(&amp;quot;LabelmapSegmentStatisticsPlugin.obb_diameter_mm.enabled&amp;quot;,str(True))&lt;br /&gt;
segStatLogic.getParameterNode().SetParameter(&amp;quot;LabelmapSegmentStatisticsPlugin.obb_direction_ras_x.enabled&amp;quot;,str(True))&lt;br /&gt;
segStatLogic.getParameterNode().SetParameter(&amp;quot;LabelmapSegmentStatisticsPlugin.obb_direction_ras_y.enabled&amp;quot;,str(True))&lt;br /&gt;
segStatLogic.getParameterNode().SetParameter(&amp;quot;LabelmapSegmentStatisticsPlugin.obb_direction_ras_z.enabled&amp;quot;,str(True))&lt;br /&gt;
segStatLogic.computeStatistics()&lt;br /&gt;
stats = segStatLogic.getStatistics()&lt;br /&gt;
&lt;br /&gt;
# Draw ROI for each oriented bounding box&lt;br /&gt;
import numpy as np&lt;br /&gt;
for segmentId in stats['SegmentIDs']:&lt;br /&gt;
    # Get bounding box&lt;br /&gt;
    obb_origin_ras = np.array(stats[segmentId,&amp;quot;LabelmapSegmentStatisticsPlugin.obb_origin_ras&amp;quot;])&lt;br /&gt;
    obb_diameter_mm = np.array(stats[segmentId,&amp;quot;LabelmapSegmentStatisticsPlugin.obb_diameter_mm&amp;quot;])&lt;br /&gt;
    obb_direction_ras_x = np.array(stats[segmentId,&amp;quot;LabelmapSegmentStatisticsPlugin.obb_direction_ras_x&amp;quot;])&lt;br /&gt;
    obb_direction_ras_y = np.array(stats[segmentId,&amp;quot;LabelmapSegmentStatisticsPlugin.obb_direction_ras_y&amp;quot;])&lt;br /&gt;
    obb_direction_ras_z = np.array(stats[segmentId,&amp;quot;LabelmapSegmentStatisticsPlugin.obb_direction_ras_z&amp;quot;])&lt;br /&gt;
    # Create ROI&lt;br /&gt;
    segment = segmentationNode.GetSegmentation().GetSegment(segmentId)&lt;br /&gt;
    roi=slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLAnnotationROINode&amp;quot;)&lt;br /&gt;
    roi.SetName(segment.GetName()+' bounding box')&lt;br /&gt;
    roi.SetXYZ(0.0, 0.0, 0.0)&lt;br /&gt;
    roi.SetRadiusXYZ(*(0.5*obb_diameter_mm))&lt;br /&gt;
    # Position and orient ROI using a transform&lt;br /&gt;
    obb_center_ras = obb_origin_ras+0.5*(obb_diameter_mm[0] * obb_direction_ras_x + obb_diameter_mm[1] * obb_direction_ras_y + obb_diameter_mm[2] * obb_direction_ras_z)&lt;br /&gt;
    boundingBoxToRasTransform = np.row_stack((np.column_stack((obb_direction_ras_x, obb_direction_ras_y, obb_direction_ras_z, obb_center_ras)), (0, 0, 0, 1)))&lt;br /&gt;
    boundingBoxToRasTransformMatrix = slicer.util.vtkMatrixFromArray(boundingBoxToRasTransform)&lt;br /&gt;
    transformNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLTransformNode')&lt;br /&gt;
    transformNode.SetAndObserveMatrixTransformToParent(boundingBoxToRasTransformMatrix)&lt;br /&gt;
    roi.SetAndObserveTransformNodeID(transformNode.GetID())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Complete list of available parameters can be obtained by running &amp;lt;code&amp;gt;segStatLogic.getParameterNode().GetParameterNames()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Markups==&lt;br /&gt;
&lt;br /&gt;
===Load markups fiducial list from file===&lt;br /&gt;
&lt;br /&gt;
Markups fiducials can be loaded from file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicer.util.loadMarkupsFiducialList('/path/to/list/F.fcsv')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Adding Fiducials Programatically===&lt;br /&gt;
&lt;br /&gt;
Markups fiducials can be added to the currently active list from the python console by using the following module logic command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicer.modules.markups.logic().AddFiducial()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The command with no arguments will place a new fiducial at the origin. You can also pass it an initial location:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicer.modules.markups.logic().AddFiducial(1.0, -2.0, 3.3)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Add a button to module GUI to activate fiducial placement===&lt;br /&gt;
&lt;br /&gt;
This code snippet creates a toggle button, which activates fiducial placement when pressed (and deactivates when released).&lt;br /&gt;
&lt;br /&gt;
The [http://apidocs.slicer.org/master/classqSlicerMarkupsPlaceWidget.html qSlicerMarkupsPlaceWidget widget] can automatically activate placement of multiple points and can show buttons for deleting points, changing colors, lock, and hide points.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
w=slicer.qSlicerMarkupsPlaceWidget()&lt;br /&gt;
w.setMRMLScene(slicer.mrmlScene)&lt;br /&gt;
markupsNodeID = slicer.modules.markups.logic().AddNewFiducialNode()&lt;br /&gt;
w.setCurrentNode(slicer.mrmlScene.GetNodeByID(markupsNodeID))&lt;br /&gt;
# Hide all buttons and only show place button&lt;br /&gt;
w.buttonsVisible=False&lt;br /&gt;
w.placeButton().show()&lt;br /&gt;
w.show()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Adding Fiducials via Mouse Clicks===&lt;br /&gt;
&lt;br /&gt;
You can also set the mouse mode into Markups fiducial placement by calling:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
placeModePersistence = 1&lt;br /&gt;
slicer.modules.markups.logic().StartPlaceMode(placeModePersistence)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A lower level way to do this is via the selection and interaction nodes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
selectionNode = slicer.mrmlScene.GetNodeByID(&amp;quot;vtkMRMLSelectionNodeSingleton&amp;quot;)&lt;br /&gt;
selectionNode.SetReferenceActivePlaceNodeClassName(&amp;quot;vtkMRMLMarkupsFiducialNode&amp;quot;)&lt;br /&gt;
interactionNode = slicer.mrmlScene.GetNodeByID(&amp;quot;vtkMRMLInteractionNodeSingleton&amp;quot;)&lt;br /&gt;
placeModePersistence = 1&lt;br /&gt;
interactionNode.SetPlaceModePersistence(placeModePersistence)&lt;br /&gt;
# mode 1 is Place, can also be accessed via slicer.vtkMRMLInteractionNode().Place&lt;br /&gt;
interactionNode.SetCurrentInteractionMode(1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To switch back to view transform once you're done placing fiducials:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
interactionNode = slicer.mrmlScene.GetNodeByID(&amp;quot;vtkMRMLInteractionNodeSingleton&amp;quot;)&lt;br /&gt;
interactionNode.SwitchToViewTransformMode()&lt;br /&gt;
# also turn off place mode persistence if required&lt;br /&gt;
interactionNode.SetPlaceModePersistence(0)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Access to Fiducial Properties===&lt;br /&gt;
&lt;br /&gt;
Each vtkMRMLMarkupsFiducialNode has a vector of points in it which can be accessed from python:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fidNode = getNode(&amp;quot;vtkMRMLMarkupsFiducialNode1&amp;quot;)&lt;br /&gt;
n = fidNode.AddFiducial(4.0, 5.5, -6.0)&lt;br /&gt;
fidNode.SetNthFiducialLabel(n, &amp;quot;new label&amp;quot;)&lt;br /&gt;
# each markup is given a unique id which can be accessed from the superclass level&lt;br /&gt;
id1 = fidNode.GetNthMarkupID(n)&lt;br /&gt;
# manually set the position&lt;br /&gt;
fidNode.SetNthFiducialPosition(n, 6.0, 7.0, 8.0)&lt;br /&gt;
# set the label&lt;br /&gt;
fidNode.SetNthFiducialLabel(n, &amp;quot;New label&amp;quot;)&lt;br /&gt;
# set the selected flag, only selected = 1 fiducials will be passed to CLIs&lt;br /&gt;
fidNode.SetNthFiducialSelected(n, 1)&lt;br /&gt;
# set the visibility flag&lt;br /&gt;
fidNode.SetNthFiducialVisibility(n, 0)  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can loop over the fiducials in a list and get the coordinates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fidList = slicer.util.getNode('F')&lt;br /&gt;
numFids = fidList.GetNumberOfFiducials()&lt;br /&gt;
for i in range(numFids):&lt;br /&gt;
  ras = [0,0,0]&lt;br /&gt;
  fidList.GetNthFiducialPosition(i,ras)&lt;br /&gt;
  # the world position is the RAS position with any transform matrices applied&lt;br /&gt;
  world = [0,0,0,0]&lt;br /&gt;
  fidList.GetNthFiducialWorldCoordinates(0,world)&lt;br /&gt;
  print(i,&amp;quot;: RAS =&amp;quot;,ras,&amp;quot;, world =&amp;quot;,world)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also look at the sample code in the [https://github.com/Slicer/Slicer/blob/master/Modules/Scripted/Endoscopy/Endoscopy.py#L287 Endoscopy module] to see how python is used to access fiducials from a scripted module.&lt;br /&gt;
&lt;br /&gt;
==Accessing views, renderers, and cameras==&lt;br /&gt;
&lt;br /&gt;
Iterate through all 3D views in current layout:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
layoutManager = slicer.app.layoutManager()&lt;br /&gt;
for threeDViewIndex in range(layoutManager.threeDViewCount) :&lt;br /&gt;
  view = layoutManager.threeDWidget(threeDViewIndex).threeDView()&lt;br /&gt;
  threeDViewNode = view.mrmlViewNode()&lt;br /&gt;
  cameraNode = slicer.modules.cameras.logic().GetViewActiveCameraNode(threeDViewNode)&lt;br /&gt;
  print('View node for 3D widget ' + str(threeDViewIndex))&lt;br /&gt;
  print('  Name: ' + threeDViewNode .GetName())&lt;br /&gt;
  print('  ID: ' + threeDViewNode .GetID())&lt;br /&gt;
  print('  Camera ID: ' + cameraNode.GetID())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Iterate through all slice views in current layout:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
layoutManager = slicer.app.layoutManager()&lt;br /&gt;
for sliceViewName in layoutManager.sliceViewNames():&lt;br /&gt;
  view = layoutManager.sliceWidget(sliceViewName).sliceView()&lt;br /&gt;
  sliceNode = view.mrmlSliceNode()&lt;br /&gt;
  sliceLogic = slicer.app.applicationLogic().GetSliceLogic(sliceNode)&lt;br /&gt;
  compositeNode = sliceLogic.GetSliceCompositeNode()&lt;br /&gt;
  print('Slice view ' + str(sliceViewName))&lt;br /&gt;
  print('  Name: ' + sliceNode.GetName())&lt;br /&gt;
  print('  ID: ' + sliceNode.GetID())&lt;br /&gt;
  print('  Background volume: {0}'.format(compositeNode.GetBackgroundVolumeID()))&lt;br /&gt;
  print('  Foreground volume: {0} (opacity: {1})'.format(compositeNode.GetForegroundVolumeID(), compositeNode.GetForegroundOpacity()))&lt;br /&gt;
  print('  Label volume: {0} (opacity: {1})'.format(compositeNode.GetLabelVolumeID(), compositeNode.GetLabelOpacity()))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For low-level manipulation of views, it is possible to access VTK render windows, renderers and cameras of views in the current layout.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
renderWindow = view.renderWindow()&lt;br /&gt;
renderers = renderWindow.GetRenderers()&lt;br /&gt;
renderer = renderers.GetItemAsObject(0)&lt;br /&gt;
camera = cameraNode.GetCamera()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hide view controller bars==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicer.app.layoutManager().threeDWidget(0).threeDController().setVisible(False)&lt;br /&gt;
slicer.app.layoutManager().sliceWidget('Red').sliceController().setVisible(False)&lt;br /&gt;
slicer.app.layoutManager().plotWidget(0).plotController().setVisible(False)&lt;br /&gt;
slicer.app.layoutManager().tableWidget(0).tableController().setVisible(False)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Customize widgets in view controller bars==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sliceController = slicer.app.layoutManager().sliceWidget(&amp;quot;Red&amp;quot;).sliceController()&lt;br /&gt;
&lt;br /&gt;
# hide what is not needed&lt;br /&gt;
sliceController.pinButton().hide()&lt;br /&gt;
#sliceController.viewLabel().hide()&lt;br /&gt;
sliceController.fitToWindowToolButton().hide()&lt;br /&gt;
sliceController.sliceOffsetSlider().hide()&lt;br /&gt;
&lt;br /&gt;
# add custom widgets&lt;br /&gt;
myButton = qt.QPushButton(&amp;quot;My custom button&amp;quot;)&lt;br /&gt;
sliceController.barLayout().addWidget(myButton)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Change 3D view background color==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
viewNode = slicer.app.layoutManager().threeDWidget(0).mrmlViewNode()&lt;br /&gt;
viewNode.SetBackgroundColor(1,0,0)&lt;br /&gt;
viewNode.SetBackgroundColor2(1,0,0)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hide Slicer logo from main window (to increase space)==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicer.util.findChild(slicer.util.mainWindow(), 'LogoLabel').visible = False&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Subject hierarchy== &lt;br /&gt;
====Get the pseudo-singleton subject hierarchy node====&lt;br /&gt;
It manages the whole hierarchy and provides functions to access and manipulate&lt;br /&gt;
  shNode = slicer.mrmlScene.GetSubjectHierarchyNode()&lt;br /&gt;
&lt;br /&gt;
====Create subject hierarchy item====&lt;br /&gt;
  # If it is for a data node, it is automatically created, but the create function can be used to set parent:&lt;br /&gt;
  shNode.CreateItem(parentItemID, dataNode)&lt;br /&gt;
  # If it is a hierarchy item without a data node, then the create function must be used:&lt;br /&gt;
  shNode.CreateSubjectItem(parentItemID, name)&lt;br /&gt;
  shNode.CreateFolderItem(parentItemID, name)&lt;br /&gt;
  shNode.CreateHierarchyItem(parentItemID, name, level) # Advanced method to set level attribute manually (usually subject, study, or folder, but it can be a virtual branch for example)&lt;br /&gt;
&lt;br /&gt;
====Get subject hierarchy item====&lt;br /&gt;
Items in subject hierarchy are uniquely identified by integer IDs&lt;br /&gt;
  # Get scene item ID first because it is the root item:&lt;br /&gt;
  sceneItemID = shNode.GetSceneItemID()&lt;br /&gt;
  # Get direct child by name&lt;br /&gt;
  subjectItemID = shNode.GetItemChildWithName(sceneItemID, 'Subject_1')&lt;br /&gt;
  # Get item for data node&lt;br /&gt;
  itemID = shNode.GetItemByDataNode(dataNode)&lt;br /&gt;
  # Get item by UID (such as DICOM)&lt;br /&gt;
  itemID = shNode.GetItemByUID(slicer.vtkMRMLSubjectHierarchyConstants.GetDICOMUIDName(), seriesInstanceUid)&lt;br /&gt;
  itemID = shNode.GetItemByUIDList(slicer.vtkMRMLSubjectHierarchyConstants.GetDICOMInstanceUIDName(), instanceUID)&lt;br /&gt;
  # Invalid item ID for checking validity of a given ID (most functions return the invalid ID when item is not found)&lt;br /&gt;
  invalidItemID = slicer.vtkMRMLSubjectHierarchyNode.GetInvalidItemID()&lt;br /&gt;
&lt;br /&gt;
====Traverse children of a subject hierarchy item====&lt;br /&gt;
  children = vtk.vtkIdList()&lt;br /&gt;
  shNode.GetItemChildren(parent, children)&lt;br /&gt;
  for i in range(children.GetNumberOfIds()):&lt;br /&gt;
    child = children.GetId(i)&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
====Manipulate subject hierarchy item====&lt;br /&gt;
Instead of node operations on the individual subject hierarchy nodes, item operations are performed on the one subject hierarchy node.&lt;br /&gt;
  # Set item name&lt;br /&gt;
  shNode.SetItemName(itemID, 'NewName')&lt;br /&gt;
  # Set item parent (reparent)&lt;br /&gt;
  shNode.SetItemParent(itemID, newParentItemID)&lt;br /&gt;
  # Set visibility of data node associated to an item&lt;br /&gt;
  shNode.SetItemDisplayVisibility(itemID, 1)&lt;br /&gt;
  # Set visibility of whole branch&lt;br /&gt;
  # Note: Folder-type items (fodler, subject, study, etc.) create their own display nodes when show/hiding from UI.&lt;br /&gt;
  #       The displayable managers use SH information to determine visibility of an item, so no need to show/hide individual leaf nodes any more.&lt;br /&gt;
  #       Once the folder display node is created, it can be shown hidden simply using shNode.SetItemDisplayVisibility&lt;br /&gt;
  # From python, this is how to trigger creating a folder display node&lt;br /&gt;
  pluginHandler = slicer.qSlicerSubjectHierarchyPluginHandler().instance()&lt;br /&gt;
  folderPlugin = pluginHandler.pluginByName('Folder')&lt;br /&gt;
  folderPlugin.setDisplayVisibility(folderItemID, 1)&lt;br /&gt;
&lt;br /&gt;
====Filter items in TreeView or ComboBox====&lt;br /&gt;
Displayed items can be filtered using ''setAttributeFilter'' method. An example of the usage can be found in the  [https://github.com/Slicer/Slicer/blob/e66e3b08e35384526528e6ae678e9ec9f079f286/Applications/SlicerApp/Testing/Python/SubjectHierarchyGenericSelfTest.py#L352-L360 unit test]. Modified version here:&lt;br /&gt;
    print(shTreeView.displayedItemCount()) # 5&lt;br /&gt;
    shTreeView.setAttributeFilter('DICOM.Modality') # Nodes must have this attribute&lt;br /&gt;
    print(shTreeView.displayedItemCount()) # 3&lt;br /&gt;
    shTreeView.setAttributeFilter('DICOM.Modality','CT') # Have attribute and equal 'CT'&lt;br /&gt;
    print(shTreeView.displayedItemCount()) # 1&lt;br /&gt;
    shTreeView.removeAttributeFilter()&lt;br /&gt;
    print(shTreeView.displayedItemCount()) # 5&lt;br /&gt;
&lt;br /&gt;
===Listen to subject hierarchy item events===&lt;br /&gt;
The subject hierarchy node sends the node item id as calldata. Item IDs are vtkIdType, which are NOT vtkObjects. You need to use vtk.calldata_type(vtk.VTK_LONG) (otherwise the application crashes).&lt;br /&gt;
  &lt;br /&gt;
  class MyListenerClass(VTKObservationMixin):&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
      VTKObservationMixin.__init__(self)&lt;br /&gt;
      &lt;br /&gt;
      shNode = slicer.vtkMRMLSubjectHierarchyNode.GetSubjectHierarchyNode(slicer.mrmlScene)&lt;br /&gt;
      self.addObserver(shNode, shNode.SubjectHierarchyItemModifiedEvent, self.shItemModifiedEvent)&lt;br /&gt;
     &lt;br /&gt;
    @vtk.calldata_type(vtk.VTK_LONG) &lt;br /&gt;
    def shItemModifiedEvent(self, caller, eventId, callData):&lt;br /&gt;
      print(&amp;quot;SH Node modified&amp;quot;)&lt;br /&gt;
      print(&amp;quot;SH item ID: {0}&amp;quot;.format(callData))&lt;br /&gt;
&lt;br /&gt;
===Subject hierarchy plugin offering view context menu action===&lt;br /&gt;
If an object that supports view context menus (e.g. markups) is right-clicked in a slice or 3D view, it can offer custom actions. Due to internal limitations these plugins must be set up differently, as explained [https://github.com/Slicer/Slicer/blob/master/Modules/Loadable/Annotations/SubjectHierarchyPlugins/AnnotationsSubjectHierarchyPlugin.py#L96-L107 here]. This example makes it easier to create such a plugin.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import vtk, qt, ctk, slicer&lt;br /&gt;
from slicer.ScriptedLoadableModule import *&lt;br /&gt;
from slicer.util import VTKObservationMixin&lt;br /&gt;
&lt;br /&gt;
from SubjectHierarchyPlugins import AbstractScriptedSubjectHierarchyPlugin&lt;br /&gt;
&lt;br /&gt;
class ViewContextMenu(ScriptedLoadableModule):&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Uses ScriptedLoadableModule base class, available at:&lt;br /&gt;
  https://github.com/Slicer/Slicer/blob/master/Base/Python/slicer/ScriptedLoadableModule.py&lt;br /&gt;
  &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  def __init__(self, parent):&lt;br /&gt;
    ScriptedLoadableModule.__init__(self, parent)&lt;br /&gt;
    self.parent.title = &amp;quot;Markup Editor&amp;quot;&lt;br /&gt;
    self.parent.categories = [&amp;quot;SlicerMorph&amp;quot;, &amp;quot;Labs&amp;quot;]&lt;br /&gt;
    self.parent.dependencies = []&lt;br /&gt;
    self.parent.contributors = [&amp;quot;Steve Pieper (Isomics, Inc.)&amp;quot;]&lt;br /&gt;
    self.parent.helpText = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
A tool to manipulate Markups using the Segment Editor as a geometry backend&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    self.parent.helpText += self.getDefaultModuleDocumentationLink()&lt;br /&gt;
    self.parent.acknowledgementText = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
This module was developed by Steve Pieper, Sara Rolfe and Murat Maga,&lt;br /&gt;
through a NSF ABI Development grant, &amp;quot;An Integrated Platform for Retrieval,&lt;br /&gt;
Visualization and Analysis of 3D Morphology From Digital Biological Collections&amp;quot;&lt;br /&gt;
(Award Numbers: 1759883 (Murat Maga), 1759637 (Adam Summers), 1759839 (Douglas Boyer)).&lt;br /&gt;
This file was originally developed by Jean-Christophe Fillion-Robin, Kitware Inc.,&lt;br /&gt;
Andras Lasso, PerkLab, and Steve Pieper, Isomics, Inc.&lt;br /&gt;
and was partially funded by NIH grant 3P41RR013218-12S1.&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    #&lt;br /&gt;
    # register subject hierarchy plugin once app is initialized&lt;br /&gt;
    #&lt;br /&gt;
    def onStartupCompleted():&lt;br /&gt;
        import SubjectHierarchyPlugins&lt;br /&gt;
        from ViewContextMenu import ViewContextMenuSubjectHierarchyPlugin&lt;br /&gt;
        scriptedPlugin = slicer.qSlicerSubjectHierarchyScriptedPlugin(None)&lt;br /&gt;
        scriptedPlugin.setPythonSource(ViewContextMenuSubjectHierarchyPlugin.filePath)&lt;br /&gt;
        pluginHandler = slicer.qSlicerSubjectHierarchyPluginHandler.instance()&lt;br /&gt;
        pluginHandler.registerPlugin(scriptedPlugin)&lt;br /&gt;
        print('ViewContextMenuSubjectHierarchyPlugin loaded')&lt;br /&gt;
    slicer.app.connect(&amp;quot;startupCompleted()&amp;quot;, onStartupCompleted)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class ViewContextMenuSubjectHierarchyPlugin(AbstractScriptedSubjectHierarchyPlugin):&lt;br /&gt;
&lt;br /&gt;
    # Necessary static member to be able to set python source to scripted subject hierarchy plugin&lt;br /&gt;
    filePath = __file__&lt;br /&gt;
&lt;br /&gt;
    def __init__(self, scriptedPlugin):&lt;br /&gt;
        self.viewAction = qt.QAction(f&amp;quot;CUSTOM VIEW ...&amp;quot;, scriptedPlugin)&lt;br /&gt;
        self.viewAction.objectName = 'CustomViewAction'&lt;br /&gt;
        self.viewAction.connect(&amp;quot;triggered()&amp;quot;, self.onViewAction)&lt;br /&gt;
&lt;br /&gt;
    def onViewAction(self):&lt;br /&gt;
        print(f&amp;quot;VIEW ACTION&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def viewContextMenuActions(self):&lt;br /&gt;
        return [self.viewAction]&lt;br /&gt;
&lt;br /&gt;
    def showViewContextMenuActionsForItem(self, itemID, eventData=None):&lt;br /&gt;
        pluginHandler = slicer.qSlicerSubjectHierarchyPluginHandler.instance()&lt;br /&gt;
        pluginLogic = pluginHandler.pluginLogic()&lt;br /&gt;
        menuActions = list(pluginLogic.availableViewMenuActionNames())&lt;br /&gt;
        menuActions.append('CustomViewAction')&lt;br /&gt;
        pluginLogic.setDisplayedViewMenuActionNames(menuActions)&lt;br /&gt;
        self.viewAction.visible = True&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Use whitelist to customize view menu===&lt;br /&gt;
When right-clicking certain types of nodes in the 2D/3D views, a subject hierarchy menu pops up. If menu actions need to be removed, a whitelist can be used to specify the ones that should show up.&lt;br /&gt;
  pluginHandler = slicer.qSlicerSubjectHierarchyPluginHandler.instance()&lt;br /&gt;
  pluginLogic = pluginHandler.pluginLogic()&lt;br /&gt;
  menuActions = pluginLogic.availableViewMenuActionNames()&lt;br /&gt;
  # Returns ('RenamePointAction', 'DeletePointAction', 'ToggleSelectPointAction', 'EditPropertiesAction')&lt;br /&gt;
  newActions = ['RenamePointAction']&lt;br /&gt;
  pluginLogic.setDisplayedViewMenuActionNames(newActions)&lt;br /&gt;
&lt;br /&gt;
==Plotting==&lt;br /&gt;
&lt;br /&gt;
===Slicer plots displayed in view layout===&lt;br /&gt;
&lt;br /&gt;
Create histogram plot of a volume and show it embedded in the view layout. More information: https://www.slicer.org/wiki/Documentation/Nightly/Developers/Plots&lt;br /&gt;
&lt;br /&gt;
====Using &amp;lt;code&amp;gt;slicer.util.plot&amp;lt;/code&amp;gt; utility function====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Get a volume from SampleData and compute its histogram&lt;br /&gt;
import SampleData&lt;br /&gt;
import numpy as np&lt;br /&gt;
volumeNode = SampleData.SampleDataLogic().downloadMRHead()&lt;br /&gt;
histogram = np.histogram(arrayFromVolume(volumeNode), bins=50)&lt;br /&gt;
&lt;br /&gt;
chartNode = slicer.util.plot(histogram, xColumnIndex = 1)&lt;br /&gt;
chartNode.SetYAxisRangeAuto(False)&lt;br /&gt;
chartNode.SetYAxisRange(0, 4e5)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:SlicerPlot.png]]&lt;br /&gt;
&lt;br /&gt;
====Using MRML classes only====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Get a volume from SampleData&lt;br /&gt;
import SampleData&lt;br /&gt;
volumeNode = SampleData.SampleDataLogic().downloadMRHead()&lt;br /&gt;
&lt;br /&gt;
# Compute histogram values&lt;br /&gt;
import numpy as np&lt;br /&gt;
histogram = np.histogram(arrayFromVolume(volumeNode), bins=50)&lt;br /&gt;
&lt;br /&gt;
# Save results to a new table node&lt;br /&gt;
tableNode=slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLTableNode&amp;quot;)&lt;br /&gt;
updateTableFromArray(tableNode, histogram)&lt;br /&gt;
tableNode.GetTable().GetColumn(0).SetName(&amp;quot;Count&amp;quot;)&lt;br /&gt;
tableNode.GetTable().GetColumn(1).SetName(&amp;quot;Intensity&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Create plot&lt;br /&gt;
plotSeriesNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLPlotSeriesNode&amp;quot;, volumeNode.GetName() + ' histogram')&lt;br /&gt;
plotSeriesNode.SetAndObserveTableNodeID(tableNode.GetID())&lt;br /&gt;
plotSeriesNode.SetXColumnName(&amp;quot;Intensity&amp;quot;)&lt;br /&gt;
plotSeriesNode.SetYColumnName(&amp;quot;Count&amp;quot;)&lt;br /&gt;
plotSeriesNode.SetPlotType(plotSeriesNode.PlotTypeScatterBar)&lt;br /&gt;
plotSeriesNode.SetColor(0, 0.6, 1.0)&lt;br /&gt;
&lt;br /&gt;
# Create chart and add plot&lt;br /&gt;
plotChartNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLPlotChartNode&amp;quot;)&lt;br /&gt;
plotChartNode.AddAndObservePlotSeriesNodeID(plotSeriesNode.GetID())&lt;br /&gt;
plotChartNode.YAxisRangeAutoOff()&lt;br /&gt;
plotChartNode.SetYAxisRange(0, 500000)&lt;br /&gt;
&lt;br /&gt;
# Show plot in layout&lt;br /&gt;
slicer.modules.plots.logic().ShowChartInLayout(plotChartNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using matplotlib===&lt;br /&gt;
&lt;br /&gt;
Matplotlib may be used from within Slicer, but the default Tk backend locks up and crashes Slicer. However, Matplotlib may still be used through other backends. More details can be found on the [http://matplotlib.sourceforge.net/ MatPlotLib] pages.&lt;br /&gt;
&lt;br /&gt;
====Non-interactive plot====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
try:&lt;br /&gt;
  import matplotlib&lt;br /&gt;
except ModuleNotFoundError:&lt;br /&gt;
  pip_install('matplotlib')&lt;br /&gt;
  import matplotlib&lt;br /&gt;
&lt;br /&gt;
matplotlib.use('Agg')&lt;br /&gt;
from pylab import *&lt;br /&gt;
&lt;br /&gt;
t1 = arange(0.0, 5.0, 0.1)&lt;br /&gt;
t2 = arange(0.0, 5.0, 0.02)&lt;br /&gt;
t3 = arange(0.0, 2.0, 0.01) &lt;br /&gt;
&lt;br /&gt;
subplot(211)&lt;br /&gt;
plot(t1, cos(2*pi*t1)*exp(-t1), 'bo', t2, cos(2*pi*t2)*exp(-t2), 'k')&lt;br /&gt;
grid(True)&lt;br /&gt;
title('A tale of 2 subplots')&lt;br /&gt;
ylabel('Damped')&lt;br /&gt;
&lt;br /&gt;
subplot(212)&lt;br /&gt;
plot(t3, cos(2*pi*t3), 'r--')&lt;br /&gt;
grid(True)&lt;br /&gt;
xlabel('time (s)')&lt;br /&gt;
ylabel('Undamped')&lt;br /&gt;
savefig('MatplotlibExample.png')&lt;br /&gt;
&lt;br /&gt;
# Static image view&lt;br /&gt;
pm = qt.QPixmap(&amp;quot;MatplotlibExample.png&amp;quot;)&lt;br /&gt;
imageWidget = qt.QLabel()&lt;br /&gt;
imageWidget.setPixmap(pm)&lt;br /&gt;
imageWidget.setScaledContents(True)&lt;br /&gt;
imageWidget.show()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:MatplotlibExample.png]]&lt;br /&gt;
&lt;br /&gt;
====Plot in Slicer Jupyter notebook====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import JupyterNotebooksLib as slicernb&lt;br /&gt;
try:&lt;br /&gt;
  import matplotlib&lt;br /&gt;
except ModuleNotFoundError:&lt;br /&gt;
  pip_install('matplotlib')&lt;br /&gt;
  import matplotlib&lt;br /&gt;
&lt;br /&gt;
matplotlib.use('Agg')&lt;br /&gt;
&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def f(t):&lt;br /&gt;
    s1 = np.cos(2*np.pi*t)&lt;br /&gt;
    e1 = np.exp(-t)&lt;br /&gt;
    return s1 * e1&lt;br /&gt;
&lt;br /&gt;
t1 = np.arange(0.0, 5.0, 0.1)&lt;br /&gt;
t2 = np.arange(0.0, 5.0, 0.02)&lt;br /&gt;
t3 = np.arange(0.0, 2.0, 0.01)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
fig, axs = plt.subplots(2, 1, constrained_layout=True)&lt;br /&gt;
axs[0].plot(t1, f(t1), 'o', t2, f(t2), '-')&lt;br /&gt;
axs[0].set_title('subplot 1')&lt;br /&gt;
axs[0].set_xlabel('distance (m)')&lt;br /&gt;
axs[0].set_ylabel('Damped oscillation')&lt;br /&gt;
fig.suptitle('This is a somewhat long figure title', fontsize=16)&lt;br /&gt;
&lt;br /&gt;
axs[1].plot(t3, np.cos(2*np.pi*t3), '--')&lt;br /&gt;
axs[1].set_xlabel('time (s)')&lt;br /&gt;
axs[1].set_title('subplot 2')&lt;br /&gt;
axs[1].set_ylabel('Undamped')&lt;br /&gt;
&lt;br /&gt;
slicernb.MatplotlibDisplay(matplotlib.pyplot)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:JupyterNotebookMatplotlibExample.png]]&lt;br /&gt;
&lt;br /&gt;
====Interactive plot using wxWidgets GUI toolkit====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
try:&lt;br /&gt;
  import matplotlib&lt;br /&gt;
  import wx&lt;br /&gt;
except ModuleNotFoundError:&lt;br /&gt;
  pip_install('matplotlib wxPython')&lt;br /&gt;
  import matplotlib&lt;br /&gt;
&lt;br /&gt;
# Get a volume from SampleData and compute its histogram&lt;br /&gt;
import SampleData&lt;br /&gt;
import numpy as np&lt;br /&gt;
volumeNode = SampleData.SampleDataLogic().downloadMRHead()&lt;br /&gt;
histogram = np.histogram(arrayFromVolume(volumeNode), bins=50)&lt;br /&gt;
&lt;br /&gt;
# Set matplotlib to use WXAgg backend&lt;br /&gt;
import matplotlib&lt;br /&gt;
matplotlib.use('WXAgg')&lt;br /&gt;
&lt;br /&gt;
# Show an interactive plot&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
fig, ax = plt.subplots()&lt;br /&gt;
ax.plot(histogram[1][1:], histogram[0].astype(float))&lt;br /&gt;
ax.grid(True)&lt;br /&gt;
ax.set_ylim((0, 4e5))&lt;br /&gt;
plt.show(block=False)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:InteractiveMatplotlibExample.png]]&lt;br /&gt;
&lt;br /&gt;
==Execute external applications==&lt;br /&gt;
&lt;br /&gt;
How to run external applications from Slicer.&lt;br /&gt;
&lt;br /&gt;
===Run process in default environment===&lt;br /&gt;
&lt;br /&gt;
When a process is launched from Slicer then by default Slicer's ITK, VTK, Qt, etc. libraries are used. If an external application has its own version of these libraries, then the application is expected to crash. To prevent crashing, the application must be run in the environment where Slicer started up (without all Slicer-specific library paths). This startup environment can be retrieved using ''slicer.util.startupEnvironment()''.&lt;br /&gt;
&lt;br /&gt;
Example: run Python3 script from Slicer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
command_to_execute = [&amp;quot;/usr/bin/python3&amp;quot;, &amp;quot;-c&amp;quot;, &amp;quot;print('hola')&amp;quot;]&lt;br /&gt;
from subprocess import check_output&lt;br /&gt;
check_output(&lt;br /&gt;
  command_to_execute, &lt;br /&gt;
  env=slicer.util.startupEnvironment()&lt;br /&gt;
  )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'hola\n'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On some systems, ''shell=True'' must be specified as well.&lt;br /&gt;
&lt;br /&gt;
==Manage extensions==&lt;br /&gt;
&lt;br /&gt;
===Download and install extension===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
extensionName = 'SlicerIGT'&lt;br /&gt;
em = slicer.app.extensionsManagerModel()&lt;br /&gt;
if not em.isExtensionInstalled(extensionName):&lt;br /&gt;
    extensionMetaData = em.retrieveExtensionMetadataByName(extensionName)&lt;br /&gt;
    url = em.serverUrl().toString()+'/download/item/'+extensionMetaData['item_id']&lt;br /&gt;
    extensionPackageFilename = slicer.app.temporaryPath+'/'+extensionMetaData['md5']&lt;br /&gt;
    slicer.util.downloadFile(url, extensionPackageFilename)&lt;br /&gt;
    em.installExtension(extensionPackageFilename)&lt;br /&gt;
    slicer.util.restart()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Install a module directly from a git repository ===&lt;br /&gt;
This can be useful for sharing code in development without requiring a restart of Slicer.&lt;br /&gt;
&lt;br /&gt;
https://gist.github.com/pieper/a9c0ba57de3833c9f5aea68247bda597&lt;/div&gt;</summary>
		<author><name>Hherhold</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/ScriptRepository&amp;diff=63477</id>
		<title>Documentation/Nightly/ScriptRepository</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/ScriptRepository&amp;diff=63477"/>
		<updated>2020-12-02T18:05:42Z</updated>

		<summary type="html">&lt;p&gt;Hherhold: /* Better fix using pre-formatted tags */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Community-contributed modules=  &lt;br /&gt;
&lt;br /&gt;
The examples in this section are [[Documentation/{{documentation/version}}/Developers/Modules#Scripted_Modules| Scripted Modules]] that provide a user interface in the module panel along with specialized implementation logic.&lt;br /&gt;
&lt;br /&gt;
Usage: save the .py file to a directory, add the directory to the additional module paths in the Slicer application settings (choose in the menu: Edit / Application settings, click Modules, click &amp;gt;&amp;gt; next to Additional module paths, click Add, and choose the .py file's location).&lt;br /&gt;
&lt;br /&gt;
More information about python scripted modules and more usage examples can be found in the[[Documentation/{{documentation/version}}/Developers/Python_scripting | Python scripting]] wiki page.&lt;br /&gt;
&lt;br /&gt;
==Filters==&lt;br /&gt;
&lt;br /&gt;
*[https://raw.github.com/pieper/VolumeMasker/master/VolumeMasker.py VolumeMasker.py]: Update a target volume with the results of setting all input volume voxels to 0 except for those that correspond to a selected label value in an input label map (Used for example in the volume rendering in [https://www.youtube.com/watch?v=dfu2gugHLHs this video).&lt;br /&gt;
&lt;br /&gt;
==DICOM==&lt;br /&gt;
&lt;br /&gt;
*[https://gist.github.com/pieper/6186477 dicom header browser] to easily scroll through dicom files using dcmdump.&lt;br /&gt;
*[https://github.com/SlicerRt/SlicerRT/tree/master/BatchProcessing SlicerRT batch processing] to batch convert RT structure sets to labelmap NRRD files.&lt;br /&gt;
&lt;br /&gt;
==Informatics==&lt;br /&gt;
&lt;br /&gt;
*[https://gist.github.com/lassoan/bf0954d93cacc8cbe27cd4a3ad503f2f MarkupsInfo.py]: Compute the total length between all the points of a markup list.&lt;br /&gt;
*[https://github.com/lassoan/SlicerLineProfile/blob/master/LineProfile/LineProfile.py LineProfile.py]: Compute intensity profile in a volume along a line.&lt;br /&gt;
&lt;br /&gt;
=Community-contributed examples=&lt;br /&gt;
&lt;br /&gt;
Usage: Copy-paste the shown code lines or linked .py file contents into Python console in Slicer.  Or save them to a file and run them using execfile.&lt;br /&gt;
&lt;br /&gt;
==Get node object from the scene from node name or ID==&lt;br /&gt;
&lt;br /&gt;
Examples in the script repository commonly use &amp;lt;code&amp;gt;slicer.util.getNode()&amp;lt;/code&amp;gt; function for getting a node object from the scene. This method is only recommended for testing and interactive debugging. &lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;slicer.util.getNode()&amp;lt;/code&amp;gt; is recommended **only for interactive debugging** in the Python console/Jupyter notebook&lt;br /&gt;
** its input is intentionally defined vaguely (it can be either node ID or name and you can use wildcards such as &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;), which is good because it make it simpler to use, but the uncertain behavior is not good for general-purpose use in a module&lt;br /&gt;
** throws an exception so that the developer knows immediately that there was a typo or other unexpected error&lt;br /&gt;
* &amp;lt;code&amp;gt;slicer.mrmlScene.GetNodeByID()&amp;lt;/code&amp;gt; is optimized for usage in modules:&lt;br /&gt;
** its behavior is more predictable: it only accepts node ID as input. &amp;lt;code&amp;gt;slicer.mrmlScene.GetFirstNodeByName()&amp;lt;/code&amp;gt; can be used to get a node by its name, but since multiple nodes in the scene can have the same name, it is not recommended to keep reference to a node by its name.&lt;br /&gt;
** if node is not found it returns &amp;lt;code&amp;gt;None&amp;lt;/code&amp;gt; (instead of throwing an exception), because this is often not considered an error in module code (it is just used to check existence of a node) and using return value for not-found nodes allows simpler syntax&lt;br /&gt;
&lt;br /&gt;
==Capture==&lt;br /&gt;
&lt;br /&gt;
*Capture the full Slicer screen and save it into a file&lt;br /&gt;
&lt;br /&gt;
  img = qt.QPixmap.grabWidget(slicer.util.mainWindow()).toImage()&lt;br /&gt;
  img.save('c:/tmp/test.png')&lt;br /&gt;
&lt;br /&gt;
*Capture all the views save it into a file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import ScreenCapture&lt;br /&gt;
cap = ScreenCapture.ScreenCaptureLogic()&lt;br /&gt;
cap.showViewControllers(False)&lt;br /&gt;
cap.captureImageFromView(None,'c:/tmp/test.png')&lt;br /&gt;
cap.showViewControllers(True)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Capture a single view:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
viewNodeID = 'vtkMRMLViewNode1'&lt;br /&gt;
import ScreenCapture&lt;br /&gt;
cap = ScreenCapture.ScreenCaptureLogic()&lt;br /&gt;
view = cap.viewFromNode(slicer.mrmlScene.GetNodeByID(viewNodeID))&lt;br /&gt;
cap.captureImageFromView(view,'c:/tmp/test.png')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Common values for viewNodeID: vtkMRMLSliceNodeRed, vtkMRMLSliceNodeYellow, vtkMRMLSliceNodeGreen, vtkMRMLViewNode1, vtkMRMLViewNode2. &lt;br /&gt;
The ScreenCapture module can also create video animations of rotating views, slice sweeps, etc.&lt;br /&gt;
&lt;br /&gt;
*Capture a slice view sweep into a series of PNG files - for example, Red slice view, 30 images, from position -125.0 to 75.0, into c:/tmp folder, with name image_00001.png, image_00002.png, ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import ScreenCapture&lt;br /&gt;
ScreenCapture.ScreenCaptureLogic().captureSliceSweep(getNode('vtkMRMLSliceNodeRed'), -125.0, 75.0, 30, &amp;quot;c:/tmp&amp;quot;, &amp;quot;image_%05d.png&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Capture 3D view into PNG file with transparent background&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
renderWindow = slicer.app.layoutManager().threeDWidget(0).threeDView().renderWindow()&lt;br /&gt;
renderWindow.SetAlphaBitPlanes(1)&lt;br /&gt;
wti = vtk.vtkWindowToImageFilter()&lt;br /&gt;
wti.SetInputBufferTypeToRGBA()&lt;br /&gt;
wti.SetInput(renderWindow)&lt;br /&gt;
writer = vtk.vtkPNGWriter()&lt;br /&gt;
writer.SetFileName(&amp;quot;c:/tmp/screenshot.png&amp;quot;)&lt;br /&gt;
writer.SetInputConnection(wti.GetOutputPort())&lt;br /&gt;
writer.Write()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Launching Slicer==&lt;br /&gt;
&lt;br /&gt;
*How to open an .mrb file with Slicer at the command line?&lt;br /&gt;
&lt;br /&gt;
  Slicer.exe --python-code &amp;quot;slicer.util.loadScene( 'f:/2013-08-23-Scene.mrb' )&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*How to run a script in the Slicer environment in batch mode (without showing any graphical user interface)?&lt;br /&gt;
&lt;br /&gt;
  Slicer.exe --python-code &amp;quot;doSomething; doSomethingElse; etc.&amp;quot; --testing --no-splash --no-main-window&lt;br /&gt;
&lt;br /&gt;
==Load volume from file==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
loadedVolumeNode = slicer.util.loadVolume('c:/Users/abc/Documents/MRHead.nrrd')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Additional options may be specified in &amp;lt;code&amp;gt;properties&amp;lt;/code&amp;gt; argument. For example, load an image stack by disabling &amp;lt;code&amp;gt;singleFile&amp;lt;/code&amp;gt; option:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
loadedVolumeNode = slicer.util.loadVolume('c:/Users/abc/Documents/SomeImage/file001.png', {'singleFile': False})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get a MRML node in the scene based on the node name and call methods of that object. For the MRHead sample data:&lt;br /&gt;
&lt;br /&gt;
  vol=slicer.util.getNode('MR*')&lt;br /&gt;
  vol.GetImageData().GetDimensions()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Load volume from URL==&lt;br /&gt;
&lt;br /&gt;
Download a volume from a URL and load it into the scene using the code snippet below. Downloaded data is temporarily preserved in the application's cache folder and if the checksum of the already downloaded data matches the specified checksum (&amp;lt;algo&amp;gt;:&amp;lt;digest&amp;gt;) then the file is retrieved from the cache instead of being downloaded again. To compute digest with algo ''SHA256'', you can run &amp;lt;code&amp;gt;slicer.util.computeChecksum(&amp;quot;SHA256&amp;quot;, &amp;quot;path/to/file&amp;quot;)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import SampleData&lt;br /&gt;
sampleDataLogic = SampleData.SampleDataLogic()&lt;br /&gt;
loadedNodes = sampleDataLogic.downloadFromURL(&lt;br /&gt;
    nodeNames='MRHead',&lt;br /&gt;
    fileNames='MR-head25.nrrd',&lt;br /&gt;
    uris='https://github.com/Slicer/SlicerTestingData/releases/download/SHA256/cc211f0dfd9a05ca3841ce1141b292898b2dd2d3f08286affadf823a7e58df93',&lt;br /&gt;
    checksums='SHA256:cc211f0dfd9a05ca3841ce1141b292898b2dd2d3f08286affadf823a7e58df93')[0]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With interruptible progress reporting using a progress bar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import SampleData&lt;br /&gt;
&lt;br /&gt;
def reportProgress(msg, level=None):&lt;br /&gt;
    # Print progress in the console&lt;br /&gt;
    print(&amp;quot;Loading... {0}%&amp;quot;.format(sampleDataLogic.downloadPercent))&lt;br /&gt;
    # Abort download if cancel is clicked in progress bar&lt;br /&gt;
    if slicer.progressWindow.wasCanceled:&lt;br /&gt;
        raise Exception('download aborted')&lt;br /&gt;
    # Update progress window&lt;br /&gt;
    slicer.progressWindow.show()&lt;br /&gt;
    slicer.progressWindow.activateWindow()&lt;br /&gt;
    slicer.progressWindow.setValue(int(sampleDataLogic.downloadPercent))&lt;br /&gt;
    slicer.progressWindow.setLabelText(&amp;quot;Downloading...&amp;quot;)&lt;br /&gt;
    # Process events to allow screen to refresh&lt;br /&gt;
    slicer.app.processEvents() &lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    volumeNode = None&lt;br /&gt;
    slicer.progressWindow = slicer.util.createProgressDialog()&lt;br /&gt;
    sampleDataLogic = SampleData.SampleDataLogic()&lt;br /&gt;
    sampleDataLogic.logMessage = reportProgress&lt;br /&gt;
    loadedNodes = sampleDataLogic.downloadFromURL(&lt;br /&gt;
        nodeNames='MRHead',&lt;br /&gt;
        fileNames='MR-head25.nrrd',&lt;br /&gt;
        uris='https://github.com/Slicer/SlicerTestingData/releases/download/SHA256/cc211f0dfd9a05ca3841ce1141b292898b2dd2d3f08286affadf823a7e58df93',&lt;br /&gt;
        checksums='SHA256:cc211f0dfd9a05ca3841ce1141b292898b2dd2d3f08286affadf823a7e58df93')&lt;br /&gt;
    volumeNode = loadedNodes[0]&lt;br /&gt;
finally:&lt;br /&gt;
    slicer.progressWindow.close()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Show volume rendering automatically when a volume is loaded==&lt;br /&gt;
&lt;br /&gt;
To show volume rendering of a volume automatically when it is loaded, add the lines below to your &lt;br /&gt;
[[Documentation/{{documentation/version}}/Developers/Python_scripting#How_to_systematically_execute_custom_python_code_at_startup_.3F|.slicerrc file]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@vtk.calldata_type(vtk.VTK_OBJECT)&lt;br /&gt;
def onNodeAdded(caller, event, calldata):&lt;br /&gt;
  node = calldata&lt;br /&gt;
  if isinstance(node, slicer.vtkMRMLVolumeNode):&lt;br /&gt;
    # Call showVolumeRendering using a timer instead of calling it directly&lt;br /&gt;
    # to allow the volume loading to fully complete.&lt;br /&gt;
    qt.QTimer.singleShot(0, lambda: showVolumeRendering(node))&lt;br /&gt;
&lt;br /&gt;
def showVolumeRendering(volumeNode):&lt;br /&gt;
  print(&amp;quot;Show volume rendering of node &amp;quot;+volumeNode.GetName())&lt;br /&gt;
  volRenLogic = slicer.modules.volumerendering.logic()&lt;br /&gt;
  displayNode = volRenLogic.CreateDefaultVolumeRenderingNodes(volumeNode)&lt;br /&gt;
  displayNode.SetVisibility(True)&lt;br /&gt;
  scalarRange = volumeNode.GetImageData().GetScalarRange()&lt;br /&gt;
  if scalarRange[1]-scalarRange[0] &amp;lt; 1500:&lt;br /&gt;
    # small dynamic range, probably MRI&lt;br /&gt;
    displayNode.GetVolumePropertyNode().Copy(volRenLogic.GetPresetByName('MR-Default'))&lt;br /&gt;
  else:&lt;br /&gt;
    # larger dynamic range, probably CT&lt;br /&gt;
    displayNode.GetVolumePropertyNode().Copy(volRenLogic.GetPresetByName('CT-Chest-Contrast-Enhanced'))&lt;br /&gt;
    &lt;br /&gt;
slicer.mrmlScene.AddObserver(slicer.vtkMRMLScene.NodeAddedEvent, onNodeAdded)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Automatically load volumes that are copied into a folder==&lt;br /&gt;
&lt;br /&gt;
This example shows how to implement a simple background task by using a timer. The background task is to check for any new volume files in folder and if there is any then automatically load it.&lt;br /&gt;
&lt;br /&gt;
There are more efficient methods for file system monitoring or exchanging image data in real-time (for example, using OpenIGTLink), the example below is just for demonstration purposes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
incomingVolumeFolder = &amp;quot;c:/tmp/incoming&amp;quot;&lt;br /&gt;
incomingVolumesProcessed = []&lt;br /&gt;
&lt;br /&gt;
def checkForNewVolumes():&lt;br /&gt;
  # Check if there is a new file in the &lt;br /&gt;
  from os import listdir&lt;br /&gt;
  from os.path import isfile, join&lt;br /&gt;
  for f in listdir(incomingVolumeFolder):&lt;br /&gt;
    if f in incomingVolumesProcessed:&lt;br /&gt;
      # this is an incoming file, it was already there&lt;br /&gt;
      continue&lt;br /&gt;
    filePath = join(incomingVolumeFolder, f)&lt;br /&gt;
    if not isfile(filePath):&lt;br /&gt;
      # ignore directories&lt;br /&gt;
      continue&lt;br /&gt;
    logging.info(&amp;quot;Loading new file: &amp;quot;+f)&lt;br /&gt;
    incomingVolumesProcessed.append(f)&lt;br /&gt;
    slicer.util.loadVolume(filePath)&lt;br /&gt;
  # Check again in 3000ms&lt;br /&gt;
  qt.QTimer.singleShot(3000, checkForNewVolumes)&lt;br /&gt;
&lt;br /&gt;
# Start monitoring&lt;br /&gt;
checkForNewVolumes()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==DICOM==&lt;br /&gt;
===How to load DICOM files into the scene from a folder===&lt;br /&gt;
&lt;br /&gt;
This code loads all DICOM objects into the scene from a file folder. All the registered plugins are evaluated and the one with the highest confidence will be used to load the data. Files are imported into a temporary DICOM database, so the current Slicer DICOM database is not impacted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dicomDataDir = &amp;quot;c:/my/folder/with/dicom-files&amp;quot;  # input folder with DICOM files&lt;br /&gt;
loadedNodeIDs = []  # this list will contain the list of all loaded node IDs&lt;br /&gt;
  &lt;br /&gt;
from DICOMLib import DICOMUtils&lt;br /&gt;
with DICOMUtils.TemporaryDICOMDatabase() as db:&lt;br /&gt;
  DICOMUtils.importDicom(dicomDataDir, db)&lt;br /&gt;
  patientUIDs = db.patients()&lt;br /&gt;
  for patientUID in patientUIDs:&lt;br /&gt;
    loadedNodeIDs.extend(DICOMUtils.loadPatientByUID(patientUID))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How to import DICOM files into the application's DICOM database===&lt;br /&gt;
&lt;br /&gt;
This code snippet uses Slicer DICOM browser built-in indexer to import DICOM files into the database. Images are not loaded into the scene, but they show up in the DICOM browser. After import, data sets can be loaded using DICOMUtils functions (e.g., loadPatientByUID) - see above for an example.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# instantiate a new DICOM browser&lt;br /&gt;
slicer.util.selectModule(&amp;quot;DICOM&amp;quot;)&lt;br /&gt;
dicomBrowser = slicer.modules.DICOMWidget.browserWidget.dicomBrowser&lt;br /&gt;
# use dicomBrowser.ImportDirectoryCopy to make a copy of the files (useful for importing data from removable storage)&lt;br /&gt;
dicomBrowser.importDirectory(dicomFilesDirectory, dicomBrowser.ImportDirectoryAddLink)&lt;br /&gt;
# wait for import to finish before proceeding (optional, if removed then import runs in the background)&lt;br /&gt;
dicomBrowser.waitForImportFinished()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How to import DICOM files using DICOMweb===&lt;br /&gt;
&lt;br /&gt;
Download and import DICOM data set using DICOMweb from [https://kheops.online/ Kheops], Google Health API, etc.&lt;br /&gt;
&lt;br /&gt;
How to obtain accessToken:&lt;br /&gt;
* Google Cloud: Execute &amp;lt;code&amp;gt;gcloud auth print-access-token&amp;lt;/code&amp;gt; once you have logged in&lt;br /&gt;
* Kheops: create an album, create a sharing link (somethin like &amp;lt;code&amp;gt;https://demo.kheops.online/view/TfYXwbKAW7JYbAgZ7MyISf&amp;lt;/code&amp;gt;), the token is the string after the last slash&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicer.util.selectModule(&amp;quot;DICOM&amp;quot;)  # ensure DICOM database is initialized and &lt;br /&gt;
slicer.app.processEvents()&lt;br /&gt;
from DICOMLib import DICOMUtils&lt;br /&gt;
DICOMUtils.importFromDICOMWeb(&lt;br /&gt;
    dicomWebEndpoint=&amp;quot;http://demo.kheops.online/api&amp;quot;,&lt;br /&gt;
    studyInstanceUID=&amp;quot;1.3.6.1.4.1.14519.5.2.1.8421.4009.985792766370191766692237040819&amp;quot;,&lt;br /&gt;
    accessToken=&amp;quot;TfYXwbKAW7JYbAgZ7MyISf&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How to access top level tags of DICOM images imported into Slicer? For example, to print the first patient's first study's first series' &amp;quot;0020,0032&amp;quot; field:===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
db=slicer.dicomDatabase&lt;br /&gt;
patientList=db.patients()&lt;br /&gt;
studyList=db.studiesForPatient(patientList[0])&lt;br /&gt;
seriesList=db.seriesForStudy(studyList[0])&lt;br /&gt;
fileList=db.filesForSeries(seriesList[0])&lt;br /&gt;
# Note, fileValue accesses the database of cached top level tags&lt;br /&gt;
# (nested tags are not included)&lt;br /&gt;
print(db.fileValue(fileList[0],'0020,0032'))&lt;br /&gt;
# Get tag group,number from dicom dictionary&lt;br /&gt;
import pydicom as dicom&lt;br /&gt;
tagName = &amp;quot;StudyDate&amp;quot;&lt;br /&gt;
tagStr = str(dicom.tag.Tag(tagName))[1:-1].replace(' ','')&lt;br /&gt;
print(db.fileValue(fileList[0],tagStr))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How to access DICOM tags nested in a sequence===&lt;br /&gt;
  db=slicer.dicomDatabase&lt;br /&gt;
  patientList=db.patients()&lt;br /&gt;
  studyList=db.studiesForPatient(patientList[0])&lt;br /&gt;
  seriesList=db.seriesForStudy(studyList[0])&lt;br /&gt;
  fileList=db.filesForSeries(seriesList[0])&lt;br /&gt;
  # use pydicom to access the full header, which requires&lt;br /&gt;
  # re-reading the dataset instead of using the database cache&lt;br /&gt;
  import pydicom&lt;br /&gt;
  pydicom.dcmread(fileList[0])&lt;br /&gt;
  ds.CTExposureSequence[0].ExposureModulationType&lt;br /&gt;
&lt;br /&gt;
===How to access tag of a volume loaded from DICOM? For example, get the patient position stored in a volume:===&lt;br /&gt;
  volumeName='2: ENT IMRT'&lt;br /&gt;
  n=slicer.util.getNode(volumeName)&lt;br /&gt;
  instUids=n.GetAttribute('DICOM.instanceUIDs').split()&lt;br /&gt;
  filename=slicer.dicomDatabase.fileForInstance(instUids[0])&lt;br /&gt;
  print(slicer.dicomDatabase.fileValue(filename,'0018,5100'))&lt;br /&gt;
&lt;br /&gt;
===How to access tag of an item in the Subject Hierachy tree? For example, get the content time tag of a structure set:===&lt;br /&gt;
  rtStructName = '3: RTSTRUCT: PROS'&lt;br /&gt;
  rtStructNode = slicer.util.getNode(rtStructName)&lt;br /&gt;
  shNode = slicer.vtkMRMLSubjectHierarchyNode.GetSubjectHierarchyNode(slicer.mrmlScene)&lt;br /&gt;
  rtStructShItemID = shNode.GetItemByDataNode(rtStructNode)&lt;br /&gt;
  ctSliceInstanceUids = shNode.GetItemAttribute(rtStructShItemID, 'DICOM.ReferencedInstanceUIDs').split()&lt;br /&gt;
  filename = slicer.dicomDatabase.fileForInstance(ctSliceInstanceUids[0])&lt;br /&gt;
  print(slicer.dicomDatabase.fileValue(filename,'0008,0033'))&lt;br /&gt;
&lt;br /&gt;
===How to get path and filename of a loaded DICOM volume?===&lt;br /&gt;
  def pathFromNode(node):&lt;br /&gt;
    storageNode=node.GetStorageNode()&lt;br /&gt;
    if storageNode is not None: # loaded via drag-drop&lt;br /&gt;
        filepath=storageNode.GetFullNameFromFileName()&lt;br /&gt;
    else: # loaded via DICOM browser&lt;br /&gt;
        instanceUIDs=node.GetAttribute('DICOM.instanceUIDs').split()&lt;br /&gt;
        filepath=slicer.dicomDatabase.fileForInstance(instUids[0])&lt;br /&gt;
    return filepath&lt;br /&gt;
  &lt;br /&gt;
  # example:&lt;br /&gt;
  node=slicer.util.getNode('volume1')&lt;br /&gt;
  path=self.pathFromNode(node)&lt;br /&gt;
  print(&amp;quot;DICOM path=%s&amp;quot; % path)&lt;br /&gt;
&lt;br /&gt;
===How can I convert DICOM to NRRD on the command line?===&lt;br /&gt;
&lt;br /&gt;
 /Applications/Slicer-4.6.2.app/Contents/MacOS/Slicer --no-main-window --python-code &amp;quot;node=slicer.util.loadVolume('/tmp/series/im0.dcm'); slicer.util.saveNode(node, '/tmp/output.nrrd'); exit()&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The same can be done on windows by using the top level Slicer.exe.  Be sure to use forward slashes in the pathnames within quotes on the command line.&lt;br /&gt;
&lt;br /&gt;
===Export a volume to DICOM file format===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
volumeNode = getNode('CTChest')&lt;br /&gt;
outputFolder = &amp;quot;c:/tmp/dicom-output&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Create patient and study and put the volume under the study&lt;br /&gt;
shNode = slicer.vtkMRMLSubjectHierarchyNode.GetSubjectHierarchyNode(slicer.mrmlScene)&lt;br /&gt;
patientItemID = shNode.CreateSubjectItem(shNode.GetSceneItemID(), &amp;quot;test patient&amp;quot;)&lt;br /&gt;
studyItemID = shNode.CreateStudyItem(patientItemID, &amp;quot;test study&amp;quot;)&lt;br /&gt;
volumeShItemID = shNode.GetItemByDataNode(volumeNode)&lt;br /&gt;
shNode.SetItemParent(volumeShItemID, studyItemID)&lt;br /&gt;
&lt;br /&gt;
import DICOMScalarVolumePlugin&lt;br /&gt;
exporter = DICOMScalarVolumePlugin.DICOMScalarVolumePluginClass()&lt;br /&gt;
exportables = exporter.examineForExport(volumeShItemID)&lt;br /&gt;
for exp in exportables:&lt;br /&gt;
  exp.directory = outputFolder&lt;br /&gt;
&lt;br /&gt;
exporter.export(exportables)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Export a segmentation to DICOM segmentation object===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentationNode = ...&lt;br /&gt;
referenceVolumeNode = ...&lt;br /&gt;
outputFolder = &amp;quot;c:/tmp/dicom-output&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Associate segmentation node with a reference volume node&lt;br /&gt;
shNode = slicer.vtkMRMLSubjectHierarchyNode.GetSubjectHierarchyNode(slicer.mrmlScene)&lt;br /&gt;
referenceVolumeShItem = shNode.GetItemByDataNode(referenceVolumeNode)&lt;br /&gt;
studyShItem = shNode.GetItemParent(referenceVolumeShItem)&lt;br /&gt;
segmentationShItem = shNode.GetItemByDataNode(segmentationNode)&lt;br /&gt;
shNode.SetItemParent(segmentationShItem, studyShItem)&lt;br /&gt;
&lt;br /&gt;
# Export to DICOM&lt;br /&gt;
import DICOMSegmentationPlugin&lt;br /&gt;
exporter = DICOMSegmentationPlugin.DICOMSegmentationPluginClass()&lt;br /&gt;
exportables = exporter.examineForExport(segmentationShItem)&lt;br /&gt;
for exp in exportables:&lt;br /&gt;
    exp.directory = outputFolder&lt;br /&gt;
&lt;br /&gt;
exporter.export(exportables)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Customize table columns in DICOM browser===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Get browser and database&lt;br /&gt;
dicomBrowser = slicer.modules.dicom.widgetRepresentation().self().browserWidget.dicomBrowser&lt;br /&gt;
dicomDatabase = dicomBrowser.database()&lt;br /&gt;
&lt;br /&gt;
# Print list of available columns&lt;br /&gt;
print(dicomDatabase.patientFieldNames)&lt;br /&gt;
print(dicomDatabase.studyFieldNames)&lt;br /&gt;
print(dicomDatabase.seriesFieldNames)&lt;br /&gt;
&lt;br /&gt;
# Change column order&lt;br /&gt;
dicomDatabase.setWeightForField('Series', 'SeriesDescription', 7)&lt;br /&gt;
dicomDatabase.setWeightForField('Studies', 'StudyDescription', 6)&lt;br /&gt;
# Change column visibility&lt;br /&gt;
dicomDatabase.setVisibilityForField('Patients', 'PatientsBirthDate', False)&lt;br /&gt;
dicomDatabase.setVisibilityForField('Patients', 'PatientsComments', True)&lt;br /&gt;
dicomDatabase.setWeightForField('Patients', 'PatientsComments', 8)&lt;br /&gt;
# Change column name&lt;br /&gt;
dicomDatabase.setDisplayedNameForField('Series', 'DisplayedCount', 'Number of images')&lt;br /&gt;
# Customize table manager in DICOM browser&lt;br /&gt;
dicomTableManager = dicomBrowser.dicomTableManager()&lt;br /&gt;
dicomTableManager.selectionMode = qt.QAbstractItemView.SingleSelection&lt;br /&gt;
dicomTableManager.autoSelectSeries = False&lt;br /&gt;
&lt;br /&gt;
# Force database views update&lt;br /&gt;
dicomDatabase.closeDatabase()&lt;br /&gt;
dicomDatabase.openDatabase(dicomBrowser.database().databaseFilename)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Toolbar functions==&lt;br /&gt;
&lt;br /&gt;
*How to turn on slice intersections in the crosshair menu on the toolbar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
viewNodes = slicer.util.getNodesByClass('vtkMRMLSliceCompositeNode')&lt;br /&gt;
for viewNode in viewNodes:&lt;br /&gt;
  viewNode.SetSliceIntersectionVisibility(1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
How to find similar functions? For this one I searched for &amp;quot;slice intersections&amp;quot; text in the whole slicer source code, found that the function is implemented in Base\QTGUI\qSlicerViewersToolBar.cxx, then translated the qSlicerViewersToolBarPrivate::setSliceIntersectionVisible(bool visible) method to Python.&lt;br /&gt;
&lt;br /&gt;
==Switch to a different module==&lt;br /&gt;
&lt;br /&gt;
This utility function can be used to open a different module:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicer.util.selectModule('DICOM')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Manipulating objects in the slice viewer==&lt;br /&gt;
&lt;br /&gt;
*How to define/edit a circular region of interest in a slice viewer?&lt;br /&gt;
&lt;br /&gt;
Drop two markup points on a slice view and copy-paste the code below into the Python console. After this, as you move the markups you’ll see a circle following the markups.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Update the sphere from the fiducial points&lt;br /&gt;
def UpdateSphere(param1, param2):  &lt;br /&gt;
  import math&lt;br /&gt;
  centerPointCoord = [0.0, 0.0, 0.0]&lt;br /&gt;
  markups.GetNthFiducialPosition(0,centerPointCoord)&lt;br /&gt;
  circumferencePointCoord = [0.0, 0.0, 0.0]&lt;br /&gt;
  markups.GetNthFiducialPosition(1,circumferencePointCoord)&lt;br /&gt;
  sphere.SetCenter(centerPointCoord)&lt;br /&gt;
  radius=math.sqrt((centerPointCoord[0]-circumferencePointCoord[0])**2+(centerPointCoord[1]-circumferencePointCoord[1])**2+(centerPointCoord[2]-circumferencePointCoord[2])**2)&lt;br /&gt;
  sphere.SetRadius(radius)&lt;br /&gt;
  sphere.SetPhiResolution(30)&lt;br /&gt;
  sphere.SetThetaResolution(30)&lt;br /&gt;
  sphere.Update()&lt;br /&gt;
&lt;br /&gt;
# Get markup node from scene&lt;br /&gt;
markups=slicer.util.getNode('F')&lt;br /&gt;
sphere = vtk.vtkSphereSource()&lt;br /&gt;
UpdateSphere(0,0)&lt;br /&gt;
 &lt;br /&gt;
# Create model node and add to scene&lt;br /&gt;
modelsLogic = slicer.modules.models.logic()&lt;br /&gt;
model = modelsLogic.AddModel(sphere.GetOutput())&lt;br /&gt;
model.GetDisplayNode().SetSliceIntersectionVisibility(True)&lt;br /&gt;
model.GetDisplayNode().SetSliceIntersectionThickness(3)&lt;br /&gt;
model.GetDisplayNode().SetColor(1,1,0)&lt;br /&gt;
 &lt;br /&gt;
# Call UpdateSphere whenever the fiducials are changed&lt;br /&gt;
markups.AddObserver(slicer.vtkMRMLMarkupsNode.PointModifiedEvent, UpdateSphere, 2)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Measure angle between two slice planes==&lt;br /&gt;
&lt;br /&gt;
Measure angle between red and yellow slice nodes. Whenever any of the slice nodes are moved, the updated angle is printed on the console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sliceNodeIds = ['vtkMRMLSliceNodeRed', 'vtkMRMLSliceNodeYellow']&lt;br /&gt;
&lt;br /&gt;
# Print angles between slice nodes&lt;br /&gt;
def ShowAngle(unused1=None, unused2=None):&lt;br /&gt;
    sliceNormalVector = []&lt;br /&gt;
    for sliceNodeId in sliceNodeIds:&lt;br /&gt;
        sliceToRAS = slicer.mrmlScene.GetNodeByID(sliceNodeId).GetSliceToRAS()&lt;br /&gt;
        sliceNormalVector.append([sliceToRAS.GetElement(0,2), sliceToRAS.GetElement(1,2), sliceToRAS.GetElement(2,2)])&lt;br /&gt;
    angleRad = vtk.vtkMath.AngleBetweenVectors(sliceNormalVector[0], sliceNormalVector[1])&lt;br /&gt;
    angleDeg = vtk.vtkMath.DegreesFromRadians(angleRad)&lt;br /&gt;
    print('Angle between slice planes = {0:0.3f}'.format(angleDeg))&lt;br /&gt;
&lt;br /&gt;
# Observe slice node changes&lt;br /&gt;
for sliceNodeId in sliceNodeIds:&lt;br /&gt;
    slicer.mrmlScene.GetNodeByID(sliceNodeId).AddObserver(vtk.vtkCommand.ModifiedEvent, ShowAngle)&lt;br /&gt;
&lt;br /&gt;
# Print current angle&lt;br /&gt;
ShowAngle()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Measure angle between two markup planes==&lt;br /&gt;
&lt;br /&gt;
Measure angle between two markup plane nodes. Whenever any of the plane nodes are moved, the updated angle is printed on the console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
planeNodeNames = ['P', 'P_1']&lt;br /&gt;
&lt;br /&gt;
# Print angles between slice nodes&lt;br /&gt;
def ShowAngle(unused1=None, unused2=None):&lt;br /&gt;
    planeNormalVectors = []&lt;br /&gt;
    for planeNodeName in planeNodeNames:&lt;br /&gt;
        planeNode = slicer.util.getFirstNodeByClassByName('vtkMRMLMarkupsPlaneNode', planeNodeName)&lt;br /&gt;
        planeNormalVector = [0.0, 0.0, 0.0]&lt;br /&gt;
        planeNode.GetNormalWorld(planeNormalVector)&lt;br /&gt;
        planeNormalVectors.append(planeNormalVector)&lt;br /&gt;
    angleRad = vtk.vtkMath.AngleBetweenVectors(planeNormalVectors[0], planeNormalVectors[1])&lt;br /&gt;
    angleDeg = vtk.vtkMath.DegreesFromRadians(angleRad)&lt;br /&gt;
    print('Angle between planes {0} and {1} = {2:0.3f}'.format(planeNodeNames[0], planeNodeNames[1], angleDeg))&lt;br /&gt;
&lt;br /&gt;
# Observe plane node changes&lt;br /&gt;
for planeNodeName in planeNodeNames:&lt;br /&gt;
    planeNode = slicer.util.getFirstNodeByClassByName('vtkMRMLMarkupsPlaneNode', planeNodeName)&lt;br /&gt;
    planeNode.AddObserver(slicer.vtkMRMLMarkupsPlaneNode.PointModifiedEvent, ShowAngle)&lt;br /&gt;
&lt;br /&gt;
# Print current angle&lt;br /&gt;
ShowAngle()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Measure angle between two markup lines==&lt;br /&gt;
&lt;br /&gt;
Measure angle between two markup line nodes. Whenever either line is moved, the updated angle is printed on the console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lineNodeNames = ['L', 'L_1']&lt;br /&gt;
&lt;br /&gt;
# Print angles between slice nodes&lt;br /&gt;
def ShowAngle(unused1=None, unused2=None):&lt;br /&gt;
    import numpy as np&lt;br /&gt;
    lineDirectionVectors = []&lt;br /&gt;
    for lineNodeName in lineNodeNames:&lt;br /&gt;
        lineNode = slicer.util.getFirstNodeByClassByName('vtkMRMLMarkupsLineNode', lineNodeName)&lt;br /&gt;
        lineStartPos = np.zeros(3)&lt;br /&gt;
        lineEndPos = np.zeros(3)&lt;br /&gt;
        lineNode.GetNthControlPointPositionWorld(0, lineStartPos)&lt;br /&gt;
        lineNode.GetNthControlPointPositionWorld(1, lineEndPos)&lt;br /&gt;
        lineDirectionVector = (lineEndPos-lineStartPos)/np.linalg.norm(lineEndPos-lineStartPos)&lt;br /&gt;
        lineDirectionVectors.append(lineDirectionVector)&lt;br /&gt;
    angleRad = vtk.vtkMath.AngleBetweenVectors(lineDirectionVectors[0], lineDirectionVectors[1])&lt;br /&gt;
    angleDeg = vtk.vtkMath.DegreesFromRadians(angleRad)&lt;br /&gt;
    print('Angle between lines {0} and {1} = {2:0.3f}'.format(lineNodeNames[0], lineNodeNames[1], angleDeg))&lt;br /&gt;
&lt;br /&gt;
# Observe line node changes&lt;br /&gt;
for lineNodeName in lineNodeNames:&lt;br /&gt;
    lineNode = slicer.util.getFirstNodeByClassByName('vtkMRMLMarkupsLineNode', lineNodeName)&lt;br /&gt;
    lineNode.AddObserver(slicer.vtkMRMLMarkupsLineNode.PointModifiedEvent, ShowAngle)&lt;br /&gt;
&lt;br /&gt;
# Print current angle&lt;br /&gt;
ShowAngle()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Set slice position and orientation from 3 markup fiducials==&lt;br /&gt;
&lt;br /&gt;
Drop 3 markup points in the scene and copy-paste the code below into the Python console. After this, as you move the markups you’ll see the red slice view position and orientation will be set to make it fit to the 3 points.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Update plane from fiducial points&lt;br /&gt;
def UpdateSlicePlane(param1=None, param2=None):&lt;br /&gt;
  # Get point positions as numpy array&lt;br /&gt;
  import numpy as np&lt;br /&gt;
  nOfFiduciallPoints = markups.GetNumberOfFiducials()&lt;br /&gt;
  if nOfFiduciallPoints &amp;lt; 3:&lt;br /&gt;
    return  # not enough points&lt;br /&gt;
  points = np.zeros([3,nOfFiduciallPoints])&lt;br /&gt;
  for i in range(0, nOfFiduciallPoints):&lt;br /&gt;
    markups.GetNthFiducialPosition(i, points[:,i])&lt;br /&gt;
  # Compute plane position and normal&lt;br /&gt;
  planePosition = points.mean(axis=1)&lt;br /&gt;
  planeNormal = np.cross(points[:,1] - points[:,0], points[:,2] - points[:,0])&lt;br /&gt;
  planeX = points[:,1] - points[:,0]&lt;br /&gt;
  sliceNode.SetSliceToRASByNTP(planeNormal[0], planeNormal[1], planeNormal[2],&lt;br /&gt;
    planeX[0], planeX[1], planeX[2],&lt;br /&gt;
    planePosition[0], planePosition[1], planePosition[2], 0)&lt;br /&gt;
&lt;br /&gt;
# Get markup node from scene&lt;br /&gt;
sliceNode = slicer.app.layoutManager().sliceWidget('Red').mrmlSliceNode()&lt;br /&gt;
markups = slicer.util.getNode('F')&lt;br /&gt;
&lt;br /&gt;
# Update slice plane manually&lt;br /&gt;
UpdateSlicePlane()&lt;br /&gt;
&lt;br /&gt;
# Update slice plane automatically whenever points are changed&lt;br /&gt;
markupObservation = [markups, markups.AddObserver(slicer.vtkMRMLMarkupsNode.PointModifiedEvent, UpdateSlicePlane, 2)]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To stop automatic updates, run this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
markupObservation[0].RemoveObserver(markupObservation[1])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Set slice position and orientation from a normal vector and position==&lt;br /&gt;
&lt;br /&gt;
This code snippet shows how to display a slice view defined by a normal vector and position in an anatomically sensible way: rotating slice view so that &amp;quot;up&amp;quot; direction (or &amp;quot;right&amp;quot; direction) is towards an anatomical axis.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def setSlicePoseFromSliceNormalAndPosition(sliceNode, sliceNormal, slicePosition, defaultViewUpDirection=None, backupViewRightDirection=None):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Set slice pose from the provided plane normal and position. View up direction is determined automatically,&lt;br /&gt;
    to make view up point towards defaultViewUpDirection.&lt;br /&gt;
    :param defaultViewUpDirection Slice view will be spinned in-plane to match point approximately this up direction. Default: patient superior.&lt;br /&gt;
    :param backupViewRightDirection Slice view will be spinned in-plane to match point approximately this right direction&lt;br /&gt;
        if defaultViewUpDirection is too similar to sliceNormal. Default: patient left.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    # Fix up input directions&lt;br /&gt;
    if defaultViewUpDirection is None:&lt;br /&gt;
        defaultViewUpDirection = [0,0,1]&lt;br /&gt;
    if backupViewRightDirection is None:&lt;br /&gt;
        backupViewRightDirection = [-1,0,0]&lt;br /&gt;
    if sliceNormal[1]&amp;gt;=0:&lt;br /&gt;
        sliceNormalStandardized = sliceNormal&lt;br /&gt;
    else:&lt;br /&gt;
        sliceNormalStandardized = [-sliceNormal[0], -sliceNormal[1], -sliceNormal[2]]&lt;br /&gt;
    # Compute slice axes&lt;br /&gt;
    sliceNormalViewUpAngle = vtk.vtkMath.AngleBetweenVectors(sliceNormalStandardized, defaultViewUpDirection)&lt;br /&gt;
    angleTooSmallThresholdRad = 0.25 # about 15 degrees&lt;br /&gt;
    if sliceNormalViewUpAngle &amp;gt; angleTooSmallThresholdRad and sliceNormalViewUpAngle &amp;lt; vtk.vtkMath.Pi() - angleTooSmallThresholdRad:&lt;br /&gt;
        viewUpDirection = defaultViewUpDirection&lt;br /&gt;
        sliceAxisY = viewUpDirection&lt;br /&gt;
        sliceAxisX = [0, 0, 0]&lt;br /&gt;
        vtk.vtkMath.Cross(sliceAxisY, sliceNormalStandardized, sliceAxisX)&lt;br /&gt;
    else:&lt;br /&gt;
        sliceAxisX = backupViewRightDirection&lt;br /&gt;
    # Set slice axes&lt;br /&gt;
    sliceNode.SetSliceToRASByNTP(sliceNormalStandardized[0], sliceNormalStandardized[1], sliceNormalStandardized[2],&lt;br /&gt;
        sliceAxisX[0], sliceAxisX[1], sliceAxisX[2],&lt;br /&gt;
        slicePosition[0], slicePosition[1], slicePosition[2], 0)&lt;br /&gt;
&lt;br /&gt;
# Example usage:&lt;br /&gt;
sliceNode = getNode('vtkMRMLSliceNodeRed')&lt;br /&gt;
transformNode = getNode('Transform_3')&lt;br /&gt;
transformMatrix = vtk.vtkMatrix4x4()&lt;br /&gt;
transformNode.GetMatrixTransformToParent(transformMatrix)&lt;br /&gt;
sliceNormal = [transformMatrix.GetElement(0,2), transformMatrix.GetElement(1,2), transformMatrix.GetElement(2,2)]&lt;br /&gt;
slicePosition = [transformMatrix.GetElement(0,3), transformMatrix.GetElement(1,3), transformMatrix.GetElement(2,3)]&lt;br /&gt;
setSlicePoseFromSliceNormalAndPosition(sliceNode, sliceNormal, slicePosition)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Switching to markup fiducial placement mode==&lt;br /&gt;
&lt;br /&gt;
To activate a fiducial placement mode, both interaction mode has to be set and a fiducial node has to be selected:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
interactionNode = slicer.app.applicationLogic().GetInteractionNode()&lt;br /&gt;
selectionNode = slicer.app.applicationLogic().GetSelectionNode()&lt;br /&gt;
selectionNode.SetReferenceActivePlaceNodeClassName(&amp;quot;vtkMRMLMarkupsFiducialNode&amp;quot;)&lt;br /&gt;
fiducialNode = slicer.vtkMRMLMarkupsFiducialNode()&lt;br /&gt;
slicer.mrmlScene.AddNode(fiducialNode)&lt;br /&gt;
fiducialNode.CreateDefaultDisplayNodes() &lt;br /&gt;
selectionNode.SetActivePlaceNodeID(fiducialNode.GetID())&lt;br /&gt;
interactionNode.SetCurrentInteractionMode(interactionNode.Place)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively, ''qSlicerMarkupsPlaceWidget'' widget can be used to initiate markup placement:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Temporary markups node&lt;br /&gt;
markupsNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLMarkupsFiducialNode&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def placementModeChanged(active):&lt;br /&gt;
  print(&amp;quot;Placement: &amp;quot; +(&amp;quot;active&amp;quot; if active else &amp;quot;inactive&amp;quot;))&lt;br /&gt;
  # You can inspect what is in the markups node here, delete the temporary markup node, etc.&lt;br /&gt;
&lt;br /&gt;
# Create and set up widget that contains a single &amp;quot;place markup&amp;quot; button. The widget can be placed in the module GUI.&lt;br /&gt;
placeWidget = slicer.qSlicerMarkupsPlaceWidget()&lt;br /&gt;
placeWidget.setMRMLScene(slicer.mrmlScene)&lt;br /&gt;
placeWidget.setCurrentNode(markupsNode)&lt;br /&gt;
placeWidget.buttonsVisible=False&lt;br /&gt;
placeWidget.placeButton().show()&lt;br /&gt;
placeWidget.connect('activeMarkupsFiducialPlaceModeChanged(bool)', placementModeChanged)&lt;br /&gt;
placeWidget.show()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Change markup fiducial display properties==&lt;br /&gt;
&lt;br /&gt;
Display properties are stored in display node(s) associated with the fiducial node.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fiducialNode = getNode('F')&lt;br /&gt;
fiducialDisplayNode = fiducialNode.GetDisplayNode()&lt;br /&gt;
fiducialDisplayNode.SetVisibility(False) # Hide all points&lt;br /&gt;
fiducialDisplayNode.SetVisibility(True) # Show all points&lt;br /&gt;
fiducialDisplayNode.SetSelectedColor(1,1,0) # Set color to yellow&lt;br /&gt;
fiducialDisplayNode.SetViewNodeIDs([&amp;quot;vtkMRMLSliceNodeRed&amp;quot;, &amp;quot;vtkMRMLViewNode1&amp;quot;]) # Only show in red slice view and first 3D view&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get a notification if a markup point position is modified==&lt;br /&gt;
&lt;br /&gt;
Event management of Slicer-4.11 version is still subject to change. The example below shows how point manipulation can be observed now.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def onMarkupChanged(caller,event):&lt;br /&gt;
    markupsNode = caller&lt;br /&gt;
    sliceView = markupsNode.GetAttribute('Markups.MovingInSliceView')&lt;br /&gt;
    movingMarkupIndex = markupsNode.GetDisplayNode().GetActiveControlPoint()&lt;br /&gt;
    if movingMarkupIndex &amp;gt;= 0:&lt;br /&gt;
        pos = [0,0,0]&lt;br /&gt;
        markupsNode.GetNthFiducialPosition(movingMarkupIndex, pos)&lt;br /&gt;
        isPreview = markupsNode.GetNthControlPointPositionStatus(movingMarkupIndex) == slicer.vtkMRMLMarkupsNode.PositionPreview&lt;br /&gt;
        if isPreview:&lt;br /&gt;
            logging.info(&amp;quot;Point {0} is previewed at {1} in slice view {2}&amp;quot;.format(movingMarkupIndex, pos, sliceView))&lt;br /&gt;
        else:&lt;br /&gt;
            logging.info(&amp;quot;Point {0} was moved {1} in slice view {2}&amp;quot;.format(movingMarkupIndex, pos, sliceView))&lt;br /&gt;
    else:&lt;br /&gt;
        logging.info(&amp;quot;Points modified: slice view = {0}&amp;quot;.format(sliceView))&lt;br /&gt;
&lt;br /&gt;
def onMarkupStartInteraction(caller, event):&lt;br /&gt;
    markupsNode = caller&lt;br /&gt;
    sliceView = markupsNode.GetAttribute('Markups.MovingInSliceView')&lt;br /&gt;
    movingMarkupIndex = markupsNode.GetDisplayNode().GetActiveControlPoint()    &lt;br /&gt;
    logging.info(&amp;quot;Start interaction: point ID = {0}, slice view = {1}&amp;quot;.format(movingMarkupIndex, sliceView))&lt;br /&gt;
&lt;br /&gt;
def onMarkupEndInteraction(caller, event):&lt;br /&gt;
    markupsNode = caller&lt;br /&gt;
    sliceView = markupsNode.GetAttribute('Markups.MovingInSliceView')&lt;br /&gt;
    movingMarkupIndex = markupsNode.GetDisplayNode().GetActiveControlPoint()&lt;br /&gt;
    logging.info(&amp;quot;End interaction: point ID = {0}, slice view = {1}&amp;quot;.format(movingMarkupIndex, sliceView))&lt;br /&gt;
&lt;br /&gt;
markupsNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLMarkupsFiducialNode&amp;quot;)&lt;br /&gt;
markupsNode.CreateDefaultDisplayNodes()&lt;br /&gt;
markupsNode.AddFiducial(0,0,0)&lt;br /&gt;
markupsNode.AddObserver(slicer.vtkMRMLMarkupsNode.PointModifiedEvent, onMarkupChanged)&lt;br /&gt;
markupsNode.AddObserver(slicer.vtkMRMLMarkupsNode.PointStartInteractionEvent, onMarkupStartInteraction)&lt;br /&gt;
markupsNode.AddObserver(slicer.vtkMRMLMarkupsNode.PointEndInteractionEvent, onMarkupEndInteraction)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get a notification if a transform is modified==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def onTransformNodeModified(transformNode, unusedArg2=None, unusedArg3=None):&lt;br /&gt;
  transformMatrix = vtk.vtkMatrix4x4()&lt;br /&gt;
  transformNode.GetMatrixTransformToWorld(transformMatrix)&lt;br /&gt;
  print(&amp;quot;Position: [{0}, {1}, {2}]&amp;quot;.format(transformMatrix.GetElement(0,3), transformMatrix.GetElement(1,3), transformMatrix.GetElement(2,3)))&lt;br /&gt;
&lt;br /&gt;
transformNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLTransformNode&amp;quot;)&lt;br /&gt;
transformNode.AddObserver(slicer.vtkMRMLTransformNode.TransformModifiedEvent, onTransformNodeModified)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Rotate a node around a specified point==&lt;br /&gt;
&lt;br /&gt;
Set up the scene:&lt;br /&gt;
&lt;br /&gt;
*Add a markup fiducial node (centerOfRotationMarkupsNode) with a single point to specify center of rotation.&lt;br /&gt;
*Add a rotation transform (rotationTransformNode) that will be edited in Transforms module to specify rotation angles.&lt;br /&gt;
*Add a transform (finalTransformNode) and apply it (not harden) to those nodes (images, models, etc.) that you want to rotate around the center of rotation point.&lt;br /&gt;
&lt;br /&gt;
Then run the script below, go to Transforms module, select rotationTransformNode, and move rotation sliders.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# This markups fiducial node specifies the center of rotation&lt;br /&gt;
centerOfRotationMarkupsNode = getNode('F')&lt;br /&gt;
# This transform can be  edited in Transforms module&lt;br /&gt;
rotationTransformNode = getNode('LinearTransform_3')&lt;br /&gt;
# This transform has to be applied to the image, model, etc.&lt;br /&gt;
finalTransformNode = getNode('LinearTransform_4')&lt;br /&gt;
&lt;br /&gt;
def updateFinalTransform(unusedArg1=None, unusedArg2=None, unusedArg3=None):&lt;br /&gt;
    rotationMatrix = vtk.vtkMatrix4x4()&lt;br /&gt;
    rotationTransformNode.GetMatrixTransformToParent(rotationMatrix)&lt;br /&gt;
    rotationCenterPointCoord = [0.0, 0.0, 0.0]&lt;br /&gt;
    centerOfRotationMarkupsNode.GetNthControlPointPositionWorld(0, rotationCenterPointCoord)&lt;br /&gt;
    finalTransform = vtk.vtkTransform()&lt;br /&gt;
    finalTransform.Translate(rotationCenterPointCoord)&lt;br /&gt;
    finalTransform.Concatenate(rotationMatrix)&lt;br /&gt;
    finalTransform.Translate(-rotationCenterPointCoord[0], -rotationCenterPointCoord[1], -rotationCenterPointCoord[2])&lt;br /&gt;
    finalTransformNode.SetAndObserveMatrixTransformToParent(finalTransform.GetMatrix())&lt;br /&gt;
&lt;br /&gt;
# Manual initial update&lt;br /&gt;
updateFinalTransform()&lt;br /&gt;
&lt;br /&gt;
# Automatic update when point is moved or transform is modified&lt;br /&gt;
rotationTransformNodeObserver = rotationTransformNode.AddObserver(slicer.vtkMRMLTransformNode.TransformModifiedEvent, updateFinalTransform)&lt;br /&gt;
centerOfRotationMarkupsNodeObserver = centerOfRotationMarkupsNode.AddObserver(slicer.vtkMRMLMarkupsNode.PointModifiedEvent, updateFinalTransform)&lt;br /&gt;
&lt;br /&gt;
# Execute these lines to stop automatic updates:&lt;br /&gt;
# rotationTransformNode.RemoveObserver(rotationTransformNodeObserver)&lt;br /&gt;
# centerOfRotationMarkupsNode.RemoveObserver(centerOfRotationMarkupsNodeObserver)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Rotate a node around a specified line==&lt;br /&gt;
&lt;br /&gt;
Set up the scene:&lt;br /&gt;
&lt;br /&gt;
*Add a markup line node (rotationAxisMarkupsNode) with 2 points to specify rotation axis.&lt;br /&gt;
*Add a rotation transform (rotationTransformNode) that will be edited in Transforms module to specify rotation angle.&lt;br /&gt;
*Add a transform (finalTransformNode) and apply it (not harden) to those nodes (images, models, etc.) that you want to rotate around the line.&lt;br /&gt;
&lt;br /&gt;
Then run the script below, go to Transforms module, select rotationTransformNode, and move Edit / Rotation / IS slider.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# This markups fiducial node specifies the center of rotation&lt;br /&gt;
rotationAxisMarkupsNode = getNode('L')&lt;br /&gt;
# This transform can be edited in Transforms module (Edit / Rotation / IS slider)&lt;br /&gt;
rotationTransformNode = getNode('LinearTransform_3')&lt;br /&gt;
# This transform has to be applied to the image, model, etc.&lt;br /&gt;
finalTransformNode = getNode('LinearTransform_4')&lt;br /&gt;
&lt;br /&gt;
def updateFinalTransform(unusedArg1=None, unusedArg2=None, unusedArg3=None):&lt;br /&gt;
    import numpy as np&lt;br /&gt;
    rotationAxisPoint1_World = np.zeros(3)&lt;br /&gt;
    rotationAxisMarkupsNode.GetNthControlPointPositionWorld(0, rotationAxisPoint1_World)&lt;br /&gt;
    rotationAxisPoint2_World = np.zeros(3)&lt;br /&gt;
    rotationAxisMarkupsNode.GetNthControlPointPositionWorld(1, rotationAxisPoint2_World)&lt;br /&gt;
    axisDirectionZ_World = rotationAxisPoint2_World-rotationAxisPoint1_World&lt;br /&gt;
    axisDirectionZ_World = axisDirectionZ_World/np.linalg.norm(axisDirectionZ_World)&lt;br /&gt;
    # Get transformation between world coordinate system and rotation axis aligned coordinate system&lt;br /&gt;
    worldToRotationAxisTransform = vtk.vtkMatrix4x4()&lt;br /&gt;
    p=vtk.vtkPlaneSource()&lt;br /&gt;
    p.SetNormal(axisDirectionZ_World)&lt;br /&gt;
    axisOrigin = np.array(p.GetOrigin())&lt;br /&gt;
    axisDirectionX_World = np.array(p.GetPoint1())-axisOrigin&lt;br /&gt;
    axisDirectionY_World = np.array(p.GetPoint2())-axisOrigin&lt;br /&gt;
    rotationAxisToWorldTransform = np.row_stack((np.column_stack((axisDirectionX_World, axisDirectionY_World, axisDirectionZ_World, rotationAxisPoint1_World)), (0, 0, 0, 1)))&lt;br /&gt;
    rotationAxisToWorldTransformMatrix = slicer.util.vtkMatrixFromArray(rotationAxisToWorldTransform)&lt;br /&gt;
    worldToRotationAxisTransformMatrix = slicer.util.vtkMatrixFromArray(np.linalg.inv(rotationAxisToWorldTransform))&lt;br /&gt;
    # Compute transformation chain&lt;br /&gt;
    rotationMatrix = vtk.vtkMatrix4x4()&lt;br /&gt;
    rotationTransformNode.GetMatrixTransformToParent(rotationMatrix)&lt;br /&gt;
    finalTransform = vtk.vtkTransform()&lt;br /&gt;
    finalTransform.Concatenate(rotationAxisToWorldTransformMatrix)&lt;br /&gt;
    finalTransform.Concatenate(rotationMatrix)&lt;br /&gt;
    finalTransform.Concatenate(worldToRotationAxisTransformMatrix)&lt;br /&gt;
    finalTransformNode.SetAndObserveMatrixTransformToParent(finalTransform.GetMatrix())&lt;br /&gt;
&lt;br /&gt;
# Manual initial update&lt;br /&gt;
updateFinalTransform()&lt;br /&gt;
&lt;br /&gt;
# Automatic update when point is moved or transform is modified&lt;br /&gt;
rotationTransformNodeObserver = rotationTransformNode.AddObserver(slicer.vtkMRMLTransformNode.TransformModifiedEvent, updateFinalTransform)&lt;br /&gt;
rotationAxisMarkupsNodeObserver = rotationAxisMarkupsNode.AddObserver(slicer.vtkMRMLMarkupsNode.PointModifiedEvent, updateFinalTransform)&lt;br /&gt;
&lt;br /&gt;
# Execute these lines to stop automatic updates:&lt;br /&gt;
# rotationTransformNode.RemoveObserver(rotationTransformNodeObserver)&lt;br /&gt;
# rotationAxisMarkupsNode.RemoveObserver(rotationAxisMarkupsNodeObserver)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Show a context menu when a markup point is clicked in a slice or 3D view==&lt;br /&gt;
&lt;br /&gt;
Subject hierarchy plugins can offer actions in the view context menu when right-clicking objects that support such picking (such as Markups fiducials). A comprehensive [https://github.com/Slicer/Slicer/blob/master/Modules/Loadable/Annotations/SubjectHierarchyPlugins/AnnotationsSubjectHierarchyPlugin.py subject hierarchy plugin example] is for the Annotations module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  def viewContextMenuActions(self):&lt;br /&gt;
    return [self.doSomething]&lt;br /&gt;
&lt;br /&gt;
  def showViewContextMenuActionsForItem(self, itemID, eventData):&lt;br /&gt;
    if not itemID:&lt;br /&gt;
      logging.error('Invalid item for view context menu ' + str(itemID))&lt;br /&gt;
      return&lt;br /&gt;
&lt;br /&gt;
    pluginHandlerSingleton = slicer.qSlicerSubjectHierarchyPluginHandler.instance()&lt;br /&gt;
    shNode = pluginHandlerSingleton.subjectHierarchyNode()&lt;br /&gt;
    if shNode is None:&lt;br /&gt;
      logging.error('Failed to access subject hierarchy node')&lt;br /&gt;
      return&lt;br /&gt;
&lt;br /&gt;
    associatedNode = shNode.GetItemDataNode(itemID)&lt;br /&gt;
    if not associatedNode or not associatedNode.IsA(&amp;quot;vtkMRMLMarkupsNode&amp;quot;):&lt;br /&gt;
      return&lt;br /&gt;
&lt;br /&gt;
    self.viewMenuEventData = eventData&lt;br /&gt;
    self.viewMenuEventData['NodeID'] = associatedNode.GetID()&lt;br /&gt;
&lt;br /&gt;
  def onDoSomething(self):&lt;br /&gt;
    nodeID = self.viewMenuEventData['NodeID']&lt;br /&gt;
    markupsNode = slicer.mrmlScene.GetNodeByID(nodeID)&lt;br /&gt;
    if markupsNode is None or not markupsNode.IsA(&amp;quot;vtkMRMLMarkupsNode&amp;quot;):&lt;br /&gt;
      logging.error('Failed to get fiducial markups node by ID ' + str(nodeID))&lt;br /&gt;
      return&lt;br /&gt;
&lt;br /&gt;
    componentIndex = self.viewMenuEventData['ComponentIndex']&lt;br /&gt;
    markupID = markupsNode.GetNthMarkupID(componentIndex)&lt;br /&gt;
    &lt;br /&gt;
    # Do something with the clicked fiducial&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Write markup positions to JSON file==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
markupNode = getNode('F')&lt;br /&gt;
outputFileName = 'c:/tmp/test.json'&lt;br /&gt;
&lt;br /&gt;
# Get markup positions&lt;br /&gt;
data = []&lt;br /&gt;
for fidIndex in range(markupNode.GetNumberOfFiducials()):&lt;br /&gt;
  coords=[0,0,0]&lt;br /&gt;
  markupNode.GetNthFiducialPosition(fidIndex,coords)&lt;br /&gt;
  data.append({'label': markupNode.GetNthFiducialLabel(), 'position': coords})&lt;br /&gt;
&lt;br /&gt;
import json&lt;br /&gt;
with open(outputFileName, 'w') as outfile:&lt;br /&gt;
  json.dump(data, outfile)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Write annotation ROI to JSON file==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
roiNode = getNode('R')&lt;br /&gt;
outputFileName = &amp;quot;c:/tmp/test.json&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Get annotation ROI data&lt;br /&gt;
center = [0,0,0]&lt;br /&gt;
radius = [0,0,0]&lt;br /&gt;
roiNode.GetControlPointWorldCoordinates(0, center)&lt;br /&gt;
roiNode.GetControlPointWorldCoordinates(1, radius)&lt;br /&gt;
data = {'center': radius, 'radius': radius}&lt;br /&gt;
&lt;br /&gt;
# Write to json file&lt;br /&gt;
import json&lt;br /&gt;
with open(outputFileName, 'w') as outfile:&lt;br /&gt;
  json.dump(data, outfile)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Show a simple surface mesh as a model node==&lt;br /&gt;
&lt;br /&gt;
This example shows how to display a simple surface mesh (a box, created by a VTK source filter) as a model node.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Create and set up polydata source&lt;br /&gt;
box = vtk.vtkCubeSource()&lt;br /&gt;
box.SetXLength(30)&lt;br /&gt;
box.SetYLength(20)&lt;br /&gt;
box.SetZLength(15)&lt;br /&gt;
box.SetCenter(10,20,5)&lt;br /&gt;
&lt;br /&gt;
# Create a model node that displays output of the source&lt;br /&gt;
boxNode = slicer.modules.models.logic().AddModel(box.GetOutputPort())&lt;br /&gt;
&lt;br /&gt;
# Adjust display properties&lt;br /&gt;
boxNode.GetDisplayNode().SetColor(1,0,0)&lt;br /&gt;
boxNode.GetDisplayNode().SetOpacity(0.8)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Measure distance of points from surface==&lt;br /&gt;
&lt;br /&gt;
This example computes closest distance of points (markups fiducial 'F') from a surface (model node 'mymodel') and writes results into a table.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
markupsNode = getNode('F')&lt;br /&gt;
modelNode = getNode('mymodel')&lt;br /&gt;
&lt;br /&gt;
# Transform model polydata to world coordinate system&lt;br /&gt;
if modelNode.GetParentTransformNode():&lt;br /&gt;
    transformModelToWorld = vtk.vtkGeneralTransform()&lt;br /&gt;
    slicer.vtkMRMLTransformNode.GetTransformBetweenNodes(modelNode.GetParentTransformNode(), None, transformModelToWorld)&lt;br /&gt;
    polyTransformToWorld = vtk.vtkTransformPolyDataFilter()&lt;br /&gt;
    polyTransformToWorld.SetTransform(transformModelToWorld)&lt;br /&gt;
    polyTransformToWorld.SetInputData(modelNode.GetPolyData())&lt;br /&gt;
    polyTransformToWorld.Update()&lt;br /&gt;
    surface_World = polyTransformToWorld.GetOutput()&lt;br /&gt;
else:&lt;br /&gt;
    surface_World = modelNode.GetPolyData()&lt;br /&gt;
&lt;br /&gt;
# Create arrays to store results&lt;br /&gt;
indexCol = vtk.vtkIntArray()&lt;br /&gt;
indexCol.SetName(&amp;quot;Index&amp;quot;)&lt;br /&gt;
labelCol = vtk.vtkStringArray()&lt;br /&gt;
labelCol.SetName(&amp;quot;Name&amp;quot;)&lt;br /&gt;
distanceCol = vtk.vtkDoubleArray()&lt;br /&gt;
distanceCol.SetName(&amp;quot;Distance&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
distanceFilter = vtk.vtkImplicitPolyDataDistance()&lt;br /&gt;
distanceFilter.SetInput(surface_World);&lt;br /&gt;
nOfFiduciallPoints = markupsNode.GetNumberOfFiducials()&lt;br /&gt;
for i in range(0, nOfFiduciallPoints):&lt;br /&gt;
    point_World = [0,0,0]&lt;br /&gt;
    markupsNode.GetNthControlPointPositionWorld(i, point_World)&lt;br /&gt;
    closestPointOnSurface_World = [0,0,0]&lt;br /&gt;
    closestPointDistance = distanceFilter.EvaluateFunctionAndGetClosestPoint(point_World, closestPointOnSurface_World)&lt;br /&gt;
    indexCol.InsertNextValue(i)&lt;br /&gt;
    labelCol.InsertNextValue(markupsNode.GetNthControlPointLabel(i))&lt;br /&gt;
    distanceCol.InsertNextValue(closestPointDistance)&lt;br /&gt;
&lt;br /&gt;
# Create a table from result arrays&lt;br /&gt;
resultTableNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLTableNode&amp;quot;, &amp;quot;Points from surface distance&amp;quot;)&lt;br /&gt;
resultTableNode.AddColumn(indexCol)&lt;br /&gt;
resultTableNode.AddColumn(labelCol)&lt;br /&gt;
resultTableNode.AddColumn(distanceCol)&lt;br /&gt;
&lt;br /&gt;
# Show table in view layout&lt;br /&gt;
slicer.app.layoutManager().setLayout(slicer.vtkMRMLLayoutNode.SlicerLayoutFourUpTableView)&lt;br /&gt;
slicer.app.applicationLogic().GetSelectionNode().SetReferenceActiveTableID(resultTableNode.GetID())&lt;br /&gt;
slicer.app.applicationLogic().PropagateTableSelection()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Add a texture mapped plane to the scene as a model==&lt;br /&gt;
Note that model textures are not exposed in the GUI and are not saved in the scene&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Create model node&lt;br /&gt;
planeSource = vtk.vtkPlaneSource()&lt;br /&gt;
planeSource.SetOrigin(-50.0, -50.0, 0.0)&lt;br /&gt;
planeSource.SetPoint1(50.0, -50.0, 0.0)&lt;br /&gt;
planeSource.SetPoint2(-50.0, 50.0, 0.0)&lt;br /&gt;
model = slicer.modules.models.logic().AddModel(planeSource.GetOutputPort())&lt;br /&gt;
&lt;br /&gt;
# Tune display properties&lt;br /&gt;
modelDisplay = model.GetDisplayNode()&lt;br /&gt;
modelDisplay.SetColor(1,1,0) # yellow&lt;br /&gt;
modelDisplay.SetBackfaceCulling(0)&lt;br /&gt;
&lt;br /&gt;
# Add texture (just use image of an ellipsoid)&lt;br /&gt;
e = vtk.vtkImageEllipsoidSource()&lt;br /&gt;
modelDisplay.SetTextureImageDataConnection(e.GetOutputPort())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get scalar values at surface of a model==&lt;br /&gt;
&lt;br /&gt;
The following script allows getting selected scalar value at a selected position of a model. Position can be selected by moving the mouse while holding down Shift key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
modelNode = getNode('sphere')&lt;br /&gt;
modelPointValues = modelNode.GetPolyData().GetPointData().GetArray(&amp;quot;Normals&amp;quot;)&lt;br /&gt;
markupsNode = slicer.mrmlScene.GetFirstNodeByName('F')&lt;br /&gt;
&lt;br /&gt;
if not markupsNode:&lt;br /&gt;
  markupsNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLMarkupsFiducialNode&amp;quot;,&amp;quot;F&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
pointsLocator = vtk.vtkPointLocator() # could try using vtk.vtkStaticPointLocator() if need to optimize&lt;br /&gt;
pointsLocator.SetDataSet(modelNode.GetPolyData())&lt;br /&gt;
pointsLocator.BuildLocator()&lt;br /&gt;
&lt;br /&gt;
def onMouseMoved(observer,eventid):  &lt;br /&gt;
  ras=[0,0,0]&lt;br /&gt;
  crosshairNode.GetCursorPositionRAS(ras)&lt;br /&gt;
  if markupsNode.GetNumberOfFiducials() == 0:&lt;br /&gt;
    markupsNode.AddFiducial(*ras)&lt;br /&gt;
  else:&lt;br /&gt;
    markupsNode.SetNthFiducialPosition(0,*ras)&lt;br /&gt;
  closestPointId = pointsLocator.FindClosestPoint(ras)&lt;br /&gt;
  closestPointValue = modelPointValues.GetTuple(closestPointId)&lt;br /&gt;
  print(&amp;quot;RAS = &amp;quot; + repr(ras) + &amp;quot;    value = &amp;quot; + repr(closestPointValue))&lt;br /&gt;
&lt;br /&gt;
crosshairNode=slicer.util.getNode('Crosshair') &lt;br /&gt;
observationId = crosshairNode.AddObserver(slicer.vtkMRMLCrosshairNode.CursorPositionModifiedEvent, onMouseMoved)&lt;br /&gt;
&lt;br /&gt;
# To stop printing of values run this:&lt;br /&gt;
# crosshairNode.RemoveObserver(observationId)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Select cells of a model using markups fiducial points==&lt;br /&gt;
&lt;br /&gt;
The following script selects cells of a model node that are closest to positions of markups fiducial points.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Get input nodes&lt;br /&gt;
modelNode = slicer.util.getNode('Segment_1') # select cells in this model&lt;br /&gt;
markupsNode = slicer.util.getNode('F') # points will be selected at positions specified by this markups fiducial node&lt;br /&gt;
&lt;br /&gt;
# Create scalar array that will store selection state&lt;br /&gt;
cellScalars = modelNode.GetMesh().GetCellData()&lt;br /&gt;
selectionArray = cellScalars.GetArray('selection')&lt;br /&gt;
if not selectionArray:&lt;br /&gt;
    selectionArray = vtk.vtkIntArray()&lt;br /&gt;
    selectionArray.SetName('selection')&lt;br /&gt;
    selectionArray.SetNumberOfValues(modelNode.GetMesh().GetNumberOfCells())&lt;br /&gt;
    selectionArray.Fill(0)&lt;br /&gt;
    cellScalars.AddArray(selectionArray)&lt;br /&gt;
&lt;br /&gt;
# Set up coloring by selection array&lt;br /&gt;
modelNode.GetDisplayNode().SetActiveScalar(&amp;quot;selection&amp;quot;, vtk.vtkAssignAttribute.CELL_DATA)&lt;br /&gt;
modelNode.GetDisplayNode().SetAndObserveColorNodeID(&amp;quot;vtkMRMLColorTableNodeWarm1&amp;quot;)&lt;br /&gt;
modelNode.GetDisplayNode().SetScalarVisibility(True)&lt;br /&gt;
&lt;br /&gt;
# Initialize cell locator&lt;br /&gt;
cell = vtk.vtkCellLocator()&lt;br /&gt;
cell.SetDataSet(modelNode.GetMesh())&lt;br /&gt;
cell.BuildLocator()&lt;br /&gt;
&lt;br /&gt;
def onPointsModified(observer=None, eventid=None):&lt;br /&gt;
    global markupsNode, selectionArray&lt;br /&gt;
    selectionArray.Fill(0) # set all cells to non-selected by default&lt;br /&gt;
    markupPoints = slicer.util.arrayFromMarkupsControlPoints(markupsNode)&lt;br /&gt;
    closestPoint = [0.0, 0.0, 0.0]&lt;br /&gt;
    cellObj = vtk.vtkGenericCell()&lt;br /&gt;
    cellId = vtk.mutable(0)&lt;br /&gt;
    subId = vtk.mutable(0)&lt;br /&gt;
    dist2 = vtk.mutable(0.0)&lt;br /&gt;
    for markupPoint in markupPoints:&lt;br /&gt;
        cell.FindClosestPoint(markupPoint, closestPoint, cellObj, cellId, subId, dist2)&lt;br /&gt;
        closestCell = cellId.get()&lt;br /&gt;
        if closestCell &amp;gt;=0:&lt;br /&gt;
            selectionArray.SetValue(closestCell, 100) # set selected cell's scalar value to non-zero&lt;br /&gt;
    selectionArray.Modified()&lt;br /&gt;
&lt;br /&gt;
# Initial update&lt;br /&gt;
onPointsModified()&lt;br /&gt;
# Automatic update each time when a markup point is modified&lt;br /&gt;
markupsNodeObserverTag = markupsNode.AddObserver(slicer.vtkMRMLMarkupsFiducialNode.PointModifiedEvent, onPointsModified)&lt;br /&gt;
&lt;br /&gt;
# To stop updating selection, run this:&lt;br /&gt;
# markupsNode.RemoveObserver(markupsNodeObserverTag)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Load volume from .vti file==&lt;br /&gt;
&lt;br /&gt;
Slicer does not provide reader for VTK XML image data file format (as they are not commonly used for storing medical images and they cannot store image axis directions) but such files can be read by using this script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
reader=vtk.vtkXMLImageDataReader()&lt;br /&gt;
reader.SetFileName(&amp;quot;/path/to/file.vti&amp;quot;)&lt;br /&gt;
reader.Update()&lt;br /&gt;
imageData = reader.GetOutput()&lt;br /&gt;
spacing = imageData.GetSpacing()&lt;br /&gt;
origin = imageData.GetOrigin()&lt;br /&gt;
imageData.SetOrigin(0,0,0)&lt;br /&gt;
imageData.SetSpacing(1,1,1)&lt;br /&gt;
volumeNode=slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLScalarVolumeNode&amp;quot;)&lt;br /&gt;
volumeNode.SetAndObserveImageData(imageData)&lt;br /&gt;
volumeNode.SetSpacing(spacing)&lt;br /&gt;
volumeNode.SetOrigin(origin)&lt;br /&gt;
slicer.util.setSliceViewerLayers(volumeNode, fit=True)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Export entire scene as VRML==&lt;br /&gt;
&lt;br /&gt;
Save all surface meshes displayed in the scene (models, markups, etc). Solid colors and coloring by scalar is preserved. Textures are not supported.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
exporter = vtk.vtkVRMLExporter()&lt;br /&gt;
exporter.SetRenderWindow(slicer.app.layoutManager().threeDWidget(0).threeDView().renderWindow())&lt;br /&gt;
exporter.SetFileName('C:/tmp/something.wrl')&lt;br /&gt;
exporter.Write()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Export model to Blender, including color by scalar==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
modelNode = getNode(&amp;quot;Model&amp;quot;)&lt;br /&gt;
plyFilePath = &amp;quot;c:/tmp/model.ply&amp;quot;&lt;br /&gt;
&lt;br /&gt;
modelDisplayNode = modelNode.GetDisplayNode()&lt;br /&gt;
triangles = vtk.vtkTriangleFilter()&lt;br /&gt;
triangles.SetInputConnection(modelDisplayNode.GetOutputPolyDataConnection())&lt;br /&gt;
&lt;br /&gt;
plyWriter = vtk.vtkPLYWriter()&lt;br /&gt;
plyWriter.SetInputConnection(triangles.GetOutputPort())&lt;br /&gt;
lut = vtk.vtkLookupTable()&lt;br /&gt;
lut.DeepCopy(modelDisplayNode.GetColorNode().GetLookupTable())&lt;br /&gt;
lut.SetRange(modelDisplayNode.GetScalarRange())&lt;br /&gt;
plyWriter.SetLookupTable(lut)&lt;br /&gt;
plyWriter.SetArrayName(modelDisplayNode.GetActiveScalarName())&lt;br /&gt;
&lt;br /&gt;
plyWriter.SetFileName(plyFilePath)&lt;br /&gt;
plyWriter.Write()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Export a tract (FiberBundle) to Blender, including color==&lt;br /&gt;
&amp;lt;div id=&amp;quot;Export_a_fiber_tracts_to_Blender.2C_including_color&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Note: an interactive version of this script is now included in the [http://dmri.slicer.org/ SlicerDMRI extension] ([https://github.com/SlicerDMRI/SlicerDMRI/tree/master/Modules/Scripted/TractographyExportPLY module code]). &lt;br /&gt;
After installing SlicerDMRI, go to ''Modules -&amp;gt; Diffusion -&amp;gt; Import and Export -&amp;gt; Export tractography to PLY (mesh)''.&lt;br /&gt;
&lt;br /&gt;
The example below shows how to export a tractography &amp;quot;FiberBundleNode&amp;quot; to a PLY file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lineDisplayNode = getNode(&amp;quot;*LineDisplay*&amp;quot;)&lt;br /&gt;
plyFilePath = &amp;quot;/tmp/fibers.ply&amp;quot;&lt;br /&gt;
&lt;br /&gt;
tuber = vtk.vtkTubeFilter()&lt;br /&gt;
tuber.SetInputData(lineDisplayNode.GetOutputPolyData())&lt;br /&gt;
tuber.Update()&lt;br /&gt;
tubes = tuber.GetOutputDataObject(0)&lt;br /&gt;
scalars = tubes.GetPointData().GetArray(0)&lt;br /&gt;
scalars.SetName(&amp;quot;scalars&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
triangles = vtk.vtkTriangleFilter()&lt;br /&gt;
triangles.SetInputData(tubes)&lt;br /&gt;
triangles.Update()&lt;br /&gt;
&lt;br /&gt;
colorNode = lineDisplayNode.GetColorNode()&lt;br /&gt;
lookupTable = vtk.vtkLookupTable()&lt;br /&gt;
lookupTable.DeepCopy(colorNode.GetLookupTable())&lt;br /&gt;
lookupTable.SetTableRange(0,1)&lt;br /&gt;
&lt;br /&gt;
plyWriter = vtk.vtkPLYWriter()&lt;br /&gt;
plyWriter.SetInputData(triangles.GetOutput())&lt;br /&gt;
plyWriter.SetLookupTable(lookupTable)&lt;br /&gt;
plyWriter.SetArrayName(&amp;quot;scalars&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
plyWriter.SetFileName(plyFilePath)&lt;br /&gt;
plyWriter.Write()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Iterate over tract (FiberBundle) streamline points==&lt;br /&gt;
&lt;br /&gt;
This example shows how to access the points in each line of a FiberBundle as a numpy array (view).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from vtk.util.numpy_support import vtk_to_numpy&lt;br /&gt;
&lt;br /&gt;
fb = getNode(&amp;quot;FiberBundle_F&amp;quot;) # &amp;lt;- fill in node ID here&lt;br /&gt;
&lt;br /&gt;
# get point data as 1d array&lt;br /&gt;
points = slicer.util.arrayFromModelPoints(fb)&lt;br /&gt;
&lt;br /&gt;
# get line cell ids as 1d array&lt;br /&gt;
line_ids = vtk_to_numpy(fb.GetPolyData().GetLines().GetData())&lt;br /&gt;
&lt;br /&gt;
# VTK cell ids are stored as&lt;br /&gt;
#   [ N0 c0_id0 ... c0_id0&lt;br /&gt;
#     N1 c1_id0 ... c1_idN1 ]&lt;br /&gt;
# so we need to&lt;br /&gt;
# - read point count for each line (cell)&lt;br /&gt;
# - grab the ids in that range from `line_ids` array defined above&lt;br /&gt;
# - index the `points` array by those ids&lt;br /&gt;
cur_idx = 1&lt;br /&gt;
for _ in range(pd.GetLines().GetNumberOfCells()):&lt;br /&gt;
    # - read point count for this line (cell)&lt;br /&gt;
    count = lines[cur_idx - 1]&lt;br /&gt;
&lt;br /&gt;
    # - grab the ids in that range from `lines`&lt;br /&gt;
    index_array = line_ids[ cur_idx : cur_idx + count]&lt;br /&gt;
    # update to the next range &lt;br /&gt;
    cur_idx += count + 1&lt;br /&gt;
&lt;br /&gt;
    # - index the point array by those ids&lt;br /&gt;
    line_points = points[index_array]&lt;br /&gt;
&lt;br /&gt;
    # do work here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Clone a node==&lt;br /&gt;
&lt;br /&gt;
This example shows how to make a copy of any node that appears in Subject Hierarchy (in Data module).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Get a node from SampleData that we will clone&lt;br /&gt;
import SampleData&lt;br /&gt;
nodeToClone = SampleData.SampleDataLogic().downloadMRHead()&lt;br /&gt;
&lt;br /&gt;
# Clone the node&lt;br /&gt;
shNode = slicer.vtkMRMLSubjectHierarchyNode.GetSubjectHierarchyNode(slicer.mrmlScene)&lt;br /&gt;
itemIDToClone = shNode.GetItemByDataNode(nodeToClone)&lt;br /&gt;
clonedItemID = slicer.modules.subjecthierarchy.logic().CloneSubjectHierarchyItem(shNode, itemIDToClone)&lt;br /&gt;
clonedNode = shNode.GetItemDataNode(clonedItemID)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Clone a volume==&lt;br /&gt;
This example shows how to clone the MRHead sample volume, including its pixel data and display settings.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sourceVolumeNode = slicer.util.getNode('MRHead')&lt;br /&gt;
volumesLogic = slicer.modules.volumes.logic()&lt;br /&gt;
clonedVolumeNode = volumesLogic.CloneVolume(slicer.mrmlScene, sourceVolumeNode, 'Cloned volume')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Create a new volume==&lt;br /&gt;
This example shows how to create a new empty volume.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nodeName = &amp;quot;MyNewVolume&amp;quot;&lt;br /&gt;
imageSize = [512, 512, 512]&lt;br /&gt;
voxelType=vtk.VTK_UNSIGNED_CHAR&lt;br /&gt;
imageOrigin = [0.0, 0.0, 0.0]&lt;br /&gt;
imageSpacing = [1.0, 1.0, 1.0]&lt;br /&gt;
imageDirections = [[1,0,0], [0,1,0], [0,0,1]]&lt;br /&gt;
fillVoxelValue = 0&lt;br /&gt;
&lt;br /&gt;
# Create an empty image volume, filled with fillVoxelValue&lt;br /&gt;
imageData = vtk.vtkImageData()&lt;br /&gt;
imageData.SetDimensions(imageSize)&lt;br /&gt;
imageData.AllocateScalars(voxelType, 1)&lt;br /&gt;
imageData.GetPointData().GetScalars().Fill(fillVoxelValue)&lt;br /&gt;
# Create volume node&lt;br /&gt;
volumeNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLScalarVolumeNode&amp;quot;, nodeName)&lt;br /&gt;
volumeNode.SetOrigin(imageOrigin)&lt;br /&gt;
volumeNode.SetSpacing(imageSpacing)&lt;br /&gt;
volumeNode.SetIJKToRASDirections(imageDirections)&lt;br /&gt;
volumeNode.SetAndObserveImageData(imageData)&lt;br /&gt;
volumeNode.CreateDefaultDisplayNodes()&lt;br /&gt;
volumeNode.CreateDefaultStorageNode()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get value of a volume at specific voxel coordinates==&lt;br /&gt;
&lt;br /&gt;
This example shows how to get voxel value of &amp;quot;volumeNode&amp;quot; at &amp;quot;ijk&amp;quot; volume voxel coordinates.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
volumeNode = slicer.util.getNode('MRHead')&lt;br /&gt;
ijk = [20,40,30]  # volume voxel coordinates&lt;br /&gt;
&lt;br /&gt;
voxels = slicer.util.arrayFromVolume(volumeNode)  # get voxels as a numpy array&lt;br /&gt;
voxelValue = voxels[ijk[2], ijk[1], ijk[0]]  # note that numpy array index order is kji (not ijk)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Modify voxels in a volume==&lt;br /&gt;
&lt;br /&gt;
Typically the fastest and simplest way of modifying voxels is by using numpy operators. Voxels can be retrieved in a numpy array using the `array` method and modified using standard numpy methods. For example, threshold a volume:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nodeName = 'MRHead'&lt;br /&gt;
thresholdValue = 100&lt;br /&gt;
voxelArray = array(nodeName) # get voxels as numpy array&lt;br /&gt;
voxelArray[voxelArray &amp;lt; thresholdValue] = 0 # modify voxel values&lt;br /&gt;
getNode(nodeName).Modified() # at the end of all processing, notify Slicer that the image modification is completed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This example shows how to change voxels values of the MRHead sample volume.&lt;br /&gt;
The values will be computed by function f(r,a,s,) = (r-10)*(r-10)+(a+15)*(a+15)+s*s.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
volumeNode=slicer.util.getNode('MRHead')&lt;br /&gt;
ijkToRas = vtk.vtkMatrix4x4()&lt;br /&gt;
volumeNode.GetIJKToRASMatrix(ijkToRas)&lt;br /&gt;
imageData=volumeNode.GetImageData()&lt;br /&gt;
extent = imageData.GetExtent()&lt;br /&gt;
for k in range(extent[4], extent[5]+1):&lt;br /&gt;
  for j in range(extent[2], extent[3]+1):&lt;br /&gt;
    for i in range(extent[0], extent[1]+1):&lt;br /&gt;
      position_Ijk=[i, j, k, 1]&lt;br /&gt;
      position_Ras=ijkToRas.MultiplyPoint(position_Ijk)&lt;br /&gt;
      r=position_Ras[0]&lt;br /&gt;
      a=position_Ras[1]&lt;br /&gt;
      s=position_Ras[2]      &lt;br /&gt;
      functionValue=(r-10)*(r-10)+(a+15)*(a+15)+s*s&lt;br /&gt;
      imageData.SetScalarComponentFromDouble(i,j,k,0,functionValue)&lt;br /&gt;
imageData.Modified()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get volume voxel coordinates from markup fiducial RAS coordinates==&lt;br /&gt;
&lt;br /&gt;
This example shows how to get voxel coordinate of a volume corresponding to a markup fiducial point position.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Inputs&lt;br /&gt;
volumeNode = getNode('MRHead')&lt;br /&gt;
markupsNode = getNode('F')&lt;br /&gt;
markupsIndex = 0&lt;br /&gt;
&lt;br /&gt;
# Get point coordinate in RAS&lt;br /&gt;
point_Ras = [0, 0, 0, 1]&lt;br /&gt;
markupsNode.GetNthFiducialWorldCoordinates(markupsIndex, point_Ras)&lt;br /&gt;
&lt;br /&gt;
# If volume node is transformed, apply that transform to get volume's RAS coordinates&lt;br /&gt;
transformRasToVolumeRas = vtk.vtkGeneralTransform()&lt;br /&gt;
slicer.vtkMRMLTransformNode.GetTransformBetweenNodes(None, volumeNode.GetParentTransformNode(), transformRasToVolumeRas)&lt;br /&gt;
point_VolumeRas = transformRasToVolumeRas.TransformPoint(point_Ras[0:3])&lt;br /&gt;
&lt;br /&gt;
# Get voxel coordinates from physical coordinates&lt;br /&gt;
volumeRasToIjk = vtk.vtkMatrix4x4()&lt;br /&gt;
volumeNode.GetRASToIJKMatrix(volumeRasToIjk)&lt;br /&gt;
point_Ijk = [0, 0, 0, 1]&lt;br /&gt;
volumeRasToIjk.MultiplyPoint(np.append(point_VolumeRas,1.0), point_Ijk)&lt;br /&gt;
point_Ijk = [ int(round(c)) for c in point_Ijk[0:3] ]&lt;br /&gt;
&lt;br /&gt;
# Print output&lt;br /&gt;
print(point_Ijk)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get markup fiducial RAS coordinates from volume voxel coordinates==&lt;br /&gt;
&lt;br /&gt;
This example shows how to get position of maximum intensity voxel of a volume (determined by numpy, in IJK coordinates) in RAS coordinates so that it can be marked with a markup fiducial.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Inputs&lt;br /&gt;
volumeNode = getNode('MRHead')&lt;br /&gt;
markupsNode = getNode('F')&lt;br /&gt;
&lt;br /&gt;
# Get voxel position in IJK coordinate system&lt;br /&gt;
import numpy as np&lt;br /&gt;
volumeArray = slicer.util.arrayFromVolume(volumeNode)&lt;br /&gt;
# Get position of highest voxel value&lt;br /&gt;
point_Kji = np.where(volumeArray == volumeArray.max())&lt;br /&gt;
point_Ijk = [point_Kji[2][0], point_Kji[1][0], point_Kji[0][0]]&lt;br /&gt;
&lt;br /&gt;
# Get physical coordinates from voxel coordinates&lt;br /&gt;
volumeIjkToRas = vtk.vtkMatrix4x4()&lt;br /&gt;
volumeNode.GetIJKToRASMatrix(volumeIjkToRas)&lt;br /&gt;
point_VolumeRas = [0, 0, 0, 1]&lt;br /&gt;
volumeIjkToRas.MultiplyPoint(np.append(point_Ijk,1.0), point_VolumeRas)&lt;br /&gt;
&lt;br /&gt;
# If volume node is transformed, apply that transform to get volume's RAS coordinates&lt;br /&gt;
transformVolumeRasToRas = vtk.vtkGeneralTransform()&lt;br /&gt;
slicer.vtkMRMLTransformNode.GetTransformBetweenNodes(volumeNode.GetParentTransformNode(), None, transformVolumeRasToRas)&lt;br /&gt;
point_Ras = transformVolumeRasToRas.TransformPoint(point_VolumeRas[0:3])&lt;br /&gt;
&lt;br /&gt;
# Add a markup at the computed position and print its coordinates&lt;br /&gt;
markupsNode.AddFiducial(point_Ras[0], point_Ras[1], point_Ras[2], &amp;quot;max&amp;quot;)&lt;br /&gt;
print(point_Ras)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get the values of all voxels for a label value==&lt;br /&gt;
&lt;br /&gt;
If you have a background image called ‘Volume’ and a mask called ‘Volume-label’ created with the Editor you could do something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import numpy&lt;br /&gt;
volume = array('Volume')&lt;br /&gt;
label = array('Volume-label')&lt;br /&gt;
points  = numpy.where( label == 1 )  # or use another label number depending on what you segmented&lt;br /&gt;
values  = volume[points] # this will be a list of the label values&lt;br /&gt;
values.mean() # should match the mean value of LabelStatistics calculation as a double-check&lt;br /&gt;
numpy.savetxt('values.txt', values)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Access values in a DTI tensor volume==&lt;br /&gt;
This example shows how to access individual tensors at the voxel level.&lt;br /&gt;
&lt;br /&gt;
First load your DWI volume and estimate tensors to produce a DTI volume called ‘Output DTI Volume’&lt;br /&gt;
&lt;br /&gt;
Then open the python window: View-&amp;gt;Python interactor&lt;br /&gt;
&lt;br /&gt;
Use this command to access tensors through numpy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tensors = array('Output DTI Volume')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Type the following code into the Python window to access all tensor components using vtk commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
volumeNode=slicer.util.getNode('Output DTI Volume')&lt;br /&gt;
imageData=volumeNode.GetImageData()&lt;br /&gt;
tensors = imageData.GetPointData().GetTensors()&lt;br /&gt;
extent = imageData.GetExtent()&lt;br /&gt;
idx = 0&lt;br /&gt;
for k in range(extent[4], extent[5]+1):&lt;br /&gt;
  for j in range(extent[2], extent[3]+1):&lt;br /&gt;
    for i in range(extent[0], extent[1]+1):&lt;br /&gt;
      tensors.GetTuple9(idx)&lt;br /&gt;
      idx += 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Change window/level (brightness/contrast) or colormap of a volume==&lt;br /&gt;
This example shows how to change window/level of the MRHead sample volume.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
volumeNode = getNode('MRHead')&lt;br /&gt;
displayNode = volumeNode.GetDisplayNode()&lt;br /&gt;
displayNode.AutoWindowLevelOff()&lt;br /&gt;
displayNode.SetWindow(50)&lt;br /&gt;
displayNode.SetLevel(100)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change color mapping from grayscale to rainbow:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
displayNode.SetAndObserveColorNodeID('vtkMRMLColorTableNodeRainbow')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Make mouse left-click and drag on the image adjust window/level==&lt;br /&gt;
&lt;br /&gt;
In older Slicer versions, by default, left-click and drag in a slice view adjusted window/level of the displayed image. Window/level adjustment is now a new mouse mode that can be activated by clicking on its toolbar button or running this code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicer.app.applicationLogic().GetInteractionNode().SetCurrentInteractionMode(slicer.vtkMRMLInteractionNode.AdjustWindowLevel)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Create custom color table==&lt;br /&gt;
This example shows how to create a new color table, for example with inverted color range from the default Ocean color table.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
invertedocean = slicer.vtkMRMLColorTableNode()&lt;br /&gt;
invertedocean.SetTypeToUser()&lt;br /&gt;
invertedocean.SetNumberOfColors(256)&lt;br /&gt;
invertedocean.SetName(&amp;quot;InvertedOcean&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
for i in range(0,255):&lt;br /&gt;
    invertedocean.SetColor(i, 0.0, 1 - (i+1e-16)/255.0, 1.0, 1.0)&lt;br /&gt;
&lt;br /&gt;
slicer.mrmlScene.AddNode(invertedocean)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Manipulate a Slice View==&lt;br /&gt;
&lt;br /&gt;
===Change slice offset===&lt;br /&gt;
&lt;br /&gt;
Equivalent to moving the slider in slice view controller.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
layoutManager = slicer.app.layoutManager()&lt;br /&gt;
red = layoutManager.sliceWidget('Red')&lt;br /&gt;
redLogic = red.sliceLogic()&lt;br /&gt;
# Print current slice offset position&lt;br /&gt;
print(redLogic.GetSliceOffset())&lt;br /&gt;
# Change slice position&lt;br /&gt;
redLogic.SetSliceOffset(20)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Change slice orientation===&lt;br /&gt;
&lt;br /&gt;
Get 'Red' slice node and rotate around X and Y axes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sliceNode = slicer.app.layoutManager().sliceWidget('Red').mrmlSliceNode()&lt;br /&gt;
sliceToRas = sliceNode.GetSliceToRAS()&lt;br /&gt;
transform=vtk.vtkTransform()&lt;br /&gt;
transform.SetMatrix(SliceToRAS)&lt;br /&gt;
transform.RotateX(20)&lt;br /&gt;
transform.RotateY(15)&lt;br /&gt;
sliceToRas.DeepCopy(transform.GetMatrix())&lt;br /&gt;
sliceNode.UpdateMatrices()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Show slice views in 3D window===&lt;br /&gt;
&lt;br /&gt;
Equivalent to clicking 'eye' icon in the slice view controller.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
layoutManager = slicer.app.layoutManager()&lt;br /&gt;
for sliceViewName in layoutManager.sliceViewNames():&lt;br /&gt;
  controller = layoutManager.sliceWidget(sliceViewName).sliceController()&lt;br /&gt;
  controller.setSliceVisible(True)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Reset field of view to show background volume maximized===&lt;br /&gt;
&lt;br /&gt;
Equivalent to click small rectangle button (&amp;quot;Adjust the slice viewer's field of view...&amp;quot;) in the slice view controller.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicer.util.resetSliceViews()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Rotate slice views to volume plane===&lt;br /&gt;
&lt;br /&gt;
Aligns slice views to volume axes, shows original image acquisition planes in slice views.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
volumeNode = slicer.util.getNode('MRHead')&lt;br /&gt;
layoutManager = slicer.app.layoutManager()&lt;br /&gt;
for sliceViewName in layoutManager.sliceViewNames():&lt;br /&gt;
  layoutManager.sliceWidget(sliceViewName).mrmlSliceNode().RotateToVolumePlane(volumeNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Iterate over current visible slice views, and set foreground and background images===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicer.util.setSliceViewerLayers(background=mrVolume, foreground=ctVolume)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Internally, this method performs something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
layoutManager = slicer.app.layoutManager()&lt;br /&gt;
for sliceViewName in layoutManager.sliceViewNames():&lt;br /&gt;
     compositeNode = layoutManager.sliceWidget(sliceViewName).sliceLogic().GetSliceCompositeNode()&lt;br /&gt;
     # setup background volume&lt;br /&gt;
     compositeNode.SetBackgroundVolumeID(mrVolume.GetID())&lt;br /&gt;
     # setup foreground volume&lt;br /&gt;
     compositeNode.SetForegroundVolumeID(ctVolume.GetID())&lt;br /&gt;
     # change opacity&lt;br /&gt;
     compositeNode.SetForegroundOpacity(0.3)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Show a volume in slice views==&lt;br /&gt;
&lt;br /&gt;
Recommended:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
volumeNode = slicer.util.getNode('YourVolumeNode')&lt;br /&gt;
slicer.util.setSliceViewerLayers(background=volumeNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
Show volume in all visible views where volume selection propagation is enabled:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
volumeNode = slicer.util.getNode('YourVolumeNode')&lt;br /&gt;
applicationLogic = slicer.app.applicationLogic()&lt;br /&gt;
selectionNode = applicationLogic.GetSelectionNode()&lt;br /&gt;
selectionNode.SetSecondaryVolumeID(volumeNode.GetID())&lt;br /&gt;
applicationLogic.PropagateForegroundVolumeSelection(0) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
Show volume in selected views:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n =  slicer.util.getNode('YourVolumeNode')&lt;br /&gt;
for color in ['Red', 'Yellow', 'Green']:&lt;br /&gt;
    slicer.app.layoutManager().sliceWidget(color).sliceLogic().GetSliceCompositeNode().SetForegroundVolumeID(n.GetID())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Show comparison view of all model files a folder==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Inputs&lt;br /&gt;
modelDir = &amp;quot;c:/some/folder/containing/models&amp;quot;&lt;br /&gt;
modelFileExt = &amp;quot;stl&amp;quot;&lt;br /&gt;
numberOfColumns = 4&lt;br /&gt;
&lt;br /&gt;
import math&lt;br /&gt;
import os&lt;br /&gt;
modelFiles = list(f for f in os.listdir(modelDir) if f.endswith('.' + modelFileExt))&lt;br /&gt;
&lt;br /&gt;
# Create a custom layout&lt;br /&gt;
numberOfRows = int(math.ceil(len(modelFiles)/numberOfColumns))&lt;br /&gt;
customLayoutId=567  # we pick a random id that is not used by others&lt;br /&gt;
slicer.app.setRenderPaused(True)&lt;br /&gt;
customLayout = '&amp;lt;layout type=&amp;quot;vertical&amp;quot;&amp;gt;'&lt;br /&gt;
viewIndex = 0&lt;br /&gt;
for rowIndex in range(numberOfRows):&lt;br /&gt;
  customLayout += '&amp;lt;item&amp;gt;&amp;lt;layout type=&amp;quot;horizontal&amp;quot;&amp;gt;'&lt;br /&gt;
  for colIndex in range(numberOfColumns):&lt;br /&gt;
    name = os.path.basename(modelFiles[viewIndex]) if viewIndex &amp;lt; len(modelFiles) else &amp;quot;compare &amp;quot;+str(viewIndex)&lt;br /&gt;
    customLayout += '&amp;lt;item&amp;gt;&amp;lt;view class=&amp;quot;vtkMRMLViewNode&amp;quot; singletontag=&amp;quot;'+name&lt;br /&gt;
    customLayout += '&amp;quot;&amp;gt;&amp;lt;property name=&amp;quot;viewlabel&amp;quot; action=&amp;quot;default&amp;quot;&amp;gt;'+name+'&amp;lt;/property&amp;gt;&amp;lt;/view&amp;gt;&amp;lt;/item&amp;gt;'&lt;br /&gt;
    viewIndex += 1&lt;br /&gt;
  customLayout += '&amp;lt;/layout&amp;gt;&amp;lt;/item&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
customLayout += '&amp;lt;/layout&amp;gt;'&lt;br /&gt;
if not slicer.app.layoutManager().layoutLogic().GetLayoutNode().SetLayoutDescription(customLayoutId, customLayout):&lt;br /&gt;
    slicer.app.layoutManager().layoutLogic().GetLayoutNode().AddLayoutDescription(customLayoutId, customLayout)&lt;br /&gt;
&lt;br /&gt;
slicer.app.layoutManager().setLayout(customLayoutId)&lt;br /&gt;
&lt;br /&gt;
# Load and show each model in a view&lt;br /&gt;
for modelIndex, modelFile in enumerate(modelFiles):&lt;br /&gt;
    # Show only one model in each view&lt;br /&gt;
    name = os.path.basename(modelFile)&lt;br /&gt;
    viewNode = slicer.mrmlScene.GetSingletonNode(name, &amp;quot;vtkMRMLViewNode&amp;quot;)&lt;br /&gt;
    viewNode.LinkedControlOn()&lt;br /&gt;
    modelNode = slicer.util.loadModel(modelDir+&amp;quot;/&amp;quot;+modelFile)&lt;br /&gt;
    modelNode.GetDisplayNode().AddViewNodeID(viewNode.GetID())&lt;br /&gt;
&lt;br /&gt;
slicer.app.setRenderPaused(False)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Change opacity of foreground volume in slice views==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicer.util.setSliceViewerLayers(foregroundOpacity=0.4)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
Change opacity in a selected view&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lm = slicer.app.layoutManager()&lt;br /&gt;
sliceLogic = lm.sliceWidget('Red').sliceLogic()&lt;br /&gt;
compositeNode = sliceLogic.GetSliceCompositeNode()&lt;br /&gt;
compositeNode.SetForegroundOpacity(0.4)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fit slice plane to markup fiducials==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sliceNode = slicer.mrmlScene.GetNodeByID(&amp;quot;vtkMRMLSliceNodeRed&amp;quot;)&lt;br /&gt;
markupsNode = slicer.mrmlScene.GetFirstNodeByName(&amp;quot;F&amp;quot;)&lt;br /&gt;
# Get markup point positions as numpy arrays&lt;br /&gt;
import numpy as np&lt;br /&gt;
p1 = np.zeros(3)&lt;br /&gt;
p2 = np.zeros(3)&lt;br /&gt;
p3 = np.zeros(3)&lt;br /&gt;
markupsNode.GetNthFiducialPosition(0, p1)&lt;br /&gt;
markupsNode.GetNthFiducialPosition(1, p2)&lt;br /&gt;
markupsNode.GetNthFiducialPosition(2, p3)&lt;br /&gt;
# Get plane axis directions&lt;br /&gt;
n = np.cross(p2-p1, p2-p3) # plane normal direction&lt;br /&gt;
n = n/np.linalg.norm(n)&lt;br /&gt;
t = np.cross([0.0, 0.0, 1], n) # plane transverse direction&lt;br /&gt;
t = t/np.linalg.norm(t)&lt;br /&gt;
# Set slice plane orientation and position&lt;br /&gt;
sliceNode.SetSliceToRASByNTP(n[0], n[1], n[2], t[0], t[1], t[2], p1[0], p1[1], p1[2], 0)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Save a series of images from a Slice View==&lt;br /&gt;
&lt;br /&gt;
You can use ScreenCapture module to capture series of images. To do it programmatically, save the following into a file such as '/tmp/record.py' and then in the slicer python console type &amp;quot;execfile('/tmp/record.py')&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
layoutName = 'Green'&lt;br /&gt;
imagePathPattern = '/tmp/image-%03d.png'&lt;br /&gt;
steps = 10&lt;br /&gt;
&lt;br /&gt;
widget = slicer.app.layoutManager().sliceWidget(layoutName)&lt;br /&gt;
view = widget.sliceView()&lt;br /&gt;
logic = widget.sliceLogic()&lt;br /&gt;
bounds = [0,]*6&lt;br /&gt;
logic.GetSliceBounds(bounds)&lt;br /&gt;
&lt;br /&gt;
for step in range(steps):&lt;br /&gt;
    offset = bounds[4] + step/(1.*steps) * (bounds[5]-bounds[4])&lt;br /&gt;
    logic.SetSliceOffset(offset)&lt;br /&gt;
    view.forceRender()&lt;br /&gt;
    image = qt.QPixmap.grabWidget(view).toImage()&lt;br /&gt;
    image.save(imagePathPattern % step)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Rasterize a model and save it to a series of image files==&lt;br /&gt;
&lt;br /&gt;
This example shows how to generate a stack of image files from an STL file:&lt;br /&gt;
&lt;br /&gt;
 inputModelFile = &amp;quot;/some/input/folder/SomeShape.stl&amp;quot;&lt;br /&gt;
 outputDir = &amp;quot;/some/output/folder&amp;quot;&lt;br /&gt;
 outputVolumeLabelValue = 100&lt;br /&gt;
 outputVolumeSpacingMm = [0.5, 0.5, 0.5]&lt;br /&gt;
 outputVolumeMarginMm = [10.0, 10.0, 10.0]&lt;br /&gt;
 &lt;br /&gt;
 # Read model&lt;br /&gt;
 inputModel = slicer.util.loadModel(inputModelFile)&lt;br /&gt;
 &lt;br /&gt;
 # Determine output volume geometry and create a corresponding reference volume&lt;br /&gt;
 import math&lt;br /&gt;
 import numpy as np&lt;br /&gt;
 bounds = np.zeros(6)&lt;br /&gt;
 inputModel.GetBounds(bounds)&lt;br /&gt;
 imageData = vtk.vtkImageData()&lt;br /&gt;
 imageSize = [ int((bounds[axis*2+1]-bounds[axis*2]+outputVolumeMarginMm[axis]*2.0)/outputVolumeSpacingMm[axis]) for axis in range(3) ]&lt;br /&gt;
 imageOrigin = [ bounds[axis*2]-outputVolumeMarginMm[axis] for axis in range(3) ]&lt;br /&gt;
 imageData.SetDimensions(imageSize)&lt;br /&gt;
 imageData.AllocateScalars(vtk.VTK_UNSIGNED_CHAR, 1)&lt;br /&gt;
 imageData.GetPointData().GetScalars().Fill(0)&lt;br /&gt;
 referenceVolumeNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLScalarVolumeNode&amp;quot;)&lt;br /&gt;
 referenceVolumeNode.SetOrigin(imageOrigin)&lt;br /&gt;
 referenceVolumeNode.SetSpacing(outputVolumeSpacingMm)&lt;br /&gt;
 referenceVolumeNode.SetAndObserveImageData(imageData)&lt;br /&gt;
 referenceVolumeNode.CreateDefaultDisplayNodes()&lt;br /&gt;
 &lt;br /&gt;
 # Convert model to labelmap&lt;br /&gt;
 seg = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLSegmentationNode')&lt;br /&gt;
 seg.SetReferenceImageGeometryParameterFromVolumeNode(referenceVolumeNode)&lt;br /&gt;
 slicer.modules.segmentations.logic().ImportModelToSegmentationNode(inputModel, seg)&lt;br /&gt;
 seg.CreateBinaryLabelmapRepresentation()&lt;br /&gt;
 outputLabelmapVolumeNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLLabelMapVolumeNode')&lt;br /&gt;
 slicer.modules.segmentations.logic().ExportVisibleSegmentsToLabelmapNode(seg, outputLabelmapVolumeNode, referenceVolumeNode)&lt;br /&gt;
 outputLabelmapVolumeArray = (slicer.util.arrayFromVolume(outputLabelmapVolumeNode) * outputVolumeLabelValue).astype('int8')&lt;br /&gt;
 &lt;br /&gt;
 # Write labelmap volume to series of TIFF files&lt;br /&gt;
 pip_install(&amp;quot;imageio&amp;quot;)&lt;br /&gt;
 import imageio&lt;br /&gt;
 for i in range(len(outputLabelmapVolumeArray)):&lt;br /&gt;
     imageio.imwrite(f'{outputDir}/image_{i:03}.tiff', outputLabelmapVolumeArray[i])&lt;br /&gt;
&lt;br /&gt;
==Save the scene into a new directory==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Create a new directory where the scene will be saved into&lt;br /&gt;
import time&lt;br /&gt;
sceneSaveDirectory = slicer.app.temporaryPath + &amp;quot;/saved-scene-&amp;quot; + time.strftime(&amp;quot;%Y%m%d-%H%M%S&amp;quot;)&lt;br /&gt;
if not os.access(sceneSaveDirectory, os.F_OK):&lt;br /&gt;
  os.makedirs(sceneSaveDirectory)&lt;br /&gt;
&lt;br /&gt;
# Save the scene&lt;br /&gt;
if slicer.app.applicationLogic().SaveSceneToSlicerDataBundleDirectory(sceneSaveDirectory, None):&lt;br /&gt;
  logging.info(&amp;quot;Scene saved to: {0}&amp;quot;.format(sceneSaveDirectory))&lt;br /&gt;
else:&lt;br /&gt;
  logging.error(&amp;quot;Scene saving failed&amp;quot;) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Save the scene into a single MRB file==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Generate file name&lt;br /&gt;
import time&lt;br /&gt;
sceneSaveFilename = slicer.app.temporaryPath + &amp;quot;/saved-scene-&amp;quot; + time.strftime(&amp;quot;%Y%m%d-%H%M%S&amp;quot;) + &amp;quot;.mrb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Save scene&lt;br /&gt;
if slicer.util.saveScene(sceneSaveFilename):&lt;br /&gt;
  logging.info(&amp;quot;Scene saved to: {0}&amp;quot;.format(sceneSaveFilename))&lt;br /&gt;
else:&lt;br /&gt;
  logging.error(&amp;quot;Scene saving failed&amp;quot;) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Save a node to file==&lt;br /&gt;
&lt;br /&gt;
Save a transform node to file (should work with any other node type, if file extension is set to a supported one):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
myNode = getNode(&amp;quot;LinearTransform_3&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
myStorageNode = myNode.CreateDefaultStorageNode()&lt;br /&gt;
myStorageNode.SetFileName(&amp;quot;c:/tmp/something.tfm&amp;quot;)&lt;br /&gt;
myStorageNode.WriteData(myNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Center the 3D View on the Scene==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
layoutManager = slicer.app.layoutManager()&lt;br /&gt;
threeDWidget = layoutManager.threeDWidget(0)&lt;br /&gt;
threeDView = threeDWidget.threeDView()&lt;br /&gt;
threeDView.resetFocalPoint()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Rotate the 3D View==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
layoutManager = slicer.app.layoutManager()&lt;br /&gt;
threeDWidget = layoutManager.threeDWidget(0)&lt;br /&gt;
threeDView = threeDWidget.threeDView()&lt;br /&gt;
threeDView.yaw()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Display text in a 3D view or slice view==&lt;br /&gt;
&lt;br /&gt;
The easiest way to show information overlaid on a viewer is to use corner annotations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
view=slicer.app.layoutManager().threeDWidget(0).threeDView()&lt;br /&gt;
# Set text to &amp;quot;Something&amp;quot;&lt;br /&gt;
view.cornerAnnotation().SetText(vtk.vtkCornerAnnotation.UpperRight,&amp;quot;Something&amp;quot;)&lt;br /&gt;
# Set color to red&lt;br /&gt;
view.cornerAnnotation().GetTextProperty().SetColor(1,0,0)&lt;br /&gt;
# Update the view&lt;br /&gt;
view.forceRender()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To display text in slice views, replace the first line by this line (and consider hiding slice view annotations, to prevent them from overwriting the text you place there):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
view=slicer.app.layoutManager().sliceWidget(&amp;quot;Red&amp;quot;).sliceView()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hide slice view annotations (DataProbe)==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Disable slice annotations immediately&lt;br /&gt;
slicer.modules.DataProbeInstance.infoWidget.sliceAnnotations.sliceViewAnnotationsEnabled=False&lt;br /&gt;
slicer.modules.DataProbeInstance.infoWidget.sliceAnnotations.updateSliceViewFromGUI()&lt;br /&gt;
# Disable slice annotations persistently (after Slicer restarts)&lt;br /&gt;
settings = qt.QSettings()&lt;br /&gt;
settings.setValue('DataProbe/sliceViewAnnotations.enabled', 0)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Turning off interpolation==&lt;br /&gt;
&lt;br /&gt;
You can turn off interpolation for newly loaded volumes with this script from Steve Pieper.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def NoInterpolate(caller,event):&lt;br /&gt;
  for node in slicer.util.getNodes('*').values():&lt;br /&gt;
    if node.IsA('vtkMRMLScalarVolumeDisplayNode'):&lt;br /&gt;
      node.SetInterpolate(0)&lt;br /&gt;
	&lt;br /&gt;
slicer.mrmlScene.AddObserver(slicer.mrmlScene.NodeAddedEvent, NoInterpolate)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The below link explains how to put this in your startup script.&lt;br /&gt;
&lt;br /&gt;
http://www.na-mic.org/Wiki/index.php/AHM2012-Slicer-Python#Refining_the_code_and_UI_with_slicerrc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Customize viewer layout==&lt;br /&gt;
&lt;br /&gt;
Show a custom layout of a 3D view on top of the red slice view:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
customLayout = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;layout type=&amp;quot;vertical&amp;quot; split=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;item&amp;gt;&lt;br /&gt;
   &amp;lt;view class=&amp;quot;vtkMRMLViewNode&amp;quot; singletontag=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;property name=&amp;quot;viewlabel&amp;quot; action=&amp;quot;default&amp;quot;&amp;gt;1&amp;lt;/property&amp;gt;&lt;br /&gt;
   &amp;lt;/view&amp;gt;&lt;br /&gt;
  &amp;lt;/item&amp;gt;&lt;br /&gt;
  &amp;lt;item&amp;gt;&lt;br /&gt;
   &amp;lt;view class=&amp;quot;vtkMRMLSliceNode&amp;quot; singletontag=&amp;quot;Red&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;property name=&amp;quot;orientation&amp;quot; action=&amp;quot;default&amp;quot;&amp;gt;Axial&amp;lt;/property&amp;gt;&lt;br /&gt;
    &amp;lt;property name=&amp;quot;viewlabel&amp;quot; action=&amp;quot;default&amp;quot;&amp;gt;R&amp;lt;/property&amp;gt;&lt;br /&gt;
    &amp;lt;property name=&amp;quot;viewcolor&amp;quot; action=&amp;quot;default&amp;quot;&amp;gt;#F34A33&amp;lt;/property&amp;gt;&lt;br /&gt;
   &amp;lt;/view&amp;gt;&lt;br /&gt;
  &amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/layout&amp;gt;&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Built-in layout IDs are all below 100, so you can choose any large random number&lt;br /&gt;
# for your custom layout ID.&lt;br /&gt;
customLayoutId=501&lt;br /&gt;
&lt;br /&gt;
layoutManager = slicer.app.layoutManager()&lt;br /&gt;
layoutManager.layoutLogic().GetLayoutNode().AddLayoutDescription(customLayoutId, customLayout)                                         &lt;br /&gt;
&lt;br /&gt;
# Switch to the new custom layout &lt;br /&gt;
layoutManager.setLayout(customLayoutId)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See description of standard layouts (that can be used as examples) here:&lt;br /&gt;
https://github.com/Slicer/Slicer/blob/master/Libs/MRML/Logic/vtkMRMLLayoutLogic.cxx&lt;br /&gt;
&lt;br /&gt;
You can use this code snippet to add a button to the layout selector toolbar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Add button to layout selector toolbar for this custom layout&lt;br /&gt;
viewToolBar = mainWindow().findChild('QToolBar', 'ViewToolBar')&lt;br /&gt;
layoutMenu = viewToolBar.widgetForAction(viewToolBar.actions()[0]).menu()&lt;br /&gt;
layoutSwitchActionParent = layoutMenu  # use `layoutMenu` to add inside layout list, use `viewToolBar` to add next the standard layout list&lt;br /&gt;
layoutSwitchAction = layoutSwitchActionParent.addAction(&amp;quot;My view&amp;quot;) # add inside layout list&lt;br /&gt;
layoutSwitchAction.setData(layoutId)&lt;br /&gt;
layoutSwitchAction.setIcon(qt.QIcon(':Icons/Go.png'))&lt;br /&gt;
layoutSwitchAction.setToolTip('3D and slice view')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Customize keyboard shortcuts==&lt;br /&gt;
&lt;br /&gt;
Keyboard shortcuts can be specified for activating any Slicer feature by adding a couple of lines to your &lt;br /&gt;
[[Documentation/{{documentation/version}}/Developers/Python_scripting#How_to_systematically_execute_custom_python_code_at_startup_.3F|.slicerrc file]].&lt;br /&gt;
&lt;br /&gt;
For example, this script registers ''Ctrl+b'', ''Ctrl+n'', ''Ctrl+m'', ''Ctrl+,'' keyboard shortcuts to switch between red, yellow, green, and 4-up view layouts.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
shortcuts = [&lt;br /&gt;
    ('Ctrl+b', lambda: slicer.app.layoutManager().setLayout(slicer.vtkMRMLLayoutNode.SlicerLayoutOneUpRedSliceView)),&lt;br /&gt;
    ('Ctrl+n', lambda: slicer.app.layoutManager().setLayout(slicer.vtkMRMLLayoutNode.SlicerLayoutOneUpYellowSliceView)),&lt;br /&gt;
    ('Ctrl+m', lambda: slicer.app.layoutManager().setLayout(slicer.vtkMRMLLayoutNode.SlicerLayoutOneUpGreenSliceView)),&lt;br /&gt;
    ('Ctrl+,', lambda: slicer.app.layoutManager().setLayout(slicer.vtkMRMLLayoutNode.SlicerLayoutFourUpView))&lt;br /&gt;
    ]&lt;br /&gt;
&lt;br /&gt;
for (shortcutKey, callback) in shortcuts:&lt;br /&gt;
    shortcut = qt.QShortcut(slicer.util.mainWindow())&lt;br /&gt;
    shortcut.setKey(qt.QKeySequence(shortcutKey))&lt;br /&gt;
    shortcut.connect( 'activated()', callback)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here's an example for cycling through Segment Editor effects (requested [https://discourse.slicer.org/t/is-there-a-keystroke-to-cycle-through-effects-in-segment-editor/10117/2 on the forum] for the [http://slicermorph.org SlicerMorph] project).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def cycleEffect(delta=1):&lt;br /&gt;
    try:&lt;br /&gt;
        orderedNames = list(slicer.modules.SegmentEditorWidget.editor.effectNameOrder())&lt;br /&gt;
        allNames = slicer.modules.SegmentEditorWidget.editor.availableEffectNames()&lt;br /&gt;
        for name in allNames:&lt;br /&gt;
            try:&lt;br /&gt;
                orderedNames.index(name)&lt;br /&gt;
            except ValueError:&lt;br /&gt;
                orderedNames.append(name)&lt;br /&gt;
        orderedNames.insert(0, None)&lt;br /&gt;
        activeEffect = slicer.modules.SegmentEditorWidget.editor.activeEffect()&lt;br /&gt;
        if activeEffect:&lt;br /&gt;
            activeName = slicer.modules.SegmentEditorWidget.editor.activeEffect().name&lt;br /&gt;
        else:&lt;br /&gt;
            activeName = None&lt;br /&gt;
        newIndex = (orderedNames.index(activeName) + delta) % len(orderedNames)&lt;br /&gt;
        slicer.modules.SegmentEditorWidget.editor.setActiveEffectByName(orderedNames[newIndex])&lt;br /&gt;
    except AttributeError:&lt;br /&gt;
        # module not active&lt;br /&gt;
        pass&lt;br /&gt;
&lt;br /&gt;
shortcuts = [&lt;br /&gt;
    ('`', lambda: cycleEffect(-1)),&lt;br /&gt;
    ('~', lambda: cycleEffect(1)),&lt;br /&gt;
    ]&lt;br /&gt;
&lt;br /&gt;
for (shortcutKey, callback) in shortcuts:&lt;br /&gt;
    shortcut = qt.QShortcut(slicer.util.mainWindow())&lt;br /&gt;
    shortcut.setKey(qt.QKeySequence(shortcutKey))&lt;br /&gt;
    shortcut.connect( 'activated()', callback)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Customize keyboard/mouse gestures in viewers==&lt;br /&gt;
&lt;br /&gt;
Example for making the 3D view rotate using right-click-and-drag:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
threeDViewWidget = slicer.app.layoutManager().threeDWidget(0)&lt;br /&gt;
cameraDisplayableManager = threeDViewWidget.threeDView().displayableManagerByClassName('vtkMRMLCameraDisplayableManager')&lt;br /&gt;
cameraWidget = cameraDisplayableManager.GetCameraWidget()&lt;br /&gt;
&lt;br /&gt;
# Remove old mapping from right-click-and-drag&lt;br /&gt;
cameraWidget.SetEventTranslationClickAndDrag(cameraWidget.WidgetStateIdle, vtk.vtkCommand.RightButtonPressEvent, vtk.vtkEvent.NoModifier,&lt;br /&gt;
    cameraWidget.WidgetStateRotate, vtk.vtkWidgetEvent.NoEvent, vtk.vtkWidgetEvent.NoEvent)&lt;br /&gt;
&lt;br /&gt;
# Make right-click-and-drag rotate the view&lt;br /&gt;
cameraWidget.SetEventTranslationClickAndDrag(cameraWidget.WidgetStateIdle, vtk.vtkCommand.RightButtonPressEvent, vtk.vtkEvent.NoModifier,&lt;br /&gt;
    cameraWidget.WidgetStateRotate, cameraWidget.WidgetEventRotateStart, cameraWidget.WidgetEventRotateEnd)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Disable certain user interactions in slice views==&lt;br /&gt;
&lt;br /&gt;
For example, disable slice browsing using mouse wheel and keyboard shortcuts in the red slice viewer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
interactorStyle = slicer.app.layoutManager().sliceWidget('Red').sliceView().sliceViewInteractorStyle()&lt;br /&gt;
interactorStyle.SetActionEnabled(interactorStyle.BrowseSlice, False)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hide all slice view controllers:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lm = slicer.app.layoutManager()&lt;br /&gt;
for sliceViewName in lm.sliceViewNames():&lt;br /&gt;
  lm.sliceWidget(sliceViewName).sliceController().setVisible(False)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hide all 3D view controllers:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lm = slicer.app.layoutManager()&lt;br /&gt;
for viewIndex in range(slicer.app.layoutManager().threeDViewCount):&lt;br /&gt;
  lm.threeDWidget(0).threeDController().setVisible(False)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Change default slice view orientation==&lt;br /&gt;
&lt;br /&gt;
You can left-right &amp;quot;flip&amp;quot; slice view orientation presets (show patient left side on left/right side of the screen) by copy-pasting the script below to your [[Documentation/{{documentation/version}}/Developers/FAQ/Python_Scripting#How_to_systematically_execute_custom_python_code_at_startup_.3F| .slicerrc.py file]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Axial slice axes:&lt;br /&gt;
#  1 0 0&lt;br /&gt;
#  0 1 0&lt;br /&gt;
#  0 0 1&lt;br /&gt;
axialSliceToRas=vtk.vtkMatrix3x3()&lt;br /&gt;
&lt;br /&gt;
# Coronal slice axes:&lt;br /&gt;
#  1 0 0 &lt;br /&gt;
#  0 0 -1&lt;br /&gt;
#  0 1 0&lt;br /&gt;
coronalSliceToRas=vtk.vtkMatrix3x3()&lt;br /&gt;
coronalSliceToRas.SetElement(1,1, 0)&lt;br /&gt;
coronalSliceToRas.SetElement(1,2, -1)&lt;br /&gt;
coronalSliceToRas.SetElement(2,1, 1)&lt;br /&gt;
coronalSliceToRas.SetElement(2,2, 0)&lt;br /&gt;
&lt;br /&gt;
# Replace orientation presets in all existing slice nodes and in the default slice node&lt;br /&gt;
sliceNodes = slicer.util.getNodesByClass('vtkMRMLSliceNode')&lt;br /&gt;
sliceNodes.append(slicer.mrmlScene.GetDefaultNodeByClass('vtkMRMLSliceNode'))&lt;br /&gt;
for sliceNode in sliceNodes:&lt;br /&gt;
  orientationPresetName = sliceNode.GetOrientation()&lt;br /&gt;
  sliceNode.RemoveSliceOrientationPreset(&amp;quot;Axial&amp;quot;)&lt;br /&gt;
  sliceNode.AddSliceOrientationPreset(&amp;quot;Axial&amp;quot;, axialSliceToRas)&lt;br /&gt;
  sliceNode.RemoveSliceOrientationPreset(&amp;quot;Coronal&amp;quot;)&lt;br /&gt;
  sliceNode.AddSliceOrientationPreset(&amp;quot;Coronal&amp;quot;, coronalSliceToRas)&lt;br /&gt;
  sliceNode.SetOrientation(orientationPresetName)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Set all slice views linked by default==&lt;br /&gt;
&lt;br /&gt;
You can make slice views linked by default (when application starts or the scene is cleared) by copy-pasting the script below to your [[Documentation/{{documentation/version}}/Developers/FAQ/Python_Scripting#How_to_systematically_execute_custom_python_code_at_startup_.3F| .slicerrc.py file]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Set linked slice views  in all existing slice composite nodes and in the default node&lt;br /&gt;
sliceCompositeNodes = slicer.util.getNodesByClass('vtkMRMLSliceCompositeNode')&lt;br /&gt;
defaultSliceCompositeNode = slicer.mrmlScene.GetDefaultNodeByClass('vtkMRMLSliceCompositeNode')&lt;br /&gt;
if not defaultSliceCompositeNode:&lt;br /&gt;
  defaultSliceCompositeNode = slicer.mrmlScene.CreateNodeByClass('vtkMRMLSliceCompositeNode')&lt;br /&gt;
  slicer.mrmlScene.AddDefaultNode(defaultSliceCompositeNode)&lt;br /&gt;
sliceCompositeNodes.append(defaultSliceCompositeNode)&lt;br /&gt;
for sliceCompositeNode in sliceCompositeNodes:&lt;br /&gt;
  sliceCompositeNode.SetLinkedControl(True)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Set crosshair jump mode to centered by default==&lt;br /&gt;
&lt;br /&gt;
You can change default slice jump mode (when application starts or the scene is cleared) by copy-pasting the script below to your [[Documentation/{{documentation/version}}/Developers/FAQ/Python_Scripting#How_to_systematically_execute_custom_python_code_at_startup_.3F| .slicerrc.py file]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
crosshair=slicer.mrmlScene.GetFirstNodeByClass(&amp;quot;vtkMRMLCrosshairNode&amp;quot;)&lt;br /&gt;
crosshair.SetCrosshairBehavior(crosshair.CenteredJumpSlice)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Set up custom units in slice view ruler==&lt;br /&gt;
&lt;br /&gt;
For microscopy or micro-CT images you may want to switch unit to micrometer instead of the default mm. To do that, 1. change the unit in Application settings / Units and 2. update ruler display settings using the script below (it can be copied to your Application startup script):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lm = slicer.app.layoutManager()&lt;br /&gt;
for sliceViewName in lm.sliceViewNames():&lt;br /&gt;
  sliceView = lm.sliceWidget(sliceViewName).sliceView()&lt;br /&gt;
  displayableManager = sliceView.displayableManagerByClassName(&amp;quot;vtkMRMLRulerDisplayableManager&amp;quot;)&lt;br /&gt;
  displayableManager.RemoveAllRulerScalePresets()&lt;br /&gt;
  displayableManager.AddRulerScalePreset(   0.001, 5, 2, &amp;quot;nm&amp;quot;, 1000.0)&lt;br /&gt;
  displayableManager.AddRulerScalePreset(   0.010, 5, 2, &amp;quot;nm&amp;quot;, 1000.0)&lt;br /&gt;
  displayableManager.AddRulerScalePreset(   0.100, 5, 2, &amp;quot;nm&amp;quot;, 1000.0)&lt;br /&gt;
  displayableManager.AddRulerScalePreset(   0.500, 5, 1, &amp;quot;nm&amp;quot;, 1000.0)&lt;br /&gt;
  displayableManager.AddRulerScalePreset(   1.0,   5, 2, &amp;quot;um&amp;quot;,    1.0)&lt;br /&gt;
  displayableManager.AddRulerScalePreset(   5.0,   5, 1, &amp;quot;um&amp;quot;,    1.0)&lt;br /&gt;
  displayableManager.AddRulerScalePreset(  10.0,   5, 2, &amp;quot;um&amp;quot;,    1.0)&lt;br /&gt;
  displayableManager.AddRulerScalePreset(  50.0,   5, 1, &amp;quot;um&amp;quot;,    1.0)&lt;br /&gt;
  displayableManager.AddRulerScalePreset( 100.0,   5, 2, &amp;quot;um&amp;quot;,    1.0)&lt;br /&gt;
  displayableManager.AddRulerScalePreset( 500.0,   5, 1, &amp;quot;um&amp;quot;,    1.0)&lt;br /&gt;
  displayableManager.AddRulerScalePreset(1000.0,   5, 2, &amp;quot;mm&amp;quot;,    0.001)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Show orientation marker in all views==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
viewNodes = slicer.util.getNodesByClass('vtkMRMLAbstractViewNode')&lt;br /&gt;
for viewNode in viewNodes:&lt;br /&gt;
  viewNode.SetOrientationMarkerType(slicer.vtkMRMLAbstractViewNode.OrientationMarkerTypeAxes)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Show a slice view outside the view layout==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
layoutName = &amp;quot;TestSlice1&amp;quot;&lt;br /&gt;
layoutLabel = &amp;quot;TS1&amp;quot;&lt;br /&gt;
# ownerNode manages this view instead of the layout manager (it can be any node in the scene)&lt;br /&gt;
viewOwnerNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLScriptedModuleNode&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Create MRML nodes&lt;br /&gt;
viewNode = slicer.vtkMRMLSliceNode()&lt;br /&gt;
viewNode.SetName(layoutName)&lt;br /&gt;
viewNode.SetLayoutName(layoutName)&lt;br /&gt;
viewNode.SetLayoutLabel(layoutLabel)&lt;br /&gt;
viewNode.SetLayoutColor(1, 1, 0)&lt;br /&gt;
viewNode.SetAndObserveParentLayoutNodeID(viewOwnerNode.GetID())&lt;br /&gt;
viewNode = slicer.mrmlScene.AddNode(viewNode)&lt;br /&gt;
sliceCompositeNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLSliceCompositeNode&amp;quot;)&lt;br /&gt;
sliceCompositeNode.SetLayoutName(layoutName)&lt;br /&gt;
&lt;br /&gt;
# Create widget&lt;br /&gt;
viewWidget = slicer.qMRMLSliceWidget()&lt;br /&gt;
viewWidget.sliceViewName = layoutName&lt;br /&gt;
viewWidget.sliceViewLabel = layoutLabel&lt;br /&gt;
c = viewNode.GetLayoutColor()&lt;br /&gt;
viewWidget.sliceViewColor = qt.QColor.fromRgbF(c[0],c[1],c[2])&lt;br /&gt;
viewWidget.setMRMLScene(slicer.mrmlScene)&lt;br /&gt;
viewWidget.setMRMLSliceNode(viewNode)&lt;br /&gt;
sliceLogics = slicer.app.applicationLogic().GetSliceLogics()&lt;br /&gt;
viewWidget.setSliceLogics(sliceLogics)&lt;br /&gt;
sliceLogics.AddItem(viewWidget.sliceLogic())&lt;br /&gt;
viewWidget.show()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Show a 3D view outside the view layout==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
layoutName = &amp;quot;Test3DView&amp;quot;&lt;br /&gt;
layoutLabel = &amp;quot;T3&amp;quot;&lt;br /&gt;
layoutColor = [1.0, 1.0, 0.0]&lt;br /&gt;
# ownerNode manages this view instead of the layout manager (it can be any node in the scene)&lt;br /&gt;
viewOwnerNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLScriptedModuleNode&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Create MRML node&lt;br /&gt;
viewNode = slicer.vtkMRMLViewNode()&lt;br /&gt;
viewNode.SetName(layoutName)&lt;br /&gt;
viewNode.SetLayoutName(layoutName)&lt;br /&gt;
viewNode.SetLayoutLabel(layoutLabel)&lt;br /&gt;
viewNode.SetLayoutColor(layoutColor)&lt;br /&gt;
viewNode.SetAndObserveParentLayoutNodeID(viewOwnerNode.GetID())&lt;br /&gt;
viewNode = slicer.mrmlScene.AddNode(viewNode)&lt;br /&gt;
&lt;br /&gt;
# Create widget&lt;br /&gt;
viewWidget = slicer.qMRMLThreeDWidget()&lt;br /&gt;
viewWidget.viewLabel = layoutLabel&lt;br /&gt;
viewWidget.viewColor = qt.QColor.fromRgbF(*layoutColor)&lt;br /&gt;
viewWidget.setMRMLScene(slicer.mrmlScene)&lt;br /&gt;
viewWidget.setMRMLViewNode(viewNode)&lt;br /&gt;
viewWidget.show()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get displayable manager of a certain type for a certain view==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
threeDViewWidget = slicer.app.layoutManager().threeDWidget(0)&lt;br /&gt;
modelDisplayableManager = threeDViewWidget.threeDView().displayableManagerByClassName('vtkMRMLModelDisplayableManager')&lt;br /&gt;
if modelDisplayableManager is None:&lt;br /&gt;
  logging.error('Failed to find the model displayable manager')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Running an ITK filter in Python using SimpleITK==&lt;br /&gt;
Open the &amp;quot;Sample Data&amp;quot; module and download &amp;quot;MR Head&amp;quot;, then paste the following snippet in Python interactor:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import SampleData&lt;br /&gt;
import SimpleITK as sitk&lt;br /&gt;
import sitkUtils&lt;br /&gt;
&lt;br /&gt;
# Get input volume node&lt;br /&gt;
inputVolumeNode = SampleData.SampleDataLogic().downloadMRHead()&lt;br /&gt;
# Create new volume node for output&lt;br /&gt;
outputVolumeNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLScalarVolumeNode', 'MRHeadFiltered')&lt;br /&gt;
&lt;br /&gt;
# Run processing&lt;br /&gt;
inputImage = sitkUtils.PullVolumeFromSlicer(inputVolumeNode)&lt;br /&gt;
filter = sitk.SignedMaurerDistanceMapImageFilter()&lt;br /&gt;
outputImage = filter.Execute(inputImage)&lt;br /&gt;
sitkUtils.PushVolumeToSlicer(outputImage, outputVolumeNode)&lt;br /&gt;
&lt;br /&gt;
# Show processing result&lt;br /&gt;
slicer.util.setSliceViewerLayers(background=outputVolumeNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More information:&lt;br /&gt;
&lt;br /&gt;
*See the SimpleITK documentation for SimpleITK examples: http://www.itk.org/SimpleITKDoxygen/html/examples.html&lt;br /&gt;
*sitkUtils in Slicer is used for pushing and pulling images from Slicer to SimpleITK: https://github.com/Slicer/Slicer/blob/master/Base/Python/sitkUtils.py&lt;br /&gt;
&lt;br /&gt;
==Get current mouse coordinates in a slice view==&lt;br /&gt;
&lt;br /&gt;
You can get 3D (RAS) coordinates of the current mouse cursor from the crosshair singleton node as shown in the example below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def onMouseMoved(observer,eventid):  &lt;br /&gt;
  ras=[0,0,0]&lt;br /&gt;
  crosshairNode.GetCursorPositionRAS(ras)&lt;br /&gt;
  print(ras)&lt;br /&gt;
&lt;br /&gt;
crosshairNode=slicer.util.getNode('Crosshair') &lt;br /&gt;
crosshairNode.AddObserver(slicer.vtkMRMLCrosshairNode.CursorPositionModifiedEvent, onMouseMoved)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get DataProbe text==&lt;br /&gt;
&lt;br /&gt;
You can get the mouse location in pixel coordinates along with the pixel value at the mouse by hitting the '.' (period) key in a slice view after pasting in the following code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def printDataProbe():&lt;br /&gt;
  infoWidget = slicer.modules.DataProbeInstance.infoWidget&lt;br /&gt;
  for layer in ('B', 'F', 'L'):&lt;br /&gt;
    print(infoWidget.layerNames[layer].text, infoWidget.layerIJKs[layer].text, infoWidget.layerValues[layer].text)&lt;br /&gt;
&lt;br /&gt;
s = qt.QShortcut(qt.QKeySequence('.'), mainWindow())&lt;br /&gt;
s.connect('activated()', printDataProbe)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get axial slice as numpy array==&lt;br /&gt;
&lt;br /&gt;
An axis-aligned (axial/sagittal/coronal/) slices of a volume can be extracted using simple numpy array indexing. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import SampleData&lt;br /&gt;
volumeNode = SampleData.SampleDataLogic().downloadMRHead()&lt;br /&gt;
sliceIndex = 12&lt;br /&gt;
&lt;br /&gt;
voxels = slicer.util.arrayFromVolume(volumeNode)  # Get volume as numpy array&lt;br /&gt;
slice = voxels[sliceIndex:,:]  # Get one slice of the volume as numpy array&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get reformatted image from a slice viewer as numpy array==&lt;br /&gt;
&lt;br /&gt;
Set up 'red' slice viewer to show thick slab reconstructed from 3 slices:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sliceNodeID = 'vtkMRMLSliceNodeRed'&lt;br /&gt;
&lt;br /&gt;
# Get image data from slice view&lt;br /&gt;
sliceNode = slicer.mrmlScene.GetNodeByID(sliceNodeID)&lt;br /&gt;
appLogic = slicer.app.applicationLogic()&lt;br /&gt;
sliceLogic = appLogic.GetSliceLogic(sliceNode)&lt;br /&gt;
sliceLayerLogic = sliceLogic.GetBackgroundLayer()&lt;br /&gt;
reslice = sliceLayerLogic.GetReslice()&lt;br /&gt;
reslicedImage = vtk.vtkImageData()&lt;br /&gt;
reslicedImage.DeepCopy(reslice.GetOutput())&lt;br /&gt;
&lt;br /&gt;
# Create new volume node using resliced image&lt;br /&gt;
volumeNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLScalarVolumeNode&amp;quot;)&lt;br /&gt;
volumeNode.SetIJKToRASMatrix(sliceNode.GetXYToRAS())&lt;br /&gt;
volumeNode.SetAndObserveImageData(reslicedImage)&lt;br /&gt;
volumeNode.CreateDefaultDisplayNodes()&lt;br /&gt;
volumeNode.CreateDefaultStorageNode()&lt;br /&gt;
&lt;br /&gt;
# Get voxels as a numpy array&lt;br /&gt;
voxels = slicer.util.arrayFromVolume(volumeNode)&lt;br /&gt;
print(voxels.shape)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Combine multiple volumes into one==&lt;br /&gt;
&lt;br /&gt;
This example combines two volumes into a new one by subtracting one from the other.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import SampleData&lt;br /&gt;
[input1Volume, input2Volume] = SampleData.SampleDataLogic().downloadDentalSurgery()&lt;br /&gt;
&lt;br /&gt;
import slicer.util&lt;br /&gt;
a = slicer.util.arrayFromVolume(input1Volume)&lt;br /&gt;
b = slicer.util.arrayFromVolume(input2Volume)&lt;br /&gt;
&lt;br /&gt;
# 'a' and 'b' are numpy arrays,&lt;br /&gt;
# they can be combined using any numpy array operations&lt;br /&gt;
# to produce the result array 'c'&lt;br /&gt;
c = b-a&lt;br /&gt;
&lt;br /&gt;
volumeNode = slicer.modules.volumes.logic().CloneVolume(input1Volume, &amp;quot;Difference&amp;quot;)&lt;br /&gt;
slicer.util.updateVolumeFromArray(volumeNode, c)&lt;br /&gt;
setSliceViewerLayers(background=volumeNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Add noise to image==&lt;br /&gt;
&lt;br /&gt;
This example shows how to add simulated noise to a volume.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import SampleData&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# Get a sample input volume node&lt;br /&gt;
volumeNode = SampleData.SampleDataLogic().downloadMRHead()&lt;br /&gt;
&lt;br /&gt;
# Get volume as numpy array and add noise&lt;br /&gt;
voxels = slicer.util.arrayFromVolume(volumeNode)&lt;br /&gt;
voxels[:] = voxels + np.random.normal(0.0, 20.0, size=voxels.shape)&lt;br /&gt;
slicer.util.arrayFromVolumeModified(volumeNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mask volume using segmentation==&lt;br /&gt;
&lt;br /&gt;
This example shows how to blank out voxels of a volume outside all segments.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Input nodes&lt;br /&gt;
volumeNode = getNode('MRHead')&lt;br /&gt;
segmentationNode = getNode('Segmentation')&lt;br /&gt;
&lt;br /&gt;
# Write segmentation to labelmap volume node with a geometry that matches the volume node&lt;br /&gt;
labelmapVolumeNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLLabelMapVolumeNode')&lt;br /&gt;
slicer.modules.segmentations.logic().ExportVisibleSegmentsToLabelmapNode(segmentationNode, labelmapVolumeNode, volumeNode)&lt;br /&gt;
&lt;br /&gt;
# Masking&lt;br /&gt;
import numpy as np&lt;br /&gt;
voxels = slicer.util.arrayFromVolume(volumeNode)&lt;br /&gt;
mask = slicer.util.arrayFromVolume(labelmapVolumeNode)&lt;br /&gt;
maskedVoxels = np.copy(voxels)  # we don't want to modify the original volume&lt;br /&gt;
maskedVoxels[mask==0] = 0&lt;br /&gt;
&lt;br /&gt;
# Write masked volume to volume node and show it&lt;br /&gt;
maskedVolumeNode = slicer.modules.volumes.logic().CloneVolume(volumeNode, &amp;quot;Masked&amp;quot;)&lt;br /&gt;
slicer.util.updateVolumeFromArray(maskedVolumeNode, maskedVoxels)&lt;br /&gt;
slicer.util.setSliceViewerLayers(maskedVolumeNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Apply random deformations to image==&lt;br /&gt;
&lt;br /&gt;
This example shows how to apply random translation, rotation, and deformations to a volume to simulate variation in patient positioning, soft tissue motion, and random anatomical variations.&lt;br /&gt;
Control points are placed on a regularly spaced grid and then each control point is displaced by a random amount.&lt;br /&gt;
Thin-plate spline transform is computed from the original and transformed point list.&lt;br /&gt;
&lt;br /&gt;
https://gist.github.com/lassoan/428af5285da75dc033d32ebff65ba940&lt;br /&gt;
&lt;br /&gt;
==Thick slab reconstruction and maximum/minimum intensity volume projections==&lt;br /&gt;
&lt;br /&gt;
Set up 'red' slice viewer to show thick slab reconstructed from 3 slices:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sliceNode = slicer.mrmlScene.GetNodeByID('vtkMRMLSliceNodeRed')&lt;br /&gt;
appLogic = slicer.app.applicationLogic()&lt;br /&gt;
sliceLogic = appLogic.GetSliceLogic(sliceNode)&lt;br /&gt;
sliceLayerLogic = sliceLogic.GetBackgroundLayer()&lt;br /&gt;
reslice = sliceLayerLogic.GetReslice()&lt;br /&gt;
reslice.SetSlabModeToMean()&lt;br /&gt;
reslice.SetSlabNumberOfSlices(10) # mean of 10 slices will computed&lt;br /&gt;
reslice.SetSlabSliceSpacingFraction(0.3) # spacing between each slice is 0.3 pixel (total 10 * 0.3 = 3 pixel neighborhood)&lt;br /&gt;
sliceNode.Modified()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Set up 'red' slice viewer to show maximum intensity projection (MIP):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sliceNode = slicer.mrmlScene.GetNodeByID('vtkMRMLSliceNodeRed')&lt;br /&gt;
appLogic = slicer.app.applicationLogic()&lt;br /&gt;
sliceLogic = appLogic.GetSliceLogic(sliceNode)&lt;br /&gt;
sliceLayerLogic = sliceLogic.GetBackgroundLayer()&lt;br /&gt;
reslice = sliceLayerLogic.GetReslice()&lt;br /&gt;
reslice.SetSlabModeToMax()&lt;br /&gt;
reslice.SetSlabNumberOfSlices(600) # use a large number of slices (600) to cover the entire volume&lt;br /&gt;
reslice.SetSlabSliceSpacingFraction(0.5) # spacing between slices are 0.5 pixel (supersampling is useful to reduce interpolation artifacts)&lt;br /&gt;
sliceNode.Modified()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The projected image is available in a ''vtkImageData'' object by calling ''reslice.GetOutput()''.&lt;br /&gt;
&lt;br /&gt;
==Change default file type for nodes (that have never been saved yet)==&lt;br /&gt;
Default node can be specified that will be used as a basis of all new storage nodes. This can be used for setting default file extension. For example, change file format to STL for model nodes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defaultModelStorageNode = slicer.vtkMRMLModelStorageNode()&lt;br /&gt;
defaultModelStorageNode.SetDefaultWriteFileExtension('stl')&lt;br /&gt;
slicer.mrmlScene.AddDefaultNode(defaultModelStorageNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To permanently change default file extension on your computer, copy-paste the code above into your application startup script (you can find its location in menu: Edit / Application settings / General / Application startup script).&lt;br /&gt;
&lt;br /&gt;
==Change file type for saving for all volumes (with already existing storage nodes)==&lt;br /&gt;
&lt;br /&gt;
If it is not necessary to preserve file paths then the simplest is to configure default storage node (as shown in the example above), then delete all existing storage nodes. When save dialog is opened, default storage nodes will be recreated.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Delete existing model storage nodes so that they will be recreated with default settings&lt;br /&gt;
existingModelStorageNodes = slicer.util.getNodesByClass('vtkMRMLModelStorageNode')&lt;br /&gt;
for modelStorageNode in existingModelStorageNodes:&lt;br /&gt;
  slicer.mrmlScene.RemoveNode(modelStorageNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To update existing storage nodes to use new file extension (but keep all other parameters unchanged) you can use this approach (example is for volume storage):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
requiredFileExtension = '.nia'&lt;br /&gt;
originalFileExtension = '.nrrd'&lt;br /&gt;
volumeNodes = slicer.util.getNodesByClass('vtkMRMLScalarVolumeNode')&lt;br /&gt;
for volumeNode in volumeNodes:&lt;br /&gt;
  volumeStorageNode = volumeNode.GetStorageNode()&lt;br /&gt;
  if not volumeStorageNode:&lt;br /&gt;
    volumeNode.AddDefaultStorageNode()&lt;br /&gt;
    volumeStorageNode = volumeNode.GetStorageNode()&lt;br /&gt;
    volumeStorageNode.SetFileName(volumeNode.GetName()+requiredFileExtension)&lt;br /&gt;
  else:&lt;br /&gt;
    volumeStorageNode.SetFileName(volumeStorageNode.GetFileName().replace(originalFileExtension, requiredFileExtension))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To set all volume nodes to save uncompressed by default (add this to .slicerrc.py so it takes effect for the whole session):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#set the default volume storage to not compress by default&lt;br /&gt;
defaultVolumeStorageNode = slicer.vtkMRMLVolumeArchetypeStorageNode()&lt;br /&gt;
defaultVolumeStorageNode.SetUseCompression(0)&lt;br /&gt;
slicer.mrmlScene.AddDefaultNode(defaultVolumeStorageNode)&lt;br /&gt;
logging.info(&amp;quot;Volume nodes will be stored uncompressed by default&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Same thing as above, but applied to all  segmentations instead of volumes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#set the default volume storage to not compress by default&lt;br /&gt;
defaultVolumeStorageNode = slicer.vtkMRMLSegmentationStorageNode()&lt;br /&gt;
defaultVolumeStorageNode.SetUseCompression(0)&lt;br /&gt;
slicer.mrmlScene.AddDefaultNode(defaultVolumeStorageNode)&lt;br /&gt;
logging.info(&amp;quot;Segmentation nodes will be stored uncompressed &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sequences==&lt;br /&gt;
&lt;br /&gt;
===Access voxels of a 4D volume as numpy array===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Get sequence node&lt;br /&gt;
import SampleData&lt;br /&gt;
sequenceNode = SampleData.SampleDataLogic().downloadSample('CTPCardioSeq')&lt;br /&gt;
# Alternatively, get the first sequence node in the scene:&lt;br /&gt;
# sequenceNode = slicer.util.getNodesByClass('vtkMRMLSequenceNode')[0]&lt;br /&gt;
&lt;br /&gt;
# Get voxels of itemIndex'th volume as numpy array&lt;br /&gt;
itemIndex = 5&lt;br /&gt;
voxelArray = slicer.util.arrayFromVolume(sequenceNode.GetNthDataNode(itemIndex))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Get index value===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
print(&amp;quot;Index value of {0}th item: {1} = {2} {3}&amp;quot;.format(&lt;br /&gt;
  itemIndex,&lt;br /&gt;
  sequenceNode.GetIndexName(),&lt;br /&gt;
  sequenceNode.GetNthIndexValue(itemIndex),&lt;br /&gt;
  sequenceNode.GetIndexUnit()))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Browse a sequence and access currently displayed nodes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Get a sequence node&lt;br /&gt;
import SampleData&lt;br /&gt;
sequenceNode = SampleData.SampleDataLogic().downloadSample('CTPCardioSeq')&lt;br /&gt;
&lt;br /&gt;
# Find corresponding sequence browser node&lt;br /&gt;
browserNode = slicer.modules.sequences.logic().GetFirstBrowserNodeForSequenceNode(sequenceNode)&lt;br /&gt;
&lt;br /&gt;
# Print sequence information&lt;br /&gt;
print(&amp;quot;Number of items in the sequence: {0}&amp;quot;.format(browserNode.GetNumberOfItems()))&lt;br /&gt;
print(&amp;quot;Index name: {0}&amp;quot;.format(browserNode.GetMasterSequenceNode().GetIndexName()))&lt;br /&gt;
&lt;br /&gt;
# Jump to a selected sequence item&lt;br /&gt;
browserNode.SetSelectedItemNumber(5)&lt;br /&gt;
&lt;br /&gt;
# Get currently displayed volume node voxels as numpy array&lt;br /&gt;
volumeNode = browserNode.GetProxyNode(sequenceNode)&lt;br /&gt;
voxelArray = slicer.util.arrayFromVolume(volumeNode)&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
===Concatenate all sequences in the scene into a new sequence===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Get all sequence nodes in the scene&lt;br /&gt;
sequenceNodes = slicer.util.getNodesByClass('vtkMRMLSequenceNode')&lt;br /&gt;
mergedSequenceNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLSequenceNode', 'Merged sequence')&lt;br /&gt;
&lt;br /&gt;
# Merge all sequence nodes into a new sequence node&lt;br /&gt;
mergedIndexValue = 0&lt;br /&gt;
for sequenceNode in sequenceNodes:&lt;br /&gt;
    for itemIndex in range(sequenceNode.GetNumberOfDataNodes()):&lt;br /&gt;
        dataNode = sequenceNode.GetNthDataNode(itemIndex)&lt;br /&gt;
        mergedSequenceNode.SetDataNodeAtValue(dataNode, str(mergedIndexValue))&lt;br /&gt;
        mergedIndexValue += 1&lt;br /&gt;
    # Delete the sequence node we copied the data from, to prevent sharing of the same&lt;br /&gt;
    # node by multiple sequences&lt;br /&gt;
    slicer.mrmlScene.RemoveNode(sequenceNode)&lt;br /&gt;
&lt;br /&gt;
# Create a sequence browser node for the new merged sequence&lt;br /&gt;
mergedSequenceBrowserNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLSequenceBrowserNode', 'Merged')&lt;br /&gt;
mergedSequenceBrowserNode.AddSynchronizedSequenceNode(mergedSequenceNode)&lt;br /&gt;
slicer.modules.sequencebrowser.setToolBarActiveBrowserNode(mergedSequenceBrowserNode)&lt;br /&gt;
# Show proxy node in slice viewers&lt;br /&gt;
mergedProxyNode = mergedSequenceBrowserNode.GetProxyNode(mergedSequenceNode)&lt;br /&gt;
slicer.util.setSliceViewerLayers(background=mergedProxyNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Segmentations==&lt;br /&gt;
&lt;br /&gt;
===Create a segmentation from a labelmap volume and display in 3D===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
labelmapVolumeNode = getNode('label')&lt;br /&gt;
seg = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLSegmentationNode')&lt;br /&gt;
slicer.modules.segmentations.logic().ImportLabelmapToSegmentationNode(labelmapVolumeNode, seg)&lt;br /&gt;
seg.CreateClosedSurfaceRepresentation()&lt;br /&gt;
slicer.mrmlScene.RemoveNode(labelmapVolumeNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last line is optional. It removes the original labelmap volume so that the same information is not shown twice.&lt;br /&gt;
&lt;br /&gt;
===Export labelmap node from segmentation node===&lt;br /&gt;
&lt;br /&gt;
Export labelmap matching reference geometry of the segmentation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentationNode = getNode('Segmentation')&lt;br /&gt;
labelmapVolumeNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLLabelMapVolumeNode')&lt;br /&gt;
slicer.modules.segmentations.logic().ExportAllSegmentsToLabelmapNode(segmentationNode, labelmapVolumeNode, slicer.vtkSegmentation.EXTENT_REFERENCE_GEOMETRY)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Export smallest possible labelmap:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentationNode = getNode('Segmentation')&lt;br /&gt;
labelmapVolumeNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLLabelMapVolumeNode')&lt;br /&gt;
slicer.modules.segmentations.logic().ExportAllSegmentsToLabelmapNode(segmentationNode, labelmapVolumeNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Export labelmap that matches geometry of a chosen reference volume:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentationNode = getNode('Segmentation')&lt;br /&gt;
labelmapVolumeNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLLabelMapVolumeNode')&lt;br /&gt;
slicer.modules.segmentations.logic().ExportVisibleSegmentsToLabelmapNode(segmentationNode, labelmapVolumeNode, referenceVolumeNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Export a selection of segments (identified by their names):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentNames = [&amp;quot;Prostate&amp;quot;, &amp;quot;Urethra&amp;quot;]&lt;br /&gt;
segmentIds = vtk.vtkStringArray()&lt;br /&gt;
for segmentName in segmentNames:&lt;br /&gt;
    segmentId = segmentationNode.GetSegmentation().GetSegmentIdBySegmentName(segmentName)&lt;br /&gt;
    segmentIds.InsertNextValue(segmentId)&lt;br /&gt;
slicer.vtkSlicerSegmentationsModuleLogic.ExportSegmentsToLabelmapNode(segmentationNode, segmentIds, labelmapVolumeNode, referenceVolumeNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Export to file by pressing Ctrl+Shift+S key:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
outputPath = &amp;quot;c:/tmp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def exportLabelmap():&lt;br /&gt;
    segmentationNode = slicer.mrmlScene.GetFirstNodeByClass(&amp;quot;vtkMRMLSegmentationNode&amp;quot;)&lt;br /&gt;
    referenceVolumeNode = slicer.mrmlScene.GetFirstNodeByClass(&amp;quot;vtkMRMLScalarVolumeNode&amp;quot;)&lt;br /&gt;
    labelmapVolumeNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLLabelMapVolumeNode')&lt;br /&gt;
    slicer.modules.segmentations.logic().ExportVisibleSegmentsToLabelmapNode(segmentationNode, labelmapVolumeNode, referenceVolumeNode)&lt;br /&gt;
    filepath = outputPath + &amp;quot;/&amp;quot; + referenceVolumeNode.GetName()+&amp;quot;-label.nrrd&amp;quot;&lt;br /&gt;
    slicer.util.saveNode(labelmapVolumeNode, filepath)&lt;br /&gt;
    slicer.mrmlScene.RemoveNode(labelmapVolumeNode.GetDisplayNode().GetColorNode())&lt;br /&gt;
    slicer.mrmlScene.RemoveNode(labelmapVolumeNode)&lt;br /&gt;
    slicer.util.delayDisplay(&amp;quot;Segmentation saved to &amp;quot;+filepath)&lt;br /&gt;
&lt;br /&gt;
shortcut = qt.QShortcut(slicer.util.mainWindow())&lt;br /&gt;
shortcut.setKey(qt.QKeySequence('Ctrl+Shift+s'))&lt;br /&gt;
shortcut.connect( 'activated()', exportLabelmap)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Export model nodes from segmentation node===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentationNode = getNode(&amp;quot;Segmentation&amp;quot;)&lt;br /&gt;
shNode = slicer.mrmlScene.GetSubjectHierarchyNode()&lt;br /&gt;
exportFolderItemId = shNode.CreateFolderItem(shNode.GetSceneItemID(), &amp;quot;Segments&amp;quot;)&lt;br /&gt;
slicer.modules.segmentations.logic().ExportAllSegmentsToModels(segmentationNode, exportFolderItemId)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Show a segmentation in 3D===&lt;br /&gt;
Segmentation can only be shown in 3D if closed surface representation (or other 3D-displayable representation) is available. To create closed surface representation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentation.CreateClosedSurfaceRepresentation()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Get a representation of a segment===&lt;br /&gt;
Access binary labelmap stored in a segmentation node (without exporting it to a volume node) - if it does not exist, it will return None:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
image = slicer.vtkOrientedImageData()&lt;br /&gt;
segmentationNode.GetBinaryLabelmapRepresentation(segmentID, image)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Get closed surface, if it does not exist, it will return None:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
outputPolyData = vtk.vtkPolyData()&lt;br /&gt;
segmentationNode.GetClosedSurfaceRepresentation(segmentID, outputPolyData)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Get binary labelmap representation. If it does not exist then it will be created for that single segment. Applies parent transforms by default (if not desired, another argument needs to be added to the end: false):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import vtkSegmentationCorePython as vtkSegmentationCore&lt;br /&gt;
outputOrientedImageData = vtkSegmentationCore.vtkOrientedImageData()&lt;br /&gt;
slicer.vtkSlicerSegmentationsModuleLogic.GetSegmentBinaryLabelmapRepresentation(segmentationNode, segmentID, outputOrientedImageData)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Same as above, for closed surface representation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
outputPolyData = vtk.vtkPolyData()&lt;br /&gt;
slicer.vtkSlicerSegmentationsModuleLogic.GetSegmentClosedSurfaceRepresentation(segmentationNode, segmentID, outputPolyData)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Convert all segments using default path and conversion parameters===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentationNode.CreateBinaryLabelmapRepresentation()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Convert all segments using custom path or conversion parameters===&lt;br /&gt;
Change reference image geometry parameter based on an existing referenceImageData image:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import vtkSegmentationCorePython as vtkSegmentationCore&lt;br /&gt;
referenceGeometry = vtkSegmentationCore.vtkSegmentationConverter.SerializeImageGeometry(referenceImageData)&lt;br /&gt;
segmentation.SetConversionParameter(vtkSegmentationCore.vtkSegmentationConverter.GetReferenceImageGeometryParameterName(), referenceGeometry)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Re-convert using a modified conversion parameter===&lt;br /&gt;
Changing smoothing factor for closed surface generation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import vtkSegmentationCorePython as vtkSegmentationCore&lt;br /&gt;
segmentation = getNode('Segmentation').GetSegmentation()&lt;br /&gt;
&lt;br /&gt;
# Turn of surface smoothing&lt;br /&gt;
segmentation.SetConversionParameter('Smoothing factor','0.0')&lt;br /&gt;
&lt;br /&gt;
# Recreate representation using modified parameters (and default conversion path)&lt;br /&gt;
segmentation.RemoveRepresentation(vtkSegmentationCore.vtkSegmentationConverter.GetSegmentationClosedSurfaceRepresentationName())&lt;br /&gt;
segmentation.CreateRepresentation(vtkSegmentationCore.vtkSegmentationConverter.GetSegmentationClosedSurfaceRepresentationName())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Create keyboard shortcut for toggling sphere brush for paint and erase effects===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def toggleSphereBrush():&lt;br /&gt;
    segmentEditorWidget = slicer.modules.segmenteditor.widgetRepresentation().self().editor&lt;br /&gt;
    paintEffect = segmentEditorWidget.effectByName(&amp;quot;Paint&amp;quot;)&lt;br /&gt;
    isSphere = paintEffect.integerParameter('BrushSphere')&lt;br /&gt;
    # BrushSphere is &amp;quot;common&amp;quot; parameter (shared between paint and erase)&lt;br /&gt;
    paintEffect.setCommonParameter(&amp;quot;BrushSphere&amp;quot;, 0 if isSphere else 1)&lt;br /&gt;
&lt;br /&gt;
    shortcut = qt.QShortcut(slicer.util.mainWindow())&lt;br /&gt;
  shortcut = qt.QShortcut(slicer.util.mainWindow())&lt;br /&gt;
    shortcut.setKey(qt.QKeySequence(&amp;quot;s&amp;quot;))&lt;br /&gt;
    shortcut.connect('activated()', toggleSphereBrush)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Get centroid of a segment in world (RAS) coordinates===&lt;br /&gt;
&lt;br /&gt;
This example shows how to get centroid of a segment in world coordinates and show that position in all slice views.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentationNode = getNode('Segmentation')&lt;br /&gt;
segmentId = 'Segment_1'&lt;br /&gt;
&lt;br /&gt;
# Get array voxel coordinates&lt;br /&gt;
import numpy as np&lt;br /&gt;
seg=arrayFromSegment(segmentation_node, segmentId)&lt;br /&gt;
# numpy array has voxel coordinates in reverse order (KJI instead of IJK)&lt;br /&gt;
# and the array is cropped to minimum size in the segmentation&lt;br /&gt;
mean_KjiCropped = [coords.mean() for coords in np.nonzero(seg)]&lt;br /&gt;
&lt;br /&gt;
# Get segmentation voxel coordinates&lt;br /&gt;
segImage = segmentationNode.GetBinaryLabelmapRepresentation(segmentId)&lt;br /&gt;
segImageExtent = segImage.GetExtent()&lt;br /&gt;
# origin of the array in voxel coordinates is determined by the start extent&lt;br /&gt;
mean_Ijk = [mean_KjiCropped[2], mean_KjiCropped[1], mean_KjiCropped[0]] + np.array([segImageExtent[0], segImageExtent[2], segImageExtent[4]])&lt;br /&gt;
&lt;br /&gt;
# Get segmentation physical coordinates&lt;br /&gt;
ijkToWorld = vtk.vtkMatrix4x4()&lt;br /&gt;
segImage.GetImageToWorldMatrix(ijkToWorld)&lt;br /&gt;
mean_World = [0, 0, 0, 1]&lt;br /&gt;
ijkToRas.MultiplyPoint(np.append(mean_Ijk,1.0), mean_World)&lt;br /&gt;
mean_World = mean_World[0:3]&lt;br /&gt;
&lt;br /&gt;
# If segmentation node is transformed, apply that transform to get RAS coordinates&lt;br /&gt;
transformWorldToRas = vtk.vtkGeneralTransform()&lt;br /&gt;
slicer.vtkMRMLTransformNode.GetTransformBetweenNodes(segmentationNode.GetParentTransformNode(), None, transformWorldToRas)&lt;br /&gt;
mean_Ras = transformWorldToRas.TransformPoint(mean_World)&lt;br /&gt;
&lt;br /&gt;
# Show mean position value and jump to it in all slice viewers&lt;br /&gt;
print(mean_Ras)&lt;br /&gt;
slicer.modules.markups.logic().JumpSlicesToLocation(mean_Ras[0], mean_Ras[1], mean_Ras[2], True)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Get histogram of a segmented region===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Generate input data&lt;br /&gt;
################################################&lt;br /&gt;
&lt;br /&gt;
# Load master volume&lt;br /&gt;
import SampleData&lt;br /&gt;
sampleDataLogic = SampleData.SampleDataLogic()&lt;br /&gt;
masterVolumeNode = sampleDataLogic.downloadMRBrainTumor1()&lt;br /&gt;
&lt;br /&gt;
# Create segmentation&lt;br /&gt;
segmentationNode = slicer.vtkMRMLSegmentationNode()&lt;br /&gt;
slicer.mrmlScene.AddNode(segmentationNode)&lt;br /&gt;
segmentationNode.CreateDefaultDisplayNodes() # only needed for display&lt;br /&gt;
segmentationNode.SetReferenceImageGeometryParameterFromVolumeNode(masterVolumeNode)&lt;br /&gt;
&lt;br /&gt;
# Create segment&lt;br /&gt;
tumorSeed = vtk.vtkSphereSource()&lt;br /&gt;
tumorSeed.SetCenter(-6, 30, 28)&lt;br /&gt;
tumorSeed.SetRadius(25)&lt;br /&gt;
tumorSeed.Update()&lt;br /&gt;
segmentationNode.AddSegmentFromClosedSurfaceRepresentation(tumorSeed.GetOutput(), &amp;quot;Segment A&amp;quot;, [1.0,0.0,0.0])&lt;br /&gt;
&lt;br /&gt;
# Compute histogram&lt;br /&gt;
################################################&lt;br /&gt;
&lt;br /&gt;
labelValue = 1  # label value of first segment&lt;br /&gt;
&lt;br /&gt;
# Get segmentation as labelmap volume node&lt;br /&gt;
labelmapVolumeNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLLabelMapVolumeNode')&lt;br /&gt;
slicer.modules.segmentations.logic().ExportVisibleSegmentsToLabelmapNode(segmentationNode, labelmapVolumeNode, masterVolumeNode)&lt;br /&gt;
&lt;br /&gt;
# Extract all voxels of the segment as numpy array&lt;br /&gt;
volumeArray = slicer.util.arrayFromVolume(masterVolumeNode)&lt;br /&gt;
labelArray = slicer.util.arrayFromVolume(labelmapVolumeNode)&lt;br /&gt;
segmentVoxels = volumeArray[labelArray==labelValue]&lt;br /&gt;
&lt;br /&gt;
# Compute histogram&lt;br /&gt;
import numpy as np&lt;br /&gt;
histogram = np.histogram(segmentVoxels, bins=50)&lt;br /&gt;
&lt;br /&gt;
# Plot histogram&lt;br /&gt;
################################################&lt;br /&gt;
&lt;br /&gt;
slicer.util.plot(histogram, xColumnIndex = 1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Get segments visible at a selected position===&lt;br /&gt;
&lt;br /&gt;
Show in the console names of segments visible at a markups fiducial position:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentationNode = slicer.mrmlScene.GetFirstNodeByClass(&amp;quot;vtkMRMLSegmentationNode&amp;quot;)&lt;br /&gt;
markupsFiducialNode = slicer.mrmlScene.GetFirstNodeByClass(&amp;quot;vtkMRMLMarkupsFiducialNode&amp;quot;)&lt;br /&gt;
sliceViewLabel = &amp;quot;Red&amp;quot;  # any slice view where segmentation node is visible works&lt;br /&gt;
&lt;br /&gt;
def printSegmentNames(unused1=None, unused2=None):&lt;br /&gt;
    &lt;br /&gt;
    sliceViewWidget = slicer.app.layoutManager().sliceWidget(sliceViewLabel)&lt;br /&gt;
    segmentationsDisplayableManager = sliceViewWidget.sliceView().displayableManagerByClassName('vtkMRMLSegmentationsDisplayableManager2D')&lt;br /&gt;
    ras = [0,0,0]&lt;br /&gt;
    markupsFiducialNode.GetNthControlPointPositionWorld(0, ras)&lt;br /&gt;
    segmentIds = vtk.vtkStringArray()&lt;br /&gt;
    segmentationsDisplayableManager.GetVisibleSegmentsForPosition(ras, segmentationNode.GetDisplayNode(), segmentIds)&lt;br /&gt;
    for idIndex in range(segmentIds.GetNumberOfValues()):&lt;br /&gt;
        segment = segmentationNode.GetSegmentation().GetSegment(segmentIds.GetValue(idIndex))&lt;br /&gt;
        print('Segment found at position {0}: {1}'.format(ras, segment.GetName()))&lt;br /&gt;
&lt;br /&gt;
# Observe markup node changes&lt;br /&gt;
markupsFiducialNode.AddObserver(slicer.vtkMRMLMarkupsPlaneNode.PointModifiedEvent, printSegmentNames)&lt;br /&gt;
printSegmentNames()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Set default segmentation options===&lt;br /&gt;
&lt;br /&gt;
Allow segments to overlap each other by default:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defaultSegmentEditorNode = slicer.vtkMRMLSegmentEditorNode()&lt;br /&gt;
defaultSegmentEditorNode.SetOverwriteMode(slicer.vtkMRMLSegmentEditorNode.OverwriteNone)&lt;br /&gt;
slicer.mrmlScene.AddDefaultNode(defaultSegmentEditorNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To always make this the default, add the lines above to your &lt;br /&gt;
[[Documentation/{{documentation/version}}/Developers/Python_scripting#How_to_systematically_execute_custom_python_code_at_startup_.3F|.slicerrc file]].&lt;br /&gt;
&lt;br /&gt;
===How to run segment editor effects from a script===&lt;br /&gt;
&lt;br /&gt;
Editor effects are complex because they need to handle changing master volumes, undo/redo, masking operations, etc. Therefore, it is recommended to use the effect by instantiating a qMRMLSegmentEditorWidget or use/extract processing logic of the effect and use that from a script.&lt;br /&gt;
&lt;br /&gt;
==== Use Segment editor effects from script (qMRMLSegmentEditorWidget) ====&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
*[https://gist.github.com/lassoan/2d5a5b73645f65a5eb6f8d5f97abf31b brain tumor segmentation using grow from seeds effect]&lt;br /&gt;
*[https://gist.github.com/lassoan/ef30bc27a22a648ead7f82243f5cc7d5 AI-assisted brain tumor segmentation]&lt;br /&gt;
*[https://gist.github.com/lassoan/1673b25d8e7913cbc245b4f09ed853f9 skin surface extraction using thresholding and smoothing]&lt;br /&gt;
*[https://gist.github.com/lassoan/2f5071c562108dac8efe277c78f2620f mask a volume with segments and compute histogram for each region]&lt;br /&gt;
*[https://gist.github.com/lassoan/5ad51c89521d3cd9c5faf65767506b37 create fat/muscle/bone segment by thresholding and report volume of each segment]&lt;br /&gt;
*[https://gist.github.com/lassoan/4d0b94bda52d5b099432e424e03aa2b1 segment cranial cavity automatically in dry bone skull CT]&lt;br /&gt;
*[https://gist.github.com/lassoan/84d1f9a093dbb6a46c0fcc89279d8088 remove patient table from CT image]&lt;br /&gt;
&lt;br /&gt;
Description of effect parameters are available [https://slicer.readthedocs.io/en/latest/developer_guide/modules/segmenteditor.html#effect-parameters here].&lt;br /&gt;
&lt;br /&gt;
==== Use logic of effect from a script ====&lt;br /&gt;
&lt;br /&gt;
This example shows how to perform operations on segmentations using VTK filters ''extracted'' from an effect:&lt;br /&gt;
&lt;br /&gt;
*[https://gist.github.com/lassoan/7c94c334653010696b2bf96abc0ac8e7 brain tumor segmentation using grow from seeds effect]&lt;br /&gt;
&lt;br /&gt;
===Get information from segmentation nrrd file header===&lt;br /&gt;
&lt;br /&gt;
You can use this code snippet to get information from segmentation (.seg.nrrd), for example when creating numpy arrays for generating training data for deep learning networks. This script can be used in any Python environment, not just inside Slicer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# pip_install('pynrrd')&lt;br /&gt;
&lt;br /&gt;
def read_segmentation_info(filename):&lt;br /&gt;
    import nrrd&lt;br /&gt;
    header = nrrd.read_header(filename)&lt;br /&gt;
    segmentation_info = {}&lt;br /&gt;
    segments = []&lt;br /&gt;
    segment_index = 0&lt;br /&gt;
    while True:&lt;br /&gt;
        prefix = &amp;quot;Segment{0}_&amp;quot;.format(segment_index)&lt;br /&gt;
        if not prefix + &amp;quot;ID&amp;quot; in header.keys():&lt;br /&gt;
            break&lt;br /&gt;
        segment = {}&lt;br /&gt;
        segment[&amp;quot;index&amp;quot;] = segment_index&lt;br /&gt;
        segment[&amp;quot;color&amp;quot;] = [float(i) for i in header[prefix + &amp;quot;Color&amp;quot;].split(&amp;quot; &amp;quot;)]  # Segment0_Color:=0.501961 0.682353 0.501961&lt;br /&gt;
        segment[&amp;quot;colorAutoGenerated&amp;quot;] = int(header[prefix + &amp;quot;ColorAutoGenerated&amp;quot;]) != 0  # Segment0_ColorAutoGenerated:=1&lt;br /&gt;
        segment[&amp;quot;extent&amp;quot;] = [int(i) for i in header[prefix + &amp;quot;Extent&amp;quot;].split(&amp;quot; &amp;quot;)]  # Segment0_Extent:=68 203 53 211 24 118&lt;br /&gt;
        segment[&amp;quot;id&amp;quot;] = header[prefix + &amp;quot;ID&amp;quot;]  # Segment0_ID:=Segment_1&lt;br /&gt;
        segment[&amp;quot;labelValue&amp;quot;] = int(header[prefix + &amp;quot;LabelValue&amp;quot;])  # Segment0_LabelValue:=1&lt;br /&gt;
        segment[&amp;quot;layer&amp;quot;] = int(header[prefix + &amp;quot;Layer&amp;quot;])  # Segment0_Layer:=0&lt;br /&gt;
        segment[&amp;quot;name&amp;quot;] = header[prefix + &amp;quot;Name&amp;quot;]  # Segment0_Name:=Segment_1&lt;br /&gt;
        segment[&amp;quot;nameAutoGenerated&amp;quot;] = int(header[prefix + &amp;quot;NameAutoGenerated&amp;quot;]) != 0  # Segment0_NameAutoGenerated:=1&lt;br /&gt;
        # Segment0_Tags:=Segmentation.Status:inprogress|TerminologyEntry:Segmentation category and type - 3D Slicer General Anatomy list&lt;br /&gt;
        # ~SCT^85756007^Tissue~SCT^85756007^Tissue~^^~Anatomic codes - DICOM master list~^^~^^|&lt;br /&gt;
        tags = {}&lt;br /&gt;
        tags_str = header[prefix + &amp;quot;Tags&amp;quot;].split(&amp;quot;|&amp;quot;)&lt;br /&gt;
        for tag_str in tags_str:&lt;br /&gt;
            tag_str = tag_str.strip()&lt;br /&gt;
            if not tag_str:&lt;br /&gt;
                continue&lt;br /&gt;
            key, value = tag_str.split(&amp;quot;:&amp;quot;, maxsplit=1)&lt;br /&gt;
            tags[key] = value&lt;br /&gt;
        segment[&amp;quot;tags&amp;quot;] = tags&lt;br /&gt;
        segments.append(segment)&lt;br /&gt;
        segment_index += 1&lt;br /&gt;
    segmentation_info[&amp;quot;segments&amp;quot;] = segments&lt;br /&gt;
    return segmentation_info&lt;br /&gt;
&lt;br /&gt;
def segment_from_name(segmentation_info, segment_name):&lt;br /&gt;
    for segment in segmentation_info[&amp;quot;segments&amp;quot;]:&lt;br /&gt;
        if segment_name == segment[&amp;quot;name&amp;quot;]:&lt;br /&gt;
            return segment&lt;br /&gt;
    raise KeyError('segment not found by name ' + segment_name)&lt;br /&gt;
&lt;br /&gt;
def segment_names(segmentation_info):&lt;br /&gt;
    names = []&lt;br /&gt;
    for segment in segmentation_info[&amp;quot;segments&amp;quot;]:&lt;br /&gt;
        names.append(segment[&amp;quot;name&amp;quot;])&lt;br /&gt;
    return names&lt;br /&gt;
&lt;br /&gt;
def extract_segments(voxels, header, segmentation_info, segment_names_to_label_values):&lt;br /&gt;
    import numpy as np&lt;br /&gt;
    # Create empty array from last 3 dimensions (output will be flattened to a 3D array)&lt;br /&gt;
    output_voxels = np.zeros(voxels.shape[-3:])&lt;br /&gt;
    # Copy non-segmentation fields to the extracted header&lt;br /&gt;
    output_header = {}&lt;br /&gt;
    for key in header.keys():&lt;br /&gt;
        if not re.match(&amp;quot;^Segment[0-9]+_.+&amp;quot;, key):&lt;br /&gt;
            output_header[key] = header[key]&lt;br /&gt;
    # Copy extracted segments&lt;br /&gt;
    dims = len(voxels.shape)&lt;br /&gt;
    for output_segment_index, segment_name_to_label_value in enumerate(segment_names_to_label_values):&lt;br /&gt;
        # Copy relabeled voxel data&lt;br /&gt;
        segment = segment_from_name(segmentation_info, segment_name_to_label_value[0])&lt;br /&gt;
        input_label_value = segment[&amp;quot;labelValue&amp;quot;]&lt;br /&gt;
        output_label_value = segment_name_to_label_value[1]&lt;br /&gt;
        if dims == 3:&lt;br /&gt;
            output_voxels[voxels == input_label_value] = output_label_value&lt;br /&gt;
        elif dims == 4:&lt;br /&gt;
            inputLayer = segment[&amp;quot;layer&amp;quot;]&lt;br /&gt;
            output_voxels[voxels[inputLayer,:,:,:] == input_label_value] = output_label_value&lt;br /&gt;
        else:&lt;br /&gt;
            raise ValueError(&amp;quot;Voxel array dimension is invalid&amp;quot;)&lt;br /&gt;
        # Copy all segment fields corresponding to this segment&lt;br /&gt;
        for key in header.keys():&lt;br /&gt;
            prefix = &amp;quot;Segment{0}_&amp;quot;.format(segment[&amp;quot;index&amp;quot;])&lt;br /&gt;
            matched = re.match(&amp;quot;^&amp;quot;+prefix+&amp;quot;(.+)&amp;quot;, key)&lt;br /&gt;
            if matched:&lt;br /&gt;
                field_name = matched.groups()[0]&lt;br /&gt;
                if field_name == &amp;quot;LabelValue&amp;quot;:&lt;br /&gt;
                    value = output_label_value&lt;br /&gt;
                elif field_name == &amp;quot;Layer&amp;quot;:&lt;br /&gt;
                    # output is a single layer (3D volume)&lt;br /&gt;
                    value = 0&lt;br /&gt;
                else:&lt;br /&gt;
                    value = header[key]&lt;br /&gt;
                output_header[&amp;quot;Segment{0}_&amp;quot;.format(output_segment_index) + field_name] = value&lt;br /&gt;
    # Remove unnecessary 4th dimension (volume is collapsed into 3D)&lt;br /&gt;
    if dims == 4:&lt;br /&gt;
        # Remove &amp;quot;none&amp;quot; from &amp;quot;none (0,1,0) (0,0,-1) (-1.2999954223632812,0,0)&amp;quot;&lt;br /&gt;
        output_header[&amp;quot;space directions&amp;quot;] = output_header[&amp;quot;space directions&amp;quot;][-3:,:]&lt;br /&gt;
        # Remove &amp;quot;list&amp;quot; from &amp;quot;list domain domain domain&amp;quot;&lt;br /&gt;
        output_header[&amp;quot;kinds&amp;quot;] = output_header[&amp;quot;kinds&amp;quot;][-3:]&lt;br /&gt;
    return output_voxels, output_header&lt;br /&gt;
&lt;br /&gt;
# Read segmentation and show some information about segments&lt;br /&gt;
filename = &amp;quot;c:/Users/andra/OneDrive/Projects/SegmentationPynrrd/SegmentationOverlapping.seg.nrrd&amp;quot;&lt;br /&gt;
segmentation_info = read_segmentation_info(filename)&lt;br /&gt;
number_of_segments = len(segmentation_info[&amp;quot;segments&amp;quot;])&lt;br /&gt;
names = segment_names(segmentation_info)&lt;br /&gt;
label0 = segment_from_name(segmentation_info, names[0])[&amp;quot;labelValue&amp;quot;]&lt;br /&gt;
print(&amp;quot;Number of segments: &amp;quot; + str())&lt;br /&gt;
print(&amp;quot;Segment names: &amp;quot; + str(names))&lt;br /&gt;
print(&amp;quot;Label value of {0}: {1}&amp;quot;.format(names[0], label0))&lt;br /&gt;
&lt;br /&gt;
# Extract selected segments with chosen label values&lt;br /&gt;
extracted_filename = &amp;quot;c:/Users/andra/OneDrive/Projects/SegmentationPynrrd/SegmentationExtracted.seg.nrrd&amp;quot;&lt;br /&gt;
voxels, header = nrrd.read(filename)&lt;br /&gt;
segment_list = [(&amp;quot;Segment_1&amp;quot;, 10), (&amp;quot;Segment_3&amp;quot;, 12), (&amp;quot;Segment_4&amp;quot;, 6)]&lt;br /&gt;
extracted_voxels, extracted_header = extract_segments(voxels, header, segmentation_info, segment_list)&lt;br /&gt;
nrrd.write(extracted_filename, extracted_voxels, extracted_header)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Quantifying segments==&lt;br /&gt;
&lt;br /&gt;
===Get centroid of each segment===&lt;br /&gt;
&lt;br /&gt;
Place a markups fiducial point at the centroid of each segment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentationNode = getNode('Segmentation')&lt;br /&gt;
&lt;br /&gt;
# Compute centroids&lt;br /&gt;
import SegmentStatistics&lt;br /&gt;
segStatLogic = SegmentStatistics.SegmentStatisticsLogic()&lt;br /&gt;
segStatLogic.getParameterNode().SetParameter(&amp;quot;Segmentation&amp;quot;, segmentationNode.GetID())&lt;br /&gt;
segStatLogic.getParameterNode().SetParameter(&amp;quot;LabelmapSegmentStatisticsPlugin.centroid_ras.enabled&amp;quot;, str(True))&lt;br /&gt;
segStatLogic.computeStatistics()&lt;br /&gt;
stats = segStatLogic.getStatistics()&lt;br /&gt;
&lt;br /&gt;
# Place a markup point in each centroid&lt;br /&gt;
markupsNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLMarkupsFiducialNode&amp;quot;)&lt;br /&gt;
markupsNode.CreateDefaultDisplayNodes()&lt;br /&gt;
for segmentId in stats['SegmentIDs']:&lt;br /&gt;
    centroid_ras = stats[segmentId,&amp;quot;LabelmapSegmentStatisticsPlugin.centroid_ras&amp;quot;]&lt;br /&gt;
    segmentName = segmentationNode.GetSegmentation().GetSegment(segmentId).GetName()&lt;br /&gt;
    markupsNode.AddFiducialFromArray(centroid_ras, segmentName)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Get size, position, and orientation of each segment===&lt;br /&gt;
&lt;br /&gt;
This example computes oriented bounding box for each segment and displays them using annotation ROI.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentationNode = getNode('Segmentation')&lt;br /&gt;
&lt;br /&gt;
# Compute bounding boxes&lt;br /&gt;
import SegmentStatistics&lt;br /&gt;
segStatLogic = SegmentStatistics.SegmentStatisticsLogic()&lt;br /&gt;
segStatLogic.getParameterNode().SetParameter(&amp;quot;Segmentation&amp;quot;, segmentationNode.GetID())&lt;br /&gt;
segStatLogic.getParameterNode().SetParameter(&amp;quot;LabelmapSegmentStatisticsPlugin.obb_origin_ras.enabled&amp;quot;,str(True))&lt;br /&gt;
segStatLogic.getParameterNode().SetParameter(&amp;quot;LabelmapSegmentStatisticsPlugin.obb_diameter_mm.enabled&amp;quot;,str(True))&lt;br /&gt;
segStatLogic.getParameterNode().SetParameter(&amp;quot;LabelmapSegmentStatisticsPlugin.obb_direction_ras_x.enabled&amp;quot;,str(True))&lt;br /&gt;
segStatLogic.getParameterNode().SetParameter(&amp;quot;LabelmapSegmentStatisticsPlugin.obb_direction_ras_y.enabled&amp;quot;,str(True))&lt;br /&gt;
segStatLogic.getParameterNode().SetParameter(&amp;quot;LabelmapSegmentStatisticsPlugin.obb_direction_ras_z.enabled&amp;quot;,str(True))&lt;br /&gt;
segStatLogic.computeStatistics()&lt;br /&gt;
stats = segStatLogic.getStatistics()&lt;br /&gt;
&lt;br /&gt;
# Draw ROI for each oriented bounding box&lt;br /&gt;
import numpy as np&lt;br /&gt;
for segmentId in stats['SegmentIDs']:&lt;br /&gt;
    # Get bounding box&lt;br /&gt;
    obb_origin_ras = np.array(stats[segmentId,&amp;quot;LabelmapSegmentStatisticsPlugin.obb_origin_ras&amp;quot;])&lt;br /&gt;
    obb_diameter_mm = np.array(stats[segmentId,&amp;quot;LabelmapSegmentStatisticsPlugin.obb_diameter_mm&amp;quot;])&lt;br /&gt;
    obb_direction_ras_x = np.array(stats[segmentId,&amp;quot;LabelmapSegmentStatisticsPlugin.obb_direction_ras_x&amp;quot;])&lt;br /&gt;
    obb_direction_ras_y = np.array(stats[segmentId,&amp;quot;LabelmapSegmentStatisticsPlugin.obb_direction_ras_y&amp;quot;])&lt;br /&gt;
    obb_direction_ras_z = np.array(stats[segmentId,&amp;quot;LabelmapSegmentStatisticsPlugin.obb_direction_ras_z&amp;quot;])&lt;br /&gt;
    # Create ROI&lt;br /&gt;
    segment = segmentationNode.GetSegmentation().GetSegment(segmentId)&lt;br /&gt;
    roi=slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLAnnotationROINode&amp;quot;)&lt;br /&gt;
    roi.SetName(segment.GetName()+' bounding box')&lt;br /&gt;
    roi.SetXYZ(0.0, 0.0, 0.0)&lt;br /&gt;
    roi.SetRadiusXYZ(*(0.5*obb_diameter_mm))&lt;br /&gt;
    # Position and orient ROI using a transform&lt;br /&gt;
    obb_center_ras = obb_origin_ras+0.5*(obb_diameter_mm[0] * obb_direction_ras_x + obb_diameter_mm[1] * obb_direction_ras_y + obb_diameter_mm[2] * obb_direction_ras_z)&lt;br /&gt;
    boundingBoxToRasTransform = np.row_stack((np.column_stack((obb_direction_ras_x, obb_direction_ras_y, obb_direction_ras_z, obb_center_ras)), (0, 0, 0, 1)))&lt;br /&gt;
    boundingBoxToRasTransformMatrix = slicer.util.vtkMatrixFromArray(boundingBoxToRasTransform)&lt;br /&gt;
    transformNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLTransformNode')&lt;br /&gt;
    transformNode.SetAndObserveMatrixTransformToParent(boundingBoxToRasTransformMatrix)&lt;br /&gt;
    roi.SetAndObserveTransformNodeID(transformNode.GetID())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Complete list of available parameters can be obtained by running &amp;lt;code&amp;gt;segStatLogic.getParameterNode().GetParameterNames()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Markups==&lt;br /&gt;
&lt;br /&gt;
===Load markups fiducial list from file===&lt;br /&gt;
&lt;br /&gt;
Markups fiducials can be loaded from file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicer.util.loadMarkupsFiducialList('/path/to/list/F.fcsv')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Adding Fiducials Programatically===&lt;br /&gt;
&lt;br /&gt;
Markups fiducials can be added to the currently active list from the python console by using the following module logic command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicer.modules.markups.logic().AddFiducial()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The command with no arguments will place a new fiducial at the origin. You can also pass it an initial location:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicer.modules.markups.logic().AddFiducial(1.0, -2.0, 3.3)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Add a button to module GUI to activate fiducial placement===&lt;br /&gt;
&lt;br /&gt;
This code snippet creates a toggle button, which activates fiducial placement when pressed (and deactivates when released).&lt;br /&gt;
&lt;br /&gt;
The [http://apidocs.slicer.org/master/classqSlicerMarkupsPlaceWidget.html qSlicerMarkupsPlaceWidget widget] can automatically activate placement of multiple points and can show buttons for deleting points, changing colors, lock, and hide points.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
w=slicer.qSlicerMarkupsPlaceWidget()&lt;br /&gt;
w.setMRMLScene(slicer.mrmlScene)&lt;br /&gt;
markupsNodeID = slicer.modules.markups.logic().AddNewFiducialNode()&lt;br /&gt;
w.setCurrentNode(slicer.mrmlScene.GetNodeByID(markupsNodeID))&lt;br /&gt;
# Hide all buttons and only show place button&lt;br /&gt;
w.buttonsVisible=False&lt;br /&gt;
w.placeButton().show()&lt;br /&gt;
w.show()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Adding Fiducials via Mouse Clicks===&lt;br /&gt;
&lt;br /&gt;
You can also set the mouse mode into Markups fiducial placement by calling:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
placeModePersistence = 1&lt;br /&gt;
slicer.modules.markups.logic().StartPlaceMode(placeModePersistence)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A lower level way to do this is via the selection and interaction nodes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
selectionNode = slicer.mrmlScene.GetNodeByID(&amp;quot;vtkMRMLSelectionNodeSingleton&amp;quot;)&lt;br /&gt;
selectionNode.SetReferenceActivePlaceNodeClassName(&amp;quot;vtkMRMLMarkupsFiducialNode&amp;quot;)&lt;br /&gt;
interactionNode = slicer.mrmlScene.GetNodeByID(&amp;quot;vtkMRMLInteractionNodeSingleton&amp;quot;)&lt;br /&gt;
placeModePersistence = 1&lt;br /&gt;
interactionNode.SetPlaceModePersistence(placeModePersistence)&lt;br /&gt;
# mode 1 is Place, can also be accessed via slicer.vtkMRMLInteractionNode().Place&lt;br /&gt;
interactionNode.SetCurrentInteractionMode(1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To switch back to view transform once you're done placing fiducials:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
interactionNode = slicer.mrmlScene.GetNodeByID(&amp;quot;vtkMRMLInteractionNodeSingleton&amp;quot;)&lt;br /&gt;
interactionNode.SwitchToViewTransformMode()&lt;br /&gt;
# also turn off place mode persistence if required&lt;br /&gt;
interactionNode.SetPlaceModePersistence(0)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Access to Fiducial Properties===&lt;br /&gt;
&lt;br /&gt;
Each vtkMRMLMarkupsFiducialNode has a vector of points in it which can be accessed from python:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fidNode = getNode(&amp;quot;vtkMRMLMarkupsFiducialNode1&amp;quot;)&lt;br /&gt;
n = fidNode.AddFiducial(4.0, 5.5, -6.0)&lt;br /&gt;
fidNode.SetNthFiducialLabel(n, &amp;quot;new label&amp;quot;)&lt;br /&gt;
# each markup is given a unique id which can be accessed from the superclass level&lt;br /&gt;
id1 = fidNode.GetNthMarkupID(n)&lt;br /&gt;
# manually set the position&lt;br /&gt;
fidNode.SetNthFiducialPosition(n, 6.0, 7.0, 8.0)&lt;br /&gt;
# set the label&lt;br /&gt;
fidNode.SetNthFiducialLabel(n, &amp;quot;New label&amp;quot;)&lt;br /&gt;
# set the selected flag, only selected = 1 fiducials will be passed to CLIs&lt;br /&gt;
fidNode.SetNthFiducialSelected(n, 1)&lt;br /&gt;
# set the visibility flag&lt;br /&gt;
fidNode.SetNthFiducialVisibility(n, 0)  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can loop over the fiducials in a list and get the coordinates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fidList = slicer.util.getNode('F')&lt;br /&gt;
numFids = fidList.GetNumberOfFiducials()&lt;br /&gt;
for i in range(numFids):&lt;br /&gt;
  ras = [0,0,0]&lt;br /&gt;
  fidList.GetNthFiducialPosition(i,ras)&lt;br /&gt;
  # the world position is the RAS position with any transform matrices applied&lt;br /&gt;
  world = [0,0,0,0]&lt;br /&gt;
  fidList.GetNthFiducialWorldCoordinates(0,world)&lt;br /&gt;
  print(i,&amp;quot;: RAS =&amp;quot;,ras,&amp;quot;, world =&amp;quot;,world)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also look at the sample code in the [https://github.com/Slicer/Slicer/blob/master/Modules/Scripted/Endoscopy/Endoscopy.py#L287 Endoscopy module] to see how python is used to access fiducials from a scripted module.&lt;br /&gt;
&lt;br /&gt;
==Accessing views, renderers, and cameras==&lt;br /&gt;
&lt;br /&gt;
Iterate through all 3D views in current layout:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
layoutManager = slicer.app.layoutManager()&lt;br /&gt;
for threeDViewIndex in range(layoutManager.threeDViewCount) :&lt;br /&gt;
  view = layoutManager.threeDWidget(threeDViewIndex).threeDView()&lt;br /&gt;
  threeDViewNode = view.mrmlViewNode()&lt;br /&gt;
  cameraNode = slicer.modules.cameras.logic().GetViewActiveCameraNode(threeDViewNode)&lt;br /&gt;
  print('View node for 3D widget ' + str(threeDViewIndex))&lt;br /&gt;
  print('  Name: ' + threeDViewNode .GetName())&lt;br /&gt;
  print('  ID: ' + threeDViewNode .GetID())&lt;br /&gt;
  print('  Camera ID: ' + cameraNode.GetID())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Iterate through all slice views in current layout:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
layoutManager = slicer.app.layoutManager()&lt;br /&gt;
for sliceViewName in layoutManager.sliceViewNames():&lt;br /&gt;
  view = layoutManager.sliceWidget(sliceViewName).sliceView()&lt;br /&gt;
  sliceNode = view.mrmlSliceNode()&lt;br /&gt;
  sliceLogic = slicer.app.applicationLogic().GetSliceLogic(sliceNode)&lt;br /&gt;
  compositeNode = sliceLogic.GetSliceCompositeNode()&lt;br /&gt;
  print('Slice view ' + str(sliceViewName))&lt;br /&gt;
  print('  Name: ' + sliceNode.GetName())&lt;br /&gt;
  print('  ID: ' + sliceNode.GetID())&lt;br /&gt;
  print('  Background volume: {0}'.format(compositeNode.GetBackgroundVolumeID()))&lt;br /&gt;
  print('  Foreground volume: {0} (opacity: {1})'.format(compositeNode.GetForegroundVolumeID(), compositeNode.GetForegroundOpacity()))&lt;br /&gt;
  print('  Label volume: {0} (opacity: {1})'.format(compositeNode.GetLabelVolumeID(), compositeNode.GetLabelOpacity()))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For low-level manipulation of views, it is possible to access VTK render windows, renderers and cameras of views in the current layout.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
renderWindow = view.renderWindow()&lt;br /&gt;
renderers = renderWindow.GetRenderers()&lt;br /&gt;
renderer = renderers.GetItemAsObject(0)&lt;br /&gt;
camera = cameraNode.GetCamera()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hide view controller bars==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicer.app.layoutManager().threeDWidget(0).threeDController().setVisible(False)&lt;br /&gt;
slicer.app.layoutManager().sliceWidget('Red').sliceController().setVisible(False)&lt;br /&gt;
slicer.app.layoutManager().plotWidget(0).plotController().setVisible(False)&lt;br /&gt;
slicer.app.layoutManager().tableWidget(0).tableController().setVisible(False)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Customize widgets in view controller bars==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sliceController = slicer.app.layoutManager().sliceWidget(&amp;quot;Red&amp;quot;).sliceController()&lt;br /&gt;
&lt;br /&gt;
# hide what is not needed&lt;br /&gt;
sliceController.pinButton().hide()&lt;br /&gt;
#sliceController.viewLabel().hide()&lt;br /&gt;
sliceController.fitToWindowToolButton().hide()&lt;br /&gt;
sliceController.sliceOffsetSlider().hide()&lt;br /&gt;
&lt;br /&gt;
# add custom widgets&lt;br /&gt;
myButton = qt.QPushButton(&amp;quot;My custom button&amp;quot;)&lt;br /&gt;
sliceController.barLayout().addWidget(myButton)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Change 3D view background color==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
viewNode = slicer.app.layoutManager().threeDWidget(0).mrmlViewNode()&lt;br /&gt;
viewNode.SetBackgroundColor(1,0,0)&lt;br /&gt;
viewNode.SetBackgroundColor2(1,0,0)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hide Slicer logo from main window (to increase space)==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicer.util.findChild(slicer.util.mainWindow(), 'LogoLabel').visible = False&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Subject hierarchy== &lt;br /&gt;
====Get the pseudo-singleton subject hierarchy node====&lt;br /&gt;
It manages the whole hierarchy and provides functions to access and manipulate&lt;br /&gt;
  shNode = slicer.mrmlScene.GetSubjectHierarchyNode()&lt;br /&gt;
&lt;br /&gt;
====Create subject hierarchy item====&lt;br /&gt;
  # If it is for a data node, it is automatically created, but the create function can be used to set parent:&lt;br /&gt;
  shNode.CreateItem(parentItemID, dataNode)&lt;br /&gt;
  # If it is a hierarchy item without a data node, then the create function must be used:&lt;br /&gt;
  shNode.CreateSubjectItem(parentItemID, name)&lt;br /&gt;
  shNode.CreateFolderItem(parentItemID, name)&lt;br /&gt;
  shNode.CreateHierarchyItem(parentItemID, name, level) # Advanced method to set level attribute manually (usually subject, study, or folder, but it can be a virtual branch for example)&lt;br /&gt;
&lt;br /&gt;
====Get subject hierarchy item====&lt;br /&gt;
Items in subject hierarchy are uniquely identified by integer IDs&lt;br /&gt;
  # Get scene item ID first because it is the root item:&lt;br /&gt;
  sceneItemID = shNode.GetSceneItemID()&lt;br /&gt;
  # Get direct child by name&lt;br /&gt;
  subjectItemID = shNode.GetItemChildWithName(sceneItemID, 'Subject_1')&lt;br /&gt;
  # Get item for data node&lt;br /&gt;
  itemID = shNode.GetItemByDataNode(dataNode)&lt;br /&gt;
  # Get item by UID (such as DICOM)&lt;br /&gt;
  itemID = shNode.GetItemByUID(slicer.vtkMRMLSubjectHierarchyConstants.GetDICOMUIDName(), seriesInstanceUid)&lt;br /&gt;
  itemID = shNode.GetItemByUIDList(slicer.vtkMRMLSubjectHierarchyConstants.GetDICOMInstanceUIDName(), instanceUID)&lt;br /&gt;
  # Invalid item ID for checking validity of a given ID (most functions return the invalid ID when item is not found)&lt;br /&gt;
  invalidItemID = slicer.vtkMRMLSubjectHierarchyNode.GetInvalidItemID()&lt;br /&gt;
&lt;br /&gt;
====Traverse children of a subject hierarchy item====&lt;br /&gt;
  children = vtk.vtkIdList()&lt;br /&gt;
  shNode.GetItemChildren(parent, children)&lt;br /&gt;
  for i in range(children.GetNumberOfIds()):&lt;br /&gt;
    child = children.GetId(i)&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
====Manipulate subject hierarchy item====&lt;br /&gt;
Instead of node operations on the individual subject hierarchy nodes, item operations are performed on the one subject hierarchy node.&lt;br /&gt;
  # Set item name&lt;br /&gt;
  shNode.SetItemName(itemID, 'NewName')&lt;br /&gt;
  # Set item parent (reparent)&lt;br /&gt;
  shNode.SetItemParent(itemID, newParentItemID)&lt;br /&gt;
  # Set visibility of data node associated to an item&lt;br /&gt;
  shNode.SetItemDisplayVisibility(itemID, 1)&lt;br /&gt;
  # Set visibility of whole branch&lt;br /&gt;
  # Note: Folder-type items (fodler, subject, study, etc.) create their own display nodes when show/hiding from UI.&lt;br /&gt;
  #       The displayable managers use SH information to determine visibility of an item, so no need to show/hide individual leaf nodes any more.&lt;br /&gt;
  #       Once the folder display node is created, it can be shown hidden simply using shNode.SetItemDisplayVisibility&lt;br /&gt;
  # From python, this is how to trigger creating a folder display node&lt;br /&gt;
  pluginHandler = slicer.qSlicerSubjectHierarchyPluginHandler().instance()&lt;br /&gt;
  folderPlugin = pluginHandler.pluginByName('Folder')&lt;br /&gt;
  folderPlugin.setDisplayVisibility(folderItemID, 1)&lt;br /&gt;
&lt;br /&gt;
====Filter items in TreeView or ComboBox====&lt;br /&gt;
Displayed items can be filtered using ''setAttributeFilter'' method. An example of the usage can be found in the  [https://github.com/Slicer/Slicer/blob/e66e3b08e35384526528e6ae678e9ec9f079f286/Applications/SlicerApp/Testing/Python/SubjectHierarchyGenericSelfTest.py#L352-L360 unit test]. Modified version here:&lt;br /&gt;
    print(shTreeView.displayedItemCount()) # 5&lt;br /&gt;
    shTreeView.setAttributeFilter('DICOM.Modality') # Nodes must have this attribute&lt;br /&gt;
    print(shTreeView.displayedItemCount()) # 3&lt;br /&gt;
    shTreeView.setAttributeFilter('DICOM.Modality','CT') # Have attribute and equal 'CT'&lt;br /&gt;
    print(shTreeView.displayedItemCount()) # 1&lt;br /&gt;
    shTreeView.removeAttributeFilter()&lt;br /&gt;
    print(shTreeView.displayedItemCount()) # 5&lt;br /&gt;
&lt;br /&gt;
===Listen to subject hierarchy item events===&lt;br /&gt;
The subject hierarchy node sends the node item id as calldata. Item IDs are vtkIdType, which are NOT vtkObjects. You need to use vtk.calldata_type(vtk.VTK_LONG) (otherwise the application crashes).&lt;br /&gt;
  &lt;br /&gt;
  class MyListenerClass(VTKObservationMixin):&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
      VTKObservationMixin.__init__(self)&lt;br /&gt;
      &lt;br /&gt;
      shNode = slicer.vtkMRMLSubjectHierarchyNode.GetSubjectHierarchyNode(slicer.mrmlScene)&lt;br /&gt;
      self.addObserver(shNode, shNode.SubjectHierarchyItemModifiedEvent, self.shItemModifiedEvent)&lt;br /&gt;
     &lt;br /&gt;
    @vtk.calldata_type(vtk.VTK_LONG) &lt;br /&gt;
    def shItemModifiedEvent(self, caller, eventId, callData):&lt;br /&gt;
      print(&amp;quot;SH Node modified&amp;quot;)&lt;br /&gt;
      print(&amp;quot;SH item ID: {0}&amp;quot;.format(callData))&lt;br /&gt;
&lt;br /&gt;
===Subject hierarchy plugin offering view context menu action===&lt;br /&gt;
If an object that supports view context menus (e.g. markups) is right-clicked in a slice or 3D view, it can offer custom actions. Due to internal limitations these plugins must be set up differently, as explained [https://github.com/Slicer/Slicer/blob/master/Modules/Loadable/Annotations/SubjectHierarchyPlugins/AnnotationsSubjectHierarchyPlugin.py#L96-L107 here]. This example makes it easier to create such a plugin.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import vtk, qt, ctk, slicer&lt;br /&gt;
from slicer.ScriptedLoadableModule import *&lt;br /&gt;
from slicer.util import VTKObservationMixin&lt;br /&gt;
&lt;br /&gt;
from SubjectHierarchyPlugins import AbstractScriptedSubjectHierarchyPlugin&lt;br /&gt;
&lt;br /&gt;
class ViewContextMenu(ScriptedLoadableModule):&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Uses ScriptedLoadableModule base class, available at:&lt;br /&gt;
  https://github.com/Slicer/Slicer/blob/master/Base/Python/slicer/ScriptedLoadableModule.py&lt;br /&gt;
  &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  def __init__(self, parent):&lt;br /&gt;
    ScriptedLoadableModule.__init__(self, parent)&lt;br /&gt;
    self.parent.title = &amp;quot;Markup Editor&amp;quot;&lt;br /&gt;
    self.parent.categories = [&amp;quot;SlicerMorph&amp;quot;, &amp;quot;Labs&amp;quot;]&lt;br /&gt;
    self.parent.dependencies = []&lt;br /&gt;
    self.parent.contributors = [&amp;quot;Steve Pieper (Isomics, Inc.)&amp;quot;]&lt;br /&gt;
    self.parent.helpText = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
A tool to manipulate Markups using the Segment Editor as a geometry backend&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    self.parent.helpText += self.getDefaultModuleDocumentationLink()&lt;br /&gt;
    self.parent.acknowledgementText = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
This module was developed by Steve Pieper, Sara Rolfe and Murat Maga,&lt;br /&gt;
through a NSF ABI Development grant, &amp;quot;An Integrated Platform for Retrieval,&lt;br /&gt;
Visualization and Analysis of 3D Morphology From Digital Biological Collections&amp;quot;&lt;br /&gt;
(Award Numbers: 1759883 (Murat Maga), 1759637 (Adam Summers), 1759839 (Douglas Boyer)).&lt;br /&gt;
This file was originally developed by Jean-Christophe Fillion-Robin, Kitware Inc.,&lt;br /&gt;
Andras Lasso, PerkLab, and Steve Pieper, Isomics, Inc.&lt;br /&gt;
and was partially funded by NIH grant 3P41RR013218-12S1.&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    #&lt;br /&gt;
    # register subject hierarchy plugin once app is initialized&lt;br /&gt;
    #&lt;br /&gt;
    def onStartupCompleted():&lt;br /&gt;
        import SubjectHierarchyPlugins&lt;br /&gt;
        from ViewContextMenu import ViewContextMenuSubjectHierarchyPlugin&lt;br /&gt;
        scriptedPlugin = slicer.qSlicerSubjectHierarchyScriptedPlugin(None)&lt;br /&gt;
        scriptedPlugin.setPythonSource(ViewContextMenuSubjectHierarchyPlugin.filePath)&lt;br /&gt;
        pluginHandler = slicer.qSlicerSubjectHierarchyPluginHandler.instance()&lt;br /&gt;
        pluginHandler.registerPlugin(scriptedPlugin)&lt;br /&gt;
        print('ViewContextMenuSubjectHierarchyPlugin loaded')&lt;br /&gt;
    slicer.app.connect(&amp;quot;startupCompleted()&amp;quot;, onStartupCompleted)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class ViewContextMenuSubjectHierarchyPlugin(AbstractScriptedSubjectHierarchyPlugin):&lt;br /&gt;
&lt;br /&gt;
    # Necessary static member to be able to set python source to scripted subject hierarchy plugin&lt;br /&gt;
    filePath = __file__&lt;br /&gt;
&lt;br /&gt;
    def __init__(self, scriptedPlugin):&lt;br /&gt;
        self.viewAction = qt.QAction(f&amp;quot;CUSTOM VIEW ...&amp;quot;, scriptedPlugin)&lt;br /&gt;
        self.viewAction.objectName = 'CustomViewAction'&lt;br /&gt;
        self.viewAction.connect(&amp;quot;triggered()&amp;quot;, self.onViewAction)&lt;br /&gt;
&lt;br /&gt;
    def onViewAction(self):&lt;br /&gt;
        print(f&amp;quot;VIEW ACTION&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def viewContextMenuActions(self):&lt;br /&gt;
        return [self.viewAction]&lt;br /&gt;
&lt;br /&gt;
    def showViewContextMenuActionsForItem(self, itemID, eventData=None):&lt;br /&gt;
        pluginHandler = slicer.qSlicerSubjectHierarchyPluginHandler.instance()&lt;br /&gt;
        pluginLogic = pluginHandler.pluginLogic()&lt;br /&gt;
        menuActions = list(pluginLogic.availableViewMenuActionNames())&lt;br /&gt;
        menuActions.append('CustomViewAction')&lt;br /&gt;
        pluginLogic.setDisplayedViewMenuActionNames(menuActions)&lt;br /&gt;
        self.viewAction.visible = True&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Use whitelist to customize view menu===&lt;br /&gt;
When right-clicking certain types of nodes in the 2D/3D views, a subject hierarchy menu pops up. If menu actions need to be removed, a whitelist can be used to specify the ones that should show up.&lt;br /&gt;
  pluginHandler = slicer.qSlicerSubjectHierarchyPluginHandler.instance()&lt;br /&gt;
  pluginLogic = pluginHandler.pluginLogic()&lt;br /&gt;
  menuActions = pluginLogic.availableViewMenuActionNames()&lt;br /&gt;
  # Returns ('RenamePointAction', 'DeletePointAction', 'ToggleSelectPointAction', 'EditPropertiesAction')&lt;br /&gt;
  newActions = ['RenamePointAction']&lt;br /&gt;
  pluginLogic.setDisplayedViewMenuActionNames(newActions)&lt;br /&gt;
&lt;br /&gt;
==Plotting==&lt;br /&gt;
&lt;br /&gt;
===Slicer plots displayed in view layout===&lt;br /&gt;
&lt;br /&gt;
Create histogram plot of a volume and show it embedded in the view layout. More information: https://www.slicer.org/wiki/Documentation/Nightly/Developers/Plots&lt;br /&gt;
&lt;br /&gt;
====Using &amp;lt;code&amp;gt;slicer.util.plot&amp;lt;/code&amp;gt; utility function====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Get a volume from SampleData and compute its histogram&lt;br /&gt;
import SampleData&lt;br /&gt;
import numpy as np&lt;br /&gt;
volumeNode = SampleData.SampleDataLogic().downloadMRHead()&lt;br /&gt;
histogram = np.histogram(arrayFromVolume(volumeNode), bins=50)&lt;br /&gt;
&lt;br /&gt;
chartNode = slicer.util.plot(histogram, xColumnIndex = 1)&lt;br /&gt;
chartNode.SetYAxisRangeAuto(False)&lt;br /&gt;
chartNode.SetYAxisRange(0, 4e5)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:SlicerPlot.png]]&lt;br /&gt;
&lt;br /&gt;
====Using MRML classes only====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Get a volume from SampleData&lt;br /&gt;
import SampleData&lt;br /&gt;
volumeNode = SampleData.SampleDataLogic().downloadMRHead()&lt;br /&gt;
&lt;br /&gt;
# Compute histogram values&lt;br /&gt;
import numpy as np&lt;br /&gt;
histogram = np.histogram(arrayFromVolume(volumeNode), bins=50)&lt;br /&gt;
&lt;br /&gt;
# Save results to a new table node&lt;br /&gt;
tableNode=slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLTableNode&amp;quot;)&lt;br /&gt;
updateTableFromArray(tableNode, histogram)&lt;br /&gt;
tableNode.GetTable().GetColumn(0).SetName(&amp;quot;Count&amp;quot;)&lt;br /&gt;
tableNode.GetTable().GetColumn(1).SetName(&amp;quot;Intensity&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Create plot&lt;br /&gt;
plotSeriesNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLPlotSeriesNode&amp;quot;, volumeNode.GetName() + ' histogram')&lt;br /&gt;
plotSeriesNode.SetAndObserveTableNodeID(tableNode.GetID())&lt;br /&gt;
plotSeriesNode.SetXColumnName(&amp;quot;Intensity&amp;quot;)&lt;br /&gt;
plotSeriesNode.SetYColumnName(&amp;quot;Count&amp;quot;)&lt;br /&gt;
plotSeriesNode.SetPlotType(plotSeriesNode.PlotTypeScatterBar)&lt;br /&gt;
plotSeriesNode.SetColor(0, 0.6, 1.0)&lt;br /&gt;
&lt;br /&gt;
# Create chart and add plot&lt;br /&gt;
plotChartNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLPlotChartNode&amp;quot;)&lt;br /&gt;
plotChartNode.AddAndObservePlotSeriesNodeID(plotSeriesNode.GetID())&lt;br /&gt;
plotChartNode.YAxisRangeAutoOff()&lt;br /&gt;
plotChartNode.SetYAxisRange(0, 500000)&lt;br /&gt;
&lt;br /&gt;
# Show plot in layout&lt;br /&gt;
slicer.modules.plots.logic().ShowChartInLayout(plotChartNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using matplotlib===&lt;br /&gt;
&lt;br /&gt;
Matplotlib may be used from within Slicer, but the default Tk backend locks up and crashes Slicer. However, Matplotlib may still be used through other backends. More details can be found on the [http://matplotlib.sourceforge.net/ MatPlotLib] pages.&lt;br /&gt;
&lt;br /&gt;
====Non-interactive plot====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
try:&lt;br /&gt;
  import matplotlib&lt;br /&gt;
except ModuleNotFoundError:&lt;br /&gt;
  pip_install('matplotlib')&lt;br /&gt;
  import matplotlib&lt;br /&gt;
&lt;br /&gt;
matplotlib.use('Agg')&lt;br /&gt;
from pylab import *&lt;br /&gt;
&lt;br /&gt;
t1 = arange(0.0, 5.0, 0.1)&lt;br /&gt;
t2 = arange(0.0, 5.0, 0.02)&lt;br /&gt;
t3 = arange(0.0, 2.0, 0.01) &lt;br /&gt;
&lt;br /&gt;
subplot(211)&lt;br /&gt;
plot(t1, cos(2*pi*t1)*exp(-t1), 'bo', t2, cos(2*pi*t2)*exp(-t2), 'k')&lt;br /&gt;
grid(True)&lt;br /&gt;
title('A tale of 2 subplots')&lt;br /&gt;
ylabel('Damped')&lt;br /&gt;
&lt;br /&gt;
subplot(212)&lt;br /&gt;
plot(t3, cos(2*pi*t3), 'r--')&lt;br /&gt;
grid(True)&lt;br /&gt;
xlabel('time (s)')&lt;br /&gt;
ylabel('Undamped')&lt;br /&gt;
savefig('MatplotlibExample.png')&lt;br /&gt;
&lt;br /&gt;
# Static image view&lt;br /&gt;
pm = qt.QPixmap(&amp;quot;MatplotlibExample.png&amp;quot;)&lt;br /&gt;
imageWidget = qt.QLabel()&lt;br /&gt;
imageWidget.setPixmap(pm)&lt;br /&gt;
imageWidget.setScaledContents(True)&lt;br /&gt;
imageWidget.show()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:MatplotlibExample.png]]&lt;br /&gt;
&lt;br /&gt;
====Plot in Slicer Jupyter notebook====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import JupyterNotebooksLib as slicernb&lt;br /&gt;
try:&lt;br /&gt;
  import matplotlib&lt;br /&gt;
except ModuleNotFoundError:&lt;br /&gt;
  pip_install('matplotlib')&lt;br /&gt;
  import matplotlib&lt;br /&gt;
&lt;br /&gt;
matplotlib.use('Agg')&lt;br /&gt;
&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def f(t):&lt;br /&gt;
    s1 = np.cos(2*np.pi*t)&lt;br /&gt;
    e1 = np.exp(-t)&lt;br /&gt;
    return s1 * e1&lt;br /&gt;
&lt;br /&gt;
t1 = np.arange(0.0, 5.0, 0.1)&lt;br /&gt;
t2 = np.arange(0.0, 5.0, 0.02)&lt;br /&gt;
t3 = np.arange(0.0, 2.0, 0.01)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
fig, axs = plt.subplots(2, 1, constrained_layout=True)&lt;br /&gt;
axs[0].plot(t1, f(t1), 'o', t2, f(t2), '-')&lt;br /&gt;
axs[0].set_title('subplot 1')&lt;br /&gt;
axs[0].set_xlabel('distance (m)')&lt;br /&gt;
axs[0].set_ylabel('Damped oscillation')&lt;br /&gt;
fig.suptitle('This is a somewhat long figure title', fontsize=16)&lt;br /&gt;
&lt;br /&gt;
axs[1].plot(t3, np.cos(2*np.pi*t3), '--')&lt;br /&gt;
axs[1].set_xlabel('time (s)')&lt;br /&gt;
axs[1].set_title('subplot 2')&lt;br /&gt;
axs[1].set_ylabel('Undamped')&lt;br /&gt;
&lt;br /&gt;
slicernb.MatplotlibDisplay(matplotlib.pyplot)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:JupyterNotebookMatplotlibExample.png]]&lt;br /&gt;
&lt;br /&gt;
====Interactive plot using wxWidgets GUI toolkit====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
try:&lt;br /&gt;
  import matplotlib&lt;br /&gt;
  import wx&lt;br /&gt;
except ModuleNotFoundError:&lt;br /&gt;
  pip_install('matplotlib wxPython')&lt;br /&gt;
  import matplotlib&lt;br /&gt;
&lt;br /&gt;
# Get a volume from SampleData and compute its histogram&lt;br /&gt;
import SampleData&lt;br /&gt;
import numpy as np&lt;br /&gt;
volumeNode = SampleData.SampleDataLogic().downloadMRHead()&lt;br /&gt;
histogram = np.histogram(arrayFromVolume(volumeNode), bins=50)&lt;br /&gt;
&lt;br /&gt;
# Set matplotlib to use WXAgg backend&lt;br /&gt;
import matplotlib&lt;br /&gt;
matplotlib.use('WXAgg')&lt;br /&gt;
&lt;br /&gt;
# Show an interactive plot&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
fig, ax = plt.subplots()&lt;br /&gt;
ax.plot(histogram[1][1:], histogram[0].astype(float))&lt;br /&gt;
ax.grid(True)&lt;br /&gt;
ax.set_ylim((0, 4e5))&lt;br /&gt;
plt.show(block=False)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:InteractiveMatplotlibExample.png]]&lt;br /&gt;
&lt;br /&gt;
==Execute external applications==&lt;br /&gt;
&lt;br /&gt;
How to run external applications from Slicer.&lt;br /&gt;
&lt;br /&gt;
===Run process in default environment===&lt;br /&gt;
&lt;br /&gt;
When a process is launched from Slicer then by default Slicer's ITK, VTK, Qt, etc. libraries are used. If an external application has its own version of these libraries, then the application is expected to crash. To prevent crashing, the application must be run in the environment where Slicer started up (without all Slicer-specific library paths). This startup environment can be retrieved using ''slicer.util.startupEnvironment()''.&lt;br /&gt;
&lt;br /&gt;
Example: run Python3 script from Slicer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
command_to_execute = [&amp;quot;/usr/bin/python3&amp;quot;, &amp;quot;-c&amp;quot;, &amp;quot;print('hola')&amp;quot;]&lt;br /&gt;
from subprocess import check_output&lt;br /&gt;
check_output(&lt;br /&gt;
  command_to_execute, &lt;br /&gt;
  env=slicer.util.startupEnvironment()&lt;br /&gt;
  )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'hola\n'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On some systems, ''shell=True'' must be specified as well.&lt;br /&gt;
&lt;br /&gt;
==Manage extensions==&lt;br /&gt;
&lt;br /&gt;
===Download and install extension===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
extensionName = 'SlicerIGT'&lt;br /&gt;
em = slicer.app.extensionsManagerModel()&lt;br /&gt;
if not em.isExtensionInstalled(extensionName):&lt;br /&gt;
    extensionMetaData = em.retrieveExtensionMetadataByName(extensionName)&lt;br /&gt;
    url = em.serverUrl().toString()+'/download/item/'+extensionMetaData['item_id']&lt;br /&gt;
    extensionPackageFilename = slicer.app.temporaryPath+'/'+extensionMetaData['md5']&lt;br /&gt;
    slicer.util.downloadFile(url, extensionPackageFilename)&lt;br /&gt;
    em.installExtension(extensionPackageFilename)&lt;br /&gt;
    slicer.util.restart()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Install a module directly from a git repository ===&lt;br /&gt;
This can be useful for sharing code in development without requiring a restart of Slicer.&lt;br /&gt;
&lt;br /&gt;
https://gist.github.com/pieper/a9c0ba57de3833c9f5aea68247bda597&lt;/div&gt;</summary>
		<author><name>Hherhold</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/ScriptRepository&amp;diff=63476</id>
		<title>Documentation/Nightly/ScriptRepository</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/ScriptRepository&amp;diff=63476"/>
		<updated>2020-12-02T18:02:56Z</updated>

		<summary type="html">&lt;p&gt;Hherhold: Fix indentation so code shows up as code&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Community-contributed modules=  &lt;br /&gt;
&lt;br /&gt;
The examples in this section are [[Documentation/{{documentation/version}}/Developers/Modules#Scripted_Modules| Scripted Modules]] that provide a user interface in the module panel along with specialized implementation logic.&lt;br /&gt;
&lt;br /&gt;
Usage: save the .py file to a directory, add the directory to the additional module paths in the Slicer application settings (choose in the menu: Edit / Application settings, click Modules, click &amp;gt;&amp;gt; next to Additional module paths, click Add, and choose the .py file's location).&lt;br /&gt;
&lt;br /&gt;
More information about python scripted modules and more usage examples can be found in the[[Documentation/{{documentation/version}}/Developers/Python_scripting | Python scripting]] wiki page.&lt;br /&gt;
&lt;br /&gt;
==Filters==&lt;br /&gt;
&lt;br /&gt;
*[https://raw.github.com/pieper/VolumeMasker/master/VolumeMasker.py VolumeMasker.py]: Update a target volume with the results of setting all input volume voxels to 0 except for those that correspond to a selected label value in an input label map (Used for example in the volume rendering in [https://www.youtube.com/watch?v=dfu2gugHLHs this video).&lt;br /&gt;
&lt;br /&gt;
==DICOM==&lt;br /&gt;
&lt;br /&gt;
*[https://gist.github.com/pieper/6186477 dicom header browser] to easily scroll through dicom files using dcmdump.&lt;br /&gt;
*[https://github.com/SlicerRt/SlicerRT/tree/master/BatchProcessing SlicerRT batch processing] to batch convert RT structure sets to labelmap NRRD files.&lt;br /&gt;
&lt;br /&gt;
==Informatics==&lt;br /&gt;
&lt;br /&gt;
*[https://gist.github.com/lassoan/bf0954d93cacc8cbe27cd4a3ad503f2f MarkupsInfo.py]: Compute the total length between all the points of a markup list.&lt;br /&gt;
*[https://github.com/lassoan/SlicerLineProfile/blob/master/LineProfile/LineProfile.py LineProfile.py]: Compute intensity profile in a volume along a line.&lt;br /&gt;
&lt;br /&gt;
=Community-contributed examples=&lt;br /&gt;
&lt;br /&gt;
Usage: Copy-paste the shown code lines or linked .py file contents into Python console in Slicer.  Or save them to a file and run them using execfile.&lt;br /&gt;
&lt;br /&gt;
==Get node object from the scene from node name or ID==&lt;br /&gt;
&lt;br /&gt;
Examples in the script repository commonly use &amp;lt;code&amp;gt;slicer.util.getNode()&amp;lt;/code&amp;gt; function for getting a node object from the scene. This method is only recommended for testing and interactive debugging. &lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;slicer.util.getNode()&amp;lt;/code&amp;gt; is recommended **only for interactive debugging** in the Python console/Jupyter notebook&lt;br /&gt;
** its input is intentionally defined vaguely (it can be either node ID or name and you can use wildcards such as &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;), which is good because it make it simpler to use, but the uncertain behavior is not good for general-purpose use in a module&lt;br /&gt;
** throws an exception so that the developer knows immediately that there was a typo or other unexpected error&lt;br /&gt;
* &amp;lt;code&amp;gt;slicer.mrmlScene.GetNodeByID()&amp;lt;/code&amp;gt; is optimized for usage in modules:&lt;br /&gt;
** its behavior is more predictable: it only accepts node ID as input. &amp;lt;code&amp;gt;slicer.mrmlScene.GetFirstNodeByName()&amp;lt;/code&amp;gt; can be used to get a node by its name, but since multiple nodes in the scene can have the same name, it is not recommended to keep reference to a node by its name.&lt;br /&gt;
** if node is not found it returns &amp;lt;code&amp;gt;None&amp;lt;/code&amp;gt; (instead of throwing an exception), because this is often not considered an error in module code (it is just used to check existence of a node) and using return value for not-found nodes allows simpler syntax&lt;br /&gt;
&lt;br /&gt;
==Capture==&lt;br /&gt;
&lt;br /&gt;
*Capture the full Slicer screen and save it into a file&lt;br /&gt;
&lt;br /&gt;
  img = qt.QPixmap.grabWidget(slicer.util.mainWindow()).toImage()&lt;br /&gt;
  img.save('c:/tmp/test.png')&lt;br /&gt;
&lt;br /&gt;
*Capture all the views save it into a file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import ScreenCapture&lt;br /&gt;
cap = ScreenCapture.ScreenCaptureLogic()&lt;br /&gt;
cap.showViewControllers(False)&lt;br /&gt;
cap.captureImageFromView(None,'c:/tmp/test.png')&lt;br /&gt;
cap.showViewControllers(True)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Capture a single view:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
viewNodeID = 'vtkMRMLViewNode1'&lt;br /&gt;
import ScreenCapture&lt;br /&gt;
cap = ScreenCapture.ScreenCaptureLogic()&lt;br /&gt;
view = cap.viewFromNode(slicer.mrmlScene.GetNodeByID(viewNodeID))&lt;br /&gt;
cap.captureImageFromView(view,'c:/tmp/test.png')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Common values for viewNodeID: vtkMRMLSliceNodeRed, vtkMRMLSliceNodeYellow, vtkMRMLSliceNodeGreen, vtkMRMLViewNode1, vtkMRMLViewNode2. &lt;br /&gt;
The ScreenCapture module can also create video animations of rotating views, slice sweeps, etc.&lt;br /&gt;
&lt;br /&gt;
*Capture a slice view sweep into a series of PNG files - for example, Red slice view, 30 images, from position -125.0 to 75.0, into c:/tmp folder, with name image_00001.png, image_00002.png, ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import ScreenCapture&lt;br /&gt;
ScreenCapture.ScreenCaptureLogic().captureSliceSweep(getNode('vtkMRMLSliceNodeRed'), -125.0, 75.0, 30, &amp;quot;c:/tmp&amp;quot;, &amp;quot;image_%05d.png&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Capture 3D view into PNG file with transparent background&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
renderWindow = slicer.app.layoutManager().threeDWidget(0).threeDView().renderWindow()&lt;br /&gt;
renderWindow.SetAlphaBitPlanes(1)&lt;br /&gt;
wti = vtk.vtkWindowToImageFilter()&lt;br /&gt;
wti.SetInputBufferTypeToRGBA()&lt;br /&gt;
wti.SetInput(renderWindow)&lt;br /&gt;
writer = vtk.vtkPNGWriter()&lt;br /&gt;
writer.SetFileName(&amp;quot;c:/tmp/screenshot.png&amp;quot;)&lt;br /&gt;
writer.SetInputConnection(wti.GetOutputPort())&lt;br /&gt;
writer.Write()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Launching Slicer==&lt;br /&gt;
&lt;br /&gt;
*How to open an .mrb file with Slicer at the command line?&lt;br /&gt;
&lt;br /&gt;
  Slicer.exe --python-code &amp;quot;slicer.util.loadScene( 'f:/2013-08-23-Scene.mrb' )&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*How to run a script in the Slicer environment in batch mode (without showing any graphical user interface)?&lt;br /&gt;
&lt;br /&gt;
  Slicer.exe --python-code &amp;quot;doSomething; doSomethingElse; etc.&amp;quot; --testing --no-splash --no-main-window&lt;br /&gt;
&lt;br /&gt;
==Load volume from file==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
loadedVolumeNode = slicer.util.loadVolume('c:/Users/abc/Documents/MRHead.nrrd')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Additional options may be specified in &amp;lt;code&amp;gt;properties&amp;lt;/code&amp;gt; argument. For example, load an image stack by disabling &amp;lt;code&amp;gt;singleFile&amp;lt;/code&amp;gt; option:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
loadedVolumeNode = slicer.util.loadVolume('c:/Users/abc/Documents/SomeImage/file001.png', {'singleFile': False})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get a MRML node in the scene based on the node name and call methods of that object. For the MRHead sample data:&lt;br /&gt;
&lt;br /&gt;
  vol=slicer.util.getNode('MR*')&lt;br /&gt;
  vol.GetImageData().GetDimensions()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Load volume from URL==&lt;br /&gt;
&lt;br /&gt;
Download a volume from a URL and load it into the scene using the code snippet below. Downloaded data is temporarily preserved in the application's cache folder and if the checksum of the already downloaded data matches the specified checksum (&amp;lt;algo&amp;gt;:&amp;lt;digest&amp;gt;) then the file is retrieved from the cache instead of being downloaded again. To compute digest with algo ''SHA256'', you can run &amp;lt;code&amp;gt;slicer.util.computeChecksum(&amp;quot;SHA256&amp;quot;, &amp;quot;path/to/file&amp;quot;)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import SampleData&lt;br /&gt;
sampleDataLogic = SampleData.SampleDataLogic()&lt;br /&gt;
loadedNodes = sampleDataLogic.downloadFromURL(&lt;br /&gt;
    nodeNames='MRHead',&lt;br /&gt;
    fileNames='MR-head25.nrrd',&lt;br /&gt;
    uris='https://github.com/Slicer/SlicerTestingData/releases/download/SHA256/cc211f0dfd9a05ca3841ce1141b292898b2dd2d3f08286affadf823a7e58df93',&lt;br /&gt;
    checksums='SHA256:cc211f0dfd9a05ca3841ce1141b292898b2dd2d3f08286affadf823a7e58df93')[0]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With interruptible progress reporting using a progress bar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import SampleData&lt;br /&gt;
&lt;br /&gt;
def reportProgress(msg, level=None):&lt;br /&gt;
    # Print progress in the console&lt;br /&gt;
    print(&amp;quot;Loading... {0}%&amp;quot;.format(sampleDataLogic.downloadPercent))&lt;br /&gt;
    # Abort download if cancel is clicked in progress bar&lt;br /&gt;
    if slicer.progressWindow.wasCanceled:&lt;br /&gt;
        raise Exception('download aborted')&lt;br /&gt;
    # Update progress window&lt;br /&gt;
    slicer.progressWindow.show()&lt;br /&gt;
    slicer.progressWindow.activateWindow()&lt;br /&gt;
    slicer.progressWindow.setValue(int(sampleDataLogic.downloadPercent))&lt;br /&gt;
    slicer.progressWindow.setLabelText(&amp;quot;Downloading...&amp;quot;)&lt;br /&gt;
    # Process events to allow screen to refresh&lt;br /&gt;
    slicer.app.processEvents() &lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    volumeNode = None&lt;br /&gt;
    slicer.progressWindow = slicer.util.createProgressDialog()&lt;br /&gt;
    sampleDataLogic = SampleData.SampleDataLogic()&lt;br /&gt;
    sampleDataLogic.logMessage = reportProgress&lt;br /&gt;
    loadedNodes = sampleDataLogic.downloadFromURL(&lt;br /&gt;
        nodeNames='MRHead',&lt;br /&gt;
        fileNames='MR-head25.nrrd',&lt;br /&gt;
        uris='https://github.com/Slicer/SlicerTestingData/releases/download/SHA256/cc211f0dfd9a05ca3841ce1141b292898b2dd2d3f08286affadf823a7e58df93',&lt;br /&gt;
        checksums='SHA256:cc211f0dfd9a05ca3841ce1141b292898b2dd2d3f08286affadf823a7e58df93')&lt;br /&gt;
    volumeNode = loadedNodes[0]&lt;br /&gt;
finally:&lt;br /&gt;
    slicer.progressWindow.close()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Show volume rendering automatically when a volume is loaded==&lt;br /&gt;
&lt;br /&gt;
To show volume rendering of a volume automatically when it is loaded, add the lines below to your &lt;br /&gt;
[[Documentation/{{documentation/version}}/Developers/Python_scripting#How_to_systematically_execute_custom_python_code_at_startup_.3F|.slicerrc file]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@vtk.calldata_type(vtk.VTK_OBJECT)&lt;br /&gt;
def onNodeAdded(caller, event, calldata):&lt;br /&gt;
  node = calldata&lt;br /&gt;
  if isinstance(node, slicer.vtkMRMLVolumeNode):&lt;br /&gt;
    # Call showVolumeRendering using a timer instead of calling it directly&lt;br /&gt;
    # to allow the volume loading to fully complete.&lt;br /&gt;
    qt.QTimer.singleShot(0, lambda: showVolumeRendering(node))&lt;br /&gt;
&lt;br /&gt;
def showVolumeRendering(volumeNode):&lt;br /&gt;
  print(&amp;quot;Show volume rendering of node &amp;quot;+volumeNode.GetName())&lt;br /&gt;
  volRenLogic = slicer.modules.volumerendering.logic()&lt;br /&gt;
  displayNode = volRenLogic.CreateDefaultVolumeRenderingNodes(volumeNode)&lt;br /&gt;
  displayNode.SetVisibility(True)&lt;br /&gt;
  scalarRange = volumeNode.GetImageData().GetScalarRange()&lt;br /&gt;
  if scalarRange[1]-scalarRange[0] &amp;lt; 1500:&lt;br /&gt;
    # small dynamic range, probably MRI&lt;br /&gt;
    displayNode.GetVolumePropertyNode().Copy(volRenLogic.GetPresetByName('MR-Default'))&lt;br /&gt;
  else:&lt;br /&gt;
    # larger dynamic range, probably CT&lt;br /&gt;
    displayNode.GetVolumePropertyNode().Copy(volRenLogic.GetPresetByName('CT-Chest-Contrast-Enhanced'))&lt;br /&gt;
    &lt;br /&gt;
slicer.mrmlScene.AddObserver(slicer.vtkMRMLScene.NodeAddedEvent, onNodeAdded)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Automatically load volumes that are copied into a folder==&lt;br /&gt;
&lt;br /&gt;
This example shows how to implement a simple background task by using a timer. The background task is to check for any new volume files in folder and if there is any then automatically load it.&lt;br /&gt;
&lt;br /&gt;
There are more efficient methods for file system monitoring or exchanging image data in real-time (for example, using OpenIGTLink), the example below is just for demonstration purposes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
incomingVolumeFolder = &amp;quot;c:/tmp/incoming&amp;quot;&lt;br /&gt;
incomingVolumesProcessed = []&lt;br /&gt;
&lt;br /&gt;
def checkForNewVolumes():&lt;br /&gt;
  # Check if there is a new file in the &lt;br /&gt;
  from os import listdir&lt;br /&gt;
  from os.path import isfile, join&lt;br /&gt;
  for f in listdir(incomingVolumeFolder):&lt;br /&gt;
    if f in incomingVolumesProcessed:&lt;br /&gt;
      # this is an incoming file, it was already there&lt;br /&gt;
      continue&lt;br /&gt;
    filePath = join(incomingVolumeFolder, f)&lt;br /&gt;
    if not isfile(filePath):&lt;br /&gt;
      # ignore directories&lt;br /&gt;
      continue&lt;br /&gt;
    logging.info(&amp;quot;Loading new file: &amp;quot;+f)&lt;br /&gt;
    incomingVolumesProcessed.append(f)&lt;br /&gt;
    slicer.util.loadVolume(filePath)&lt;br /&gt;
  # Check again in 3000ms&lt;br /&gt;
  qt.QTimer.singleShot(3000, checkForNewVolumes)&lt;br /&gt;
&lt;br /&gt;
# Start monitoring&lt;br /&gt;
checkForNewVolumes()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==DICOM==&lt;br /&gt;
===How to load DICOM files into the scene from a folder===&lt;br /&gt;
&lt;br /&gt;
This code loads all DICOM objects into the scene from a file folder. All the registered plugins are evaluated and the one with the highest confidence will be used to load the data. Files are imported into a temporary DICOM database, so the current Slicer DICOM database is not impacted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dicomDataDir = &amp;quot;c:/my/folder/with/dicom-files&amp;quot;  # input folder with DICOM files&lt;br /&gt;
loadedNodeIDs = []  # this list will contain the list of all loaded node IDs&lt;br /&gt;
  &lt;br /&gt;
from DICOMLib import DICOMUtils&lt;br /&gt;
with DICOMUtils.TemporaryDICOMDatabase() as db:&lt;br /&gt;
  DICOMUtils.importDicom(dicomDataDir, db)&lt;br /&gt;
  patientUIDs = db.patients()&lt;br /&gt;
  for patientUID in patientUIDs:&lt;br /&gt;
    loadedNodeIDs.extend(DICOMUtils.loadPatientByUID(patientUID))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How to import DICOM files into the application's DICOM database===&lt;br /&gt;
&lt;br /&gt;
This code snippet uses Slicer DICOM browser built-in indexer to import DICOM files into the database. Images are not loaded into the scene, but they show up in the DICOM browser. After import, data sets can be loaded using DICOMUtils functions (e.g., loadPatientByUID) - see above for an example.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# instantiate a new DICOM browser&lt;br /&gt;
slicer.util.selectModule(&amp;quot;DICOM&amp;quot;)&lt;br /&gt;
dicomBrowser = slicer.modules.DICOMWidget.browserWidget.dicomBrowser&lt;br /&gt;
# use dicomBrowser.ImportDirectoryCopy to make a copy of the files (useful for importing data from removable storage)&lt;br /&gt;
dicomBrowser.importDirectory(dicomFilesDirectory, dicomBrowser.ImportDirectoryAddLink)&lt;br /&gt;
# wait for import to finish before proceeding (optional, if removed then import runs in the background)&lt;br /&gt;
dicomBrowser.waitForImportFinished()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How to import DICOM files using DICOMweb===&lt;br /&gt;
&lt;br /&gt;
Download and import DICOM data set using DICOMweb from [https://kheops.online/ Kheops], Google Health API, etc.&lt;br /&gt;
&lt;br /&gt;
How to obtain accessToken:&lt;br /&gt;
* Google Cloud: Execute &amp;lt;code&amp;gt;gcloud auth print-access-token&amp;lt;/code&amp;gt; once you have logged in&lt;br /&gt;
* Kheops: create an album, create a sharing link (somethin like &amp;lt;code&amp;gt;https://demo.kheops.online/view/TfYXwbKAW7JYbAgZ7MyISf&amp;lt;/code&amp;gt;), the token is the string after the last slash&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicer.util.selectModule(&amp;quot;DICOM&amp;quot;)  # ensure DICOM database is initialized and &lt;br /&gt;
slicer.app.processEvents()&lt;br /&gt;
from DICOMLib import DICOMUtils&lt;br /&gt;
DICOMUtils.importFromDICOMWeb(&lt;br /&gt;
    dicomWebEndpoint=&amp;quot;http://demo.kheops.online/api&amp;quot;,&lt;br /&gt;
    studyInstanceUID=&amp;quot;1.3.6.1.4.1.14519.5.2.1.8421.4009.985792766370191766692237040819&amp;quot;,&lt;br /&gt;
    accessToken=&amp;quot;TfYXwbKAW7JYbAgZ7MyISf&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How to access top level tags of DICOM images imported into Slicer? For example, to print the first patient's first study's first series' &amp;quot;0020,0032&amp;quot; field:===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
db=slicer.dicomDatabase&lt;br /&gt;
patientList=db.patients()&lt;br /&gt;
studyList=db.studiesForPatient(patientList[0])&lt;br /&gt;
seriesList=db.seriesForStudy(studyList[0])&lt;br /&gt;
fileList=db.filesForSeries(seriesList[0])&lt;br /&gt;
# Note, fileValue accesses the database of cached top level tags&lt;br /&gt;
# (nested tags are not included)&lt;br /&gt;
print(db.fileValue(fileList[0],'0020,0032'))&lt;br /&gt;
# Get tag group,number from dicom dictionary&lt;br /&gt;
import pydicom as dicom&lt;br /&gt;
tagName = &amp;quot;StudyDate&amp;quot;&lt;br /&gt;
tagStr = str(dicom.tag.Tag(tagName))[1:-1].replace(' ','')&lt;br /&gt;
print(db.fileValue(fileList[0],tagStr))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How to access DICOM tags nested in a sequence===&lt;br /&gt;
  db=slicer.dicomDatabase&lt;br /&gt;
  patientList=db.patients()&lt;br /&gt;
  studyList=db.studiesForPatient(patientList[0])&lt;br /&gt;
  seriesList=db.seriesForStudy(studyList[0])&lt;br /&gt;
  fileList=db.filesForSeries(seriesList[0])&lt;br /&gt;
  # use pydicom to access the full header, which requires&lt;br /&gt;
  # re-reading the dataset instead of using the database cache&lt;br /&gt;
  import pydicom&lt;br /&gt;
  pydicom.dcmread(fileList[0])&lt;br /&gt;
  ds.CTExposureSequence[0].ExposureModulationType&lt;br /&gt;
&lt;br /&gt;
===How to access tag of a volume loaded from DICOM? For example, get the patient position stored in a volume:===&lt;br /&gt;
  volumeName='2: ENT IMRT'&lt;br /&gt;
  n=slicer.util.getNode(volumeName)&lt;br /&gt;
  instUids=n.GetAttribute('DICOM.instanceUIDs').split()&lt;br /&gt;
  filename=slicer.dicomDatabase.fileForInstance(instUids[0])&lt;br /&gt;
  print(slicer.dicomDatabase.fileValue(filename,'0018,5100'))&lt;br /&gt;
&lt;br /&gt;
===How to access tag of an item in the Subject Hierachy tree? For example, get the content time tag of a structure set:===&lt;br /&gt;
  rtStructName = '3: RTSTRUCT: PROS'&lt;br /&gt;
  rtStructNode = slicer.util.getNode(rtStructName)&lt;br /&gt;
  shNode = slicer.vtkMRMLSubjectHierarchyNode.GetSubjectHierarchyNode(slicer.mrmlScene)&lt;br /&gt;
  rtStructShItemID = shNode.GetItemByDataNode(rtStructNode)&lt;br /&gt;
  ctSliceInstanceUids = shNode.GetItemAttribute(rtStructShItemID, 'DICOM.ReferencedInstanceUIDs').split()&lt;br /&gt;
  filename = slicer.dicomDatabase.fileForInstance(ctSliceInstanceUids[0])&lt;br /&gt;
  print(slicer.dicomDatabase.fileValue(filename,'0008,0033'))&lt;br /&gt;
&lt;br /&gt;
===How to get path and filename of a loaded DICOM volume?===&lt;br /&gt;
  def pathFromNode(node):&lt;br /&gt;
    storageNode=node.GetStorageNode()&lt;br /&gt;
    if storageNode is not None: # loaded via drag-drop&lt;br /&gt;
        filepath=storageNode.GetFullNameFromFileName()&lt;br /&gt;
    else: # loaded via DICOM browser&lt;br /&gt;
        instanceUIDs=node.GetAttribute('DICOM.instanceUIDs').split()&lt;br /&gt;
        filepath=slicer.dicomDatabase.fileForInstance(instUids[0])&lt;br /&gt;
    return filepath&lt;br /&gt;
  &lt;br /&gt;
  # example:&lt;br /&gt;
  node=slicer.util.getNode('volume1')&lt;br /&gt;
  path=self.pathFromNode(node)&lt;br /&gt;
  print(&amp;quot;DICOM path=%s&amp;quot; % path)&lt;br /&gt;
&lt;br /&gt;
===How can I convert DICOM to NRRD on the command line?===&lt;br /&gt;
&lt;br /&gt;
 /Applications/Slicer-4.6.2.app/Contents/MacOS/Slicer --no-main-window --python-code &amp;quot;node=slicer.util.loadVolume('/tmp/series/im0.dcm'); slicer.util.saveNode(node, '/tmp/output.nrrd'); exit()&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The same can be done on windows by using the top level Slicer.exe.  Be sure to use forward slashes in the pathnames within quotes on the command line.&lt;br /&gt;
&lt;br /&gt;
===Export a volume to DICOM file format===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
volumeNode = getNode('CTChest')&lt;br /&gt;
outputFolder = &amp;quot;c:/tmp/dicom-output&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Create patient and study and put the volume under the study&lt;br /&gt;
shNode = slicer.vtkMRMLSubjectHierarchyNode.GetSubjectHierarchyNode(slicer.mrmlScene)&lt;br /&gt;
patientItemID = shNode.CreateSubjectItem(shNode.GetSceneItemID(), &amp;quot;test patient&amp;quot;)&lt;br /&gt;
studyItemID = shNode.CreateStudyItem(patientItemID, &amp;quot;test study&amp;quot;)&lt;br /&gt;
volumeShItemID = shNode.GetItemByDataNode(volumeNode)&lt;br /&gt;
shNode.SetItemParent(volumeShItemID, studyItemID)&lt;br /&gt;
&lt;br /&gt;
import DICOMScalarVolumePlugin&lt;br /&gt;
exporter = DICOMScalarVolumePlugin.DICOMScalarVolumePluginClass()&lt;br /&gt;
exportables = exporter.examineForExport(volumeShItemID)&lt;br /&gt;
for exp in exportables:&lt;br /&gt;
  exp.directory = outputFolder&lt;br /&gt;
&lt;br /&gt;
exporter.export(exportables)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Export a segmentation to DICOM segmentation object===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentationNode = ...&lt;br /&gt;
referenceVolumeNode = ...&lt;br /&gt;
outputFolder = &amp;quot;c:/tmp/dicom-output&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Associate segmentation node with a reference volume node&lt;br /&gt;
shNode = slicer.vtkMRMLSubjectHierarchyNode.GetSubjectHierarchyNode(slicer.mrmlScene)&lt;br /&gt;
referenceVolumeShItem = shNode.GetItemByDataNode(referenceVolumeNode)&lt;br /&gt;
studyShItem = shNode.GetItemParent(referenceVolumeShItem)&lt;br /&gt;
segmentationShItem = shNode.GetItemByDataNode(segmentationNode)&lt;br /&gt;
shNode.SetItemParent(segmentationShItem, studyShItem)&lt;br /&gt;
&lt;br /&gt;
# Export to DICOM&lt;br /&gt;
import DICOMSegmentationPlugin&lt;br /&gt;
exporter = DICOMSegmentationPlugin.DICOMSegmentationPluginClass()&lt;br /&gt;
exportables = exporter.examineForExport(segmentationShItem)&lt;br /&gt;
for exp in exportables:&lt;br /&gt;
    exp.directory = outputFolder&lt;br /&gt;
&lt;br /&gt;
exporter.export(exportables)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Customize table columns in DICOM browser===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Get browser and database&lt;br /&gt;
dicomBrowser = slicer.modules.dicom.widgetRepresentation().self().browserWidget.dicomBrowser&lt;br /&gt;
dicomDatabase = dicomBrowser.database()&lt;br /&gt;
&lt;br /&gt;
# Print list of available columns&lt;br /&gt;
print(dicomDatabase.patientFieldNames)&lt;br /&gt;
print(dicomDatabase.studyFieldNames)&lt;br /&gt;
print(dicomDatabase.seriesFieldNames)&lt;br /&gt;
&lt;br /&gt;
# Change column order&lt;br /&gt;
dicomDatabase.setWeightForField('Series', 'SeriesDescription', 7)&lt;br /&gt;
dicomDatabase.setWeightForField('Studies', 'StudyDescription', 6)&lt;br /&gt;
# Change column visibility&lt;br /&gt;
dicomDatabase.setVisibilityForField('Patients', 'PatientsBirthDate', False)&lt;br /&gt;
dicomDatabase.setVisibilityForField('Patients', 'PatientsComments', True)&lt;br /&gt;
dicomDatabase.setWeightForField('Patients', 'PatientsComments', 8)&lt;br /&gt;
# Change column name&lt;br /&gt;
dicomDatabase.setDisplayedNameForField('Series', 'DisplayedCount', 'Number of images')&lt;br /&gt;
# Customize table manager in DICOM browser&lt;br /&gt;
dicomTableManager = dicomBrowser.dicomTableManager()&lt;br /&gt;
dicomTableManager.selectionMode = qt.QAbstractItemView.SingleSelection&lt;br /&gt;
dicomTableManager.autoSelectSeries = False&lt;br /&gt;
&lt;br /&gt;
# Force database views update&lt;br /&gt;
dicomDatabase.closeDatabase()&lt;br /&gt;
dicomDatabase.openDatabase(dicomBrowser.database().databaseFilename)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Toolbar functions==&lt;br /&gt;
&lt;br /&gt;
*How to turn on slice intersections in the crosshair menu on the toolbar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
viewNodes = slicer.util.getNodesByClass('vtkMRMLSliceCompositeNode')&lt;br /&gt;
for viewNode in viewNodes:&lt;br /&gt;
  viewNode.SetSliceIntersectionVisibility(1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
How to find similar functions? For this one I searched for &amp;quot;slice intersections&amp;quot; text in the whole slicer source code, found that the function is implemented in Base\QTGUI\qSlicerViewersToolBar.cxx, then translated the qSlicerViewersToolBarPrivate::setSliceIntersectionVisible(bool visible) method to Python.&lt;br /&gt;
&lt;br /&gt;
==Switch to a different module==&lt;br /&gt;
&lt;br /&gt;
This utility function can be used to open a different module:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicer.util.selectModule('DICOM')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Manipulating objects in the slice viewer==&lt;br /&gt;
&lt;br /&gt;
*How to define/edit a circular region of interest in a slice viewer?&lt;br /&gt;
&lt;br /&gt;
Drop two markup points on a slice view and copy-paste the code below into the Python console. After this, as you move the markups you’ll see a circle following the markups.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Update the sphere from the fiducial points&lt;br /&gt;
def UpdateSphere(param1, param2):  &lt;br /&gt;
  import math&lt;br /&gt;
  centerPointCoord = [0.0, 0.0, 0.0]&lt;br /&gt;
  markups.GetNthFiducialPosition(0,centerPointCoord)&lt;br /&gt;
  circumferencePointCoord = [0.0, 0.0, 0.0]&lt;br /&gt;
  markups.GetNthFiducialPosition(1,circumferencePointCoord)&lt;br /&gt;
  sphere.SetCenter(centerPointCoord)&lt;br /&gt;
  radius=math.sqrt((centerPointCoord[0]-circumferencePointCoord[0])**2+(centerPointCoord[1]-circumferencePointCoord[1])**2+(centerPointCoord[2]-circumferencePointCoord[2])**2)&lt;br /&gt;
  sphere.SetRadius(radius)&lt;br /&gt;
  sphere.SetPhiResolution(30)&lt;br /&gt;
  sphere.SetThetaResolution(30)&lt;br /&gt;
  sphere.Update()&lt;br /&gt;
&lt;br /&gt;
# Get markup node from scene&lt;br /&gt;
markups=slicer.util.getNode('F')&lt;br /&gt;
sphere = vtk.vtkSphereSource()&lt;br /&gt;
UpdateSphere(0,0)&lt;br /&gt;
 &lt;br /&gt;
# Create model node and add to scene&lt;br /&gt;
modelsLogic = slicer.modules.models.logic()&lt;br /&gt;
model = modelsLogic.AddModel(sphere.GetOutput())&lt;br /&gt;
model.GetDisplayNode().SetSliceIntersectionVisibility(True)&lt;br /&gt;
model.GetDisplayNode().SetSliceIntersectionThickness(3)&lt;br /&gt;
model.GetDisplayNode().SetColor(1,1,0)&lt;br /&gt;
 &lt;br /&gt;
# Call UpdateSphere whenever the fiducials are changed&lt;br /&gt;
markups.AddObserver(slicer.vtkMRMLMarkupsNode.PointModifiedEvent, UpdateSphere, 2)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Measure angle between two slice planes==&lt;br /&gt;
&lt;br /&gt;
Measure angle between red and yellow slice nodes. Whenever any of the slice nodes are moved, the updated angle is printed on the console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sliceNodeIds = ['vtkMRMLSliceNodeRed', 'vtkMRMLSliceNodeYellow']&lt;br /&gt;
&lt;br /&gt;
# Print angles between slice nodes&lt;br /&gt;
def ShowAngle(unused1=None, unused2=None):&lt;br /&gt;
    sliceNormalVector = []&lt;br /&gt;
    for sliceNodeId in sliceNodeIds:&lt;br /&gt;
        sliceToRAS = slicer.mrmlScene.GetNodeByID(sliceNodeId).GetSliceToRAS()&lt;br /&gt;
        sliceNormalVector.append([sliceToRAS.GetElement(0,2), sliceToRAS.GetElement(1,2), sliceToRAS.GetElement(2,2)])&lt;br /&gt;
    angleRad = vtk.vtkMath.AngleBetweenVectors(sliceNormalVector[0], sliceNormalVector[1])&lt;br /&gt;
    angleDeg = vtk.vtkMath.DegreesFromRadians(angleRad)&lt;br /&gt;
    print('Angle between slice planes = {0:0.3f}'.format(angleDeg))&lt;br /&gt;
&lt;br /&gt;
# Observe slice node changes&lt;br /&gt;
for sliceNodeId in sliceNodeIds:&lt;br /&gt;
    slicer.mrmlScene.GetNodeByID(sliceNodeId).AddObserver(vtk.vtkCommand.ModifiedEvent, ShowAngle)&lt;br /&gt;
&lt;br /&gt;
# Print current angle&lt;br /&gt;
ShowAngle()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Measure angle between two markup planes==&lt;br /&gt;
&lt;br /&gt;
Measure angle between two markup plane nodes. Whenever any of the plane nodes are moved, the updated angle is printed on the console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
planeNodeNames = ['P', 'P_1']&lt;br /&gt;
&lt;br /&gt;
# Print angles between slice nodes&lt;br /&gt;
def ShowAngle(unused1=None, unused2=None):&lt;br /&gt;
    planeNormalVectors = []&lt;br /&gt;
    for planeNodeName in planeNodeNames:&lt;br /&gt;
        planeNode = slicer.util.getFirstNodeByClassByName('vtkMRMLMarkupsPlaneNode', planeNodeName)&lt;br /&gt;
        planeNormalVector = [0.0, 0.0, 0.0]&lt;br /&gt;
        planeNode.GetNormalWorld(planeNormalVector)&lt;br /&gt;
        planeNormalVectors.append(planeNormalVector)&lt;br /&gt;
    angleRad = vtk.vtkMath.AngleBetweenVectors(planeNormalVectors[0], planeNormalVectors[1])&lt;br /&gt;
    angleDeg = vtk.vtkMath.DegreesFromRadians(angleRad)&lt;br /&gt;
    print('Angle between planes {0} and {1} = {2:0.3f}'.format(planeNodeNames[0], planeNodeNames[1], angleDeg))&lt;br /&gt;
&lt;br /&gt;
# Observe plane node changes&lt;br /&gt;
for planeNodeName in planeNodeNames:&lt;br /&gt;
    planeNode = slicer.util.getFirstNodeByClassByName('vtkMRMLMarkupsPlaneNode', planeNodeName)&lt;br /&gt;
    planeNode.AddObserver(slicer.vtkMRMLMarkupsPlaneNode.PointModifiedEvent, ShowAngle)&lt;br /&gt;
&lt;br /&gt;
# Print current angle&lt;br /&gt;
ShowAngle()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Measure angle between two markup lines==&lt;br /&gt;
&lt;br /&gt;
Measure angle between two markup line nodes. Whenever either line is moved, the updated angle is printed on the console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lineNodeNames = ['L', 'L_1']&lt;br /&gt;
&lt;br /&gt;
# Print angles between slice nodes&lt;br /&gt;
def ShowAngle(unused1=None, unused2=None):&lt;br /&gt;
    import numpy as np&lt;br /&gt;
    lineDirectionVectors = []&lt;br /&gt;
    for lineNodeName in lineNodeNames:&lt;br /&gt;
        lineNode = slicer.util.getFirstNodeByClassByName('vtkMRMLMarkupsLineNode', lineNodeName)&lt;br /&gt;
        lineStartPos = np.zeros(3)&lt;br /&gt;
        lineEndPos = np.zeros(3)&lt;br /&gt;
        lineNode.GetNthControlPointPositionWorld(0, lineStartPos)&lt;br /&gt;
        lineNode.GetNthControlPointPositionWorld(1, lineEndPos)&lt;br /&gt;
        lineDirectionVector = (lineEndPos-lineStartPos)/np.linalg.norm(lineEndPos-lineStartPos)&lt;br /&gt;
        lineDirectionVectors.append(lineDirectionVector)&lt;br /&gt;
    angleRad = vtk.vtkMath.AngleBetweenVectors(lineDirectionVectors[0], lineDirectionVectors[1])&lt;br /&gt;
    angleDeg = vtk.vtkMath.DegreesFromRadians(angleRad)&lt;br /&gt;
    print('Angle between lines {0} and {1} = {2:0.3f}'.format(lineNodeNames[0], lineNodeNames[1], angleDeg))&lt;br /&gt;
&lt;br /&gt;
# Observe line node changes&lt;br /&gt;
for lineNodeName in lineNodeNames:&lt;br /&gt;
    lineNode = slicer.util.getFirstNodeByClassByName('vtkMRMLMarkupsLineNode', lineNodeName)&lt;br /&gt;
    lineNode.AddObserver(slicer.vtkMRMLMarkupsLineNode.PointModifiedEvent, ShowAngle)&lt;br /&gt;
&lt;br /&gt;
# Print current angle&lt;br /&gt;
ShowAngle()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Set slice position and orientation from 3 markup fiducials==&lt;br /&gt;
&lt;br /&gt;
Drop 3 markup points in the scene and copy-paste the code below into the Python console. After this, as you move the markups you’ll see the red slice view position and orientation will be set to make it fit to the 3 points.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Update plane from fiducial points&lt;br /&gt;
def UpdateSlicePlane(param1=None, param2=None):&lt;br /&gt;
  # Get point positions as numpy array&lt;br /&gt;
  import numpy as np&lt;br /&gt;
  nOfFiduciallPoints = markups.GetNumberOfFiducials()&lt;br /&gt;
  if nOfFiduciallPoints &amp;lt; 3:&lt;br /&gt;
    return  # not enough points&lt;br /&gt;
  points = np.zeros([3,nOfFiduciallPoints])&lt;br /&gt;
  for i in range(0, nOfFiduciallPoints):&lt;br /&gt;
    markups.GetNthFiducialPosition(i, points[:,i])&lt;br /&gt;
  # Compute plane position and normal&lt;br /&gt;
  planePosition = points.mean(axis=1)&lt;br /&gt;
  planeNormal = np.cross(points[:,1] - points[:,0], points[:,2] - points[:,0])&lt;br /&gt;
  planeX = points[:,1] - points[:,0]&lt;br /&gt;
  sliceNode.SetSliceToRASByNTP(planeNormal[0], planeNormal[1], planeNormal[2],&lt;br /&gt;
    planeX[0], planeX[1], planeX[2],&lt;br /&gt;
    planePosition[0], planePosition[1], planePosition[2], 0)&lt;br /&gt;
&lt;br /&gt;
# Get markup node from scene&lt;br /&gt;
sliceNode = slicer.app.layoutManager().sliceWidget('Red').mrmlSliceNode()&lt;br /&gt;
markups = slicer.util.getNode('F')&lt;br /&gt;
&lt;br /&gt;
# Update slice plane manually&lt;br /&gt;
UpdateSlicePlane()&lt;br /&gt;
&lt;br /&gt;
# Update slice plane automatically whenever points are changed&lt;br /&gt;
markupObservation = [markups, markups.AddObserver(slicer.vtkMRMLMarkupsNode.PointModifiedEvent, UpdateSlicePlane, 2)]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To stop automatic updates, run this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
markupObservation[0].RemoveObserver(markupObservation[1])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Set slice position and orientation from a normal vector and position==&lt;br /&gt;
&lt;br /&gt;
This code snippet shows how to display a slice view defined by a normal vector and position in an anatomically sensible way: rotating slice view so that &amp;quot;up&amp;quot; direction (or &amp;quot;right&amp;quot; direction) is towards an anatomical axis.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def setSlicePoseFromSliceNormalAndPosition(sliceNode, sliceNormal, slicePosition, defaultViewUpDirection=None, backupViewRightDirection=None):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Set slice pose from the provided plane normal and position. View up direction is determined automatically,&lt;br /&gt;
    to make view up point towards defaultViewUpDirection.&lt;br /&gt;
    :param defaultViewUpDirection Slice view will be spinned in-plane to match point approximately this up direction. Default: patient superior.&lt;br /&gt;
    :param backupViewRightDirection Slice view will be spinned in-plane to match point approximately this right direction&lt;br /&gt;
        if defaultViewUpDirection is too similar to sliceNormal. Default: patient left.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    # Fix up input directions&lt;br /&gt;
    if defaultViewUpDirection is None:&lt;br /&gt;
        defaultViewUpDirection = [0,0,1]&lt;br /&gt;
    if backupViewRightDirection is None:&lt;br /&gt;
        backupViewRightDirection = [-1,0,0]&lt;br /&gt;
    if sliceNormal[1]&amp;gt;=0:&lt;br /&gt;
        sliceNormalStandardized = sliceNormal&lt;br /&gt;
    else:&lt;br /&gt;
        sliceNormalStandardized = [-sliceNormal[0], -sliceNormal[1], -sliceNormal[2]]&lt;br /&gt;
    # Compute slice axes&lt;br /&gt;
    sliceNormalViewUpAngle = vtk.vtkMath.AngleBetweenVectors(sliceNormalStandardized, defaultViewUpDirection)&lt;br /&gt;
    angleTooSmallThresholdRad = 0.25 # about 15 degrees&lt;br /&gt;
    if sliceNormalViewUpAngle &amp;gt; angleTooSmallThresholdRad and sliceNormalViewUpAngle &amp;lt; vtk.vtkMath.Pi() - angleTooSmallThresholdRad:&lt;br /&gt;
        viewUpDirection = defaultViewUpDirection&lt;br /&gt;
        sliceAxisY = viewUpDirection&lt;br /&gt;
        sliceAxisX = [0, 0, 0]&lt;br /&gt;
        vtk.vtkMath.Cross(sliceAxisY, sliceNormalStandardized, sliceAxisX)&lt;br /&gt;
    else:&lt;br /&gt;
        sliceAxisX = backupViewRightDirection&lt;br /&gt;
    # Set slice axes&lt;br /&gt;
    sliceNode.SetSliceToRASByNTP(sliceNormalStandardized[0], sliceNormalStandardized[1], sliceNormalStandardized[2],&lt;br /&gt;
        sliceAxisX[0], sliceAxisX[1], sliceAxisX[2],&lt;br /&gt;
        slicePosition[0], slicePosition[1], slicePosition[2], 0)&lt;br /&gt;
&lt;br /&gt;
# Example usage:&lt;br /&gt;
sliceNode = getNode('vtkMRMLSliceNodeRed')&lt;br /&gt;
transformNode = getNode('Transform_3')&lt;br /&gt;
transformMatrix = vtk.vtkMatrix4x4()&lt;br /&gt;
transformNode.GetMatrixTransformToParent(transformMatrix)&lt;br /&gt;
sliceNormal = [transformMatrix.GetElement(0,2), transformMatrix.GetElement(1,2), transformMatrix.GetElement(2,2)]&lt;br /&gt;
slicePosition = [transformMatrix.GetElement(0,3), transformMatrix.GetElement(1,3), transformMatrix.GetElement(2,3)]&lt;br /&gt;
setSlicePoseFromSliceNormalAndPosition(sliceNode, sliceNormal, slicePosition)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Switching to markup fiducial placement mode==&lt;br /&gt;
&lt;br /&gt;
To activate a fiducial placement mode, both interaction mode has to be set and a fiducial node has to be selected:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
interactionNode = slicer.app.applicationLogic().GetInteractionNode()&lt;br /&gt;
selectionNode = slicer.app.applicationLogic().GetSelectionNode()&lt;br /&gt;
selectionNode.SetReferenceActivePlaceNodeClassName(&amp;quot;vtkMRMLMarkupsFiducialNode&amp;quot;)&lt;br /&gt;
fiducialNode = slicer.vtkMRMLMarkupsFiducialNode()&lt;br /&gt;
slicer.mrmlScene.AddNode(fiducialNode)&lt;br /&gt;
fiducialNode.CreateDefaultDisplayNodes() &lt;br /&gt;
selectionNode.SetActivePlaceNodeID(fiducialNode.GetID())&lt;br /&gt;
interactionNode.SetCurrentInteractionMode(interactionNode.Place)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively, ''qSlicerMarkupsPlaceWidget'' widget can be used to initiate markup placement:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Temporary markups node&lt;br /&gt;
markupsNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLMarkupsFiducialNode&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def placementModeChanged(active):&lt;br /&gt;
  print(&amp;quot;Placement: &amp;quot; +(&amp;quot;active&amp;quot; if active else &amp;quot;inactive&amp;quot;))&lt;br /&gt;
  # You can inspect what is in the markups node here, delete the temporary markup node, etc.&lt;br /&gt;
&lt;br /&gt;
# Create and set up widget that contains a single &amp;quot;place markup&amp;quot; button. The widget can be placed in the module GUI.&lt;br /&gt;
placeWidget = slicer.qSlicerMarkupsPlaceWidget()&lt;br /&gt;
placeWidget.setMRMLScene(slicer.mrmlScene)&lt;br /&gt;
placeWidget.setCurrentNode(markupsNode)&lt;br /&gt;
placeWidget.buttonsVisible=False&lt;br /&gt;
placeWidget.placeButton().show()&lt;br /&gt;
placeWidget.connect('activeMarkupsFiducialPlaceModeChanged(bool)', placementModeChanged)&lt;br /&gt;
placeWidget.show()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Change markup fiducial display properties==&lt;br /&gt;
&lt;br /&gt;
Display properties are stored in display node(s) associated with the fiducial node.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fiducialNode = getNode('F')&lt;br /&gt;
fiducialDisplayNode = fiducialNode.GetDisplayNode()&lt;br /&gt;
fiducialDisplayNode.SetVisibility(False) # Hide all points&lt;br /&gt;
fiducialDisplayNode.SetVisibility(True) # Show all points&lt;br /&gt;
fiducialDisplayNode.SetSelectedColor(1,1,0) # Set color to yellow&lt;br /&gt;
fiducialDisplayNode.SetViewNodeIDs([&amp;quot;vtkMRMLSliceNodeRed&amp;quot;, &amp;quot;vtkMRMLViewNode1&amp;quot;]) # Only show in red slice view and first 3D view&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get a notification if a markup point position is modified==&lt;br /&gt;
&lt;br /&gt;
Event management of Slicer-4.11 version is still subject to change. The example below shows how point manipulation can be observed now.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def onMarkupChanged(caller,event):&lt;br /&gt;
    markupsNode = caller&lt;br /&gt;
    sliceView = markupsNode.GetAttribute('Markups.MovingInSliceView')&lt;br /&gt;
    movingMarkupIndex = markupsNode.GetDisplayNode().GetActiveControlPoint()&lt;br /&gt;
    if movingMarkupIndex &amp;gt;= 0:&lt;br /&gt;
        pos = [0,0,0]&lt;br /&gt;
        markupsNode.GetNthFiducialPosition(movingMarkupIndex, pos)&lt;br /&gt;
        isPreview = markupsNode.GetNthControlPointPositionStatus(movingMarkupIndex) == slicer.vtkMRMLMarkupsNode.PositionPreview&lt;br /&gt;
        if isPreview:&lt;br /&gt;
            logging.info(&amp;quot;Point {0} is previewed at {1} in slice view {2}&amp;quot;.format(movingMarkupIndex, pos, sliceView))&lt;br /&gt;
        else:&lt;br /&gt;
            logging.info(&amp;quot;Point {0} was moved {1} in slice view {2}&amp;quot;.format(movingMarkupIndex, pos, sliceView))&lt;br /&gt;
    else:&lt;br /&gt;
        logging.info(&amp;quot;Points modified: slice view = {0}&amp;quot;.format(sliceView))&lt;br /&gt;
&lt;br /&gt;
def onMarkupStartInteraction(caller, event):&lt;br /&gt;
    markupsNode = caller&lt;br /&gt;
    sliceView = markupsNode.GetAttribute('Markups.MovingInSliceView')&lt;br /&gt;
    movingMarkupIndex = markupsNode.GetDisplayNode().GetActiveControlPoint()    &lt;br /&gt;
    logging.info(&amp;quot;Start interaction: point ID = {0}, slice view = {1}&amp;quot;.format(movingMarkupIndex, sliceView))&lt;br /&gt;
&lt;br /&gt;
def onMarkupEndInteraction(caller, event):&lt;br /&gt;
    markupsNode = caller&lt;br /&gt;
    sliceView = markupsNode.GetAttribute('Markups.MovingInSliceView')&lt;br /&gt;
    movingMarkupIndex = markupsNode.GetDisplayNode().GetActiveControlPoint()&lt;br /&gt;
    logging.info(&amp;quot;End interaction: point ID = {0}, slice view = {1}&amp;quot;.format(movingMarkupIndex, sliceView))&lt;br /&gt;
&lt;br /&gt;
markupsNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLMarkupsFiducialNode&amp;quot;)&lt;br /&gt;
markupsNode.CreateDefaultDisplayNodes()&lt;br /&gt;
markupsNode.AddFiducial(0,0,0)&lt;br /&gt;
markupsNode.AddObserver(slicer.vtkMRMLMarkupsNode.PointModifiedEvent, onMarkupChanged)&lt;br /&gt;
markupsNode.AddObserver(slicer.vtkMRMLMarkupsNode.PointStartInteractionEvent, onMarkupStartInteraction)&lt;br /&gt;
markupsNode.AddObserver(slicer.vtkMRMLMarkupsNode.PointEndInteractionEvent, onMarkupEndInteraction)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get a notification if a transform is modified==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def onTransformNodeModified(transformNode, unusedArg2=None, unusedArg3=None):&lt;br /&gt;
  transformMatrix = vtk.vtkMatrix4x4()&lt;br /&gt;
  transformNode.GetMatrixTransformToWorld(transformMatrix)&lt;br /&gt;
  print(&amp;quot;Position: [{0}, {1}, {2}]&amp;quot;.format(transformMatrix.GetElement(0,3), transformMatrix.GetElement(1,3), transformMatrix.GetElement(2,3)))&lt;br /&gt;
&lt;br /&gt;
transformNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLTransformNode&amp;quot;)&lt;br /&gt;
transformNode.AddObserver(slicer.vtkMRMLTransformNode.TransformModifiedEvent, onTransformNodeModified)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Rotate a node around a specified point==&lt;br /&gt;
&lt;br /&gt;
Set up the scene:&lt;br /&gt;
&lt;br /&gt;
*Add a markup fiducial node (centerOfRotationMarkupsNode) with a single point to specify center of rotation.&lt;br /&gt;
*Add a rotation transform (rotationTransformNode) that will be edited in Transforms module to specify rotation angles.&lt;br /&gt;
*Add a transform (finalTransformNode) and apply it (not harden) to those nodes (images, models, etc.) that you want to rotate around the center of rotation point.&lt;br /&gt;
&lt;br /&gt;
Then run the script below, go to Transforms module, select rotationTransformNode, and move rotation sliders.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# This markups fiducial node specifies the center of rotation&lt;br /&gt;
centerOfRotationMarkupsNode = getNode('F')&lt;br /&gt;
# This transform can be  edited in Transforms module&lt;br /&gt;
rotationTransformNode = getNode('LinearTransform_3')&lt;br /&gt;
# This transform has to be applied to the image, model, etc.&lt;br /&gt;
finalTransformNode = getNode('LinearTransform_4')&lt;br /&gt;
&lt;br /&gt;
def updateFinalTransform(unusedArg1=None, unusedArg2=None, unusedArg3=None):&lt;br /&gt;
    rotationMatrix = vtk.vtkMatrix4x4()&lt;br /&gt;
    rotationTransformNode.GetMatrixTransformToParent(rotationMatrix)&lt;br /&gt;
    rotationCenterPointCoord = [0.0, 0.0, 0.0]&lt;br /&gt;
    centerOfRotationMarkupsNode.GetNthControlPointPositionWorld(0, rotationCenterPointCoord)&lt;br /&gt;
    finalTransform = vtk.vtkTransform()&lt;br /&gt;
    finalTransform.Translate(rotationCenterPointCoord)&lt;br /&gt;
    finalTransform.Concatenate(rotationMatrix)&lt;br /&gt;
    finalTransform.Translate(-rotationCenterPointCoord[0], -rotationCenterPointCoord[1], -rotationCenterPointCoord[2])&lt;br /&gt;
    finalTransformNode.SetAndObserveMatrixTransformToParent(finalTransform.GetMatrix())&lt;br /&gt;
&lt;br /&gt;
# Manual initial update&lt;br /&gt;
updateFinalTransform()&lt;br /&gt;
&lt;br /&gt;
# Automatic update when point is moved or transform is modified&lt;br /&gt;
rotationTransformNodeObserver = rotationTransformNode.AddObserver(slicer.vtkMRMLTransformNode.TransformModifiedEvent, updateFinalTransform)&lt;br /&gt;
centerOfRotationMarkupsNodeObserver = centerOfRotationMarkupsNode.AddObserver(slicer.vtkMRMLMarkupsNode.PointModifiedEvent, updateFinalTransform)&lt;br /&gt;
&lt;br /&gt;
# Execute these lines to stop automatic updates:&lt;br /&gt;
# rotationTransformNode.RemoveObserver(rotationTransformNodeObserver)&lt;br /&gt;
# centerOfRotationMarkupsNode.RemoveObserver(centerOfRotationMarkupsNodeObserver)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Rotate a node around a specified line==&lt;br /&gt;
&lt;br /&gt;
Set up the scene:&lt;br /&gt;
&lt;br /&gt;
*Add a markup line node (rotationAxisMarkupsNode) with 2 points to specify rotation axis.&lt;br /&gt;
*Add a rotation transform (rotationTransformNode) that will be edited in Transforms module to specify rotation angle.&lt;br /&gt;
*Add a transform (finalTransformNode) and apply it (not harden) to those nodes (images, models, etc.) that you want to rotate around the line.&lt;br /&gt;
&lt;br /&gt;
Then run the script below, go to Transforms module, select rotationTransformNode, and move Edit / Rotation / IS slider.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# This markups fiducial node specifies the center of rotation&lt;br /&gt;
rotationAxisMarkupsNode = getNode('L')&lt;br /&gt;
# This transform can be edited in Transforms module (Edit / Rotation / IS slider)&lt;br /&gt;
rotationTransformNode = getNode('LinearTransform_3')&lt;br /&gt;
# This transform has to be applied to the image, model, etc.&lt;br /&gt;
finalTransformNode = getNode('LinearTransform_4')&lt;br /&gt;
&lt;br /&gt;
def updateFinalTransform(unusedArg1=None, unusedArg2=None, unusedArg3=None):&lt;br /&gt;
    import numpy as np&lt;br /&gt;
    rotationAxisPoint1_World = np.zeros(3)&lt;br /&gt;
    rotationAxisMarkupsNode.GetNthControlPointPositionWorld(0, rotationAxisPoint1_World)&lt;br /&gt;
    rotationAxisPoint2_World = np.zeros(3)&lt;br /&gt;
    rotationAxisMarkupsNode.GetNthControlPointPositionWorld(1, rotationAxisPoint2_World)&lt;br /&gt;
    axisDirectionZ_World = rotationAxisPoint2_World-rotationAxisPoint1_World&lt;br /&gt;
    axisDirectionZ_World = axisDirectionZ_World/np.linalg.norm(axisDirectionZ_World)&lt;br /&gt;
    # Get transformation between world coordinate system and rotation axis aligned coordinate system&lt;br /&gt;
    worldToRotationAxisTransform = vtk.vtkMatrix4x4()&lt;br /&gt;
    p=vtk.vtkPlaneSource()&lt;br /&gt;
    p.SetNormal(axisDirectionZ_World)&lt;br /&gt;
    axisOrigin = np.array(p.GetOrigin())&lt;br /&gt;
    axisDirectionX_World = np.array(p.GetPoint1())-axisOrigin&lt;br /&gt;
    axisDirectionY_World = np.array(p.GetPoint2())-axisOrigin&lt;br /&gt;
    rotationAxisToWorldTransform = np.row_stack((np.column_stack((axisDirectionX_World, axisDirectionY_World, axisDirectionZ_World, rotationAxisPoint1_World)), (0, 0, 0, 1)))&lt;br /&gt;
    rotationAxisToWorldTransformMatrix = slicer.util.vtkMatrixFromArray(rotationAxisToWorldTransform)&lt;br /&gt;
    worldToRotationAxisTransformMatrix = slicer.util.vtkMatrixFromArray(np.linalg.inv(rotationAxisToWorldTransform))&lt;br /&gt;
    # Compute transformation chain&lt;br /&gt;
    rotationMatrix = vtk.vtkMatrix4x4()&lt;br /&gt;
    rotationTransformNode.GetMatrixTransformToParent(rotationMatrix)&lt;br /&gt;
    finalTransform = vtk.vtkTransform()&lt;br /&gt;
    finalTransform.Concatenate(rotationAxisToWorldTransformMatrix)&lt;br /&gt;
    finalTransform.Concatenate(rotationMatrix)&lt;br /&gt;
    finalTransform.Concatenate(worldToRotationAxisTransformMatrix)&lt;br /&gt;
    finalTransformNode.SetAndObserveMatrixTransformToParent(finalTransform.GetMatrix())&lt;br /&gt;
&lt;br /&gt;
# Manual initial update&lt;br /&gt;
updateFinalTransform()&lt;br /&gt;
&lt;br /&gt;
# Automatic update when point is moved or transform is modified&lt;br /&gt;
rotationTransformNodeObserver = rotationTransformNode.AddObserver(slicer.vtkMRMLTransformNode.TransformModifiedEvent, updateFinalTransform)&lt;br /&gt;
rotationAxisMarkupsNodeObserver = rotationAxisMarkupsNode.AddObserver(slicer.vtkMRMLMarkupsNode.PointModifiedEvent, updateFinalTransform)&lt;br /&gt;
&lt;br /&gt;
# Execute these lines to stop automatic updates:&lt;br /&gt;
# rotationTransformNode.RemoveObserver(rotationTransformNodeObserver)&lt;br /&gt;
# rotationAxisMarkupsNode.RemoveObserver(rotationAxisMarkupsNodeObserver)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Show a context menu when a markup point is clicked in a slice or 3D view==&lt;br /&gt;
&lt;br /&gt;
Subject hierarchy plugins can offer actions in the view context menu when right-clicking objects that support such picking (such as Markups fiducials). A comprehensive [https://github.com/Slicer/Slicer/blob/master/Modules/Loadable/Annotations/SubjectHierarchyPlugins/AnnotationsSubjectHierarchyPlugin.py subject hierarchy plugin example] is for the Annotations module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  def viewContextMenuActions(self):&lt;br /&gt;
    return [self.doSomething]&lt;br /&gt;
&lt;br /&gt;
  def showViewContextMenuActionsForItem(self, itemID, eventData):&lt;br /&gt;
    if not itemID:&lt;br /&gt;
      logging.error('Invalid item for view context menu ' + str(itemID))&lt;br /&gt;
      return&lt;br /&gt;
&lt;br /&gt;
    pluginHandlerSingleton = slicer.qSlicerSubjectHierarchyPluginHandler.instance()&lt;br /&gt;
    shNode = pluginHandlerSingleton.subjectHierarchyNode()&lt;br /&gt;
    if shNode is None:&lt;br /&gt;
      logging.error('Failed to access subject hierarchy node')&lt;br /&gt;
      return&lt;br /&gt;
&lt;br /&gt;
    associatedNode = shNode.GetItemDataNode(itemID)&lt;br /&gt;
    if not associatedNode or not associatedNode.IsA(&amp;quot;vtkMRMLMarkupsNode&amp;quot;):&lt;br /&gt;
      return&lt;br /&gt;
&lt;br /&gt;
    self.viewMenuEventData = eventData&lt;br /&gt;
    self.viewMenuEventData['NodeID'] = associatedNode.GetID()&lt;br /&gt;
&lt;br /&gt;
  def onDoSomething(self):&lt;br /&gt;
    nodeID = self.viewMenuEventData['NodeID']&lt;br /&gt;
    markupsNode = slicer.mrmlScene.GetNodeByID(nodeID)&lt;br /&gt;
    if markupsNode is None or not markupsNode.IsA(&amp;quot;vtkMRMLMarkupsNode&amp;quot;):&lt;br /&gt;
      logging.error('Failed to get fiducial markups node by ID ' + str(nodeID))&lt;br /&gt;
      return&lt;br /&gt;
&lt;br /&gt;
    componentIndex = self.viewMenuEventData['ComponentIndex']&lt;br /&gt;
    markupID = markupsNode.GetNthMarkupID(componentIndex)&lt;br /&gt;
    &lt;br /&gt;
    # Do something with the clicked fiducial&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Write markup positions to JSON file==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
markupNode = getNode('F')&lt;br /&gt;
outputFileName = 'c:/tmp/test.json'&lt;br /&gt;
&lt;br /&gt;
# Get markup positions&lt;br /&gt;
data = []&lt;br /&gt;
for fidIndex in range(markupNode.GetNumberOfFiducials()):&lt;br /&gt;
  coords=[0,0,0]&lt;br /&gt;
  markupNode.GetNthFiducialPosition(fidIndex,coords)&lt;br /&gt;
  data.append({'label': markupNode.GetNthFiducialLabel(), 'position': coords})&lt;br /&gt;
&lt;br /&gt;
import json&lt;br /&gt;
with open(outputFileName, 'w') as outfile:&lt;br /&gt;
  json.dump(data, outfile)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Write annotation ROI to JSON file==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
roiNode = getNode('R')&lt;br /&gt;
outputFileName = &amp;quot;c:/tmp/test.json&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Get annotation ROI data&lt;br /&gt;
center = [0,0,0]&lt;br /&gt;
radius = [0,0,0]&lt;br /&gt;
roiNode.GetControlPointWorldCoordinates(0, center)&lt;br /&gt;
roiNode.GetControlPointWorldCoordinates(1, radius)&lt;br /&gt;
data = {'center': radius, 'radius': radius}&lt;br /&gt;
&lt;br /&gt;
# Write to json file&lt;br /&gt;
import json&lt;br /&gt;
with open(outputFileName, 'w') as outfile:&lt;br /&gt;
  json.dump(data, outfile)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Show a simple surface mesh as a model node==&lt;br /&gt;
&lt;br /&gt;
This example shows how to display a simple surface mesh (a box, created by a VTK source filter) as a model node.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Create and set up polydata source&lt;br /&gt;
box = vtk.vtkCubeSource()&lt;br /&gt;
box.SetXLength(30)&lt;br /&gt;
box.SetYLength(20)&lt;br /&gt;
box.SetZLength(15)&lt;br /&gt;
box.SetCenter(10,20,5)&lt;br /&gt;
&lt;br /&gt;
# Create a model node that displays output of the source&lt;br /&gt;
boxNode = slicer.modules.models.logic().AddModel(box.GetOutputPort())&lt;br /&gt;
&lt;br /&gt;
# Adjust display properties&lt;br /&gt;
boxNode.GetDisplayNode().SetColor(1,0,0)&lt;br /&gt;
boxNode.GetDisplayNode().SetOpacity(0.8)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Measure distance of points from surface==&lt;br /&gt;
&lt;br /&gt;
This example computes closest distance of points (markups fiducial 'F') from a surface (model node 'mymodel') and writes results into a table.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
markupsNode = getNode('F')&lt;br /&gt;
modelNode = getNode('mymodel')&lt;br /&gt;
&lt;br /&gt;
# Transform model polydata to world coordinate system&lt;br /&gt;
if modelNode.GetParentTransformNode():&lt;br /&gt;
    transformModelToWorld = vtk.vtkGeneralTransform()&lt;br /&gt;
    slicer.vtkMRMLTransformNode.GetTransformBetweenNodes(modelNode.GetParentTransformNode(), None, transformModelToWorld)&lt;br /&gt;
    polyTransformToWorld = vtk.vtkTransformPolyDataFilter()&lt;br /&gt;
    polyTransformToWorld.SetTransform(transformModelToWorld)&lt;br /&gt;
    polyTransformToWorld.SetInputData(modelNode.GetPolyData())&lt;br /&gt;
    polyTransformToWorld.Update()&lt;br /&gt;
    surface_World = polyTransformToWorld.GetOutput()&lt;br /&gt;
else:&lt;br /&gt;
    surface_World = modelNode.GetPolyData()&lt;br /&gt;
&lt;br /&gt;
# Create arrays to store results&lt;br /&gt;
indexCol = vtk.vtkIntArray()&lt;br /&gt;
indexCol.SetName(&amp;quot;Index&amp;quot;)&lt;br /&gt;
labelCol = vtk.vtkStringArray()&lt;br /&gt;
labelCol.SetName(&amp;quot;Name&amp;quot;)&lt;br /&gt;
distanceCol = vtk.vtkDoubleArray()&lt;br /&gt;
distanceCol.SetName(&amp;quot;Distance&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
distanceFilter = vtk.vtkImplicitPolyDataDistance()&lt;br /&gt;
distanceFilter.SetInput(surface_World);&lt;br /&gt;
nOfFiduciallPoints = markupsNode.GetNumberOfFiducials()&lt;br /&gt;
for i in range(0, nOfFiduciallPoints):&lt;br /&gt;
    point_World = [0,0,0]&lt;br /&gt;
    markupsNode.GetNthControlPointPositionWorld(i, point_World)&lt;br /&gt;
    closestPointOnSurface_World = [0,0,0]&lt;br /&gt;
    closestPointDistance = distanceFilter.EvaluateFunctionAndGetClosestPoint(point_World, closestPointOnSurface_World)&lt;br /&gt;
    indexCol.InsertNextValue(i)&lt;br /&gt;
    labelCol.InsertNextValue(markupsNode.GetNthControlPointLabel(i))&lt;br /&gt;
    distanceCol.InsertNextValue(closestPointDistance)&lt;br /&gt;
&lt;br /&gt;
# Create a table from result arrays&lt;br /&gt;
resultTableNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLTableNode&amp;quot;, &amp;quot;Points from surface distance&amp;quot;)&lt;br /&gt;
resultTableNode.AddColumn(indexCol)&lt;br /&gt;
resultTableNode.AddColumn(labelCol)&lt;br /&gt;
resultTableNode.AddColumn(distanceCol)&lt;br /&gt;
&lt;br /&gt;
# Show table in view layout&lt;br /&gt;
slicer.app.layoutManager().setLayout(slicer.vtkMRMLLayoutNode.SlicerLayoutFourUpTableView)&lt;br /&gt;
slicer.app.applicationLogic().GetSelectionNode().SetReferenceActiveTableID(resultTableNode.GetID())&lt;br /&gt;
slicer.app.applicationLogic().PropagateTableSelection()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Add a texture mapped plane to the scene as a model==&lt;br /&gt;
Note that model textures are not exposed in the GUI and are not saved in the scene&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Create model node&lt;br /&gt;
planeSource = vtk.vtkPlaneSource()&lt;br /&gt;
planeSource.SetOrigin(-50.0, -50.0, 0.0)&lt;br /&gt;
planeSource.SetPoint1(50.0, -50.0, 0.0)&lt;br /&gt;
planeSource.SetPoint2(-50.0, 50.0, 0.0)&lt;br /&gt;
model = slicer.modules.models.logic().AddModel(planeSource.GetOutputPort())&lt;br /&gt;
&lt;br /&gt;
# Tune display properties&lt;br /&gt;
modelDisplay = model.GetDisplayNode()&lt;br /&gt;
modelDisplay.SetColor(1,1,0) # yellow&lt;br /&gt;
modelDisplay.SetBackfaceCulling(0)&lt;br /&gt;
&lt;br /&gt;
# Add texture (just use image of an ellipsoid)&lt;br /&gt;
e = vtk.vtkImageEllipsoidSource()&lt;br /&gt;
modelDisplay.SetTextureImageDataConnection(e.GetOutputPort())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get scalar values at surface of a model==&lt;br /&gt;
&lt;br /&gt;
The following script allows getting selected scalar value at a selected position of a model. Position can be selected by moving the mouse while holding down Shift key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
modelNode = getNode('sphere')&lt;br /&gt;
modelPointValues = modelNode.GetPolyData().GetPointData().GetArray(&amp;quot;Normals&amp;quot;)&lt;br /&gt;
markupsNode = slicer.mrmlScene.GetFirstNodeByName('F')&lt;br /&gt;
&lt;br /&gt;
if not markupsNode:&lt;br /&gt;
  markupsNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLMarkupsFiducialNode&amp;quot;,&amp;quot;F&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
pointsLocator = vtk.vtkPointLocator() # could try using vtk.vtkStaticPointLocator() if need to optimize&lt;br /&gt;
pointsLocator.SetDataSet(modelNode.GetPolyData())&lt;br /&gt;
pointsLocator.BuildLocator()&lt;br /&gt;
&lt;br /&gt;
def onMouseMoved(observer,eventid):  &lt;br /&gt;
  ras=[0,0,0]&lt;br /&gt;
  crosshairNode.GetCursorPositionRAS(ras)&lt;br /&gt;
  if markupsNode.GetNumberOfFiducials() == 0:&lt;br /&gt;
    markupsNode.AddFiducial(*ras)&lt;br /&gt;
  else:&lt;br /&gt;
    markupsNode.SetNthFiducialPosition(0,*ras)&lt;br /&gt;
  closestPointId = pointsLocator.FindClosestPoint(ras)&lt;br /&gt;
  closestPointValue = modelPointValues.GetTuple(closestPointId)&lt;br /&gt;
  print(&amp;quot;RAS = &amp;quot; + repr(ras) + &amp;quot;    value = &amp;quot; + repr(closestPointValue))&lt;br /&gt;
&lt;br /&gt;
crosshairNode=slicer.util.getNode('Crosshair') &lt;br /&gt;
observationId = crosshairNode.AddObserver(slicer.vtkMRMLCrosshairNode.CursorPositionModifiedEvent, onMouseMoved)&lt;br /&gt;
&lt;br /&gt;
# To stop printing of values run this:&lt;br /&gt;
# crosshairNode.RemoveObserver(observationId)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Select cells of a model using markups fiducial points==&lt;br /&gt;
&lt;br /&gt;
The following script selects cells of a model node that are closest to positions of markups fiducial points.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Get input nodes&lt;br /&gt;
modelNode = slicer.util.getNode('Segment_1') # select cells in this model&lt;br /&gt;
markupsNode = slicer.util.getNode('F') # points will be selected at positions specified by this markups fiducial node&lt;br /&gt;
&lt;br /&gt;
# Create scalar array that will store selection state&lt;br /&gt;
cellScalars = modelNode.GetMesh().GetCellData()&lt;br /&gt;
selectionArray = cellScalars.GetArray('selection')&lt;br /&gt;
if not selectionArray:&lt;br /&gt;
    selectionArray = vtk.vtkIntArray()&lt;br /&gt;
    selectionArray.SetName('selection')&lt;br /&gt;
    selectionArray.SetNumberOfValues(modelNode.GetMesh().GetNumberOfCells())&lt;br /&gt;
    selectionArray.Fill(0)&lt;br /&gt;
    cellScalars.AddArray(selectionArray)&lt;br /&gt;
&lt;br /&gt;
# Set up coloring by selection array&lt;br /&gt;
modelNode.GetDisplayNode().SetActiveScalar(&amp;quot;selection&amp;quot;, vtk.vtkAssignAttribute.CELL_DATA)&lt;br /&gt;
modelNode.GetDisplayNode().SetAndObserveColorNodeID(&amp;quot;vtkMRMLColorTableNodeWarm1&amp;quot;)&lt;br /&gt;
modelNode.GetDisplayNode().SetScalarVisibility(True)&lt;br /&gt;
&lt;br /&gt;
# Initialize cell locator&lt;br /&gt;
cell = vtk.vtkCellLocator()&lt;br /&gt;
cell.SetDataSet(modelNode.GetMesh())&lt;br /&gt;
cell.BuildLocator()&lt;br /&gt;
&lt;br /&gt;
def onPointsModified(observer=None, eventid=None):&lt;br /&gt;
    global markupsNode, selectionArray&lt;br /&gt;
    selectionArray.Fill(0) # set all cells to non-selected by default&lt;br /&gt;
    markupPoints = slicer.util.arrayFromMarkupsControlPoints(markupsNode)&lt;br /&gt;
    closestPoint = [0.0, 0.0, 0.0]&lt;br /&gt;
    cellObj = vtk.vtkGenericCell()&lt;br /&gt;
    cellId = vtk.mutable(0)&lt;br /&gt;
    subId = vtk.mutable(0)&lt;br /&gt;
    dist2 = vtk.mutable(0.0)&lt;br /&gt;
    for markupPoint in markupPoints:&lt;br /&gt;
        cell.FindClosestPoint(markupPoint, closestPoint, cellObj, cellId, subId, dist2)&lt;br /&gt;
        closestCell = cellId.get()&lt;br /&gt;
        if closestCell &amp;gt;=0:&lt;br /&gt;
            selectionArray.SetValue(closestCell, 100) # set selected cell's scalar value to non-zero&lt;br /&gt;
    selectionArray.Modified()&lt;br /&gt;
&lt;br /&gt;
# Initial update&lt;br /&gt;
onPointsModified()&lt;br /&gt;
# Automatic update each time when a markup point is modified&lt;br /&gt;
markupsNodeObserverTag = markupsNode.AddObserver(slicer.vtkMRMLMarkupsFiducialNode.PointModifiedEvent, onPointsModified)&lt;br /&gt;
&lt;br /&gt;
# To stop updating selection, run this:&lt;br /&gt;
# markupsNode.RemoveObserver(markupsNodeObserverTag)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Load volume from .vti file==&lt;br /&gt;
&lt;br /&gt;
Slicer does not provide reader for VTK XML image data file format (as they are not commonly used for storing medical images and they cannot store image axis directions) but such files can be read by using this script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
reader=vtk.vtkXMLImageDataReader()&lt;br /&gt;
reader.SetFileName(&amp;quot;/path/to/file.vti&amp;quot;)&lt;br /&gt;
reader.Update()&lt;br /&gt;
imageData = reader.GetOutput()&lt;br /&gt;
spacing = imageData.GetSpacing()&lt;br /&gt;
origin = imageData.GetOrigin()&lt;br /&gt;
imageData.SetOrigin(0,0,0)&lt;br /&gt;
imageData.SetSpacing(1,1,1)&lt;br /&gt;
volumeNode=slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLScalarVolumeNode&amp;quot;)&lt;br /&gt;
volumeNode.SetAndObserveImageData(imageData)&lt;br /&gt;
volumeNode.SetSpacing(spacing)&lt;br /&gt;
volumeNode.SetOrigin(origin)&lt;br /&gt;
slicer.util.setSliceViewerLayers(volumeNode, fit=True)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Export entire scene as VRML==&lt;br /&gt;
&lt;br /&gt;
Save all surface meshes displayed in the scene (models, markups, etc). Solid colors and coloring by scalar is preserved. Textures are not supported.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
exporter = vtk.vtkVRMLExporter()&lt;br /&gt;
exporter.SetRenderWindow(slicer.app.layoutManager().threeDWidget(0).threeDView().renderWindow())&lt;br /&gt;
exporter.SetFileName('C:/tmp/something.wrl')&lt;br /&gt;
exporter.Write()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Export model to Blender, including color by scalar==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
modelNode = getNode(&amp;quot;Model&amp;quot;)&lt;br /&gt;
plyFilePath = &amp;quot;c:/tmp/model.ply&amp;quot;&lt;br /&gt;
&lt;br /&gt;
modelDisplayNode = modelNode.GetDisplayNode()&lt;br /&gt;
triangles = vtk.vtkTriangleFilter()&lt;br /&gt;
triangles.SetInputConnection(modelDisplayNode.GetOutputPolyDataConnection())&lt;br /&gt;
&lt;br /&gt;
plyWriter = vtk.vtkPLYWriter()&lt;br /&gt;
plyWriter.SetInputConnection(triangles.GetOutputPort())&lt;br /&gt;
lut = vtk.vtkLookupTable()&lt;br /&gt;
lut.DeepCopy(modelDisplayNode.GetColorNode().GetLookupTable())&lt;br /&gt;
lut.SetRange(modelDisplayNode.GetScalarRange())&lt;br /&gt;
plyWriter.SetLookupTable(lut)&lt;br /&gt;
plyWriter.SetArrayName(modelDisplayNode.GetActiveScalarName())&lt;br /&gt;
&lt;br /&gt;
plyWriter.SetFileName(plyFilePath)&lt;br /&gt;
plyWriter.Write()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Export a tract (FiberBundle) to Blender, including color==&lt;br /&gt;
&amp;lt;div id=&amp;quot;Export_a_fiber_tracts_to_Blender.2C_including_color&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Note: an interactive version of this script is now included in the [http://dmri.slicer.org/ SlicerDMRI extension] ([https://github.com/SlicerDMRI/SlicerDMRI/tree/master/Modules/Scripted/TractographyExportPLY module code]). &lt;br /&gt;
After installing SlicerDMRI, go to ''Modules -&amp;gt; Diffusion -&amp;gt; Import and Export -&amp;gt; Export tractography to PLY (mesh)''.&lt;br /&gt;
&lt;br /&gt;
The example below shows how to export a tractography &amp;quot;FiberBundleNode&amp;quot; to a PLY file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lineDisplayNode = getNode(&amp;quot;*LineDisplay*&amp;quot;)&lt;br /&gt;
plyFilePath = &amp;quot;/tmp/fibers.ply&amp;quot;&lt;br /&gt;
&lt;br /&gt;
tuber = vtk.vtkTubeFilter()&lt;br /&gt;
tuber.SetInputData(lineDisplayNode.GetOutputPolyData())&lt;br /&gt;
tuber.Update()&lt;br /&gt;
tubes = tuber.GetOutputDataObject(0)&lt;br /&gt;
scalars = tubes.GetPointData().GetArray(0)&lt;br /&gt;
scalars.SetName(&amp;quot;scalars&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
triangles = vtk.vtkTriangleFilter()&lt;br /&gt;
triangles.SetInputData(tubes)&lt;br /&gt;
triangles.Update()&lt;br /&gt;
&lt;br /&gt;
colorNode = lineDisplayNode.GetColorNode()&lt;br /&gt;
lookupTable = vtk.vtkLookupTable()&lt;br /&gt;
lookupTable.DeepCopy(colorNode.GetLookupTable())&lt;br /&gt;
lookupTable.SetTableRange(0,1)&lt;br /&gt;
&lt;br /&gt;
plyWriter = vtk.vtkPLYWriter()&lt;br /&gt;
plyWriter.SetInputData(triangles.GetOutput())&lt;br /&gt;
plyWriter.SetLookupTable(lookupTable)&lt;br /&gt;
plyWriter.SetArrayName(&amp;quot;scalars&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
plyWriter.SetFileName(plyFilePath)&lt;br /&gt;
plyWriter.Write()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Iterate over tract (FiberBundle) streamline points==&lt;br /&gt;
&lt;br /&gt;
This example shows how to access the points in each line of a FiberBundle as a numpy array (view).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from vtk.util.numpy_support import vtk_to_numpy&lt;br /&gt;
&lt;br /&gt;
fb = getNode(&amp;quot;FiberBundle_F&amp;quot;) # &amp;lt;- fill in node ID here&lt;br /&gt;
&lt;br /&gt;
# get point data as 1d array&lt;br /&gt;
points = slicer.util.arrayFromModelPoints(fb)&lt;br /&gt;
&lt;br /&gt;
# get line cell ids as 1d array&lt;br /&gt;
line_ids = vtk_to_numpy(fb.GetPolyData().GetLines().GetData())&lt;br /&gt;
&lt;br /&gt;
# VTK cell ids are stored as&lt;br /&gt;
#   [ N0 c0_id0 ... c0_id0&lt;br /&gt;
#     N1 c1_id0 ... c1_idN1 ]&lt;br /&gt;
# so we need to&lt;br /&gt;
# - read point count for each line (cell)&lt;br /&gt;
# - grab the ids in that range from `line_ids` array defined above&lt;br /&gt;
# - index the `points` array by those ids&lt;br /&gt;
cur_idx = 1&lt;br /&gt;
for _ in range(pd.GetLines().GetNumberOfCells()):&lt;br /&gt;
    # - read point count for this line (cell)&lt;br /&gt;
    count = lines[cur_idx - 1]&lt;br /&gt;
&lt;br /&gt;
    # - grab the ids in that range from `lines`&lt;br /&gt;
    index_array = line_ids[ cur_idx : cur_idx + count]&lt;br /&gt;
    # update to the next range &lt;br /&gt;
    cur_idx += count + 1&lt;br /&gt;
&lt;br /&gt;
    # - index the point array by those ids&lt;br /&gt;
    line_points = points[index_array]&lt;br /&gt;
&lt;br /&gt;
    # do work here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Clone a node==&lt;br /&gt;
&lt;br /&gt;
This example shows how to make a copy of any node that appears in Subject Hierarchy (in Data module).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Get a node from SampleData that we will clone&lt;br /&gt;
import SampleData&lt;br /&gt;
nodeToClone = SampleData.SampleDataLogic().downloadMRHead()&lt;br /&gt;
&lt;br /&gt;
# Clone the node&lt;br /&gt;
shNode = slicer.vtkMRMLSubjectHierarchyNode.GetSubjectHierarchyNode(slicer.mrmlScene)&lt;br /&gt;
itemIDToClone = shNode.GetItemByDataNode(nodeToClone)&lt;br /&gt;
clonedItemID = slicer.modules.subjecthierarchy.logic().CloneSubjectHierarchyItem(shNode, itemIDToClone)&lt;br /&gt;
clonedNode = shNode.GetItemDataNode(clonedItemID)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Clone a volume==&lt;br /&gt;
This example shows how to clone the MRHead sample volume, including its pixel data and display settings.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sourceVolumeNode = slicer.util.getNode('MRHead')&lt;br /&gt;
volumesLogic = slicer.modules.volumes.logic()&lt;br /&gt;
clonedVolumeNode = volumesLogic.CloneVolume(slicer.mrmlScene, sourceVolumeNode, 'Cloned volume')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Create a new volume==&lt;br /&gt;
This example shows how to create a new empty volume.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nodeName = &amp;quot;MyNewVolume&amp;quot;&lt;br /&gt;
imageSize = [512, 512, 512]&lt;br /&gt;
voxelType=vtk.VTK_UNSIGNED_CHAR&lt;br /&gt;
imageOrigin = [0.0, 0.0, 0.0]&lt;br /&gt;
imageSpacing = [1.0, 1.0, 1.0]&lt;br /&gt;
imageDirections = [[1,0,0], [0,1,0], [0,0,1]]&lt;br /&gt;
fillVoxelValue = 0&lt;br /&gt;
&lt;br /&gt;
# Create an empty image volume, filled with fillVoxelValue&lt;br /&gt;
imageData = vtk.vtkImageData()&lt;br /&gt;
imageData.SetDimensions(imageSize)&lt;br /&gt;
imageData.AllocateScalars(voxelType, 1)&lt;br /&gt;
imageData.GetPointData().GetScalars().Fill(fillVoxelValue)&lt;br /&gt;
# Create volume node&lt;br /&gt;
volumeNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLScalarVolumeNode&amp;quot;, nodeName)&lt;br /&gt;
volumeNode.SetOrigin(imageOrigin)&lt;br /&gt;
volumeNode.SetSpacing(imageSpacing)&lt;br /&gt;
volumeNode.SetIJKToRASDirections(imageDirections)&lt;br /&gt;
volumeNode.SetAndObserveImageData(imageData)&lt;br /&gt;
volumeNode.CreateDefaultDisplayNodes()&lt;br /&gt;
volumeNode.CreateDefaultStorageNode()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get value of a volume at specific voxel coordinates==&lt;br /&gt;
&lt;br /&gt;
This example shows how to get voxel value of &amp;quot;volumeNode&amp;quot; at &amp;quot;ijk&amp;quot; volume voxel coordinates.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
volumeNode = slicer.util.getNode('MRHead')&lt;br /&gt;
ijk = [20,40,30]  # volume voxel coordinates&lt;br /&gt;
&lt;br /&gt;
voxels = slicer.util.arrayFromVolume(volumeNode)  # get voxels as a numpy array&lt;br /&gt;
voxelValue = voxels[ijk[2], ijk[1], ijk[0]]  # note that numpy array index order is kji (not ijk)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Modify voxels in a volume==&lt;br /&gt;
&lt;br /&gt;
Typically the fastest and simplest way of modifying voxels is by using numpy operators. Voxels can be retrieved in a numpy array using the `array` method and modified using standard numpy methods. For example, threshold a volume:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nodeName = 'MRHead'&lt;br /&gt;
thresholdValue = 100&lt;br /&gt;
voxelArray = array(nodeName) # get voxels as numpy array&lt;br /&gt;
voxelArray[voxelArray &amp;lt; thresholdValue] = 0 # modify voxel values&lt;br /&gt;
getNode(nodeName).Modified() # at the end of all processing, notify Slicer that the image modification is completed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This example shows how to change voxels values of the MRHead sample volume.&lt;br /&gt;
The values will be computed by function f(r,a,s,) = (r-10)*(r-10)+(a+15)*(a+15)+s*s.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
volumeNode=slicer.util.getNode('MRHead')&lt;br /&gt;
ijkToRas = vtk.vtkMatrix4x4()&lt;br /&gt;
volumeNode.GetIJKToRASMatrix(ijkToRas)&lt;br /&gt;
imageData=volumeNode.GetImageData()&lt;br /&gt;
extent = imageData.GetExtent()&lt;br /&gt;
for k in range(extent[4], extent[5]+1):&lt;br /&gt;
  for j in range(extent[2], extent[3]+1):&lt;br /&gt;
    for i in range(extent[0], extent[1]+1):&lt;br /&gt;
      position_Ijk=[i, j, k, 1]&lt;br /&gt;
      position_Ras=ijkToRas.MultiplyPoint(position_Ijk)&lt;br /&gt;
      r=position_Ras[0]&lt;br /&gt;
      a=position_Ras[1]&lt;br /&gt;
      s=position_Ras[2]      &lt;br /&gt;
      functionValue=(r-10)*(r-10)+(a+15)*(a+15)+s*s&lt;br /&gt;
      imageData.SetScalarComponentFromDouble(i,j,k,0,functionValue)&lt;br /&gt;
imageData.Modified()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get volume voxel coordinates from markup fiducial RAS coordinates==&lt;br /&gt;
&lt;br /&gt;
This example shows how to get voxel coordinate of a volume corresponding to a markup fiducial point position.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Inputs&lt;br /&gt;
volumeNode = getNode('MRHead')&lt;br /&gt;
markupsNode = getNode('F')&lt;br /&gt;
markupsIndex = 0&lt;br /&gt;
&lt;br /&gt;
# Get point coordinate in RAS&lt;br /&gt;
point_Ras = [0, 0, 0, 1]&lt;br /&gt;
markupsNode.GetNthFiducialWorldCoordinates(markupsIndex, point_Ras)&lt;br /&gt;
&lt;br /&gt;
# If volume node is transformed, apply that transform to get volume's RAS coordinates&lt;br /&gt;
transformRasToVolumeRas = vtk.vtkGeneralTransform()&lt;br /&gt;
slicer.vtkMRMLTransformNode.GetTransformBetweenNodes(None, volumeNode.GetParentTransformNode(), transformRasToVolumeRas)&lt;br /&gt;
point_VolumeRas = transformRasToVolumeRas.TransformPoint(point_Ras[0:3])&lt;br /&gt;
&lt;br /&gt;
# Get voxel coordinates from physical coordinates&lt;br /&gt;
volumeRasToIjk = vtk.vtkMatrix4x4()&lt;br /&gt;
volumeNode.GetRASToIJKMatrix(volumeRasToIjk)&lt;br /&gt;
point_Ijk = [0, 0, 0, 1]&lt;br /&gt;
volumeRasToIjk.MultiplyPoint(np.append(point_VolumeRas,1.0), point_Ijk)&lt;br /&gt;
point_Ijk = [ int(round(c)) for c in point_Ijk[0:3] ]&lt;br /&gt;
&lt;br /&gt;
# Print output&lt;br /&gt;
print(point_Ijk)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get markup fiducial RAS coordinates from volume voxel coordinates==&lt;br /&gt;
&lt;br /&gt;
This example shows how to get position of maximum intensity voxel of a volume (determined by numpy, in IJK coordinates) in RAS coordinates so that it can be marked with a markup fiducial.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Inputs&lt;br /&gt;
volumeNode = getNode('MRHead')&lt;br /&gt;
markupsNode = getNode('F')&lt;br /&gt;
&lt;br /&gt;
# Get voxel position in IJK coordinate system&lt;br /&gt;
import numpy as np&lt;br /&gt;
volumeArray = slicer.util.arrayFromVolume(volumeNode)&lt;br /&gt;
# Get position of highest voxel value&lt;br /&gt;
point_Kji = np.where(volumeArray == volumeArray.max())&lt;br /&gt;
point_Ijk = [point_Kji[2][0], point_Kji[1][0], point_Kji[0][0]]&lt;br /&gt;
&lt;br /&gt;
# Get physical coordinates from voxel coordinates&lt;br /&gt;
volumeIjkToRas = vtk.vtkMatrix4x4()&lt;br /&gt;
volumeNode.GetIJKToRASMatrix(volumeIjkToRas)&lt;br /&gt;
point_VolumeRas = [0, 0, 0, 1]&lt;br /&gt;
volumeIjkToRas.MultiplyPoint(np.append(point_Ijk,1.0), point_VolumeRas)&lt;br /&gt;
&lt;br /&gt;
# If volume node is transformed, apply that transform to get volume's RAS coordinates&lt;br /&gt;
transformVolumeRasToRas = vtk.vtkGeneralTransform()&lt;br /&gt;
slicer.vtkMRMLTransformNode.GetTransformBetweenNodes(volumeNode.GetParentTransformNode(), None, transformVolumeRasToRas)&lt;br /&gt;
point_Ras = transformVolumeRasToRas.TransformPoint(point_VolumeRas[0:3])&lt;br /&gt;
&lt;br /&gt;
# Add a markup at the computed position and print its coordinates&lt;br /&gt;
markupsNode.AddFiducial(point_Ras[0], point_Ras[1], point_Ras[2], &amp;quot;max&amp;quot;)&lt;br /&gt;
print(point_Ras)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get the values of all voxels for a label value==&lt;br /&gt;
&lt;br /&gt;
If you have a background image called ‘Volume’ and a mask called ‘Volume-label’ created with the Editor you could do something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import numpy&lt;br /&gt;
volume = array('Volume')&lt;br /&gt;
label = array('Volume-label')&lt;br /&gt;
points  = numpy.where( label == 1 )  # or use another label number depending on what you segmented&lt;br /&gt;
values  = volume[points] # this will be a list of the label values&lt;br /&gt;
values.mean() # should match the mean value of LabelStatistics calculation as a double-check&lt;br /&gt;
numpy.savetxt('values.txt', values)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Access values in a DTI tensor volume==&lt;br /&gt;
This example shows how to access individual tensors at the voxel level.&lt;br /&gt;
&lt;br /&gt;
First load your DWI volume and estimate tensors to produce a DTI volume called ‘Output DTI Volume’&lt;br /&gt;
&lt;br /&gt;
Then open the python window: View-&amp;gt;Python interactor&lt;br /&gt;
&lt;br /&gt;
Use this command to access tensors through numpy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tensors = array('Output DTI Volume')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Type the following code into the Python window to access all tensor components using vtk commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
volumeNode=slicer.util.getNode('Output DTI Volume')&lt;br /&gt;
imageData=volumeNode.GetImageData()&lt;br /&gt;
tensors = imageData.GetPointData().GetTensors()&lt;br /&gt;
extent = imageData.GetExtent()&lt;br /&gt;
idx = 0&lt;br /&gt;
for k in range(extent[4], extent[5]+1):&lt;br /&gt;
  for j in range(extent[2], extent[3]+1):&lt;br /&gt;
    for i in range(extent[0], extent[1]+1):&lt;br /&gt;
      tensors.GetTuple9(idx)&lt;br /&gt;
      idx += 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Change window/level (brightness/contrast) or colormap of a volume==&lt;br /&gt;
This example shows how to change window/level of the MRHead sample volume.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
volumeNode = getNode('MRHead')&lt;br /&gt;
displayNode = volumeNode.GetDisplayNode()&lt;br /&gt;
displayNode.AutoWindowLevelOff()&lt;br /&gt;
displayNode.SetWindow(50)&lt;br /&gt;
displayNode.SetLevel(100)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change color mapping from grayscale to rainbow:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
displayNode.SetAndObserveColorNodeID('vtkMRMLColorTableNodeRainbow')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Make mouse left-click and drag on the image adjust window/level==&lt;br /&gt;
&lt;br /&gt;
In older Slicer versions, by default, left-click and drag in a slice view adjusted window/level of the displayed image. Window/level adjustment is now a new mouse mode that can be activated by clicking on its toolbar button or running this code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicer.app.applicationLogic().GetInteractionNode().SetCurrentInteractionMode(slicer.vtkMRMLInteractionNode.AdjustWindowLevel)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Create custom color table==&lt;br /&gt;
This example shows how to create a new color table, for example with inverted color range from the default Ocean color table.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
invertedocean = slicer.vtkMRMLColorTableNode()&lt;br /&gt;
invertedocean.SetTypeToUser()&lt;br /&gt;
invertedocean.SetNumberOfColors(256)&lt;br /&gt;
invertedocean.SetName(&amp;quot;InvertedOcean&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
for i in range(0,255):&lt;br /&gt;
    invertedocean.SetColor(i, 0.0, 1 - (i+1e-16)/255.0, 1.0, 1.0)&lt;br /&gt;
&lt;br /&gt;
slicer.mrmlScene.AddNode(invertedocean)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Manipulate a Slice View==&lt;br /&gt;
&lt;br /&gt;
===Change slice offset===&lt;br /&gt;
&lt;br /&gt;
Equivalent to moving the slider in slice view controller.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
layoutManager = slicer.app.layoutManager()&lt;br /&gt;
red = layoutManager.sliceWidget('Red')&lt;br /&gt;
redLogic = red.sliceLogic()&lt;br /&gt;
# Print current slice offset position&lt;br /&gt;
print(redLogic.GetSliceOffset())&lt;br /&gt;
# Change slice position&lt;br /&gt;
redLogic.SetSliceOffset(20)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Change slice orientation===&lt;br /&gt;
&lt;br /&gt;
Get 'Red' slice node and rotate around X and Y axes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sliceNode = slicer.app.layoutManager().sliceWidget('Red').mrmlSliceNode()&lt;br /&gt;
sliceToRas = sliceNode.GetSliceToRAS()&lt;br /&gt;
transform=vtk.vtkTransform()&lt;br /&gt;
transform.SetMatrix(SliceToRAS)&lt;br /&gt;
transform.RotateX(20)&lt;br /&gt;
transform.RotateY(15)&lt;br /&gt;
sliceToRas.DeepCopy(transform.GetMatrix())&lt;br /&gt;
sliceNode.UpdateMatrices()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Show slice views in 3D window===&lt;br /&gt;
&lt;br /&gt;
Equivalent to clicking 'eye' icon in the slice view controller.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
layoutManager = slicer.app.layoutManager()&lt;br /&gt;
for sliceViewName in layoutManager.sliceViewNames():&lt;br /&gt;
  controller = layoutManager.sliceWidget(sliceViewName).sliceController()&lt;br /&gt;
  controller.setSliceVisible(True)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Reset field of view to show background volume maximized===&lt;br /&gt;
&lt;br /&gt;
Equivalent to click small rectangle button (&amp;quot;Adjust the slice viewer's field of view...&amp;quot;) in the slice view controller.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicer.util.resetSliceViews()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Rotate slice views to volume plane===&lt;br /&gt;
&lt;br /&gt;
Aligns slice views to volume axes, shows original image acquisition planes in slice views.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
volumeNode = slicer.util.getNode('MRHead')&lt;br /&gt;
layoutManager = slicer.app.layoutManager()&lt;br /&gt;
for sliceViewName in layoutManager.sliceViewNames():&lt;br /&gt;
  layoutManager.sliceWidget(sliceViewName).mrmlSliceNode().RotateToVolumePlane(volumeNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Iterate over current visible slice views, and set foreground and background images===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicer.util.setSliceViewerLayers(background=mrVolume, foreground=ctVolume)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Internally, this method performs something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
layoutManager = slicer.app.layoutManager()&lt;br /&gt;
for sliceViewName in layoutManager.sliceViewNames():&lt;br /&gt;
     compositeNode = layoutManager.sliceWidget(sliceViewName).sliceLogic().GetSliceCompositeNode()&lt;br /&gt;
     # setup background volume&lt;br /&gt;
     compositeNode.SetBackgroundVolumeID(mrVolume.GetID())&lt;br /&gt;
     # setup foreground volume&lt;br /&gt;
     compositeNode.SetForegroundVolumeID(ctVolume.GetID())&lt;br /&gt;
     # change opacity&lt;br /&gt;
     compositeNode.SetForegroundOpacity(0.3)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Show a volume in slice views==&lt;br /&gt;
&lt;br /&gt;
Recommended:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
volumeNode = slicer.util.getNode('YourVolumeNode')&lt;br /&gt;
slicer.util.setSliceViewerLayers(background=volumeNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
Show volume in all visible views where volume selection propagation is enabled:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
volumeNode = slicer.util.getNode('YourVolumeNode')&lt;br /&gt;
applicationLogic = slicer.app.applicationLogic()&lt;br /&gt;
selectionNode = applicationLogic.GetSelectionNode()&lt;br /&gt;
selectionNode.SetSecondaryVolumeID(volumeNode.GetID())&lt;br /&gt;
applicationLogic.PropagateForegroundVolumeSelection(0) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
Show volume in selected views:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n =  slicer.util.getNode('YourVolumeNode')&lt;br /&gt;
for color in ['Red', 'Yellow', 'Green']:&lt;br /&gt;
    slicer.app.layoutManager().sliceWidget(color).sliceLogic().GetSliceCompositeNode().SetForegroundVolumeID(n.GetID())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Show comparison view of all model files a folder==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Inputs&lt;br /&gt;
modelDir = &amp;quot;c:/some/folder/containing/models&amp;quot;&lt;br /&gt;
modelFileExt = &amp;quot;stl&amp;quot;&lt;br /&gt;
numberOfColumns = 4&lt;br /&gt;
&lt;br /&gt;
import math&lt;br /&gt;
import os&lt;br /&gt;
modelFiles = list(f for f in os.listdir(modelDir) if f.endswith('.' + modelFileExt))&lt;br /&gt;
&lt;br /&gt;
# Create a custom layout&lt;br /&gt;
numberOfRows = int(math.ceil(len(modelFiles)/numberOfColumns))&lt;br /&gt;
customLayoutId=567  # we pick a random id that is not used by others&lt;br /&gt;
slicer.app.setRenderPaused(True)&lt;br /&gt;
customLayout = '&amp;lt;layout type=&amp;quot;vertical&amp;quot;&amp;gt;'&lt;br /&gt;
viewIndex = 0&lt;br /&gt;
for rowIndex in range(numberOfRows):&lt;br /&gt;
  customLayout += '&amp;lt;item&amp;gt;&amp;lt;layout type=&amp;quot;horizontal&amp;quot;&amp;gt;'&lt;br /&gt;
  for colIndex in range(numberOfColumns):&lt;br /&gt;
    name = os.path.basename(modelFiles[viewIndex]) if viewIndex &amp;lt; len(modelFiles) else &amp;quot;compare &amp;quot;+str(viewIndex)&lt;br /&gt;
    customLayout += '&amp;lt;item&amp;gt;&amp;lt;view class=&amp;quot;vtkMRMLViewNode&amp;quot; singletontag=&amp;quot;'+name&lt;br /&gt;
    customLayout += '&amp;quot;&amp;gt;&amp;lt;property name=&amp;quot;viewlabel&amp;quot; action=&amp;quot;default&amp;quot;&amp;gt;'+name+'&amp;lt;/property&amp;gt;&amp;lt;/view&amp;gt;&amp;lt;/item&amp;gt;'&lt;br /&gt;
    viewIndex += 1&lt;br /&gt;
  customLayout += '&amp;lt;/layout&amp;gt;&amp;lt;/item&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
customLayout += '&amp;lt;/layout&amp;gt;'&lt;br /&gt;
if not slicer.app.layoutManager().layoutLogic().GetLayoutNode().SetLayoutDescription(customLayoutId, customLayout):&lt;br /&gt;
    slicer.app.layoutManager().layoutLogic().GetLayoutNode().AddLayoutDescription(customLayoutId, customLayout)&lt;br /&gt;
&lt;br /&gt;
slicer.app.layoutManager().setLayout(customLayoutId)&lt;br /&gt;
&lt;br /&gt;
# Load and show each model in a view&lt;br /&gt;
for modelIndex, modelFile in enumerate(modelFiles):&lt;br /&gt;
    # Show only one model in each view&lt;br /&gt;
    name = os.path.basename(modelFile)&lt;br /&gt;
    viewNode = slicer.mrmlScene.GetSingletonNode(name, &amp;quot;vtkMRMLViewNode&amp;quot;)&lt;br /&gt;
    viewNode.LinkedControlOn()&lt;br /&gt;
    modelNode = slicer.util.loadModel(modelDir+&amp;quot;/&amp;quot;+modelFile)&lt;br /&gt;
    modelNode.GetDisplayNode().AddViewNodeID(viewNode.GetID())&lt;br /&gt;
&lt;br /&gt;
slicer.app.setRenderPaused(False)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Change opacity of foreground volume in slice views==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicer.util.setSliceViewerLayers(foregroundOpacity=0.4)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
Change opacity in a selected view&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lm = slicer.app.layoutManager()&lt;br /&gt;
sliceLogic = lm.sliceWidget('Red').sliceLogic()&lt;br /&gt;
compositeNode = sliceLogic.GetSliceCompositeNode()&lt;br /&gt;
compositeNode.SetForegroundOpacity(0.4)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fit slice plane to markup fiducials==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sliceNode = slicer.mrmlScene.GetNodeByID(&amp;quot;vtkMRMLSliceNodeRed&amp;quot;)&lt;br /&gt;
markupsNode = slicer.mrmlScene.GetFirstNodeByName(&amp;quot;F&amp;quot;)&lt;br /&gt;
# Get markup point positions as numpy arrays&lt;br /&gt;
import numpy as np&lt;br /&gt;
p1 = np.zeros(3)&lt;br /&gt;
p2 = np.zeros(3)&lt;br /&gt;
p3 = np.zeros(3)&lt;br /&gt;
markupsNode.GetNthFiducialPosition(0, p1)&lt;br /&gt;
markupsNode.GetNthFiducialPosition(1, p2)&lt;br /&gt;
markupsNode.GetNthFiducialPosition(2, p3)&lt;br /&gt;
# Get plane axis directions&lt;br /&gt;
n = np.cross(p2-p1, p2-p3) # plane normal direction&lt;br /&gt;
n = n/np.linalg.norm(n)&lt;br /&gt;
t = np.cross([0.0, 0.0, 1], n) # plane transverse direction&lt;br /&gt;
t = t/np.linalg.norm(t)&lt;br /&gt;
# Set slice plane orientation and position&lt;br /&gt;
sliceNode.SetSliceToRASByNTP(n[0], n[1], n[2], t[0], t[1], t[2], p1[0], p1[1], p1[2], 0)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Save a series of images from a Slice View==&lt;br /&gt;
&lt;br /&gt;
You can use ScreenCapture module to capture series of images. To do it programmatically, save the following into a file such as '/tmp/record.py' and then in the slicer python console type &amp;quot;execfile('/tmp/record.py')&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
layoutName = 'Green'&lt;br /&gt;
imagePathPattern = '/tmp/image-%03d.png'&lt;br /&gt;
steps = 10&lt;br /&gt;
&lt;br /&gt;
widget = slicer.app.layoutManager().sliceWidget(layoutName)&lt;br /&gt;
view = widget.sliceView()&lt;br /&gt;
logic = widget.sliceLogic()&lt;br /&gt;
bounds = [0,]*6&lt;br /&gt;
logic.GetSliceBounds(bounds)&lt;br /&gt;
&lt;br /&gt;
for step in range(steps):&lt;br /&gt;
    offset = bounds[4] + step/(1.*steps) * (bounds[5]-bounds[4])&lt;br /&gt;
    logic.SetSliceOffset(offset)&lt;br /&gt;
    view.forceRender()&lt;br /&gt;
    image = qt.QPixmap.grabWidget(view).toImage()&lt;br /&gt;
    image.save(imagePathPattern % step)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Rasterize a model and save it to a series of image files==&lt;br /&gt;
&lt;br /&gt;
This example shows how to generate a stack of image files from an STL file:&lt;br /&gt;
&lt;br /&gt;
 inputModelFile = &amp;quot;/some/input/folder/SomeShape.stl&amp;quot;&lt;br /&gt;
 outputDir = &amp;quot;/some/output/folder&amp;quot;&lt;br /&gt;
 outputVolumeLabelValue = 100&lt;br /&gt;
 outputVolumeSpacingMm = [0.5, 0.5, 0.5]&lt;br /&gt;
 outputVolumeMarginMm = [10.0, 10.0, 10.0]&lt;br /&gt;
 &lt;br /&gt;
 # Read model&lt;br /&gt;
 inputModel = slicer.util.loadModel(inputModelFile)&lt;br /&gt;
 &lt;br /&gt;
 # Determine output volume geometry and create a corresponding reference volume&lt;br /&gt;
 import math&lt;br /&gt;
 import numpy as np&lt;br /&gt;
 bounds = np.zeros(6)&lt;br /&gt;
 inputModel.GetBounds(bounds)&lt;br /&gt;
 imageData = vtk.vtkImageData()&lt;br /&gt;
 imageSize = [ int((bounds[axis*2+1]-bounds[axis*2]+outputVolumeMarginMm[axis]*2.0)/outputVolumeSpacingMm[axis]) for axis in range(3) ]&lt;br /&gt;
 imageOrigin = [ bounds[axis*2]-outputVolumeMarginMm[axis] for axis in range(3) ]&lt;br /&gt;
 imageData.SetDimensions(imageSize)&lt;br /&gt;
 imageData.AllocateScalars(vtk.VTK_UNSIGNED_CHAR, 1)&lt;br /&gt;
 imageData.GetPointData().GetScalars().Fill(0)&lt;br /&gt;
 referenceVolumeNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLScalarVolumeNode&amp;quot;)&lt;br /&gt;
 referenceVolumeNode.SetOrigin(imageOrigin)&lt;br /&gt;
 referenceVolumeNode.SetSpacing(outputVolumeSpacingMm)&lt;br /&gt;
 referenceVolumeNode.SetAndObserveImageData(imageData)&lt;br /&gt;
 referenceVolumeNode.CreateDefaultDisplayNodes()&lt;br /&gt;
 &lt;br /&gt;
 # Convert model to labelmap&lt;br /&gt;
 seg = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLSegmentationNode')&lt;br /&gt;
 seg.SetReferenceImageGeometryParameterFromVolumeNode(referenceVolumeNode)&lt;br /&gt;
 slicer.modules.segmentations.logic().ImportModelToSegmentationNode(inputModel, seg)&lt;br /&gt;
 seg.CreateBinaryLabelmapRepresentation()&lt;br /&gt;
 outputLabelmapVolumeNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLLabelMapVolumeNode')&lt;br /&gt;
 slicer.modules.segmentations.logic().ExportVisibleSegmentsToLabelmapNode(seg, outputLabelmapVolumeNode, referenceVolumeNode)&lt;br /&gt;
 outputLabelmapVolumeArray = (slicer.util.arrayFromVolume(outputLabelmapVolumeNode) * outputVolumeLabelValue).astype('int8')&lt;br /&gt;
 &lt;br /&gt;
 # Write labelmap volume to series of TIFF files&lt;br /&gt;
 pip_install(&amp;quot;imageio&amp;quot;)&lt;br /&gt;
 import imageio&lt;br /&gt;
 for i in range(len(outputLabelmapVolumeArray)):&lt;br /&gt;
     imageio.imwrite(f'{outputDir}/image_{i:03}.tiff', outputLabelmapVolumeArray[i])&lt;br /&gt;
&lt;br /&gt;
==Save the scene into a new directory==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Create a new directory where the scene will be saved into&lt;br /&gt;
import time&lt;br /&gt;
sceneSaveDirectory = slicer.app.temporaryPath + &amp;quot;/saved-scene-&amp;quot; + time.strftime(&amp;quot;%Y%m%d-%H%M%S&amp;quot;)&lt;br /&gt;
if not os.access(sceneSaveDirectory, os.F_OK):&lt;br /&gt;
  os.makedirs(sceneSaveDirectory)&lt;br /&gt;
&lt;br /&gt;
# Save the scene&lt;br /&gt;
if slicer.app.applicationLogic().SaveSceneToSlicerDataBundleDirectory(sceneSaveDirectory, None):&lt;br /&gt;
  logging.info(&amp;quot;Scene saved to: {0}&amp;quot;.format(sceneSaveDirectory))&lt;br /&gt;
else:&lt;br /&gt;
  logging.error(&amp;quot;Scene saving failed&amp;quot;) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Save the scene into a single MRB file==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Generate file name&lt;br /&gt;
import time&lt;br /&gt;
sceneSaveFilename = slicer.app.temporaryPath + &amp;quot;/saved-scene-&amp;quot; + time.strftime(&amp;quot;%Y%m%d-%H%M%S&amp;quot;) + &amp;quot;.mrb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Save scene&lt;br /&gt;
if slicer.util.saveScene(sceneSaveFilename):&lt;br /&gt;
  logging.info(&amp;quot;Scene saved to: {0}&amp;quot;.format(sceneSaveFilename))&lt;br /&gt;
else:&lt;br /&gt;
  logging.error(&amp;quot;Scene saving failed&amp;quot;) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Save a node to file==&lt;br /&gt;
&lt;br /&gt;
Save a transform node to file (should work with any other node type, if file extension is set to a supported one):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
myNode = getNode(&amp;quot;LinearTransform_3&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
myStorageNode = myNode.CreateDefaultStorageNode()&lt;br /&gt;
myStorageNode.SetFileName(&amp;quot;c:/tmp/something.tfm&amp;quot;)&lt;br /&gt;
myStorageNode.WriteData(myNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Center the 3D View on the Scene==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
layoutManager = slicer.app.layoutManager()&lt;br /&gt;
threeDWidget = layoutManager.threeDWidget(0)&lt;br /&gt;
threeDView = threeDWidget.threeDView()&lt;br /&gt;
threeDView.resetFocalPoint()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Rotate the 3D View==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
layoutManager = slicer.app.layoutManager()&lt;br /&gt;
threeDWidget = layoutManager.threeDWidget(0)&lt;br /&gt;
threeDView = threeDWidget.threeDView()&lt;br /&gt;
threeDView.yaw()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Display text in a 3D view or slice view==&lt;br /&gt;
&lt;br /&gt;
The easiest way to show information overlaid on a viewer is to use corner annotations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
view=slicer.app.layoutManager().threeDWidget(0).threeDView()&lt;br /&gt;
# Set text to &amp;quot;Something&amp;quot;&lt;br /&gt;
view.cornerAnnotation().SetText(vtk.vtkCornerAnnotation.UpperRight,&amp;quot;Something&amp;quot;)&lt;br /&gt;
# Set color to red&lt;br /&gt;
view.cornerAnnotation().GetTextProperty().SetColor(1,0,0)&lt;br /&gt;
# Update the view&lt;br /&gt;
view.forceRender()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To display text in slice views, replace the first line by this line (and consider hiding slice view annotations, to prevent them from overwriting the text you place there):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
view=slicer.app.layoutManager().sliceWidget(&amp;quot;Red&amp;quot;).sliceView()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hide slice view annotations (DataProbe)==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Disable slice annotations immediately&lt;br /&gt;
slicer.modules.DataProbeInstance.infoWidget.sliceAnnotations.sliceViewAnnotationsEnabled=False&lt;br /&gt;
slicer.modules.DataProbeInstance.infoWidget.sliceAnnotations.updateSliceViewFromGUI()&lt;br /&gt;
# Disable slice annotations persistently (after Slicer restarts)&lt;br /&gt;
settings = qt.QSettings()&lt;br /&gt;
settings.setValue('DataProbe/sliceViewAnnotations.enabled', 0)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Turning off interpolation==&lt;br /&gt;
&lt;br /&gt;
You can turn off interpolation for newly loaded volumes with this script from Steve Pieper.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def NoInterpolate(caller,event):&lt;br /&gt;
  for node in slicer.util.getNodes('*').values():&lt;br /&gt;
    if node.IsA('vtkMRMLScalarVolumeDisplayNode'):&lt;br /&gt;
      node.SetInterpolate(0)&lt;br /&gt;
	&lt;br /&gt;
slicer.mrmlScene.AddObserver(slicer.mrmlScene.NodeAddedEvent, NoInterpolate)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The below link explains how to put this in your startup script.&lt;br /&gt;
&lt;br /&gt;
http://www.na-mic.org/Wiki/index.php/AHM2012-Slicer-Python#Refining_the_code_and_UI_with_slicerrc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Customize viewer layout==&lt;br /&gt;
&lt;br /&gt;
Show a custom layout of a 3D view on top of the red slice view:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
customLayout = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;layout type=&amp;quot;vertical&amp;quot; split=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;item&amp;gt;&lt;br /&gt;
   &amp;lt;view class=&amp;quot;vtkMRMLViewNode&amp;quot; singletontag=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;property name=&amp;quot;viewlabel&amp;quot; action=&amp;quot;default&amp;quot;&amp;gt;1&amp;lt;/property&amp;gt;&lt;br /&gt;
   &amp;lt;/view&amp;gt;&lt;br /&gt;
  &amp;lt;/item&amp;gt;&lt;br /&gt;
  &amp;lt;item&amp;gt;&lt;br /&gt;
   &amp;lt;view class=&amp;quot;vtkMRMLSliceNode&amp;quot; singletontag=&amp;quot;Red&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;property name=&amp;quot;orientation&amp;quot; action=&amp;quot;default&amp;quot;&amp;gt;Axial&amp;lt;/property&amp;gt;&lt;br /&gt;
    &amp;lt;property name=&amp;quot;viewlabel&amp;quot; action=&amp;quot;default&amp;quot;&amp;gt;R&amp;lt;/property&amp;gt;&lt;br /&gt;
    &amp;lt;property name=&amp;quot;viewcolor&amp;quot; action=&amp;quot;default&amp;quot;&amp;gt;#F34A33&amp;lt;/property&amp;gt;&lt;br /&gt;
   &amp;lt;/view&amp;gt;&lt;br /&gt;
  &amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/layout&amp;gt;&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Built-in layout IDs are all below 100, so you can choose any large random number&lt;br /&gt;
# for your custom layout ID.&lt;br /&gt;
customLayoutId=501&lt;br /&gt;
&lt;br /&gt;
layoutManager = slicer.app.layoutManager()&lt;br /&gt;
layoutManager.layoutLogic().GetLayoutNode().AddLayoutDescription(customLayoutId, customLayout)                                         &lt;br /&gt;
&lt;br /&gt;
# Switch to the new custom layout &lt;br /&gt;
layoutManager.setLayout(customLayoutId)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See description of standard layouts (that can be used as examples) here:&lt;br /&gt;
https://github.com/Slicer/Slicer/blob/master/Libs/MRML/Logic/vtkMRMLLayoutLogic.cxx&lt;br /&gt;
&lt;br /&gt;
You can use this code snippet to add a button to the layout selector toolbar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Add button to layout selector toolbar for this custom layout&lt;br /&gt;
viewToolBar = mainWindow().findChild('QToolBar', 'ViewToolBar')&lt;br /&gt;
layoutMenu = viewToolBar.widgetForAction(viewToolBar.actions()[0]).menu()&lt;br /&gt;
layoutSwitchActionParent = layoutMenu  # use `layoutMenu` to add inside layout list, use `viewToolBar` to add next the standard layout list&lt;br /&gt;
layoutSwitchAction = layoutSwitchActionParent.addAction(&amp;quot;My view&amp;quot;) # add inside layout list&lt;br /&gt;
layoutSwitchAction.setData(layoutId)&lt;br /&gt;
layoutSwitchAction.setIcon(qt.QIcon(':Icons/Go.png'))&lt;br /&gt;
layoutSwitchAction.setToolTip('3D and slice view')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Customize keyboard shortcuts==&lt;br /&gt;
&lt;br /&gt;
Keyboard shortcuts can be specified for activating any Slicer feature by adding a couple of lines to your &lt;br /&gt;
[[Documentation/{{documentation/version}}/Developers/Python_scripting#How_to_systematically_execute_custom_python_code_at_startup_.3F|.slicerrc file]].&lt;br /&gt;
&lt;br /&gt;
For example, this script registers ''Ctrl+b'', ''Ctrl+n'', ''Ctrl+m'', ''Ctrl+,'' keyboard shortcuts to switch between red, yellow, green, and 4-up view layouts.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
shortcuts = [&lt;br /&gt;
    ('Ctrl+b', lambda: slicer.app.layoutManager().setLayout(slicer.vtkMRMLLayoutNode.SlicerLayoutOneUpRedSliceView)),&lt;br /&gt;
    ('Ctrl+n', lambda: slicer.app.layoutManager().setLayout(slicer.vtkMRMLLayoutNode.SlicerLayoutOneUpYellowSliceView)),&lt;br /&gt;
    ('Ctrl+m', lambda: slicer.app.layoutManager().setLayout(slicer.vtkMRMLLayoutNode.SlicerLayoutOneUpGreenSliceView)),&lt;br /&gt;
    ('Ctrl+,', lambda: slicer.app.layoutManager().setLayout(slicer.vtkMRMLLayoutNode.SlicerLayoutFourUpView))&lt;br /&gt;
    ]&lt;br /&gt;
&lt;br /&gt;
for (shortcutKey, callback) in shortcuts:&lt;br /&gt;
    shortcut = qt.QShortcut(slicer.util.mainWindow())&lt;br /&gt;
    shortcut.setKey(qt.QKeySequence(shortcutKey))&lt;br /&gt;
    shortcut.connect( 'activated()', callback)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here's an example for cycling through Segment Editor effects (requested [https://discourse.slicer.org/t/is-there-a-keystroke-to-cycle-through-effects-in-segment-editor/10117/2 on the forum] for the [http://slicermorph.org SlicerMorph] project).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def cycleEffect(delta=1):&lt;br /&gt;
    try:&lt;br /&gt;
        orderedNames = list(slicer.modules.SegmentEditorWidget.editor.effectNameOrder())&lt;br /&gt;
        allNames = slicer.modules.SegmentEditorWidget.editor.availableEffectNames()&lt;br /&gt;
        for name in allNames:&lt;br /&gt;
            try:&lt;br /&gt;
                orderedNames.index(name)&lt;br /&gt;
            except ValueError:&lt;br /&gt;
                orderedNames.append(name)&lt;br /&gt;
        orderedNames.insert(0, None)&lt;br /&gt;
        activeEffect = slicer.modules.SegmentEditorWidget.editor.activeEffect()&lt;br /&gt;
        if activeEffect:&lt;br /&gt;
            activeName = slicer.modules.SegmentEditorWidget.editor.activeEffect().name&lt;br /&gt;
        else:&lt;br /&gt;
            activeName = None&lt;br /&gt;
        newIndex = (orderedNames.index(activeName) + delta) % len(orderedNames)&lt;br /&gt;
        slicer.modules.SegmentEditorWidget.editor.setActiveEffectByName(orderedNames[newIndex])&lt;br /&gt;
    except AttributeError:&lt;br /&gt;
        # module not active&lt;br /&gt;
        pass&lt;br /&gt;
&lt;br /&gt;
shortcuts = [&lt;br /&gt;
    ('`', lambda: cycleEffect(-1)),&lt;br /&gt;
    ('~', lambda: cycleEffect(1)),&lt;br /&gt;
    ]&lt;br /&gt;
&lt;br /&gt;
for (shortcutKey, callback) in shortcuts:&lt;br /&gt;
    shortcut = qt.QShortcut(slicer.util.mainWindow())&lt;br /&gt;
    shortcut.setKey(qt.QKeySequence(shortcutKey))&lt;br /&gt;
    shortcut.connect( 'activated()', callback)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Customize keyboard/mouse gestures in viewers==&lt;br /&gt;
&lt;br /&gt;
Example for making the 3D view rotate using right-click-and-drag:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
threeDViewWidget = slicer.app.layoutManager().threeDWidget(0)&lt;br /&gt;
cameraDisplayableManager = threeDViewWidget.threeDView().displayableManagerByClassName('vtkMRMLCameraDisplayableManager')&lt;br /&gt;
cameraWidget = cameraDisplayableManager.GetCameraWidget()&lt;br /&gt;
&lt;br /&gt;
# Remove old mapping from right-click-and-drag&lt;br /&gt;
cameraWidget.SetEventTranslationClickAndDrag(cameraWidget.WidgetStateIdle, vtk.vtkCommand.RightButtonPressEvent, vtk.vtkEvent.NoModifier,&lt;br /&gt;
    cameraWidget.WidgetStateRotate, vtk.vtkWidgetEvent.NoEvent, vtk.vtkWidgetEvent.NoEvent)&lt;br /&gt;
&lt;br /&gt;
# Make right-click-and-drag rotate the view&lt;br /&gt;
cameraWidget.SetEventTranslationClickAndDrag(cameraWidget.WidgetStateIdle, vtk.vtkCommand.RightButtonPressEvent, vtk.vtkEvent.NoModifier,&lt;br /&gt;
    cameraWidget.WidgetStateRotate, cameraWidget.WidgetEventRotateStart, cameraWidget.WidgetEventRotateEnd)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Disable certain user interactions in slice views==&lt;br /&gt;
&lt;br /&gt;
For example, disable slice browsing using mouse wheel and keyboard shortcuts in the red slice viewer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
interactorStyle = slicer.app.layoutManager().sliceWidget('Red').sliceView().sliceViewInteractorStyle()&lt;br /&gt;
interactorStyle.SetActionEnabled(interactorStyle.BrowseSlice, False)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hide all slice view controllers:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lm = slicer.app.layoutManager()&lt;br /&gt;
for sliceViewName in lm.sliceViewNames():&lt;br /&gt;
  lm.sliceWidget(sliceViewName).sliceController().setVisible(False)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hide all 3D view controllers:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lm = slicer.app.layoutManager()&lt;br /&gt;
for viewIndex in range(slicer.app.layoutManager().threeDViewCount):&lt;br /&gt;
  lm.threeDWidget(0).threeDController().setVisible(False)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Change default slice view orientation==&lt;br /&gt;
&lt;br /&gt;
You can left-right &amp;quot;flip&amp;quot; slice view orientation presets (show patient left side on left/right side of the screen) by copy-pasting the script below to your [[Documentation/{{documentation/version}}/Developers/FAQ/Python_Scripting#How_to_systematically_execute_custom_python_code_at_startup_.3F| .slicerrc.py file]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Axial slice axes:&lt;br /&gt;
#  1 0 0&lt;br /&gt;
#  0 1 0&lt;br /&gt;
#  0 0 1&lt;br /&gt;
axialSliceToRas=vtk.vtkMatrix3x3()&lt;br /&gt;
&lt;br /&gt;
# Coronal slice axes:&lt;br /&gt;
#  1 0 0 &lt;br /&gt;
#  0 0 -1&lt;br /&gt;
#  0 1 0&lt;br /&gt;
coronalSliceToRas=vtk.vtkMatrix3x3()&lt;br /&gt;
coronalSliceToRas.SetElement(1,1, 0)&lt;br /&gt;
coronalSliceToRas.SetElement(1,2, -1)&lt;br /&gt;
coronalSliceToRas.SetElement(2,1, 1)&lt;br /&gt;
coronalSliceToRas.SetElement(2,2, 0)&lt;br /&gt;
&lt;br /&gt;
# Replace orientation presets in all existing slice nodes and in the default slice node&lt;br /&gt;
sliceNodes = slicer.util.getNodesByClass('vtkMRMLSliceNode')&lt;br /&gt;
sliceNodes.append(slicer.mrmlScene.GetDefaultNodeByClass('vtkMRMLSliceNode'))&lt;br /&gt;
for sliceNode in sliceNodes:&lt;br /&gt;
  orientationPresetName = sliceNode.GetOrientation()&lt;br /&gt;
  sliceNode.RemoveSliceOrientationPreset(&amp;quot;Axial&amp;quot;)&lt;br /&gt;
  sliceNode.AddSliceOrientationPreset(&amp;quot;Axial&amp;quot;, axialSliceToRas)&lt;br /&gt;
  sliceNode.RemoveSliceOrientationPreset(&amp;quot;Coronal&amp;quot;)&lt;br /&gt;
  sliceNode.AddSliceOrientationPreset(&amp;quot;Coronal&amp;quot;, coronalSliceToRas)&lt;br /&gt;
  sliceNode.SetOrientation(orientationPresetName)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Set all slice views linked by default==&lt;br /&gt;
&lt;br /&gt;
You can make slice views linked by default (when application starts or the scene is cleared) by copy-pasting the script below to your [[Documentation/{{documentation/version}}/Developers/FAQ/Python_Scripting#How_to_systematically_execute_custom_python_code_at_startup_.3F| .slicerrc.py file]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Set linked slice views  in all existing slice composite nodes and in the default node&lt;br /&gt;
sliceCompositeNodes = slicer.util.getNodesByClass('vtkMRMLSliceCompositeNode')&lt;br /&gt;
defaultSliceCompositeNode = slicer.mrmlScene.GetDefaultNodeByClass('vtkMRMLSliceCompositeNode')&lt;br /&gt;
if not defaultSliceCompositeNode:&lt;br /&gt;
  defaultSliceCompositeNode = slicer.mrmlScene.CreateNodeByClass('vtkMRMLSliceCompositeNode')&lt;br /&gt;
  slicer.mrmlScene.AddDefaultNode(defaultSliceCompositeNode)&lt;br /&gt;
sliceCompositeNodes.append(defaultSliceCompositeNode)&lt;br /&gt;
for sliceCompositeNode in sliceCompositeNodes:&lt;br /&gt;
  sliceCompositeNode.SetLinkedControl(True)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Set crosshair jump mode to centered by default==&lt;br /&gt;
&lt;br /&gt;
You can change default slice jump mode (when application starts or the scene is cleared) by copy-pasting the script below to your [[Documentation/{{documentation/version}}/Developers/FAQ/Python_Scripting#How_to_systematically_execute_custom_python_code_at_startup_.3F| .slicerrc.py file]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
crosshair=slicer.mrmlScene.GetFirstNodeByClass(&amp;quot;vtkMRMLCrosshairNode&amp;quot;)&lt;br /&gt;
crosshair.SetCrosshairBehavior(crosshair.CenteredJumpSlice)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Set up custom units in slice view ruler==&lt;br /&gt;
&lt;br /&gt;
For microscopy or micro-CT images you may want to switch unit to micrometer instead of the default mm. To do that, 1. change the unit in Application settings / Units and 2. update ruler display settings using the script below (it can be copied to your Application startup script):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lm = slicer.app.layoutManager()&lt;br /&gt;
for sliceViewName in lm.sliceViewNames():&lt;br /&gt;
  sliceView = lm.sliceWidget(sliceViewName).sliceView()&lt;br /&gt;
  displayableManager = sliceView.displayableManagerByClassName(&amp;quot;vtkMRMLRulerDisplayableManager&amp;quot;)&lt;br /&gt;
  displayableManager.RemoveAllRulerScalePresets()&lt;br /&gt;
  displayableManager.AddRulerScalePreset(   0.001, 5, 2, &amp;quot;nm&amp;quot;, 1000.0)&lt;br /&gt;
  displayableManager.AddRulerScalePreset(   0.010, 5, 2, &amp;quot;nm&amp;quot;, 1000.0)&lt;br /&gt;
  displayableManager.AddRulerScalePreset(   0.100, 5, 2, &amp;quot;nm&amp;quot;, 1000.0)&lt;br /&gt;
  displayableManager.AddRulerScalePreset(   0.500, 5, 1, &amp;quot;nm&amp;quot;, 1000.0)&lt;br /&gt;
  displayableManager.AddRulerScalePreset(   1.0,   5, 2, &amp;quot;um&amp;quot;,    1.0)&lt;br /&gt;
  displayableManager.AddRulerScalePreset(   5.0,   5, 1, &amp;quot;um&amp;quot;,    1.0)&lt;br /&gt;
  displayableManager.AddRulerScalePreset(  10.0,   5, 2, &amp;quot;um&amp;quot;,    1.0)&lt;br /&gt;
  displayableManager.AddRulerScalePreset(  50.0,   5, 1, &amp;quot;um&amp;quot;,    1.0)&lt;br /&gt;
  displayableManager.AddRulerScalePreset( 100.0,   5, 2, &amp;quot;um&amp;quot;,    1.0)&lt;br /&gt;
  displayableManager.AddRulerScalePreset( 500.0,   5, 1, &amp;quot;um&amp;quot;,    1.0)&lt;br /&gt;
  displayableManager.AddRulerScalePreset(1000.0,   5, 2, &amp;quot;mm&amp;quot;,    0.001)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Show orientation marker in all views==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
viewNodes = slicer.util.getNodesByClass('vtkMRMLAbstractViewNode')&lt;br /&gt;
for viewNode in viewNodes:&lt;br /&gt;
  viewNode.SetOrientationMarkerType(slicer.vtkMRMLAbstractViewNode.OrientationMarkerTypeAxes)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Show a slice view outside the view layout==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
layoutName = &amp;quot;TestSlice1&amp;quot;&lt;br /&gt;
layoutLabel = &amp;quot;TS1&amp;quot;&lt;br /&gt;
# ownerNode manages this view instead of the layout manager (it can be any node in the scene)&lt;br /&gt;
viewOwnerNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLScriptedModuleNode&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Create MRML nodes&lt;br /&gt;
viewNode = slicer.vtkMRMLSliceNode()&lt;br /&gt;
viewNode.SetName(layoutName)&lt;br /&gt;
viewNode.SetLayoutName(layoutName)&lt;br /&gt;
viewNode.SetLayoutLabel(layoutLabel)&lt;br /&gt;
viewNode.SetLayoutColor(1, 1, 0)&lt;br /&gt;
viewNode.SetAndObserveParentLayoutNodeID(viewOwnerNode.GetID())&lt;br /&gt;
viewNode = slicer.mrmlScene.AddNode(viewNode)&lt;br /&gt;
sliceCompositeNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLSliceCompositeNode&amp;quot;)&lt;br /&gt;
sliceCompositeNode.SetLayoutName(layoutName)&lt;br /&gt;
&lt;br /&gt;
# Create widget&lt;br /&gt;
viewWidget = slicer.qMRMLSliceWidget()&lt;br /&gt;
viewWidget.sliceViewName = layoutName&lt;br /&gt;
viewWidget.sliceViewLabel = layoutLabel&lt;br /&gt;
c = viewNode.GetLayoutColor()&lt;br /&gt;
viewWidget.sliceViewColor = qt.QColor.fromRgbF(c[0],c[1],c[2])&lt;br /&gt;
viewWidget.setMRMLScene(slicer.mrmlScene)&lt;br /&gt;
viewWidget.setMRMLSliceNode(viewNode)&lt;br /&gt;
sliceLogics = slicer.app.applicationLogic().GetSliceLogics()&lt;br /&gt;
viewWidget.setSliceLogics(sliceLogics)&lt;br /&gt;
sliceLogics.AddItem(viewWidget.sliceLogic())&lt;br /&gt;
viewWidget.show()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Show a 3D view outside the view layout==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
layoutName = &amp;quot;Test3DView&amp;quot;&lt;br /&gt;
layoutLabel = &amp;quot;T3&amp;quot;&lt;br /&gt;
layoutColor = [1.0, 1.0, 0.0]&lt;br /&gt;
# ownerNode manages this view instead of the layout manager (it can be any node in the scene)&lt;br /&gt;
viewOwnerNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLScriptedModuleNode&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Create MRML node&lt;br /&gt;
viewNode = slicer.vtkMRMLViewNode()&lt;br /&gt;
viewNode.SetName(layoutName)&lt;br /&gt;
viewNode.SetLayoutName(layoutName)&lt;br /&gt;
viewNode.SetLayoutLabel(layoutLabel)&lt;br /&gt;
viewNode.SetLayoutColor(layoutColor)&lt;br /&gt;
viewNode.SetAndObserveParentLayoutNodeID(viewOwnerNode.GetID())&lt;br /&gt;
viewNode = slicer.mrmlScene.AddNode(viewNode)&lt;br /&gt;
&lt;br /&gt;
# Create widget&lt;br /&gt;
viewWidget = slicer.qMRMLThreeDWidget()&lt;br /&gt;
viewWidget.viewLabel = layoutLabel&lt;br /&gt;
viewWidget.viewColor = qt.QColor.fromRgbF(*layoutColor)&lt;br /&gt;
viewWidget.setMRMLScene(slicer.mrmlScene)&lt;br /&gt;
viewWidget.setMRMLViewNode(viewNode)&lt;br /&gt;
viewWidget.show()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get displayable manager of a certain type for a certain view==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
threeDViewWidget = slicer.app.layoutManager().threeDWidget(0)&lt;br /&gt;
modelDisplayableManager = threeDViewWidget.threeDView().displayableManagerByClassName('vtkMRMLModelDisplayableManager')&lt;br /&gt;
if modelDisplayableManager is None:&lt;br /&gt;
  logging.error('Failed to find the model displayable manager')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Running an ITK filter in Python using SimpleITK==&lt;br /&gt;
Open the &amp;quot;Sample Data&amp;quot; module and download &amp;quot;MR Head&amp;quot;, then paste the following snippet in Python interactor:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import SampleData&lt;br /&gt;
import SimpleITK as sitk&lt;br /&gt;
import sitkUtils&lt;br /&gt;
&lt;br /&gt;
# Get input volume node&lt;br /&gt;
inputVolumeNode = SampleData.SampleDataLogic().downloadMRHead()&lt;br /&gt;
# Create new volume node for output&lt;br /&gt;
outputVolumeNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLScalarVolumeNode', 'MRHeadFiltered')&lt;br /&gt;
&lt;br /&gt;
# Run processing&lt;br /&gt;
inputImage = sitkUtils.PullVolumeFromSlicer(inputVolumeNode)&lt;br /&gt;
filter = sitk.SignedMaurerDistanceMapImageFilter()&lt;br /&gt;
outputImage = filter.Execute(inputImage)&lt;br /&gt;
sitkUtils.PushVolumeToSlicer(outputImage, outputVolumeNode)&lt;br /&gt;
&lt;br /&gt;
# Show processing result&lt;br /&gt;
slicer.util.setSliceViewerLayers(background=outputVolumeNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More information:&lt;br /&gt;
&lt;br /&gt;
*See the SimpleITK documentation for SimpleITK examples: http://www.itk.org/SimpleITKDoxygen/html/examples.html&lt;br /&gt;
*sitkUtils in Slicer is used for pushing and pulling images from Slicer to SimpleITK: https://github.com/Slicer/Slicer/blob/master/Base/Python/sitkUtils.py&lt;br /&gt;
&lt;br /&gt;
==Get current mouse coordinates in a slice view==&lt;br /&gt;
&lt;br /&gt;
You can get 3D (RAS) coordinates of the current mouse cursor from the crosshair singleton node as shown in the example below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def onMouseMoved(observer,eventid):  &lt;br /&gt;
  ras=[0,0,0]&lt;br /&gt;
  crosshairNode.GetCursorPositionRAS(ras)&lt;br /&gt;
  print(ras)&lt;br /&gt;
&lt;br /&gt;
crosshairNode=slicer.util.getNode('Crosshair') &lt;br /&gt;
crosshairNode.AddObserver(slicer.vtkMRMLCrosshairNode.CursorPositionModifiedEvent, onMouseMoved)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get DataProbe text==&lt;br /&gt;
&lt;br /&gt;
You can get the mouse location in pixel coordinates along with the pixel value at the mouse by hitting the '.' (period) key in a slice view after pasting in the following code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def printDataProbe():&lt;br /&gt;
  infoWidget = slicer.modules.DataProbeInstance.infoWidget&lt;br /&gt;
  for layer in ('B', 'F', 'L'):&lt;br /&gt;
    print(infoWidget.layerNames[layer].text, infoWidget.layerIJKs[layer].text, infoWidget.layerValues[layer].text)&lt;br /&gt;
&lt;br /&gt;
s = qt.QShortcut(qt.QKeySequence('.'), mainWindow())&lt;br /&gt;
s.connect('activated()', printDataProbe)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get axial slice as numpy array==&lt;br /&gt;
&lt;br /&gt;
An axis-aligned (axial/sagittal/coronal/) slices of a volume can be extracted using simple numpy array indexing. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import SampleData&lt;br /&gt;
volumeNode = SampleData.SampleDataLogic().downloadMRHead()&lt;br /&gt;
sliceIndex = 12&lt;br /&gt;
&lt;br /&gt;
voxels = slicer.util.arrayFromVolume(volumeNode)  # Get volume as numpy array&lt;br /&gt;
slice = voxels[sliceIndex:,:]  # Get one slice of the volume as numpy array&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get reformatted image from a slice viewer as numpy array==&lt;br /&gt;
&lt;br /&gt;
Set up 'red' slice viewer to show thick slab reconstructed from 3 slices:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sliceNodeID = 'vtkMRMLSliceNodeRed'&lt;br /&gt;
&lt;br /&gt;
# Get image data from slice view&lt;br /&gt;
sliceNode = slicer.mrmlScene.GetNodeByID(sliceNodeID)&lt;br /&gt;
appLogic = slicer.app.applicationLogic()&lt;br /&gt;
sliceLogic = appLogic.GetSliceLogic(sliceNode)&lt;br /&gt;
sliceLayerLogic = sliceLogic.GetBackgroundLayer()&lt;br /&gt;
reslice = sliceLayerLogic.GetReslice()&lt;br /&gt;
reslicedImage = vtk.vtkImageData()&lt;br /&gt;
reslicedImage.DeepCopy(reslice.GetOutput())&lt;br /&gt;
&lt;br /&gt;
# Create new volume node using resliced image&lt;br /&gt;
volumeNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLScalarVolumeNode&amp;quot;)&lt;br /&gt;
volumeNode.SetIJKToRASMatrix(sliceNode.GetXYToRAS())&lt;br /&gt;
volumeNode.SetAndObserveImageData(reslicedImage)&lt;br /&gt;
volumeNode.CreateDefaultDisplayNodes()&lt;br /&gt;
volumeNode.CreateDefaultStorageNode()&lt;br /&gt;
&lt;br /&gt;
# Get voxels as a numpy array&lt;br /&gt;
voxels = slicer.util.arrayFromVolume(volumeNode)&lt;br /&gt;
print(voxels.shape)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Combine multiple volumes into one==&lt;br /&gt;
&lt;br /&gt;
This example combines two volumes into a new one by subtracting one from the other.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import SampleData&lt;br /&gt;
[input1Volume, input2Volume] = SampleData.SampleDataLogic().downloadDentalSurgery()&lt;br /&gt;
&lt;br /&gt;
import slicer.util&lt;br /&gt;
a = slicer.util.arrayFromVolume(input1Volume)&lt;br /&gt;
b = slicer.util.arrayFromVolume(input2Volume)&lt;br /&gt;
&lt;br /&gt;
# 'a' and 'b' are numpy arrays,&lt;br /&gt;
# they can be combined using any numpy array operations&lt;br /&gt;
# to produce the result array 'c'&lt;br /&gt;
c = b-a&lt;br /&gt;
&lt;br /&gt;
volumeNode = slicer.modules.volumes.logic().CloneVolume(input1Volume, &amp;quot;Difference&amp;quot;)&lt;br /&gt;
slicer.util.updateVolumeFromArray(volumeNode, c)&lt;br /&gt;
setSliceViewerLayers(background=volumeNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Add noise to image==&lt;br /&gt;
&lt;br /&gt;
This example shows how to add simulated noise to a volume.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import SampleData&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# Get a sample input volume node&lt;br /&gt;
volumeNode = SampleData.SampleDataLogic().downloadMRHead()&lt;br /&gt;
&lt;br /&gt;
# Get volume as numpy array and add noise&lt;br /&gt;
voxels = slicer.util.arrayFromVolume(volumeNode)&lt;br /&gt;
voxels[:] = voxels + np.random.normal(0.0, 20.0, size=voxels.shape)&lt;br /&gt;
slicer.util.arrayFromVolumeModified(volumeNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mask volume using segmentation==&lt;br /&gt;
&lt;br /&gt;
This example shows how to blank out voxels of a volume outside all segments.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Input nodes&lt;br /&gt;
volumeNode = getNode('MRHead')&lt;br /&gt;
segmentationNode = getNode('Segmentation')&lt;br /&gt;
&lt;br /&gt;
# Write segmentation to labelmap volume node with a geometry that matches the volume node&lt;br /&gt;
labelmapVolumeNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLLabelMapVolumeNode')&lt;br /&gt;
slicer.modules.segmentations.logic().ExportVisibleSegmentsToLabelmapNode(segmentationNode, labelmapVolumeNode, volumeNode)&lt;br /&gt;
&lt;br /&gt;
# Masking&lt;br /&gt;
import numpy as np&lt;br /&gt;
voxels = slicer.util.arrayFromVolume(volumeNode)&lt;br /&gt;
mask = slicer.util.arrayFromVolume(labelmapVolumeNode)&lt;br /&gt;
maskedVoxels = np.copy(voxels)  # we don't want to modify the original volume&lt;br /&gt;
maskedVoxels[mask==0] = 0&lt;br /&gt;
&lt;br /&gt;
# Write masked volume to volume node and show it&lt;br /&gt;
maskedVolumeNode = slicer.modules.volumes.logic().CloneVolume(volumeNode, &amp;quot;Masked&amp;quot;)&lt;br /&gt;
slicer.util.updateVolumeFromArray(maskedVolumeNode, maskedVoxels)&lt;br /&gt;
slicer.util.setSliceViewerLayers(maskedVolumeNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Apply random deformations to image==&lt;br /&gt;
&lt;br /&gt;
This example shows how to apply random translation, rotation, and deformations to a volume to simulate variation in patient positioning, soft tissue motion, and random anatomical variations.&lt;br /&gt;
Control points are placed on a regularly spaced grid and then each control point is displaced by a random amount.&lt;br /&gt;
Thin-plate spline transform is computed from the original and transformed point list.&lt;br /&gt;
&lt;br /&gt;
https://gist.github.com/lassoan/428af5285da75dc033d32ebff65ba940&lt;br /&gt;
&lt;br /&gt;
==Thick slab reconstruction and maximum/minimum intensity volume projections==&lt;br /&gt;
&lt;br /&gt;
Set up 'red' slice viewer to show thick slab reconstructed from 3 slices:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sliceNode = slicer.mrmlScene.GetNodeByID('vtkMRMLSliceNodeRed')&lt;br /&gt;
appLogic = slicer.app.applicationLogic()&lt;br /&gt;
sliceLogic = appLogic.GetSliceLogic(sliceNode)&lt;br /&gt;
sliceLayerLogic = sliceLogic.GetBackgroundLayer()&lt;br /&gt;
reslice = sliceLayerLogic.GetReslice()&lt;br /&gt;
reslice.SetSlabModeToMean()&lt;br /&gt;
reslice.SetSlabNumberOfSlices(10) # mean of 10 slices will computed&lt;br /&gt;
reslice.SetSlabSliceSpacingFraction(0.3) # spacing between each slice is 0.3 pixel (total 10 * 0.3 = 3 pixel neighborhood)&lt;br /&gt;
sliceNode.Modified()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Set up 'red' slice viewer to show maximum intensity projection (MIP):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sliceNode = slicer.mrmlScene.GetNodeByID('vtkMRMLSliceNodeRed')&lt;br /&gt;
appLogic = slicer.app.applicationLogic()&lt;br /&gt;
sliceLogic = appLogic.GetSliceLogic(sliceNode)&lt;br /&gt;
sliceLayerLogic = sliceLogic.GetBackgroundLayer()&lt;br /&gt;
reslice = sliceLayerLogic.GetReslice()&lt;br /&gt;
reslice.SetSlabModeToMax()&lt;br /&gt;
reslice.SetSlabNumberOfSlices(600) # use a large number of slices (600) to cover the entire volume&lt;br /&gt;
reslice.SetSlabSliceSpacingFraction(0.5) # spacing between slices are 0.5 pixel (supersampling is useful to reduce interpolation artifacts)&lt;br /&gt;
sliceNode.Modified()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The projected image is available in a ''vtkImageData'' object by calling ''reslice.GetOutput()''.&lt;br /&gt;
&lt;br /&gt;
==Change default file type for nodes (that have never been saved yet)==&lt;br /&gt;
Default node can be specified that will be used as a basis of all new storage nodes. This can be used for setting default file extension. For example, change file format to STL for model nodes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defaultModelStorageNode = slicer.vtkMRMLModelStorageNode()&lt;br /&gt;
defaultModelStorageNode.SetDefaultWriteFileExtension('stl')&lt;br /&gt;
slicer.mrmlScene.AddDefaultNode(defaultModelStorageNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To permanently change default file extension on your computer, copy-paste the code above into your application startup script (you can find its location in menu: Edit / Application settings / General / Application startup script).&lt;br /&gt;
&lt;br /&gt;
==Change file type for saving for all volumes (with already existing storage nodes)==&lt;br /&gt;
&lt;br /&gt;
If it is not necessary to preserve file paths then the simplest is to configure default storage node (as shown in the example above), then delete all existing storage nodes. When save dialog is opened, default storage nodes will be recreated.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Delete existing model storage nodes so that they will be recreated with default settings&lt;br /&gt;
existingModelStorageNodes = slicer.util.getNodesByClass('vtkMRMLModelStorageNode')&lt;br /&gt;
for modelStorageNode in existingModelStorageNodes:&lt;br /&gt;
  slicer.mrmlScene.RemoveNode(modelStorageNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To update existing storage nodes to use new file extension (but keep all other parameters unchanged) you can use this approach (example is for volume storage):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
requiredFileExtension = '.nia'&lt;br /&gt;
originalFileExtension = '.nrrd'&lt;br /&gt;
volumeNodes = slicer.util.getNodesByClass('vtkMRMLScalarVolumeNode')&lt;br /&gt;
for volumeNode in volumeNodes:&lt;br /&gt;
  volumeStorageNode = volumeNode.GetStorageNode()&lt;br /&gt;
  if not volumeStorageNode:&lt;br /&gt;
    volumeNode.AddDefaultStorageNode()&lt;br /&gt;
    volumeStorageNode = volumeNode.GetStorageNode()&lt;br /&gt;
    volumeStorageNode.SetFileName(volumeNode.GetName()+requiredFileExtension)&lt;br /&gt;
  else:&lt;br /&gt;
    volumeStorageNode.SetFileName(volumeStorageNode.GetFileName().replace(originalFileExtension, requiredFileExtension))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To set all volume nodes to save uncompressed by default (add this to .slicerrc.py so it takes effect for the whole session):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#set the default volume storage to not compress by default&lt;br /&gt;
defaultVolumeStorageNode = slicer.vtkMRMLVolumeArchetypeStorageNode()&lt;br /&gt;
defaultVolumeStorageNode.SetUseCompression(0)&lt;br /&gt;
slicer.mrmlScene.AddDefaultNode(defaultVolumeStorageNode)&lt;br /&gt;
logging.info(&amp;quot;Volume nodes will be stored uncompressed by default&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Same thing as above, but applied to all  segmentations instead of volumes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#set the default volume storage to not compress by default&lt;br /&gt;
defaultVolumeStorageNode = slicer.vtkMRMLSegmentationStorageNode()&lt;br /&gt;
defaultVolumeStorageNode.SetUseCompression(0)&lt;br /&gt;
slicer.mrmlScene.AddDefaultNode(defaultVolumeStorageNode)&lt;br /&gt;
logging.info(&amp;quot;Segmentation nodes will be stored uncompressed &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sequences==&lt;br /&gt;
&lt;br /&gt;
===Access voxels of a 4D volume as numpy array===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Get sequence node&lt;br /&gt;
import SampleData&lt;br /&gt;
sequenceNode = SampleData.SampleDataLogic().downloadSample('CTPCardioSeq')&lt;br /&gt;
# Alternatively, get the first sequence node in the scene:&lt;br /&gt;
# sequenceNode = slicer.util.getNodesByClass('vtkMRMLSequenceNode')[0]&lt;br /&gt;
&lt;br /&gt;
# Get voxels of itemIndex'th volume as numpy array&lt;br /&gt;
itemIndex = 5&lt;br /&gt;
voxelArray = slicer.util.arrayFromVolume(sequenceNode.GetNthDataNode(itemIndex))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Get index value===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
print(&amp;quot;Index value of {0}th item: {1} = {2} {3}&amp;quot;.format(&lt;br /&gt;
  itemIndex,&lt;br /&gt;
  sequenceNode.GetIndexName(),&lt;br /&gt;
  sequenceNode.GetNthIndexValue(itemIndex),&lt;br /&gt;
  sequenceNode.GetIndexUnit()))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Browse a sequence and access currently displayed nodes===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Get a sequence node&lt;br /&gt;
import SampleData&lt;br /&gt;
sequenceNode = SampleData.SampleDataLogic().downloadSample('CTPCardioSeq')&lt;br /&gt;
&lt;br /&gt;
# Find corresponding sequence browser node&lt;br /&gt;
browserNode = slicer.modules.sequences.logic().GetFirstBrowserNodeForSequenceNode(sequenceNode)&lt;br /&gt;
&lt;br /&gt;
# Print sequence information&lt;br /&gt;
print(&amp;quot;Number of items in the sequence: {0}&amp;quot;.format(browserNode.GetNumberOfItems()))&lt;br /&gt;
print(&amp;quot;Index name: {0}&amp;quot;.format(browserNode.GetMasterSequenceNode().GetIndexName()))&lt;br /&gt;
&lt;br /&gt;
# Jump to a selected sequence item&lt;br /&gt;
browserNode.SetSelectedItemNumber(5)&lt;br /&gt;
&lt;br /&gt;
# Get currently displayed volume node voxels as numpy array&lt;br /&gt;
volumeNode = browserNode.GetProxyNode(sequenceNode)&lt;br /&gt;
voxelArray = slicer.util.arrayFromVolume(volumeNode)&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
===Concatenate all sequences in the scene into a new sequence===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Get all sequence nodes in the scene&lt;br /&gt;
sequenceNodes = slicer.util.getNodesByClass('vtkMRMLSequenceNode')&lt;br /&gt;
mergedSequenceNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLSequenceNode', 'Merged sequence')&lt;br /&gt;
&lt;br /&gt;
# Merge all sequence nodes into a new sequence node&lt;br /&gt;
mergedIndexValue = 0&lt;br /&gt;
for sequenceNode in sequenceNodes:&lt;br /&gt;
    for itemIndex in range(sequenceNode.GetNumberOfDataNodes()):&lt;br /&gt;
        dataNode = sequenceNode.GetNthDataNode(itemIndex)&lt;br /&gt;
        mergedSequenceNode.SetDataNodeAtValue(dataNode, str(mergedIndexValue))&lt;br /&gt;
        mergedIndexValue += 1&lt;br /&gt;
    # Delete the sequence node we copied the data from, to prevent sharing of the same&lt;br /&gt;
    # node by multiple sequences&lt;br /&gt;
    slicer.mrmlScene.RemoveNode(sequenceNode)&lt;br /&gt;
&lt;br /&gt;
# Create a sequence browser node for the new merged sequence&lt;br /&gt;
mergedSequenceBrowserNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLSequenceBrowserNode', 'Merged')&lt;br /&gt;
mergedSequenceBrowserNode.AddSynchronizedSequenceNode(mergedSequenceNode)&lt;br /&gt;
slicer.modules.sequencebrowser.setToolBarActiveBrowserNode(mergedSequenceBrowserNode)&lt;br /&gt;
# Show proxy node in slice viewers&lt;br /&gt;
mergedProxyNode = mergedSequenceBrowserNode.GetProxyNode(mergedSequenceNode)&lt;br /&gt;
slicer.util.setSliceViewerLayers(background=mergedProxyNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Segmentations==&lt;br /&gt;
&lt;br /&gt;
===Create a segmentation from a labelmap volume and display in 3D===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
labelmapVolumeNode = getNode('label')&lt;br /&gt;
seg = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLSegmentationNode')&lt;br /&gt;
slicer.modules.segmentations.logic().ImportLabelmapToSegmentationNode(labelmapVolumeNode, seg)&lt;br /&gt;
seg.CreateClosedSurfaceRepresentation()&lt;br /&gt;
slicer.mrmlScene.RemoveNode(labelmapVolumeNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last line is optional. It removes the original labelmap volume so that the same information is not shown twice.&lt;br /&gt;
&lt;br /&gt;
===Export labelmap node from segmentation node===&lt;br /&gt;
&lt;br /&gt;
Export labelmap matching reference geometry of the segmentation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentationNode = getNode('Segmentation')&lt;br /&gt;
labelmapVolumeNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLLabelMapVolumeNode')&lt;br /&gt;
slicer.modules.segmentations.logic().ExportAllSegmentsToLabelmapNode(segmentationNode, labelmapVolumeNode, slicer.vtkSegmentation.EXTENT_REFERENCE_GEOMETRY)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Export smallest possible labelmap:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentationNode = getNode('Segmentation')&lt;br /&gt;
labelmapVolumeNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLLabelMapVolumeNode')&lt;br /&gt;
slicer.modules.segmentations.logic().ExportAllSegmentsToLabelmapNode(segmentationNode, labelmapVolumeNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Export labelmap that matches geometry of a chosen reference volume:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentationNode = getNode('Segmentation')&lt;br /&gt;
labelmapVolumeNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLLabelMapVolumeNode')&lt;br /&gt;
slicer.modules.segmentations.logic().ExportVisibleSegmentsToLabelmapNode(segmentationNode, labelmapVolumeNode, referenceVolumeNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Export a selection of segments (identified by their names):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentNames = [&amp;quot;Prostate&amp;quot;, &amp;quot;Urethra&amp;quot;]&lt;br /&gt;
segmentIds = vtk.vtkStringArray()&lt;br /&gt;
for segmentName in segmentNames:&lt;br /&gt;
    segmentId = segmentationNode.GetSegmentation().GetSegmentIdBySegmentName(segmentName)&lt;br /&gt;
    segmentIds.InsertNextValue(segmentId)&lt;br /&gt;
slicer.vtkSlicerSegmentationsModuleLogic.ExportSegmentsToLabelmapNode(segmentationNode, segmentIds, labelmapVolumeNode, referenceVolumeNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Export to file by pressing Ctrl+Shift+S key:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
outputPath = &amp;quot;c:/tmp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def exportLabelmap():&lt;br /&gt;
    segmentationNode = slicer.mrmlScene.GetFirstNodeByClass(&amp;quot;vtkMRMLSegmentationNode&amp;quot;)&lt;br /&gt;
    referenceVolumeNode = slicer.mrmlScene.GetFirstNodeByClass(&amp;quot;vtkMRMLScalarVolumeNode&amp;quot;)&lt;br /&gt;
    labelmapVolumeNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLLabelMapVolumeNode')&lt;br /&gt;
    slicer.modules.segmentations.logic().ExportVisibleSegmentsToLabelmapNode(segmentationNode, labelmapVolumeNode, referenceVolumeNode)&lt;br /&gt;
    filepath = outputPath + &amp;quot;/&amp;quot; + referenceVolumeNode.GetName()+&amp;quot;-label.nrrd&amp;quot;&lt;br /&gt;
    slicer.util.saveNode(labelmapVolumeNode, filepath)&lt;br /&gt;
    slicer.mrmlScene.RemoveNode(labelmapVolumeNode.GetDisplayNode().GetColorNode())&lt;br /&gt;
    slicer.mrmlScene.RemoveNode(labelmapVolumeNode)&lt;br /&gt;
    slicer.util.delayDisplay(&amp;quot;Segmentation saved to &amp;quot;+filepath)&lt;br /&gt;
&lt;br /&gt;
shortcut = qt.QShortcut(slicer.util.mainWindow())&lt;br /&gt;
shortcut.setKey(qt.QKeySequence('Ctrl+Shift+s'))&lt;br /&gt;
shortcut.connect( 'activated()', exportLabelmap)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Export model nodes from segmentation node===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentationNode = getNode(&amp;quot;Segmentation&amp;quot;)&lt;br /&gt;
shNode = slicer.mrmlScene.GetSubjectHierarchyNode()&lt;br /&gt;
exportFolderItemId = shNode.CreateFolderItem(shNode.GetSceneItemID(), &amp;quot;Segments&amp;quot;)&lt;br /&gt;
slicer.modules.segmentations.logic().ExportAllSegmentsToModels(segmentationNode, exportFolderItemId)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Show a segmentation in 3D===&lt;br /&gt;
Segmentation can only be shown in 3D if closed surface representation (or other 3D-displayable representation) is available. To create closed surface representation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentation.CreateClosedSurfaceRepresentation()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Get a representation of a segment===&lt;br /&gt;
Access binary labelmap stored in a segmentation node (without exporting it to a volume node) - if it does not exist, it will return None:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
image = slicer.vtkOrientedImageData()&lt;br /&gt;
segmentationNode.GetBinaryLabelmapRepresentation(segmentID, image)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Get closed surface, if it does not exist, it will return None:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
outputPolyData = vtk.vtkPolyData()&lt;br /&gt;
segmentationNode.GetClosedSurfaceRepresentation(segmentID, outputPolyData)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Get binary labelmap representation. If it does not exist then it will be created for that single segment. Applies parent transforms by default (if not desired, another argument needs to be added to the end: false):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import vtkSegmentationCorePython as vtkSegmentationCore&lt;br /&gt;
outputOrientedImageData = vtkSegmentationCore.vtkOrientedImageData()&lt;br /&gt;
slicer.vtkSlicerSegmentationsModuleLogic.GetSegmentBinaryLabelmapRepresentation(segmentationNode, segmentID, outputOrientedImageData)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Same as above, for closed surface representation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
outputPolyData = vtk.vtkPolyData()&lt;br /&gt;
slicer.vtkSlicerSegmentationsModuleLogic.GetSegmentClosedSurfaceRepresentation(segmentationNode, segmentID, outputPolyData)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Convert all segments using default path and conversion parameters===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentationNode.CreateBinaryLabelmapRepresentation()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Convert all segments using custom path or conversion parameters===&lt;br /&gt;
Change reference image geometry parameter based on an existing referenceImageData image:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import vtkSegmentationCorePython as vtkSegmentationCore&lt;br /&gt;
referenceGeometry = vtkSegmentationCore.vtkSegmentationConverter.SerializeImageGeometry(referenceImageData)&lt;br /&gt;
segmentation.SetConversionParameter(vtkSegmentationCore.vtkSegmentationConverter.GetReferenceImageGeometryParameterName(), referenceGeometry)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Re-convert using a modified conversion parameter===&lt;br /&gt;
Changing smoothing factor for closed surface generation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import vtkSegmentationCorePython as vtkSegmentationCore&lt;br /&gt;
segmentation = getNode('Segmentation').GetSegmentation()&lt;br /&gt;
&lt;br /&gt;
# Turn of surface smoothing&lt;br /&gt;
segmentation.SetConversionParameter('Smoothing factor','0.0')&lt;br /&gt;
&lt;br /&gt;
# Recreate representation using modified parameters (and default conversion path)&lt;br /&gt;
segmentation.RemoveRepresentation(vtkSegmentationCore.vtkSegmentationConverter.GetSegmentationClosedSurfaceRepresentationName())&lt;br /&gt;
segmentation.CreateRepresentation(vtkSegmentationCore.vtkSegmentationConverter.GetSegmentationClosedSurfaceRepresentationName())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Create keyboard shortcut for toggling sphere brush for paint and erase effects===&lt;br /&gt;
&lt;br /&gt;
    def toggleSphereBrush():&lt;br /&gt;
      segmentEditorWidget = slicer.modules.segmenteditor.widgetRepresentation().self().editor&lt;br /&gt;
      paintEffect = segmentEditorWidget.effectByName(&amp;quot;Paint&amp;quot;)&lt;br /&gt;
      isSphere = paintEffect.integerParameter('BrushSphere')&lt;br /&gt;
      # BrushSphere is &amp;quot;common&amp;quot; parameter (shared between paint and erase)&lt;br /&gt;
      paintEffect.setCommonParameter(&amp;quot;BrushSphere&amp;quot;, 0 if isSphere else 1)&lt;br /&gt;
    &lt;br /&gt;
    shortcut = qt.QShortcut(slicer.util.mainWindow())&lt;br /&gt;
    shortcut.setKey(qt.QKeySequence(&amp;quot;s&amp;quot;))&lt;br /&gt;
    shortcut.connect('activated()', toggleSphereBrush)&lt;br /&gt;
&lt;br /&gt;
===Get centroid of a segment in world (RAS) coordinates===&lt;br /&gt;
&lt;br /&gt;
This example shows how to get centroid of a segment in world coordinates and show that position in all slice views.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentationNode = getNode('Segmentation')&lt;br /&gt;
segmentId = 'Segment_1'&lt;br /&gt;
&lt;br /&gt;
# Get array voxel coordinates&lt;br /&gt;
import numpy as np&lt;br /&gt;
seg=arrayFromSegment(segmentation_node, segmentId)&lt;br /&gt;
# numpy array has voxel coordinates in reverse order (KJI instead of IJK)&lt;br /&gt;
# and the array is cropped to minimum size in the segmentation&lt;br /&gt;
mean_KjiCropped = [coords.mean() for coords in np.nonzero(seg)]&lt;br /&gt;
&lt;br /&gt;
# Get segmentation voxel coordinates&lt;br /&gt;
segImage = segmentationNode.GetBinaryLabelmapRepresentation(segmentId)&lt;br /&gt;
segImageExtent = segImage.GetExtent()&lt;br /&gt;
# origin of the array in voxel coordinates is determined by the start extent&lt;br /&gt;
mean_Ijk = [mean_KjiCropped[2], mean_KjiCropped[1], mean_KjiCropped[0]] + np.array([segImageExtent[0], segImageExtent[2], segImageExtent[4]])&lt;br /&gt;
&lt;br /&gt;
# Get segmentation physical coordinates&lt;br /&gt;
ijkToWorld = vtk.vtkMatrix4x4()&lt;br /&gt;
segImage.GetImageToWorldMatrix(ijkToWorld)&lt;br /&gt;
mean_World = [0, 0, 0, 1]&lt;br /&gt;
ijkToRas.MultiplyPoint(np.append(mean_Ijk,1.0), mean_World)&lt;br /&gt;
mean_World = mean_World[0:3]&lt;br /&gt;
&lt;br /&gt;
# If segmentation node is transformed, apply that transform to get RAS coordinates&lt;br /&gt;
transformWorldToRas = vtk.vtkGeneralTransform()&lt;br /&gt;
slicer.vtkMRMLTransformNode.GetTransformBetweenNodes(segmentationNode.GetParentTransformNode(), None, transformWorldToRas)&lt;br /&gt;
mean_Ras = transformWorldToRas.TransformPoint(mean_World)&lt;br /&gt;
&lt;br /&gt;
# Show mean position value and jump to it in all slice viewers&lt;br /&gt;
print(mean_Ras)&lt;br /&gt;
slicer.modules.markups.logic().JumpSlicesToLocation(mean_Ras[0], mean_Ras[1], mean_Ras[2], True)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Get histogram of a segmented region===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Generate input data&lt;br /&gt;
################################################&lt;br /&gt;
&lt;br /&gt;
# Load master volume&lt;br /&gt;
import SampleData&lt;br /&gt;
sampleDataLogic = SampleData.SampleDataLogic()&lt;br /&gt;
masterVolumeNode = sampleDataLogic.downloadMRBrainTumor1()&lt;br /&gt;
&lt;br /&gt;
# Create segmentation&lt;br /&gt;
segmentationNode = slicer.vtkMRMLSegmentationNode()&lt;br /&gt;
slicer.mrmlScene.AddNode(segmentationNode)&lt;br /&gt;
segmentationNode.CreateDefaultDisplayNodes() # only needed for display&lt;br /&gt;
segmentationNode.SetReferenceImageGeometryParameterFromVolumeNode(masterVolumeNode)&lt;br /&gt;
&lt;br /&gt;
# Create segment&lt;br /&gt;
tumorSeed = vtk.vtkSphereSource()&lt;br /&gt;
tumorSeed.SetCenter(-6, 30, 28)&lt;br /&gt;
tumorSeed.SetRadius(25)&lt;br /&gt;
tumorSeed.Update()&lt;br /&gt;
segmentationNode.AddSegmentFromClosedSurfaceRepresentation(tumorSeed.GetOutput(), &amp;quot;Segment A&amp;quot;, [1.0,0.0,0.0])&lt;br /&gt;
&lt;br /&gt;
# Compute histogram&lt;br /&gt;
################################################&lt;br /&gt;
&lt;br /&gt;
labelValue = 1  # label value of first segment&lt;br /&gt;
&lt;br /&gt;
# Get segmentation as labelmap volume node&lt;br /&gt;
labelmapVolumeNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLLabelMapVolumeNode')&lt;br /&gt;
slicer.modules.segmentations.logic().ExportVisibleSegmentsToLabelmapNode(segmentationNode, labelmapVolumeNode, masterVolumeNode)&lt;br /&gt;
&lt;br /&gt;
# Extract all voxels of the segment as numpy array&lt;br /&gt;
volumeArray = slicer.util.arrayFromVolume(masterVolumeNode)&lt;br /&gt;
labelArray = slicer.util.arrayFromVolume(labelmapVolumeNode)&lt;br /&gt;
segmentVoxels = volumeArray[labelArray==labelValue]&lt;br /&gt;
&lt;br /&gt;
# Compute histogram&lt;br /&gt;
import numpy as np&lt;br /&gt;
histogram = np.histogram(segmentVoxels, bins=50)&lt;br /&gt;
&lt;br /&gt;
# Plot histogram&lt;br /&gt;
################################################&lt;br /&gt;
&lt;br /&gt;
slicer.util.plot(histogram, xColumnIndex = 1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Get segments visible at a selected position===&lt;br /&gt;
&lt;br /&gt;
Show in the console names of segments visible at a markups fiducial position:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentationNode = slicer.mrmlScene.GetFirstNodeByClass(&amp;quot;vtkMRMLSegmentationNode&amp;quot;)&lt;br /&gt;
markupsFiducialNode = slicer.mrmlScene.GetFirstNodeByClass(&amp;quot;vtkMRMLMarkupsFiducialNode&amp;quot;)&lt;br /&gt;
sliceViewLabel = &amp;quot;Red&amp;quot;  # any slice view where segmentation node is visible works&lt;br /&gt;
&lt;br /&gt;
def printSegmentNames(unused1=None, unused2=None):&lt;br /&gt;
    &lt;br /&gt;
    sliceViewWidget = slicer.app.layoutManager().sliceWidget(sliceViewLabel)&lt;br /&gt;
    segmentationsDisplayableManager = sliceViewWidget.sliceView().displayableManagerByClassName('vtkMRMLSegmentationsDisplayableManager2D')&lt;br /&gt;
    ras = [0,0,0]&lt;br /&gt;
    markupsFiducialNode.GetNthControlPointPositionWorld(0, ras)&lt;br /&gt;
    segmentIds = vtk.vtkStringArray()&lt;br /&gt;
    segmentationsDisplayableManager.GetVisibleSegmentsForPosition(ras, segmentationNode.GetDisplayNode(), segmentIds)&lt;br /&gt;
    for idIndex in range(segmentIds.GetNumberOfValues()):&lt;br /&gt;
        segment = segmentationNode.GetSegmentation().GetSegment(segmentIds.GetValue(idIndex))&lt;br /&gt;
        print('Segment found at position {0}: {1}'.format(ras, segment.GetName()))&lt;br /&gt;
&lt;br /&gt;
# Observe markup node changes&lt;br /&gt;
markupsFiducialNode.AddObserver(slicer.vtkMRMLMarkupsPlaneNode.PointModifiedEvent, printSegmentNames)&lt;br /&gt;
printSegmentNames()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Set default segmentation options===&lt;br /&gt;
&lt;br /&gt;
Allow segments to overlap each other by default:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defaultSegmentEditorNode = slicer.vtkMRMLSegmentEditorNode()&lt;br /&gt;
defaultSegmentEditorNode.SetOverwriteMode(slicer.vtkMRMLSegmentEditorNode.OverwriteNone)&lt;br /&gt;
slicer.mrmlScene.AddDefaultNode(defaultSegmentEditorNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To always make this the default, add the lines above to your &lt;br /&gt;
[[Documentation/{{documentation/version}}/Developers/Python_scripting#How_to_systematically_execute_custom_python_code_at_startup_.3F|.slicerrc file]].&lt;br /&gt;
&lt;br /&gt;
===How to run segment editor effects from a script===&lt;br /&gt;
&lt;br /&gt;
Editor effects are complex because they need to handle changing master volumes, undo/redo, masking operations, etc. Therefore, it is recommended to use the effect by instantiating a qMRMLSegmentEditorWidget or use/extract processing logic of the effect and use that from a script.&lt;br /&gt;
&lt;br /&gt;
==== Use Segment editor effects from script (qMRMLSegmentEditorWidget) ====&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
*[https://gist.github.com/lassoan/2d5a5b73645f65a5eb6f8d5f97abf31b brain tumor segmentation using grow from seeds effect]&lt;br /&gt;
*[https://gist.github.com/lassoan/ef30bc27a22a648ead7f82243f5cc7d5 AI-assisted brain tumor segmentation]&lt;br /&gt;
*[https://gist.github.com/lassoan/1673b25d8e7913cbc245b4f09ed853f9 skin surface extraction using thresholding and smoothing]&lt;br /&gt;
*[https://gist.github.com/lassoan/2f5071c562108dac8efe277c78f2620f mask a volume with segments and compute histogram for each region]&lt;br /&gt;
*[https://gist.github.com/lassoan/5ad51c89521d3cd9c5faf65767506b37 create fat/muscle/bone segment by thresholding and report volume of each segment]&lt;br /&gt;
*[https://gist.github.com/lassoan/4d0b94bda52d5b099432e424e03aa2b1 segment cranial cavity automatically in dry bone skull CT]&lt;br /&gt;
*[https://gist.github.com/lassoan/84d1f9a093dbb6a46c0fcc89279d8088 remove patient table from CT image]&lt;br /&gt;
&lt;br /&gt;
Description of effect parameters are available [https://slicer.readthedocs.io/en/latest/developer_guide/modules/segmenteditor.html#effect-parameters here].&lt;br /&gt;
&lt;br /&gt;
==== Use logic of effect from a script ====&lt;br /&gt;
&lt;br /&gt;
This example shows how to perform operations on segmentations using VTK filters ''extracted'' from an effect:&lt;br /&gt;
&lt;br /&gt;
*[https://gist.github.com/lassoan/7c94c334653010696b2bf96abc0ac8e7 brain tumor segmentation using grow from seeds effect]&lt;br /&gt;
&lt;br /&gt;
===Get information from segmentation nrrd file header===&lt;br /&gt;
&lt;br /&gt;
You can use this code snippet to get information from segmentation (.seg.nrrd), for example when creating numpy arrays for generating training data for deep learning networks. This script can be used in any Python environment, not just inside Slicer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# pip_install('pynrrd')&lt;br /&gt;
&lt;br /&gt;
def read_segmentation_info(filename):&lt;br /&gt;
    import nrrd&lt;br /&gt;
    header = nrrd.read_header(filename)&lt;br /&gt;
    segmentation_info = {}&lt;br /&gt;
    segments = []&lt;br /&gt;
    segment_index = 0&lt;br /&gt;
    while True:&lt;br /&gt;
        prefix = &amp;quot;Segment{0}_&amp;quot;.format(segment_index)&lt;br /&gt;
        if not prefix + &amp;quot;ID&amp;quot; in header.keys():&lt;br /&gt;
            break&lt;br /&gt;
        segment = {}&lt;br /&gt;
        segment[&amp;quot;index&amp;quot;] = segment_index&lt;br /&gt;
        segment[&amp;quot;color&amp;quot;] = [float(i) for i in header[prefix + &amp;quot;Color&amp;quot;].split(&amp;quot; &amp;quot;)]  # Segment0_Color:=0.501961 0.682353 0.501961&lt;br /&gt;
        segment[&amp;quot;colorAutoGenerated&amp;quot;] = int(header[prefix + &amp;quot;ColorAutoGenerated&amp;quot;]) != 0  # Segment0_ColorAutoGenerated:=1&lt;br /&gt;
        segment[&amp;quot;extent&amp;quot;] = [int(i) for i in header[prefix + &amp;quot;Extent&amp;quot;].split(&amp;quot; &amp;quot;)]  # Segment0_Extent:=68 203 53 211 24 118&lt;br /&gt;
        segment[&amp;quot;id&amp;quot;] = header[prefix + &amp;quot;ID&amp;quot;]  # Segment0_ID:=Segment_1&lt;br /&gt;
        segment[&amp;quot;labelValue&amp;quot;] = int(header[prefix + &amp;quot;LabelValue&amp;quot;])  # Segment0_LabelValue:=1&lt;br /&gt;
        segment[&amp;quot;layer&amp;quot;] = int(header[prefix + &amp;quot;Layer&amp;quot;])  # Segment0_Layer:=0&lt;br /&gt;
        segment[&amp;quot;name&amp;quot;] = header[prefix + &amp;quot;Name&amp;quot;]  # Segment0_Name:=Segment_1&lt;br /&gt;
        segment[&amp;quot;nameAutoGenerated&amp;quot;] = int(header[prefix + &amp;quot;NameAutoGenerated&amp;quot;]) != 0  # Segment0_NameAutoGenerated:=1&lt;br /&gt;
        # Segment0_Tags:=Segmentation.Status:inprogress|TerminologyEntry:Segmentation category and type - 3D Slicer General Anatomy list&lt;br /&gt;
        # ~SCT^85756007^Tissue~SCT^85756007^Tissue~^^~Anatomic codes - DICOM master list~^^~^^|&lt;br /&gt;
        tags = {}&lt;br /&gt;
        tags_str = header[prefix + &amp;quot;Tags&amp;quot;].split(&amp;quot;|&amp;quot;)&lt;br /&gt;
        for tag_str in tags_str:&lt;br /&gt;
            tag_str = tag_str.strip()&lt;br /&gt;
            if not tag_str:&lt;br /&gt;
                continue&lt;br /&gt;
            key, value = tag_str.split(&amp;quot;:&amp;quot;, maxsplit=1)&lt;br /&gt;
            tags[key] = value&lt;br /&gt;
        segment[&amp;quot;tags&amp;quot;] = tags&lt;br /&gt;
        segments.append(segment)&lt;br /&gt;
        segment_index += 1&lt;br /&gt;
    segmentation_info[&amp;quot;segments&amp;quot;] = segments&lt;br /&gt;
    return segmentation_info&lt;br /&gt;
&lt;br /&gt;
def segment_from_name(segmentation_info, segment_name):&lt;br /&gt;
    for segment in segmentation_info[&amp;quot;segments&amp;quot;]:&lt;br /&gt;
        if segment_name == segment[&amp;quot;name&amp;quot;]:&lt;br /&gt;
            return segment&lt;br /&gt;
    raise KeyError('segment not found by name ' + segment_name)&lt;br /&gt;
&lt;br /&gt;
def segment_names(segmentation_info):&lt;br /&gt;
    names = []&lt;br /&gt;
    for segment in segmentation_info[&amp;quot;segments&amp;quot;]:&lt;br /&gt;
        names.append(segment[&amp;quot;name&amp;quot;])&lt;br /&gt;
    return names&lt;br /&gt;
&lt;br /&gt;
def extract_segments(voxels, header, segmentation_info, segment_names_to_label_values):&lt;br /&gt;
    import numpy as np&lt;br /&gt;
    # Create empty array from last 3 dimensions (output will be flattened to a 3D array)&lt;br /&gt;
    output_voxels = np.zeros(voxels.shape[-3:])&lt;br /&gt;
    # Copy non-segmentation fields to the extracted header&lt;br /&gt;
    output_header = {}&lt;br /&gt;
    for key in header.keys():&lt;br /&gt;
        if not re.match(&amp;quot;^Segment[0-9]+_.+&amp;quot;, key):&lt;br /&gt;
            output_header[key] = header[key]&lt;br /&gt;
    # Copy extracted segments&lt;br /&gt;
    dims = len(voxels.shape)&lt;br /&gt;
    for output_segment_index, segment_name_to_label_value in enumerate(segment_names_to_label_values):&lt;br /&gt;
        # Copy relabeled voxel data&lt;br /&gt;
        segment = segment_from_name(segmentation_info, segment_name_to_label_value[0])&lt;br /&gt;
        input_label_value = segment[&amp;quot;labelValue&amp;quot;]&lt;br /&gt;
        output_label_value = segment_name_to_label_value[1]&lt;br /&gt;
        if dims == 3:&lt;br /&gt;
            output_voxels[voxels == input_label_value] = output_label_value&lt;br /&gt;
        elif dims == 4:&lt;br /&gt;
            inputLayer = segment[&amp;quot;layer&amp;quot;]&lt;br /&gt;
            output_voxels[voxels[inputLayer,:,:,:] == input_label_value] = output_label_value&lt;br /&gt;
        else:&lt;br /&gt;
            raise ValueError(&amp;quot;Voxel array dimension is invalid&amp;quot;)&lt;br /&gt;
        # Copy all segment fields corresponding to this segment&lt;br /&gt;
        for key in header.keys():&lt;br /&gt;
            prefix = &amp;quot;Segment{0}_&amp;quot;.format(segment[&amp;quot;index&amp;quot;])&lt;br /&gt;
            matched = re.match(&amp;quot;^&amp;quot;+prefix+&amp;quot;(.+)&amp;quot;, key)&lt;br /&gt;
            if matched:&lt;br /&gt;
                field_name = matched.groups()[0]&lt;br /&gt;
                if field_name == &amp;quot;LabelValue&amp;quot;:&lt;br /&gt;
                    value = output_label_value&lt;br /&gt;
                elif field_name == &amp;quot;Layer&amp;quot;:&lt;br /&gt;
                    # output is a single layer (3D volume)&lt;br /&gt;
                    value = 0&lt;br /&gt;
                else:&lt;br /&gt;
                    value = header[key]&lt;br /&gt;
                output_header[&amp;quot;Segment{0}_&amp;quot;.format(output_segment_index) + field_name] = value&lt;br /&gt;
    # Remove unnecessary 4th dimension (volume is collapsed into 3D)&lt;br /&gt;
    if dims == 4:&lt;br /&gt;
        # Remove &amp;quot;none&amp;quot; from &amp;quot;none (0,1,0) (0,0,-1) (-1.2999954223632812,0,0)&amp;quot;&lt;br /&gt;
        output_header[&amp;quot;space directions&amp;quot;] = output_header[&amp;quot;space directions&amp;quot;][-3:,:]&lt;br /&gt;
        # Remove &amp;quot;list&amp;quot; from &amp;quot;list domain domain domain&amp;quot;&lt;br /&gt;
        output_header[&amp;quot;kinds&amp;quot;] = output_header[&amp;quot;kinds&amp;quot;][-3:]&lt;br /&gt;
    return output_voxels, output_header&lt;br /&gt;
&lt;br /&gt;
# Read segmentation and show some information about segments&lt;br /&gt;
filename = &amp;quot;c:/Users/andra/OneDrive/Projects/SegmentationPynrrd/SegmentationOverlapping.seg.nrrd&amp;quot;&lt;br /&gt;
segmentation_info = read_segmentation_info(filename)&lt;br /&gt;
number_of_segments = len(segmentation_info[&amp;quot;segments&amp;quot;])&lt;br /&gt;
names = segment_names(segmentation_info)&lt;br /&gt;
label0 = segment_from_name(segmentation_info, names[0])[&amp;quot;labelValue&amp;quot;]&lt;br /&gt;
print(&amp;quot;Number of segments: &amp;quot; + str())&lt;br /&gt;
print(&amp;quot;Segment names: &amp;quot; + str(names))&lt;br /&gt;
print(&amp;quot;Label value of {0}: {1}&amp;quot;.format(names[0], label0))&lt;br /&gt;
&lt;br /&gt;
# Extract selected segments with chosen label values&lt;br /&gt;
extracted_filename = &amp;quot;c:/Users/andra/OneDrive/Projects/SegmentationPynrrd/SegmentationExtracted.seg.nrrd&amp;quot;&lt;br /&gt;
voxels, header = nrrd.read(filename)&lt;br /&gt;
segment_list = [(&amp;quot;Segment_1&amp;quot;, 10), (&amp;quot;Segment_3&amp;quot;, 12), (&amp;quot;Segment_4&amp;quot;, 6)]&lt;br /&gt;
extracted_voxels, extracted_header = extract_segments(voxels, header, segmentation_info, segment_list)&lt;br /&gt;
nrrd.write(extracted_filename, extracted_voxels, extracted_header)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Quantifying segments==&lt;br /&gt;
&lt;br /&gt;
===Get centroid of each segment===&lt;br /&gt;
&lt;br /&gt;
Place a markups fiducial point at the centroid of each segment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentationNode = getNode('Segmentation')&lt;br /&gt;
&lt;br /&gt;
# Compute centroids&lt;br /&gt;
import SegmentStatistics&lt;br /&gt;
segStatLogic = SegmentStatistics.SegmentStatisticsLogic()&lt;br /&gt;
segStatLogic.getParameterNode().SetParameter(&amp;quot;Segmentation&amp;quot;, segmentationNode.GetID())&lt;br /&gt;
segStatLogic.getParameterNode().SetParameter(&amp;quot;LabelmapSegmentStatisticsPlugin.centroid_ras.enabled&amp;quot;, str(True))&lt;br /&gt;
segStatLogic.computeStatistics()&lt;br /&gt;
stats = segStatLogic.getStatistics()&lt;br /&gt;
&lt;br /&gt;
# Place a markup point in each centroid&lt;br /&gt;
markupsNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLMarkupsFiducialNode&amp;quot;)&lt;br /&gt;
markupsNode.CreateDefaultDisplayNodes()&lt;br /&gt;
for segmentId in stats['SegmentIDs']:&lt;br /&gt;
    centroid_ras = stats[segmentId,&amp;quot;LabelmapSegmentStatisticsPlugin.centroid_ras&amp;quot;]&lt;br /&gt;
    segmentName = segmentationNode.GetSegmentation().GetSegment(segmentId).GetName()&lt;br /&gt;
    markupsNode.AddFiducialFromArray(centroid_ras, segmentName)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Get size, position, and orientation of each segment===&lt;br /&gt;
&lt;br /&gt;
This example computes oriented bounding box for each segment and displays them using annotation ROI.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentationNode = getNode('Segmentation')&lt;br /&gt;
&lt;br /&gt;
# Compute bounding boxes&lt;br /&gt;
import SegmentStatistics&lt;br /&gt;
segStatLogic = SegmentStatistics.SegmentStatisticsLogic()&lt;br /&gt;
segStatLogic.getParameterNode().SetParameter(&amp;quot;Segmentation&amp;quot;, segmentationNode.GetID())&lt;br /&gt;
segStatLogic.getParameterNode().SetParameter(&amp;quot;LabelmapSegmentStatisticsPlugin.obb_origin_ras.enabled&amp;quot;,str(True))&lt;br /&gt;
segStatLogic.getParameterNode().SetParameter(&amp;quot;LabelmapSegmentStatisticsPlugin.obb_diameter_mm.enabled&amp;quot;,str(True))&lt;br /&gt;
segStatLogic.getParameterNode().SetParameter(&amp;quot;LabelmapSegmentStatisticsPlugin.obb_direction_ras_x.enabled&amp;quot;,str(True))&lt;br /&gt;
segStatLogic.getParameterNode().SetParameter(&amp;quot;LabelmapSegmentStatisticsPlugin.obb_direction_ras_y.enabled&amp;quot;,str(True))&lt;br /&gt;
segStatLogic.getParameterNode().SetParameter(&amp;quot;LabelmapSegmentStatisticsPlugin.obb_direction_ras_z.enabled&amp;quot;,str(True))&lt;br /&gt;
segStatLogic.computeStatistics()&lt;br /&gt;
stats = segStatLogic.getStatistics()&lt;br /&gt;
&lt;br /&gt;
# Draw ROI for each oriented bounding box&lt;br /&gt;
import numpy as np&lt;br /&gt;
for segmentId in stats['SegmentIDs']:&lt;br /&gt;
    # Get bounding box&lt;br /&gt;
    obb_origin_ras = np.array(stats[segmentId,&amp;quot;LabelmapSegmentStatisticsPlugin.obb_origin_ras&amp;quot;])&lt;br /&gt;
    obb_diameter_mm = np.array(stats[segmentId,&amp;quot;LabelmapSegmentStatisticsPlugin.obb_diameter_mm&amp;quot;])&lt;br /&gt;
    obb_direction_ras_x = np.array(stats[segmentId,&amp;quot;LabelmapSegmentStatisticsPlugin.obb_direction_ras_x&amp;quot;])&lt;br /&gt;
    obb_direction_ras_y = np.array(stats[segmentId,&amp;quot;LabelmapSegmentStatisticsPlugin.obb_direction_ras_y&amp;quot;])&lt;br /&gt;
    obb_direction_ras_z = np.array(stats[segmentId,&amp;quot;LabelmapSegmentStatisticsPlugin.obb_direction_ras_z&amp;quot;])&lt;br /&gt;
    # Create ROI&lt;br /&gt;
    segment = segmentationNode.GetSegmentation().GetSegment(segmentId)&lt;br /&gt;
    roi=slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLAnnotationROINode&amp;quot;)&lt;br /&gt;
    roi.SetName(segment.GetName()+' bounding box')&lt;br /&gt;
    roi.SetXYZ(0.0, 0.0, 0.0)&lt;br /&gt;
    roi.SetRadiusXYZ(*(0.5*obb_diameter_mm))&lt;br /&gt;
    # Position and orient ROI using a transform&lt;br /&gt;
    obb_center_ras = obb_origin_ras+0.5*(obb_diameter_mm[0] * obb_direction_ras_x + obb_diameter_mm[1] * obb_direction_ras_y + obb_diameter_mm[2] * obb_direction_ras_z)&lt;br /&gt;
    boundingBoxToRasTransform = np.row_stack((np.column_stack((obb_direction_ras_x, obb_direction_ras_y, obb_direction_ras_z, obb_center_ras)), (0, 0, 0, 1)))&lt;br /&gt;
    boundingBoxToRasTransformMatrix = slicer.util.vtkMatrixFromArray(boundingBoxToRasTransform)&lt;br /&gt;
    transformNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLTransformNode')&lt;br /&gt;
    transformNode.SetAndObserveMatrixTransformToParent(boundingBoxToRasTransformMatrix)&lt;br /&gt;
    roi.SetAndObserveTransformNodeID(transformNode.GetID())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Complete list of available parameters can be obtained by running &amp;lt;code&amp;gt;segStatLogic.getParameterNode().GetParameterNames()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Markups==&lt;br /&gt;
&lt;br /&gt;
===Load markups fiducial list from file===&lt;br /&gt;
&lt;br /&gt;
Markups fiducials can be loaded from file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicer.util.loadMarkupsFiducialList('/path/to/list/F.fcsv')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Adding Fiducials Programatically===&lt;br /&gt;
&lt;br /&gt;
Markups fiducials can be added to the currently active list from the python console by using the following module logic command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicer.modules.markups.logic().AddFiducial()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The command with no arguments will place a new fiducial at the origin. You can also pass it an initial location:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicer.modules.markups.logic().AddFiducial(1.0, -2.0, 3.3)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Add a button to module GUI to activate fiducial placement===&lt;br /&gt;
&lt;br /&gt;
This code snippet creates a toggle button, which activates fiducial placement when pressed (and deactivates when released).&lt;br /&gt;
&lt;br /&gt;
The [http://apidocs.slicer.org/master/classqSlicerMarkupsPlaceWidget.html qSlicerMarkupsPlaceWidget widget] can automatically activate placement of multiple points and can show buttons for deleting points, changing colors, lock, and hide points.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
w=slicer.qSlicerMarkupsPlaceWidget()&lt;br /&gt;
w.setMRMLScene(slicer.mrmlScene)&lt;br /&gt;
markupsNodeID = slicer.modules.markups.logic().AddNewFiducialNode()&lt;br /&gt;
w.setCurrentNode(slicer.mrmlScene.GetNodeByID(markupsNodeID))&lt;br /&gt;
# Hide all buttons and only show place button&lt;br /&gt;
w.buttonsVisible=False&lt;br /&gt;
w.placeButton().show()&lt;br /&gt;
w.show()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Adding Fiducials via Mouse Clicks===&lt;br /&gt;
&lt;br /&gt;
You can also set the mouse mode into Markups fiducial placement by calling:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
placeModePersistence = 1&lt;br /&gt;
slicer.modules.markups.logic().StartPlaceMode(placeModePersistence)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A lower level way to do this is via the selection and interaction nodes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
selectionNode = slicer.mrmlScene.GetNodeByID(&amp;quot;vtkMRMLSelectionNodeSingleton&amp;quot;)&lt;br /&gt;
selectionNode.SetReferenceActivePlaceNodeClassName(&amp;quot;vtkMRMLMarkupsFiducialNode&amp;quot;)&lt;br /&gt;
interactionNode = slicer.mrmlScene.GetNodeByID(&amp;quot;vtkMRMLInteractionNodeSingleton&amp;quot;)&lt;br /&gt;
placeModePersistence = 1&lt;br /&gt;
interactionNode.SetPlaceModePersistence(placeModePersistence)&lt;br /&gt;
# mode 1 is Place, can also be accessed via slicer.vtkMRMLInteractionNode().Place&lt;br /&gt;
interactionNode.SetCurrentInteractionMode(1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To switch back to view transform once you're done placing fiducials:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
interactionNode = slicer.mrmlScene.GetNodeByID(&amp;quot;vtkMRMLInteractionNodeSingleton&amp;quot;)&lt;br /&gt;
interactionNode.SwitchToViewTransformMode()&lt;br /&gt;
# also turn off place mode persistence if required&lt;br /&gt;
interactionNode.SetPlaceModePersistence(0)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Access to Fiducial Properties===&lt;br /&gt;
&lt;br /&gt;
Each vtkMRMLMarkupsFiducialNode has a vector of points in it which can be accessed from python:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fidNode = getNode(&amp;quot;vtkMRMLMarkupsFiducialNode1&amp;quot;)&lt;br /&gt;
n = fidNode.AddFiducial(4.0, 5.5, -6.0)&lt;br /&gt;
fidNode.SetNthFiducialLabel(n, &amp;quot;new label&amp;quot;)&lt;br /&gt;
# each markup is given a unique id which can be accessed from the superclass level&lt;br /&gt;
id1 = fidNode.GetNthMarkupID(n)&lt;br /&gt;
# manually set the position&lt;br /&gt;
fidNode.SetNthFiducialPosition(n, 6.0, 7.0, 8.0)&lt;br /&gt;
# set the label&lt;br /&gt;
fidNode.SetNthFiducialLabel(n, &amp;quot;New label&amp;quot;)&lt;br /&gt;
# set the selected flag, only selected = 1 fiducials will be passed to CLIs&lt;br /&gt;
fidNode.SetNthFiducialSelected(n, 1)&lt;br /&gt;
# set the visibility flag&lt;br /&gt;
fidNode.SetNthFiducialVisibility(n, 0)  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can loop over the fiducials in a list and get the coordinates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fidList = slicer.util.getNode('F')&lt;br /&gt;
numFids = fidList.GetNumberOfFiducials()&lt;br /&gt;
for i in range(numFids):&lt;br /&gt;
  ras = [0,0,0]&lt;br /&gt;
  fidList.GetNthFiducialPosition(i,ras)&lt;br /&gt;
  # the world position is the RAS position with any transform matrices applied&lt;br /&gt;
  world = [0,0,0,0]&lt;br /&gt;
  fidList.GetNthFiducialWorldCoordinates(0,world)&lt;br /&gt;
  print(i,&amp;quot;: RAS =&amp;quot;,ras,&amp;quot;, world =&amp;quot;,world)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also look at the sample code in the [https://github.com/Slicer/Slicer/blob/master/Modules/Scripted/Endoscopy/Endoscopy.py#L287 Endoscopy module] to see how python is used to access fiducials from a scripted module.&lt;br /&gt;
&lt;br /&gt;
==Accessing views, renderers, and cameras==&lt;br /&gt;
&lt;br /&gt;
Iterate through all 3D views in current layout:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
layoutManager = slicer.app.layoutManager()&lt;br /&gt;
for threeDViewIndex in range(layoutManager.threeDViewCount) :&lt;br /&gt;
  view = layoutManager.threeDWidget(threeDViewIndex).threeDView()&lt;br /&gt;
  threeDViewNode = view.mrmlViewNode()&lt;br /&gt;
  cameraNode = slicer.modules.cameras.logic().GetViewActiveCameraNode(threeDViewNode)&lt;br /&gt;
  print('View node for 3D widget ' + str(threeDViewIndex))&lt;br /&gt;
  print('  Name: ' + threeDViewNode .GetName())&lt;br /&gt;
  print('  ID: ' + threeDViewNode .GetID())&lt;br /&gt;
  print('  Camera ID: ' + cameraNode.GetID())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Iterate through all slice views in current layout:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
layoutManager = slicer.app.layoutManager()&lt;br /&gt;
for sliceViewName in layoutManager.sliceViewNames():&lt;br /&gt;
  view = layoutManager.sliceWidget(sliceViewName).sliceView()&lt;br /&gt;
  sliceNode = view.mrmlSliceNode()&lt;br /&gt;
  sliceLogic = slicer.app.applicationLogic().GetSliceLogic(sliceNode)&lt;br /&gt;
  compositeNode = sliceLogic.GetSliceCompositeNode()&lt;br /&gt;
  print('Slice view ' + str(sliceViewName))&lt;br /&gt;
  print('  Name: ' + sliceNode.GetName())&lt;br /&gt;
  print('  ID: ' + sliceNode.GetID())&lt;br /&gt;
  print('  Background volume: {0}'.format(compositeNode.GetBackgroundVolumeID()))&lt;br /&gt;
  print('  Foreground volume: {0} (opacity: {1})'.format(compositeNode.GetForegroundVolumeID(), compositeNode.GetForegroundOpacity()))&lt;br /&gt;
  print('  Label volume: {0} (opacity: {1})'.format(compositeNode.GetLabelVolumeID(), compositeNode.GetLabelOpacity()))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For low-level manipulation of views, it is possible to access VTK render windows, renderers and cameras of views in the current layout.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
renderWindow = view.renderWindow()&lt;br /&gt;
renderers = renderWindow.GetRenderers()&lt;br /&gt;
renderer = renderers.GetItemAsObject(0)&lt;br /&gt;
camera = cameraNode.GetCamera()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hide view controller bars==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicer.app.layoutManager().threeDWidget(0).threeDController().setVisible(False)&lt;br /&gt;
slicer.app.layoutManager().sliceWidget('Red').sliceController().setVisible(False)&lt;br /&gt;
slicer.app.layoutManager().plotWidget(0).plotController().setVisible(False)&lt;br /&gt;
slicer.app.layoutManager().tableWidget(0).tableController().setVisible(False)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Customize widgets in view controller bars==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sliceController = slicer.app.layoutManager().sliceWidget(&amp;quot;Red&amp;quot;).sliceController()&lt;br /&gt;
&lt;br /&gt;
# hide what is not needed&lt;br /&gt;
sliceController.pinButton().hide()&lt;br /&gt;
#sliceController.viewLabel().hide()&lt;br /&gt;
sliceController.fitToWindowToolButton().hide()&lt;br /&gt;
sliceController.sliceOffsetSlider().hide()&lt;br /&gt;
&lt;br /&gt;
# add custom widgets&lt;br /&gt;
myButton = qt.QPushButton(&amp;quot;My custom button&amp;quot;)&lt;br /&gt;
sliceController.barLayout().addWidget(myButton)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Change 3D view background color==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
viewNode = slicer.app.layoutManager().threeDWidget(0).mrmlViewNode()&lt;br /&gt;
viewNode.SetBackgroundColor(1,0,0)&lt;br /&gt;
viewNode.SetBackgroundColor2(1,0,0)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hide Slicer logo from main window (to increase space)==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicer.util.findChild(slicer.util.mainWindow(), 'LogoLabel').visible = False&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Subject hierarchy== &lt;br /&gt;
====Get the pseudo-singleton subject hierarchy node====&lt;br /&gt;
It manages the whole hierarchy and provides functions to access and manipulate&lt;br /&gt;
  shNode = slicer.mrmlScene.GetSubjectHierarchyNode()&lt;br /&gt;
&lt;br /&gt;
====Create subject hierarchy item====&lt;br /&gt;
  # If it is for a data node, it is automatically created, but the create function can be used to set parent:&lt;br /&gt;
  shNode.CreateItem(parentItemID, dataNode)&lt;br /&gt;
  # If it is a hierarchy item without a data node, then the create function must be used:&lt;br /&gt;
  shNode.CreateSubjectItem(parentItemID, name)&lt;br /&gt;
  shNode.CreateFolderItem(parentItemID, name)&lt;br /&gt;
  shNode.CreateHierarchyItem(parentItemID, name, level) # Advanced method to set level attribute manually (usually subject, study, or folder, but it can be a virtual branch for example)&lt;br /&gt;
&lt;br /&gt;
====Get subject hierarchy item====&lt;br /&gt;
Items in subject hierarchy are uniquely identified by integer IDs&lt;br /&gt;
  # Get scene item ID first because it is the root item:&lt;br /&gt;
  sceneItemID = shNode.GetSceneItemID()&lt;br /&gt;
  # Get direct child by name&lt;br /&gt;
  subjectItemID = shNode.GetItemChildWithName(sceneItemID, 'Subject_1')&lt;br /&gt;
  # Get item for data node&lt;br /&gt;
  itemID = shNode.GetItemByDataNode(dataNode)&lt;br /&gt;
  # Get item by UID (such as DICOM)&lt;br /&gt;
  itemID = shNode.GetItemByUID(slicer.vtkMRMLSubjectHierarchyConstants.GetDICOMUIDName(), seriesInstanceUid)&lt;br /&gt;
  itemID = shNode.GetItemByUIDList(slicer.vtkMRMLSubjectHierarchyConstants.GetDICOMInstanceUIDName(), instanceUID)&lt;br /&gt;
  # Invalid item ID for checking validity of a given ID (most functions return the invalid ID when item is not found)&lt;br /&gt;
  invalidItemID = slicer.vtkMRMLSubjectHierarchyNode.GetInvalidItemID()&lt;br /&gt;
&lt;br /&gt;
====Traverse children of a subject hierarchy item====&lt;br /&gt;
  children = vtk.vtkIdList()&lt;br /&gt;
  shNode.GetItemChildren(parent, children)&lt;br /&gt;
  for i in range(children.GetNumberOfIds()):&lt;br /&gt;
    child = children.GetId(i)&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
====Manipulate subject hierarchy item====&lt;br /&gt;
Instead of node operations on the individual subject hierarchy nodes, item operations are performed on the one subject hierarchy node.&lt;br /&gt;
  # Set item name&lt;br /&gt;
  shNode.SetItemName(itemID, 'NewName')&lt;br /&gt;
  # Set item parent (reparent)&lt;br /&gt;
  shNode.SetItemParent(itemID, newParentItemID)&lt;br /&gt;
  # Set visibility of data node associated to an item&lt;br /&gt;
  shNode.SetItemDisplayVisibility(itemID, 1)&lt;br /&gt;
  # Set visibility of whole branch&lt;br /&gt;
  # Note: Folder-type items (fodler, subject, study, etc.) create their own display nodes when show/hiding from UI.&lt;br /&gt;
  #       The displayable managers use SH information to determine visibility of an item, so no need to show/hide individual leaf nodes any more.&lt;br /&gt;
  #       Once the folder display node is created, it can be shown hidden simply using shNode.SetItemDisplayVisibility&lt;br /&gt;
  # From python, this is how to trigger creating a folder display node&lt;br /&gt;
  pluginHandler = slicer.qSlicerSubjectHierarchyPluginHandler().instance()&lt;br /&gt;
  folderPlugin = pluginHandler.pluginByName('Folder')&lt;br /&gt;
  folderPlugin.setDisplayVisibility(folderItemID, 1)&lt;br /&gt;
&lt;br /&gt;
====Filter items in TreeView or ComboBox====&lt;br /&gt;
Displayed items can be filtered using ''setAttributeFilter'' method. An example of the usage can be found in the  [https://github.com/Slicer/Slicer/blob/e66e3b08e35384526528e6ae678e9ec9f079f286/Applications/SlicerApp/Testing/Python/SubjectHierarchyGenericSelfTest.py#L352-L360 unit test]. Modified version here:&lt;br /&gt;
    print(shTreeView.displayedItemCount()) # 5&lt;br /&gt;
    shTreeView.setAttributeFilter('DICOM.Modality') # Nodes must have this attribute&lt;br /&gt;
    print(shTreeView.displayedItemCount()) # 3&lt;br /&gt;
    shTreeView.setAttributeFilter('DICOM.Modality','CT') # Have attribute and equal 'CT'&lt;br /&gt;
    print(shTreeView.displayedItemCount()) # 1&lt;br /&gt;
    shTreeView.removeAttributeFilter()&lt;br /&gt;
    print(shTreeView.displayedItemCount()) # 5&lt;br /&gt;
&lt;br /&gt;
===Listen to subject hierarchy item events===&lt;br /&gt;
The subject hierarchy node sends the node item id as calldata. Item IDs are vtkIdType, which are NOT vtkObjects. You need to use vtk.calldata_type(vtk.VTK_LONG) (otherwise the application crashes).&lt;br /&gt;
  &lt;br /&gt;
  class MyListenerClass(VTKObservationMixin):&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
      VTKObservationMixin.__init__(self)&lt;br /&gt;
      &lt;br /&gt;
      shNode = slicer.vtkMRMLSubjectHierarchyNode.GetSubjectHierarchyNode(slicer.mrmlScene)&lt;br /&gt;
      self.addObserver(shNode, shNode.SubjectHierarchyItemModifiedEvent, self.shItemModifiedEvent)&lt;br /&gt;
     &lt;br /&gt;
    @vtk.calldata_type(vtk.VTK_LONG) &lt;br /&gt;
    def shItemModifiedEvent(self, caller, eventId, callData):&lt;br /&gt;
      print(&amp;quot;SH Node modified&amp;quot;)&lt;br /&gt;
      print(&amp;quot;SH item ID: {0}&amp;quot;.format(callData))&lt;br /&gt;
&lt;br /&gt;
===Subject hierarchy plugin offering view context menu action===&lt;br /&gt;
If an object that supports view context menus (e.g. markups) is right-clicked in a slice or 3D view, it can offer custom actions. Due to internal limitations these plugins must be set up differently, as explained [https://github.com/Slicer/Slicer/blob/master/Modules/Loadable/Annotations/SubjectHierarchyPlugins/AnnotationsSubjectHierarchyPlugin.py#L96-L107 here]. This example makes it easier to create such a plugin.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import vtk, qt, ctk, slicer&lt;br /&gt;
from slicer.ScriptedLoadableModule import *&lt;br /&gt;
from slicer.util import VTKObservationMixin&lt;br /&gt;
&lt;br /&gt;
from SubjectHierarchyPlugins import AbstractScriptedSubjectHierarchyPlugin&lt;br /&gt;
&lt;br /&gt;
class ViewContextMenu(ScriptedLoadableModule):&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Uses ScriptedLoadableModule base class, available at:&lt;br /&gt;
  https://github.com/Slicer/Slicer/blob/master/Base/Python/slicer/ScriptedLoadableModule.py&lt;br /&gt;
  &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  def __init__(self, parent):&lt;br /&gt;
    ScriptedLoadableModule.__init__(self, parent)&lt;br /&gt;
    self.parent.title = &amp;quot;Markup Editor&amp;quot;&lt;br /&gt;
    self.parent.categories = [&amp;quot;SlicerMorph&amp;quot;, &amp;quot;Labs&amp;quot;]&lt;br /&gt;
    self.parent.dependencies = []&lt;br /&gt;
    self.parent.contributors = [&amp;quot;Steve Pieper (Isomics, Inc.)&amp;quot;]&lt;br /&gt;
    self.parent.helpText = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
A tool to manipulate Markups using the Segment Editor as a geometry backend&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    self.parent.helpText += self.getDefaultModuleDocumentationLink()&lt;br /&gt;
    self.parent.acknowledgementText = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
This module was developed by Steve Pieper, Sara Rolfe and Murat Maga,&lt;br /&gt;
through a NSF ABI Development grant, &amp;quot;An Integrated Platform for Retrieval,&lt;br /&gt;
Visualization and Analysis of 3D Morphology From Digital Biological Collections&amp;quot;&lt;br /&gt;
(Award Numbers: 1759883 (Murat Maga), 1759637 (Adam Summers), 1759839 (Douglas Boyer)).&lt;br /&gt;
This file was originally developed by Jean-Christophe Fillion-Robin, Kitware Inc.,&lt;br /&gt;
Andras Lasso, PerkLab, and Steve Pieper, Isomics, Inc.&lt;br /&gt;
and was partially funded by NIH grant 3P41RR013218-12S1.&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    #&lt;br /&gt;
    # register subject hierarchy plugin once app is initialized&lt;br /&gt;
    #&lt;br /&gt;
    def onStartupCompleted():&lt;br /&gt;
        import SubjectHierarchyPlugins&lt;br /&gt;
        from ViewContextMenu import ViewContextMenuSubjectHierarchyPlugin&lt;br /&gt;
        scriptedPlugin = slicer.qSlicerSubjectHierarchyScriptedPlugin(None)&lt;br /&gt;
        scriptedPlugin.setPythonSource(ViewContextMenuSubjectHierarchyPlugin.filePath)&lt;br /&gt;
        pluginHandler = slicer.qSlicerSubjectHierarchyPluginHandler.instance()&lt;br /&gt;
        pluginHandler.registerPlugin(scriptedPlugin)&lt;br /&gt;
        print('ViewContextMenuSubjectHierarchyPlugin loaded')&lt;br /&gt;
    slicer.app.connect(&amp;quot;startupCompleted()&amp;quot;, onStartupCompleted)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class ViewContextMenuSubjectHierarchyPlugin(AbstractScriptedSubjectHierarchyPlugin):&lt;br /&gt;
&lt;br /&gt;
    # Necessary static member to be able to set python source to scripted subject hierarchy plugin&lt;br /&gt;
    filePath = __file__&lt;br /&gt;
&lt;br /&gt;
    def __init__(self, scriptedPlugin):&lt;br /&gt;
        self.viewAction = qt.QAction(f&amp;quot;CUSTOM VIEW ...&amp;quot;, scriptedPlugin)&lt;br /&gt;
        self.viewAction.objectName = 'CustomViewAction'&lt;br /&gt;
        self.viewAction.connect(&amp;quot;triggered()&amp;quot;, self.onViewAction)&lt;br /&gt;
&lt;br /&gt;
    def onViewAction(self):&lt;br /&gt;
        print(f&amp;quot;VIEW ACTION&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def viewContextMenuActions(self):&lt;br /&gt;
        return [self.viewAction]&lt;br /&gt;
&lt;br /&gt;
    def showViewContextMenuActionsForItem(self, itemID, eventData=None):&lt;br /&gt;
        pluginHandler = slicer.qSlicerSubjectHierarchyPluginHandler.instance()&lt;br /&gt;
        pluginLogic = pluginHandler.pluginLogic()&lt;br /&gt;
        menuActions = list(pluginLogic.availableViewMenuActionNames())&lt;br /&gt;
        menuActions.append('CustomViewAction')&lt;br /&gt;
        pluginLogic.setDisplayedViewMenuActionNames(menuActions)&lt;br /&gt;
        self.viewAction.visible = True&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Use whitelist to customize view menu===&lt;br /&gt;
When right-clicking certain types of nodes in the 2D/3D views, a subject hierarchy menu pops up. If menu actions need to be removed, a whitelist can be used to specify the ones that should show up.&lt;br /&gt;
  pluginHandler = slicer.qSlicerSubjectHierarchyPluginHandler.instance()&lt;br /&gt;
  pluginLogic = pluginHandler.pluginLogic()&lt;br /&gt;
  menuActions = pluginLogic.availableViewMenuActionNames()&lt;br /&gt;
  # Returns ('RenamePointAction', 'DeletePointAction', 'ToggleSelectPointAction', 'EditPropertiesAction')&lt;br /&gt;
  newActions = ['RenamePointAction']&lt;br /&gt;
  pluginLogic.setDisplayedViewMenuActionNames(newActions)&lt;br /&gt;
&lt;br /&gt;
==Plotting==&lt;br /&gt;
&lt;br /&gt;
===Slicer plots displayed in view layout===&lt;br /&gt;
&lt;br /&gt;
Create histogram plot of a volume and show it embedded in the view layout. More information: https://www.slicer.org/wiki/Documentation/Nightly/Developers/Plots&lt;br /&gt;
&lt;br /&gt;
====Using &amp;lt;code&amp;gt;slicer.util.plot&amp;lt;/code&amp;gt; utility function====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Get a volume from SampleData and compute its histogram&lt;br /&gt;
import SampleData&lt;br /&gt;
import numpy as np&lt;br /&gt;
volumeNode = SampleData.SampleDataLogic().downloadMRHead()&lt;br /&gt;
histogram = np.histogram(arrayFromVolume(volumeNode), bins=50)&lt;br /&gt;
&lt;br /&gt;
chartNode = slicer.util.plot(histogram, xColumnIndex = 1)&lt;br /&gt;
chartNode.SetYAxisRangeAuto(False)&lt;br /&gt;
chartNode.SetYAxisRange(0, 4e5)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:SlicerPlot.png]]&lt;br /&gt;
&lt;br /&gt;
====Using MRML classes only====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Get a volume from SampleData&lt;br /&gt;
import SampleData&lt;br /&gt;
volumeNode = SampleData.SampleDataLogic().downloadMRHead()&lt;br /&gt;
&lt;br /&gt;
# Compute histogram values&lt;br /&gt;
import numpy as np&lt;br /&gt;
histogram = np.histogram(arrayFromVolume(volumeNode), bins=50)&lt;br /&gt;
&lt;br /&gt;
# Save results to a new table node&lt;br /&gt;
tableNode=slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLTableNode&amp;quot;)&lt;br /&gt;
updateTableFromArray(tableNode, histogram)&lt;br /&gt;
tableNode.GetTable().GetColumn(0).SetName(&amp;quot;Count&amp;quot;)&lt;br /&gt;
tableNode.GetTable().GetColumn(1).SetName(&amp;quot;Intensity&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Create plot&lt;br /&gt;
plotSeriesNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLPlotSeriesNode&amp;quot;, volumeNode.GetName() + ' histogram')&lt;br /&gt;
plotSeriesNode.SetAndObserveTableNodeID(tableNode.GetID())&lt;br /&gt;
plotSeriesNode.SetXColumnName(&amp;quot;Intensity&amp;quot;)&lt;br /&gt;
plotSeriesNode.SetYColumnName(&amp;quot;Count&amp;quot;)&lt;br /&gt;
plotSeriesNode.SetPlotType(plotSeriesNode.PlotTypeScatterBar)&lt;br /&gt;
plotSeriesNode.SetColor(0, 0.6, 1.0)&lt;br /&gt;
&lt;br /&gt;
# Create chart and add plot&lt;br /&gt;
plotChartNode = slicer.mrmlScene.AddNewNodeByClass(&amp;quot;vtkMRMLPlotChartNode&amp;quot;)&lt;br /&gt;
plotChartNode.AddAndObservePlotSeriesNodeID(plotSeriesNode.GetID())&lt;br /&gt;
plotChartNode.YAxisRangeAutoOff()&lt;br /&gt;
plotChartNode.SetYAxisRange(0, 500000)&lt;br /&gt;
&lt;br /&gt;
# Show plot in layout&lt;br /&gt;
slicer.modules.plots.logic().ShowChartInLayout(plotChartNode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using matplotlib===&lt;br /&gt;
&lt;br /&gt;
Matplotlib may be used from within Slicer, but the default Tk backend locks up and crashes Slicer. However, Matplotlib may still be used through other backends. More details can be found on the [http://matplotlib.sourceforge.net/ MatPlotLib] pages.&lt;br /&gt;
&lt;br /&gt;
====Non-interactive plot====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
try:&lt;br /&gt;
  import matplotlib&lt;br /&gt;
except ModuleNotFoundError:&lt;br /&gt;
  pip_install('matplotlib')&lt;br /&gt;
  import matplotlib&lt;br /&gt;
&lt;br /&gt;
matplotlib.use('Agg')&lt;br /&gt;
from pylab import *&lt;br /&gt;
&lt;br /&gt;
t1 = arange(0.0, 5.0, 0.1)&lt;br /&gt;
t2 = arange(0.0, 5.0, 0.02)&lt;br /&gt;
t3 = arange(0.0, 2.0, 0.01) &lt;br /&gt;
&lt;br /&gt;
subplot(211)&lt;br /&gt;
plot(t1, cos(2*pi*t1)*exp(-t1), 'bo', t2, cos(2*pi*t2)*exp(-t2), 'k')&lt;br /&gt;
grid(True)&lt;br /&gt;
title('A tale of 2 subplots')&lt;br /&gt;
ylabel('Damped')&lt;br /&gt;
&lt;br /&gt;
subplot(212)&lt;br /&gt;
plot(t3, cos(2*pi*t3), 'r--')&lt;br /&gt;
grid(True)&lt;br /&gt;
xlabel('time (s)')&lt;br /&gt;
ylabel('Undamped')&lt;br /&gt;
savefig('MatplotlibExample.png')&lt;br /&gt;
&lt;br /&gt;
# Static image view&lt;br /&gt;
pm = qt.QPixmap(&amp;quot;MatplotlibExample.png&amp;quot;)&lt;br /&gt;
imageWidget = qt.QLabel()&lt;br /&gt;
imageWidget.setPixmap(pm)&lt;br /&gt;
imageWidget.setScaledContents(True)&lt;br /&gt;
imageWidget.show()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:MatplotlibExample.png]]&lt;br /&gt;
&lt;br /&gt;
====Plot in Slicer Jupyter notebook====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import JupyterNotebooksLib as slicernb&lt;br /&gt;
try:&lt;br /&gt;
  import matplotlib&lt;br /&gt;
except ModuleNotFoundError:&lt;br /&gt;
  pip_install('matplotlib')&lt;br /&gt;
  import matplotlib&lt;br /&gt;
&lt;br /&gt;
matplotlib.use('Agg')&lt;br /&gt;
&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def f(t):&lt;br /&gt;
    s1 = np.cos(2*np.pi*t)&lt;br /&gt;
    e1 = np.exp(-t)&lt;br /&gt;
    return s1 * e1&lt;br /&gt;
&lt;br /&gt;
t1 = np.arange(0.0, 5.0, 0.1)&lt;br /&gt;
t2 = np.arange(0.0, 5.0, 0.02)&lt;br /&gt;
t3 = np.arange(0.0, 2.0, 0.01)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
fig, axs = plt.subplots(2, 1, constrained_layout=True)&lt;br /&gt;
axs[0].plot(t1, f(t1), 'o', t2, f(t2), '-')&lt;br /&gt;
axs[0].set_title('subplot 1')&lt;br /&gt;
axs[0].set_xlabel('distance (m)')&lt;br /&gt;
axs[0].set_ylabel('Damped oscillation')&lt;br /&gt;
fig.suptitle('This is a somewhat long figure title', fontsize=16)&lt;br /&gt;
&lt;br /&gt;
axs[1].plot(t3, np.cos(2*np.pi*t3), '--')&lt;br /&gt;
axs[1].set_xlabel('time (s)')&lt;br /&gt;
axs[1].set_title('subplot 2')&lt;br /&gt;
axs[1].set_ylabel('Undamped')&lt;br /&gt;
&lt;br /&gt;
slicernb.MatplotlibDisplay(matplotlib.pyplot)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:JupyterNotebookMatplotlibExample.png]]&lt;br /&gt;
&lt;br /&gt;
====Interactive plot using wxWidgets GUI toolkit====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
try:&lt;br /&gt;
  import matplotlib&lt;br /&gt;
  import wx&lt;br /&gt;
except ModuleNotFoundError:&lt;br /&gt;
  pip_install('matplotlib wxPython')&lt;br /&gt;
  import matplotlib&lt;br /&gt;
&lt;br /&gt;
# Get a volume from SampleData and compute its histogram&lt;br /&gt;
import SampleData&lt;br /&gt;
import numpy as np&lt;br /&gt;
volumeNode = SampleData.SampleDataLogic().downloadMRHead()&lt;br /&gt;
histogram = np.histogram(arrayFromVolume(volumeNode), bins=50)&lt;br /&gt;
&lt;br /&gt;
# Set matplotlib to use WXAgg backend&lt;br /&gt;
import matplotlib&lt;br /&gt;
matplotlib.use('WXAgg')&lt;br /&gt;
&lt;br /&gt;
# Show an interactive plot&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
fig, ax = plt.subplots()&lt;br /&gt;
ax.plot(histogram[1][1:], histogram[0].astype(float))&lt;br /&gt;
ax.grid(True)&lt;br /&gt;
ax.set_ylim((0, 4e5))&lt;br /&gt;
plt.show(block=False)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:InteractiveMatplotlibExample.png]]&lt;br /&gt;
&lt;br /&gt;
==Execute external applications==&lt;br /&gt;
&lt;br /&gt;
How to run external applications from Slicer.&lt;br /&gt;
&lt;br /&gt;
===Run process in default environment===&lt;br /&gt;
&lt;br /&gt;
When a process is launched from Slicer then by default Slicer's ITK, VTK, Qt, etc. libraries are used. If an external application has its own version of these libraries, then the application is expected to crash. To prevent crashing, the application must be run in the environment where Slicer started up (without all Slicer-specific library paths). This startup environment can be retrieved using ''slicer.util.startupEnvironment()''.&lt;br /&gt;
&lt;br /&gt;
Example: run Python3 script from Slicer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
command_to_execute = [&amp;quot;/usr/bin/python3&amp;quot;, &amp;quot;-c&amp;quot;, &amp;quot;print('hola')&amp;quot;]&lt;br /&gt;
from subprocess import check_output&lt;br /&gt;
check_output(&lt;br /&gt;
  command_to_execute, &lt;br /&gt;
  env=slicer.util.startupEnvironment()&lt;br /&gt;
  )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'hola\n'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On some systems, ''shell=True'' must be specified as well.&lt;br /&gt;
&lt;br /&gt;
==Manage extensions==&lt;br /&gt;
&lt;br /&gt;
===Download and install extension===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
extensionName = 'SlicerIGT'&lt;br /&gt;
em = slicer.app.extensionsManagerModel()&lt;br /&gt;
if not em.isExtensionInstalled(extensionName):&lt;br /&gt;
    extensionMetaData = em.retrieveExtensionMetadataByName(extensionName)&lt;br /&gt;
    url = em.serverUrl().toString()+'/download/item/'+extensionMetaData['item_id']&lt;br /&gt;
    extensionPackageFilename = slicer.app.temporaryPath+'/'+extensionMetaData['md5']&lt;br /&gt;
    slicer.util.downloadFile(url, extensionPackageFilename)&lt;br /&gt;
    em.installExtension(extensionPackageFilename)&lt;br /&gt;
    slicer.util.restart()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Install a module directly from a git repository ===&lt;br /&gt;
This can be useful for sharing code in development without requiring a restart of Slicer.&lt;br /&gt;
&lt;br /&gt;
https://gist.github.com/pieper/a9c0ba57de3833c9f5aea68247bda597&lt;/div&gt;</summary>
		<author><name>Hherhold</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/Build_Instructions/Prerequisites&amp;diff=63260</id>
		<title>Documentation/Nightly/Developers/Build Instructions/Prerequisites</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/Build_Instructions/Prerequisites&amp;diff=63260"/>
		<updated>2020-05-26T19:43:32Z</updated>

		<summary type="html">&lt;p&gt;Hherhold: /* MacOSX git-lvs required */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==PREREQUISITES==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- For all systems be sure git-lfs is properly installed for use with VTKv9 (required for VTKm checkout) --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As of early 2018, Slicer migrated to Qt5. Qt4 support was removed in version 4.11. See instructions at this labs page for the new requirements: https://www.slicer.org/wiki/Documentation/Labs/Qt5-and-VTK8&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Please check that the following tools are installed on your machine.&lt;br /&gt;
&lt;br /&gt;
We try to keep current with the most recent releases of these prerequisites, but sometimes it's critical to use the exact versions specified here.  If you run into issues please do whatever you can to find a combination that works or contact the developer mailing list for suggestions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{mbox&lt;br /&gt;
| type = protection&lt;br /&gt;
| text = Qt libraries are '''required'''. Consider reading [[Documentation/{{documentation/version}}/Developers/Build_Instructions/Prerequisites/Qt|Qt requirements]].&lt;br /&gt;
| image= [[{{tool|logo|qt}}|x40px]]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{mbox&lt;br /&gt;
| type = protection&lt;br /&gt;
| text = CMake is '''required'''.&lt;br /&gt;
| image= [[{{tool|logo|cmake}}|x40px]]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{mbox&lt;br /&gt;
| type = protection&lt;br /&gt;
| text = &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;Git is '''required'''.&lt;br /&gt;
| image= [[{{tool|logo|git}}|x40px]]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{mbox&lt;br /&gt;
| type = protection&lt;br /&gt;
| text = SVN is '''required'''.&lt;br /&gt;
| image= [[{{tool|logo|svn}}|x40px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
The prerequisites listed below are required to be able to configure/build/package/test Slicer.&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
*[{{tool|download|cmake}} CMake] &amp;gt;= 3.13.4&lt;br /&gt;
*[{{tool|download|git}} Git] &amp;gt;= 1.7.10&lt;br /&gt;
*[{{tool|download|svn}} Svn] &amp;gt;= 1.7&lt;br /&gt;
*Qt 5.11: &amp;lt;b&amp;gt;tested and recommended&amp;lt;/b&amp;gt;&lt;br /&gt;
**To build Slicer: install Qt using the distribution package manager.&lt;br /&gt;
**To package and redistribute Slicer: download and execute [https://download.qt.io/official_releases/online_installers/qt-unified-linux-x64-online.run qt-unified-linux-x64-online.run], install Qt, make sure to select &amp;lt;tt&amp;gt;qtscript&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;qtwebengine&amp;lt;/tt&amp;gt; components.&lt;br /&gt;
*GCC suite&lt;br /&gt;
&lt;br /&gt;
====Debian====&lt;br /&gt;
&lt;br /&gt;
*Debian squeeze/wheezy/testing(jessie) users, start by pasting the following lines in a terminal&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install subversion git-core git-svn&lt;br /&gt;
 sudo apt-get install build-essential libx11-dev libxt-dev libgl1-mesa-dev libosmesa6-dev libglu1-mesa-dev libfontconfig-dev libxrender-dev libncurses5-dev&lt;br /&gt;
 sudo apt-get install cmake&lt;br /&gt;
 sudo apt-get install qt-sdk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Ubuntu====&lt;br /&gt;
&lt;br /&gt;
=====Common Prerequisites=====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install subversion git-core git-svn&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install make gcc g++ libx11-dev libxt-dev libgl1-mesa-dev libglu1-mesa-dev libfontconfig-dev libxrender-dev libncurses5-dev libxkbcommon-x11-0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install libosmesa6-dev  # Only for Ubuntu &amp;lt; 14.04.3&lt;br /&gt;
&lt;br /&gt;
{{remark|red|On Ubuntu 14.04.3 LTS, attempting to install &amp;lt;tt&amp;gt;libosmesa6-dev&amp;lt;/tt&amp;gt; results in an error.&amp;lt;pre&amp;gt;&lt;br /&gt;
The following packages have unmet dependencies:&lt;br /&gt;
 libosmesa6-dev : Depends: libosmesa6 (= 10.1.3-0ubuntu0.4) but it is not going to be installed&lt;br /&gt;
 E: Unable to correct problems, you have held broken packages.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
For more details, see [https://bugs.launchpad.net/ubuntu/+source/mesa-lts-utopic/+bug/1424059 Bug 1424059].}}&lt;br /&gt;
&lt;br /&gt;
{{remark|green|Slicer compiles successfully without that package, but &amp;lt;tt&amp;gt;VTK_OPENGL_HAS_OSMESA&amp;lt;/tt&amp;gt; is disabled.}}&lt;br /&gt;
&lt;br /&gt;
*For Qt5.5 on Ubuntu 16.04&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install libgstreamer-plugins-base0.10-dev&lt;br /&gt;
&lt;br /&gt;
=====CMake=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Open a terminal and copy the command reported below&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Download stable version of CMake and extract the archive:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install curl&lt;br /&gt;
mkdir ~/Support &amp;amp;&amp;amp; cd ~/Support&lt;br /&gt;
curl -O https://cmake.org/files/v3.13/cmake-3.13.4-Linux-x86_64.tar.gz&lt;br /&gt;
tar -xzvf cmake-3.13.4-Linux-x86_64.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Create symbolic links into &amp;lt;code&amp;gt;~/bin&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p ~/bin&lt;br /&gt;
for name in cmake ctest cpack ccmake cmake-gui; do&lt;br /&gt;
  ln -s ~/Support/cmake-3.13.4-Linux-x86_64/bin/$name ~/bin/$name&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{remark|red|You &amp;lt;b&amp;gt;MUST&amp;lt;/b&amp;gt; download the standard CMake binary because the distributed version of CMake cannot be used to build slicer.&amp;lt;br&amp;gt;&lt;br /&gt;
See [[Documentation/{{documentation/version}}/Developers/FAQ/Building#Why_distributed_CMake_can_not_be_used_on_Ubuntu_12.04_and_above_.3F|here]] for more details.}}&lt;br /&gt;
&lt;br /&gt;
====CentOS====&lt;br /&gt;
&lt;br /&gt;
See instructions reported in [https://github.com/Slicer/SlicerBuildEnvironment/blob/master/Docker/qt5-centos7/Dockerfile qt5-centos7/Dockerfile]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
*CentOS user type:&lt;br /&gt;
 yum install make gcc-c++ libX11-devel libXt-devel libXrender-devel libXext-devel libGLU-devel mesa-libOSMesa-devel mesa-libGL-devel mesa-libGLU-devel ncurses&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Todo: This will have to be added in FAQ: Troubleshoot section&lt;br /&gt;
''glx-utils'' provides ''glxgears'' that can be used to test rendering&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
===MacOSX===&lt;br /&gt;
&lt;br /&gt;
*XCode command line tools must be installed:&lt;br /&gt;
&lt;br /&gt;
  xcode-select --install&lt;br /&gt;
&lt;br /&gt;
*El Capitan is what most developers use.&lt;br /&gt;
*CMake 3.12.2 is recommended. Check the minimum required CMake version [https://github.com/Slicer/Slicer/blob/master/CMakeLists.txt#L1 here]&lt;br /&gt;
*Large File Storage for git is required. (&amp;lt;tt&amp;gt;brew install git-lvs)&amp;lt;/tt&amp;gt;&lt;br /&gt;
*Qt 5: &amp;lt;b&amp;gt;tested and recommended&amp;lt;/b&amp;gt;.&lt;br /&gt;
**For building Slicer: download and execute [https://download.qt.io/official_releases/online_installers/qt-unified-mac-x64-online.dmg qt-unified-mac-x64-online.dmg], install Qt 5.10, make sure to select &amp;lt;tt&amp;gt;qtscript&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;qtwebengine&amp;lt;/tt&amp;gt; components.&lt;br /&gt;
**For packaging and redistributing Slicer: build Qt using [https://github.com/jcfr/qt-easy-build#readme qt-easy-build]&lt;br /&gt;
*Setting &amp;lt;tt&amp;gt;CMAKE_OSX_DEPLOYMENT_TARGET&amp;lt;/tt&amp;gt; CMake variable specifies the minimum macOS version a generated installer may target.  So it should be equal to or less than the version of SDK you are building on. Note that the SDK version is set using &amp;lt;tt&amp;gt;CMAKE_OSX_SYSROOT&amp;lt;/tt&amp;gt; CMake variable automatically initialized during CMake configuration.&lt;br /&gt;
&lt;br /&gt;
====MacOSX 10.9.4 (Mavericks)====&lt;br /&gt;
&lt;br /&gt;
''' (1) Make sure to install this update: http://support.apple.com/kb/DL1754'''&lt;br /&gt;
&lt;br /&gt;
''' (2) Use CMake 3.12.2 - it is known to be working and is supported''' (if you want to use CMake already installed on your system, 2.8.12.2 is known to work on Mac OS X 10.9.5)&lt;br /&gt;
&lt;br /&gt;
*Mac Os X &amp;gt;= 10.5 (Leopard)&lt;br /&gt;
*[{{tool|download|cmake}} CMake] &amp;gt;= 2.8.9&lt;br /&gt;
**For Mac Os X &amp;gt;= 10.8 ([http://en.wikipedia.org/wiki/OS_X_Mountain_Lion Mountain Lion]) and/or recent XCode &amp;gt;= 4.5.X - [{{tool|download|cmake}} CMake] &amp;gt;= 2.8.11 is required. See http://www.cmake.org/files/v2.8/cmake-2.8.11-Darwin64-universal.tar.gz&lt;br /&gt;
&amp;lt;!-- Waiting for the official release, get the release candidate rc1 [http://www.cmake.org/files/v2.8/cmake-2.8.11-rc1-Darwin64-universal.tar.gz here]. For explanation, see [[Documentation/{{documentation/version}}/Developers/Build_Instructions#ld:_framework_not_found_QtWebKit|here]] and [[Documentation/{{documentation/version}}/Developers/Build_Instructions#On_MacOSX_10.8.2C_CMake_hangs_forever|here]]. These versions are also known to work: exact version 20130121-g92bd8 [http://www.cmake.org/files/dev/cmake-2.8.10.20130121-g92bd8-Darwin-universal.tar.gz here] (or version &amp;gt;= 2.8.10.20130220 [http://www.cmake.org/files/dev/?C=M;O=D here]).&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 $ curl -O http://www.cmake.org/files/v2.8/cmake-2.8.11-Darwin64-universal.tar.gz&lt;br /&gt;
 $ tar -xzvf cmake-2.8.11-Darwin64-universal.tar.gz --strip-components=1&lt;br /&gt;
&lt;br /&gt;
 $ CMake\ 2.8-11.app/Contents/bin/cmake --version&lt;br /&gt;
 cmake version 2.8.11&lt;br /&gt;
&lt;br /&gt;
*[{{tool|download|git}} Git] &amp;gt;= 1.7.10&lt;br /&gt;
*[{{tool|download|svn}} Svn] &amp;gt;= 1.7&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
*[[{{tool|logo|cmake}}|x16px]] [{{tool|download|cmake}} CMake] &amp;gt;= 2.8.9&lt;br /&gt;
*[[{{tool|logo|git}}|x16px]] [{{tool|download|git}} Git] &amp;gt;= 1.6.5&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
*XCode (for the SDK libs)&lt;br /&gt;
**After installing XCode, install XCode command line developer tools:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xcode-select --install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*XQuartz - For Mac Os X &amp;gt;= 10.8 ([http://en.wikipedia.org/wiki/OS_X_Mountain_Lion Mountain Lion]) install XQuartz (http://xquartz.macosforge.org) to get X11 (no longer a default in OS X).&lt;br /&gt;
*Qt 4 &amp;gt;= 4.8.5. We recommend you install the following two packages:&lt;br /&gt;
**Download and install [http://download.qt-project.org/official_releases/qt/4.8/4.8.6/qt-opensource-mac-4.8.6-1.dmg qt-opensource-mac-4.8.6-1.dmg]&lt;br /&gt;
**Download and install [http://download.qt-project.org/official_releases/qt/4.8/4.8.6/qt-opensource-mac-4.8.6-1-debug-libs.dmg qt-opensource-mac-4.8.6-1-debug-libs.dmg]&lt;br /&gt;
**For more details [[Documentation/{{documentation/version}}/Developers/Build_Instructions/Prerequisites/Qt#Mac|here]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
** Newer Xcode versions (e.g. 4.3.2) use clang as the default compiler and '''clang is not compatible with ITK version 3'''.  You should use ITK version 4 with recent versions of Xcode.&lt;br /&gt;
** Xcode with gcc should ork with either version of ITK.&lt;br /&gt;
** OS X Mountain Lion: In Xcode 4.5 you now need to install command line tools (no longer included by default). Install within Xcode under the Xcode-&amp;gt;Preferences-&amp;gt;Downloads tab (otherwise git svn will give errors). Then you will need to install XQuartz (http://xquartz.macosforge.org) to get X11 (no longer a default in OS X).&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Mac OSX 10.11 (El Capitan)====&lt;br /&gt;
&lt;br /&gt;
XCode up to version 7 is known to work for Slicer compilation. XCode 8 breaks things on several levels for now. &lt;br /&gt;
Remember to install XCode command line tools (see above) if a reinstall for XCode is needed. &lt;br /&gt;
&lt;br /&gt;
The standard Qt4 installers fail on this version and the 4.8.6 source code won't build.  But [http://slicer-devel.65872.n3.nabble.com/incompatible-qt-4-8-6-with-OS-X-El-Capitan-td4035551.html as described on the slicer-devel mailing list] it is possible to install the [https://github.com/Homebrew/formula-patches/blob/master/qt/el-capitan.patch homebrew version of qt4 which patches it to work on El Capitan] (see below).&lt;br /&gt;
&lt;br /&gt;
*Install the '''OS''', '''Xcode''', and '''XQuartz''' (see MacOSX 10.10 above)&lt;br /&gt;
*Install '''Qt4''' by running the following two commands:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
brew install qt4&lt;br /&gt;
xcode-select --install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*TCL does not build correctly on El Capitan as of 2015-12-03, so when building Slicer turn `Slicer_USE_PYTHONQT_WITH_TCL` off.&lt;br /&gt;
&lt;br /&gt;
====Mac OSX 10.12 (Sierra)====&lt;br /&gt;
&lt;br /&gt;
Similar to 10.11 (El Capitan), there are new issues with Qt4 (caused by Phonon).&lt;br /&gt;
The GitHub user Cartr [https://github.com/Homebrew/homebrew-core/pull/5216 offered a patch to the brew team], and even though it was not integrated (the homebrew team decided to stop patching their recipe to encourage people to use Qt5), he [https://github.com/cartr/homebrew-qt4 turned his formula into a tap] that can be installed (see below).&lt;br /&gt;
&lt;br /&gt;
Follow instructions for 10.11 ''(Installing Xcode, XQuartz, run without TCL)'' but install '''Qt4''' like shown below instead:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
brew install cartr/qt4/qt&lt;br /&gt;
xcode-select --install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Confirmed with Xcode: &lt;br /&gt;
&lt;br /&gt;
*Version 8.1 (8B62) and cmake version 3.4.20151021-g8fbc8e&lt;br /&gt;
*Version 8.3.3 and cmake 3.5.2&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=10.9 -DSlicer_USE_PYTHONQT_WITH_TCL:BOOL=OFF ../Slicer&lt;br /&gt;
make -j `sysctl -n hw.ncpu`&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Mac OSX 10.14 (Mojave)====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;Associated discussion topic is https://discourse.slicer.org/t/building-on-mac-10-14-mojave/4554/21&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Install Qt 5.11.2 using [http://download.qt.io/official_releases/online_installers/qt-unified-mac-x64-online.dmg Qt Online Installer for macOS]&lt;br /&gt;
&lt;br /&gt;
*Install XCode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xcode-select --install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Build qt from homebrew&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
brew install qt&lt;br /&gt;
ccmake -DCMAKE_OSX_DEPLOYMENT_TARGET=10.14 -DQt5_DIR=/usr/local//Cellar/qt/5.13.2/lib/cmake/Qt5 ~/slicer/latest/Slicer&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Explicitly set the SDK when running make&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SDKROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk make -j20&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note if you have build errors in dcmtk related to iconv symbols, you may need to uninstall the icu4c and dcmtk homebrew packages during the build process.  See [https://github.com/QIICR/dcmqi/issues/395 here] and [https://github.com/Slicer/Slicer/commit/6523a62d776e64f970c554978a3c3a8f26022db5 here].&lt;br /&gt;
&lt;br /&gt;
===Windows===&lt;br /&gt;
&lt;br /&gt;
====Common Prerequisites====&lt;br /&gt;
&lt;br /&gt;
*[{{tool|download|cmake}} CMake] &amp;gt;= 3.13.4&lt;br /&gt;
*[{{tool|download|git}} Git] &amp;gt;= 1.7.10&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
*[[{{tool|logo|cmake}}|x16px]]  [{{tool|download|cmake}}  CMake] &amp;gt;= 3.13.4&lt;br /&gt;
*[[{{tool|logo|git}}|x16px]]  [{{tool|download|git}}  Git] &amp;gt;= 1.7.10&lt;br /&gt;
* [https://code.google.com/p/msysgit/downloads/list?can=3 ''Git-X.X.X-preview2013XXXX.exe''] recommended.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
** Use of [http://code.google.com/p/tortoisegit/ TortoiseGit] is optional.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
**{{note}}CMake must be able to find ''git.exe'' and ''patch.exe''. If git is installed in the default location then they may be found there, but if they are not found then either add the folder that contains them to PATH environment variable; or set GIT_EXECUTABLE and Patch_EXECUTABLE as environment variables or as CMake variables at configure time.&lt;br /&gt;
&lt;br /&gt;
*Subversion (SVN) client: any SVN client that has command line tools&lt;br /&gt;
**[http://www.sliksvn.com/en/download SlikSvn] &amp;lt;!-- or [http://www.cygwin.com cygwin's svn client]--&amp;gt;, or&lt;br /&gt;
**[https://tortoisesvn.net/downloads.html TortoiseSVN] - make sure you install ''Command line client tools'' component (disabled by default)&lt;br /&gt;
&lt;br /&gt;
*NSIS (optional): Needed if packaging Slicer - Click [http://nsis.sourceforge.net/Download here] to download. Make sure you install the language packs.&lt;br /&gt;
&lt;br /&gt;
*Qt5: Download download Qt 5.10.0 installer from [https://download.qt.io/archive/qt/5.10/5.10.0 here] and install Qt along with &amp;lt;tt&amp;gt;qtscript&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;qtwebengine&amp;lt;/tt&amp;gt; components (5.10.x version is not available in the [https://download.qt.io/official_releases/online_installers/qt-unified-windows-x86-online.exe unified installer]). For building with VS2015, Qt version 5.10.x or older is required (newer versions do not compile with VS2015 due to QWebEngine minimum requirement is VS2017). For more details, read [[Documentation/Nightly/Developers/Build Instructions/Prerequisites/Qt5|step-by-step]] guide.&lt;br /&gt;
&lt;br /&gt;
====Tested and recommended build environment====&lt;br /&gt;
&lt;br /&gt;
*VS2015 (Visual Studio 14 2015 Win64)&lt;br /&gt;
**Make sure you enable installation of component ''Programming languages / Visual C++ / Common Tools for Visual C++ 2015'' (in some distributions, this option is not enabled by default)&lt;br /&gt;
**Installation of [https://msdn.microsoft.com/en-us/library/mt752379.aspx Cumulative Servicing Release for Microsoft Visual Studio 2015 Update 3 (KB3165756)] is required on some older VS2015 distributions&lt;br /&gt;
*Qt 5.10&lt;br /&gt;
*CMake &amp;gt;= 3.13.4&lt;br /&gt;
&lt;br /&gt;
====Experimental/deprecated build environments====&lt;br /&gt;
&lt;br /&gt;
*[https://visualstudio.microsoft.com/vs/community/ Visual Studio 2017 or 2019 (Community or any other edition)] with VS2017 build tools (tested, works well)&lt;br /&gt;
**When configuring Visual Studio installer, enable installation of Visual Studio 2017 (v141) toolset&lt;br /&gt;
**Visual Studio 2017 toolset must be set in CMake: ''Optional toolset to use (argument to -T)'' need to be set to ''v141''&lt;br /&gt;
**Most recent Qt versions can be used (tested with Qt-5.12.7)&lt;br /&gt;
*[https://visualstudio.microsoft.com/vs/community/ Visual Studio 2017 or 2019 (Community or any other edition)] with VS2015 build tools (tested, works well)&lt;br /&gt;
**When configuring Visual Studio installer, enable installation of component ''VC++ 2015.3 v14.00 (v140) toolset for desktop''&lt;br /&gt;
**Visual Studio 2015 toolset must be set in CMake: ''Optional toolset to use (argument to -T)'' need to be set to ''v140''&lt;br /&gt;
*Cygwin (untested, probably does not work)&lt;br /&gt;
**Cygwin suite (building with cygwin gcc not supported, but the cygwin shell environment can be used to run git, svn, etc).&lt;/div&gt;</summary>
		<author><name>Hherhold</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Main_Page/SlicerCommunity/2019&amp;diff=62087</id>
		<title>Main Page/SlicerCommunity/2019</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Main_Page/SlicerCommunity/2019&amp;diff=62087"/>
		<updated>2019-11-23T02:45:31Z</updated>

		<summary type="html">&lt;p&gt;Hherhold: /* Direct evidence for eudicot pollen-feeding in a Cretaceous stinging wasp (Angiospermae; Hymenoptera, Aculeata) preserved in Burmese amber */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Main_Page/SlicerCommunity}}&lt;br /&gt;
=2019=&lt;br /&gt;
&lt;br /&gt;
==Direct evidence for eudicot pollen-feeding in a Cretaceous stinging wasp (Angiospermae; Hymenoptera, Aculeata) preserved in Burmese amber== &lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.nature.com/articles/s42003-019-0652-7 Communications Biology 2:408 (2019)] | [https://www.nature.com/articles/s42003-019-0652-7.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' David A. Grimaldi, Enrique Peñalver, Eduardo Barrón, Hollister W. Herhold &amp;amp; Michael S. Engel &lt;br /&gt;
&lt;br /&gt;
'''Institution:''' American Museum of Natural History, New York, NY; Museo Geominero, Instituto Geológico y Minero de España. Ríos Rosas 23, E-28003 Madrid, Spain; Division of Entomology, Natural History Museum, and Department of Ecology and Evolutionary Biology, University of Kansas, Lawrence, Kansas 66045, USA&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' Angiosperms and their insect pollinators form a foundational symbiosis, evidence for which from the Cretaceous is mostly indirect, based on fossils of insect taxa that today are anthophilous, and of fossil insects and flowers that have apparent anthophilous and ento- mophilous specializations, respectively. We present exceptional direct evidence preserved in mid-Cretaceous Burmese amber, 100 mya, for feeding on pollen in the eudicot genus Tri- colporoidites by a basal new aculeate wasp, Prosphex anthophilos, gen. et sp. nov., in the lineage that contains the ants, bees, and other stinging wasps. Plume of hundreds of pollen grains wafts from its mouth and an apparent pollen mass was detected by micro-CT in the buccal cavity: clear evidence that the wasp was foraging on the pollen. Eudicots today comprise nearly three-quarters of all angiosperm species. Prosphex feeding on Tricolporoidites supports the hypothesis that relatively small, generalized insect anthophiles were important pollinators of early angiosperms.&lt;br /&gt;
&lt;br /&gt;
(Post-processing and analysis performed in 3D Slicer.)&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Patellar Calcar: Morphometric Analysis by Knee Magnetic ResonanceImaging and Three-dimensional Reconstruction Software-assisted== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/31529166 Surg Radiol Anat. 2019 Dec;41(12):1483-8. PMID: 31529166]&lt;br /&gt;
&lt;br /&gt;
'''Authors:'''  Zhao B, Cao K, Li XT, Zhu HT, Sun YS.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Department of Radiology, Key Laboratory of Carcinogenesis and Translational Research, Ministry of Education, Peking University Cancer Hospital and Institute, Beijing, China.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' PURPOSE: Patellar calcar corresponds to a greater trabecular bone density area in the patella lateral facet, whose morphometry is uncertain. This study aimed to describe patellar calcar morphometry by knee MRI and develop a 3D reconstruction software-assisted.&lt;br /&gt;
&lt;br /&gt;
MATERIALS AND METHODS: Consecutive adult patients, submitted to knee MRI, between 2014 and 2017, were entered in IMPAX software. Exclusion criteria are history of patellar surgical intervention, trauma, chondromalacia, bone edema or bipartite patella. All MRI images were retrospectively reviewed by three readers. MRI patellar calcar measurements are height, width, thickness and posterior distance. 3D model protocol reconstruction: '''[http://slicer.org 3D Slicer]''' software was used to design a preliminary model for each patient, and then all were automatically merged into one, which was finalized using the software segmentation tools. For 3D patellar calcar location, the transpolar axis was designed.&lt;br /&gt;
&lt;br /&gt;
RESULTS: 250 MRI were analyzed, patellar calcar was present in 208 (83.2%); 101 men and 107 women. Mean age was 44.3 ± 15.6 years.&lt;br /&gt;
&lt;br /&gt;
MEASUREMENTS: height 13.84 ± 2.42 mm (male: 14.50 ± 2.42; female: 13.21 ± 2.26) (p &amp;lt; 0.0001), width 12.21 ± 2.26 mm (male 13.14 ± 2.22; female 11.33 ± 1.93) (p &amp;lt; 0.0001). No statistically significant difference of thickness 0.56 ± 0.22 mm (male: 0.56 ± 0.25; female: 0.56 ± 0.20) and posterior distance 2.37 ± 0.80 mm (male: 2.46 ± 0.89; female: 2.29 ± 0.69) between genders was found. 3D model results: transpolar axis went through the patellar calcar in all the cases.&lt;br /&gt;
&lt;br /&gt;
CONCLUSIONS: This study shows in a 3D model reconstruction, what was previously described in the literature, determining for the first time the patellar calcar morphometry in the knee MRI and identifying it as a regular finding in this imaging test.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Whole Lesion Histogram Analysis of Apparent Diffusion Coefficients on MRI Predicts Disease-free Survival in Locally Advanced Squamous Cell Cervical Cancer after Radical Chemo-radiotherapy== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/31729974 BMC Cancer. 2019 Nov 15;19(1):1115. PMID: 31729974]&lt;br /&gt;
&lt;br /&gt;
'''Authors:'''  Zhao B, Cao K, Li XT, Zhu HT, Sun YS.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Department of Radiology, Key Laboratory of Carcinogenesis and Translational Research, Ministry of Education, Peking University Cancer Hospital and Institute, Beijing, China.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' BACKGROUND: The aim was to investigate the prognostic value of MR apparent diffusion coefficients (ADC) using histogram analysis (HA) in predicting disease-free survival (DFS) of cervical cancer after chemo-radiation therapy.&lt;br /&gt;
&lt;br /&gt;
METHODS: We retrospectively analyzed 103 women with pathologically proven squamous cell uterine cancer who received chemo-radiation therapy between 2009 and 2013. All patients were followed up for more than 2 years. Pre-treatment MR images were retrieved and imported for HA using an in-house developed software program based on '''[http://slicer.org 3D Slicer]'''. Regions of interest of whole tumors were drawn manually on DWI with reference to T2WI. HA features (mean, max, min, 50, 10, 90%, kurtosis, and skewness) were extracted from apparent diffusion coefficient (ADC) maps and compared between the recurrence and non-recurrence groups after the 2-year follow-up. Univariate and multivariate Cox regression analysis was used to correlate ADC HA features and relevant clinical variables (age, grade, maximal diameter of tumor, FIGO stage, SCC-Ag) with DFS.&lt;br /&gt;
&lt;br /&gt;
RESULTS: One hundred three patients with stage IB-IV cervical cancers were followed up for 2.0-94.6 months (median 48.9 months). Twenty patients developed recurrence within 2 years. In the recurrence group, the min (P = 0.001) and 10% (P = 0.048) ADC values were significantly lower than those of the non-recurrence group. Univariate and multivariate Cox regression analysis revealed that ADCmin (P = 0.006, HR = 0.110) was significantly correlated with DFS.&lt;br /&gt;
&lt;br /&gt;
CONCLUSION: Pre-treatment volumetric ADCmin in histogram analysis is an independent factor that is correlated with DFS in cervical cancer patients treated with chemo-radiation therapy.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Variations in the Size and Shape of Human Cochlear Malformation Types== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/30980504 Anat Rec (Hoboken). 2019 Oct;302(10):1792-9. PMID: 30980504]&lt;br /&gt;
&lt;br /&gt;
'''Authors:'''  Dhanasingh A.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  MED-EL GmbH, Innsbruck, Austria.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' The objective of this study is to determine the variations in size and shape of the most widely recognized cochlear malformation types using three-dimensional (3D) visualization. Using '''[http://slicer.org 3D Slicer]''' freeware, the complete inner-ear structures were segmented from 46 anonymized high-resolution computed tomography (HRCT) image datasets. Cochlear height, internal auditory canal height, and width were measured from the axial plane. Cochlear basal turn diameter was measured from the oblique coronal plane. Number of cochlear turns was measured from the 3D images and the corresponding cochlear duct length (CDL) was estimated using the CDL equations given in Alexiades et al. [Otol Neurotol 36 (2015) 904-907]. Out of 46 preoperative HRCT image datasets of human temporal bone, cochlear anatomy types including normal anatomy (4), enlarged vestibular aqueduct syndrome (3), cochlear aplasia (2), incomplete partition Types I (8), II (Mondini's deformity) (3), and III (X-linked) (4), cochlear hypoplasia (CH) (17), and common cavity (CC) (5) were identified. Majority of CH cases had cochlear height shorter than 4 mm whereas the CC cases measured cochlear height above 6 mm. For all the other malformation types, cochlear height was between 4 and 6 mm. In terms of &amp;quot;A&amp;quot; value, majority of CH cases showed shorter &amp;quot;A&amp;quot; value of &amp;lt;7.5 mm, which is in the lower end in comparison to the rest of the malformation types reported in this study. 3D-visualization shows the size and shape variations of all the structures of inner ear and also improves the clinicians' ability to visualize cochlear anatomy and nearby structures much easier than from the 2D image slices.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Volumetric Assessment of the Dental Crown for Sex Estimation by Means of Cone-beam Computed Tomography== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/31442711 Forensic Sci Int. 2019 Oct;303:109920. PMID: 31442711]&lt;br /&gt;
&lt;br /&gt;
'''Authors:'''  Manhaes-Caldas D, Oliveira ML, Groppo FC, Haiter-Neto F.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Oral Diagnosis, Division of Oral Radiology, Piracicaba Dental School, University of Campinas, São Paulo, Brazil.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' Sex estimation has a vital role in the solution of forensic cases when the identification of a large number of victims is needed. Considering the sexual dimorphism of the human teeth, the objective of this study was to estimate human sex by means of cone beam computed tomography (CBCT)-based volumetric assessment of the dental crown. A total of 78 CBCT images of the upper central incisors, upper and lower canines, and lower lateral incisors were equally selected from a Brazilian population aged between 8 and 36 years old. The dental crowns were subjected to image-based volumetric assessment by manual segmentation using the '''[http://slicer.org 3D Slicer]''' software, and the outcomes were compared by the Mann-Whitney test, unpaired t-test, Pearson correlation test, conditional backward stepwise logistic regression and intraclass correlation coefficient (α=0.05). The volumetric accuracy of the upper central incisor, upper canine and lower canine for sex estimation were 64.1%, 74.4% and 79.5%, respectively. The combined analysis of the upper and lower canines allowed an average accuracy of 83.7%. In conclusion, the combined volumetric analysis of the crown of the upper and lower canines can be applied for sex estimation in the studied population.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Association of Serum Cystatin C with White Matter Abnormalities in Patients with Amnestic Mild Cognitive Impairment== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/31489777 Geriatr Gerontol Int. 2019 Oct;19(10):1036-40. PMID: 31489777]&lt;br /&gt;
&lt;br /&gt;
'''Authors:'''  Hirao K, Yamashita F, Tsugawa A, Haime R, Fukasawa R, Sato T, Okita M, Shimizu S, Kanetaka H, Umahara T, Sakurai H, Hanyu H.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Geriatric Medicine, Tokyo Medical University, Tokyo, Japan.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' AIM: White matter hyperintensities (WMH) on MRI have been reported to be a risk factor for the conversion from mild cognitive impairment (MCI) to Alzheimer's disease, although the reason remains unclear. In the present study, we hence investigated the associations between WMH volumes and cognitive function, blood levels of various molecules, and the presence of lifestyle-associated diseases in patients with amnestic MCI.&lt;br /&gt;
&lt;br /&gt;
METHODS: The initial data of 38 patients with amnestic MCI and 10 normal control individuals were analyzed. The volumes of periventricular hyperintensities (PVH) and deep WMH (DWMH) were measured on T2 fluid-attenuated inversion recovery using the imaging software, '''[http://slicer.org 3D Slicer]'''; and the association between PVH/DWMH volumes and cognitive function, blood levels of molecules (such as cystatin C [CysC], 25-hydroxyvitamin D and homocysteine) and the presence of lifestyle-associated diseases (such as hypertension, hyperlipidemia and diabetes mellitus) were analyzed.&lt;br /&gt;
&lt;br /&gt;
RESULTS: In the MCI group, the PVH volume : intracranial volume ratio significantly correlated with Trail Making Test-A/B scores and CysC level by Pearson's analysis, and the PVH volume : intracranial volume ratio significantly correlated with only CysC levels, whereas the DWMH volume : intracranial volume ratio did not correlate with any items at all by linear multiple regression analysis.&lt;br /&gt;
&lt;br /&gt;
CONCLUSIONS: PVH volume was closely associated with frontal lobe dysfunction, particularly with attention and executive dysfunction. Serum CysC level was associated with PVH volume, which suggests that CysC might be a useful marker for determining treatment strategies for white matter abnormalities in amnestic MCI.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Three-dimensional Clavicle Displacement Analysis and its Effect on ScapularPosition in Acute Clavicle Midshaft Fracture== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/31272891 J Shoulder Elbow Surg. 2019 Oct;28(10):1877-85. PMID: 31272891]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Kim JH, Gwak HC, Kim CW, Lee CR, Kim YJ, Seo HW.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Department of Orthopedic Surgery, Inje University Busan Paik Hospital, Inje University College of Medicine, Busan, Republic of Korea.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:'''BACKGROUND: The purpose of this study was to measure the distance of the clavicle in 3 dimensions (3D) and each direction (anterior to posterior, medial to lateral, and superior to inferior) and to analyze the correlation of the angular orientation of the scapula according to each directional distance of the clavicle.&lt;br /&gt;
&lt;br /&gt;
METHODS: Sixty-seven patients with Robinson 2B1 and 2B2 clavicle midshaft fracture (46.0 ± 17.4 years, men = 50, women = 17) were selected as final subjects. Patients' computed tomography was reconstructed using an image processing program ('''[http://slicer.org 3D Slicer]''' v.4.3 software). Anteroposterior (AP) distance, medial-to-lateral distance, superior-to-inferior distance, and 3D distance of both clavicles were measured. The plane connecting the 3 points (superior pole, inferior pole, and center of glenoid) of the scapula was used to calculate differences in the angular orientation between both scapulae.&lt;br /&gt;
&lt;br /&gt;
RESULTS: Among each directional distance of the clavicle, only the AP distance showed negative correlation with scapular angular orientation with anterior tilting, internal rotation, and upward rotation of the scapula (Pearson's correlation coefficient: -0.68, -0.24, and -0.28; P &amp;lt; .001, P = .048, and P = .021).&lt;br /&gt;
&lt;br /&gt;
CONCLUSION: The shortening of the AP distance of the clavicle was related to the angular orientation of the scapula in acute clavicle fracture. AP shortening should be considered when determining the treatment of clavicle fracture.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==A review on Multiplatform Evaluations of Semi-automatic Open-source Based Image Segmentation for Cranio-maxillofacial Surgery== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/31610359 Comput Methods Programs Biomed. 2019 Sep 30;182:105102. PMID: 31610359]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Wallner J, Schwaiger M, Hochegger K, Gsaxner C, Zemann W, Egger J.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Medical University of Graz, Department of Oral and Maxillofacial Surgery, Graz, Austria.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' BACKGROUND AND OBJECTIVES: Computer-assisted technologies, such as image-based segmentation, play an important role in the diagnosis and treatment support in cranio-maxillofacial surgery. However, although many segmentation software packages exist, their clinical in-house use is often challenging due to constrained technical, human or financial resources. Especially technological solutions or systematic evaluations of open-source based segmentation approaches are lacking. The aim of this contribution is to assess and review the segmentation quality and the potential clinical use of multiple commonly available and license-free segmentation methods on different medical platforms.&lt;br /&gt;
&lt;br /&gt;
METHODS: In this contribution, the quality and accuracy of open-source segmentation methods was assessed on different platforms using patient-specific clinical CT-data and reviewed with the literature. The image-based segmentation algorithms GrowCut, Robust Statistics Segmenter, Region Growing 3D, Otsu &amp;amp; Picking, Canny Segmentation and Geodesic Segmenter were investigated in the mandible on the platforms 3D Slicer, MITK and MeVisLab. Comparisons were made between the segmentation algorithms and the ground truth segmentations of the same anatomy performed by two clinical experts (n = 20). Assessment parameters were the Dice Score Coefficient (DSC), the Hausdorff Distance (HD), and Pearsons correlation coefficient (r).&lt;br /&gt;
&lt;br /&gt;
RESULTS: The segmentation accuracy was highest with the GrowCut (DSC 85.6%, HD 33.5 voxel) and the Canny (DSC 82.1%, HD 8.5 voxel) algorithm. Statistical differences between the assessment parameters were not significant (p &amp;lt; 0.05) and correlation coefficients were close to the value one (r &amp;gt; 0.94) for any of the comparison made between the segmentation methods and the ground truth schemes. Functionally stable and time-saving segmentations were observed.&lt;br /&gt;
&lt;br /&gt;
CONCLUSION: High quality image-based semi-automatic segmentation was provided by the GrowCut and the Canny segmentation method. In the cranio-maxillofacial complex, these segmentation methods provide algorithmic alternatives for image-based segmentation in the clinical practice for e.g. surgical planning or visualization of treatment results and offer advantages through their open-source availability. This is the first systematic multi-platform comparison that evaluates multiple license-free, open-source segmentation methods based on clinical data for the improvement of algorithms and a potential clinical use in patient-individualized medicine. The results presented are reproducible by others and can be used for clinical and research purposes.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Potential Role of Convolutional Neural Network Based Algorithm in Patient Selection for DCIS Observation Trials Using a Mammogram Dataset== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/31526687 Acad Radiol. 2019 Sep 13. PMID: 31526687]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Mutasa S, Chang P, Van Sant EP, Nemer J, Liu M, Karcich J, Patel G, Jambawalikar S, Ha R.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Department of Medical Physics and Radiology, Columbia University Medical Center, NY, USA.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' RATIONALE AND OBJECTIVES: We investigated the feasibility of utilizing convolutional neural network (CNN) for predicting patients with pure Ductal Carcinoma In Situ (DCIS) versus DCIS with invasion using mammographic images.&lt;br /&gt;
&lt;br /&gt;
MATERIALS AND METHODS: An IRB-approved retrospective study was performed. 246 unique images from 123 patients were used for our CNN algorithm. In total, 164 images in 82 patients diagnosed with DCIS by stereotactic-guided biopsy of calcifications without any upgrade at the time of surgical excision (pure DCIS group). A total of 82 images in 41 patients with mammographic calcifications yielding occult invasive carcinoma as the final upgraded diagnosis on surgery (occult invasive group). Two standard mammographic magnification views (CC and ML/LM) of the calcifications were used for analysis. Calcifications were segmented using an open source software platform '''[http://slicer.org 3D Slicer]''' and resized to fit a 128 × 128 pixel bounding box. A 15 hidden layer topology was used to implement the neural network. The network architecture contained five residual layers and dropout of 0.25 after each convolution. Five-fold cross validation was performed using training set (80%) and validation set (20%). Code was implemented in open source software Keras with TensorFlow on a Linux workstation with NVIDIA GTX 1070 Pascal GPU.&lt;br /&gt;
&lt;br /&gt;
RESULTS: Our CNN algorithm for predicting patients with pure DCIS achieved an overall diagnostic accuracy of 74.6% (95% CI, ±5) with area under the ROC curve of 0.71 (95% CI, ±0.04), specificity of 91.6% (95% CI, ±5%) and sensitivity of 49.4% (95% CI, ±6%).&lt;br /&gt;
&lt;br /&gt;
CONCLUSION: It's feasible to apply CNN to distinguish pure DCIS from DCIS with invasion with high specificity using mammographic images.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Texture Analysis of Pretreatment &amp;lt;sup&amp;gt;18F&amp;lt;/sup&amp;gt;FDG PET/CT for the Prognostic Prediction of Locally Advanced Salivary Gland Carcinoma Treated with Interstitial Brachytherapy== &lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/31511990 EJNMMI Res. 2019 Sep 11;9(1):89. PMID: 31511990]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Wu WJ, Li ZY, Dong S, Liu SM, Zheng L, Huang MW, Zhang JG.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Department of Oral and Maxillofacial Surgery, Peking University School and Hospital of Somatology, Beijing, China.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' BACKGROUND: The aim of this study was to evaluate the prognostic value of positron emission tomography (PET) parameters and the PET texture features of fluorine 18-fluorodeoxyglucose ([18F]FDG) uptake on pretreatment PET/computed tomography (CT) in patients with locally advanced salivary gland carcinoma treated with interstitial brachytherapy.&lt;br /&gt;
&lt;br /&gt;
METHODS: Forty-three patients with locally advanced salivary gland carcinoma of the head and neck were treated with 125I interstitial brachytherapy as the sole modality and underwent &amp;lt;sup&amp;gt;18F&amp;lt;/sup&amp;gt;FDG PET/CT scanning before treatment. Tumor segmentation and texture analysis were performed using the '''[http://slicer.org 3D Slicer]''' software. In total, 54 features were extracted and categorized as first-order statistics, morphology and shape, gray-level co-occurrence matrix, and gray-level run length matrix. Up to November 2018, the follow-up time ranged from 6 to 120 months (median 18 months). Cumulative survival was calculated by the Kaplan-Meier method. Factors between groups were compared by the log-rank test. Multivariate Cox regression analysis with a backward conditional method was used to predict progression-free survival (PFS).&lt;br /&gt;
&lt;br /&gt;
RESULTS: The 3- and 5-year locoregional control (LC) rates were 55.4% and 37.0%, respectively. The 3- and 5-year PFS rates were 51.2% and 34.1%, respectively. The 3- and 5-year overall survival (OS) rates were 77.0% and 77.0%, respectively. Univariate analysis revealed that minimum intensity, mean intensity, median intensity, root mean square, and long run emphasis (LRE) were significant predictors of PFS, whereas clinicopathological factors, conventional PET parameters, and PET texture features failed to show significance. Multivariate Cox regression analysis showed that minimum intensity and LRE were significant predictors of PFS.&lt;br /&gt;
&lt;br /&gt;
CONCLUSIONS: The texture analysis of pretreatment [18F]FDG PET/CT provided more information than conventional PET parameters for predicting patient prognosis of locally advanced salivary gland carcinoma treated with interstitial brachytherapy. The minimum intensity was a risk factor for PFS, and LRE was a favorable factor in prognostic prediction according to the primary results.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Levator Bowl Volume during Straining and its Relationship to other Levator Measures== &lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/31222569 Int Urogynecol J. 2019 Sep;30(9):1457-63. PMID: 31222569]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Nandikanti L, Sammarco AG, Chen L, Ashton-Miller JA, DeLancey JO.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' School of Public Health, University of Michigan, Ann Arbor, MI, USA.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' INTRODUCTION AND HYPOTHESIS: This study was aimed at measuring levator ani bowl volume at rest and while straining, comparing women with and without prolapse (controls), and assessing the ability of measures of the mid-sagittal bowl area, levator hiatus (LH), and urogenital hiatus (UGH) to predict bowl volume.&lt;br /&gt;
&lt;br /&gt;
METHODS: Forty MRI scans previously acquired in case-control prolapse studies, including 20 women with prolapse and 20 women without prolapse, of similar age and parity, were selected. 3D models of rest and strain bowl volumes were made using sagittal scans and '''[http://slicer.org 3D Slicer]'''. Mid-sagittal bowl area, UGH, and LH were measured using ImageJ. Data were analyzed using two sample t tests, effect sizes, and Pearson's correlation coefficients at the 0.05 significance level.&lt;br /&gt;
&lt;br /&gt;
RESULTS: Data were acquired in a total of 40 total women. Levator bowl volume at strain had a correlation coefficient of 0.5 with bowl volume at rest. During straining, prolapse subjects had a 53% larger bowl volume than control subjects (254 ± 86 cm3 vs 166 ± 44 cm3, p &amp;lt; 0.001), but at rest, the difference was 34% (138 ± 40 cm3 vs 103 ± 25 cm3, p = 0.002). Effect sizes for all parameters were large (d &amp;gt; 0.75). The strongest correlation with straining bowl volume was mid-sagittal straining bowl area (r = 0.86), followed by LH strain (r = 0.80), then UGH strain (r = 0.76).&lt;br /&gt;
&lt;br /&gt;
CONCLUSIONS: Straining levator bowl volume is substantially different than measures made at rest, with only a quarter of straining values explained by resting measurements. The bowl area at strain is the best 2D measurement estimating bowl volume and explains 74% of straining bowl volume.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Funding:'''&lt;br /&gt;
&lt;br /&gt;
*P50 HD044406/HD/NICHD NIH HHS/United States&lt;br /&gt;
*R01 HD038665/HD/NICHD NIH HHS/United States&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Mixed Reality-Based Preoperative Planning for Training of Percutaneous Transforaminal Endoscopic Discectomy: A Feasibility Study.== &lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/31203062 World Neurosurg. 2019 Sep;129:e767-e775. PMID: 31203062]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Yu H, Zhou Z, Lei X, Liu H, Fan G, He S.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Orthopedic Department, Shanghai Tenth People's Hospital, Shanghai, China.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' OBJECTIVE: To explore the effect of preoperative planning using mixed reality (MR) on training of percutaneous transforaminal endoscopic discectomy (PTED).&lt;br /&gt;
&lt;br /&gt;
METHODS: Before the training, we invited an experienced chief physician to plan the puncture path of PTED on the X-ray films of the lumbar spine model and the '''[http://slicer.org 3D Slicer]''' platform, respectively, and used this as the standard to guide trainees. In the aggregate, 60 young residents were randomly divided into Group A (N = 30) and Group B (N = 30). Group A learned the 2-dimensional standard planning route, whereas Group B learned the standard route planning based on MR through the 3D Slicer platform. Then, trainees were asked to conduct PTED puncture on a lumbar spine model. Questionnaires were distributed to trainees before and after the training. During the training, puncture times, operating time (minutes), and fluoroscopy times were recorded.&lt;br /&gt;
&lt;br /&gt;
RESULTS: After the training, it was obvious that more trainees showed their recognition of MR, believing that MR could help preoperative planning and training of PTED. Their high satisfaction with the training indicated the success of our training. Moreover, puncture times, operating time (minutes), and fluoroscopy times of Group B were significantly lower than those of Group A.&lt;br /&gt;
&lt;br /&gt;
CONCLUSIONS: MR technology contributes to preoperative planning of PTED and is beneficial in the training of PTED. It significantly reduces puncture times and fluoroscopy times, providing a standardized method for the training of PTED.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Evaluation of Accuracy of a Three-Dimensional Printed Model in Open-Wedge High Tibial Osteotomy== &lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/30189435 J Knee Surg. 2019 Sep;32(9):841-6. PMID: 30189435] | [https://www.thieme-connect.com/products/ejournals/abstract/10.1055/s-0038-1669901 PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Kim HJ, Park J, Park KH, Park IH, Jang JA, Shin JY, Kyung HS.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Orthopaedic Surgery, School of Medicine, Kyungpook National University, Kyungpook National University Hospital, Daegu, South Korea.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' The purpose of this study was to evaluate the usefulness of a three-dimensional (3D) printed model for open-wedge high tibial osteotomy (HTO). This study retrospectively evaluated 20 patients with medial knee osteoarthritis and varus deformity. Between October 2015 and July 2016, the patients underwent open-wedge HTO using a 3D printed model. The mean age of patients was 55.2 years (range, 51-60 years). The mean preoperative mechanical femorotibial angle (mFTA) was varus 7.8 degrees (range, varus 4.7-11.6 degrees). After measuring the target angle using full-length lower limb weight-bearing radiography, the osteotomy was simulated using 3D images obtained from computed tomography (CT) with the [http://www.slicer.org '''3D Slicer'''] program. On the basis of the simulated osteotomy section and the target angle, the model was then designed and printed. Open-wedge HTO was then performed by applying the 3D printed model to the opening gap. The accuracy of osteotomy and the change in posterior tibial slope (PTS) angle were evaluated. The weight-bearing line on the tibial plateau was corrected from a preoperative mean of 19.5 ± 9.8% to a postoperative mean of 63.1 ± 6.1% (p &amp;lt; 0.001). The postoperative values were not statistically significantly different from the preoperative target points (p = 0.688). The mFTA was corrected to a postoperative mean of valgus 3.8 ± 1.4 degrees. The PTS angle showed no significant change (p = 0.256). A 3D printed model using CT may be useful for preoperative planning of open-wedge HTO. Satisfactory correction can be obtained without a change in the PTS.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prediction of Immunohistochemistry of Suspected Thyroid Nodules by Use of Machine Learning-Based Radiomics== &lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/31461321 AJR Am J Roentgenol. 2019 Aug 28:1-10. PMID: 31461321]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Gu J, Zhu J, Qiu Q, Wang Y, Bai T, Yin Y.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' School of Medicine and Life Sciences, University of Jinan Shandong Academy of Medical Sciences, Jinan, Shandong, China.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' OBJECTIVE. The purpose of this study was to develop and validate a radiomics model for evaluating immunohistochemical characteristics in patients with suspected thyroid nodules. MATERIALS AND METHODS. A total of 103 patients (training cohort-to-validation cohort ratio, ≈ 3:1) with suspected thyroid nodules who had undergone thyroidectomy and immunohistochemical analysis were enrolled. The immunohistochemical markers were cytokeratin 19, galectin 3, thyroperoxidase, and high-molecular-weight cytokeratin. All patients underwent CT before surgery, and a '''[http://slicer.org 3D Slicer]''' was used to analyze images of the surgical specimen. Test-retest and Spearman correlation coefficient (ρ) were used to select reproducible and nonredundant features. The Kruskal-Wallis test (p &amp;lt; 0.05) was used for feature selection, and a feature-based model was built by support vector machine methods. The performance of the radiomic models was assessed with respect to accuracy, sensitivity, specificity, corresponding AUC, and independent validation. RESULTS. Eighty-six reproducible and nonredundant features selected from the 828 features were used to build the model. The best performance of the cytokeratin 19 model yielded accuracy of 84.4% in the training cohort and 80.0% in the validation cohort. The thyroperoxidase and galectin 3 predictive models yielded accuracies of 81.4% and 82.5% in the training cohort and 84.2% and 85.0% in the validation cohort. The performance of the high-molecular-weight cytokeratin predictive model was not good (accuracy, 65.7%) and could not be validated. CONCLUSION. A radiomics model with excellent performance was developed for individualized noninvasive prediction of the presence of cytokeratin 19, galectin 3, and thyroperoxidase based on CT images. This model may be used to identify benign and malignant thyroid nodules.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Technique Development and Measurement of Cross-Sectional Area of the Pubovisceral Muscle on MRI Scans of Living Women== &lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/29974138 Int Urogynecol J. 2019 Aug;30(8):1305-12. PMID: 29974138]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Masteling M, Ashton-Miller JA, DeLancey JOL.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Mechanical Engineering, University of Michigan, Ann Arbor, MI, USA.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' INTRODUCTION AND HYPOTHESIS:&lt;br /&gt;
Measurements of the anatomic cross-sectional area (CSA) of the pubovisceral muscle (PVM) in women are confounded by the difficulty of separating the muscle from the adjacent puborectal (PRM) and iliococcygeal (ICM) muscles when visualized in a plane orthogonal to the fiber direction. We tested the hypothesis that it might be possible to measure the PVM CSA within a defined region of interest based on magnetic resonance images (MRI).&lt;br /&gt;
&lt;br /&gt;
METHODS:&lt;br /&gt;
MRI scans of 11 women with unilateral PVM tears and seven primiparous women with intact muscles following elective C-section were used to identify the PVM injury zone defined by the mean location of its boundaries with the adjacent intact PRM and ICM from existing anatomic reference points using '''[http://slicer.org 3D Slicer]''' and ImageJ software. Then, from the 15 or more 2-mm transverse slices available, the slice with the maximum anatomic CSA of the left and right PVM was found in 24 primiparous women with bilaterally intact muscles who had delivered via C-section.&lt;br /&gt;
&lt;br /&gt;
RESULTS:&lt;br /&gt;
Mean [± standard deviation (SD)] of the maximum left or right PVM cross-section areas for the 24 women, measured by two different raters, was 1.25 ± 0.29 cm2 (range 0.75-1.86). The 5th, 50th, and 95th percentile values were 0.77, 1.23, and 1.80 cm&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;, respectively. Inter- and intrarater measurement repeatability intraclass correlation coefficients exceeded 0.89 and 0.90, respectively.&lt;br /&gt;
&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
It is possible to use MRI to identify the volume of interest with the maximum anatomic cross section of the PVM belly while minimizing the inadvertent inclusion of adjacent PRM or ICM in that measurement.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Multi-objective Parameter Auto-tuning for Tissue Image Segmentation Workflows== &lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/30402669 J Digit Imaging. 2019 Jun;32(3):521-33. PMID: 30402669]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Taveira LFR, Kurc T, Melo ACMA, Kong J, Bremer E, Saltz JH, Teodoro G.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Computer Science, University of Brasília, Brasília, Brazil.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' We propose a software platform that integrates methods and tools for multi-objective parameter auto-tuning in tissue image segmentation workflows. The goal of our work is to provide an approach for improving the accuracy of nucleus/cell segmentation pipelines by tuning their input parameters. The shape, size, and texture features of nuclei in tissue are important biomarkers for disease prognosis, and accurate computation of these features depends on accurate delineation of boundaries of nuclei. Input parameters in many nucleus segmentation workflows affect segmentation accuracy and have to be tuned for optimal performance. This is a time-consuming and computationally expensive process; automating this step facilitates more robust image segmentation workflows and enables more efficient application of image analysis in large image datasets. Our software platform adjusts the parameters of a nuclear segmentation algorithm to maximize the quality of image segmentation results while minimizing the execution time. It implements several optimization methods to search the parameter space efficiently. In addition, the methodology is developed to execute on high-performance computing systems to reduce the execution time of the parameter tuning phase. These capabilities are packaged in a Docker container for easy deployment and can be used through a friendly interface extension in [http://www.slicer.org '''3D Slicer''']. Our results using three real-world image segmentation workflows demonstrate that the proposed solution is able to (1) search a small fraction (about 100 points) of the parameter space, which contains billions to trillions of points, and improve the quality of segmentation output by × 1.20, × 1.29, and × 1.29, on average; (2) decrease the execution time of a segmentation workflow by up to 11.79× while improving output quality; and (3) effectively use parallel systems to accelerate parameter tuning and segmentation phases.&lt;br /&gt;
&lt;br /&gt;
'''Funding:'''&lt;br /&gt;
&lt;br /&gt;
*R01 LM011119/U.S. National Library of Medicine&lt;br /&gt;
*U24 CA180924/National Cancer Institute&lt;br /&gt;
*R01 LM009239/U.S. National Library of Medicine&lt;br /&gt;
*K25 CA181503/National Institutes of Health&lt;br /&gt;
*UG3 CA225021/CA/NCI NIH HHS/United States&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
==Ancient Machine Tools for the Construction of the Antikythera Mechanism Parts== &lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' Digital Applications in Archaeology and Cultural Heritage. 2019 Jun; 13:e00092.&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Aristeidis Voulgaris, Christophoros Mouratidis, Andreas Vossinakis.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Thessaloniki Astronomy Club, Thessaloniki, Greece.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' The present work deals with the study, design, original reconstruction and use of the bow drill of the late archaic period (ca 490 BC), as depicted in two different red figure vases and the vertical lathe depicted on an engraved wall painting of the Petosiris tomb of the Ptolemaic era (300 BC). After the reconstruction of the three ancient tools, during the implementation of the FRAMe Project, their use was thoroughly studied, from which useful conclusions were drawn about the material processing in antiquity, as well as the details of the construction of the Antikythera Mechanism components. Following the new findings detected from the authors’ study of the X-Ray Computed Tomographies from Antikythera Mechanism Research Project, these ancient machine tools can be considered as the progenitors of the Hellenistic period machine tools, which were used for the construction of the mechanical components of the Mechanism.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Real-Time Adaptive Planning Method for Radiotherapy Treatment Delivery for Prostate Cancer Patients, Based on a Library of Plans Accounting for Possible Anatomy Configuration Changes== &lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/30818345 PLoS One. 2019 Feb 28;14(2):e0213002. PMID: 30818345] | [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6394960/pdf/pone.0213002.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Antico M, Prinsen P, Cellini F, Fracassi A, Isola AA, Cobben D, Fontanarosa D.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' School of Chemistry, Physics and Mechanical Engineering, Queensland University of Technology, Brisbane, Queensland, Australia.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' BACKGROUND AND PURPOSE:&lt;br /&gt;
In prostate cancer treatment with external beam radiation therapy (EBRT), prostate motion and internal changes in tissue distribution can lead to a decrease in plan quality. In most currently used planning methods, the uncertainties due to prostate motion are compensated by irradiating a larger treatment volume. However, this could cause underdosage of the treatment volume and overdosage of the organs at risk (OARs). To reduce this problem, in this proof of principle study we developed and evaluated a novel adaptive planning method. The strategy proposed corrects the dose delivered by each beam according to the actual position of the target in order to produce a final dose distribution dosimetrically as similar as possible to the prescribed one.&lt;br /&gt;
&lt;br /&gt;
MATERIAL AND METHODS:&lt;br /&gt;
Our adaptive planning method was tested on a phantom case and on a clinical case. For the first, a pilot study was performed on an in-silico pelvic phantom. A &amp;quot;library&amp;quot; of intensity modulated RT (IMRT) plans corresponding to possible positions of the prostate during a treatment fraction was generated at planning stage. Then a 3D random walk model was used to simulate possible displacements of the prostate during the treatment fraction. At treatment stage, at the end of each beam, based on the current position of the target, the beam from the library of plans, which could reproduce the best approximation of the prescribed dose distribution, was selected and delivered. In the clinical case, the same approach was used on two prostate cancer patients: for the first a tissue deformation was simulated in-silico and for the second a cone beam CT (CBCT) taken during the treatment was used to simulate an intra-fraction change. Then, dosimetric comparisons with the standard treatment plan and, for the second patient, also with an isocenter shift correction, were performed. &amp;quot;...The CT was then elastically deformed on the CBCT using the B-spline method in [http://www.slicer.org '''3D Slicer'''].&amp;quot;&lt;br /&gt;
&lt;br /&gt;
RESULTS:&lt;br /&gt;
For the phantom case, the plan generated using the adaptive planning method was able to meet all the dosimetric requirements and to correct for a misdosage of 13% of the dose prescription on the prostate. For the first clinical case, the standard planning method caused underdosage of the seminal vesicles, respectively by 5% and 4% of the prescribed dose, when the position changes for the target were correctly taken into account. The proposed adaptive planning method corrected any possible missed target coverage, reducing at the same time the dose on the OARs. For the second clinical case, both with the standard planning strategy and with the isocenter shift correction target coverage was significantly worsened (in particular uniformity) and some organs exceeded some toxicity objectives. While with our approach, the most uniform coverage for the target was produced and systematically the lowest toxicity values for the organs at risk were achieved.&lt;br /&gt;
&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
In our proof of principle study, the adaptive planning method performed better than the standard planning and the isocenter shift methods for prostate EBRT. It improved the coverage of the treatment volumes and lowered the dose to the OARs. This planning method is particularly promising for hypofractionated IMRT treatments in which a higher precision and control on dose deposition are needed. Further studies will be performed to test more extensively the proposed adaptive planning method and to evaluate it at a full clinical level.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Unique Metasomal Musculature in Sweat Bees (Hymenoptera, Apoidea, Halictidae) Revealed by Micro-CT Scanning== &lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://digitallibrary.amnh.org/handle/2246/6924 American Museum Novitates 2019 Feb;  3920:28] | [http://digitallibrary.amnh.org/bitstream/handle/2246/6924/N3920.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Herhold, Hollister W.; Davis, Steven R.; Smith, Corey Shepard.; Engel, Michael S.; Grimaldi, David A.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' American Museum of Natural History, New York, NY&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' Bees of the family Halictidae (Apoidea: Anthophila) have three pairs of thick, bundled muscles that are circular to subcircular in cross section within the first metasomal segment, as revealed by micro-CT scanning of 16 species in 15 genera of five bee families. In nonhalictids and the basal halictid subfamily Rophitinae, these muscles are planar (flat and sheetlike), typically lying between the anterior air sacs and abdominal wall. In Nomiinae and Halictinae, these muscles, especially the dorsal-ventral pair, bulge into air-sac space, partly enveloped by air-sac membrane. A possible function may be to facilitate metasomal compression and contraction, and thus air flow. The bundled shape of these derived halictid muscles is similar to that of flight muscles, but further data is needed to determine if they are fibrillar, which would suggest a completely different function.&lt;br /&gt;
&amp;quot;Segmentation and volume rendering was done using [http://slicer.org 3D Slicer] v4.9.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |[[image:Herhold-AMN2019-fig1.png|thumb|300px|Volume rendering of Lasioglossum (Dialictus) sp. (Halictinae: Halictini), showing location of&lt;br /&gt;
abdominal air sacs, displayed as a yellow solid, and “grooves” where metasomal muscles extend into the air-sac space. The insect’s exoskeleton and internal anatomy is rendered translucent, allowing examination of air-sac morphology. The bilateral asymmetry shown here is not uncommon, and usually has to do with how recently&lt;br /&gt;
the specimen has fed. Distension of the gut can occupy space normally taken up by air sacs.]]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==3D Reconstruction of MR-Visible Fe&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;O&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt;-Mesh Implants: Pelvic Mesh Measurement Techniques and Preliminary Findings== &lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/30387537 Neurourol Urodyn. 2019 Jan;38(1):369-78.  PMID: 30387537]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Brocker KA, Mokry T, Alt CD, Kauczor HU, Lenz F, Sohn C, DeLancey JO, Chen L.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Obstetrics and Gynecology, Medical School, University of Heidelberg, Heidelberg, Germany.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' AIMS:&lt;br /&gt;
To develop MR-based measurement technique to evaluate the postoperative dimension and location of implanted magnetic resonance (MR)-visible meshes.&lt;br /&gt;
&lt;br /&gt;
METHODS:&lt;br /&gt;
This technique development study reports findings of six patients (A-F) with cystoceles treated with anterior vaginal MR-visible Fe&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;O&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt; -polypropylene implants. Implanted meshes were reconstructed from 3 months and/or 1 year postsurgical MR-images using [http://www.slicer.org '''3D Slicer''']. Measurements including mesh length, distance to the ischial spines, pudendal, and obturator neurovascular bundles and urethra were obtained using software Rhino® and a custom Matlab® program. The range of implanted mesh length and their placements were reported and compared with mesh design and implantation recommendations. With the anterior/posterior-mesh-segment-ratio mesh shrinkage localization was evaluated.&lt;br /&gt;
&lt;br /&gt;
RESULTS:&lt;br /&gt;
Examinations were possible for patients A-D 3 months and for A, C, E, and F 1 year postsurgical. The mesh was at least 40% shorter in all patients 3 months and/or 1 year postoperatively. A, B showed shrinkage in the anterior segment, D, E in the posterior segment (Patients C, F not applicable due to intraoperative mesh trimming). Patient E presented pain in the area of mesh shrinkage. In Patient C posterior mesh fixations were placed in the iliococcygeal muscle rather than sacrospinous ligaments. Arm placement less than 20 mm from the pudendal neurovascular bundles was seen in all cases. The portion of the urethra having mesh underneath it ranged from 19% to 55%.&lt;br /&gt;
&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
MRI-based measurement techniques have been developed to quantify implanted mesh location and dimension. Mesh placement variations possibly correlating with postoperative complications can be illustrated.&lt;br /&gt;
&lt;br /&gt;
'''Funding:'''&lt;br /&gt;
&lt;br /&gt;
*P50 HD044406/HD/NICHD NIH HHS/United States&lt;br /&gt;
*R21 HD079908/HD/NICHD NIH HHS/United States&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==A Complete Workflow for Utilizing Monte Carlo Toolkits in Clinical Cases  for a Double-Scattering Proton Therapy System== &lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/30426669 J Appl Clin Med Phys. 2019 Jan;20(1):23-30.  PMID: 30426669] | [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6333150/pdf/ACM2-20-23.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Muller L, Prusator M, Ahmad S, Chen Y.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Radiation Oncology, University of Oklahoma Health Sciences Center, Oklahoma City, OK.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' The methods described in this paper allow end users to utilize Monte Carlo (MC) toolkits for patient-specific dose simulation and perform analysis and plan comparisons for double-scattering proton therapy systems. The authors aim to fill two aspects of this process previously not explicitly published. The first one addresses the modeling of field-specific components in simulation space. Patient-specific compensator and aperture models are exported from treatment planning system and converted to STL format using a combination of software tools including Matlab and Autodesk's Netfabb. They are then loaded into the MC geometry for simulation purpose. The second details a method for easily visualizing and comparing simulated doses with the dose calculated from the treatment planning system. This system is established by utilizing the open source software [http://www.slicer.org '''3D Slicer''']. The methodology was demonstrated with a two-field proton treatment plan on the IROC lung phantom. Profiles and two-dimensional (2D) dose planes through the target isocenter were analyzed using our in-house software tools. This present workflow and set of codes can be easily adapted by other groups for their clinical practice.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Morphological Analysis of Sigmoid Sinus Anatomy: Clinical Applications to Neurotological Surgery== &lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/30635049 J Otolaryngol Head Neck Surg. 2019 Jan 11;48(1):2.  PMID: 30635049] | [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6329078/pdf/40463_2019_Article_324.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Van Osch K, Allen D, Gare B, Hudson TJ, Ladak H, Agrawal SK.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Schulich School of Medicine &amp;amp; Dentistry, Western University, London, Ontario, Canada.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' OBJECTIVES:&lt;br /&gt;
The primary objective of this study was to use high-resolution micro-CT images to create accurate three-dimensional (3D) models of several intratemporal structures, and to compare several surgically important dimensions within the temporal bone. The secondary objective was to create a statistical shape model (SSM) of a dominant and non-dominant sigmoid sinus (SS) to provide a template for automated segmentation algorithms.&lt;br /&gt;
&lt;br /&gt;
METHODS:&lt;br /&gt;
A free image processing software, 3D Slicer, was utilized to create three-dimensional reconstructions of the SS, jugular bulb (JB), facial nerve (FN), and external auditory canal (EAC) from micro-CT scans. The models were used to compare several clinically important dimensions between the dominant and non-dominant SS. Anatomic variability of the SS was also analyzed using SSMs generated using the Statismo software framework.&lt;br /&gt;
&lt;br /&gt;
RESULTS:&lt;br /&gt;
Three-dimensional models from 38 temporal bones were generated and analyzed. Right dominance was observed in 74% of the paired SSs. All distances were significantly shorter on the dominant side (p &amp;lt; 0.05), including: EAC - SS (dominant: 13.7 ± 3.4 mm; non-dominant: 15.3 ± 2.7 mm), FN - SS (dominant: 7.2 ± 1.8 mm; non-dominant: 8.1 ± 2.3 mm), 2nd genu FN - superior tip of JB (dominant: 8.7 ± 2.2 mm; non-dominant: 11.2 ± 2.6 mm), horizontal distance between the superior tip of JB - descending FN (dominant: 9.5 ± 2.3 mm; non-dominant: 13.2 ± 3.5 mm), and horizontal distance between the FN at the stylomastoid foramen - JB (dominant: 5.4 ± 2.2 mm; non-dominant: 7.7 ± 2.1). Analysis of the SSMs indicated that SS morphology is most variable at its junction with the transverse sinus, and least variable at the JB.&lt;br /&gt;
&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
This is the first known study to investigate the anatomical variation and relationships of the SS using high resolution scans, 3D  models and statistical shape analysis. This analysis seeks to guide neurotological surgical approaches and provide a template for automated segmentation and surgical simulation.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;In [http://www.slicer.org '''3D Slicer'''], nine fiducials (F1 – F9) were placed on the 3D reconstructions of the SS, JB, EAC, and FN to analyze several surgically relevant relationships between these structures.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''Funding:'''&lt;br /&gt;
&lt;br /&gt;
*381117/Collaborative Health Research Projects&lt;br /&gt;
&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |[[image:vanOschJoHNS2019.jpg|thumb|300px| Fiducials and distances calculated from coordinates (BLUE - SS, YELLOW - FN, PURPLE - EAC). a. EAC – SS (F1 – F2); Descending FN – SS (F3 – F4). b. 2nd genu FN – Superior tip JB. (F5 – F6); Descending FN - Superior tip JB (F6 – F7); FN at the SMF - JB (F8 – F9).]]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Hherhold</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Main_Page/SlicerCommunity/2019&amp;diff=62086</id>
		<title>Main Page/SlicerCommunity/2019</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Main_Page/SlicerCommunity/2019&amp;diff=62086"/>
		<updated>2019-11-23T02:44:24Z</updated>

		<summary type="html">&lt;p&gt;Hherhold: /* 2019 */  Added Pollen Wasp paper&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Main_Page/SlicerCommunity}}&lt;br /&gt;
=2019=&lt;br /&gt;
&lt;br /&gt;
==Direct evidence for eudicot pollen-feeding in a Cretaceous stinging wasp (Angiospermae; Hymenoptera, Aculeata) preserved in Burmese amber== &lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.nature.com/articles/s42003-019-0652-7 Communications Biology 2 (408)] | [https://www.nature.com/articles/s42003-019-0652-7.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' David A. Grimaldi, Enrique Peñalver, Eduardo Barrón, Hollister W. Herhold &amp;amp; Michael S. Engel &lt;br /&gt;
&lt;br /&gt;
'''Institution:''' American Museum of Natural History, New York, NY; Museo Geominero, Instituto Geológico y Minero de España. Ríos Rosas 23, E-28003 Madrid, Spain; Division of Entomology, Natural History Museum, and Department of Ecology and Evolutionary Biology, University of Kansas, Lawrence, Kansas 66045, USA&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' Angiosperms and their insect pollinators form a foundational symbiosis, evidence for which from the Cretaceous is mostly indirect, based on fossils of insect taxa that today are anthophilous, and of fossil insects and flowers that have apparent anthophilous and ento- mophilous specializations, respectively. We present exceptional direct evidence preserved in mid-Cretaceous Burmese amber, 100 mya, for feeding on pollen in the eudicot genus Tri- colporoidites by a basal new aculeate wasp, Prosphex anthophilos, gen. et sp. nov., in the lineage that contains the ants, bees, and other stinging wasps. Plume of hundreds of pollen grains wafts from its mouth and an apparent pollen mass was detected by micro-CT in the buccal cavity: clear evidence that the wasp was foraging on the pollen. Eudicots today comprise nearly three-quarters of all angiosperm species. Prosphex feeding on Tricolporoidites supports the hypothesis that relatively small, generalized insect anthophiles were important pollinators of early angiosperms.&lt;br /&gt;
&lt;br /&gt;
(Post-processing and analysis performed in 3D Slicer.)&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Patellar Calcar: Morphometric Analysis by Knee Magnetic ResonanceImaging and Three-dimensional Reconstruction Software-assisted== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/31529166 Surg Radiol Anat. 2019 Dec;41(12):1483-8. PMID: 31529166]&lt;br /&gt;
&lt;br /&gt;
'''Authors:'''  Zhao B, Cao K, Li XT, Zhu HT, Sun YS.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Department of Radiology, Key Laboratory of Carcinogenesis and Translational Research, Ministry of Education, Peking University Cancer Hospital and Institute, Beijing, China.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' PURPOSE: Patellar calcar corresponds to a greater trabecular bone density area in the patella lateral facet, whose morphometry is uncertain. This study aimed to describe patellar calcar morphometry by knee MRI and develop a 3D reconstruction software-assisted.&lt;br /&gt;
&lt;br /&gt;
MATERIALS AND METHODS: Consecutive adult patients, submitted to knee MRI, between 2014 and 2017, were entered in IMPAX software. Exclusion criteria are history of patellar surgical intervention, trauma, chondromalacia, bone edema or bipartite patella. All MRI images were retrospectively reviewed by three readers. MRI patellar calcar measurements are height, width, thickness and posterior distance. 3D model protocol reconstruction: '''[http://slicer.org 3D Slicer]''' software was used to design a preliminary model for each patient, and then all were automatically merged into one, which was finalized using the software segmentation tools. For 3D patellar calcar location, the transpolar axis was designed.&lt;br /&gt;
&lt;br /&gt;
RESULTS: 250 MRI were analyzed, patellar calcar was present in 208 (83.2%); 101 men and 107 women. Mean age was 44.3 ± 15.6 years.&lt;br /&gt;
&lt;br /&gt;
MEASUREMENTS: height 13.84 ± 2.42 mm (male: 14.50 ± 2.42; female: 13.21 ± 2.26) (p &amp;lt; 0.0001), width 12.21 ± 2.26 mm (male 13.14 ± 2.22; female 11.33 ± 1.93) (p &amp;lt; 0.0001). No statistically significant difference of thickness 0.56 ± 0.22 mm (male: 0.56 ± 0.25; female: 0.56 ± 0.20) and posterior distance 2.37 ± 0.80 mm (male: 2.46 ± 0.89; female: 2.29 ± 0.69) between genders was found. 3D model results: transpolar axis went through the patellar calcar in all the cases.&lt;br /&gt;
&lt;br /&gt;
CONCLUSIONS: This study shows in a 3D model reconstruction, what was previously described in the literature, determining for the first time the patellar calcar morphometry in the knee MRI and identifying it as a regular finding in this imaging test.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Whole Lesion Histogram Analysis of Apparent Diffusion Coefficients on MRI Predicts Disease-free Survival in Locally Advanced Squamous Cell Cervical Cancer after Radical Chemo-radiotherapy== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/31729974 BMC Cancer. 2019 Nov 15;19(1):1115. PMID: 31729974]&lt;br /&gt;
&lt;br /&gt;
'''Authors:'''  Zhao B, Cao K, Li XT, Zhu HT, Sun YS.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Department of Radiology, Key Laboratory of Carcinogenesis and Translational Research, Ministry of Education, Peking University Cancer Hospital and Institute, Beijing, China.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' BACKGROUND: The aim was to investigate the prognostic value of MR apparent diffusion coefficients (ADC) using histogram analysis (HA) in predicting disease-free survival (DFS) of cervical cancer after chemo-radiation therapy.&lt;br /&gt;
&lt;br /&gt;
METHODS: We retrospectively analyzed 103 women with pathologically proven squamous cell uterine cancer who received chemo-radiation therapy between 2009 and 2013. All patients were followed up for more than 2 years. Pre-treatment MR images were retrieved and imported for HA using an in-house developed software program based on '''[http://slicer.org 3D Slicer]'''. Regions of interest of whole tumors were drawn manually on DWI with reference to T2WI. HA features (mean, max, min, 50, 10, 90%, kurtosis, and skewness) were extracted from apparent diffusion coefficient (ADC) maps and compared between the recurrence and non-recurrence groups after the 2-year follow-up. Univariate and multivariate Cox regression analysis was used to correlate ADC HA features and relevant clinical variables (age, grade, maximal diameter of tumor, FIGO stage, SCC-Ag) with DFS.&lt;br /&gt;
&lt;br /&gt;
RESULTS: One hundred three patients with stage IB-IV cervical cancers were followed up for 2.0-94.6 months (median 48.9 months). Twenty patients developed recurrence within 2 years. In the recurrence group, the min (P = 0.001) and 10% (P = 0.048) ADC values were significantly lower than those of the non-recurrence group. Univariate and multivariate Cox regression analysis revealed that ADCmin (P = 0.006, HR = 0.110) was significantly correlated with DFS.&lt;br /&gt;
&lt;br /&gt;
CONCLUSION: Pre-treatment volumetric ADCmin in histogram analysis is an independent factor that is correlated with DFS in cervical cancer patients treated with chemo-radiation therapy.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Variations in the Size and Shape of Human Cochlear Malformation Types== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/30980504 Anat Rec (Hoboken). 2019 Oct;302(10):1792-9. PMID: 30980504]&lt;br /&gt;
&lt;br /&gt;
'''Authors:'''  Dhanasingh A.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  MED-EL GmbH, Innsbruck, Austria.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' The objective of this study is to determine the variations in size and shape of the most widely recognized cochlear malformation types using three-dimensional (3D) visualization. Using '''[http://slicer.org 3D Slicer]''' freeware, the complete inner-ear structures were segmented from 46 anonymized high-resolution computed tomography (HRCT) image datasets. Cochlear height, internal auditory canal height, and width were measured from the axial plane. Cochlear basal turn diameter was measured from the oblique coronal plane. Number of cochlear turns was measured from the 3D images and the corresponding cochlear duct length (CDL) was estimated using the CDL equations given in Alexiades et al. [Otol Neurotol 36 (2015) 904-907]. Out of 46 preoperative HRCT image datasets of human temporal bone, cochlear anatomy types including normal anatomy (4), enlarged vestibular aqueduct syndrome (3), cochlear aplasia (2), incomplete partition Types I (8), II (Mondini's deformity) (3), and III (X-linked) (4), cochlear hypoplasia (CH) (17), and common cavity (CC) (5) were identified. Majority of CH cases had cochlear height shorter than 4 mm whereas the CC cases measured cochlear height above 6 mm. For all the other malformation types, cochlear height was between 4 and 6 mm. In terms of &amp;quot;A&amp;quot; value, majority of CH cases showed shorter &amp;quot;A&amp;quot; value of &amp;lt;7.5 mm, which is in the lower end in comparison to the rest of the malformation types reported in this study. 3D-visualization shows the size and shape variations of all the structures of inner ear and also improves the clinicians' ability to visualize cochlear anatomy and nearby structures much easier than from the 2D image slices.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Volumetric Assessment of the Dental Crown for Sex Estimation by Means of Cone-beam Computed Tomography== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/31442711 Forensic Sci Int. 2019 Oct;303:109920. PMID: 31442711]&lt;br /&gt;
&lt;br /&gt;
'''Authors:'''  Manhaes-Caldas D, Oliveira ML, Groppo FC, Haiter-Neto F.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Oral Diagnosis, Division of Oral Radiology, Piracicaba Dental School, University of Campinas, São Paulo, Brazil.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' Sex estimation has a vital role in the solution of forensic cases when the identification of a large number of victims is needed. Considering the sexual dimorphism of the human teeth, the objective of this study was to estimate human sex by means of cone beam computed tomography (CBCT)-based volumetric assessment of the dental crown. A total of 78 CBCT images of the upper central incisors, upper and lower canines, and lower lateral incisors were equally selected from a Brazilian population aged between 8 and 36 years old. The dental crowns were subjected to image-based volumetric assessment by manual segmentation using the '''[http://slicer.org 3D Slicer]''' software, and the outcomes were compared by the Mann-Whitney test, unpaired t-test, Pearson correlation test, conditional backward stepwise logistic regression and intraclass correlation coefficient (α=0.05). The volumetric accuracy of the upper central incisor, upper canine and lower canine for sex estimation were 64.1%, 74.4% and 79.5%, respectively. The combined analysis of the upper and lower canines allowed an average accuracy of 83.7%. In conclusion, the combined volumetric analysis of the crown of the upper and lower canines can be applied for sex estimation in the studied population.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Association of Serum Cystatin C with White Matter Abnormalities in Patients with Amnestic Mild Cognitive Impairment== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/31489777 Geriatr Gerontol Int. 2019 Oct;19(10):1036-40. PMID: 31489777]&lt;br /&gt;
&lt;br /&gt;
'''Authors:'''  Hirao K, Yamashita F, Tsugawa A, Haime R, Fukasawa R, Sato T, Okita M, Shimizu S, Kanetaka H, Umahara T, Sakurai H, Hanyu H.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Geriatric Medicine, Tokyo Medical University, Tokyo, Japan.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' AIM: White matter hyperintensities (WMH) on MRI have been reported to be a risk factor for the conversion from mild cognitive impairment (MCI) to Alzheimer's disease, although the reason remains unclear. In the present study, we hence investigated the associations between WMH volumes and cognitive function, blood levels of various molecules, and the presence of lifestyle-associated diseases in patients with amnestic MCI.&lt;br /&gt;
&lt;br /&gt;
METHODS: The initial data of 38 patients with amnestic MCI and 10 normal control individuals were analyzed. The volumes of periventricular hyperintensities (PVH) and deep WMH (DWMH) were measured on T2 fluid-attenuated inversion recovery using the imaging software, '''[http://slicer.org 3D Slicer]'''; and the association between PVH/DWMH volumes and cognitive function, blood levels of molecules (such as cystatin C [CysC], 25-hydroxyvitamin D and homocysteine) and the presence of lifestyle-associated diseases (such as hypertension, hyperlipidemia and diabetes mellitus) were analyzed.&lt;br /&gt;
&lt;br /&gt;
RESULTS: In the MCI group, the PVH volume : intracranial volume ratio significantly correlated with Trail Making Test-A/B scores and CysC level by Pearson's analysis, and the PVH volume : intracranial volume ratio significantly correlated with only CysC levels, whereas the DWMH volume : intracranial volume ratio did not correlate with any items at all by linear multiple regression analysis.&lt;br /&gt;
&lt;br /&gt;
CONCLUSIONS: PVH volume was closely associated with frontal lobe dysfunction, particularly with attention and executive dysfunction. Serum CysC level was associated with PVH volume, which suggests that CysC might be a useful marker for determining treatment strategies for white matter abnormalities in amnestic MCI.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Three-dimensional Clavicle Displacement Analysis and its Effect on ScapularPosition in Acute Clavicle Midshaft Fracture== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/31272891 J Shoulder Elbow Surg. 2019 Oct;28(10):1877-85. PMID: 31272891]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Kim JH, Gwak HC, Kim CW, Lee CR, Kim YJ, Seo HW.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Department of Orthopedic Surgery, Inje University Busan Paik Hospital, Inje University College of Medicine, Busan, Republic of Korea.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:'''BACKGROUND: The purpose of this study was to measure the distance of the clavicle in 3 dimensions (3D) and each direction (anterior to posterior, medial to lateral, and superior to inferior) and to analyze the correlation of the angular orientation of the scapula according to each directional distance of the clavicle.&lt;br /&gt;
&lt;br /&gt;
METHODS: Sixty-seven patients with Robinson 2B1 and 2B2 clavicle midshaft fracture (46.0 ± 17.4 years, men = 50, women = 17) were selected as final subjects. Patients' computed tomography was reconstructed using an image processing program ('''[http://slicer.org 3D Slicer]''' v.4.3 software). Anteroposterior (AP) distance, medial-to-lateral distance, superior-to-inferior distance, and 3D distance of both clavicles were measured. The plane connecting the 3 points (superior pole, inferior pole, and center of glenoid) of the scapula was used to calculate differences in the angular orientation between both scapulae.&lt;br /&gt;
&lt;br /&gt;
RESULTS: Among each directional distance of the clavicle, only the AP distance showed negative correlation with scapular angular orientation with anterior tilting, internal rotation, and upward rotation of the scapula (Pearson's correlation coefficient: -0.68, -0.24, and -0.28; P &amp;lt; .001, P = .048, and P = .021).&lt;br /&gt;
&lt;br /&gt;
CONCLUSION: The shortening of the AP distance of the clavicle was related to the angular orientation of the scapula in acute clavicle fracture. AP shortening should be considered when determining the treatment of clavicle fracture.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==A review on Multiplatform Evaluations of Semi-automatic Open-source Based Image Segmentation for Cranio-maxillofacial Surgery== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/31610359 Comput Methods Programs Biomed. 2019 Sep 30;182:105102. PMID: 31610359]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Wallner J, Schwaiger M, Hochegger K, Gsaxner C, Zemann W, Egger J.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Medical University of Graz, Department of Oral and Maxillofacial Surgery, Graz, Austria.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' BACKGROUND AND OBJECTIVES: Computer-assisted technologies, such as image-based segmentation, play an important role in the diagnosis and treatment support in cranio-maxillofacial surgery. However, although many segmentation software packages exist, their clinical in-house use is often challenging due to constrained technical, human or financial resources. Especially technological solutions or systematic evaluations of open-source based segmentation approaches are lacking. The aim of this contribution is to assess and review the segmentation quality and the potential clinical use of multiple commonly available and license-free segmentation methods on different medical platforms.&lt;br /&gt;
&lt;br /&gt;
METHODS: In this contribution, the quality and accuracy of open-source segmentation methods was assessed on different platforms using patient-specific clinical CT-data and reviewed with the literature. The image-based segmentation algorithms GrowCut, Robust Statistics Segmenter, Region Growing 3D, Otsu &amp;amp; Picking, Canny Segmentation and Geodesic Segmenter were investigated in the mandible on the platforms 3D Slicer, MITK and MeVisLab. Comparisons were made between the segmentation algorithms and the ground truth segmentations of the same anatomy performed by two clinical experts (n = 20). Assessment parameters were the Dice Score Coefficient (DSC), the Hausdorff Distance (HD), and Pearsons correlation coefficient (r).&lt;br /&gt;
&lt;br /&gt;
RESULTS: The segmentation accuracy was highest with the GrowCut (DSC 85.6%, HD 33.5 voxel) and the Canny (DSC 82.1%, HD 8.5 voxel) algorithm. Statistical differences between the assessment parameters were not significant (p &amp;lt; 0.05) and correlation coefficients were close to the value one (r &amp;gt; 0.94) for any of the comparison made between the segmentation methods and the ground truth schemes. Functionally stable and time-saving segmentations were observed.&lt;br /&gt;
&lt;br /&gt;
CONCLUSION: High quality image-based semi-automatic segmentation was provided by the GrowCut and the Canny segmentation method. In the cranio-maxillofacial complex, these segmentation methods provide algorithmic alternatives for image-based segmentation in the clinical practice for e.g. surgical planning or visualization of treatment results and offer advantages through their open-source availability. This is the first systematic multi-platform comparison that evaluates multiple license-free, open-source segmentation methods based on clinical data for the improvement of algorithms and a potential clinical use in patient-individualized medicine. The results presented are reproducible by others and can be used for clinical and research purposes.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Potential Role of Convolutional Neural Network Based Algorithm in Patient Selection for DCIS Observation Trials Using a Mammogram Dataset== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/31526687 Acad Radiol. 2019 Sep 13. PMID: 31526687]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Mutasa S, Chang P, Van Sant EP, Nemer J, Liu M, Karcich J, Patel G, Jambawalikar S, Ha R.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Department of Medical Physics and Radiology, Columbia University Medical Center, NY, USA.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' RATIONALE AND OBJECTIVES: We investigated the feasibility of utilizing convolutional neural network (CNN) for predicting patients with pure Ductal Carcinoma In Situ (DCIS) versus DCIS with invasion using mammographic images.&lt;br /&gt;
&lt;br /&gt;
MATERIALS AND METHODS: An IRB-approved retrospective study was performed. 246 unique images from 123 patients were used for our CNN algorithm. In total, 164 images in 82 patients diagnosed with DCIS by stereotactic-guided biopsy of calcifications without any upgrade at the time of surgical excision (pure DCIS group). A total of 82 images in 41 patients with mammographic calcifications yielding occult invasive carcinoma as the final upgraded diagnosis on surgery (occult invasive group). Two standard mammographic magnification views (CC and ML/LM) of the calcifications were used for analysis. Calcifications were segmented using an open source software platform '''[http://slicer.org 3D Slicer]''' and resized to fit a 128 × 128 pixel bounding box. A 15 hidden layer topology was used to implement the neural network. The network architecture contained five residual layers and dropout of 0.25 after each convolution. Five-fold cross validation was performed using training set (80%) and validation set (20%). Code was implemented in open source software Keras with TensorFlow on a Linux workstation with NVIDIA GTX 1070 Pascal GPU.&lt;br /&gt;
&lt;br /&gt;
RESULTS: Our CNN algorithm for predicting patients with pure DCIS achieved an overall diagnostic accuracy of 74.6% (95% CI, ±5) with area under the ROC curve of 0.71 (95% CI, ±0.04), specificity of 91.6% (95% CI, ±5%) and sensitivity of 49.4% (95% CI, ±6%).&lt;br /&gt;
&lt;br /&gt;
CONCLUSION: It's feasible to apply CNN to distinguish pure DCIS from DCIS with invasion with high specificity using mammographic images.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Texture Analysis of Pretreatment &amp;lt;sup&amp;gt;18F&amp;lt;/sup&amp;gt;FDG PET/CT for the Prognostic Prediction of Locally Advanced Salivary Gland Carcinoma Treated with Interstitial Brachytherapy== &lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/31511990 EJNMMI Res. 2019 Sep 11;9(1):89. PMID: 31511990]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Wu WJ, Li ZY, Dong S, Liu SM, Zheng L, Huang MW, Zhang JG.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Department of Oral and Maxillofacial Surgery, Peking University School and Hospital of Somatology, Beijing, China.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' BACKGROUND: The aim of this study was to evaluate the prognostic value of positron emission tomography (PET) parameters and the PET texture features of fluorine 18-fluorodeoxyglucose ([18F]FDG) uptake on pretreatment PET/computed tomography (CT) in patients with locally advanced salivary gland carcinoma treated with interstitial brachytherapy.&lt;br /&gt;
&lt;br /&gt;
METHODS: Forty-three patients with locally advanced salivary gland carcinoma of the head and neck were treated with 125I interstitial brachytherapy as the sole modality and underwent &amp;lt;sup&amp;gt;18F&amp;lt;/sup&amp;gt;FDG PET/CT scanning before treatment. Tumor segmentation and texture analysis were performed using the '''[http://slicer.org 3D Slicer]''' software. In total, 54 features were extracted and categorized as first-order statistics, morphology and shape, gray-level co-occurrence matrix, and gray-level run length matrix. Up to November 2018, the follow-up time ranged from 6 to 120 months (median 18 months). Cumulative survival was calculated by the Kaplan-Meier method. Factors between groups were compared by the log-rank test. Multivariate Cox regression analysis with a backward conditional method was used to predict progression-free survival (PFS).&lt;br /&gt;
&lt;br /&gt;
RESULTS: The 3- and 5-year locoregional control (LC) rates were 55.4% and 37.0%, respectively. The 3- and 5-year PFS rates were 51.2% and 34.1%, respectively. The 3- and 5-year overall survival (OS) rates were 77.0% and 77.0%, respectively. Univariate analysis revealed that minimum intensity, mean intensity, median intensity, root mean square, and long run emphasis (LRE) were significant predictors of PFS, whereas clinicopathological factors, conventional PET parameters, and PET texture features failed to show significance. Multivariate Cox regression analysis showed that minimum intensity and LRE were significant predictors of PFS.&lt;br /&gt;
&lt;br /&gt;
CONCLUSIONS: The texture analysis of pretreatment [18F]FDG PET/CT provided more information than conventional PET parameters for predicting patient prognosis of locally advanced salivary gland carcinoma treated with interstitial brachytherapy. The minimum intensity was a risk factor for PFS, and LRE was a favorable factor in prognostic prediction according to the primary results.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Levator Bowl Volume during Straining and its Relationship to other Levator Measures== &lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/31222569 Int Urogynecol J. 2019 Sep;30(9):1457-63. PMID: 31222569]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Nandikanti L, Sammarco AG, Chen L, Ashton-Miller JA, DeLancey JO.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' School of Public Health, University of Michigan, Ann Arbor, MI, USA.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' INTRODUCTION AND HYPOTHESIS: This study was aimed at measuring levator ani bowl volume at rest and while straining, comparing women with and without prolapse (controls), and assessing the ability of measures of the mid-sagittal bowl area, levator hiatus (LH), and urogenital hiatus (UGH) to predict bowl volume.&lt;br /&gt;
&lt;br /&gt;
METHODS: Forty MRI scans previously acquired in case-control prolapse studies, including 20 women with prolapse and 20 women without prolapse, of similar age and parity, were selected. 3D models of rest and strain bowl volumes were made using sagittal scans and '''[http://slicer.org 3D Slicer]'''. Mid-sagittal bowl area, UGH, and LH were measured using ImageJ. Data were analyzed using two sample t tests, effect sizes, and Pearson's correlation coefficients at the 0.05 significance level.&lt;br /&gt;
&lt;br /&gt;
RESULTS: Data were acquired in a total of 40 total women. Levator bowl volume at strain had a correlation coefficient of 0.5 with bowl volume at rest. During straining, prolapse subjects had a 53% larger bowl volume than control subjects (254 ± 86 cm3 vs 166 ± 44 cm3, p &amp;lt; 0.001), but at rest, the difference was 34% (138 ± 40 cm3 vs 103 ± 25 cm3, p = 0.002). Effect sizes for all parameters were large (d &amp;gt; 0.75). The strongest correlation with straining bowl volume was mid-sagittal straining bowl area (r = 0.86), followed by LH strain (r = 0.80), then UGH strain (r = 0.76).&lt;br /&gt;
&lt;br /&gt;
CONCLUSIONS: Straining levator bowl volume is substantially different than measures made at rest, with only a quarter of straining values explained by resting measurements. The bowl area at strain is the best 2D measurement estimating bowl volume and explains 74% of straining bowl volume.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Funding:'''&lt;br /&gt;
&lt;br /&gt;
*P50 HD044406/HD/NICHD NIH HHS/United States&lt;br /&gt;
*R01 HD038665/HD/NICHD NIH HHS/United States&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Mixed Reality-Based Preoperative Planning for Training of Percutaneous Transforaminal Endoscopic Discectomy: A Feasibility Study.== &lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/31203062 World Neurosurg. 2019 Sep;129:e767-e775. PMID: 31203062]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Yu H, Zhou Z, Lei X, Liu H, Fan G, He S.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Orthopedic Department, Shanghai Tenth People's Hospital, Shanghai, China.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' OBJECTIVE: To explore the effect of preoperative planning using mixed reality (MR) on training of percutaneous transforaminal endoscopic discectomy (PTED).&lt;br /&gt;
&lt;br /&gt;
METHODS: Before the training, we invited an experienced chief physician to plan the puncture path of PTED on the X-ray films of the lumbar spine model and the '''[http://slicer.org 3D Slicer]''' platform, respectively, and used this as the standard to guide trainees. In the aggregate, 60 young residents were randomly divided into Group A (N = 30) and Group B (N = 30). Group A learned the 2-dimensional standard planning route, whereas Group B learned the standard route planning based on MR through the 3D Slicer platform. Then, trainees were asked to conduct PTED puncture on a lumbar spine model. Questionnaires were distributed to trainees before and after the training. During the training, puncture times, operating time (minutes), and fluoroscopy times were recorded.&lt;br /&gt;
&lt;br /&gt;
RESULTS: After the training, it was obvious that more trainees showed their recognition of MR, believing that MR could help preoperative planning and training of PTED. Their high satisfaction with the training indicated the success of our training. Moreover, puncture times, operating time (minutes), and fluoroscopy times of Group B were significantly lower than those of Group A.&lt;br /&gt;
&lt;br /&gt;
CONCLUSIONS: MR technology contributes to preoperative planning of PTED and is beneficial in the training of PTED. It significantly reduces puncture times and fluoroscopy times, providing a standardized method for the training of PTED.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Evaluation of Accuracy of a Three-Dimensional Printed Model in Open-Wedge High Tibial Osteotomy== &lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/30189435 J Knee Surg. 2019 Sep;32(9):841-6. PMID: 30189435] | [https://www.thieme-connect.com/products/ejournals/abstract/10.1055/s-0038-1669901 PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Kim HJ, Park J, Park KH, Park IH, Jang JA, Shin JY, Kyung HS.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Orthopaedic Surgery, School of Medicine, Kyungpook National University, Kyungpook National University Hospital, Daegu, South Korea.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' The purpose of this study was to evaluate the usefulness of a three-dimensional (3D) printed model for open-wedge high tibial osteotomy (HTO). This study retrospectively evaluated 20 patients with medial knee osteoarthritis and varus deformity. Between October 2015 and July 2016, the patients underwent open-wedge HTO using a 3D printed model. The mean age of patients was 55.2 years (range, 51-60 years). The mean preoperative mechanical femorotibial angle (mFTA) was varus 7.8 degrees (range, varus 4.7-11.6 degrees). After measuring the target angle using full-length lower limb weight-bearing radiography, the osteotomy was simulated using 3D images obtained from computed tomography (CT) with the [http://www.slicer.org '''3D Slicer'''] program. On the basis of the simulated osteotomy section and the target angle, the model was then designed and printed. Open-wedge HTO was then performed by applying the 3D printed model to the opening gap. The accuracy of osteotomy and the change in posterior tibial slope (PTS) angle were evaluated. The weight-bearing line on the tibial plateau was corrected from a preoperative mean of 19.5 ± 9.8% to a postoperative mean of 63.1 ± 6.1% (p &amp;lt; 0.001). The postoperative values were not statistically significantly different from the preoperative target points (p = 0.688). The mFTA was corrected to a postoperative mean of valgus 3.8 ± 1.4 degrees. The PTS angle showed no significant change (p = 0.256). A 3D printed model using CT may be useful for preoperative planning of open-wedge HTO. Satisfactory correction can be obtained without a change in the PTS.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prediction of Immunohistochemistry of Suspected Thyroid Nodules by Use of Machine Learning-Based Radiomics== &lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/31461321 AJR Am J Roentgenol. 2019 Aug 28:1-10. PMID: 31461321]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Gu J, Zhu J, Qiu Q, Wang Y, Bai T, Yin Y.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' School of Medicine and Life Sciences, University of Jinan Shandong Academy of Medical Sciences, Jinan, Shandong, China.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' OBJECTIVE. The purpose of this study was to develop and validate a radiomics model for evaluating immunohistochemical characteristics in patients with suspected thyroid nodules. MATERIALS AND METHODS. A total of 103 patients (training cohort-to-validation cohort ratio, ≈ 3:1) with suspected thyroid nodules who had undergone thyroidectomy and immunohistochemical analysis were enrolled. The immunohistochemical markers were cytokeratin 19, galectin 3, thyroperoxidase, and high-molecular-weight cytokeratin. All patients underwent CT before surgery, and a '''[http://slicer.org 3D Slicer]''' was used to analyze images of the surgical specimen. Test-retest and Spearman correlation coefficient (ρ) were used to select reproducible and nonredundant features. The Kruskal-Wallis test (p &amp;lt; 0.05) was used for feature selection, and a feature-based model was built by support vector machine methods. The performance of the radiomic models was assessed with respect to accuracy, sensitivity, specificity, corresponding AUC, and independent validation. RESULTS. Eighty-six reproducible and nonredundant features selected from the 828 features were used to build the model. The best performance of the cytokeratin 19 model yielded accuracy of 84.4% in the training cohort and 80.0% in the validation cohort. The thyroperoxidase and galectin 3 predictive models yielded accuracies of 81.4% and 82.5% in the training cohort and 84.2% and 85.0% in the validation cohort. The performance of the high-molecular-weight cytokeratin predictive model was not good (accuracy, 65.7%) and could not be validated. CONCLUSION. A radiomics model with excellent performance was developed for individualized noninvasive prediction of the presence of cytokeratin 19, galectin 3, and thyroperoxidase based on CT images. This model may be used to identify benign and malignant thyroid nodules.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Technique Development and Measurement of Cross-Sectional Area of the Pubovisceral Muscle on MRI Scans of Living Women== &lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/29974138 Int Urogynecol J. 2019 Aug;30(8):1305-12. PMID: 29974138]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Masteling M, Ashton-Miller JA, DeLancey JOL.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Mechanical Engineering, University of Michigan, Ann Arbor, MI, USA.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' INTRODUCTION AND HYPOTHESIS:&lt;br /&gt;
Measurements of the anatomic cross-sectional area (CSA) of the pubovisceral muscle (PVM) in women are confounded by the difficulty of separating the muscle from the adjacent puborectal (PRM) and iliococcygeal (ICM) muscles when visualized in a plane orthogonal to the fiber direction. We tested the hypothesis that it might be possible to measure the PVM CSA within a defined region of interest based on magnetic resonance images (MRI).&lt;br /&gt;
&lt;br /&gt;
METHODS:&lt;br /&gt;
MRI scans of 11 women with unilateral PVM tears and seven primiparous women with intact muscles following elective C-section were used to identify the PVM injury zone defined by the mean location of its boundaries with the adjacent intact PRM and ICM from existing anatomic reference points using '''[http://slicer.org 3D Slicer]''' and ImageJ software. Then, from the 15 or more 2-mm transverse slices available, the slice with the maximum anatomic CSA of the left and right PVM was found in 24 primiparous women with bilaterally intact muscles who had delivered via C-section.&lt;br /&gt;
&lt;br /&gt;
RESULTS:&lt;br /&gt;
Mean [± standard deviation (SD)] of the maximum left or right PVM cross-section areas for the 24 women, measured by two different raters, was 1.25 ± 0.29 cm2 (range 0.75-1.86). The 5th, 50th, and 95th percentile values were 0.77, 1.23, and 1.80 cm&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;, respectively. Inter- and intrarater measurement repeatability intraclass correlation coefficients exceeded 0.89 and 0.90, respectively.&lt;br /&gt;
&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
It is possible to use MRI to identify the volume of interest with the maximum anatomic cross section of the PVM belly while minimizing the inadvertent inclusion of adjacent PRM or ICM in that measurement.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Multi-objective Parameter Auto-tuning for Tissue Image Segmentation Workflows== &lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/30402669 J Digit Imaging. 2019 Jun;32(3):521-33. PMID: 30402669]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Taveira LFR, Kurc T, Melo ACMA, Kong J, Bremer E, Saltz JH, Teodoro G.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Computer Science, University of Brasília, Brasília, Brazil.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' We propose a software platform that integrates methods and tools for multi-objective parameter auto-tuning in tissue image segmentation workflows. The goal of our work is to provide an approach for improving the accuracy of nucleus/cell segmentation pipelines by tuning their input parameters. The shape, size, and texture features of nuclei in tissue are important biomarkers for disease prognosis, and accurate computation of these features depends on accurate delineation of boundaries of nuclei. Input parameters in many nucleus segmentation workflows affect segmentation accuracy and have to be tuned for optimal performance. This is a time-consuming and computationally expensive process; automating this step facilitates more robust image segmentation workflows and enables more efficient application of image analysis in large image datasets. Our software platform adjusts the parameters of a nuclear segmentation algorithm to maximize the quality of image segmentation results while minimizing the execution time. It implements several optimization methods to search the parameter space efficiently. In addition, the methodology is developed to execute on high-performance computing systems to reduce the execution time of the parameter tuning phase. These capabilities are packaged in a Docker container for easy deployment and can be used through a friendly interface extension in [http://www.slicer.org '''3D Slicer''']. Our results using three real-world image segmentation workflows demonstrate that the proposed solution is able to (1) search a small fraction (about 100 points) of the parameter space, which contains billions to trillions of points, and improve the quality of segmentation output by × 1.20, × 1.29, and × 1.29, on average; (2) decrease the execution time of a segmentation workflow by up to 11.79× while improving output quality; and (3) effectively use parallel systems to accelerate parameter tuning and segmentation phases.&lt;br /&gt;
&lt;br /&gt;
'''Funding:'''&lt;br /&gt;
&lt;br /&gt;
*R01 LM011119/U.S. National Library of Medicine&lt;br /&gt;
*U24 CA180924/National Cancer Institute&lt;br /&gt;
*R01 LM009239/U.S. National Library of Medicine&lt;br /&gt;
*K25 CA181503/National Institutes of Health&lt;br /&gt;
*UG3 CA225021/CA/NCI NIH HHS/United States&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
==Ancient Machine Tools for the Construction of the Antikythera Mechanism Parts== &lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' Digital Applications in Archaeology and Cultural Heritage. 2019 Jun; 13:e00092.&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Aristeidis Voulgaris, Christophoros Mouratidis, Andreas Vossinakis.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Thessaloniki Astronomy Club, Thessaloniki, Greece.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' The present work deals with the study, design, original reconstruction and use of the bow drill of the late archaic period (ca 490 BC), as depicted in two different red figure vases and the vertical lathe depicted on an engraved wall painting of the Petosiris tomb of the Ptolemaic era (300 BC). After the reconstruction of the three ancient tools, during the implementation of the FRAMe Project, their use was thoroughly studied, from which useful conclusions were drawn about the material processing in antiquity, as well as the details of the construction of the Antikythera Mechanism components. Following the new findings detected from the authors’ study of the X-Ray Computed Tomographies from Antikythera Mechanism Research Project, these ancient machine tools can be considered as the progenitors of the Hellenistic period machine tools, which were used for the construction of the mechanical components of the Mechanism.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Real-Time Adaptive Planning Method for Radiotherapy Treatment Delivery for Prostate Cancer Patients, Based on a Library of Plans Accounting for Possible Anatomy Configuration Changes== &lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/30818345 PLoS One. 2019 Feb 28;14(2):e0213002. PMID: 30818345] | [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6394960/pdf/pone.0213002.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Antico M, Prinsen P, Cellini F, Fracassi A, Isola AA, Cobben D, Fontanarosa D.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' School of Chemistry, Physics and Mechanical Engineering, Queensland University of Technology, Brisbane, Queensland, Australia.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' BACKGROUND AND PURPOSE:&lt;br /&gt;
In prostate cancer treatment with external beam radiation therapy (EBRT), prostate motion and internal changes in tissue distribution can lead to a decrease in plan quality. In most currently used planning methods, the uncertainties due to prostate motion are compensated by irradiating a larger treatment volume. However, this could cause underdosage of the treatment volume and overdosage of the organs at risk (OARs). To reduce this problem, in this proof of principle study we developed and evaluated a novel adaptive planning method. The strategy proposed corrects the dose delivered by each beam according to the actual position of the target in order to produce a final dose distribution dosimetrically as similar as possible to the prescribed one.&lt;br /&gt;
&lt;br /&gt;
MATERIAL AND METHODS:&lt;br /&gt;
Our adaptive planning method was tested on a phantom case and on a clinical case. For the first, a pilot study was performed on an in-silico pelvic phantom. A &amp;quot;library&amp;quot; of intensity modulated RT (IMRT) plans corresponding to possible positions of the prostate during a treatment fraction was generated at planning stage. Then a 3D random walk model was used to simulate possible displacements of the prostate during the treatment fraction. At treatment stage, at the end of each beam, based on the current position of the target, the beam from the library of plans, which could reproduce the best approximation of the prescribed dose distribution, was selected and delivered. In the clinical case, the same approach was used on two prostate cancer patients: for the first a tissue deformation was simulated in-silico and for the second a cone beam CT (CBCT) taken during the treatment was used to simulate an intra-fraction change. Then, dosimetric comparisons with the standard treatment plan and, for the second patient, also with an isocenter shift correction, were performed. &amp;quot;...The CT was then elastically deformed on the CBCT using the B-spline method in [http://www.slicer.org '''3D Slicer'''].&amp;quot;&lt;br /&gt;
&lt;br /&gt;
RESULTS:&lt;br /&gt;
For the phantom case, the plan generated using the adaptive planning method was able to meet all the dosimetric requirements and to correct for a misdosage of 13% of the dose prescription on the prostate. For the first clinical case, the standard planning method caused underdosage of the seminal vesicles, respectively by 5% and 4% of the prescribed dose, when the position changes for the target were correctly taken into account. The proposed adaptive planning method corrected any possible missed target coverage, reducing at the same time the dose on the OARs. For the second clinical case, both with the standard planning strategy and with the isocenter shift correction target coverage was significantly worsened (in particular uniformity) and some organs exceeded some toxicity objectives. While with our approach, the most uniform coverage for the target was produced and systematically the lowest toxicity values for the organs at risk were achieved.&lt;br /&gt;
&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
In our proof of principle study, the adaptive planning method performed better than the standard planning and the isocenter shift methods for prostate EBRT. It improved the coverage of the treatment volumes and lowered the dose to the OARs. This planning method is particularly promising for hypofractionated IMRT treatments in which a higher precision and control on dose deposition are needed. Further studies will be performed to test more extensively the proposed adaptive planning method and to evaluate it at a full clinical level.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Unique Metasomal Musculature in Sweat Bees (Hymenoptera, Apoidea, Halictidae) Revealed by Micro-CT Scanning== &lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://digitallibrary.amnh.org/handle/2246/6924 American Museum Novitates 2019 Feb;  3920:28] | [http://digitallibrary.amnh.org/bitstream/handle/2246/6924/N3920.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Herhold, Hollister W.; Davis, Steven R.; Smith, Corey Shepard.; Engel, Michael S.; Grimaldi, David A.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' American Museum of Natural History, New York, NY&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' Bees of the family Halictidae (Apoidea: Anthophila) have three pairs of thick, bundled muscles that are circular to subcircular in cross section within the first metasomal segment, as revealed by micro-CT scanning of 16 species in 15 genera of five bee families. In nonhalictids and the basal halictid subfamily Rophitinae, these muscles are planar (flat and sheetlike), typically lying between the anterior air sacs and abdominal wall. In Nomiinae and Halictinae, these muscles, especially the dorsal-ventral pair, bulge into air-sac space, partly enveloped by air-sac membrane. A possible function may be to facilitate metasomal compression and contraction, and thus air flow. The bundled shape of these derived halictid muscles is similar to that of flight muscles, but further data is needed to determine if they are fibrillar, which would suggest a completely different function.&lt;br /&gt;
&amp;quot;Segmentation and volume rendering was done using [http://slicer.org 3D Slicer] v4.9.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |[[image:Herhold-AMN2019-fig1.png|thumb|300px|Volume rendering of Lasioglossum (Dialictus) sp. (Halictinae: Halictini), showing location of&lt;br /&gt;
abdominal air sacs, displayed as a yellow solid, and “grooves” where metasomal muscles extend into the air-sac space. The insect’s exoskeleton and internal anatomy is rendered translucent, allowing examination of air-sac morphology. The bilateral asymmetry shown here is not uncommon, and usually has to do with how recently&lt;br /&gt;
the specimen has fed. Distension of the gut can occupy space normally taken up by air sacs.]]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==3D Reconstruction of MR-Visible Fe&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;O&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt;-Mesh Implants: Pelvic Mesh Measurement Techniques and Preliminary Findings== &lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/30387537 Neurourol Urodyn. 2019 Jan;38(1):369-78.  PMID: 30387537]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Brocker KA, Mokry T, Alt CD, Kauczor HU, Lenz F, Sohn C, DeLancey JO, Chen L.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Obstetrics and Gynecology, Medical School, University of Heidelberg, Heidelberg, Germany.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' AIMS:&lt;br /&gt;
To develop MR-based measurement technique to evaluate the postoperative dimension and location of implanted magnetic resonance (MR)-visible meshes.&lt;br /&gt;
&lt;br /&gt;
METHODS:&lt;br /&gt;
This technique development study reports findings of six patients (A-F) with cystoceles treated with anterior vaginal MR-visible Fe&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;O&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt; -polypropylene implants. Implanted meshes were reconstructed from 3 months and/or 1 year postsurgical MR-images using [http://www.slicer.org '''3D Slicer''']. Measurements including mesh length, distance to the ischial spines, pudendal, and obturator neurovascular bundles and urethra were obtained using software Rhino® and a custom Matlab® program. The range of implanted mesh length and their placements were reported and compared with mesh design and implantation recommendations. With the anterior/posterior-mesh-segment-ratio mesh shrinkage localization was evaluated.&lt;br /&gt;
&lt;br /&gt;
RESULTS:&lt;br /&gt;
Examinations were possible for patients A-D 3 months and for A, C, E, and F 1 year postsurgical. The mesh was at least 40% shorter in all patients 3 months and/or 1 year postoperatively. A, B showed shrinkage in the anterior segment, D, E in the posterior segment (Patients C, F not applicable due to intraoperative mesh trimming). Patient E presented pain in the area of mesh shrinkage. In Patient C posterior mesh fixations were placed in the iliococcygeal muscle rather than sacrospinous ligaments. Arm placement less than 20 mm from the pudendal neurovascular bundles was seen in all cases. The portion of the urethra having mesh underneath it ranged from 19% to 55%.&lt;br /&gt;
&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
MRI-based measurement techniques have been developed to quantify implanted mesh location and dimension. Mesh placement variations possibly correlating with postoperative complications can be illustrated.&lt;br /&gt;
&lt;br /&gt;
'''Funding:'''&lt;br /&gt;
&lt;br /&gt;
*P50 HD044406/HD/NICHD NIH HHS/United States&lt;br /&gt;
*R21 HD079908/HD/NICHD NIH HHS/United States&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==A Complete Workflow for Utilizing Monte Carlo Toolkits in Clinical Cases  for a Double-Scattering Proton Therapy System== &lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/30426669 J Appl Clin Med Phys. 2019 Jan;20(1):23-30.  PMID: 30426669] | [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6333150/pdf/ACM2-20-23.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Muller L, Prusator M, Ahmad S, Chen Y.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Radiation Oncology, University of Oklahoma Health Sciences Center, Oklahoma City, OK.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' The methods described in this paper allow end users to utilize Monte Carlo (MC) toolkits for patient-specific dose simulation and perform analysis and plan comparisons for double-scattering proton therapy systems. The authors aim to fill two aspects of this process previously not explicitly published. The first one addresses the modeling of field-specific components in simulation space. Patient-specific compensator and aperture models are exported from treatment planning system and converted to STL format using a combination of software tools including Matlab and Autodesk's Netfabb. They are then loaded into the MC geometry for simulation purpose. The second details a method for easily visualizing and comparing simulated doses with the dose calculated from the treatment planning system. This system is established by utilizing the open source software [http://www.slicer.org '''3D Slicer''']. The methodology was demonstrated with a two-field proton treatment plan on the IROC lung phantom. Profiles and two-dimensional (2D) dose planes through the target isocenter were analyzed using our in-house software tools. This present workflow and set of codes can be easily adapted by other groups for their clinical practice.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Morphological Analysis of Sigmoid Sinus Anatomy: Clinical Applications to Neurotological Surgery== &lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/30635049 J Otolaryngol Head Neck Surg. 2019 Jan 11;48(1):2.  PMID: 30635049] | [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6329078/pdf/40463_2019_Article_324.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Van Osch K, Allen D, Gare B, Hudson TJ, Ladak H, Agrawal SK.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Schulich School of Medicine &amp;amp; Dentistry, Western University, London, Ontario, Canada.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' OBJECTIVES:&lt;br /&gt;
The primary objective of this study was to use high-resolution micro-CT images to create accurate three-dimensional (3D) models of several intratemporal structures, and to compare several surgically important dimensions within the temporal bone. The secondary objective was to create a statistical shape model (SSM) of a dominant and non-dominant sigmoid sinus (SS) to provide a template for automated segmentation algorithms.&lt;br /&gt;
&lt;br /&gt;
METHODS:&lt;br /&gt;
A free image processing software, 3D Slicer, was utilized to create three-dimensional reconstructions of the SS, jugular bulb (JB), facial nerve (FN), and external auditory canal (EAC) from micro-CT scans. The models were used to compare several clinically important dimensions between the dominant and non-dominant SS. Anatomic variability of the SS was also analyzed using SSMs generated using the Statismo software framework.&lt;br /&gt;
&lt;br /&gt;
RESULTS:&lt;br /&gt;
Three-dimensional models from 38 temporal bones were generated and analyzed. Right dominance was observed in 74% of the paired SSs. All distances were significantly shorter on the dominant side (p &amp;lt; 0.05), including: EAC - SS (dominant: 13.7 ± 3.4 mm; non-dominant: 15.3 ± 2.7 mm), FN - SS (dominant: 7.2 ± 1.8 mm; non-dominant: 8.1 ± 2.3 mm), 2nd genu FN - superior tip of JB (dominant: 8.7 ± 2.2 mm; non-dominant: 11.2 ± 2.6 mm), horizontal distance between the superior tip of JB - descending FN (dominant: 9.5 ± 2.3 mm; non-dominant: 13.2 ± 3.5 mm), and horizontal distance between the FN at the stylomastoid foramen - JB (dominant: 5.4 ± 2.2 mm; non-dominant: 7.7 ± 2.1). Analysis of the SSMs indicated that SS morphology is most variable at its junction with the transverse sinus, and least variable at the JB.&lt;br /&gt;
&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
This is the first known study to investigate the anatomical variation and relationships of the SS using high resolution scans, 3D  models and statistical shape analysis. This analysis seeks to guide neurotological surgical approaches and provide a template for automated segmentation and surgical simulation.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;In [http://www.slicer.org '''3D Slicer'''], nine fiducials (F1 – F9) were placed on the 3D reconstructions of the SS, JB, EAC, and FN to analyze several surgically relevant relationships between these structures.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''Funding:'''&lt;br /&gt;
&lt;br /&gt;
*381117/Collaborative Health Research Projects&lt;br /&gt;
&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |[[image:vanOschJoHNS2019.jpg|thumb|300px| Fiducials and distances calculated from coordinates (BLUE - SS, YELLOW - FN, PURPLE - EAC). a. EAC – SS (F1 – F2); Descending FN – SS (F3 – F4). b. 2nd genu FN – Superior tip JB. (F5 – F6); Descending FN - Superior tip JB (F6 – F7); FN at the SMF - JB (F8 – F9).]]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Hherhold</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Main_Page/SlicerCommunity/2019&amp;diff=60808</id>
		<title>Main Page/SlicerCommunity/2019</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Main_Page/SlicerCommunity/2019&amp;diff=60808"/>
		<updated>2019-02-13T16:40:23Z</updated>

		<summary type="html">&lt;p&gt;Hherhold: /* 2019 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Main_Page/SlicerCommunity}}&lt;br /&gt;
=2019=&lt;br /&gt;
&lt;br /&gt;
==Unique metasomal musculature in sweat bees (Hymenoptera, Apoidea, Halictidae) revealed by micro-CT scanning.== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://digitallibrary.amnh.org/handle/2246/6924 American Museum Novitates] | [http://digitallibrary.amnh.org/bitstream/handle/2246/6924/N3920.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Herhold, Hollister W.; Davis, Steven R., 1983-; Smith, Corey Shepard.; Engel, Michael S.; Grimaldi, David A.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' American Museum of Natural History, New York, NY&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' Bees of the family Halictidae (Apoidea: Anthophila) have three pairs of thick, bundled muscles that are circular to subcircular in cross section within the first metasomal segment, as revealed by micro-CT scanning of 16 species in 15 genera of five bee families. In nonhalictids and the basal halictid subfamily Rophitinae, these muscles are planar (flat and sheetlike), typically lying between the anterior air sacs and abdominal wall. In Nomiinae and Halictinae, these muscles, especially the dorsal-ventral pair, bulge into air-sac space, partly enveloped by air-sac membrane. A possible function may be to facilitate metasomal compression and contraction, and thus air flow. The bundled shape of these derived halictid muscles is similar to that of flight muscles, but further data is needed to determine if they are fibrillar, which would suggest a completely different function.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==3D Reconstruction of MR-Visible Fe&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;O&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt;-Mesh Implants: Pelvic Mesh Measurement Techniques and Preliminary Findings== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/30387537 Neurourol Urodyn. 2019 Jan;38(1):369-78.  PMID: 30387537]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Brocker KA, Mokry T, Alt CD, Kauczor HU, Lenz F, Sohn C, DeLancey JO, Chen L.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Obstetrics and Gynecology, Medical School, University of Heidelberg, Heidelberg, Germany.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' AIMS:&lt;br /&gt;
To develop MR-based measurement technique to evaluate the postoperative dimension and location of implanted magnetic resonance (MR)-visible meshes.&lt;br /&gt;
&lt;br /&gt;
METHODS:&lt;br /&gt;
This technique development study reports findings of six patients (A-F) with cystoceles treated with anterior vaginal MR-visible Fe&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;O&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt; -polypropylene implants. Implanted meshes were reconstructed from 3 months and/or 1 year postsurgical MR-images using [http://www.slicer.org '''3D Slicer''']. Measurements including mesh length, distance to the ischial spines, pudendal, and obturator neurovascular bundles and urethra were obtained using software Rhino® and a custom Matlab® program. The range of implanted mesh length and their placements were reported and compared with mesh design and implantation recommendations. With the anterior/posterior-mesh-segment-ratio mesh shrinkage localization was evaluated.&lt;br /&gt;
&lt;br /&gt;
RESULTS:&lt;br /&gt;
Examinations were possible for patients A-D 3 months and for A, C, E, and F 1 year postsurgical. The mesh was at least 40% shorter in all patients 3 months and/or 1 year postoperatively. A, B showed shrinkage in the anterior segment, D, E in the posterior segment (Patients C, F not applicable due to intraoperative mesh trimming). Patient E presented pain in the area of mesh shrinkage. In Patient C posterior mesh fixations were placed in the iliococcygeal muscle rather than sacrospinous ligaments. Arm placement less than 20 mm from the pudendal neurovascular bundles was seen in all cases. The portion of the urethra having mesh underneath it ranged from 19% to 55%.&lt;br /&gt;
&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
MRI-based measurement techniques have been developed to quantify implanted mesh location and dimension. Mesh placement variations possibly correlating with postoperative complications can be illustrated.&lt;br /&gt;
&lt;br /&gt;
'''Funding:'''&lt;br /&gt;
* P50 HD044406/HD/NICHD NIH HHS/United States&lt;br /&gt;
* R21 HD079908/HD/NICHD NIH HHS/United States&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==A Complete Workflow for Utilizing Monte Carlo Toolkits in Clinical Cases  for a Double-Scattering Proton Therapy System== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/30426669 J Appl Clin Med Phys. 2019 Jan;20(1):23-30.  PMID: 30426669] | [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6333150/pdf/ACM2-20-23.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Muller L, Prusator M, Ahmad S, Chen Y.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Radiation Oncology, University of Oklahoma Health Sciences Center, Oklahoma City, OK.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' The methods described in this paper allow end users to utilize Monte Carlo (MC) toolkits for patient-specific dose simulation and perform analysis and plan comparisons for double-scattering proton therapy systems. The authors aim to fill two aspects of this process previously not explicitly published. The first one addresses the modeling of field-specific components in simulation space. Patient-specific compensator and aperture models are exported from treatment planning system and converted to STL format using a combination of software tools including Matlab and Autodesk's Netfabb. They are then loaded into the MC geometry for simulation purpose. The second details a method for easily visualizing and comparing simulated doses with the dose calculated from the treatment planning system. This system is established by utilizing the open source software [http://www.slicer.org '''3D Slicer''']. The methodology was demonstrated with a two-field proton treatment plan on the IROC lung phantom. Profiles and two-dimensional (2D) dose planes through the target isocenter were analyzed using our in-house software tools. This present workflow and set of codes can be easily adapted by other groups for their clinical practice.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Morphological Analysis of Sigmoid Sinus Anatomy: Clinical Applications to Neurotological Surgery== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/30635049 J Otolaryngol Head Neck Surg. 2019 Jan 11;48(1):2.  PMID: 30635049] | [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6329078/pdf/40463_2019_Article_324.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Van Osch K, Allen D, Gare B, Hudson TJ, Ladak H, Agrawal SK.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Schulich School of Medicine &amp;amp; Dentistry, Western University, London, Ontario, Canada.&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' OBJECTIVES:&lt;br /&gt;
The primary objective of this study was to use high-resolution micro-CT images to create accurate three-dimensional (3D) models of several intratemporal structures, and to compare several surgically important dimensions within the temporal bone. The secondary objective was to create a statistical shape model (SSM) of a dominant and non-dominant sigmoid sinus (SS) to provide a template for automated segmentation algorithms.&lt;br /&gt;
&lt;br /&gt;
METHODS:&lt;br /&gt;
A free image processing software, 3D Slicer, was utilized to create three-dimensional reconstructions of the SS, jugular bulb (JB), facial nerve (FN), and external auditory canal (EAC) from micro-CT scans. The models were used to compare several clinically important dimensions between the dominant and non-dominant SS. Anatomic variability of the SS was also analyzed using SSMs generated using the Statismo software framework.&lt;br /&gt;
&lt;br /&gt;
RESULTS:&lt;br /&gt;
Three-dimensional models from 38 temporal bones were generated and analyzed. Right dominance was observed in 74% of the paired SSs. All distances were significantly shorter on the dominant side (p &amp;lt; 0.05), including: EAC - SS (dominant: 13.7 ± 3.4 mm; non-dominant: 15.3 ± 2.7 mm), FN - SS (dominant: 7.2 ± 1.8 mm; non-dominant: 8.1 ± 2.3 mm), 2nd genu FN - superior tip of JB (dominant: 8.7 ± 2.2 mm; non-dominant: 11.2 ± 2.6 mm), horizontal distance between the superior tip of JB - descending FN (dominant: 9.5 ± 2.3 mm; non-dominant: 13.2 ± 3.5 mm), and horizontal distance between the FN at the stylomastoid foramen - JB (dominant: 5.4 ± 2.2 mm; non-dominant: 7.7 ± 2.1). Analysis of the SSMs indicated that SS morphology is most variable at its junction with the transverse sinus, and least variable at the JB.&lt;br /&gt;
&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
This is the first known study to investigate the anatomical variation and relationships of the SS using high resolution scans, 3D  models and statistical shape analysis. This analysis seeks to guide neurotological surgical approaches and provide a template for automated segmentation and surgical simulation.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;In [http://www.slicer.org '''3D Slicer'''], nine fiducials (F1 – F9) were placed on the 3D reconstructions of the SS, JB, EAC, and FN to analyze several surgically relevant relationships between these structures.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''Funding:'''&lt;br /&gt;
* 381117/Collaborative Health Research Projects&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:vanOschJoHNS2019.jpg|thumb|300px| Fiducials and distances calculated from coordinates (BLUE - SS, YELLOW - FN, PURPLE - EAC). a. EAC – SS (F1 – F2); Descending FN – SS (F3 – F4). b. 2nd genu FN – Superior tip JB. (F5 – F6); Descending FN - Superior tip JB (F6 – F7); FN at the SMF - JB (F8 – F9).]]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Hherhold</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Main_Page/SlicerCommunity&amp;diff=54938</id>
		<title>Main Page/SlicerCommunity</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Main_Page/SlicerCommunity&amp;diff=54938"/>
		<updated>2017-09-19T10:41:29Z</updated>

		<summary type="html">&lt;p&gt;Hherhold: Add use of 3D Slicer&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=3D Slicer Enabled Research=&lt;br /&gt;
&lt;br /&gt;
[http://www.slicer.org 3D Slicer] is a free open source software package distributed under a BSD style [[Projects/slicerWeb:LicenseText|license]]. The majority of funding for the development of 3D slicer comes from a number of grants and contracts from the National Institutes of Health. See [http://www.slicer.org/wiki/Documentation/4.x/Acknowledgments Slicer Acknowledgments] for more information.&lt;br /&gt;
&lt;br /&gt;
This page focuses on research that was done outside of our immediate collaboration community. That community is represented in the [http://www.slicer.org/publications/pages/display/?collection=11 publication database].&lt;br /&gt;
&lt;br /&gt;
We invite you to provide information on how you are using 3D Slicer to produce peer-reviewed research. Information about the scientific impact of this tool is helpful in raising funding for the continued support.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;[https://www.slicer.org/wiki/Main_Page/SlicerCommunity-2016 2016]:: [http://wiki.slicer.org/slicerWiki/index.php/Main_Page/SlicerCommunity-2015 2015] :: [http://wiki.slicer.org/slicerWiki/index.php/Main_Page/SlicerCommunity-2011-2014 2014-2011] :: [http://wiki.slicer.org/slicerWiki/index.php/Main_Page/SlicerCommunity-2005-2010 2010-2005]&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=2017=&lt;br /&gt;
==A new genus of hell ants from the Cretaceous (Hymenoptera: Formicidae: Haidomyrmecini) with a novel head structure== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://onlinelibrary.wiley.com/doi/10.1111/syen.12253/abstract Systematic Entomology. 2017 Sep 4;42(4):837-846.]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Barden, Phillip A., Herhold, Hollister W., Grimaldi, David A.&lt;br /&gt;
&lt;br /&gt;
'''Institutions:'''  Department of Biological Sciences, New Jersey Institute of Technology, Newark, NJ, U.S.A. (PB), Department of Invertebrate Zoology, American Museum of Natural History, New York, NY, U.S.A. (PB, HH, DG)&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' An unusual Cretaceous trap jaw ant is described from Burmese amber dated to the Late Cretaceous. Linguamyrmex vladi gen.n. sp.n. is distinguished by an unusual suite of morphological characters indicating specialized predatory behaviour and an adaptive strategy no longer found among modern ant lineages. The clypeus, highly modified as in other closely related haidomyrmecine hell ants, is equipped with a paddle-like projection similar to Ceratomyrmex. X-ray imaging reveals that this clypeal paddle is reinforced, most probably with sequestered metals. Presumably this fortified clypeal structure was utilized in tandem with scythe-like mandibles to pin and potentially puncture soft-bodied prey. This unique taxon, which stresses the diversity of stem-group ants, is discussed in the context of modern and other Cretaceous trap jaw ant species.&lt;br /&gt;
&lt;br /&gt;
'''Slicer:''' Mid-way through the analysis and post-processing of the specimen, we switched from a different CT application to [http://www.slicer.org '''3D Slicer''']. The toolset provided, combined with the active community, enabled rapid, high-quality visualizations. &lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Linguamyrmex_vladi.png|thumb|300px| Three-dimensional reconstruction and two-dimensional X-ray ‘slices’ of Linguamyrmex vladi. (A) Three-dimensional reconstruction of specimen BuPH-01 in lateral view. Some elements are irrecoverable in X-ray imaging due to the similar attenuation properties of both amber and thin cuticle. Scale bar, 0.75 mm. (B) Lateral view of head capsule, mandibles and clypeal paddle. Planes C and D correspond with panels C and D, respectively. Scale bar, 0.2 mm. (C) Cross-section of clypeal paddle from oblique dorsal view. Labels demonstrate approximate pixel ‘grey values’ for each fossil material, which in turn represent relative X-ray attenuation levels. (D) Cross-section of clypeal paddle from frontal view. Scale bar, 0.08 mm in each cross-section.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Automated Catheter Navigation with Electromagnetic Image Guidance==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
||&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28362578 IEEE Trans Biomed Eng. 2017 Aug;64(8):1972-9.  PMID: 28362578]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Jaeger HA, Nardelli P, O'Shea C, Tugwell J, Khan KA, Power T, O'Shea M, Kennedy MP, Cantillon-Murphy P.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' School of Engineering, University College Cork, Cork, Ireland.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose: ''' This paper describes a novel method of controlling an endoscopic catheter using an automated catheter tensioning system with the objective of providing clinicians with improved manipulation capabilities within the patient. Catheters are used in many clinical procedures to provide access to the cardiopulmonary system. Control of such catheters is performed manually by the clinicians using a handle, typically actuating a single or opposing set of pull-wires. Such catheters are generally actuated in a single plane, requiring the clinician to rotate the catheter handle to navigate the system. The automation system described here allows closed-loop control of a custom bronchial catheter in tandem with an electromagnetic tracking of the catheter tip and image guidance using [http://www.slicer.org '''3D Slicer''']. An electromechanical drive train applies tension to four pull-wires to steer the catheter tip, with the applied force constantly monitored though force sensing load-cells. The applied tension is controlled through a PC connected joystick. An electromagnetic sensor embedded in the catheter tip enables constant real-time position tracking while a working channel provides a route for endoscopic instruments. The system is demonstrated and tested in both a breathing lung model and a preclinical animal study. Navigation to predefined targets in the subject's airways using the joystick while using virtual image guidance and electromagnetic tracking was demonstrated. Average targeting times were 24 seconds and 10 seconds respectively for the breathing lung and live animal studies. This paper presents the first reported remote controlled bronchial working channel catheter utilizing electromagnetic tracking and has many implications for future development in endoscopic and catheter based procedures.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Quantitative CT ventriculography for Assessment and Monitoring of Hydrocephalus: a Pilot Study and Description of Method in Subarachnoid Hemorrhage (SAH)== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28456742 World Neurosurg. 2017 Aug;104:136-141.  PMID: 28456742]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Multani JS, Oermann EK, Titano J, Mascitelli J, Nicol K, Feng R, Skovrlj B, Pain M, Mocco JD, Bederson JB, Costa A, Shrivastava R.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Neurological Surgery, Mount Sinai Health System, New York, NY, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' There is no facile quantitative method for monitoring hydrocephalus (HCP).&lt;br /&gt;
OBJECTIVE:&lt;br /&gt;
We propose quantitative CT ventriculography (qCTV) as a novel computer vision tool for empirically assessing HCP in patients with subarachnoid hemorrhage (SAH).&lt;br /&gt;
METHODS:&lt;br /&gt;
Twenty patients with SAH who were evaluated for ventriculoperitoneal shunt (VPS) placement were selected for inclusion. Ten patients with normal CT head (CTH) were analyzed as negative controls. CTH scans were segmented both manually and automatically (qCTV) to generate measures of ventricular volume.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Median manually calculated ventricular volume was 36.1cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;(IQR 30-115cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;), which was similar to a median qCTV measured volume of 37.5cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; (IQR 32-118cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;) (p=0.796). Patients undergoing VPS placement demonstrated an increase in ventricular volume on qCTV from 21cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; to 40cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; on Day T-2, and 51cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; by Day 0, a change of 144%. This contrasts with patients who did not require shunting whose ventricular volumes decreased from 16 to 14cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; on Day T-2, and 13cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; by Day 0, with an average overall decrease in volume of 19% (p=0.001). Average change in ventricular volume predicted which patients would require VPS placement, successfully identifying 7/10 patients (p=0.004). Using an optimized cutoff of change in ventricular volume of 2.5cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; identified all patients who went on to require VPS placement (10/10, p=0.011).&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
qCTV is a reliable means of quantifying ventricular volume and hydrocephalus. This technique offers a new tool for monitoring neurosurgical patients for hydrocephalus, and may be beneficial for use in future research studies as well as the routine care of patients with hydrocephalus.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==What are the True Volumes of SEGA Tumors? Reliability of Planimetric and Popular Semi-automated Image Segmentation Methods==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
||&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28321524 MAGMA. 2017 Aug;30(4):397-405. PMID: 28321524]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Stawiski K, Trelińska J, Baranska D, Dachowska I, Kotulska K, Jóźwiak S, Fendler W, Młynarski W.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Biostatistics and Translational Medicine, Hematology and Diabetology, Medical University of Lodz, Lodz, Poland.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose: '''OBJECTIVE:&lt;br /&gt;
To evaluate the reliability of the standard planimetric methodology of volumetric analysis and three different open-source semi-automated approaches of brain tumor segmentation.&lt;br /&gt;
MATERIALS AND METHODS:&lt;br /&gt;
The volumes of subependymal giant cell astrocytomas (SEGA) examined by 30 MRI studies of 10 patients from a previous everolimus-related trial (EMINENTS study) were estimated using four methods: planimetric method (modified MacDonald ellipsoid method), ITK-Snap (pixel clustering, geodesic active contours, region competition methods), [http://www.slicer.org '''3D Slicer'''] (level-set thresholding), and NIRFast (k-means clustering, Markov random fields). The methods were compared, and a trial simulation was performed to determine how the choice of approach could influence the final decision about progression or response.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Intraclass correlation coefficient was high (0.95; 95% CI 0.91-0.98). The planimetric method always overestimated the size of the tumor, while virtually no mean difference was found between ITK-Snap and [http://www.slicer.org '''3D Slicer'''] (P = 0.99). NIRFast underestimated the volume and presented a proportional bias. During the trial simulation, a moderate level of agreement between all the methods (kappa 0.57-0.71, P &amp;lt; 0.002) was noted.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
Semi-automated segmentation can ease oncological follow-up but the moderate level of agreement between segmentation methods suggests that the reference standard volumetric method for SEGA tumors should be revised and chosen carefully, as the selection of volumetry tool may influence the conclusion about tumor progression or response.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==MRI Visible Fe&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;O&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt; Polypropylene Mesh: 3D Reconstruction of Spatial Relation to Bony Pelvis and Neurovascular Structures== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28124074 Int Urogynecol J. 2017 Aug;28(8):1131-8.  PMID: 28124074]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Chen L, Lenz F, Alt CD, Sohn C, De Lancey JO, Brocker KA.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Pelvic Floor Research Group, Biomedical Engineering Department, University of Michigan, Ann Arbor, MI, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:'''&lt;br /&gt;
INTRODUCTION AND HYPOTHESIS:&lt;br /&gt;
To demonstrate mesh magnetic resonance imaging (MRI) visibility in living women, the feasibility of reconstructing the full mesh course in 3D, and to document its spatial relationship to pelvic anatomical structures.&lt;br /&gt;
&amp;lt;br&amp;gt;METHODS:&lt;br /&gt;
This is a proof of concept study of three patients from a prospective multi-center trial evaluating women with anterior vaginal mesh repair using a MRI-visible Fe&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;O&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt; polypropylene implant for pelvic floor reconstruction. High-resolution sagittal T2-weighted (T2w) sequences, transverse T1-weighted (T1w) FLASH 2D, and transverse T1w FLASH 3D sequences were performed to evaluate Fe&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;O&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt; polypropylene mesh MRI visibility and overall post-surgical pelvic anatomy 3 months after reconstructive surgery. Full mesh course in addition to important pelvic structures were reconstructed using the  [http://slicer.org '''3D Slicer''']® software program based on T1w and T2w MRI.&lt;br /&gt;
&amp;lt;br&amp;gt;RESULTS:&lt;br /&gt;
Three women with POP-Q grade III cystoceles were successfully treated with a partially absorbable MRI-visible anterior vaginal mesh with six fixation arms and showed no recurrent cystocele at the 3-month follow-up examination. The course of mesh in the pelvis was visible on MRI in all three women. The mesh body and arms could be reconstructed allowing visualization of the full course of the mesh in relationship to important pelvic structures such as the obturator or pudendal vessel nerve bundles in 3D.&lt;br /&gt;
&amp;lt;br&amp;gt;CONCLUSIONS:&lt;br /&gt;
The use of MRI-visible Fe3O4 polypropylene meshes in combination with post-surgical 3D reconstruction of the mesh and adjacent structures is feasible suggesting that it might be a useful tool for evaluating mesh complications more precisely and a valuable interactive feedback tool for surgeons and mesh design engineers.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Three-dimensional Printing of X-ray Computed Tomography Datasets with Multiple Materials using Open-source Data Processing== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28231405 Anat Sci Educ. 2017 Jul;10(4):383-91. PMID: 28231405]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Sander IM, McGoldrick MT, Helms MN, Betts A, van Avermaete A, Owers E, Doney E, Liepert T, Niebur G, Liepert D, Leevy WM.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Biological Sciences, College of Science, University of Notre Dame, Notre Dame, Indiana., USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Advances in three-dimensional (3D) printing allow for digital files to be turned into a &amp;quot;printed&amp;quot; physical product. For example, complex anatomical models derived from clinical or pre-clinical X-ray computed tomography (CT) data of patients or research specimens can be constructed using various printable materials. Although 3D printing has the potential to advance learning, many academic programs have been slow to adopt its use in the classroom despite increased availability of the equipment and digital databases already established for educational use. Herein, a protocol is reported for the production of enlarged bone core and accurate representation of human sinus passages in a 3D printed format using entirely consumer-grade printers and a combination of free-software platforms. The comparative resolutions of three surface rendering programs were also determined using the sinuses, a human body, and a human wrist data files to compare the abilities of different software available for surface map generation of biomedical data. Data shows that  [http://slicer.org '''3D Slicer''']  provided highest compatibility and surface resolution for anatomical 3D printing. Generated surface maps were then 3D printed via fused deposition modeling (FDM printing). In conclusion, a methodological approach that explains the production of anatomical models using entirely consumer-grade, fused deposition modeling machines, and a combination of free software platforms is presented in this report. The methods outlined will facilitate the incorporation of 3D printed anatomical models in the classroom.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==A New Device for Fiducial Registration of Image-guided Navigation System for Liver RFA== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28718001 Int J Comput Assist Radiol Surg. 2017 Jul 17. PMID: 28718001]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Doba N, Fukuda H, Numata K, Hao Y, Hara K, Nozaki A, Kondo M, Chuma M, Tanaka K, Takebayashi S, Koizumi N, Kobayashi A, Tokuda J, Maeda S.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Gastroenterological Center, Yokohama City University Medical Center, Yokohama, Japan.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Radiofrequency ablation for liver tumors (liver RFA) is widely performed under ultrasound guidance. However, discriminating between the tumor and the needle is often difficult because of cavitation caused by RFA-induced coagulation. An unclear ultrasound image can lead to complications and tumor residue. Therefore, image-guided navigation systems based on fiducial registration have been developed. Fiducial points are usually set on a patient's skin. But the use of internal fiducial points can improve the accuracy of navigation. In this study, a new device is introduced to use internal fiducial points using 2D US.&lt;br /&gt;
METHODS:&lt;br /&gt;
3D Slicer as the navigation software, Polaris Vicra as the position sensor, and two target tumors in a 3D abdominal phantom as puncture targets were used. Also, a new device that makes it possible to obtain tracking coordinates in the body was invented. First, two-dimensional reslice images from the CT images using [http://slicer.org '''3D Slicer''']  were built. A virtual needle was displayed on the two-dimensional reslice image, reflecting the movement of the actual needle after fiducial registration. A phantom experiment using three sets of fiducial point configurations: one conventional case using only surface points, and two cases in which the center of the target tumor was selected as a fiducial point was performed. For each configuration, one surgeon punctured each target tumor ten times under guidance from the [http://slicer.org '''3D Slicer''']  display. Finally, a statistical analysis examining the puncture error was performed.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The puncture error for each target tumor decreased significantly when the center of the target tumor was included as one of the fiducial points, compared with when only surface points were used.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
This study introduces a new device to use internal fiducial points and suggests that the accuracy of image-guided navigation systems for liver RFA can be improved by using the new device.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==MultiXplore: Visual Exploration Platform for Multimodal Neuroimaging Data== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28712912 J Neurosci Methods. 2017 Jul 13;290:1-12. PMID: 28712912]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Bakhshmand SM, Khan AR, de Ribaupierre S, Eagleson R.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Biomedical Engineering Graduate Program, University of Western Ontario, London, Ontario, Canada.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' BACKGROUND:&lt;br /&gt;
Construction of brain functional and structural networks by neuroimaging methods facilitates inter-modal studies. These type of studies often demand exploration tools to carry out functional-structural discoveries and answer questions regarding the anatomical basis of brain networks.&lt;br /&gt;
NEW METHOD:&lt;br /&gt;
This paper describes the design and development of a software module for interactive visualization and exploration of dual-modal brain networks. Our objective was to equip the user with a research tool to investigate brain connectivity matrices while visualizing relevant anatomical landmarks within a 3D volumetric view. In order to create this view, MultiXplore was designed to load data from both structural and diffusion MRI and connectivity matrices.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Once user starts to select desired cells through an interactive matrix unit, associated axonal fiber pathways and grey matter regions are generated and displayed. Integration and visualization of functional and structural networks in this 3D interactive framework was successfully implemented and tested.&lt;br /&gt;
COMPARISON WITH EXISTING METHOD(S):&lt;br /&gt;
MultiXplore contributes to the transition of connectivity visualization techniques from node-link format to an anatomically more realistic graphical form and assists scientists in relating connectivity matrices to their anatomical correlates. This module also benefits from additional novel functionalities to annotate and differentiate fibers in a large bundle. Unlike traditional graph displays, interactive functionality helps in the inspection and visualization of relevant structures without cluttering the scene with excessive items.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
This module was designed and developed as a plugin to [http://slicer.org '''3D Slicer'''] imaging platform and is accessible for neuroimaging researchers through NITRC (http://www.nitrc.org/projects/multixplore/).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Optimization of a Novel Large Field of View Distortion Phantom for MR-only Treatment Planning== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28497476 J Appl Clin Med Phys. 2017 Jul;18(4):51-61.  PMID: 28497476]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Price RG, Knight RA, Hwang KP, Bayram E, Nejad-Davarani SP, Glide-Hurst CK.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Radiation Oncology, Henry Ford Health System, Detroit, MI, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' PURPOSE:&lt;br /&gt;
MR-only treatment planning requires images of high geometric fidelity, particularly for large fields of view (FOV). However, the availability of large FOV distortion phantoms with analysis software is currently limited. This work sought to optimize a modular distortion phantom to accommodate multiple bore configurations and implement distortion characterization in a widely implementable solution.&lt;br /&gt;
METHOD AND MATERIALS:&lt;br /&gt;
To determine candidate materials, 1.0 T MR and CT images were acquired of twelve urethane foam samples of various densities and strengths. Samples were precision-machined to accommodate 6 mm diameter paintballs used as landmarks. Final material candidates were selected by balancing strength, machinability, weight, and cost. Bore sizes and minimum aperture width resulting from couch position were tabulated from the literature (14 systems, 5 vendors). Bore geometry and couch position were simulated using MATLAB to generate machine-specific models to optimize the phantom build. Previously developed software for distortion characterization was modified for several magnet geometries (1.0 T, 1.5 T, 3.0 T), compared against previously published 1.0 T results, and integrated into the [http://slicer.org '''3D Slicer'''] application platform.&lt;br /&gt;
RESULTS:&lt;br /&gt;
All foam samples provided sufficient MR image contrast with paintball landmarks. Urethane foam (compressive strength ∼1000 psi, density ~20 lb/ft&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; ) was selected for its accurate machinability and weight characteristics. For smaller bores, a phantom version with the following parameters was used: 15 foam plates, 55 × 55 × 37.5 cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; (L×W×H), 5,082 landmarks, and weight ~30 kg. To accommodate &amp;gt; 70 cm wide bores, an extended build used 20 plates spanning 55 × 55 × 50 cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; with 7,497 landmarks and weight ~44 kg. Distortion characterization software was implemented as an external module into [http://slicer.org '''3D Slicer''']'s plugin framework and results agreed with the literature.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
The design and implementation of a modular, extendable distortion phantom was optimized for several bore configurations. The phantom and analysis software will be available for multi-institutional collaborations and cross-validation trials to support MR-only planning.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Validation of a Method for &amp;quot;Dose of the Day&amp;quot; Calculation in Head-neck Tomotherapy by using Planning CT-to-MVCT Deformable Image Registration== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28619289 Phys Med. 2017 Jul;39:73-79.   PMID: 28619289]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Branchini M, Fiorino C, Dell'Oca I, Belli ML, Perna L, Di Muzio N, Calandrino R, Broggi S.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Medical Physics Department, San Raffaele Scientific Institute, Milano, Italy.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' PURPOSE:&lt;br /&gt;
The aim of this study was to test the feasibility and dosimetric accuracy of a method that employs planning CT-to-MVCT deformable image registration (DIR) for calculation of the daily dose for head and neck (HN) patients treated with Helical Tomotherapy (HT).&lt;br /&gt;
METHODS:&lt;br /&gt;
For each patient, the planning kVCT (CTplan) was deformably registered to the MVCT acquired at the 15th therapy session (MV15) with a B-Spline Free Form algorithm using Mattes mutual information (open-source software [http://slicer.org '''3D Slicer''']), resulting in a deformed CT (CTdef). On the same day as MVCT15, a kVCT was acquired with the patient in the same treatment position (CT15). The original HT plans were recalculated both on CTdef and CT15, and the corresponding dose distributions were compared; local dose differences &amp;lt;2% of the prescribed dose (DD2%) and 2D/3D gamma-index values (2%-2mm) were assessed respectively with Mapcheck SNC Patient software (Sun Nuclear) and with [http://slicer.org '''3D Slicer'''].&lt;br /&gt;
RESULTS:&lt;br /&gt;
On average, 87.9%±1.2% of voxels were found for DD2% (on average 27 slices available for each patient) and 94.6%±0.8% of points passed the 2D gamma analysis test while the 3D gamma test was satisfied in 94.8%±0.8% of body's voxels.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
This study represents the first demonstration of the dosimetric accuracy of kVCT-to-MVCT DIR for dose of the day computations. The suggested method is sufficiently fast and reliable to be used for daily delivered dose evaluations in clinical strategies for adaptive Tomotherapy of HN cancer.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==SLIDE: Automatic Spine Level Identification System using a Deep Convolutional Neural Network== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28361323 Int J Comput Assist Radiol Surg. 2017 Jul;12(7):1189-98.  PMID: 28361323]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Hetherington J, Lessoway V, Gunka V, Abolmaesumi P, Rohling R.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Electrical and Computer Engineering, The University of British Columbia, Vancouver, Canada.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' PURPOSE:&lt;br /&gt;
Percutaneous spinal needle insertion procedures often require proper identification of the vertebral level to effectively and safely deliver analgesic agents. The current clinical method involves &amp;quot;blind&amp;quot; identification of the vertebral level through manual palpation of the spine, which has only 30% reported accuracy. Therefore, there is a need for better anatomical identification prior to needle insertion.&lt;br /&gt;
METHODS:&lt;br /&gt;
A real-time system was developed to identify the vertebral level from a sequence of ultrasound images, following a clinical imaging protocol. The system uses a deep convolutional neural network (CNN) to classify transverse images of the lower spine. Several existing CNN architectures were implemented, utilizing transfer learning, and compared for adequacy in a real-time system. In the system, the CNN output is processed, using a novel state machine, to automatically identify vertebral levels as the transducer moves up the spine. Additionally, a graphical display was developed and integrated within [http://slicer.org '''3D Slicer''']. Finally, an augmented reality display, projecting the level onto the patient's back, was also designed. A small feasibility study [Formula: see text] evaluated performance.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The proposed CNN successfully discriminates ultrasound images of the sacrum, intervertebral gaps, and vertebral bones, achieving 88% 20-fold cross-validation accuracy. Seventeen of 20 test ultrasound scans had successful identification of all vertebral levels, processed at real-time speed (40 frames/s).&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
A machine learning system is presented that successfully identifies lumbar vertebral levels. The small study on human subjects demonstrated real-time performance. A projection-based augmented reality display was used to show the vertebral level directly on the subject adjacent to the puncture site.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==A New Approach for Radiosynoviorthesis: A Dose-Optimized Planning method Based on Monte Carlo Simulation and Synovial Measurement using 3D Slicer and MRI== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28419533 Med Phys. 2017 Jul;44(7):3821-9.  PMID: 28419533]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Torres Berdeguez MB, Thomas S, Rafful P, Arruda Sanchez T, Medeiros Oliveira Ramos S, Albernaz MS, Vasconcellos de Sá L, Lopes de Souza SA, Mas Milian F, Xavier da Silva A.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Nuclear Engineering Department of Federal University of Rio de Janeiro, Rio de Janeiro, Brazil.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Recently, there has been a growing interest in a methodology for dose planning in radiosynoviorthesis to substitute fixed activity. Clinical practice based on fixed activity frequently does not embrace radiopharmaceutical dose optimization in patients. The aim of this paper is to propose and discuss a dose planning methodology considering the radiological findings of interest obtained by three-dimensional magnetic resonance imaging combined with Monte Carlo simulation in radiosynoviorthesis treatment applied to hemophilic arthropathy.&lt;br /&gt;
METHOD:&lt;br /&gt;
The parameters analyzed were: surface area of the synovial membrane (synovial size), synovial thickness and joint effusion obtained by 3D MRI of nine knees from nine patients on a SIEMENS AVANTO 1.5 T scanner using a knee coil. The [http://slicer.org '''3D Slicer'''] software performed both the semiautomatic segmentation and quantification of these radiological findings. A Lucite phantom 3D MRI validated the quantification methodology. The study used Monte Carlo N-Particle eXtended code version 2.6 for calculating the S-values required to set up the injected activity to deliver a 100 Gy absorbed dose at a determined synovial thickness. The radionuclides assessed were: 90Y, 32P, 188Re, 186Re, 153Sm, and 177Lu, and the present study shows their effective treatment ranges.&lt;br /&gt;
RESULT:&lt;br /&gt;
The quantification methodology was successfully tested, with an error below 5% for different materials. S-values calculated could provide data on the activity to be injected into the joint, considering no extra-articular leakage from joint cavity. Calculation of effective treatment range could assist with the therapeutic decision, with an optimized protocol for dose prescription in RSO.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
Using 3D Slicer software, this study focused on segmentation and quantification of radiological features such as joint effusion, synovial size and thickness, all obtained by 3D MRI in patients knees with hemophilic arthropathy. The combination of synovial size and thickness with the parameters obtained by Monte Carlo simulation such as effective treatment range and S-value, from which is calculated the injected activity, could be used for treatment planning in RSO. Data from this methodology could be a potential aid to clinical decision making by selecting the most suitable radionuclide; justifying the procedure, fractioning the dose and the calculated injected activity for children and adolescents, considering both the synovial size and thickness.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Retrospective Evaluation and SEEG Trajectory Analysis for Interactive Multi-trajectory Planner Assistant== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28710548 Int J Comput Assist Radiol Surg. 2017 Jul 14.  PMID: 28710548]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Scorza D, De Momi E, Plaino L, Amoroso G, Arnulfo G, Narizzano M, Kabongo L, Cardinale F.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
e-Health and Biomedical Applications Department, Vicomtech-IK4, Donostia-San Sebastián, Spain. &lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' PURPOSE:&lt;br /&gt;
Focal epilepsy is a neurological disease that can be surgically treated by removing area of the brain generating the seizures. The stereotactic electroencephalography (SEEG) procedure allows patient brain activity to be recorded in order to localize the onset of seizures through the placement of intracranial electrodes. The planning phase can be cumbersome and very time consuming, and no quantitative information is provided to neurosurgeons regarding the safety and efficacy of their trajectories. In this work, we present a novel architecture specifically designed to ease the SEEG trajectory planning using the [http://slicer.org '''3D Slicer'''] platform as a basis.&lt;br /&gt;
METHODS:&lt;br /&gt;
Trajectories are automatically optimized following criteria like vessel distance and insertion angle. Multi-trajectory optimization and conflict resolution are optimized through a selective brute force approach based on a conflict graph construction. Additionally, electrode-specific optimization constraints can be defined, and an advanced verification module allows neurosurgeons to evaluate the feasibility of the trajectory.&lt;br /&gt;
RESULTS:&lt;br /&gt;
A retrospective evaluation was performed using manually planned trajectories on 20 patients: the planning algorithm optimized and improved trajectories in 98% of cases. We were able to resolve and optimize the remaining 2% by applying electrode-specific constraints based on manual planning values. In addition, we found that the global parameters used discards 68% of the manual planned trajectories, even when they represent a safe clinical choice.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
Our approach improved manual planned trajectories in 98% of cases in terms of quantitative indexes, even when applying more conservative criteria with respect to actual clinical practice. The improved multi-trajectory strategy overcomes the previous work limitations and allows electrode optimization within a tolerable time span.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Canal Transportation, Unprepared Areas, and Dentin Removal after Preparation with BT-RaCe and ProTaper Next Systems== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28712638 J Endod. 2017 Jul 13. PMID: 28712638]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Brasil SC, Marceliano-Alves MF, Marques ML, Grillo JP, Lacerda MFLS, Alves FRF, Siqueira JF Jr, Provenzano JC.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Endodontics, Faculty of Dentistry, Estácio de Sá University, Rio de Janeiro, Brazil.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' BACKGROUND:&lt;br /&gt;
This study compared the shaping ability of ProTaper Next (Dentsply Sirona, Tulsa, OK) and BT-RaCe (FKG Dentaire, La Chaux-de-Fonds, Switzerland) instrument systems in the mesial canals of mandibular molars using micro-computed tomographic (micro-CT) imaging.&lt;br /&gt;
METHODS:&lt;br /&gt;
A total of 17 type IV mesial roots of extracted first mandibular molars were scanned using micro-CT imaging before and after root canal preparation with the 2 instrument systems. Both systems were used in the same root but alternating the mesial canals from root to root. The following parameters were analyzed: root canal volume, surface area, unprepared surface areas, transportation, canal/root width ratio, and preparation time.&lt;br /&gt;
RESULTS:&lt;br /&gt;
There were no statistically significant differences between the 2 systems for all evaluated parameters (P &amp;gt; .05). The unprepared surface areas for the full canal length and the apical 5-mm segment were 33% and 14% for BT-RaCe and 31% and 14% for ProTaper Next, respectively. After preparation, all root canals had a diameter that was not larger than 35% of the root diameter at the coronal and middle segments.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
The 2 systems showed no differences in any of the evaluated shaping parameters. None of the tested systems put the roots at risk of fracture because of excessive dentin removal.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Presurgical Planning for Supratentorial Lesions with Free 3D Slicer Software and Sina App== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28673889 World Neurosurg. 2017 Jun 30.   PMID: 28673889]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Chen JG, Han KW, Zhang DF, Li ZX, Li YM, Hou LJ.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  &lt;br /&gt;
Department of Neurosurgery, Shanghai Neurosurgical Institute, Changzheng Hospital, Shanghai, China.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Neuronavigation system is widely used in the localization of intracranial lesions with satisfactory accuracy. However, it's expensive and difficult to learn. Therefore, simple and practical augmented reality (AR) system using mobile devices might be an alternative technique.&lt;br /&gt;
OBJECTIVE:&lt;br /&gt;
We aim to introduce a mobile AR system for the localization of supratentorial lesions. Its practicability and accuracy were examined by clinical application in patients and comparison with standard neuronavigation system.&lt;br /&gt;
METHODS:&lt;br /&gt;
Three-dimensional (3D) model including lesions is created using [http://slicer.org '''3D Slicer''']. 2D image of this 3D model was obtained and overlapped on patients' head using Sina app. Registration was conducted with the assistance of anatomical landmarks and fiducial markers. Center of lesion projected on scalp was identified with our mobile AR system and standard neuronavigation system, respectively. Distance difference between centers identified by these two systems was measured.&lt;br /&gt;
RESULT:&lt;br /&gt;
Our mobile AR system was simple and accurate in the localization of supratentorial lesions with a mean distance difference of 4.4 ± 1.1 mm. Registration added on an average of 141.7 ± 39 seconds to operation time. There was no statistically significant difference for the required time among three registrations (P=0.646).&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
The mobile AR system presents an alternative technology for image-guided neurosurgery and proves to be practical and reliable. The technique contributes to optimal presurgical planning for supratentorial lesions, especially in the absence of neuronavigation system.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Nerve Atrophy in Trigeminal Neuralgia Due to Neurovascular Compression and its Association with Surgical Outcomes after Microvascular Decompression== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28638946 Acta Neurochir (Wien). 2017 Jun 21.   PMID: 28638946]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Cheng J, Meng J, Liu W, Zhang H, Hui X, Lei D.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  &lt;br /&gt;
Department of Neurosurgery, West China Hospital, Sichuan University, Sichuan, China.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' BACKGROUND:&lt;br /&gt;
Idiopathic trigeminal neuralgia (TN) is caused by neurovascular compression and is often related to morphological changes in the trigeminal nerve. The aim of this study was to quantitatively measure atrophic changes of trigeminal nerves in patients with TN, and to further investigate whether nerve atrophy affected the efficacy of microvascular decompression (MVD).&lt;br /&gt;
METHODS:&lt;br /&gt;
We conducted a prospective case-control study of 60 consecutive patients with TN and 30 sex- and age-matched healthy controls. All subjects underwent high-resolution three-dimensional MRI. The volume of the cisternal segment of trigeminal nerves was measured and compared using [http://slicer.org '''3D Slicer'''] software. Patients with TN underwent primary MVD and regular follow-up for at least 2 years. Associations of nerve atrophy with patient characteristics and operative outcomes were analyzed.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The mean volume of the affected trigeminal nerve was significantly reduced in comparison to that of the nonaffected side (65.8 ± 21.1 versus 77.9 ± 19.3 mm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;, P = 0.001) and controls (65.8 ± 21.1 versus 74.7 ± 16.5 mm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;, P = 0.003). Fifty-two patients (86.7%) achieved complete pain relief without medication immediately after surgery, and 77.6% of patients were complete pain relief at the 2-year follow-up. The Spearman correlation test showed that there was a positive correlation (r = 0.46, P = 0.018) between the degree of trigeminal nerve indentation and nerve atrophy. In multivariate logistic regression analysis, two factors, indentation on nerve root (OR = 2.968, P = 0.022) and degree of nerve atrophy (OR = 1.18, P = 0.035), were associated with the long-term outcome.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
TN is associated with atrophy on the affected nerve. Furthermore, greater nerve atrophy is associated with more severe trigeminal nerve indentation and better long-term outcome following MVD.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Complete Thoracolumbar Fracture-dislocation with Intact Neurologic Function: Explanation of a Novel Cord Saving Mechanism== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28648115 J Spinal Cord Med. 2017 Jun 26:1-10.   PMID: 28648115]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Rahimizadeh A, Asgari N, Rahimizadeh A.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Department of Neurosurgery , Pars Advanced and Minimally Invasive Medical Manners Research Center, Pars Hospital, Iran University of Medical Science, Tehran, Iran.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' BACKGROUND:&lt;br /&gt;
The thoracolumbar junction from T11 to L2 is a common site of injury in which fracture and dislocations are the most prevalent ones occurring at this location. Fracture dislocation is defined as failure of all three columns of the spine with gross displacement. Considering the significant violence necessary to produce fracture dislocations, these injuries are often associated with major neural deficit, with the majority of casualties becoming paraplegic immediately. Preservation of neurological function following complete fracture dislocation is quite rare entity.&lt;br /&gt;
OBJECTIVE:&lt;br /&gt;
To represent the possibility of existence of a preservation mechanism for functional integrity of cord despite spinal gross fracture dislocation by reproducing the injury on a plastic model and simulating a corresponding model using [http://slicer.org '''3D Slicer'''] software, detailed description the pathomechanism of neurologic sparing.&lt;br /&gt;
CASE REPORT:&lt;br /&gt;
A 19-year-old female who sustained severe thoracolumbar fracture dislocation but with normal neurology is presented. Despite the severity of the condition, the diagnosis was initially missed due to associated vital injuries.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Combined posterior and anterior surgery resulted in optimal coronal and sagittal alignment, as well as proper stabilization without any complication. At 9-year follow-up, the patient was found to be doing well.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
The prognosis for complete recovery with preplanned surgical intervention in thoracolumbar injuries affecting all three columns but with normal neurologic function is promising based on images, plastic models and 3D simulated model based on digital images.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Device-specific Evaluation of Intraventricular Left Ventricular Assist Device Position by Quantitative Coaxiality Analysis== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28601303 J Surg Res. 2017 Jun 1;213:110-4..   PMID: 28601303]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Anselmi A, Collin S, Haigron P, Verhoye JP, Flecher E.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  INSERM U1099, Rennes, France.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' BACKGROUND:&lt;br /&gt;
Patient-specific anatomy may influence the final intraventricular positioning of inflow cannula in left ventricular assist device (LVAD) recipients. An association exists between such positioning and clinical outcomes (specifically, orientation toward the interventricular septum has negative prognostic implications). Alternative commercially available LVADs are characterized by markedly different design, with potential consequences on intrathoracic fitting among individual patients.&lt;br /&gt;
MATERIAL AND METHODS:&lt;br /&gt;
A cohort of 13 LVAD recipients (either HeartMate II-group A or Jarvik 2000 Flowmaker-group B) was evaluated. On postoperative computed tomography scans, we reconstructed the implanted LVAD (semiautomatic segmentation), defined the target mitral orifice ([http://slicer.org '''3D Slicer'''] software), and built a coordinate system to quantify the coaxiality of the cannula with the mitral valve axis (angles φ and θ, expressed as percentage variation from the ideal value φ = θ = 0°).&lt;br /&gt;
RESULTS:&lt;br /&gt;
Group A presented significantly greater average percentage variation of the φ angle (significantly greater orientation of the intraventricular cannula toward the interventricular septum; 33.2% ± 32.1% versus 1.9% ± 0.9%, P = 0.001). Group A presented significantly greater average percentage variation of the θ angle (52.7% ± 23.6% versus 14.5% ± 6.3%, P = 0.013).&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
The device assessed in group B showed in the present series better average coaxiality with the mitral orifice. Such finding is related with its design (total intraventricular placement) and interaction with thoracic structures. The present method is being integrated in the development of LVAD virtual implantation tools and may help physicians in patient-specific selection among alternative devices.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Anser EMT: The First Open-Source Electromagnetic Tracking Platform for Image-Guided Interventions== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28357627 Int J Comput Assist Radiol Surg. 2017 Jun;12(6):1059-67. PMID: 28357627]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Jaeger HA, Franz AM, O'Donoghue K, Seitel A, Trauzettel F, Maier-Hein L, Cantillon-Murphy P.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  IHU Strasbourg, Strasbourg, France.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' PURPOSE:&lt;br /&gt;
Electromagnetic tracking is the gold standard for instrument tracking and navigation in the clinical setting without line of sight. Whilst clinical platforms exist for interventional bronchoscopy and neurosurgical navigation, the limited flexibility and high costs of electromagnetic tracking (EMT) systems for research investigations mitigate against a better understanding of the technology's characterization and limitations. The Anser project provides an open-source implementation for EMT with particular application to image-guided interventions.&lt;br /&gt;
METHODS:&lt;br /&gt;
This work provides implementation schematics for our previously reported EMT system which relies on low-cost acquisition and demodulation techniques using both National Instruments and Arduino hardware alongside MATLAB support code. The system performance is objectively compared to other commercial tracking platforms using the Hummel assessment protocol.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Positional accuracy of 1.14 mm and angular rotation accuracy of [Formula: see text] are reported. Like other EMT platforms, Anser is susceptible to tracking errors due to eddy current and ferromagnetic distortion. The system is compatible with commercially available EMT sensors as well as the Open Network Interface for image-guided therapy (OpenIGTLink) for easy communication with visualization and medical imaging toolkits such as MITK and [http://slicer.org '''3D Slicer'''].&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
By providing an open-source platform for research investigations, we believe that novel and collaborative approaches can overcome the limitations of current EMT technology.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==The Effects of Iterative Reconstruction and Kernel Selection on Quantitative Computed Tomography Measures of Lung Density== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28376262 Med Phys. 2017 Jun;44(6):2267-80. PMID: 28376262] &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Rodriguez A, Ranallo FN, Judy PF, Fain SB.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Department of Medical Physics, University of Wisconsin School of Medicine and Public Health, Madison, WI, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose: ''' To determine the effects of iterative reconstruction (IR) and high frequency kernels on quantitative computed tomography (qCT) density measures at reduced X-ray dose.&lt;br /&gt;
MATERIALS AND METHODS:&lt;br /&gt;
The COPDGene 2 Phantom (CTP 698, The Phantom Laboratory, Salem, NY) with four embedded lung mimicking foam densities (12lb, 20lb, and 4lb), as well as water, air, and acrylic reference inserts was imaged using a GE 64 slice CT750 HD scanner in helical mode with four current-time products ranging from 12-100 mAs. The raw acquired data was reconstructed using standard (STD - low frequency) and Bone (high frequency) kernels with filtered back projection (FBP), 100% ASIR, and Veo reconstruction algorithms. The reference density inserts were manually segmented using [http://slicer.org '''3D Slicer'''] and the mean, standard deviation, and histograms of the segmented regions were generated using  [http://fiji.sc/Fiji Fiji] for each reconstruction. Measurements of threshold values placed on the cumulative frequency distribution of voxels determined by these measured histograms at 5%, PD5phant , and 15%, PD15phant , (analogous to the relative area below -950 HU (RA950) and percent density 15 (PD15) in human lung emphysema quantification, respectively), were also performed.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The use of high-resolution kernels in conjunction with ASIR, and Veo did not significantly affect the mean Hounsfield units (HU) of each of the density standards (&amp;lt;4 HU deviation) and current-time products within the phantom when compared with the STD+FBP reconstruction conventionally used in clinical applications. A truncation of the scanner reported HU values at -1024 that shifts the mean towards more positive values was found to cause a systematic error in lower attenuating regions. Use of IR drove convergence toward the mean of measured histograms (~100-137% increase in the number measured voxels at the mean of the histogram) while the combination of Bone+ASIR preserved the standard deviation of HU values about the mean compared to STD+FBP, with the added effect of improved spatial resolution and accuracy in airway measures. PD5phant and PD15phant were most similar between the Bone+ASIR and STD+FBP in all regions except those affected by the -1024 truncation artifact.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
Extension of the scanner reportable HU values below the present limit of -1024 will mitigate discrepancies found in qCT lung densitometry in low-density regions. The density histogram became more sharply peaked and standard deviation was reduced for IR, directly effecting density thresholds, PD5phant and PD15phant, placed on the cumulative frequency distribution of each region in the phantom, which serve as analogs to RA950 and PD15 typically used in lung density quantitation. The combination of high frequency kernels (Bone) with ASIR mitigates this effect and preserves density measures derived from the image histogram. Moreover, previous studies have shown improved accuracy of qCT airway measures of wall thickness (WT) and wall area percentage (WA%) when using high frequency kernels in combination with ASIR to better represent airway walls. The results therefore suggest an IR approach for accurate assessment of airway and parenchymal density measures in the lungs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Infantile Cranial Fasciitis: Case-based Review and Operative Technique== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28451777 Childs Nerv Syst. 2017 Jun;33(6):899-908.  PMID: 28451777]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Flouty OE, Piscopo AJ, Holland MT, Abode-Iyamah K, Bruch L, Menezes AH, Dlouhy BJ.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Neurosurgery, University of Iowa Hospitals and Clinics, Iowa City, IA, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Cranial fasciitis (CF) is an uncommon benign primary lesion of the skull that typically affects the pediatric age group. Due to the rarity of CF, no prospective studies exist. Earliest description of this condition dates to 1980. The limited scientific and clinical literature regarding CF is dominated by case reports. For these reasons, questions pertaining to the true incidence, genetic risk factors, prognosis, and long-term outcome remain unanswered.&lt;br /&gt;
DISCUSSION:&lt;br /&gt;
Clinically, CF presents as a firm, painless, growing scalp mass that is typically not considered in the differential diagnosis. Preoperative pathognomonic signs and symptoms are absent, and imaging features are often nonspecific. Treatment is typically through complete surgical resection, at which time histopathological examination confirms the diagnosis of CF. Reconstruction of the skull defect in the child is critical. Autograft techniques help maintain a rigid construct that integrates with the native skull while preserving its continued ability to grow. Generally, a good outcome is observed with complete resection.&lt;br /&gt;
EXEMPLARY CASE:&lt;br /&gt;
We report a case of CF in an infant with emphasis on operative nuances and early follow-up results.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
CF is a rare fibroproliferative disease that has a poorly defined incidence and long-term follow-up. Due to its locally invasive nature and nonspecific presentation, CF is often difficult to differentiate from malignancies and infections. Complete surgical resection is the best approach for diagnosis and cure. Its occult clinical presentation often allows it to achieve considerable growth, leaving a sizeable skull defect following resection. Since CF presents in the pediatric population, allograft reconstruction is preferred over titanium mesh or other synthetic materials to allow osseous integration and continued uninterrupted skull growth.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Biomaterial Shell Bending with 3D-printed Templates in Vertical and Alveolar Ridge Augmentation: A Technical Note== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28215503 Oral Surg Oral Med Oral Pathol Oral Radiol. 2017 Jun;123(6):651-60. PMID: 28215503]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Draenert FG, Gebhart F, Mitov G, Neff A.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Oral &amp;amp; Maxillofacial Surgery, University of Marburg, Germany.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:'''&lt;br /&gt;
Alveolar ridge and vertical augmentations are challenging procedures in dental implantology. Even material blocks with an interconnecting porous system are never completely resorbed. Shell techniques combined with autologous bone chips are therefore the gold standard. Using biopolymers for these techniques is well documented. We applied three-dimensional (3-D) techniques to create an individualized bending model for the adjustment of a plane biopolymer membrane made of polylactide.&lt;br /&gt;
&amp;lt;BR&amp;gt;STUDY DESIGN:&lt;br /&gt;
Two cases with a vertical alveolar ridge defect in the maxilla were chosen. The cone beam computed tomography data were processed with a [http://slicer.org '''3D Slicer'''] and the Autodesk Meshmixer to generate data about the desired augmentation result. STL data were used to print a bending model. A 0.2-mm poly-D, L-lactic acid membrane (KLS Matin Inc., Tuttlingen, Germany) was bended accordingly and placed into the defect via a tunnel approach in both cases. A mesh graft of autologous bone chips and hydroxylapatite material was augmented beneath the shell, which was fixed with osteosynthesis screws.&lt;br /&gt;
&amp;lt;br&amp;gt;RESULTS:&lt;br /&gt;
The operative procedure was fast and without peri- or postoperative complications or complaints. The panoramic x-ray showed correct fitting of the material in the location. Bone quality at the time of implant placement was type II, resulting in good primary stability.&lt;br /&gt;
&amp;lt;br&amp;gt;CONCLUSIONS:&lt;br /&gt;
A custom-made 3-D model for bending confectioned biomaterial pieces is an appropriate method for individualized adjustment in shell techniques. The advantages over direct printing of the biomaterial shell and products on the market, such as the Xyoss shell (Reoss Inc., Germany), include cost-efficiency and avoidance of regulatory issues.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Application of the 3D Slicer Chest Imaging Platform Segmentation Algorithm for Large Lung Nodule Delineation== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28594880 PLoS One. 2017 Jun 8;12(6):e0178944.  PMID: 28594880] | [http://journals.plos.org/plosone/article?id=10.1371/journal.pone.0178944  PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Yip SSF, Parmar C, Blezek D, Estepar RSJ, Pieper S, Kim J, Aerts HJWL.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Radiation Oncology, Dana-Farber Cancer Institute, Brigham and Women's Hospital, Harvard Medical School, Boston, MA, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' PURPOSE:&lt;br /&gt;
Accurate segmentation of lung nodules is crucial in the development of imaging biomarkers for predicting malignancy of the nodules. Manual segmentation is time consuming and affected by inter-observer variability. We evaluated the robustness and accuracy of a publically available semiautomatic segmentation algorithm that is implemented in the 3D Slicer Chest Imaging Platform (CIP) and compared it with the performance of manual segmentation.&lt;br /&gt;
METHODS:&lt;br /&gt;
CT images of 354 manually segmented nodules were downloaded from the LIDC database. Four radiologists performed the manual segmentation and assessed various nodule characteristics. The semiautomatic CIP segmentation was initialized using the centroid of the manual segmentations, thereby generating four contours for each nodule. The robustness of both segmentation methods was assessed using the region of uncertainty (δ) and Dice similarity index (DSI). The robustness of the segmentation methods was compared using the Wilcoxon-signed rank test (pWilcoxon&amp;lt;0.05). The Dice similarity index (DSIAgree) between the manual and CIP segmentations was computed to estimate the accuracy of the semiautomatic contours.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The median computational time of the CIP segmentation was 10 s. The median CIP and manually segmented volumes were 477 ml and 309 ml, respectively. CIP segmentations were significantly more robust than manual segmentations (median δCIP = 14ml, median dsiCIP = 99% vs. median δmanual = 222ml, median dsimanual = 82%) with pWilcoxon~10-16. The agreement between CIP and manual segmentations had a median DSIAgree of 60%. While 13% (47/354) of the nodules did not require any manual adjustment, minor to substantial manual adjustments were needed for 87% (305/354) of the nodules. CIP segmentations were observed to perform poorly (median DSIAgree≈50%) for non-/sub-solid nodules with subtle appearances and poorly defined boundaries.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
Semi-automatic CIP segmentation can potentially reduce the physician workload for 13% of nodules owing to its computational efficiency and superior stability compared to manual segmentation. Although manual adjustment is needed for many cases, CIP segmentation provides a preliminary contour for physicians as a starting point.&lt;br /&gt;
&lt;br /&gt;
'''Funding:'''&lt;br /&gt;
*U01 CA190234/CA/NCI NIH HHS/United States&lt;br /&gt;
*U24 CA194354/CA/NCI NIH HHS/United States&lt;br /&gt;
*R01 HL116931/HL/NHLBI NIH HHS/United States&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Yip-PLoSOne2017.png|thumb|300px| Comparison of manual (left) and CIP-based (right) segmentation.&lt;br /&gt;
Yellow shaded region indicated the disagreement (or region of uncertainty) between contours performed by four radiologists (bottom left) or different CIP-based seed locations (bottom right). In this example, the region of uncertainty for manual segmentation was 3222 ml while the region was only 46 ml for the CIP-based segmentation. dsi&amp;lt;sub&amp;gt;CIP&amp;lt;/sub&amp;gt; was ≈ 100%, while dsi&amp;lt;sub&amp;gt;manual&amp;lt;/sub&amp;gt; was 88%. ]]]&lt;br /&gt;
|}&lt;br /&gt;
==3D Printed Pathological Sectioning Boxes to Facilitate Radiological-Pathological Correlation in Hepatectomy Cases== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/?term=28596154 J Clin Pathol. 2017 Jun 8.  PMID: 28596154]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Trout AT, Batie MR, Gupta A, Sheridan RM, Tiao GM, Towbin AJ.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Radiology, Cincinnati Children's Hospital Medical Center, Cincinnati, OH, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Radiogenomics promises to identify tumour imaging features indicative of genomic or proteomic aberrations that can be therapeutically targeted allowing precision personalised therapy. An accurate radiological-pathological correlation is critical to the process of radiogenomic characterisation of tumours. An accurate correlation, however, is difficult to achieve with current pathological sectioning techniques which result in sectioning in non-standard planes. The purpose of this work is to present a technique to standardise hepatic sectioning to facilitateradiological-pathological correlation. We describe a process in which three-dimensional (3D)-printed specimen boxes based on preoperative cross-sectional imaging (CT and MRI) can be used to facilitate pathological sectioning in standard planes immediately on hepatic resection enabling improved tumour mapping. We have applied this process in 13 patients undergoing hepatectomy and have observed close correlation between imaging and gross pathology in patients with both unifocal and multifocal tumours.&lt;br /&gt;
Following image review, a clinical engineering specialist (MRB) digitally isolates the liver from the cross-sectional imaging study using open-source software [http://www.slicer.org '''3D Slicer'''].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Retrospective Validation of a Computer-Assisted Quantification Model of Intracerebral Hemorrhage Volume on Accuracy, Precision, and Acquisition Time, Compared with Standard ABC/2 Manual Volume Calculation== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28596188 AJNR Am J Neuroradiol. 2017 Jun 8.  PMID: 28596188]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Xue W, Vegunta S, Zwart CM, Aguilar MI, Patel AC, Hoxworth JM, Demaerschalk BM, Mitchell JR.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Biomedical Informatics, Arizona State University, Scottsdale, AZ, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' BACKGROUND AND PURPOSE:&lt;br /&gt;
Intracerebral hemorrhage accounts for 6.5%-19.6% of all acute strokes. Initial intracerebral hemorrhage volume and expansion are both independent predictors of clinical outcomes and mortality. Therefore, a rapid, unbiased, and precise measurement of intracerebral hemorrhage volume is a key component of clinical management. The most commonly used method, ABC/2, results in overestimation. We developed an interactive segmentation program, SegTool, using a novel graphic processing unit, level set algorithm. Until now, the speed, bias, and precision of SegTool had not been validated.&lt;br /&gt;
MATERIALS AND METHODS:&lt;br /&gt;
In a single stroke academic center, 2 vascular neurologists and 2 neuroradiologists independently performed a test-retest experiment that involved repeat measurements of static, unchanging intracerebral hemorrhage volumes on CT from 76 intracerebral hemorrhage cases. Measurements were made with SegTool and ABC/2. True intracerebral hemorrhage volumes were estimated from a consensus of repeat manual tracings by 2 operators. These data allowed us to estimate measurement bias, precision, and speed. Computer-assisted measurements were made with an intensity-threshold algorithm in [http://www.slicer.org 3D Slicer].&lt;br /&gt;
RESULTS:&lt;br /&gt;
The measurements with SegTool were not significantly different from the true intracerebral hemorrhage volumes, while ABC/2 overestimated volume by 45%. The interrater measurement variability with SegTool was 50% less than that with ABC/2. The average measurement times for ABC/2 and SegTool were 35.7 and 44.6 seconds, respectively.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
SegTool appears to have attributes superior to ABC/2 in terms of accuracy and interrater reliability with a 9-second delay in measurement time (on average); hence, it could be useful in clinical trials and practice. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Theoretical Observation on Diagnosis Maneuver for Benign Paroxysmal Positional Vertigo== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28084876 Acta Otolaryngol. 2017 Jun;137(6):567-71. PMID: 28084876]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Yang XK, Zheng YY, Yang XG.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Neurology, Wenzhou People's Hospital, Wenzhou, Zhejiang, PR China.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' To make a comprehensive analysis with a variety of diagnostic maneuvers is conducive to the correct diagnosis and classification of BPPV.&lt;br /&gt;
OBJECTIVE:&lt;br /&gt;
Based on the standard spatial coordinate-based semicircular canal model for theoretical observation on diagnostic maneuvers for benign paroxysmal positional vertigo (BPPV) to analyze the meaning and key point of each step of the maneuver.&lt;br /&gt;
MATERIALS AND METHODS:&lt;br /&gt;
This study started by building a standard model of semicircular canal with space orientation by segmentation of the inner ear done with the [http://slicer.org '''3D Slicer'''] software based on MRI scans, then gives a demonstration and observation of BPPV diagnostic maneuvers by using the model.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The supine roll maneuver is mainly for diagnosis of lateral semicircular canal BPPV. The Modified Dix-Hallpike maneuver is more specific for the diagnosis of posterior semicircular canal BPPV. The side-lying bow maneuver designed here is theoretically suitable for diagnosis of anterior semicircular canal BPPV. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==High Expression of Glypican-1 Predicts Dissemination and Poor Prognosis in Glioblastomas== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28602885 World Neurosurg. 2017 Jun 5.  PMID: 28602885]&lt;br /&gt;
&lt;br /&gt;
'''Authors:'''Saito T, Sugiyama K, Hama S, Yamasaki F, Takayasu T, Nosaka R, Onishi S, Muragaki Y, Kawamata T, Kurisu K.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Neurosurgery, Hiroshima University, Graduate School of Biomedical and Health Science, Hiroshima, Japan.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' OBJECTIVE:&lt;br /&gt;
Glioblastoma (GBM) relapses locally or in a disseminated pattern, and is highly resistant to chemo-radiotherapy. Although dissemination is associated with poor prognosis for GBM patients, the clinico-pathological factors that promote dissemination have not been elucidated. Glypican-1 (GPC-1) is a heparin sulfate proteoglycan that is attached to the extracytoplasmic surface of the cell membrane and regulates cell motility. The aim of this study was to determine whether GPC-1 expression correlated with GBM dissemination and patient prognosis.&lt;br /&gt;
METHODS:&lt;br /&gt;
GPC-1 expression was examined by immunohistochemistry in 53 patients with GBM who received radiotherapy and temozolomide (TMZ) treatment. We assessed the relationship between dissemination and clinico-pathological factors, including GPC-1 expression. Additionally, we evaluated the relationship between GPC-1 expression and overall survival (OS) by uni- and multivariate analyses of a range of clinico-pathological factors, including age, Karnofsky Performance Status (KPS), extent of resection, and O6-methylguanine-DNA methyltransferase (MGMT) status.&lt;br /&gt;
To evaluate the extent of resection by 13 semi-automatic volumetry, we used [http://www.slicer.org '''3D Slicer'''], version 4.0 software.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Logistic regression analysis revealed that GPC-1 expression correlated with dissemination (P = 0.0116). Log-rank tests revealed that age, KPS, extent of resection, MGMT status, dissemination (P = 0.0008) and GPC-1 expression (P = 0.0011) were significantly correlated with OS. Multivariate analysis indicated that age, MGMT status, and GPC-1 expression were significantly correlated with OS. GPC-1 expression had the highest hazard ratio (2.392) among all regressors.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
GPC-1 expression significantly correlated with OS in GBM patients who received radiotherapy and TMZ treatment. GPC-1 expression can help predict the occurrence of dissemination and shorter OS in GBM patients.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Factors Affecting the Visual Outcome of Pituitary Adenoma Patients Treated with Endoscopic Transsphenoidal Surgery== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28583452 World Neurosurg. 2017 Jun 2.  PMID: 28583452]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Luomaranta T, Raappana A, Saarela V, Liinamaa MJ.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Ophthalmology, Oulu University Hospital, Oulu, Finland.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' OBJECTIVE:&lt;br /&gt;
To evaluate visual acuity (VA) and visual fields (VF) quantitatively before and after endoscopic transsphenoidal surgery (ETS), with special attention to prognostic factors such as the pituitary adenomas' (PAs') suprasellar extension (SSE), volume and the patients' age.&lt;br /&gt;
METHODS:&lt;br /&gt;
Medical records of 47 PA patients operated with ETS were evaluated. VA, VF and visual impairment score (VIS) were determined pre- (VISpre) and postoperatively (VISpost). The PA's SSE, volume and chiasmal contact and their correlation with visual function was pre- and postoperatively assessed. Each PA was preoperatively manually segmented from (typically from T1-weighted, contrast-enhanced, coronal) MRI planes of the patient using [http://www.slicer.org '''3D Slicer'''], a modelling software, which also reported the volume of the modeled PA.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The final cohort included 47 patients. VA improved in 54/76 eyes (71.0 %) after ETS and 69/76 eyes (90.7 %) gained normal VA. Postoperative VF recovery occurred in 32/37 (86.5 %) of the eyes. The mean VISchange was 12.0 (95% CI 7.7-16.3) and improved in all patients with tumor-related visual impairment (n=25). However, visual outcome was poorer when VISpre&amp;gt;40. When VISpre was 21-40, age linearly correlated with VIS improvement (p=0.03); younger patients had satisfactory and older poorer visual outcome. The mean SSE in patients with VF defects (n=20) was 16.6 mm (95% CI 13.3-19.9) and in patients with no VF defects (n=23) 6.6 mm (95% CI 4.9-8.3, p&amp;lt;0.001) and cut-off value for visual perturbations was 9.5 mm for SSE and 8.6 ml for PA volume (p&amp;lt;0.001 for both).&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
The visual outcome after ETS for PAs was excellent and significant complications rare. Severe preoperative visual impairment resulted poorer postoperative visual outcome. The SSE of PA was the most important predictor of visual outcome after ETS.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Clinical Outcomes of an Endoscopic Transclival and Transpetrosal Approach for Primary Skull Base Malignancies Involving the Clivus== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28574308 J Neurosurg. 2017 Jun 2:1-9.  PMID: 28574308]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Kim YH1, Jeon C, Se YB, Hong SD, Seol HJ, Lee JI, Park CK, Kim DG, Jung HW, Han DH, Nam DH, Kong DS.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Neurosurgery, Samsung Medical Center, Sungkyunkwan University School of Medicine, Seoul, Republic of Korea.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' OBJECTIVE The endoscopic endonasal approach for treating primary skull base malignancies involving the clivus is a formidable task. The authors hypothesized that tumor involvement of nearby critical anatomical structures creates hurdles to endoscopic gross-total resection (GTR). The aim of this study was to retrospectively review the clinical outcomes of patients who underwent an endoscopic endonasal approach to treat primary malignancies involving the clivus and to analyze prognostic factors for GTR. METHODS Between January 2009 and November 2015, 42 patients underwent the endoscopic endonasal approach for resection of primary skull base malignancies involving the clivus at 2 independent institutions. Clinical data; tumor locations within the clivus; and anatomical involvement of the cavernous or paraclival internal carotid artery, cisternal trigeminal nerve, hypoglossal canal, and dura mater were investigated to assess the extent of resection. Possible prognostic factors affecting GTR were also analyzed.  The preoperative tumor volume was measured radiographically with [http://www.slicer.org '''3D Slicer''']. RESULTS Of the 42 patients, 37 were diagnosed with chordomas and 5 were diagnosed with chondrosarcomas. The mean (± SD) preoperative tumor volume was 25.2 ± 30.5 cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; (range 0.8-166.7 cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;). GTR was achieved in 28 patients (66.7%) and subtotal resection in 14 patients (33.3%). All tumors were classified as upper (n = 17), middle (n = 17), or lower (n = 8) clival tumors based on clival involvement, and as central (24 [57.1%]) or paramedian (18 [42.9%]) based on laterality of the tumor. Univariate analysis identified the tumor laterality (OR 6.25, 95% CI 1.51-25.86; p = 0.011) as significantly predictive of GTR. In addition, the laterality of the tumor was found to be a statistically significant predictor in multivariate analysis (OR 41.16, 95% CI 1.12-1512.65; p = 0.043). CONCLUSIONS An endoscopic endonasal approach can provide favorable clinical and surgical outcomes. However, the tumor laterality should be considered as a potential obstacle to total removal.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==1.5 T Augmented Reality Navigated Interventional MRI: Paravertebral Sympathetic Plexus Injections== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28420598 Diagn Interv Radiol. 2017 May-Jun;23(3):227-32. PMID: 28420598]  |  [http://dirjournal.org/sayilar/62/buyuk/16323.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Marker DR, U Thainual P, Ungi T, Flammang AJ, Fichtinger G, Iordachita II, Carrino JA, Fritz J.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''   Russel H. Morgan Department of Radiology and Radiological Science, Johns Hopkins University School of Medicine, Baltimore, Maryland, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' The high contrast resolution and absent ionizing radiation of interventional magnetic resonance imaging (MRI) can be advantageous for paravertebral sympathetic nerve plexus injections. We assessed the feasibility and technical performance of MRI-guided paravertebral sympathetic injections utilizing augmented reality navigation and 1.5 T MRI scanner.&lt;br /&gt;
METHODS:&lt;br /&gt;
A total of 23 bilateral injections of the thoracic (8/23, 35%), lumbar (8/23, 35%) and hypogastric (7/23, 30%) paravertebral sympathetic plexus were prospectively planned in twelve human cadavers using a 1.5 Tesla (T) MRI scanner and augmented reality navigation system. MRI-conditional needles were used. Gadolinium-DTPA-enhanced saline was injected. Outcome variables included the number of control magnetic resonance images, target error of the needle tip, punctures of critical nontarget structures, distribution of the injected fluid, and procedure length. The isotropic 3D MR&lt;br /&gt;
images were transferred into the navigation module (PerkStation) of the [http://slicer.org '''3D Slicer'''] software for interactive 3D evaluation of the anatomy using its DICOM viewer function.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Augmented-reality navigated MRI guidance at 1.5 T provided detailed anatomical visualization for successful targeting of the paravertebral space, needle placement, and perineural paravertebral injections in 46 of 46 targets (100%). A mean of 2 images (range, 1-5 images) were required to control needle placement. Changes of the needle trajectory occurred in 9 of 46 targets (20%) and changes of needle advancement occurred in 6 of 46 targets (13%), which were statistically not related to spinal regions (P = 0.728 and P = 0.86, respectively) and cadaver sizes (P = 0.893 and P 0.859, respectively). The mean error of the needle tip was 3.9±1.7 mm. There were no punctures of critical nontarget structures. The mean procedure length was 33±12 min.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
1.5 T augmented reality-navigated interventional MRI can provide accurate imaging guidance for perineural injections of the thoracic, lumbar, and hypogastric sympathetic plexus.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Marker-DIR2017-fig.png|thumb|300px|  Procedural photograph demonstrating the operator’s augmented reality consisting of a&lt;br /&gt;
hybrid view of MR image and underlying cadaver. The hybrid view is being created by the reflection&lt;br /&gt;
of the target MR image (black arrow) from a semitransparent mirror (white arrow) into the line of&lt;br /&gt;
sight of the operator, where it merges with the underlying cadaver (gray arrow). Location, size, and&lt;br /&gt;
skin contour of MR image and cadaver are matched through co-registration by the image-overlay&lt;br /&gt;
navigation system.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==From Medical Imaging Data to 3D Printed Anatomical Models== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28562693 PLoS One. 2017 May 31;12(5):e0178540.   PMID: 28562693]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Bücking TM, Hill ER, Robertson JL, Maneas E, Plumb AA, Nikitichev DI.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Medical Physics and Biomedical Engineering, University College London, London, UK.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Anatomical models are important training and teaching tools in the clinical environment and are routinely used in medical imaging research. Advances in segmentation algorithms and increased availability of three-dimensional (3D) printers have made it possible to create cost-efficient patient-specific models without expert knowledge. We introduce a general workflow that can be used to convert volumetric medical imaging data (as generated by Computer Tomography (CT)) to 3D printed physical models. This process is broken up into three steps: image segmentation, mesh refinement and 3D printing. To lower the barrier to entry and provide the best options when aiming to 3D print an anatomical model from medical images, we provide an overview of relevant free and open-source image segmentation tools as well as 3D printing technologies. We demonstrate the utility of this streamlined workflow by creating models of ribs, liver, and lung using a Fused Deposition Modelling 3D printer.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Bucking-PLoSOne2017.jpg|thumb|300px| 3D printed anatomical models generated from medical imaging data using [http://www.slicer.org '''3D Slicer'''] and Seg3D. Part of the ribcage (a), the liver (b), and the right lung (c).]]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==3D Printing and Modelling of Customized Implants and Surgical Guides for Non-human Primates== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28512008 J Neurosci Methods. 2017 May 13;286:38-55. PMID: 28512008]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Chen X, Possel JK, Wacongne C, van Ham AF, Klink PC, Roelfsema PR.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Vision &amp;amp; Cognition, Netherlands Institute for Neuroscience, Meibergdreef 47, 1105 BA, Amsterdam, Netherlands.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Primate neurobiologists use chronically implanted devices such as pedestals for head stabilization and chambers to gain access to the brain and study its activity. Such implants are skull-mounted, and made from a hard, durable material, such as titanium.&lt;br /&gt;
NEW METHOD:&lt;br /&gt;
Here we present a low-cost method of creating customized 3D-printed cranial implants that are tailored to the anatomy of individual animals. We performed pre-surgical computed tomography (CT) and magnetic resonance (MR) scans to generate three-dimensional (3D) models of the skull and brain. We then used 3D modeling software to design implantable head posts, chambers, and a pedestal anchorage base, as well as craniotomy guides to aid us during surgery. Prototypes were made from plastic or resin, while implants were 3D-printed in titanium. The implants underwent post-processing and received a coating of osteocompatible material to promote bone integration.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Their tailored fit greatly facilitated surgical implantation, and eliminated the gap between the implant and the bone. To date, our implants remain robust and well-integrated with the skull.&lt;br /&gt;
COMPARISON WITH EXISTING METHOD(S):&lt;br /&gt;
Commercial-off-the-shelf solutions typically come with a uniform, flat base, preventing them from sitting flush against the curved surface of the skull. This leaves gaps for fluid and tissue ingress, increasing the risk of microbial infection and tissue inflammation, as well as implant loss.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
The use of 3D printing technology enabled us to quickly and affordably create unique, complex designs, avoiding the constraints levied by traditional production methods, thereby boosting experimental success and improving the wellbeing of the animals.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Accuracy of Mobile Biplane X-ray Imaging in Measuring 6-Degree-of-Freedom Patellofemoral Kinematics during Overground Gait== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28454908 J Biomech. 2017 May 24;57:152-6. PMID: 28454908]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Gray HA, Guan S, Pandy MG.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Mechanical Engineering, University of Melbourne, Victoria, Australia.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' The aim of this study was to evaluate the accuracy with which mobile biplane X-ray imaging can be used to measure patellofemoral kinematics of the intact knee during overground gait. A unique mobile X-ray imaging system tracked and recorded biplane fluoroscopic images of two human cadaver knees during simulated overground walking at a speed of 0.7m/s. Six-degree-of-freedom patellofemoral kinematics were calculated using a bone volumetric model-based method and the results then compared against those derived from a gold-standard bead-based method. RMS errors for patellar anterior translation, superior translation and lateral shift were 0.19mm, 0.34mm and 0.37mm, respectively. RMS errors for patellar flexion, lateral tilt and lateral rotation were 1.08°, 1.15° and 1.46°, respectively. The maximum RMS error for patellofemoral translations was approximately one-half that reported previously for tibiofemoral translations using the same mobile X-ray imaging system while the maximum RMS error for patellofemoral rotations was nearly two times larger than corresponding errors reported for tibiofemoral rotations. The lower accuracy in measuring patellofemoral rotational motion is likely explained by the symmetric nature of the patellar geometry and the smaller size of the patella compared to the tibia.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Quality of Radiomic Features in Glioblastoma Multiforme: Impact of Semi-Automated Tumor Segmentation Software==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
||&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28458602 Korean J Radiol. 2017 May-Jun;18(3):498-509. PMID: 28458602]  | [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5390619/pdf/kjr-18-498.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Lee M, Woo B, Kuo MD, Jamshidi N, Kim JH.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Center for Medical-IT Convergence Technology Research, Advanced Institutes of Convergence Technology, Seoul National University, Suwon, Korea.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' The purpose of this study was to evaluate the reliability and quality of radiomic features in glioblastoma multiforme (GBM) derived from tumor volumes obtained with semi-automated tumor segmentation software.&lt;br /&gt;
MATERIALS AND METHODS:&lt;br /&gt;
MR images of 45 GBM patients (29 males, 16 females) were downloaded from The Cancer Imaging Archive, in which post-contrast T1-weighted imaging and fluid-attenuated inversion recovery MR sequences were used. Two raters independently segmented the tumors using two semi-automated segmentation tools (TumorPrism3D and [http://www.slicer.org '''3D Slicer''']). Regions of interest corresponding to contrast-enhancing lesion, necrotic portions, and non-enhancing T2 high signal intensity component were segmented for each tumor. A total of 180 imaging features were extracted, and their quality was evaluated in terms of stability, normalized dynamic range (NDR), and redundancy, using intra-class correlation coefficients, cluster consensus, and Rand Statistic.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Our study results showed that most of the radiomic features in GBM were highly stable. Over 90% of 180 features showed good stability (intra-class correlation coefficient [ICC] ≥ 0.8), whereas only 7 features were of poor stability (ICC &amp;lt; 0.5). Most first order statistics and morphometric features showed moderate-to-high NDR (4 &amp;gt; NDR ≥1), while above 35% of the texture features showed poor NDR (&amp;lt; 1). Features were shown to cluster into only 5 groups, indicating that they were highly redundant.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
The use of semi-automated software tools provided sufficiently reliable tumor segmentation and feature stability; thus helping to overcome the inherent inter-rater and intra-rater variability of user intervention. However, certain aspects of feature quality, including NDR and redundancy, need to be assessed for determination of representative signature features before further development of radiomics.    &lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Lee-KJR2017-fig4.jpg|thumb|300px| Example of segmentation results with two semi-automated software tools.&lt;br /&gt;
Contrast-enhanced, necrotic, and non-enhancing T2 high signal intensity components are indicated by red, green, and blue color, respectively.&lt;br /&gt;
&lt;br /&gt;
A. Represents case in which similar segmentation results were produced. B. Represents case in which difference was observed in segmentation results. FLAIR = fluid-attenuated inversion recovery.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prognostic Implications of the Subcellular Localization of Survivin in Glioblastomas Treated with Radiotherapy Plus Concomitant and Adjuvant Temozolomide== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28430038 J Neurosurg. 2017 Apr 21:1-6. PMID: 28430038]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Saito T, Sugiyama K, Takeshima Y, Amatya VJ, Yamasaki F, Takayasu T, Nosaka R, Muragaki Y, Kawamata T, Kurisu K.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Neurosurgery, Tokyo Women's Medical University, Tokyo, Japan..&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' OBJECTIVE Currently, the standard treatment protocol for patients with newly diagnosed glioblastoma (GBM) includes surgery, radiotherapy, and concomitant and adjuvant temozolomide (TMZ). Various prognostic biomarkers for GBM have been described, including survivin expression. The aim of this study was to determine whether the subcellular localization of survivin correlates with GBM prognosis in patients who received the standard treatment protocol. METHODS The authors retrospectively examined the subcellular localization of survivin (nuclear, cytoplasmic, or both) using immunohistochemistry in 50 patients with GBM who had received the standard treatment. The relationship between survivin localization and overall survival (OS) was assessed with uni- and multivariate analyses including other clinicopathological factors (age, sex, Karnofsky Performance Scale [KPS] score, extent of resection, the use of second-line bevacizumab, O6-methylguanine-DNA methyltransferase [MGMT] status, and MIB-1 labeling index). RESULTS Log-rank tests revealed that patient age, KPS score, extent of resection, MGMT status, and survivin localization (p &amp;lt; 0.0001) significantly correlated with OS. Multivariate analysis indicated that patient age, MGMT status, and survivin localization significantly correlated with OS. Patients with nuclear localization of survivin had a significantly shorter OS than those in whom survivin expression was exclusively cytoplasmic (median OS 19.5 vs 31.7 months, respectively, HR 5.690, 95% CI 2.068-17.612, p = 0.0006). There was no significant difference in OS between patents whose survivin expression was exclusively nuclear or nuclear/cytoplasmic. CONCLUSIONS Nuclear expression of survivin is a factor for a poor prognosis in GBM patients. Subcellular localization of survivin can help to predict OS in GBM patients treated with the standard protocol.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==An Ovine Model of Cerebral Catheter Venography for Implantation of an Endovascular Neural Interface== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28452616 J Neurosurg. 2017 Apr 28:1-8.  PMID: 28452616]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Oxley TJ, Opie NL, Rind GS, Liyanage K, John SE, Ronayne S, McDonald AJ, Dornom A, Lovell TJH, Mitchell PJ, Bennett I, Bauquier S, Warne LN, Steward C, Grayden DB, Desmond P, Davis SM, O'Brien TJ, May CN.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Vascular Bionics Laboratory, Department of Medicine, The Royal Melbourne Hospital, Melbourne, Australia.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Neural interface technology may enable the development of novel therapies to treat neurological conditions, including motor prostheses for spinal cord injury. Intracranial neural interfaces currently require a craniotomy to achieve implantation and may result in chronic tissue inflammation. Novel approaches are required that achieve less invasive implantation methods while maintaining high spatial resolution. An endovascular stent electrode array avoids direct brain trauma and is able to record electrocorticography in local cortical tissue from within the venous vasculature. The motor area in sheep runs in a parasagittal plane immediately adjacent to the superior sagittal sinus (SSS). The authors aimed to develop a sheep model of cerebral venography that would enable validation of an endovascular neural interface. METHODS Cerebral catheter venography was performed in 39 consecutive sheep. Contrast-enhanced MRI of the brain was performed on 13 animals. Multiple telescoping coaxial catheter systems were assessed to determine the largest wide-bore delivery catheter that could be delivered into the anterior SSS. Measurements of SSS diameter and distance from the motor area were taken. The location of the motor area was determined in relation to lateral and superior projections of digital subtraction venography images and confirmed on MRI. RESULTS The venous pathway from the common jugular vein (7.4 mm) to the anterior SSS (1.2 mm) was technically challenging to selectively catheterize. The SSS coursed immediately adjacent to the motor cortex (&amp;lt; 1 mm) for a length of 40 mm, or the anterior half of the SSS. Attempted access with 5-Fr and 6-Fr delivery catheters was associated with longer procedure times and higher complication rates. A 4-Fr catheter (internal lumen diameter 1.1 mm) was successful in accessing the SSS in 100% of cases with no associated complications. Complications included procedure-related venous dissection in two major areas: the torcular herophili, and the anterior formation of the SSS. The bifurcation of the cruciate sulcal veins with the SSS was a reliable predictor of the commencement of the motor area. CONCLUSIONS The ovine model for cerebral catheter venography has generalizability to the human cerebral venous system in relation to motor cortex location. This novel model may facilitate the development of the novel field of endovascular neural interfaces that may include preclinical investigations for cortical recording applications such as paralysis and epilepsy, as well as other potential applications in neuromodulation.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Effectiveness of Endoscopic Surgery for Supratentorial Hypertensive Intracerebral Hemorrhage: A Comparison with Craniotomy==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
||&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28387618 J Neurosurg. 2017 Apr 7:1-7. PMID: 28387618]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Xu X, Chen X, Li F, Zheng X, Wang Q, Sun G, Zhang J, Xu B.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Neurosurgery, Chinese PLA General Hospital, Beijing, China.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' OBJECTIVE The goal of this study was to investigate the effectiveness and practicality of endoscopic surgery for treatment of supratentorial hypertensive intracerebral hemorrhage (HICH) compared with traditional craniotomy. METHODS The authors retrospectively analyzed 151 consecutive patients who were operated on for treatment of supratentorial HICH between January 2009 and June 2014 in the Department of Neurosurgery at Chinese PLA General Hospital. Patients were separated into an endoscopy group (82 cases) and a craniotomy group (69 cases), depending on the surgery they received. The hematoma evacuation rate was calculated using [http://www.slicer.org '''3D Slicer'''] software to measure the hematoma volume. Comparisons of operative time, intraoperative blood loss, Glasgow Coma Scale score 1 week after surgery, hospitalization time, and modified Rankin Scale score 6 months after surgery were also made between these groups. RESULTS There was no statistically significant difference in preoperative data between the endoscopy group and the craniotomy group (p &amp;gt; 0.05). The hematoma evacuation rate was 90.5% ± 6.5% in the endoscopy group and 82.3% ± 8.6% in the craniotomy group, which was statistically significant (p &amp;lt; 0.01). The operative time was 1.6 ± 0.7 hours in the endoscopy group and 5.2 ± 1.8 hours in the craniotomy group (p &amp;lt; 0.01). The intraoperative blood loss was 91.4 ± 93.1 ml in the endoscopy group and 605.6 ± 602.3 ml in the craniotomy group (p &amp;lt; 0.01). The 1-week postoperative Glasgow Coma Scale score was 11.5 ± 2.9 in the endoscopy group and 8.3 ± 3.8 in the craniotomy group (p &amp;lt; 0.01). The hospital stay was 11.6 ± 6.9 days in the endoscopy group and 13.2 ± 7.9 days in the craniotomy group (p &amp;lt; 0.05). The mean modified Rankin Scale score 6 months after surgery was 3.2 ± 1.5 in the endoscopy group and 4.1 ± 1.9 in the craniotomy group (p &amp;lt; 0.01). Patients had better recovery in the endoscopy group than in the craniotomy group. Data are expressed as the mean ± SD. CONCLUSIONS Compared with traditional craniotomy, endoscopic surgery was more effective, less invasive, and may have improved the prognoses of patients with supratentorial HICH. Endoscopic surgery is a promising method for treatment of supratentorial HICH. With the development of endoscope technology, endoscopic evacuation will become more widely used in the clinic. Prospective randomized controlled trials are needed.   &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Asymmetry in Dentition and Shape of Pharyngeal Arches in the Clonal Fish Chrosomus Eos-neogaeus: Phenotypic Plasticity and Developmental Instability== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28380079 PLoS One. 2017 Apr 5;12(4):e0174235. PMID: 28380079]   |  [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5381790/pdf/pone.0174235.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Leung C, Duclos KK, Grünbaum T, Cloutier R, Angers B.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''   Department of Biological Sciences, Université de Montréal, Montreal, Quebec, Canada.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose: ''' The effect of the environment may result in different developmental outcomes. Extrinsic signals can modify developmental pathways and result in alternative phenotypes (phenotypic plasticity). The environment can also be interpreted as a stressor and increase developmental instability (developmental noise). Directional and fluctuating asymmetry provide a conceptual background to discriminate between these results. This study aims at assessing whether variation in dentition and shape of pharyngeal arches of the clonal fish Chrosomus eos-neogaeus results from developmental instability or environmentally induced changes. A total of 262 specimens of the Chrosomus eos-neogaeus complex from 12 natural sites were analysed. X-ray microcomputed tomography (X-ray micro-CT) was used to visualize the pharyngeal arches in situ with high resolution. Variation in the number of pharyngeal teeth is high in hybrids in contrast to the relative stability observed in both parental species. The basal dental formula is symmetric while the most frequent alternative dental formula is asymmetric. Within one lineage, large variation in the proportion of individuals bearing basal or alternative dental formulae was observed among sites in the absence of genetic difference. Both dentition and arch shape of this hybrid lineage were explained significantly by environmental differences. Only individuals bearing asymmetric dental formula displayed fluctuating asymmetry as well as directional left-right asymmetry for the arches. The hybrids appeared sensitive to environmental signals and intraspecific variation on pharyngeal teeth was not random but reflects phenotypic plasticity. Altogether, these results support the influence of the environment as a trigger for an alternative developmental pathway resulting in left-right asymmetry in dentition and shape of pharyngeal arches.&lt;br /&gt;
&lt;br /&gt;
Dicom files were subsequently loaded within the open-source software [http://slicer.org '''3D Slicer'''] (Version 4.5 ). 3D models were rendered from dicom files using the editor module within [http://slicer.org '''3D Slicer'''] and the thresholding algorithm.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Scanning Laser Optical Tomography for in Toto Imaging of the Murine Cochlea.== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28388662 PLoS One. 2017 Apr 7;12(4):e0175431. PMID: 28388662]   |  [http://journals.plos.org/plosone/article/file?id=10.1371/journal.pone.0175431&amp;amp;type=printable PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Nolte L, Tinne N, Schulze J, Heinemann D, Antonopoulos GC, Meyer H, Nothwang HG, Lenarz T, Heisterkamp A, Warnecke A, Ripken T.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  &lt;br /&gt;
Industrial and Biomedical Optics Department, Laser Zentrum Hannover e.V., Hannover, Germany.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:'''  The mammalian cochlea is a complex macroscopic structure due to its helical shape and the microscopic arrangements of the individual layers of cells. To improve the outcomes of hearing restoration in deaf patients, it is important to understand the anatomic structure and composition of the cochlea ex vivo. Hitherto, only one histological technique based on confocal laser scanning microscopy and optical clearing has been developed for in toto optical imaging of the murine cochlea. However, with a growing size of the specimen, e.g., human cochlea, this technique reaches its limitations. Here, we demonstrate scanning laser optical tomography (SLOT) as a valuable imaging technique to visualize the murine cochlea in toto without any physical slicing. This technique can also be applied in larger specimens up to cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; such as the human cochlea. Furthermore, immunolabeling allows visualization of inner hair cells (otoferlin) or spiral ganglion cells (neurofilament) within the whole cochlea. After image reconstruction, the 3D dataset was used for digital segmentation of the labeled region. As a result, quantitative analysis of position, length and curvature of the labeled region was possible. This is of high interest in order to understand the interaction of cochlear implants (CI) and cells in more detail. &lt;br /&gt;
&lt;br /&gt;
To enable correct overlay of the two excitation channels, the general registration algorithm (BRAINS) from the open source software [http://slicer.org '''3D Slicer'''] was used.                          &lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Nolte-PLoSOne2017.PNG|thumb|300px|  Maximum intensity projections (MIP) were performed on the reconstructed data of samples 1 and 2.&lt;br /&gt;
(A) MIP of sample 1. The labeled neurofilament appears as a helical shape inside the cochlea. (B) Higher magnification of the highlighted area in A. The dendrites of the spiral ganglions are visible. (C) Negative control (sample 2). Only autofluorescence and nonspecific binding shows the outer shape of the cochlea. (D) Higher magnification of the highlighted area in C.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Patient Education for Endoscopic Sinus Surgery: Preliminary Experience Using 3D-Printed Clinical Imaging Data== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28387702 J Funct Biomater. 2017 Apr 7;8(2). PMID: 28387702]   |  [http://www.mdpi.com/2079-4983/8/2/13/htm PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Sander IM, Liepert TT, Doney EL, Leevy WM, Liepert DR.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Department of Biological Sciences, University of Notre Dame, South Bend, IN, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Within the Ear, Nose, and Throat (ENT) medical space, a relatively small fraction of patients follow through with elective surgeries to fix ailments such as a deviated septum or occluded sinus passage. Patient understanding of their diagnosis and treatment plan is integral to compliance, which ultimately yields improved medical outcomes and better quality of life. Here we report the usage of advanced, polyjet 3D printing methods to develop a multimaterial replica of human nasal sinus anatomy, derived from clinical X-ray computed tomography (CT) data, to be used as an educational aid during physician consultation. The final patient education model was developed over several iterations to optimize material properties, anatomical accuracy and overall display. A two-arm, single-center, randomized, prospective study was then performed in which 50 ENT surgical candidates (and an associated control group, n = 50) were given an explanation of their anatomy, disease state, and treatment options using the education model as an aid. Statistically significant improvements in patient ratings of their physician's explanation of their treatment options (p = 0.020), self-rated anatomical understanding (p = 0.043), self-rated understanding of disease state (p = 0.016), and effectiveness of the visualization (p = 0.007) were noted from the population that viewed the 3D education model, indicating it is an effective tool which ENT surgeons may use to educate and interact with patients. &lt;br /&gt;
&lt;br /&gt;
All volumes outside of the volume of interest were masked at a value of −1000 Hounsfield Units (HU). The data was exported in Nifti (.nii) format and opened in [http://slicer.org '''3D Slicer'''].&lt;br /&gt;
A 3D surface map for bone was generated using the “Grayscale Modelmaker” tool within [http://slicer.org '''3D Slicer'''] at a threshold of 300 HU. A separate 3D surface map was generated for soft tissue using the same tool and process with a threshold level of −300 HU. Each surface map was exported from 3DSlicer as a .stl file.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Sander-JFB2017.png|thumb|300px|  Nasal cavity model generation and fabrication. (A) 3D surface maps generated from CT scan slices of patient nasal cavity used to generate a 3D-printed model; (B) 3D-printed, sliced model, printed with two distinct polymers to represent hard and soft tissues; (C) Single coronal model slice with specific anatomical details highlighted.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Comprehensive Evaluation of Ten Deformable Image Registration Algorithms for Contour Propagation between CT and Cone-beam CT Images in Adaptive Head &amp;amp; Neck Radiotherapy== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28414799 PLoS One. 2017 Apr 17;12(4):e0175906. PMID: 28414799]   |  [http://journals.plos.org/plosone/article/file?id=10.1371/journal.pone.0175906&amp;amp;type=printable PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Li X, Zhang Y, Shi Y, Wu S, Xiao Y, Gu X, Zhen X, Zhou L.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  &lt;br /&gt;
Department of Biomedical Engineering, Southern Medical University, Guangzhou, Guangdong, China.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:'''Deformable image registration (DIR) is a critical technic in adaptive radiotherapy (ART) for propagating contours between planning computerized tomography (CT) images and treatment CT/cone-beam CT (CBCT) images to account for organ deformation for treatment re-planning. To validate the ability and accuracy of DIR algorithms in organ at risk (OAR) contour mapping, ten intensity-based DIR strategies, which were classified into four categories-optical flow-based, demons-based, level-set-based and spline-based-were tested on planning CT and fractional CBCT images acquired from twenty-one head &amp;amp; neck (H&amp;amp;N) cancer patients who underwent 6~7-week intensity-modulated radiation therapy (IMRT). Three similarity metrics, i.e., the Dice similarity coefficient (DSC), the percentage error (PE) and the Hausdorff distance (HD), were employed to measure the agreement between the propagated contours and the physician-delineated ground truths of four OARs, including the vertebra (VTB), the vertebral foramen (VF), the parotid gland (PG) and the submandibular gland (SMG). It was found that the evaluated DIRs in this work did not necessarily outperform rigid registration. DIR performed better for bony structures than soft-tissue organs, and the DIR performance tended to vary for different ROIs with different degrees of deformation as the treatment proceeded. Generally, the optical flow-based DIR performed best, while the demons-based DIR usually ranked last except for a modified demons-based DISC used for CT-CBCT DIR. These experimental results suggest that the choice of a specific DIR algorithm depends on the image modality, anatomic site, magnitude of deformation and application. Therefore, careful examinations and modifications are required before accepting the auto-propagated contours, especially for automatic re-planning ART systems.&lt;br /&gt;
&lt;br /&gt;
Before performing the rigid and deformable registration, all the images were pre-processed using an open source software [http://slicer.org '''3D Slicer''']. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Exercise Decreases Marrow Adipose Tissue Through ß-Oxidation in Obese Running Mice== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28436105 J Bone Miner Res. 2017 Apr 24. PMID: 28436105]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Styner M, Pagnotti GM, McGrath C, Wu X, Sen B, Uzer G, Xie Z, Zong X, Styner MA, Rubin CT, Rubin J.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Medicine, Division of Endocrinology and Metabolism, University of North Carolina, Chapel Hill, NC, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' The relationship between marrow adipose tissue (MAT) and bone health is poorly understood. We used running exercise to ask whether obesity-associated MAT can be attenuated via exercise and whether this correlates with gains in bone quantity and quality. C57BL/6 mice were divided into diet-induced obesity (DIO, n = 14) versus low-fat diet (LFD, n = 14). After 3 months, 16-week-old mice were allocated to an exercise intervention (LFD-E, DIO-E) or a control group (LFD, DIO) for 6 weeks (4 groups, n = 7/group). Marrow adipocyte area was 44% higher with obesity (p &amp;lt; 0.0001) and after exercise 33% lower in LFD (p &amp;lt; 0.0001) and 39% lower in DIO (p &amp;lt; 0.0001). In LFD, exercise did not affect adipocyte number; however, in DIO, the adipocyte number was 56% lower (p &amp;lt; 0.0001). MAT was 44% higher in DIO measured by osmium-μCT, whereas exercise associated with reduced MAT (-23% in LFD, -48% in DIO, p &amp;lt; 0.05). MAT was additionally quantified by 9.4TMRI, and correlated with osmium-µCT (r = 0.645; p &amp;lt; 0.01). Consistent with higher lipid beta oxidation, perilipin 3 (PLIN3) rose with exercise in tibial mRNA (+92% in LFD, +60% in DIO, p &amp;lt; 0.05). Tibial µCT-derived trabecular bone volume (BV/TV) was not influenced by DIO but responded to exercise with an increase of 19% (p &amp;lt; 0.001). DIO was associated with higher cortical periosteal and endosteal volumes of 15% (p = 0.012) and 35% (p &amp;lt; 0.01), respectively, but Ct.Ar/Tt.Ar was lower by 2.4% (p &amp;lt; 0.05). There was a trend for higher stiffness (N/m) in DIO, and exercise augmented this further. In conclusion, obesity associated with increases in marrow lipid-measured by osmium-μCT and MRI-and partially due to an increase in adipocyte size, suggesting increased lipid uptake into preexisting adipocytes. Exercise associated with smaller adipocytes and less bone lipid, likely invoking increased ß-oxidation and basal lipolysis as evidenced by higher levels of PLIN3. © 2017 American Society for Bone and Mineral Research.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Interactive Outlining of Pancreatic Cancer Liver Metastases in Ultrasound Images== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28420871 Sci Rep. 2017 Apr 18;7(1):892. PMID: 28420871]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Egger J, Schmalstieg D, Chen X, Zoller WG, Hann A.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Institute for Computer Graphics and Vision, Graz University of Technology, Graz, Austria. &lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Ultrasound (US) is the most commonly used liver imaging modality worldwide. Due to its low cost, it is increasingly used in the follow-up of cancer patients with metastases localized in the liver. In this contribution, we present the results of an interactive segmentation approach for liver metastases in US acquisitions. A (semi-) automatic segmentation is still very challenging because of the low image quality and the low contrast between the metastasis and the surrounding liver tissue. Thus, the state of the art in clinical practice is still manual measurement and outlining of the metastases in the US images. We tackle the problem by providing an interactive segmentation approach providing real-time feedback of the segmentation results. The approach has been evaluated with typical US acquisitions from the clinical routine, and the datasets consisted of pancreatic cancer metastases. Even for difficult cases, satisfying segmentations results could be achieved because of the interactive real-time behavior of the approach. In total, 40 clinical images have been evaluated with our method by comparing the results against manual ground truth segmentations. This evaluation yielded to an average Dice Score of 85% and an average Hausdorff Distance of 13 pixels.&lt;br /&gt;
We tested our data with the GrowCut implementation that is available in [http://slicer.org '''3D Slicer'''].&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Egger-SciRep2017.png|thumb|300px|  GrowCut segmentation results for the two metastases from Fig. 9. The left images show the manual&lt;br /&gt;
initialization of GrowCut: the metastases were initialized with green, and the backgrounds were initialized with&lt;br /&gt;
yellow. The images in the middle show the segmentation results of GrowCut (green). The right images show a&lt;br /&gt;
closer view of the segmentation results (green) with a lower opacity.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==The Evolution of Cost-efficiency in Neural Networks during Recovery from Traumatic Brain Injury== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28422992 PLoS One. 2017 Apr 19;12(4):e0170541. PMID: 28422992]  | [http://journals.plos.org/plosone/article/file?id=10.1371/journal.pone.0170541&amp;amp;type=printable PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Roy A, Bernier RA, Wang J, Benson M, French JJ Jr, Good DC, Hillary FG.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  &lt;br /&gt;
Department of Psychology, The Pennsylvania State University, University Park, Pennsylvania, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' A somewhat perplexing finding in the systems neuroscience has been the observation that physical injury to neural systems may result in enhanced functional connectivity (i.e., hyperconnectivity) relative to the typical network response. The consequences of local or global enhancement of functional connectivity remain uncertain and this is particularly true for the overall metabolic cost of the network. We examine the hyperconnectivity hypothesis in a sample of 14 individuals with TBI with data collected at approximately 3, 6, and 12 months following moderate and severe TBI. As anticipated, individuals with TBI showed increased network strength and cost early after injury, but by one-year post injury hyperconnectivity was more circumscribed to frontal DMN and temporal-parietal attentional control regions. Cost in these subregions was a significant predictor of cognitive performance. Cost-efficiency analysis in the Power 264 data parcellation suggested that at 6 months post injury the network requires higher cost connections to achieve high efficiency as compared to the network 12 months post injury. These results demonstrate that networks self-organize to re-establish connectivity while balancing cost-efficiency trade-offs.&lt;br /&gt;
To determine the influence of global pathology on brain networks, we created a 3-dimensional (3D) lesion model for each subject using [http://slicer.org '''3D Slicer'''] that utilizes information from multiple MR sequences, such as SWI, FLAIR, and T1 MPRAGE.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Roy-PLoSOne2017.PNG|thumb|300px|fMRI data preprocessing steps and the analytic pipeline.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Three‐Dimensional Printing: An Aid to Epidural Access for Neuromodulation== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28425137 Neuromodulation. 2017 Apr 20 PMID: 28425137]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Taverner MG, Monagle JP.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  &lt;br /&gt;
Frankston Pain Management, Victoria, Australia.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' OBJECTIVE:&lt;br /&gt;
The case report details to use of three-dimensional (3D) printing as an aid to neuromodulation.&lt;br /&gt;
METHODS:&lt;br /&gt;
A patient is described in whom previous attempts at spinal neuromodulation had failed due to lack of epidural or intrathecal access, and the use of a 3D printed model allowed for improved planning and ultimately, success. Thin-slices (0.625 mm)&lt;br /&gt;
of a high-resolution CT scan of the patient's thoracolumbar spine and iliac crests was used to create a CAD model on [http://slicer.org '''3D Slicer'''] software (Surgical Planning Laboratory, Boston, MA&lt;br /&gt;
RESULTS:&lt;br /&gt;
Successful spinal cord stimulation was achieved with the plan developed by access to a 3D model of the patient's spine.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
Neuromodulation techniques can provide the optimal analgesic techniques for individual patients. At times these can fail due to lack of access to the site for intervention, in this case epidural access. 3D printing may provide additional information to improve the likelihood of access when anatomy is distorted and standard approaches prove difficult.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Biomechanical Flow Amplification Arising From the Variable Deformation of the Subglottic Mucosa== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28433346 J Voice. 2017 Apr 19. PMID: 28433346]  | [http://www.jvoice.org/article/S0892-1997(17)30036-X/pdf  PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Goodyer E, Müller F, Hess M, Kandan K, Farukh F.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  &lt;br /&gt;
De Montfort University, Bio-Informatics Research Group, Leicester, UK.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' OBJECTIVE:&lt;br /&gt;
This study mapped the variation in tissue elasticity of the subglottic mucosa, applied these data to provide initial models of the likely deformation of the mucosa during the myoelastic cycle, and hypothesized as to the impact on the process of phonation.&lt;br /&gt;
STUDY DESIGN:&lt;br /&gt;
Six donor human larynges were dissected along the sagittal plane to expose the vocal folds and subglottic mucosa. A linear skin rheometer was used to apply a controlled shear force, and the resultant displacement was measured. These data provided a measure of the stress/strain characteristics of the tissue at each anatomic point. A series of measurements were taken at 2-mm interval inferior of the vocal folds, and the change in elasticity was determined. CT images of the excised larynges have been used to create 3D reconstructions with the help of an open-source medical imaging software, [http://slicer.org '''3D Slicer'''].&lt;br /&gt;
RESULTS:&lt;br /&gt;
It was found that the elasticity of the mucosa in the subglottic region increased linearly with distance from the vocal folds in all 12 samples. A simple deformation model indicated that under low pressure conditions the subglottic mucosa will deform to form a cone, which could result in a higher velocity, thus amplifying the low pressure effect resulting from the Venturi principle, and could assist in maintaining laminar flow.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
This study indicated that the deformation of the subglottic mucosa could play a significant role in the delivery of a low pressure airflow over the vocal folds. A large scale study will now be undertaken to secure more data to evaluate this hypothesis, and using computational fluid dynamics based on actual three-dimensional structure obtained from computed tomography scans the aerodynamics of this region will be investigated.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Goodyer-JVoice2017.png|thumb|300px|  Three-dimensional (3D) model of a larynx constructed&lt;br /&gt;
from a computed tomography scan images (A) showing the full 3D&lt;br /&gt;
model. (B) and (C) Show the views of larynx looking down the arrow&lt;br /&gt;
as indicated by the letter P and Q, respectively. CT images of&lt;br /&gt;
the excised larynges have been used to create 3D reconstructions&lt;br /&gt;
with the help of an open-source medical imaging software,&lt;br /&gt;
[http://slicer.org/ '''3D Slicer'''].]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==HTC Vive MeVisLab Integration via OpenVR for Medical Applications==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
||&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28323840 PLoS One. 2017 Mar 21;12(3):e0173972. PMID: 28323840]  | [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5360258/pdf/pone.0173972.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Egger J, Gall M, Wallner J, Boechat P, Hann A, Li X, Chen X, Schmalstieg D.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Institute of Computer Graphics and Vision, Graz University of Technology, Graz, Austria.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:'''Virtual Reality, an immersive technology that replicates an environment via computer-simulated reality, gets a lot of attention in the entertainment industry. However, VR has also great potential in other areas, like the medical domain, Examples are intervention planning, training and simulation. This is especially of use in medical operations, where an aesthetic outcome is important, like for facial surgeries. Alas, importing medical data into Virtual Reality devices is not necessarily trivial, in particular, when a direct connection to a proprietary application is desired. Moreover, most researcher do not build their medical applications from scratch, but rather leverage platforms like MeVisLab, MITK, OsiriX or [http://www.slicer.org '''3D Slicer''']. These platforms have in common that they use libraries like ITK and VTK, and provide a convenient graphical interface. However, ITK and VTK do not support Virtual Reality directly. In this study, the usage of a Virtual Reality device for medical data under the MeVisLab platform is presented. The OpenVR library is integrated into the MeVisLab platform, allowing a direct and uncomplicated usage of the head mounted display HTC Vive inside the MeVisLab platform. Medical data coming from other MeVisLab modules can directly be connected per drag-and-drop to the Virtual Reality module, rendering the data inside the HTC Vive for immersive virtual reality inspection.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Revealing Cancer Subtypes with Higher-Order Correlations Applied to Imaging and Omics Data== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28359308 BMC Med Genomics. 2017 Mar 31;10(1):20.  PMID: 28359308] | [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5374737/pdf/12920_2017_Article_256.pdf  PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Graim K, Liu TT, Achrol AS, Paull EO, Newton Y, Chang SD, Harsh GR, Cordero SP, Rubin DL, Stuart JM.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Biomedical Engineering, University of California, Santa Cruz, CA, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Patient stratification to identify subtypes with different disease manifestations, severity, and expected survival time is a critical task in cancer diagnosis and treatment. While stratification approaches using various biomarkers (including high-throughput gene expression measurements) for patient-to-patient comparisons have been successful in elucidating previously unseen subtypes, there remains an untapped potential of incorporating various genotypic and phenotypic data to discover novel or improved groupings.&lt;br /&gt;
METHODS:&lt;br /&gt;
Here, we present HOCUS, a unified analytical framework for patient stratification that uses a community detection technique to extract subtypes out of sparse patient measurements. HOCUS constructs a patient-to-patient network from similarities in the data and iteratively groups and reconstructs the network into higher order clusters. We investigate the merits of using higher-order correlations to cluster samples of cancer patients in terms of their associations with survival outcomes.&lt;br /&gt;
RESULTS:&lt;br /&gt;
In an initial test of the method, the approach identifies cancer subtypes in mutation data of glioblastoma, ovarian, breast, prostate, and bladder cancers. In several cases, HOCUS provides an improvement over using the molecular features directly to compare samples. Application of HOCUS to glioblastoma images reveals a size and location classification of tumors that improves over human expert-based stratification.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
Subtypes based on higher order features can reveal comparable or distinct groupings. The distinct solutions can provide biologically- and treatment-relevant solutions that are just as significant as solutions based on the original data.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Graim-BMCMedGenomics2017-fig5.jpg|thumb|300px| HOCUS of GBM MR Images. a. P-values of survival separation (log-rank test) for each of the orders of clustering across a range of k clusters. b. Kaplan-Meier plot of the third-order HOCUS clusters. c. Images of tumors within each cluster projected onto the MNI brain atlas. Showing sagittal, coronal, axial views. Brightness of color indicates the number of patients with tumor at a given location. Generated using [http://slicer.org '''3D Slicer''']. d. Violin plot showing tumor volumes within each third-order cluster. e. Molecular (gene expression based) subtypes within the clusters.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Three-Dimensional Volume Rendering of Pelvic Models and Paraurethral Masses Based on MRI Cross-Sectional Images== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28352953 Int Urogynecol J. 2017 Mar 28. PMID: 28352953]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Doumouchtsis SK, Nazarian DA, Gauthaman N, Durnea CM, Munneke G.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Obstetrics &amp;amp; Gynaecology, Epsom and St. Helier University Hospital NHS Trust, Epsom, UK. &lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' AIMS:&lt;br /&gt;
Our aim was to assess the feasibility of rendering 3D pelvic models using magnetic resonance imaging (MRI) scans of patients with vaginal, urethral and paraurethral lesions and obtain additional information previously unavailable through 2D imaging modalities.&lt;br /&gt;
METHODS:&lt;br /&gt;
A purposive sample of five female patients 26-40 years old undergoing investigations for vaginal or paraurethral mass was obtained in a tertiary teaching hospital. 3D volume renderings of the bladder, urethra and paraurethral masses were constructed using [http://slicer.org '''3D Slicer'''] v.3.4.0. Spatial dimensions were determined and compared with findings from clinical, MRI, surgical and histopathological reports. The quality of information regarding size and location of paraurethral masses obtained from 3D models was compared with information from cross-sectional MRI and review of clinical, surgical and histopathological findings.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The analysis of rendered 3D models yielded detailed anatomical dimensions and provided information that was in agreement and in higher detail than information based on clinical examination, cross-sectional 2D MRI analysis and histopathological reports. High-quality pelvic 3D models were rendered with the characteristics and resolution to allow identification and detailed viewing of the spatial relationship between anatomical structures.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
To our knowledge, this is the first preliminary study to evaluate the role of MRI-based 3D pelvic models for investigating paraurethral masses. This is a feasible technique and may prove a useful addition to conventional 2D MRI. Further prospective studies are required to evaluate this modality for investigating such lesions and planning appropriate management.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==A Study of Volumetric Variations of Basal Nuclei in the Normal Human Brain by Magnetic Resonance Imaging== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28078760 Clin Anat. 2017 Mar;30(2):175-82. PMID: 28078760]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Elkattan A, Mahdy A, Eltomey M, Ismail R.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Anatomy, Tanta University of Medical Sciences, Tanta, Egypt.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Knowledge of the effects of healthy aging on brain structures is necessary to identify abnormal changes due to diseases. Many studies have demonstrated age-related volume changes in the brain using MRI. 60 healthy individuals who had normal MRI aged from 20 years to 80 years were examined and classified into three groups: Group I: 21 persons; nine males and 12 females aging between 20-39 years old. Group II: 22 persons; 11 males and 11 females aging between 40-59 years old. Group III: 17 persons; eight males and nine females aging between 60-80 years old. Volumetric analysis was done to evaluate the effect of age, gender and hemispheric difference in the caudate and putamen by the [http://slicer.org '''3D Slicer'''] 4.3.3.1 software using 3D T1-weighted images. Data were analyzed by student's unpaired t test, ANOVA and regression analysis. The volumes of the measured and corrected caudate nuclei and putamen significantly decreased with aging in males. There was a statistically insignificant relation between the age and the volume of the measured caudate nuclei and putamen in females but there was a statistically significant relation between the age and the corrected caudate nuclei and putamen. There was no significant difference on the caudate and putamen volumes between males and females. There was no significant difference between the right and left caudate nuclei volumes. There was a leftward asymmetry in the putamen volumes. The results can be considered as a base to track individual changes with time (aging and CNS diseases). &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==MITK-OpenIGTLink for Combining Open-Source Toolkits in Real-Time Computer-Assisted Interventions== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/27687984 Int J Comput Assist Radiol Surg. 2017 Mar;12(3):351-61. PMID: 27687984]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Klemm M, Kirchner T, Gröhl J, Cheray D, Nolden M, Seitel A, Hoppe H, Maier-Hein L, Franz AM.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Laboratory for Computer-Assisted Medicine, Department of Electrical Engineering and Information Technology, Offenburg University, Offenburg, Germany.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' PURPOSE:&lt;br /&gt;
Due to rapid developments in the research areas of medical imaging, medical image processing and robotics, computer-assisted interventions (CAI) are becoming an integral part of modern patient care. From a software engineering point of view, these systems are highly complex and research can benefit greatly from reusing software components. This is supported by a number of open-source toolkits for medical imaging and CAI such as the medical imaging interaction toolkit (MITK), the public software library for ultrasound imaging research (PLUS) and [http://slicer.org '''3D Slicer''']. An independent inter-toolkit communication such as the open image-guided therapy link (OpenIGTLink) can be used to combine the advantages of these toolkits and enable an easier realization of a clinical CAI workflow.&lt;br /&gt;
&amp;lt;br&amp;gt;METHODS:&lt;br /&gt;
MITK-OpenIGTLink is presented as a network interface within MITK that allows easy to use, asynchronous two-way messaging between MITK and clinical devices or other toolkits. Performance and interoperability tests with MITK-OpenIGTLink were carried out considering the whole CAI workflow from data acquisition over processing to visualization.&lt;br /&gt;
&amp;lt;br&amp;gt;RESULTS:&lt;br /&gt;
We present how MITK-OpenIGTLink can be applied in different usage scenarios. In performance tests, tracking data were transmitted with a frame rate of up to 1000 Hz and a latency of 2.81 ms. Transmission of images with typical ultrasound (US) and greyscale high-definition (HD) resolutions of [Formula: see text] and [Formula: see text] is possible at up to 512 and 128 Hz, respectively.&lt;br /&gt;
&amp;lt;br&amp;gt;CONCLUSION:&lt;br /&gt;
With the integration of OpenIGTLink into MITK, this protocol is now supported by all established open-source toolkits in the field. This eases interoperability between MITK and toolkits such as PLUS or [http://slicer.org '''3D Slicer'''] and facilitates cross-toolkit research collaborations. MITK and its submodule MITK-OpenIGTLink are provided open source under a BSD-style license (http://mitk.org).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Increased Cerebellar Gray Matter Volume in Head Chefs== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28182712 PLoS One. 2017 Feb 9;12(2):e0171457.  PMID: 28182712] | [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5300254/pdf/pone.0171457.pdf  PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Cerasa A, Sarica A, Martino I, Fabbricatore C, Tomaiuolo F, Rocca F, Caracciolo M, Quattrone A.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Istituto di Bioimmagini e Fisiologia Molecolare, Consiglio Nazionale delle Ricerche, Catanzaro, Italy.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:'''OBJECTIVE:&lt;br /&gt;
Chefs exert expert motor and cognitive performances on a daily basis. Neuroimaging has clearly shown that that long-term skill learning (i.e., athletes, musicians, chess player or sommeliers) induces plastic changes in the brain thus enabling tasks to be performed faster and more accurately. How a chef's expertise is embodied in a specific neural network has never been investigated.&lt;br /&gt;
&amp;lt;br&amp;gt;METHODS:&lt;br /&gt;
Eleven Italian head chefs with long-term brigade management expertise and 11 demographically-/ psychologically- matched non-experts underwent morphological evaluations.&lt;br /&gt;
&amp;lt;br&amp;gt;RESULTS:&lt;br /&gt;
Voxel-based analysis performed with SUIT, as well as, automated volumetric measurement assessed with Freesurfer, revealed increased gray matter volume in the cerebellum in chefs compared to non-experts. The most significant changes were detected in the anterior vermis and the posterior cerebellar lobule. The magnitude of the brigade staff and the higher performance in the Tower of London test correlated with these specific gray matter increases, respectively.&lt;br /&gt;
&amp;lt;br&amp;gt;CONCLUSIONS:&lt;br /&gt;
We found that chefs are characterized by an anatomical variability involving the cerebellum. This confirms the role of this region in the development of similar expert brains characterized by learning dexterous skills, such as pianists, rock climbers and basketball players. However, the nature of the cellular events underlying the detected morphological differences remains an open question.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Carasa-PlosOne2017-fig2.jpg|thumb|300px| Sample color-coded automated brain segmentation results.&lt;br /&gt;
A 3D surface image (created with  [http://slicer.org '''3D Slicer''']  v 4.6, www.slicer.org) showing typical automated subcortical segmentation of the cerebellum performed by FreeSurfer (v 5.3). Scatter plot of the mean normalized volumes of the left and right cerebellar cortex for each single subject has been plotted. Advanced neuroimaging analysis reveals bilateral cerebellar volumetric increase in the chef group with respect to non-expert individuals.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Tumor Heterogeneity Assessed by Texture Analysis on Contrast-Enhanced CT in Lung Adenocarcinoma: Association with Pathologic Grade== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28430603 Oncotarget. 2017 Feb 16.  PMID: 28430603]  | [http://www.impactjournals.com/oncotarget/index.php?journal=oncotarget&amp;amp;page=article&amp;amp;op=download&amp;amp;path%5B%5D=15399&amp;amp;path%5B%5D=49197 PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Liu Y, Liu S, Qu F, Li Q, Cheng R, Ye Z.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Radiology, Tianjin Medical University Cancer Institute and Hospital, National Clinical Research Center of Cancer, Key Laboratory of Cancer Prevention and Therapy, Tianjin, China.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' To investigate whether texture features on contrast-enhanced computed tomography (CECT) images of lung adenocarcinoma have association with pathologic grade.Methods A cohort of 148 patients with surgically operated adenocarcinoma was retrospectively reviewed. Fifty-four CT features of the primary lung tumor were extracted from CECT images using open-source [http://slicer.org/ '''3D Slicer'''] software; meanwhile, enhancement homogeneity was evaluated by two radiologists using visual assessment. Multivariate logistic regression analysis was performed to determine significant image indicator of pathologic grade. Results Tumors of intermediate grade were more likely to be never smokers (P=0.020). Enhancement heterogeneity by visual assessment showed no statistical difference between intermediate grade and high grade (P=0.671). Among those 54 features, 29 of them were significantly associated with pathologic grade. Multivariate logistic regression analyses identified F33 (Homogeneity 1) (P=0.005) and F38 (Inverse Variance) (P=0.032) as unique independent image indicators of pathologic grade, and the AUC calculated from this model (AUC=0.834) was higher than clinical model (AUC=0.615) (P=0.0001).Conclusions Our study revealed that texture analysis on CECT images could be helpful in predicting pathologic grade of lung adenocarcinoma.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Liu-Oncotarget2017.png|thumb|300px|  Example of CT images showing segmentation of lung tumor. Semiautomatic tumor segmentation was done on every slice of the tumor using [http://slicer.org/ '''3D Slicer'''] (a), and the 3D view of the segmented tumor (b) which was shown in yellow.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==SEEG Assistant: A 3D Slicer Extension to Support Epilepsy Surgery== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/28231759 BMC Bioinformatics. 2017 Feb 23;18(1):124.  PMID: 28231759] | [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5324222/pdf/12859_2017_Article_1545.pdf  PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Narizzano M, Arnulfo G, Ricci S, Toselli B, Tisdall M, Canessa A, Fato MM, Cardinale F.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Informatics, Bioengineering Robotics and System engineering (DIBRIS), University of Genoa, Genova, Italy.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' In the evaluation of Stereo-Electroencephalography (SEEG) signals, the physicist's workflow involves several operations, including determining the position of individual electrode contacts in terms of both relationship to grey or white matter and location in specific brain regions. These operations are (i) generally carried out manually by experts with limited computer support, (ii) hugely time consuming, and (iii) often inaccurate, incomplete, and prone to errors.&lt;br /&gt;
&amp;lt;br&amp;gt;RESULTS:&lt;br /&gt;
In this paper we present SEEG Assistant, a set of tools integrated in a single [http://slicer.org '''3D Slicer''']  extension, which aims to assist neurosurgeons in the analysis of post-implant structural data and hence aid the neurophysiologist in the interpretation of SEEG data. SEEG Assistant consists of (i) a module to localize the electrode contact positions using imaging data from a thresholded post-implant CT, (ii) a module to determine the most probable cerebral location of the recorded activity, and (iii) a module to compute the Grey Matter Proximity Index, i.e. the distance of each contact from the cerebral cortex, in order to discriminate between white and grey matter location of contacts. Finally, exploiting [http://slicer.org '''3D Slicer''']  capabilities, SEEG Assistant offers a Graphical User Interface that simplifies the interaction between the user and the tools. SEEG Assistant has been tested on 40 patients segmenting 555 electrodes, and it has been used to identify the neuroanatomical loci and to compute the distance to the nearest cerebral cortex for 9626 contacts. We also performed manual segmentation and compared the results between the proposed tool and gold-standard clinical practice. As a result, the use of SEEG Assistant decreases the post implant processing time by more than 2 orders of magnitude, improves the quality of results and decreases, if not eliminates, errors in post implant processing.&lt;br /&gt;
&amp;lt;br&amp;gt;CONCLUSIONS:&lt;br /&gt;
The SEEG Assistant Framework for the first time supports physicists by providing a set of open-source tools for post-implant processing of SEEG data. Furthermore, SEEG Assistant has been integrated into [http://slicer.org '''3D Slicer'''] , a software platform for the analysis and visualization of medical images, overcoming limitations of command-line tools.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Narizzano-BMCBioinformatics2017-fig3.jpg|thumb|300px| CPE out performs manual segmentation in complex and critical cases. a As an example of SEEG complexity, we show MRI and thresholded post-implant CT scans for one subject from our cohort. Contacts are shown as groups of white voxels. This case illustrates the complexity of SEEG implants with electrode shafts following non-planar directions (e.g. X), shafts targeting almost the same geometrical point (e.g. R and R’). b CPE segments all contacts (green spheres) belonging to each electrode from post-implant CT scans, represented here as red 3D meshes obtained tessellating the thresholded data to ease visualization. c Show the right pial surface with 3D post-implant thresholded-CT meshes and the cut plane used in panel d where the example of X and X’ electrodes are shown. Those examples represent the case of non-planar insertion trajectories which yielded an artefactually fused electrode. CPE integrating the knowledge of the electrode model can segment the contact positions more accurately than visual inspection.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Associations of Radiomic Data Extracted from Static and Respiratory-Gated CT Scans with Disease Recurrence in Lung Cancer Patients Treated with SBRT== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28046060 PLoS One. 2017 Jan 3;12(1):e0169172.  PMID: 28046060]| [http://journals.plos.org/plosone/article/file?id=10.1371/journal.pone.0169172&amp;amp;type=printable  PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Huynh E, Coroller TP, Narayan V, Agrawal V, Romano J, Franco I, Parmar C, Hou Y, Mak RH, Aerts HJ.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Radiation Oncology, Dana-Farber Cancer Institute, Brigham and Women's Hospital, Harvard Medical School, Boston, USA. &lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Radiomics aims to quantitatively capture the complex tumor phenotype contained in medical images to associate them with clinical outcomes. This study investigates the impact of different types of computed tomography (CT) images on the prognostic performance of radiomic features for disease recurrence in early stage non-small cell lung cancer (NSCLC) patients treated with stereotactic body radiation therapy (SBRT). 112 early stage NSCLC patients treated with SBRT that had static free breathing (FB) and average intensity projection (AIP) images were analyzed. Nineteen radiomic features were selected from each image type (FB or AIP) for analysis based on stability and variance. The selected FB and AIP radiomic feature sets had 6 common radiomic features between both image types and 13 unique features. The prognostic performances of the features for distant metastasis (DM) and locoregional recurrence (LRR) were evaluated using the concordance index (CI) and compared with two conventional features (tumor volume and maximum diameter). P-values were corrected for multiple testing using the false discovery rate procedure. None of the FB radiomic features were associated with DM, however, seven AIP radiomic features, that described tumor shape and heterogeneity, were (CI range: 0.638-0.676). Conventional features from FB images were not associated with DM, however, AIP conventional features were (CI range: 0.643-0.658). Radiomic and conventional multivariate models were compared between FB and AIP images using cross validation. The differences between the models were assessed using a permutation test. AIP radiomic multivariate models (median CI = 0.667) outperformed all other models (median CI range: 0.601-0.630) in predicting DM. None of the imaging features were prognostic of LRR. Therefore, image type impacts the performance of radiomic models in their association with disease recurrence. AIP images contained more information than FB images that were associated with disease recurrence in early stage NSCLC patients treated with SBRT, which suggests that AIP images may potentially be more optimal for the development of an imaging biomarker.&lt;br /&gt;
&lt;br /&gt;
'''Funding:'''&lt;br /&gt;
*U01 CA190234/CA/NCI NIH HHS/United States&lt;br /&gt;
*U24 CA194354/CA/NCI NIH HHS/United States&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:journal.pone.0169172.g001.PNG|thumb|300px| A) Examples of free breathing (FB) and average intensity projection (AIP) images, demonstrating the observable differences in tumor phenotype between each image type. AIP images were reconstructed from 4D computed tomography (CT) scans. B) Schematic representation of the radiomics workflow for FB and AIP images. I. CT images of the patient are acquired and the tumor is segmented. II. Imaging features (radiomic and conventional features) are extracted from the tumor volume. III. Radiomic features undergo a feature dimension reduction process to generate a low-dimensional feature set based on feature stability and variance. IV. Imaging features are then analyzed with clinical outcomes to evaluate their prognostic power. FB and AIP radiomics features are compared. A set of 644 radiomic features was extracted from tumor volumes isolated from FB or AIP images (Fig 1B) using an in-house Matlab 2013 toolbox and [http://slicer.org '''3D Slicer'''] 4.4.0 software]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Early Experiences of Planning Stereotactic Radiosurgery using 3D Printed Models of Eyes with Uveal Melanomas== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/28203052 Clin Ophthalmol. 2017 Jan 31;11:267-71.  PMID: 28203052] | [http://www.ncbi.nlm.nih.gov/pmc/articles/PMC5298814/pdf/opth-11-267.pdf  PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Furdová A, Sramka M, Thurzo A, Furdová A.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Ophthalmology, Faculty of Medicine, Comenius University, Bratislava, Slovakia.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' OBJECTIVE:&lt;br /&gt;
The objective of this study was to determine the use of 3D printed model of an eye with intraocular tumor for linear accelerator-based stereotactic radiosurgery.&lt;br /&gt;
&amp;lt;br&amp;gt;METHODS:&lt;br /&gt;
The software for segmentation ([http://slicer.org '''3D Slicer''']) created virtual 3D model of eye globe with tumorous mass based on tissue density from computed tomography and magnetic resonance imaging data. A virtual model was then processed in the slicing software (Simplify3D®) and printed on 3D printer using fused deposition modeling technology. The material that was used for printing was polylactic acid.&lt;br /&gt;
&amp;lt;br&amp;gt;RESULTS:&lt;br /&gt;
In 2015, stereotactic planning scheme was optimized with the help of 3D printed model of the patient's eye with intraocular tumor. In the period 2001-2015, a group of 150 patients with uveal melanoma (139 choroidal melanoma and 11 ciliary body melanoma) were treated. The median tumor volume was 0.5 cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; (0.2-1.6 cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;). The radiation dose was 35.0 Gy by 99% of dose volume histogram.&lt;br /&gt;
&amp;lt;br&amp;gt;CONCLUSION:&lt;br /&gt;
The 3D printed model of eye with tumor was helpful in planning the process to achieve the optimal scheme for irradiation which requires high accuracy of defining the targeted tumor mass and critical structures.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:jFurdova-ClinOphtalmol2017-fig3.jpg|thumb|300px| A) Virtual model of the eye, outer view; arrow indicates optic nerve. A virtual 3D model of eye globe with tumor based on tissue density was created from CT and MRI data by using the [http://slicer.org '''3D Slicer'''] software for segmentation.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Intra-rater Variability in Low-grade Glioma Segmentation== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/27837437 J Neurooncol. 2017 Jan;131(2):393-402. PMID: 27837437]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Bø HK, Solheim O, Jakola AS, Kvistad KA, Reinertsen I, Berntsen EM.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Radiology and Nuclear Medicine, St. Olavs University Hospital, Trondheim, Norway. &lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Assessment of size and growth are key radiological factors in low-grade gliomas (LGGs), both for prognostication and treatment evaluation, but the reliability of LGG-segmentation is scarcely studied. With a diffuse and invasive growth pattern, usually without contrast enhancement, these tumors can be difficult to delineate. The aim of this study was to investigate the intra-observer variability in LGG-segmentation for a radiologist without prior segmentation experience. Pre-operative 3D FLAIR images of 23 LGGs were segmented three times in the software [http://slicer.org '''3D Slicer''']. Tumor volumes were calculated, together with the absolute and relative difference between the segmentations. To quantify the intra-rater variability, we used the Jaccard coefficient comparing both two (J2) and three (J3) segmentations as well as the Hausdorff Distance (HD). The variability measured with J2 improved significantly between the two last segmentations compared to the two first, going from 0.87 to 0.90 (p = 0.04). Between the last two segmentations, larger tumors showed a tendency towards smaller relative volume difference (p = 0.07), while tumors with well-defined borders had significantly less variability measured with both J2 (p = 0.04) and HD (p &amp;lt; 0.01). We found no significant relationship between variability and histological sub-types or Apparent Diffusion Coefficients (ADC). We found that the intra-rater variability can be considerable in serial LGG-segmentation, but the variability seems to decrease with experience and higher grade of border conspicuity. Our findings highlight that some criteria defining tumor borders and progression in 3D volumetric segmentation is needed, if moving from 2D to 3D assessment of size and growth of LGGs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Hybrid Positron Emission Tomography Segmentation of Heterogeneous Lung Tumors using 3D Slicer: Improved Growcut Algorithm with Threshold Initialization== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/28149920 J. Med. Imag. 2017 Jan-Mar;4(1), 011009.  PMID: 28149920] | [[media:Thomas-JMI2017.pdf | PDF]]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Thomas HM, Devakumar D, Sasidharan B, Bowen SR, Heck DK, Jebaseelan J, Samuel E.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' VIT University, School of Advanced Sciences, Department of Physics, Vellore, Tamil Nadu 632004, India.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' This paper presents an improved GrowCut (IGC), a positron emission tomography-based segmentation algorithm, and tests its clinical applicability. Contrary to the traditional method that requires the user to provide the initial seeds, the IGC algorithm starts with a threshold-based estimate of the tumor and a three- dimensional morphologically grown shell around the tumor as the foreground and background seeds, respectively. The repeatability of IGC from the same observer at multiple time points was compared with the traditional GrowCut algorithm. The algorithm was tested in 11 nonsmall cell lung cancer lesions and validated against the clinician-defined manual contour and compared against the clinically used 25% of the maximum standardized uptake value [SUV-(max)], 40% SUV&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;, and adaptive threshold methods. The time to edit IGC-defined functional volume to arrive at the gross tumor volume (GTV) was compared with that of manual contouring. The repeatability of the IGC algorithm was very high compared with the traditional GrowCut (p = 0.003) and demonstrated higher agreement with the manual contour with respect to threshold-based methods. Compared with manual contouring, editing the IGC achieved the GTV in significantly less time (p = 0.11). The IGC algorithm offers a highly repeatable functional volume and serves as an effective initial guess that can well minimize the time spent on labor-intensive manual contouring.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:jThomas-JMI2017-fig3.png|thumb|300px| A) A representative example of the uncertainty volume observed with the [http://slicer.org '''3D Slicer'''] GrowCutmethod. (a) The lesion was delineated in three separate runs. There was variability with each run and the composite error in the variability calculated as the uncertainty volume is highlighted in green in (b).]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Pre-clinical Validation of Virtual Bronchoscopy using 3D Slicer== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/27325238 Int J Comput Assist Radiol Surg. 2017 Jan;12(1):25-38. PMID: 27325238] &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Nardelli P, Jaeger A, O'Shea C, Khan KA, Kennedy MP, Cantillon-Murphy P.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' School of Engineering, University College Cork, College Road, Cork, Ireland.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Lung cancer still represents the leading cause of cancer-related death, and the long-term survival rate remains low. Computed tomography (CT) is currently the most common imaging modality for lung diseases recognition. The purpose of this work was to develop a simple and easily accessible virtual bronchoscopy system to be coupled with a customized electromagnetic (EM) tracking system for navigation in the lung and which requires as little user interaction as possible, while maintaining high usability.&lt;br /&gt;
Methods:&lt;br /&gt;
The proposed method has been implemented as an extension to the open-source platform, [http://slicer.org '''3D Slicer''']. It creates a virtual reconstruction of the airways starting from CT images for virtual navigation. It provides tools for pre-procedural planning and virtual navigation, and it has been optimized for use in combination with a [Formula: see text] of freedom EM tracking sensor. Performance of the algorithm has been evaluated in ex vivo and in vivo testing.&lt;br /&gt;
Results:&lt;br /&gt;
During ex vivo testing, nine volunteer physicians tested the implemented algorithm to navigate three separate targets placed inside a breathing pig lung model. In general, the system proved easy to use and accurate in replicating the clinical setting and seemed to help choose the correct path without any previous experience or image analysis. Two separate animal studies confirmed technical feasibility and usability of the system.&lt;br /&gt;
Conclusions:&lt;br /&gt;
This work describes an easily accessible virtual bronchoscopy system for navigation in the lung. The system provides the user with a complete set of tools that facilitate navigation towards user-selected regions of interest. Results from ex vivo and in vivo studies showed that the system opens the way for potential future work with virtual navigation for safe and reliable airway disease diagnosis.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Anatomical Study and Locating Nasolacrimal Duct on Computed Topographic Image== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/27977487 J Craniofac Surg. 2017 Jan;28(1):275-9. PMID: 27977487]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Zhang S, Cheng Y, Xie J, Wang Z, Zhang F, Chen L, Feng Y, Wang G.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Endocrinology, First Hospital of Jilin University, Changchun, China.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' We performed a novel anatomical and radiological investigation to understand the structure of nasolacrimal duct (NLD) and to provide data to help surgeons locate the openings of NLD efficiently based on landmarks.&lt;br /&gt;
MATERIALS AND METHODS:&lt;br /&gt;
We examined the NLD region using computed tomography images of 133 individuals and 6 dry skull specimens. Multiplanar reconstruction of the computed tomography images was performed, and the anatomical features of the NLD were studied in the coronal, sagittal, and axial planes. The long and short diameters of NLD were measured along its cross-section. The position of NLD was localized using the nostril, concha nasalis media, and medial orbital corner as landmarks. The free and open source software, 3D Slicer, was used for the segmentation of the NLD and 3D visualization of the superior and inferior openings of the NLD.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The length, angle, and diameter of NLD were significantly influenced by the age in females compared to those in males. The inferior opening of the NLD could be located efficiently using the nostril and the midsagittal line while the superior opening of NLD could be located using the medial orbital corner. Third, [http://slicer.org '''3D Slicer'''] enabled us to measure the distance between the skin and the bony structure in the image.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
Our study indicates that the sex and age of the patient should be considered while selecting the optimal NLD stent for a patient, and that the precise location of NLD in reference to landmarks can simplify the surgical difficulties and reduce the risk of injury during the transnasal operation. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Open Wedge High Tibial Osteotomy using Three-Dimensional Printed Models: Experimental Analysis using Porcine Bone== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/27876267 Knee. 2017 Jan;24(1):16-22. PMID: 27876267]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Kwun JD, Kim HJ, Park J, Park IH, Kyung HS.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Orthopaedic Surgery, School of Medicine, Kyungpook National University, Daegu, Republic of Korea. &lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' BACKGROUND:&lt;br /&gt;
The purpose of this study was to evaluate the usefulness of three-dimensional (3D) printed models for open wedge high tibial osteotomy (HTO) in porcine bone.&lt;br /&gt;
METHODS:&lt;br /&gt;
Computed tomography (CT) images were obtained from 10 porcine knees and 3D imaging was planned using the [http://slicer.org '''3D Slicer'''] program. The osteotomy line was drawn from the three centimeters below the medial tibial plateau to the proximal end of the fibular head. Then the osteotomy gap was opened until the mechanical axis line was 62.5% from the medial border along the width of the tibial plateau, maintaining the posterior tibial slope angle. The wedge-shaped 3D-printed model was designed with the measured angle and osteotomy section and was produced by the 3D printer. The open wedge HTO surgery was reproduced in porcine bone using the 3D-printed model and the osteotomy site was fixed with a plate. Accuracy of osteotomy and posterior tibial slope was evaluated after the osteotomy.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The mean mechanical axis line on the tibial plateau was 61.8±1.5% from the medial tibia. There was no statistically significant difference (P=0.160). The planned and post-osteotomy correction wedge angles were 11.5±3.2° and 11.4±3.3°, and the posterior tibial slope angle was 11.2±2.2° pre-osteotomy and 11.4±2.5° post-osteotomy. There were no significant differences (P=0.854 and P=0.429, respectively).&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
This study showed that good results could be obtained in high tibial osteotomy by using 3D printed models of porcine legs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Go to &amp;lt;big&amp;gt;[https://www.slicer.org/wiki/Main_Page/SlicerCommunity-2016 2016]:: [http://wiki.slicer.org/slicerWiki/index.php/Main_Page/SlicerCommunity-2015 2015] :: [http://wiki.slicer.org/slicerWiki/index.php/Main_Page/SlicerCommunity-2011-2014 2014-2011] :: [http://wiki.slicer.org/slicerWiki/index.php/Main_Page/SlicerCommunity-2005-2010 2010-2005]&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Hherhold</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Main_Page/SlicerCommunity&amp;diff=54937</id>
		<title>Main Page/SlicerCommunity</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Main_Page/SlicerCommunity&amp;diff=54937"/>
		<updated>2017-09-19T01:31:14Z</updated>

		<summary type="html">&lt;p&gt;Hherhold: Fix to URL for Hell Ant paper&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=3D Slicer Enabled Research=&lt;br /&gt;
&lt;br /&gt;
[http://www.slicer.org 3D Slicer] is a free open source software package distributed under a BSD style [[Projects/slicerWeb:LicenseText|license]]. The majority of funding for the development of 3D slicer comes from a number of grants and contracts from the National Institutes of Health. See [http://www.slicer.org/wiki/Documentation/4.x/Acknowledgments Slicer Acknowledgments] for more information.&lt;br /&gt;
&lt;br /&gt;
This page focuses on research that was done outside of our immediate collaboration community. That community is represented in the [http://www.slicer.org/publications/pages/display/?collection=11 publication database].&lt;br /&gt;
&lt;br /&gt;
We invite you to provide information on how you are using 3D Slicer to produce peer-reviewed research. Information about the scientific impact of this tool is helpful in raising funding for the continued support.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;[https://www.slicer.org/wiki/Main_Page/SlicerCommunity-2016 2016]:: [http://wiki.slicer.org/slicerWiki/index.php/Main_Page/SlicerCommunity-2015 2015] :: [http://wiki.slicer.org/slicerWiki/index.php/Main_Page/SlicerCommunity-2011-2014 2014-2011] :: [http://wiki.slicer.org/slicerWiki/index.php/Main_Page/SlicerCommunity-2005-2010 2010-2005]&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=2017=&lt;br /&gt;
==A new genus of hell ants from the Cretaceous (Hymenoptera: Formicidae: Haidomyrmecini) with a novel head structure== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://onlinelibrary.wiley.com/doi/10.1111/syen.12253/abstract Systematic Entomology. 2017 Sep 4;42(4):837-846.]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Barden, Phillip A., Herhold, Hollister W., Grimaldi, David A.&lt;br /&gt;
&lt;br /&gt;
'''Institutions:'''  Department of Biological Sciences, New Jersey Institute of Technology, Newark, NJ, U.S.A. (PB), Department of Invertebrate Zoology, American Museum of Natural History, New York, NY, U.S.A. (PB, HH, DG)&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' An unusual Cretaceous trap jaw ant is described from Burmese amber dated to the Late Cretaceous. Linguamyrmex vladi gen.n. sp.n. is distinguished by an unusual suite of morphological characters indicating specialized predatory behaviour and an adaptive strategy no longer found among modern ant lineages. The clypeus, highly modified as in other closely related haidomyrmecine hell ants, is equipped with a paddle-like projection similar to Ceratomyrmex. X-ray imaging reveals that this clypeal paddle is reinforced, most probably with sequestered metals. Presumably this fortified clypeal structure was utilized in tandem with scythe-like mandibles to pin and potentially puncture soft-bodied prey. This unique taxon, which stresses the diversity of stem-group ants, is discussed in the context of modern and other Cretaceous trap jaw ant species.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Linguamyrmex_vladi.png|thumb|300px| Three-dimensional reconstruction and two-dimensional X-ray ‘slices’ of Linguamyrmex vladi. (A) Three-dimensional reconstruction of specimen BuPH-01 in lateral view. Some elements are irrecoverable in X-ray imaging due to the similar attenuation properties of both amber and thin cuticle. Scale bar, 0.75 mm. (B) Lateral view of head capsule, mandibles and clypeal paddle. Planes C and D correspond with panels C and D, respectively. Scale bar, 0.2 mm. (C) Cross-section of clypeal paddle from oblique dorsal view. Labels demonstrate approximate pixel ‘grey values’ for each fossil material, which in turn represent relative X-ray attenuation levels. (D) Cross-section of clypeal paddle from frontal view. Scale bar, 0.08 mm in each cross-section.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Automated Catheter Navigation with Electromagnetic Image Guidance==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
||&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28362578 IEEE Trans Biomed Eng. 2017 Aug;64(8):1972-9.  PMID: 28362578]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Jaeger HA, Nardelli P, O'Shea C, Tugwell J, Khan KA, Power T, O'Shea M, Kennedy MP, Cantillon-Murphy P.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' School of Engineering, University College Cork, Cork, Ireland.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose: ''' This paper describes a novel method of controlling an endoscopic catheter using an automated catheter tensioning system with the objective of providing clinicians with improved manipulation capabilities within the patient. Catheters are used in many clinical procedures to provide access to the cardiopulmonary system. Control of such catheters is performed manually by the clinicians using a handle, typically actuating a single or opposing set of pull-wires. Such catheters are generally actuated in a single plane, requiring the clinician to rotate the catheter handle to navigate the system. The automation system described here allows closed-loop control of a custom bronchial catheter in tandem with an electromagnetic tracking of the catheter tip and image guidance using [http://www.slicer.org '''3D Slicer''']. An electromechanical drive train applies tension to four pull-wires to steer the catheter tip, with the applied force constantly monitored though force sensing load-cells. The applied tension is controlled through a PC connected joystick. An electromagnetic sensor embedded in the catheter tip enables constant real-time position tracking while a working channel provides a route for endoscopic instruments. The system is demonstrated and tested in both a breathing lung model and a preclinical animal study. Navigation to predefined targets in the subject's airways using the joystick while using virtual image guidance and electromagnetic tracking was demonstrated. Average targeting times were 24 seconds and 10 seconds respectively for the breathing lung and live animal studies. This paper presents the first reported remote controlled bronchial working channel catheter utilizing electromagnetic tracking and has many implications for future development in endoscopic and catheter based procedures.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Quantitative CT ventriculography for Assessment and Monitoring of Hydrocephalus: a Pilot Study and Description of Method in Subarachnoid Hemorrhage (SAH)== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28456742 World Neurosurg. 2017 Aug;104:136-141.  PMID: 28456742]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Multani JS, Oermann EK, Titano J, Mascitelli J, Nicol K, Feng R, Skovrlj B, Pain M, Mocco JD, Bederson JB, Costa A, Shrivastava R.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Neurological Surgery, Mount Sinai Health System, New York, NY, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' There is no facile quantitative method for monitoring hydrocephalus (HCP).&lt;br /&gt;
OBJECTIVE:&lt;br /&gt;
We propose quantitative CT ventriculography (qCTV) as a novel computer vision tool for empirically assessing HCP in patients with subarachnoid hemorrhage (SAH).&lt;br /&gt;
METHODS:&lt;br /&gt;
Twenty patients with SAH who were evaluated for ventriculoperitoneal shunt (VPS) placement were selected for inclusion. Ten patients with normal CT head (CTH) were analyzed as negative controls. CTH scans were segmented both manually and automatically (qCTV) to generate measures of ventricular volume.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Median manually calculated ventricular volume was 36.1cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;(IQR 30-115cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;), which was similar to a median qCTV measured volume of 37.5cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; (IQR 32-118cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;) (p=0.796). Patients undergoing VPS placement demonstrated an increase in ventricular volume on qCTV from 21cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; to 40cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; on Day T-2, and 51cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; by Day 0, a change of 144%. This contrasts with patients who did not require shunting whose ventricular volumes decreased from 16 to 14cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; on Day T-2, and 13cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; by Day 0, with an average overall decrease in volume of 19% (p=0.001). Average change in ventricular volume predicted which patients would require VPS placement, successfully identifying 7/10 patients (p=0.004). Using an optimized cutoff of change in ventricular volume of 2.5cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; identified all patients who went on to require VPS placement (10/10, p=0.011).&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
qCTV is a reliable means of quantifying ventricular volume and hydrocephalus. This technique offers a new tool for monitoring neurosurgical patients for hydrocephalus, and may be beneficial for use in future research studies as well as the routine care of patients with hydrocephalus.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==What are the True Volumes of SEGA Tumors? Reliability of Planimetric and Popular Semi-automated Image Segmentation Methods==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
||&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28321524 MAGMA. 2017 Aug;30(4):397-405. PMID: 28321524]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Stawiski K, Trelińska J, Baranska D, Dachowska I, Kotulska K, Jóźwiak S, Fendler W, Młynarski W.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Biostatistics and Translational Medicine, Hematology and Diabetology, Medical University of Lodz, Lodz, Poland.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose: '''OBJECTIVE:&lt;br /&gt;
To evaluate the reliability of the standard planimetric methodology of volumetric analysis and three different open-source semi-automated approaches of brain tumor segmentation.&lt;br /&gt;
MATERIALS AND METHODS:&lt;br /&gt;
The volumes of subependymal giant cell astrocytomas (SEGA) examined by 30 MRI studies of 10 patients from a previous everolimus-related trial (EMINENTS study) were estimated using four methods: planimetric method (modified MacDonald ellipsoid method), ITK-Snap (pixel clustering, geodesic active contours, region competition methods), [http://www.slicer.org '''3D Slicer'''] (level-set thresholding), and NIRFast (k-means clustering, Markov random fields). The methods were compared, and a trial simulation was performed to determine how the choice of approach could influence the final decision about progression or response.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Intraclass correlation coefficient was high (0.95; 95% CI 0.91-0.98). The planimetric method always overestimated the size of the tumor, while virtually no mean difference was found between ITK-Snap and [http://www.slicer.org '''3D Slicer'''] (P = 0.99). NIRFast underestimated the volume and presented a proportional bias. During the trial simulation, a moderate level of agreement between all the methods (kappa 0.57-0.71, P &amp;lt; 0.002) was noted.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
Semi-automated segmentation can ease oncological follow-up but the moderate level of agreement between segmentation methods suggests that the reference standard volumetric method for SEGA tumors should be revised and chosen carefully, as the selection of volumetry tool may influence the conclusion about tumor progression or response.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==MRI Visible Fe&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;O&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt; Polypropylene Mesh: 3D Reconstruction of Spatial Relation to Bony Pelvis and Neurovascular Structures== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28124074 Int Urogynecol J. 2017 Aug;28(8):1131-8.  PMID: 28124074]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Chen L, Lenz F, Alt CD, Sohn C, De Lancey JO, Brocker KA.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Pelvic Floor Research Group, Biomedical Engineering Department, University of Michigan, Ann Arbor, MI, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:'''&lt;br /&gt;
INTRODUCTION AND HYPOTHESIS:&lt;br /&gt;
To demonstrate mesh magnetic resonance imaging (MRI) visibility in living women, the feasibility of reconstructing the full mesh course in 3D, and to document its spatial relationship to pelvic anatomical structures.&lt;br /&gt;
&amp;lt;br&amp;gt;METHODS:&lt;br /&gt;
This is a proof of concept study of three patients from a prospective multi-center trial evaluating women with anterior vaginal mesh repair using a MRI-visible Fe&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;O&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt; polypropylene implant for pelvic floor reconstruction. High-resolution sagittal T2-weighted (T2w) sequences, transverse T1-weighted (T1w) FLASH 2D, and transverse T1w FLASH 3D sequences were performed to evaluate Fe&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;O&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt; polypropylene mesh MRI visibility and overall post-surgical pelvic anatomy 3 months after reconstructive surgery. Full mesh course in addition to important pelvic structures were reconstructed using the  [http://slicer.org '''3D Slicer''']® software program based on T1w and T2w MRI.&lt;br /&gt;
&amp;lt;br&amp;gt;RESULTS:&lt;br /&gt;
Three women with POP-Q grade III cystoceles were successfully treated with a partially absorbable MRI-visible anterior vaginal mesh with six fixation arms and showed no recurrent cystocele at the 3-month follow-up examination. The course of mesh in the pelvis was visible on MRI in all three women. The mesh body and arms could be reconstructed allowing visualization of the full course of the mesh in relationship to important pelvic structures such as the obturator or pudendal vessel nerve bundles in 3D.&lt;br /&gt;
&amp;lt;br&amp;gt;CONCLUSIONS:&lt;br /&gt;
The use of MRI-visible Fe3O4 polypropylene meshes in combination with post-surgical 3D reconstruction of the mesh and adjacent structures is feasible suggesting that it might be a useful tool for evaluating mesh complications more precisely and a valuable interactive feedback tool for surgeons and mesh design engineers.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Three-dimensional Printing of X-ray Computed Tomography Datasets with Multiple Materials using Open-source Data Processing== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28231405 Anat Sci Educ. 2017 Jul;10(4):383-91. PMID: 28231405]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Sander IM, McGoldrick MT, Helms MN, Betts A, van Avermaete A, Owers E, Doney E, Liepert T, Niebur G, Liepert D, Leevy WM.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Biological Sciences, College of Science, University of Notre Dame, Notre Dame, Indiana., USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Advances in three-dimensional (3D) printing allow for digital files to be turned into a &amp;quot;printed&amp;quot; physical product. For example, complex anatomical models derived from clinical or pre-clinical X-ray computed tomography (CT) data of patients or research specimens can be constructed using various printable materials. Although 3D printing has the potential to advance learning, many academic programs have been slow to adopt its use in the classroom despite increased availability of the equipment and digital databases already established for educational use. Herein, a protocol is reported for the production of enlarged bone core and accurate representation of human sinus passages in a 3D printed format using entirely consumer-grade printers and a combination of free-software platforms. The comparative resolutions of three surface rendering programs were also determined using the sinuses, a human body, and a human wrist data files to compare the abilities of different software available for surface map generation of biomedical data. Data shows that  [http://slicer.org '''3D Slicer''']  provided highest compatibility and surface resolution for anatomical 3D printing. Generated surface maps were then 3D printed via fused deposition modeling (FDM printing). In conclusion, a methodological approach that explains the production of anatomical models using entirely consumer-grade, fused deposition modeling machines, and a combination of free software platforms is presented in this report. The methods outlined will facilitate the incorporation of 3D printed anatomical models in the classroom.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==A New Device for Fiducial Registration of Image-guided Navigation System for Liver RFA== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28718001 Int J Comput Assist Radiol Surg. 2017 Jul 17. PMID: 28718001]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Doba N, Fukuda H, Numata K, Hao Y, Hara K, Nozaki A, Kondo M, Chuma M, Tanaka K, Takebayashi S, Koizumi N, Kobayashi A, Tokuda J, Maeda S.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Gastroenterological Center, Yokohama City University Medical Center, Yokohama, Japan.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Radiofrequency ablation for liver tumors (liver RFA) is widely performed under ultrasound guidance. However, discriminating between the tumor and the needle is often difficult because of cavitation caused by RFA-induced coagulation. An unclear ultrasound image can lead to complications and tumor residue. Therefore, image-guided navigation systems based on fiducial registration have been developed. Fiducial points are usually set on a patient's skin. But the use of internal fiducial points can improve the accuracy of navigation. In this study, a new device is introduced to use internal fiducial points using 2D US.&lt;br /&gt;
METHODS:&lt;br /&gt;
3D Slicer as the navigation software, Polaris Vicra as the position sensor, and two target tumors in a 3D abdominal phantom as puncture targets were used. Also, a new device that makes it possible to obtain tracking coordinates in the body was invented. First, two-dimensional reslice images from the CT images using [http://slicer.org '''3D Slicer''']  were built. A virtual needle was displayed on the two-dimensional reslice image, reflecting the movement of the actual needle after fiducial registration. A phantom experiment using three sets of fiducial point configurations: one conventional case using only surface points, and two cases in which the center of the target tumor was selected as a fiducial point was performed. For each configuration, one surgeon punctured each target tumor ten times under guidance from the [http://slicer.org '''3D Slicer''']  display. Finally, a statistical analysis examining the puncture error was performed.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The puncture error for each target tumor decreased significantly when the center of the target tumor was included as one of the fiducial points, compared with when only surface points were used.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
This study introduces a new device to use internal fiducial points and suggests that the accuracy of image-guided navigation systems for liver RFA can be improved by using the new device.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==MultiXplore: Visual Exploration Platform for Multimodal Neuroimaging Data== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28712912 J Neurosci Methods. 2017 Jul 13;290:1-12. PMID: 28712912]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Bakhshmand SM, Khan AR, de Ribaupierre S, Eagleson R.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Biomedical Engineering Graduate Program, University of Western Ontario, London, Ontario, Canada.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' BACKGROUND:&lt;br /&gt;
Construction of brain functional and structural networks by neuroimaging methods facilitates inter-modal studies. These type of studies often demand exploration tools to carry out functional-structural discoveries and answer questions regarding the anatomical basis of brain networks.&lt;br /&gt;
NEW METHOD:&lt;br /&gt;
This paper describes the design and development of a software module for interactive visualization and exploration of dual-modal brain networks. Our objective was to equip the user with a research tool to investigate brain connectivity matrices while visualizing relevant anatomical landmarks within a 3D volumetric view. In order to create this view, MultiXplore was designed to load data from both structural and diffusion MRI and connectivity matrices.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Once user starts to select desired cells through an interactive matrix unit, associated axonal fiber pathways and grey matter regions are generated and displayed. Integration and visualization of functional and structural networks in this 3D interactive framework was successfully implemented and tested.&lt;br /&gt;
COMPARISON WITH EXISTING METHOD(S):&lt;br /&gt;
MultiXplore contributes to the transition of connectivity visualization techniques from node-link format to an anatomically more realistic graphical form and assists scientists in relating connectivity matrices to their anatomical correlates. This module also benefits from additional novel functionalities to annotate and differentiate fibers in a large bundle. Unlike traditional graph displays, interactive functionality helps in the inspection and visualization of relevant structures without cluttering the scene with excessive items.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
This module was designed and developed as a plugin to [http://slicer.org '''3D Slicer'''] imaging platform and is accessible for neuroimaging researchers through NITRC (http://www.nitrc.org/projects/multixplore/).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Optimization of a Novel Large Field of View Distortion Phantom for MR-only Treatment Planning== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28497476 J Appl Clin Med Phys. 2017 Jul;18(4):51-61.  PMID: 28497476]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Price RG, Knight RA, Hwang KP, Bayram E, Nejad-Davarani SP, Glide-Hurst CK.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Radiation Oncology, Henry Ford Health System, Detroit, MI, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' PURPOSE:&lt;br /&gt;
MR-only treatment planning requires images of high geometric fidelity, particularly for large fields of view (FOV). However, the availability of large FOV distortion phantoms with analysis software is currently limited. This work sought to optimize a modular distortion phantom to accommodate multiple bore configurations and implement distortion characterization in a widely implementable solution.&lt;br /&gt;
METHOD AND MATERIALS:&lt;br /&gt;
To determine candidate materials, 1.0 T MR and CT images were acquired of twelve urethane foam samples of various densities and strengths. Samples were precision-machined to accommodate 6 mm diameter paintballs used as landmarks. Final material candidates were selected by balancing strength, machinability, weight, and cost. Bore sizes and minimum aperture width resulting from couch position were tabulated from the literature (14 systems, 5 vendors). Bore geometry and couch position were simulated using MATLAB to generate machine-specific models to optimize the phantom build. Previously developed software for distortion characterization was modified for several magnet geometries (1.0 T, 1.5 T, 3.0 T), compared against previously published 1.0 T results, and integrated into the [http://slicer.org '''3D Slicer'''] application platform.&lt;br /&gt;
RESULTS:&lt;br /&gt;
All foam samples provided sufficient MR image contrast with paintball landmarks. Urethane foam (compressive strength ∼1000 psi, density ~20 lb/ft&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; ) was selected for its accurate machinability and weight characteristics. For smaller bores, a phantom version with the following parameters was used: 15 foam plates, 55 × 55 × 37.5 cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; (L×W×H), 5,082 landmarks, and weight ~30 kg. To accommodate &amp;gt; 70 cm wide bores, an extended build used 20 plates spanning 55 × 55 × 50 cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; with 7,497 landmarks and weight ~44 kg. Distortion characterization software was implemented as an external module into [http://slicer.org '''3D Slicer''']'s plugin framework and results agreed with the literature.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
The design and implementation of a modular, extendable distortion phantom was optimized for several bore configurations. The phantom and analysis software will be available for multi-institutional collaborations and cross-validation trials to support MR-only planning.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Validation of a Method for &amp;quot;Dose of the Day&amp;quot; Calculation in Head-neck Tomotherapy by using Planning CT-to-MVCT Deformable Image Registration== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28619289 Phys Med. 2017 Jul;39:73-79.   PMID: 28619289]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Branchini M, Fiorino C, Dell'Oca I, Belli ML, Perna L, Di Muzio N, Calandrino R, Broggi S.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Medical Physics Department, San Raffaele Scientific Institute, Milano, Italy.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' PURPOSE:&lt;br /&gt;
The aim of this study was to test the feasibility and dosimetric accuracy of a method that employs planning CT-to-MVCT deformable image registration (DIR) for calculation of the daily dose for head and neck (HN) patients treated with Helical Tomotherapy (HT).&lt;br /&gt;
METHODS:&lt;br /&gt;
For each patient, the planning kVCT (CTplan) was deformably registered to the MVCT acquired at the 15th therapy session (MV15) with a B-Spline Free Form algorithm using Mattes mutual information (open-source software [http://slicer.org '''3D Slicer''']), resulting in a deformed CT (CTdef). On the same day as MVCT15, a kVCT was acquired with the patient in the same treatment position (CT15). The original HT plans were recalculated both on CTdef and CT15, and the corresponding dose distributions were compared; local dose differences &amp;lt;2% of the prescribed dose (DD2%) and 2D/3D gamma-index values (2%-2mm) were assessed respectively with Mapcheck SNC Patient software (Sun Nuclear) and with [http://slicer.org '''3D Slicer'''].&lt;br /&gt;
RESULTS:&lt;br /&gt;
On average, 87.9%±1.2% of voxels were found for DD2% (on average 27 slices available for each patient) and 94.6%±0.8% of points passed the 2D gamma analysis test while the 3D gamma test was satisfied in 94.8%±0.8% of body's voxels.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
This study represents the first demonstration of the dosimetric accuracy of kVCT-to-MVCT DIR for dose of the day computations. The suggested method is sufficiently fast and reliable to be used for daily delivered dose evaluations in clinical strategies for adaptive Tomotherapy of HN cancer.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==SLIDE: Automatic Spine Level Identification System using a Deep Convolutional Neural Network== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28361323 Int J Comput Assist Radiol Surg. 2017 Jul;12(7):1189-98.  PMID: 28361323]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Hetherington J, Lessoway V, Gunka V, Abolmaesumi P, Rohling R.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Electrical and Computer Engineering, The University of British Columbia, Vancouver, Canada.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' PURPOSE:&lt;br /&gt;
Percutaneous spinal needle insertion procedures often require proper identification of the vertebral level to effectively and safely deliver analgesic agents. The current clinical method involves &amp;quot;blind&amp;quot; identification of the vertebral level through manual palpation of the spine, which has only 30% reported accuracy. Therefore, there is a need for better anatomical identification prior to needle insertion.&lt;br /&gt;
METHODS:&lt;br /&gt;
A real-time system was developed to identify the vertebral level from a sequence of ultrasound images, following a clinical imaging protocol. The system uses a deep convolutional neural network (CNN) to classify transverse images of the lower spine. Several existing CNN architectures were implemented, utilizing transfer learning, and compared for adequacy in a real-time system. In the system, the CNN output is processed, using a novel state machine, to automatically identify vertebral levels as the transducer moves up the spine. Additionally, a graphical display was developed and integrated within [http://slicer.org '''3D Slicer''']. Finally, an augmented reality display, projecting the level onto the patient's back, was also designed. A small feasibility study [Formula: see text] evaluated performance.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The proposed CNN successfully discriminates ultrasound images of the sacrum, intervertebral gaps, and vertebral bones, achieving 88% 20-fold cross-validation accuracy. Seventeen of 20 test ultrasound scans had successful identification of all vertebral levels, processed at real-time speed (40 frames/s).&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
A machine learning system is presented that successfully identifies lumbar vertebral levels. The small study on human subjects demonstrated real-time performance. A projection-based augmented reality display was used to show the vertebral level directly on the subject adjacent to the puncture site.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==A New Approach for Radiosynoviorthesis: A Dose-Optimized Planning method Based on Monte Carlo Simulation and Synovial Measurement using 3D Slicer and MRI== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28419533 Med Phys. 2017 Jul;44(7):3821-9.  PMID: 28419533]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Torres Berdeguez MB, Thomas S, Rafful P, Arruda Sanchez T, Medeiros Oliveira Ramos S, Albernaz MS, Vasconcellos de Sá L, Lopes de Souza SA, Mas Milian F, Xavier da Silva A.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Nuclear Engineering Department of Federal University of Rio de Janeiro, Rio de Janeiro, Brazil.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Recently, there has been a growing interest in a methodology for dose planning in radiosynoviorthesis to substitute fixed activity. Clinical practice based on fixed activity frequently does not embrace radiopharmaceutical dose optimization in patients. The aim of this paper is to propose and discuss a dose planning methodology considering the radiological findings of interest obtained by three-dimensional magnetic resonance imaging combined with Monte Carlo simulation in radiosynoviorthesis treatment applied to hemophilic arthropathy.&lt;br /&gt;
METHOD:&lt;br /&gt;
The parameters analyzed were: surface area of the synovial membrane (synovial size), synovial thickness and joint effusion obtained by 3D MRI of nine knees from nine patients on a SIEMENS AVANTO 1.5 T scanner using a knee coil. The [http://slicer.org '''3D Slicer'''] software performed both the semiautomatic segmentation and quantification of these radiological findings. A Lucite phantom 3D MRI validated the quantification methodology. The study used Monte Carlo N-Particle eXtended code version 2.6 for calculating the S-values required to set up the injected activity to deliver a 100 Gy absorbed dose at a determined synovial thickness. The radionuclides assessed were: 90Y, 32P, 188Re, 186Re, 153Sm, and 177Lu, and the present study shows their effective treatment ranges.&lt;br /&gt;
RESULT:&lt;br /&gt;
The quantification methodology was successfully tested, with an error below 5% for different materials. S-values calculated could provide data on the activity to be injected into the joint, considering no extra-articular leakage from joint cavity. Calculation of effective treatment range could assist with the therapeutic decision, with an optimized protocol for dose prescription in RSO.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
Using 3D Slicer software, this study focused on segmentation and quantification of radiological features such as joint effusion, synovial size and thickness, all obtained by 3D MRI in patients knees with hemophilic arthropathy. The combination of synovial size and thickness with the parameters obtained by Monte Carlo simulation such as effective treatment range and S-value, from which is calculated the injected activity, could be used for treatment planning in RSO. Data from this methodology could be a potential aid to clinical decision making by selecting the most suitable radionuclide; justifying the procedure, fractioning the dose and the calculated injected activity for children and adolescents, considering both the synovial size and thickness.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Retrospective Evaluation and SEEG Trajectory Analysis for Interactive Multi-trajectory Planner Assistant== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28710548 Int J Comput Assist Radiol Surg. 2017 Jul 14.  PMID: 28710548]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Scorza D, De Momi E, Plaino L, Amoroso G, Arnulfo G, Narizzano M, Kabongo L, Cardinale F.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
e-Health and Biomedical Applications Department, Vicomtech-IK4, Donostia-San Sebastián, Spain. &lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' PURPOSE:&lt;br /&gt;
Focal epilepsy is a neurological disease that can be surgically treated by removing area of the brain generating the seizures. The stereotactic electroencephalography (SEEG) procedure allows patient brain activity to be recorded in order to localize the onset of seizures through the placement of intracranial electrodes. The planning phase can be cumbersome and very time consuming, and no quantitative information is provided to neurosurgeons regarding the safety and efficacy of their trajectories. In this work, we present a novel architecture specifically designed to ease the SEEG trajectory planning using the [http://slicer.org '''3D Slicer'''] platform as a basis.&lt;br /&gt;
METHODS:&lt;br /&gt;
Trajectories are automatically optimized following criteria like vessel distance and insertion angle. Multi-trajectory optimization and conflict resolution are optimized through a selective brute force approach based on a conflict graph construction. Additionally, electrode-specific optimization constraints can be defined, and an advanced verification module allows neurosurgeons to evaluate the feasibility of the trajectory.&lt;br /&gt;
RESULTS:&lt;br /&gt;
A retrospective evaluation was performed using manually planned trajectories on 20 patients: the planning algorithm optimized and improved trajectories in 98% of cases. We were able to resolve and optimize the remaining 2% by applying electrode-specific constraints based on manual planning values. In addition, we found that the global parameters used discards 68% of the manual planned trajectories, even when they represent a safe clinical choice.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
Our approach improved manual planned trajectories in 98% of cases in terms of quantitative indexes, even when applying more conservative criteria with respect to actual clinical practice. The improved multi-trajectory strategy overcomes the previous work limitations and allows electrode optimization within a tolerable time span.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Canal Transportation, Unprepared Areas, and Dentin Removal after Preparation with BT-RaCe and ProTaper Next Systems== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28712638 J Endod. 2017 Jul 13. PMID: 28712638]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Brasil SC, Marceliano-Alves MF, Marques ML, Grillo JP, Lacerda MFLS, Alves FRF, Siqueira JF Jr, Provenzano JC.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Endodontics, Faculty of Dentistry, Estácio de Sá University, Rio de Janeiro, Brazil.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' BACKGROUND:&lt;br /&gt;
This study compared the shaping ability of ProTaper Next (Dentsply Sirona, Tulsa, OK) and BT-RaCe (FKG Dentaire, La Chaux-de-Fonds, Switzerland) instrument systems in the mesial canals of mandibular molars using micro-computed tomographic (micro-CT) imaging.&lt;br /&gt;
METHODS:&lt;br /&gt;
A total of 17 type IV mesial roots of extracted first mandibular molars were scanned using micro-CT imaging before and after root canal preparation with the 2 instrument systems. Both systems were used in the same root but alternating the mesial canals from root to root. The following parameters were analyzed: root canal volume, surface area, unprepared surface areas, transportation, canal/root width ratio, and preparation time.&lt;br /&gt;
RESULTS:&lt;br /&gt;
There were no statistically significant differences between the 2 systems for all evaluated parameters (P &amp;gt; .05). The unprepared surface areas for the full canal length and the apical 5-mm segment were 33% and 14% for BT-RaCe and 31% and 14% for ProTaper Next, respectively. After preparation, all root canals had a diameter that was not larger than 35% of the root diameter at the coronal and middle segments.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
The 2 systems showed no differences in any of the evaluated shaping parameters. None of the tested systems put the roots at risk of fracture because of excessive dentin removal.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Presurgical Planning for Supratentorial Lesions with Free 3D Slicer Software and Sina App== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28673889 World Neurosurg. 2017 Jun 30.   PMID: 28673889]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Chen JG, Han KW, Zhang DF, Li ZX, Li YM, Hou LJ.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  &lt;br /&gt;
Department of Neurosurgery, Shanghai Neurosurgical Institute, Changzheng Hospital, Shanghai, China.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Neuronavigation system is widely used in the localization of intracranial lesions with satisfactory accuracy. However, it's expensive and difficult to learn. Therefore, simple and practical augmented reality (AR) system using mobile devices might be an alternative technique.&lt;br /&gt;
OBJECTIVE:&lt;br /&gt;
We aim to introduce a mobile AR system for the localization of supratentorial lesions. Its practicability and accuracy were examined by clinical application in patients and comparison with standard neuronavigation system.&lt;br /&gt;
METHODS:&lt;br /&gt;
Three-dimensional (3D) model including lesions is created using [http://slicer.org '''3D Slicer''']. 2D image of this 3D model was obtained and overlapped on patients' head using Sina app. Registration was conducted with the assistance of anatomical landmarks and fiducial markers. Center of lesion projected on scalp was identified with our mobile AR system and standard neuronavigation system, respectively. Distance difference between centers identified by these two systems was measured.&lt;br /&gt;
RESULT:&lt;br /&gt;
Our mobile AR system was simple and accurate in the localization of supratentorial lesions with a mean distance difference of 4.4 ± 1.1 mm. Registration added on an average of 141.7 ± 39 seconds to operation time. There was no statistically significant difference for the required time among three registrations (P=0.646).&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
The mobile AR system presents an alternative technology for image-guided neurosurgery and proves to be practical and reliable. The technique contributes to optimal presurgical planning for supratentorial lesions, especially in the absence of neuronavigation system.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Nerve Atrophy in Trigeminal Neuralgia Due to Neurovascular Compression and its Association with Surgical Outcomes after Microvascular Decompression== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28638946 Acta Neurochir (Wien). 2017 Jun 21.   PMID: 28638946]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Cheng J, Meng J, Liu W, Zhang H, Hui X, Lei D.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  &lt;br /&gt;
Department of Neurosurgery, West China Hospital, Sichuan University, Sichuan, China.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' BACKGROUND:&lt;br /&gt;
Idiopathic trigeminal neuralgia (TN) is caused by neurovascular compression and is often related to morphological changes in the trigeminal nerve. The aim of this study was to quantitatively measure atrophic changes of trigeminal nerves in patients with TN, and to further investigate whether nerve atrophy affected the efficacy of microvascular decompression (MVD).&lt;br /&gt;
METHODS:&lt;br /&gt;
We conducted a prospective case-control study of 60 consecutive patients with TN and 30 sex- and age-matched healthy controls. All subjects underwent high-resolution three-dimensional MRI. The volume of the cisternal segment of trigeminal nerves was measured and compared using [http://slicer.org '''3D Slicer'''] software. Patients with TN underwent primary MVD and regular follow-up for at least 2 years. Associations of nerve atrophy with patient characteristics and operative outcomes were analyzed.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The mean volume of the affected trigeminal nerve was significantly reduced in comparison to that of the nonaffected side (65.8 ± 21.1 versus 77.9 ± 19.3 mm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;, P = 0.001) and controls (65.8 ± 21.1 versus 74.7 ± 16.5 mm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;, P = 0.003). Fifty-two patients (86.7%) achieved complete pain relief without medication immediately after surgery, and 77.6% of patients were complete pain relief at the 2-year follow-up. The Spearman correlation test showed that there was a positive correlation (r = 0.46, P = 0.018) between the degree of trigeminal nerve indentation and nerve atrophy. In multivariate logistic regression analysis, two factors, indentation on nerve root (OR = 2.968, P = 0.022) and degree of nerve atrophy (OR = 1.18, P = 0.035), were associated with the long-term outcome.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
TN is associated with atrophy on the affected nerve. Furthermore, greater nerve atrophy is associated with more severe trigeminal nerve indentation and better long-term outcome following MVD.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Complete Thoracolumbar Fracture-dislocation with Intact Neurologic Function: Explanation of a Novel Cord Saving Mechanism== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28648115 J Spinal Cord Med. 2017 Jun 26:1-10.   PMID: 28648115]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Rahimizadeh A, Asgari N, Rahimizadeh A.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Department of Neurosurgery , Pars Advanced and Minimally Invasive Medical Manners Research Center, Pars Hospital, Iran University of Medical Science, Tehran, Iran.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' BACKGROUND:&lt;br /&gt;
The thoracolumbar junction from T11 to L2 is a common site of injury in which fracture and dislocations are the most prevalent ones occurring at this location. Fracture dislocation is defined as failure of all three columns of the spine with gross displacement. Considering the significant violence necessary to produce fracture dislocations, these injuries are often associated with major neural deficit, with the majority of casualties becoming paraplegic immediately. Preservation of neurological function following complete fracture dislocation is quite rare entity.&lt;br /&gt;
OBJECTIVE:&lt;br /&gt;
To represent the possibility of existence of a preservation mechanism for functional integrity of cord despite spinal gross fracture dislocation by reproducing the injury on a plastic model and simulating a corresponding model using [http://slicer.org '''3D Slicer'''] software, detailed description the pathomechanism of neurologic sparing.&lt;br /&gt;
CASE REPORT:&lt;br /&gt;
A 19-year-old female who sustained severe thoracolumbar fracture dislocation but with normal neurology is presented. Despite the severity of the condition, the diagnosis was initially missed due to associated vital injuries.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Combined posterior and anterior surgery resulted in optimal coronal and sagittal alignment, as well as proper stabilization without any complication. At 9-year follow-up, the patient was found to be doing well.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
The prognosis for complete recovery with preplanned surgical intervention in thoracolumbar injuries affecting all three columns but with normal neurologic function is promising based on images, plastic models and 3D simulated model based on digital images.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Device-specific Evaluation of Intraventricular Left Ventricular Assist Device Position by Quantitative Coaxiality Analysis== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28601303 J Surg Res. 2017 Jun 1;213:110-4..   PMID: 28601303]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Anselmi A, Collin S, Haigron P, Verhoye JP, Flecher E.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  INSERM U1099, Rennes, France.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' BACKGROUND:&lt;br /&gt;
Patient-specific anatomy may influence the final intraventricular positioning of inflow cannula in left ventricular assist device (LVAD) recipients. An association exists between such positioning and clinical outcomes (specifically, orientation toward the interventricular septum has negative prognostic implications). Alternative commercially available LVADs are characterized by markedly different design, with potential consequences on intrathoracic fitting among individual patients.&lt;br /&gt;
MATERIAL AND METHODS:&lt;br /&gt;
A cohort of 13 LVAD recipients (either HeartMate II-group A or Jarvik 2000 Flowmaker-group B) was evaluated. On postoperative computed tomography scans, we reconstructed the implanted LVAD (semiautomatic segmentation), defined the target mitral orifice ([http://slicer.org '''3D Slicer'''] software), and built a coordinate system to quantify the coaxiality of the cannula with the mitral valve axis (angles φ and θ, expressed as percentage variation from the ideal value φ = θ = 0°).&lt;br /&gt;
RESULTS:&lt;br /&gt;
Group A presented significantly greater average percentage variation of the φ angle (significantly greater orientation of the intraventricular cannula toward the interventricular septum; 33.2% ± 32.1% versus 1.9% ± 0.9%, P = 0.001). Group A presented significantly greater average percentage variation of the θ angle (52.7% ± 23.6% versus 14.5% ± 6.3%, P = 0.013).&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
The device assessed in group B showed in the present series better average coaxiality with the mitral orifice. Such finding is related with its design (total intraventricular placement) and interaction with thoracic structures. The present method is being integrated in the development of LVAD virtual implantation tools and may help physicians in patient-specific selection among alternative devices.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Anser EMT: The First Open-Source Electromagnetic Tracking Platform for Image-Guided Interventions== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28357627 Int J Comput Assist Radiol Surg. 2017 Jun;12(6):1059-67. PMID: 28357627]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Jaeger HA, Franz AM, O'Donoghue K, Seitel A, Trauzettel F, Maier-Hein L, Cantillon-Murphy P.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  IHU Strasbourg, Strasbourg, France.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' PURPOSE:&lt;br /&gt;
Electromagnetic tracking is the gold standard for instrument tracking and navigation in the clinical setting without line of sight. Whilst clinical platforms exist for interventional bronchoscopy and neurosurgical navigation, the limited flexibility and high costs of electromagnetic tracking (EMT) systems for research investigations mitigate against a better understanding of the technology's characterization and limitations. The Anser project provides an open-source implementation for EMT with particular application to image-guided interventions.&lt;br /&gt;
METHODS:&lt;br /&gt;
This work provides implementation schematics for our previously reported EMT system which relies on low-cost acquisition and demodulation techniques using both National Instruments and Arduino hardware alongside MATLAB support code. The system performance is objectively compared to other commercial tracking platforms using the Hummel assessment protocol.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Positional accuracy of 1.14 mm and angular rotation accuracy of [Formula: see text] are reported. Like other EMT platforms, Anser is susceptible to tracking errors due to eddy current and ferromagnetic distortion. The system is compatible with commercially available EMT sensors as well as the Open Network Interface for image-guided therapy (OpenIGTLink) for easy communication with visualization and medical imaging toolkits such as MITK and [http://slicer.org '''3D Slicer'''].&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
By providing an open-source platform for research investigations, we believe that novel and collaborative approaches can overcome the limitations of current EMT technology.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==The Effects of Iterative Reconstruction and Kernel Selection on Quantitative Computed Tomography Measures of Lung Density== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28376262 Med Phys. 2017 Jun;44(6):2267-80. PMID: 28376262] &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Rodriguez A, Ranallo FN, Judy PF, Fain SB.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Department of Medical Physics, University of Wisconsin School of Medicine and Public Health, Madison, WI, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose: ''' To determine the effects of iterative reconstruction (IR) and high frequency kernels on quantitative computed tomography (qCT) density measures at reduced X-ray dose.&lt;br /&gt;
MATERIALS AND METHODS:&lt;br /&gt;
The COPDGene 2 Phantom (CTP 698, The Phantom Laboratory, Salem, NY) with four embedded lung mimicking foam densities (12lb, 20lb, and 4lb), as well as water, air, and acrylic reference inserts was imaged using a GE 64 slice CT750 HD scanner in helical mode with four current-time products ranging from 12-100 mAs. The raw acquired data was reconstructed using standard (STD - low frequency) and Bone (high frequency) kernels with filtered back projection (FBP), 100% ASIR, and Veo reconstruction algorithms. The reference density inserts were manually segmented using [http://slicer.org '''3D Slicer'''] and the mean, standard deviation, and histograms of the segmented regions were generated using  [http://fiji.sc/Fiji Fiji] for each reconstruction. Measurements of threshold values placed on the cumulative frequency distribution of voxels determined by these measured histograms at 5%, PD5phant , and 15%, PD15phant , (analogous to the relative area below -950 HU (RA950) and percent density 15 (PD15) in human lung emphysema quantification, respectively), were also performed.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The use of high-resolution kernels in conjunction with ASIR, and Veo did not significantly affect the mean Hounsfield units (HU) of each of the density standards (&amp;lt;4 HU deviation) and current-time products within the phantom when compared with the STD+FBP reconstruction conventionally used in clinical applications. A truncation of the scanner reported HU values at -1024 that shifts the mean towards more positive values was found to cause a systematic error in lower attenuating regions. Use of IR drove convergence toward the mean of measured histograms (~100-137% increase in the number measured voxels at the mean of the histogram) while the combination of Bone+ASIR preserved the standard deviation of HU values about the mean compared to STD+FBP, with the added effect of improved spatial resolution and accuracy in airway measures. PD5phant and PD15phant were most similar between the Bone+ASIR and STD+FBP in all regions except those affected by the -1024 truncation artifact.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
Extension of the scanner reportable HU values below the present limit of -1024 will mitigate discrepancies found in qCT lung densitometry in low-density regions. The density histogram became more sharply peaked and standard deviation was reduced for IR, directly effecting density thresholds, PD5phant and PD15phant, placed on the cumulative frequency distribution of each region in the phantom, which serve as analogs to RA950 and PD15 typically used in lung density quantitation. The combination of high frequency kernels (Bone) with ASIR mitigates this effect and preserves density measures derived from the image histogram. Moreover, previous studies have shown improved accuracy of qCT airway measures of wall thickness (WT) and wall area percentage (WA%) when using high frequency kernels in combination with ASIR to better represent airway walls. The results therefore suggest an IR approach for accurate assessment of airway and parenchymal density measures in the lungs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Infantile Cranial Fasciitis: Case-based Review and Operative Technique== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28451777 Childs Nerv Syst. 2017 Jun;33(6):899-908.  PMID: 28451777]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Flouty OE, Piscopo AJ, Holland MT, Abode-Iyamah K, Bruch L, Menezes AH, Dlouhy BJ.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Neurosurgery, University of Iowa Hospitals and Clinics, Iowa City, IA, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Cranial fasciitis (CF) is an uncommon benign primary lesion of the skull that typically affects the pediatric age group. Due to the rarity of CF, no prospective studies exist. Earliest description of this condition dates to 1980. The limited scientific and clinical literature regarding CF is dominated by case reports. For these reasons, questions pertaining to the true incidence, genetic risk factors, prognosis, and long-term outcome remain unanswered.&lt;br /&gt;
DISCUSSION:&lt;br /&gt;
Clinically, CF presents as a firm, painless, growing scalp mass that is typically not considered in the differential diagnosis. Preoperative pathognomonic signs and symptoms are absent, and imaging features are often nonspecific. Treatment is typically through complete surgical resection, at which time histopathological examination confirms the diagnosis of CF. Reconstruction of the skull defect in the child is critical. Autograft techniques help maintain a rigid construct that integrates with the native skull while preserving its continued ability to grow. Generally, a good outcome is observed with complete resection.&lt;br /&gt;
EXEMPLARY CASE:&lt;br /&gt;
We report a case of CF in an infant with emphasis on operative nuances and early follow-up results.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
CF is a rare fibroproliferative disease that has a poorly defined incidence and long-term follow-up. Due to its locally invasive nature and nonspecific presentation, CF is often difficult to differentiate from malignancies and infections. Complete surgical resection is the best approach for diagnosis and cure. Its occult clinical presentation often allows it to achieve considerable growth, leaving a sizeable skull defect following resection. Since CF presents in the pediatric population, allograft reconstruction is preferred over titanium mesh or other synthetic materials to allow osseous integration and continued uninterrupted skull growth.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Biomaterial Shell Bending with 3D-printed Templates in Vertical and Alveolar Ridge Augmentation: A Technical Note== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28215503 Oral Surg Oral Med Oral Pathol Oral Radiol. 2017 Jun;123(6):651-60. PMID: 28215503]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Draenert FG, Gebhart F, Mitov G, Neff A.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Oral &amp;amp; Maxillofacial Surgery, University of Marburg, Germany.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:'''&lt;br /&gt;
Alveolar ridge and vertical augmentations are challenging procedures in dental implantology. Even material blocks with an interconnecting porous system are never completely resorbed. Shell techniques combined with autologous bone chips are therefore the gold standard. Using biopolymers for these techniques is well documented. We applied three-dimensional (3-D) techniques to create an individualized bending model for the adjustment of a plane biopolymer membrane made of polylactide.&lt;br /&gt;
&amp;lt;BR&amp;gt;STUDY DESIGN:&lt;br /&gt;
Two cases with a vertical alveolar ridge defect in the maxilla were chosen. The cone beam computed tomography data were processed with a [http://slicer.org '''3D Slicer'''] and the Autodesk Meshmixer to generate data about the desired augmentation result. STL data were used to print a bending model. A 0.2-mm poly-D, L-lactic acid membrane (KLS Matin Inc., Tuttlingen, Germany) was bended accordingly and placed into the defect via a tunnel approach in both cases. A mesh graft of autologous bone chips and hydroxylapatite material was augmented beneath the shell, which was fixed with osteosynthesis screws.&lt;br /&gt;
&amp;lt;br&amp;gt;RESULTS:&lt;br /&gt;
The operative procedure was fast and without peri- or postoperative complications or complaints. The panoramic x-ray showed correct fitting of the material in the location. Bone quality at the time of implant placement was type II, resulting in good primary stability.&lt;br /&gt;
&amp;lt;br&amp;gt;CONCLUSIONS:&lt;br /&gt;
A custom-made 3-D model for bending confectioned biomaterial pieces is an appropriate method for individualized adjustment in shell techniques. The advantages over direct printing of the biomaterial shell and products on the market, such as the Xyoss shell (Reoss Inc., Germany), include cost-efficiency and avoidance of regulatory issues.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Application of the 3D Slicer Chest Imaging Platform Segmentation Algorithm for Large Lung Nodule Delineation== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28594880 PLoS One. 2017 Jun 8;12(6):e0178944.  PMID: 28594880] | [http://journals.plos.org/plosone/article?id=10.1371/journal.pone.0178944  PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Yip SSF, Parmar C, Blezek D, Estepar RSJ, Pieper S, Kim J, Aerts HJWL.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Radiation Oncology, Dana-Farber Cancer Institute, Brigham and Women's Hospital, Harvard Medical School, Boston, MA, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' PURPOSE:&lt;br /&gt;
Accurate segmentation of lung nodules is crucial in the development of imaging biomarkers for predicting malignancy of the nodules. Manual segmentation is time consuming and affected by inter-observer variability. We evaluated the robustness and accuracy of a publically available semiautomatic segmentation algorithm that is implemented in the 3D Slicer Chest Imaging Platform (CIP) and compared it with the performance of manual segmentation.&lt;br /&gt;
METHODS:&lt;br /&gt;
CT images of 354 manually segmented nodules were downloaded from the LIDC database. Four radiologists performed the manual segmentation and assessed various nodule characteristics. The semiautomatic CIP segmentation was initialized using the centroid of the manual segmentations, thereby generating four contours for each nodule. The robustness of both segmentation methods was assessed using the region of uncertainty (δ) and Dice similarity index (DSI). The robustness of the segmentation methods was compared using the Wilcoxon-signed rank test (pWilcoxon&amp;lt;0.05). The Dice similarity index (DSIAgree) between the manual and CIP segmentations was computed to estimate the accuracy of the semiautomatic contours.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The median computational time of the CIP segmentation was 10 s. The median CIP and manually segmented volumes were 477 ml and 309 ml, respectively. CIP segmentations were significantly more robust than manual segmentations (median δCIP = 14ml, median dsiCIP = 99% vs. median δmanual = 222ml, median dsimanual = 82%) with pWilcoxon~10-16. The agreement between CIP and manual segmentations had a median DSIAgree of 60%. While 13% (47/354) of the nodules did not require any manual adjustment, minor to substantial manual adjustments were needed for 87% (305/354) of the nodules. CIP segmentations were observed to perform poorly (median DSIAgree≈50%) for non-/sub-solid nodules with subtle appearances and poorly defined boundaries.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
Semi-automatic CIP segmentation can potentially reduce the physician workload for 13% of nodules owing to its computational efficiency and superior stability compared to manual segmentation. Although manual adjustment is needed for many cases, CIP segmentation provides a preliminary contour for physicians as a starting point.&lt;br /&gt;
&lt;br /&gt;
'''Funding:'''&lt;br /&gt;
*U01 CA190234/CA/NCI NIH HHS/United States&lt;br /&gt;
*U24 CA194354/CA/NCI NIH HHS/United States&lt;br /&gt;
*R01 HL116931/HL/NHLBI NIH HHS/United States&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Yip-PLoSOne2017.png|thumb|300px| Comparison of manual (left) and CIP-based (right) segmentation.&lt;br /&gt;
Yellow shaded region indicated the disagreement (or region of uncertainty) between contours performed by four radiologists (bottom left) or different CIP-based seed locations (bottom right). In this example, the region of uncertainty for manual segmentation was 3222 ml while the region was only 46 ml for the CIP-based segmentation. dsi&amp;lt;sub&amp;gt;CIP&amp;lt;/sub&amp;gt; was ≈ 100%, while dsi&amp;lt;sub&amp;gt;manual&amp;lt;/sub&amp;gt; was 88%. ]]]&lt;br /&gt;
|}&lt;br /&gt;
==3D Printed Pathological Sectioning Boxes to Facilitate Radiological-Pathological Correlation in Hepatectomy Cases== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/?term=28596154 J Clin Pathol. 2017 Jun 8.  PMID: 28596154]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Trout AT, Batie MR, Gupta A, Sheridan RM, Tiao GM, Towbin AJ.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Radiology, Cincinnati Children's Hospital Medical Center, Cincinnati, OH, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Radiogenomics promises to identify tumour imaging features indicative of genomic or proteomic aberrations that can be therapeutically targeted allowing precision personalised therapy. An accurate radiological-pathological correlation is critical to the process of radiogenomic characterisation of tumours. An accurate correlation, however, is difficult to achieve with current pathological sectioning techniques which result in sectioning in non-standard planes. The purpose of this work is to present a technique to standardise hepatic sectioning to facilitateradiological-pathological correlation. We describe a process in which three-dimensional (3D)-printed specimen boxes based on preoperative cross-sectional imaging (CT and MRI) can be used to facilitate pathological sectioning in standard planes immediately on hepatic resection enabling improved tumour mapping. We have applied this process in 13 patients undergoing hepatectomy and have observed close correlation between imaging and gross pathology in patients with both unifocal and multifocal tumours.&lt;br /&gt;
Following image review, a clinical engineering specialist (MRB) digitally isolates the liver from the cross-sectional imaging study using open-source software [http://www.slicer.org '''3D Slicer'''].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Retrospective Validation of a Computer-Assisted Quantification Model of Intracerebral Hemorrhage Volume on Accuracy, Precision, and Acquisition Time, Compared with Standard ABC/2 Manual Volume Calculation== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28596188 AJNR Am J Neuroradiol. 2017 Jun 8.  PMID: 28596188]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Xue W, Vegunta S, Zwart CM, Aguilar MI, Patel AC, Hoxworth JM, Demaerschalk BM, Mitchell JR.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Biomedical Informatics, Arizona State University, Scottsdale, AZ, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' BACKGROUND AND PURPOSE:&lt;br /&gt;
Intracerebral hemorrhage accounts for 6.5%-19.6% of all acute strokes. Initial intracerebral hemorrhage volume and expansion are both independent predictors of clinical outcomes and mortality. Therefore, a rapid, unbiased, and precise measurement of intracerebral hemorrhage volume is a key component of clinical management. The most commonly used method, ABC/2, results in overestimation. We developed an interactive segmentation program, SegTool, using a novel graphic processing unit, level set algorithm. Until now, the speed, bias, and precision of SegTool had not been validated.&lt;br /&gt;
MATERIALS AND METHODS:&lt;br /&gt;
In a single stroke academic center, 2 vascular neurologists and 2 neuroradiologists independently performed a test-retest experiment that involved repeat measurements of static, unchanging intracerebral hemorrhage volumes on CT from 76 intracerebral hemorrhage cases. Measurements were made with SegTool and ABC/2. True intracerebral hemorrhage volumes were estimated from a consensus of repeat manual tracings by 2 operators. These data allowed us to estimate measurement bias, precision, and speed. Computer-assisted measurements were made with an intensity-threshold algorithm in [http://www.slicer.org 3D Slicer].&lt;br /&gt;
RESULTS:&lt;br /&gt;
The measurements with SegTool were not significantly different from the true intracerebral hemorrhage volumes, while ABC/2 overestimated volume by 45%. The interrater measurement variability with SegTool was 50% less than that with ABC/2. The average measurement times for ABC/2 and SegTool were 35.7 and 44.6 seconds, respectively.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
SegTool appears to have attributes superior to ABC/2 in terms of accuracy and interrater reliability with a 9-second delay in measurement time (on average); hence, it could be useful in clinical trials and practice. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Theoretical Observation on Diagnosis Maneuver for Benign Paroxysmal Positional Vertigo== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28084876 Acta Otolaryngol. 2017 Jun;137(6):567-71. PMID: 28084876]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Yang XK, Zheng YY, Yang XG.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Neurology, Wenzhou People's Hospital, Wenzhou, Zhejiang, PR China.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' To make a comprehensive analysis with a variety of diagnostic maneuvers is conducive to the correct diagnosis and classification of BPPV.&lt;br /&gt;
OBJECTIVE:&lt;br /&gt;
Based on the standard spatial coordinate-based semicircular canal model for theoretical observation on diagnostic maneuvers for benign paroxysmal positional vertigo (BPPV) to analyze the meaning and key point of each step of the maneuver.&lt;br /&gt;
MATERIALS AND METHODS:&lt;br /&gt;
This study started by building a standard model of semicircular canal with space orientation by segmentation of the inner ear done with the [http://slicer.org '''3D Slicer'''] software based on MRI scans, then gives a demonstration and observation of BPPV diagnostic maneuvers by using the model.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The supine roll maneuver is mainly for diagnosis of lateral semicircular canal BPPV. The Modified Dix-Hallpike maneuver is more specific for the diagnosis of posterior semicircular canal BPPV. The side-lying bow maneuver designed here is theoretically suitable for diagnosis of anterior semicircular canal BPPV. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==High Expression of Glypican-1 Predicts Dissemination and Poor Prognosis in Glioblastomas== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28602885 World Neurosurg. 2017 Jun 5.  PMID: 28602885]&lt;br /&gt;
&lt;br /&gt;
'''Authors:'''Saito T, Sugiyama K, Hama S, Yamasaki F, Takayasu T, Nosaka R, Onishi S, Muragaki Y, Kawamata T, Kurisu K.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Neurosurgery, Hiroshima University, Graduate School of Biomedical and Health Science, Hiroshima, Japan.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' OBJECTIVE:&lt;br /&gt;
Glioblastoma (GBM) relapses locally or in a disseminated pattern, and is highly resistant to chemo-radiotherapy. Although dissemination is associated with poor prognosis for GBM patients, the clinico-pathological factors that promote dissemination have not been elucidated. Glypican-1 (GPC-1) is a heparin sulfate proteoglycan that is attached to the extracytoplasmic surface of the cell membrane and regulates cell motility. The aim of this study was to determine whether GPC-1 expression correlated with GBM dissemination and patient prognosis.&lt;br /&gt;
METHODS:&lt;br /&gt;
GPC-1 expression was examined by immunohistochemistry in 53 patients with GBM who received radiotherapy and temozolomide (TMZ) treatment. We assessed the relationship between dissemination and clinico-pathological factors, including GPC-1 expression. Additionally, we evaluated the relationship between GPC-1 expression and overall survival (OS) by uni- and multivariate analyses of a range of clinico-pathological factors, including age, Karnofsky Performance Status (KPS), extent of resection, and O6-methylguanine-DNA methyltransferase (MGMT) status.&lt;br /&gt;
To evaluate the extent of resection by 13 semi-automatic volumetry, we used [http://www.slicer.org '''3D Slicer'''], version 4.0 software.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Logistic regression analysis revealed that GPC-1 expression correlated with dissemination (P = 0.0116). Log-rank tests revealed that age, KPS, extent of resection, MGMT status, dissemination (P = 0.0008) and GPC-1 expression (P = 0.0011) were significantly correlated with OS. Multivariate analysis indicated that age, MGMT status, and GPC-1 expression were significantly correlated with OS. GPC-1 expression had the highest hazard ratio (2.392) among all regressors.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
GPC-1 expression significantly correlated with OS in GBM patients who received radiotherapy and TMZ treatment. GPC-1 expression can help predict the occurrence of dissemination and shorter OS in GBM patients.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Factors Affecting the Visual Outcome of Pituitary Adenoma Patients Treated with Endoscopic Transsphenoidal Surgery== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28583452 World Neurosurg. 2017 Jun 2.  PMID: 28583452]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Luomaranta T, Raappana A, Saarela V, Liinamaa MJ.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Ophthalmology, Oulu University Hospital, Oulu, Finland.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' OBJECTIVE:&lt;br /&gt;
To evaluate visual acuity (VA) and visual fields (VF) quantitatively before and after endoscopic transsphenoidal surgery (ETS), with special attention to prognostic factors such as the pituitary adenomas' (PAs') suprasellar extension (SSE), volume and the patients' age.&lt;br /&gt;
METHODS:&lt;br /&gt;
Medical records of 47 PA patients operated with ETS were evaluated. VA, VF and visual impairment score (VIS) were determined pre- (VISpre) and postoperatively (VISpost). The PA's SSE, volume and chiasmal contact and their correlation with visual function was pre- and postoperatively assessed. Each PA was preoperatively manually segmented from (typically from T1-weighted, contrast-enhanced, coronal) MRI planes of the patient using [http://www.slicer.org '''3D Slicer'''], a modelling software, which also reported the volume of the modeled PA.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The final cohort included 47 patients. VA improved in 54/76 eyes (71.0 %) after ETS and 69/76 eyes (90.7 %) gained normal VA. Postoperative VF recovery occurred in 32/37 (86.5 %) of the eyes. The mean VISchange was 12.0 (95% CI 7.7-16.3) and improved in all patients with tumor-related visual impairment (n=25). However, visual outcome was poorer when VISpre&amp;gt;40. When VISpre was 21-40, age linearly correlated with VIS improvement (p=0.03); younger patients had satisfactory and older poorer visual outcome. The mean SSE in patients with VF defects (n=20) was 16.6 mm (95% CI 13.3-19.9) and in patients with no VF defects (n=23) 6.6 mm (95% CI 4.9-8.3, p&amp;lt;0.001) and cut-off value for visual perturbations was 9.5 mm for SSE and 8.6 ml for PA volume (p&amp;lt;0.001 for both).&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
The visual outcome after ETS for PAs was excellent and significant complications rare. Severe preoperative visual impairment resulted poorer postoperative visual outcome. The SSE of PA was the most important predictor of visual outcome after ETS.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Clinical Outcomes of an Endoscopic Transclival and Transpetrosal Approach for Primary Skull Base Malignancies Involving the Clivus== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28574308 J Neurosurg. 2017 Jun 2:1-9.  PMID: 28574308]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Kim YH1, Jeon C, Se YB, Hong SD, Seol HJ, Lee JI, Park CK, Kim DG, Jung HW, Han DH, Nam DH, Kong DS.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Neurosurgery, Samsung Medical Center, Sungkyunkwan University School of Medicine, Seoul, Republic of Korea.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' OBJECTIVE The endoscopic endonasal approach for treating primary skull base malignancies involving the clivus is a formidable task. The authors hypothesized that tumor involvement of nearby critical anatomical structures creates hurdles to endoscopic gross-total resection (GTR). The aim of this study was to retrospectively review the clinical outcomes of patients who underwent an endoscopic endonasal approach to treat primary malignancies involving the clivus and to analyze prognostic factors for GTR. METHODS Between January 2009 and November 2015, 42 patients underwent the endoscopic endonasal approach for resection of primary skull base malignancies involving the clivus at 2 independent institutions. Clinical data; tumor locations within the clivus; and anatomical involvement of the cavernous or paraclival internal carotid artery, cisternal trigeminal nerve, hypoglossal canal, and dura mater were investigated to assess the extent of resection. Possible prognostic factors affecting GTR were also analyzed.  The preoperative tumor volume was measured radiographically with [http://www.slicer.org '''3D Slicer''']. RESULTS Of the 42 patients, 37 were diagnosed with chordomas and 5 were diagnosed with chondrosarcomas. The mean (± SD) preoperative tumor volume was 25.2 ± 30.5 cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; (range 0.8-166.7 cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;). GTR was achieved in 28 patients (66.7%) and subtotal resection in 14 patients (33.3%). All tumors were classified as upper (n = 17), middle (n = 17), or lower (n = 8) clival tumors based on clival involvement, and as central (24 [57.1%]) or paramedian (18 [42.9%]) based on laterality of the tumor. Univariate analysis identified the tumor laterality (OR 6.25, 95% CI 1.51-25.86; p = 0.011) as significantly predictive of GTR. In addition, the laterality of the tumor was found to be a statistically significant predictor in multivariate analysis (OR 41.16, 95% CI 1.12-1512.65; p = 0.043). CONCLUSIONS An endoscopic endonasal approach can provide favorable clinical and surgical outcomes. However, the tumor laterality should be considered as a potential obstacle to total removal.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==1.5 T Augmented Reality Navigated Interventional MRI: Paravertebral Sympathetic Plexus Injections== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28420598 Diagn Interv Radiol. 2017 May-Jun;23(3):227-32. PMID: 28420598]  |  [http://dirjournal.org/sayilar/62/buyuk/16323.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Marker DR, U Thainual P, Ungi T, Flammang AJ, Fichtinger G, Iordachita II, Carrino JA, Fritz J.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''   Russel H. Morgan Department of Radiology and Radiological Science, Johns Hopkins University School of Medicine, Baltimore, Maryland, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' The high contrast resolution and absent ionizing radiation of interventional magnetic resonance imaging (MRI) can be advantageous for paravertebral sympathetic nerve plexus injections. We assessed the feasibility and technical performance of MRI-guided paravertebral sympathetic injections utilizing augmented reality navigation and 1.5 T MRI scanner.&lt;br /&gt;
METHODS:&lt;br /&gt;
A total of 23 bilateral injections of the thoracic (8/23, 35%), lumbar (8/23, 35%) and hypogastric (7/23, 30%) paravertebral sympathetic plexus were prospectively planned in twelve human cadavers using a 1.5 Tesla (T) MRI scanner and augmented reality navigation system. MRI-conditional needles were used. Gadolinium-DTPA-enhanced saline was injected. Outcome variables included the number of control magnetic resonance images, target error of the needle tip, punctures of critical nontarget structures, distribution of the injected fluid, and procedure length. The isotropic 3D MR&lt;br /&gt;
images were transferred into the navigation module (PerkStation) of the [http://slicer.org '''3D Slicer'''] software for interactive 3D evaluation of the anatomy using its DICOM viewer function.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Augmented-reality navigated MRI guidance at 1.5 T provided detailed anatomical visualization for successful targeting of the paravertebral space, needle placement, and perineural paravertebral injections in 46 of 46 targets (100%). A mean of 2 images (range, 1-5 images) were required to control needle placement. Changes of the needle trajectory occurred in 9 of 46 targets (20%) and changes of needle advancement occurred in 6 of 46 targets (13%), which were statistically not related to spinal regions (P = 0.728 and P = 0.86, respectively) and cadaver sizes (P = 0.893 and P 0.859, respectively). The mean error of the needle tip was 3.9±1.7 mm. There were no punctures of critical nontarget structures. The mean procedure length was 33±12 min.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
1.5 T augmented reality-navigated interventional MRI can provide accurate imaging guidance for perineural injections of the thoracic, lumbar, and hypogastric sympathetic plexus.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Marker-DIR2017-fig.png|thumb|300px|  Procedural photograph demonstrating the operator’s augmented reality consisting of a&lt;br /&gt;
hybrid view of MR image and underlying cadaver. The hybrid view is being created by the reflection&lt;br /&gt;
of the target MR image (black arrow) from a semitransparent mirror (white arrow) into the line of&lt;br /&gt;
sight of the operator, where it merges with the underlying cadaver (gray arrow). Location, size, and&lt;br /&gt;
skin contour of MR image and cadaver are matched through co-registration by the image-overlay&lt;br /&gt;
navigation system.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==From Medical Imaging Data to 3D Printed Anatomical Models== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28562693 PLoS One. 2017 May 31;12(5):e0178540.   PMID: 28562693]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Bücking TM, Hill ER, Robertson JL, Maneas E, Plumb AA, Nikitichev DI.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Medical Physics and Biomedical Engineering, University College London, London, UK.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Anatomical models are important training and teaching tools in the clinical environment and are routinely used in medical imaging research. Advances in segmentation algorithms and increased availability of three-dimensional (3D) printers have made it possible to create cost-efficient patient-specific models without expert knowledge. We introduce a general workflow that can be used to convert volumetric medical imaging data (as generated by Computer Tomography (CT)) to 3D printed physical models. This process is broken up into three steps: image segmentation, mesh refinement and 3D printing. To lower the barrier to entry and provide the best options when aiming to 3D print an anatomical model from medical images, we provide an overview of relevant free and open-source image segmentation tools as well as 3D printing technologies. We demonstrate the utility of this streamlined workflow by creating models of ribs, liver, and lung using a Fused Deposition Modelling 3D printer.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Bucking-PLoSOne2017.jpg|thumb|300px| 3D printed anatomical models generated from medical imaging data using [http://www.slicer.org '''3D Slicer'''] and Seg3D. Part of the ribcage (a), the liver (b), and the right lung (c).]]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==3D Printing and Modelling of Customized Implants and Surgical Guides for Non-human Primates== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28512008 J Neurosci Methods. 2017 May 13;286:38-55. PMID: 28512008]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Chen X, Possel JK, Wacongne C, van Ham AF, Klink PC, Roelfsema PR.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Vision &amp;amp; Cognition, Netherlands Institute for Neuroscience, Meibergdreef 47, 1105 BA, Amsterdam, Netherlands.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Primate neurobiologists use chronically implanted devices such as pedestals for head stabilization and chambers to gain access to the brain and study its activity. Such implants are skull-mounted, and made from a hard, durable material, such as titanium.&lt;br /&gt;
NEW METHOD:&lt;br /&gt;
Here we present a low-cost method of creating customized 3D-printed cranial implants that are tailored to the anatomy of individual animals. We performed pre-surgical computed tomography (CT) and magnetic resonance (MR) scans to generate three-dimensional (3D) models of the skull and brain. We then used 3D modeling software to design implantable head posts, chambers, and a pedestal anchorage base, as well as craniotomy guides to aid us during surgery. Prototypes were made from plastic or resin, while implants were 3D-printed in titanium. The implants underwent post-processing and received a coating of osteocompatible material to promote bone integration.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Their tailored fit greatly facilitated surgical implantation, and eliminated the gap between the implant and the bone. To date, our implants remain robust and well-integrated with the skull.&lt;br /&gt;
COMPARISON WITH EXISTING METHOD(S):&lt;br /&gt;
Commercial-off-the-shelf solutions typically come with a uniform, flat base, preventing them from sitting flush against the curved surface of the skull. This leaves gaps for fluid and tissue ingress, increasing the risk of microbial infection and tissue inflammation, as well as implant loss.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
The use of 3D printing technology enabled us to quickly and affordably create unique, complex designs, avoiding the constraints levied by traditional production methods, thereby boosting experimental success and improving the wellbeing of the animals.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Accuracy of Mobile Biplane X-ray Imaging in Measuring 6-Degree-of-Freedom Patellofemoral Kinematics during Overground Gait== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28454908 J Biomech. 2017 May 24;57:152-6. PMID: 28454908]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Gray HA, Guan S, Pandy MG.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Mechanical Engineering, University of Melbourne, Victoria, Australia.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' The aim of this study was to evaluate the accuracy with which mobile biplane X-ray imaging can be used to measure patellofemoral kinematics of the intact knee during overground gait. A unique mobile X-ray imaging system tracked and recorded biplane fluoroscopic images of two human cadaver knees during simulated overground walking at a speed of 0.7m/s. Six-degree-of-freedom patellofemoral kinematics were calculated using a bone volumetric model-based method and the results then compared against those derived from a gold-standard bead-based method. RMS errors for patellar anterior translation, superior translation and lateral shift were 0.19mm, 0.34mm and 0.37mm, respectively. RMS errors for patellar flexion, lateral tilt and lateral rotation were 1.08°, 1.15° and 1.46°, respectively. The maximum RMS error for patellofemoral translations was approximately one-half that reported previously for tibiofemoral translations using the same mobile X-ray imaging system while the maximum RMS error for patellofemoral rotations was nearly two times larger than corresponding errors reported for tibiofemoral rotations. The lower accuracy in measuring patellofemoral rotational motion is likely explained by the symmetric nature of the patellar geometry and the smaller size of the patella compared to the tibia.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Quality of Radiomic Features in Glioblastoma Multiforme: Impact of Semi-Automated Tumor Segmentation Software==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
||&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28458602 Korean J Radiol. 2017 May-Jun;18(3):498-509. PMID: 28458602]  | [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5390619/pdf/kjr-18-498.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Lee M, Woo B, Kuo MD, Jamshidi N, Kim JH.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Center for Medical-IT Convergence Technology Research, Advanced Institutes of Convergence Technology, Seoul National University, Suwon, Korea.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' The purpose of this study was to evaluate the reliability and quality of radiomic features in glioblastoma multiforme (GBM) derived from tumor volumes obtained with semi-automated tumor segmentation software.&lt;br /&gt;
MATERIALS AND METHODS:&lt;br /&gt;
MR images of 45 GBM patients (29 males, 16 females) were downloaded from The Cancer Imaging Archive, in which post-contrast T1-weighted imaging and fluid-attenuated inversion recovery MR sequences were used. Two raters independently segmented the tumors using two semi-automated segmentation tools (TumorPrism3D and [http://www.slicer.org '''3D Slicer''']). Regions of interest corresponding to contrast-enhancing lesion, necrotic portions, and non-enhancing T2 high signal intensity component were segmented for each tumor. A total of 180 imaging features were extracted, and their quality was evaluated in terms of stability, normalized dynamic range (NDR), and redundancy, using intra-class correlation coefficients, cluster consensus, and Rand Statistic.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Our study results showed that most of the radiomic features in GBM were highly stable. Over 90% of 180 features showed good stability (intra-class correlation coefficient [ICC] ≥ 0.8), whereas only 7 features were of poor stability (ICC &amp;lt; 0.5). Most first order statistics and morphometric features showed moderate-to-high NDR (4 &amp;gt; NDR ≥1), while above 35% of the texture features showed poor NDR (&amp;lt; 1). Features were shown to cluster into only 5 groups, indicating that they were highly redundant.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
The use of semi-automated software tools provided sufficiently reliable tumor segmentation and feature stability; thus helping to overcome the inherent inter-rater and intra-rater variability of user intervention. However, certain aspects of feature quality, including NDR and redundancy, need to be assessed for determination of representative signature features before further development of radiomics.    &lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Lee-KJR2017-fig4.jpg|thumb|300px| Example of segmentation results with two semi-automated software tools.&lt;br /&gt;
Contrast-enhanced, necrotic, and non-enhancing T2 high signal intensity components are indicated by red, green, and blue color, respectively.&lt;br /&gt;
&lt;br /&gt;
A. Represents case in which similar segmentation results were produced. B. Represents case in which difference was observed in segmentation results. FLAIR = fluid-attenuated inversion recovery.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prognostic Implications of the Subcellular Localization of Survivin in Glioblastomas Treated with Radiotherapy Plus Concomitant and Adjuvant Temozolomide== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28430038 J Neurosurg. 2017 Apr 21:1-6. PMID: 28430038]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Saito T, Sugiyama K, Takeshima Y, Amatya VJ, Yamasaki F, Takayasu T, Nosaka R, Muragaki Y, Kawamata T, Kurisu K.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Neurosurgery, Tokyo Women's Medical University, Tokyo, Japan..&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' OBJECTIVE Currently, the standard treatment protocol for patients with newly diagnosed glioblastoma (GBM) includes surgery, radiotherapy, and concomitant and adjuvant temozolomide (TMZ). Various prognostic biomarkers for GBM have been described, including survivin expression. The aim of this study was to determine whether the subcellular localization of survivin correlates with GBM prognosis in patients who received the standard treatment protocol. METHODS The authors retrospectively examined the subcellular localization of survivin (nuclear, cytoplasmic, or both) using immunohistochemistry in 50 patients with GBM who had received the standard treatment. The relationship between survivin localization and overall survival (OS) was assessed with uni- and multivariate analyses including other clinicopathological factors (age, sex, Karnofsky Performance Scale [KPS] score, extent of resection, the use of second-line bevacizumab, O6-methylguanine-DNA methyltransferase [MGMT] status, and MIB-1 labeling index). RESULTS Log-rank tests revealed that patient age, KPS score, extent of resection, MGMT status, and survivin localization (p &amp;lt; 0.0001) significantly correlated with OS. Multivariate analysis indicated that patient age, MGMT status, and survivin localization significantly correlated with OS. Patients with nuclear localization of survivin had a significantly shorter OS than those in whom survivin expression was exclusively cytoplasmic (median OS 19.5 vs 31.7 months, respectively, HR 5.690, 95% CI 2.068-17.612, p = 0.0006). There was no significant difference in OS between patents whose survivin expression was exclusively nuclear or nuclear/cytoplasmic. CONCLUSIONS Nuclear expression of survivin is a factor for a poor prognosis in GBM patients. Subcellular localization of survivin can help to predict OS in GBM patients treated with the standard protocol.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==An Ovine Model of Cerebral Catheter Venography for Implantation of an Endovascular Neural Interface== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28452616 J Neurosurg. 2017 Apr 28:1-8.  PMID: 28452616]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Oxley TJ, Opie NL, Rind GS, Liyanage K, John SE, Ronayne S, McDonald AJ, Dornom A, Lovell TJH, Mitchell PJ, Bennett I, Bauquier S, Warne LN, Steward C, Grayden DB, Desmond P, Davis SM, O'Brien TJ, May CN.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Vascular Bionics Laboratory, Department of Medicine, The Royal Melbourne Hospital, Melbourne, Australia.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Neural interface technology may enable the development of novel therapies to treat neurological conditions, including motor prostheses for spinal cord injury. Intracranial neural interfaces currently require a craniotomy to achieve implantation and may result in chronic tissue inflammation. Novel approaches are required that achieve less invasive implantation methods while maintaining high spatial resolution. An endovascular stent electrode array avoids direct brain trauma and is able to record electrocorticography in local cortical tissue from within the venous vasculature. The motor area in sheep runs in a parasagittal plane immediately adjacent to the superior sagittal sinus (SSS). The authors aimed to develop a sheep model of cerebral venography that would enable validation of an endovascular neural interface. METHODS Cerebral catheter venography was performed in 39 consecutive sheep. Contrast-enhanced MRI of the brain was performed on 13 animals. Multiple telescoping coaxial catheter systems were assessed to determine the largest wide-bore delivery catheter that could be delivered into the anterior SSS. Measurements of SSS diameter and distance from the motor area were taken. The location of the motor area was determined in relation to lateral and superior projections of digital subtraction venography images and confirmed on MRI. RESULTS The venous pathway from the common jugular vein (7.4 mm) to the anterior SSS (1.2 mm) was technically challenging to selectively catheterize. The SSS coursed immediately adjacent to the motor cortex (&amp;lt; 1 mm) for a length of 40 mm, or the anterior half of the SSS. Attempted access with 5-Fr and 6-Fr delivery catheters was associated with longer procedure times and higher complication rates. A 4-Fr catheter (internal lumen diameter 1.1 mm) was successful in accessing the SSS in 100% of cases with no associated complications. Complications included procedure-related venous dissection in two major areas: the torcular herophili, and the anterior formation of the SSS. The bifurcation of the cruciate sulcal veins with the SSS was a reliable predictor of the commencement of the motor area. CONCLUSIONS The ovine model for cerebral catheter venography has generalizability to the human cerebral venous system in relation to motor cortex location. This novel model may facilitate the development of the novel field of endovascular neural interfaces that may include preclinical investigations for cortical recording applications such as paralysis and epilepsy, as well as other potential applications in neuromodulation.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Effectiveness of Endoscopic Surgery for Supratentorial Hypertensive Intracerebral Hemorrhage: A Comparison with Craniotomy==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
||&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28387618 J Neurosurg. 2017 Apr 7:1-7. PMID: 28387618]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Xu X, Chen X, Li F, Zheng X, Wang Q, Sun G, Zhang J, Xu B.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Neurosurgery, Chinese PLA General Hospital, Beijing, China.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' OBJECTIVE The goal of this study was to investigate the effectiveness and practicality of endoscopic surgery for treatment of supratentorial hypertensive intracerebral hemorrhage (HICH) compared with traditional craniotomy. METHODS The authors retrospectively analyzed 151 consecutive patients who were operated on for treatment of supratentorial HICH between January 2009 and June 2014 in the Department of Neurosurgery at Chinese PLA General Hospital. Patients were separated into an endoscopy group (82 cases) and a craniotomy group (69 cases), depending on the surgery they received. The hematoma evacuation rate was calculated using [http://www.slicer.org '''3D Slicer'''] software to measure the hematoma volume. Comparisons of operative time, intraoperative blood loss, Glasgow Coma Scale score 1 week after surgery, hospitalization time, and modified Rankin Scale score 6 months after surgery were also made between these groups. RESULTS There was no statistically significant difference in preoperative data between the endoscopy group and the craniotomy group (p &amp;gt; 0.05). The hematoma evacuation rate was 90.5% ± 6.5% in the endoscopy group and 82.3% ± 8.6% in the craniotomy group, which was statistically significant (p &amp;lt; 0.01). The operative time was 1.6 ± 0.7 hours in the endoscopy group and 5.2 ± 1.8 hours in the craniotomy group (p &amp;lt; 0.01). The intraoperative blood loss was 91.4 ± 93.1 ml in the endoscopy group and 605.6 ± 602.3 ml in the craniotomy group (p &amp;lt; 0.01). The 1-week postoperative Glasgow Coma Scale score was 11.5 ± 2.9 in the endoscopy group and 8.3 ± 3.8 in the craniotomy group (p &amp;lt; 0.01). The hospital stay was 11.6 ± 6.9 days in the endoscopy group and 13.2 ± 7.9 days in the craniotomy group (p &amp;lt; 0.05). The mean modified Rankin Scale score 6 months after surgery was 3.2 ± 1.5 in the endoscopy group and 4.1 ± 1.9 in the craniotomy group (p &amp;lt; 0.01). Patients had better recovery in the endoscopy group than in the craniotomy group. Data are expressed as the mean ± SD. CONCLUSIONS Compared with traditional craniotomy, endoscopic surgery was more effective, less invasive, and may have improved the prognoses of patients with supratentorial HICH. Endoscopic surgery is a promising method for treatment of supratentorial HICH. With the development of endoscope technology, endoscopic evacuation will become more widely used in the clinic. Prospective randomized controlled trials are needed.   &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Asymmetry in Dentition and Shape of Pharyngeal Arches in the Clonal Fish Chrosomus Eos-neogaeus: Phenotypic Plasticity and Developmental Instability== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28380079 PLoS One. 2017 Apr 5;12(4):e0174235. PMID: 28380079]   |  [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5381790/pdf/pone.0174235.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Leung C, Duclos KK, Grünbaum T, Cloutier R, Angers B.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''   Department of Biological Sciences, Université de Montréal, Montreal, Quebec, Canada.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose: ''' The effect of the environment may result in different developmental outcomes. Extrinsic signals can modify developmental pathways and result in alternative phenotypes (phenotypic plasticity). The environment can also be interpreted as a stressor and increase developmental instability (developmental noise). Directional and fluctuating asymmetry provide a conceptual background to discriminate between these results. This study aims at assessing whether variation in dentition and shape of pharyngeal arches of the clonal fish Chrosomus eos-neogaeus results from developmental instability or environmentally induced changes. A total of 262 specimens of the Chrosomus eos-neogaeus complex from 12 natural sites were analysed. X-ray microcomputed tomography (X-ray micro-CT) was used to visualize the pharyngeal arches in situ with high resolution. Variation in the number of pharyngeal teeth is high in hybrids in contrast to the relative stability observed in both parental species. The basal dental formula is symmetric while the most frequent alternative dental formula is asymmetric. Within one lineage, large variation in the proportion of individuals bearing basal or alternative dental formulae was observed among sites in the absence of genetic difference. Both dentition and arch shape of this hybrid lineage were explained significantly by environmental differences. Only individuals bearing asymmetric dental formula displayed fluctuating asymmetry as well as directional left-right asymmetry for the arches. The hybrids appeared sensitive to environmental signals and intraspecific variation on pharyngeal teeth was not random but reflects phenotypic plasticity. Altogether, these results support the influence of the environment as a trigger for an alternative developmental pathway resulting in left-right asymmetry in dentition and shape of pharyngeal arches.&lt;br /&gt;
&lt;br /&gt;
Dicom files were subsequently loaded within the open-source software [http://slicer.org '''3D Slicer'''] (Version 4.5 ). 3D models were rendered from dicom files using the editor module within [http://slicer.org '''3D Slicer'''] and the thresholding algorithm.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Scanning Laser Optical Tomography for in Toto Imaging of the Murine Cochlea.== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28388662 PLoS One. 2017 Apr 7;12(4):e0175431. PMID: 28388662]   |  [http://journals.plos.org/plosone/article/file?id=10.1371/journal.pone.0175431&amp;amp;type=printable PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Nolte L, Tinne N, Schulze J, Heinemann D, Antonopoulos GC, Meyer H, Nothwang HG, Lenarz T, Heisterkamp A, Warnecke A, Ripken T.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  &lt;br /&gt;
Industrial and Biomedical Optics Department, Laser Zentrum Hannover e.V., Hannover, Germany.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:'''  The mammalian cochlea is a complex macroscopic structure due to its helical shape and the microscopic arrangements of the individual layers of cells. To improve the outcomes of hearing restoration in deaf patients, it is important to understand the anatomic structure and composition of the cochlea ex vivo. Hitherto, only one histological technique based on confocal laser scanning microscopy and optical clearing has been developed for in toto optical imaging of the murine cochlea. However, with a growing size of the specimen, e.g., human cochlea, this technique reaches its limitations. Here, we demonstrate scanning laser optical tomography (SLOT) as a valuable imaging technique to visualize the murine cochlea in toto without any physical slicing. This technique can also be applied in larger specimens up to cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; such as the human cochlea. Furthermore, immunolabeling allows visualization of inner hair cells (otoferlin) or spiral ganglion cells (neurofilament) within the whole cochlea. After image reconstruction, the 3D dataset was used for digital segmentation of the labeled region. As a result, quantitative analysis of position, length and curvature of the labeled region was possible. This is of high interest in order to understand the interaction of cochlear implants (CI) and cells in more detail. &lt;br /&gt;
&lt;br /&gt;
To enable correct overlay of the two excitation channels, the general registration algorithm (BRAINS) from the open source software [http://slicer.org '''3D Slicer'''] was used.                          &lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Nolte-PLoSOne2017.PNG|thumb|300px|  Maximum intensity projections (MIP) were performed on the reconstructed data of samples 1 and 2.&lt;br /&gt;
(A) MIP of sample 1. The labeled neurofilament appears as a helical shape inside the cochlea. (B) Higher magnification of the highlighted area in A. The dendrites of the spiral ganglions are visible. (C) Negative control (sample 2). Only autofluorescence and nonspecific binding shows the outer shape of the cochlea. (D) Higher magnification of the highlighted area in C.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Patient Education for Endoscopic Sinus Surgery: Preliminary Experience Using 3D-Printed Clinical Imaging Data== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28387702 J Funct Biomater. 2017 Apr 7;8(2). PMID: 28387702]   |  [http://www.mdpi.com/2079-4983/8/2/13/htm PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Sander IM, Liepert TT, Doney EL, Leevy WM, Liepert DR.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Department of Biological Sciences, University of Notre Dame, South Bend, IN, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Within the Ear, Nose, and Throat (ENT) medical space, a relatively small fraction of patients follow through with elective surgeries to fix ailments such as a deviated septum or occluded sinus passage. Patient understanding of their diagnosis and treatment plan is integral to compliance, which ultimately yields improved medical outcomes and better quality of life. Here we report the usage of advanced, polyjet 3D printing methods to develop a multimaterial replica of human nasal sinus anatomy, derived from clinical X-ray computed tomography (CT) data, to be used as an educational aid during physician consultation. The final patient education model was developed over several iterations to optimize material properties, anatomical accuracy and overall display. A two-arm, single-center, randomized, prospective study was then performed in which 50 ENT surgical candidates (and an associated control group, n = 50) were given an explanation of their anatomy, disease state, and treatment options using the education model as an aid. Statistically significant improvements in patient ratings of their physician's explanation of their treatment options (p = 0.020), self-rated anatomical understanding (p = 0.043), self-rated understanding of disease state (p = 0.016), and effectiveness of the visualization (p = 0.007) were noted from the population that viewed the 3D education model, indicating it is an effective tool which ENT surgeons may use to educate and interact with patients. &lt;br /&gt;
&lt;br /&gt;
All volumes outside of the volume of interest were masked at a value of −1000 Hounsfield Units (HU). The data was exported in Nifti (.nii) format and opened in [http://slicer.org '''3D Slicer'''].&lt;br /&gt;
A 3D surface map for bone was generated using the “Grayscale Modelmaker” tool within [http://slicer.org '''3D Slicer'''] at a threshold of 300 HU. A separate 3D surface map was generated for soft tissue using the same tool and process with a threshold level of −300 HU. Each surface map was exported from 3DSlicer as a .stl file.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Sander-JFB2017.png|thumb|300px|  Nasal cavity model generation and fabrication. (A) 3D surface maps generated from CT scan slices of patient nasal cavity used to generate a 3D-printed model; (B) 3D-printed, sliced model, printed with two distinct polymers to represent hard and soft tissues; (C) Single coronal model slice with specific anatomical details highlighted.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Comprehensive Evaluation of Ten Deformable Image Registration Algorithms for Contour Propagation between CT and Cone-beam CT Images in Adaptive Head &amp;amp; Neck Radiotherapy== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28414799 PLoS One. 2017 Apr 17;12(4):e0175906. PMID: 28414799]   |  [http://journals.plos.org/plosone/article/file?id=10.1371/journal.pone.0175906&amp;amp;type=printable PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Li X, Zhang Y, Shi Y, Wu S, Xiao Y, Gu X, Zhen X, Zhou L.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  &lt;br /&gt;
Department of Biomedical Engineering, Southern Medical University, Guangzhou, Guangdong, China.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:'''Deformable image registration (DIR) is a critical technic in adaptive radiotherapy (ART) for propagating contours between planning computerized tomography (CT) images and treatment CT/cone-beam CT (CBCT) images to account for organ deformation for treatment re-planning. To validate the ability and accuracy of DIR algorithms in organ at risk (OAR) contour mapping, ten intensity-based DIR strategies, which were classified into four categories-optical flow-based, demons-based, level-set-based and spline-based-were tested on planning CT and fractional CBCT images acquired from twenty-one head &amp;amp; neck (H&amp;amp;N) cancer patients who underwent 6~7-week intensity-modulated radiation therapy (IMRT). Three similarity metrics, i.e., the Dice similarity coefficient (DSC), the percentage error (PE) and the Hausdorff distance (HD), were employed to measure the agreement between the propagated contours and the physician-delineated ground truths of four OARs, including the vertebra (VTB), the vertebral foramen (VF), the parotid gland (PG) and the submandibular gland (SMG). It was found that the evaluated DIRs in this work did not necessarily outperform rigid registration. DIR performed better for bony structures than soft-tissue organs, and the DIR performance tended to vary for different ROIs with different degrees of deformation as the treatment proceeded. Generally, the optical flow-based DIR performed best, while the demons-based DIR usually ranked last except for a modified demons-based DISC used for CT-CBCT DIR. These experimental results suggest that the choice of a specific DIR algorithm depends on the image modality, anatomic site, magnitude of deformation and application. Therefore, careful examinations and modifications are required before accepting the auto-propagated contours, especially for automatic re-planning ART systems.&lt;br /&gt;
&lt;br /&gt;
Before performing the rigid and deformable registration, all the images were pre-processed using an open source software [http://slicer.org '''3D Slicer''']. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Exercise Decreases Marrow Adipose Tissue Through ß-Oxidation in Obese Running Mice== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28436105 J Bone Miner Res. 2017 Apr 24. PMID: 28436105]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Styner M, Pagnotti GM, McGrath C, Wu X, Sen B, Uzer G, Xie Z, Zong X, Styner MA, Rubin CT, Rubin J.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Medicine, Division of Endocrinology and Metabolism, University of North Carolina, Chapel Hill, NC, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' The relationship between marrow adipose tissue (MAT) and bone health is poorly understood. We used running exercise to ask whether obesity-associated MAT can be attenuated via exercise and whether this correlates with gains in bone quantity and quality. C57BL/6 mice were divided into diet-induced obesity (DIO, n = 14) versus low-fat diet (LFD, n = 14). After 3 months, 16-week-old mice were allocated to an exercise intervention (LFD-E, DIO-E) or a control group (LFD, DIO) for 6 weeks (4 groups, n = 7/group). Marrow adipocyte area was 44% higher with obesity (p &amp;lt; 0.0001) and after exercise 33% lower in LFD (p &amp;lt; 0.0001) and 39% lower in DIO (p &amp;lt; 0.0001). In LFD, exercise did not affect adipocyte number; however, in DIO, the adipocyte number was 56% lower (p &amp;lt; 0.0001). MAT was 44% higher in DIO measured by osmium-μCT, whereas exercise associated with reduced MAT (-23% in LFD, -48% in DIO, p &amp;lt; 0.05). MAT was additionally quantified by 9.4TMRI, and correlated with osmium-µCT (r = 0.645; p &amp;lt; 0.01). Consistent with higher lipid beta oxidation, perilipin 3 (PLIN3) rose with exercise in tibial mRNA (+92% in LFD, +60% in DIO, p &amp;lt; 0.05). Tibial µCT-derived trabecular bone volume (BV/TV) was not influenced by DIO but responded to exercise with an increase of 19% (p &amp;lt; 0.001). DIO was associated with higher cortical periosteal and endosteal volumes of 15% (p = 0.012) and 35% (p &amp;lt; 0.01), respectively, but Ct.Ar/Tt.Ar was lower by 2.4% (p &amp;lt; 0.05). There was a trend for higher stiffness (N/m) in DIO, and exercise augmented this further. In conclusion, obesity associated with increases in marrow lipid-measured by osmium-μCT and MRI-and partially due to an increase in adipocyte size, suggesting increased lipid uptake into preexisting adipocytes. Exercise associated with smaller adipocytes and less bone lipid, likely invoking increased ß-oxidation and basal lipolysis as evidenced by higher levels of PLIN3. © 2017 American Society for Bone and Mineral Research.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Interactive Outlining of Pancreatic Cancer Liver Metastases in Ultrasound Images== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28420871 Sci Rep. 2017 Apr 18;7(1):892. PMID: 28420871]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Egger J, Schmalstieg D, Chen X, Zoller WG, Hann A.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Institute for Computer Graphics and Vision, Graz University of Technology, Graz, Austria. &lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Ultrasound (US) is the most commonly used liver imaging modality worldwide. Due to its low cost, it is increasingly used in the follow-up of cancer patients with metastases localized in the liver. In this contribution, we present the results of an interactive segmentation approach for liver metastases in US acquisitions. A (semi-) automatic segmentation is still very challenging because of the low image quality and the low contrast between the metastasis and the surrounding liver tissue. Thus, the state of the art in clinical practice is still manual measurement and outlining of the metastases in the US images. We tackle the problem by providing an interactive segmentation approach providing real-time feedback of the segmentation results. The approach has been evaluated with typical US acquisitions from the clinical routine, and the datasets consisted of pancreatic cancer metastases. Even for difficult cases, satisfying segmentations results could be achieved because of the interactive real-time behavior of the approach. In total, 40 clinical images have been evaluated with our method by comparing the results against manual ground truth segmentations. This evaluation yielded to an average Dice Score of 85% and an average Hausdorff Distance of 13 pixels.&lt;br /&gt;
We tested our data with the GrowCut implementation that is available in [http://slicer.org '''3D Slicer'''].&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Egger-SciRep2017.png|thumb|300px|  GrowCut segmentation results for the two metastases from Fig. 9. The left images show the manual&lt;br /&gt;
initialization of GrowCut: the metastases were initialized with green, and the backgrounds were initialized with&lt;br /&gt;
yellow. The images in the middle show the segmentation results of GrowCut (green). The right images show a&lt;br /&gt;
closer view of the segmentation results (green) with a lower opacity.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==The Evolution of Cost-efficiency in Neural Networks during Recovery from Traumatic Brain Injury== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28422992 PLoS One. 2017 Apr 19;12(4):e0170541. PMID: 28422992]  | [http://journals.plos.org/plosone/article/file?id=10.1371/journal.pone.0170541&amp;amp;type=printable PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Roy A, Bernier RA, Wang J, Benson M, French JJ Jr, Good DC, Hillary FG.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  &lt;br /&gt;
Department of Psychology, The Pennsylvania State University, University Park, Pennsylvania, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' A somewhat perplexing finding in the systems neuroscience has been the observation that physical injury to neural systems may result in enhanced functional connectivity (i.e., hyperconnectivity) relative to the typical network response. The consequences of local or global enhancement of functional connectivity remain uncertain and this is particularly true for the overall metabolic cost of the network. We examine the hyperconnectivity hypothesis in a sample of 14 individuals with TBI with data collected at approximately 3, 6, and 12 months following moderate and severe TBI. As anticipated, individuals with TBI showed increased network strength and cost early after injury, but by one-year post injury hyperconnectivity was more circumscribed to frontal DMN and temporal-parietal attentional control regions. Cost in these subregions was a significant predictor of cognitive performance. Cost-efficiency analysis in the Power 264 data parcellation suggested that at 6 months post injury the network requires higher cost connections to achieve high efficiency as compared to the network 12 months post injury. These results demonstrate that networks self-organize to re-establish connectivity while balancing cost-efficiency trade-offs.&lt;br /&gt;
To determine the influence of global pathology on brain networks, we created a 3-dimensional (3D) lesion model for each subject using [http://slicer.org '''3D Slicer'''] that utilizes information from multiple MR sequences, such as SWI, FLAIR, and T1 MPRAGE.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Roy-PLoSOne2017.PNG|thumb|300px|fMRI data preprocessing steps and the analytic pipeline.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Three‐Dimensional Printing: An Aid to Epidural Access for Neuromodulation== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28425137 Neuromodulation. 2017 Apr 20 PMID: 28425137]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Taverner MG, Monagle JP.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  &lt;br /&gt;
Frankston Pain Management, Victoria, Australia.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' OBJECTIVE:&lt;br /&gt;
The case report details to use of three-dimensional (3D) printing as an aid to neuromodulation.&lt;br /&gt;
METHODS:&lt;br /&gt;
A patient is described in whom previous attempts at spinal neuromodulation had failed due to lack of epidural or intrathecal access, and the use of a 3D printed model allowed for improved planning and ultimately, success. Thin-slices (0.625 mm)&lt;br /&gt;
of a high-resolution CT scan of the patient's thoracolumbar spine and iliac crests was used to create a CAD model on [http://slicer.org '''3D Slicer'''] software (Surgical Planning Laboratory, Boston, MA&lt;br /&gt;
RESULTS:&lt;br /&gt;
Successful spinal cord stimulation was achieved with the plan developed by access to a 3D model of the patient's spine.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
Neuromodulation techniques can provide the optimal analgesic techniques for individual patients. At times these can fail due to lack of access to the site for intervention, in this case epidural access. 3D printing may provide additional information to improve the likelihood of access when anatomy is distorted and standard approaches prove difficult.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Biomechanical Flow Amplification Arising From the Variable Deformation of the Subglottic Mucosa== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28433346 J Voice. 2017 Apr 19. PMID: 28433346]  | [http://www.jvoice.org/article/S0892-1997(17)30036-X/pdf  PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Goodyer E, Müller F, Hess M, Kandan K, Farukh F.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  &lt;br /&gt;
De Montfort University, Bio-Informatics Research Group, Leicester, UK.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' OBJECTIVE:&lt;br /&gt;
This study mapped the variation in tissue elasticity of the subglottic mucosa, applied these data to provide initial models of the likely deformation of the mucosa during the myoelastic cycle, and hypothesized as to the impact on the process of phonation.&lt;br /&gt;
STUDY DESIGN:&lt;br /&gt;
Six donor human larynges were dissected along the sagittal plane to expose the vocal folds and subglottic mucosa. A linear skin rheometer was used to apply a controlled shear force, and the resultant displacement was measured. These data provided a measure of the stress/strain characteristics of the tissue at each anatomic point. A series of measurements were taken at 2-mm interval inferior of the vocal folds, and the change in elasticity was determined. CT images of the excised larynges have been used to create 3D reconstructions with the help of an open-source medical imaging software, [http://slicer.org '''3D Slicer'''].&lt;br /&gt;
RESULTS:&lt;br /&gt;
It was found that the elasticity of the mucosa in the subglottic region increased linearly with distance from the vocal folds in all 12 samples. A simple deformation model indicated that under low pressure conditions the subglottic mucosa will deform to form a cone, which could result in a higher velocity, thus amplifying the low pressure effect resulting from the Venturi principle, and could assist in maintaining laminar flow.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
This study indicated that the deformation of the subglottic mucosa could play a significant role in the delivery of a low pressure airflow over the vocal folds. A large scale study will now be undertaken to secure more data to evaluate this hypothesis, and using computational fluid dynamics based on actual three-dimensional structure obtained from computed tomography scans the aerodynamics of this region will be investigated.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Goodyer-JVoice2017.png|thumb|300px|  Three-dimensional (3D) model of a larynx constructed&lt;br /&gt;
from a computed tomography scan images (A) showing the full 3D&lt;br /&gt;
model. (B) and (C) Show the views of larynx looking down the arrow&lt;br /&gt;
as indicated by the letter P and Q, respectively. CT images of&lt;br /&gt;
the excised larynges have been used to create 3D reconstructions&lt;br /&gt;
with the help of an open-source medical imaging software,&lt;br /&gt;
[http://slicer.org/ '''3D Slicer'''].]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==HTC Vive MeVisLab Integration via OpenVR for Medical Applications==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
||&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28323840 PLoS One. 2017 Mar 21;12(3):e0173972. PMID: 28323840]  | [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5360258/pdf/pone.0173972.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Egger J, Gall M, Wallner J, Boechat P, Hann A, Li X, Chen X, Schmalstieg D.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Institute of Computer Graphics and Vision, Graz University of Technology, Graz, Austria.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:'''Virtual Reality, an immersive technology that replicates an environment via computer-simulated reality, gets a lot of attention in the entertainment industry. However, VR has also great potential in other areas, like the medical domain, Examples are intervention planning, training and simulation. This is especially of use in medical operations, where an aesthetic outcome is important, like for facial surgeries. Alas, importing medical data into Virtual Reality devices is not necessarily trivial, in particular, when a direct connection to a proprietary application is desired. Moreover, most researcher do not build their medical applications from scratch, but rather leverage platforms like MeVisLab, MITK, OsiriX or [http://www.slicer.org '''3D Slicer''']. These platforms have in common that they use libraries like ITK and VTK, and provide a convenient graphical interface. However, ITK and VTK do not support Virtual Reality directly. In this study, the usage of a Virtual Reality device for medical data under the MeVisLab platform is presented. The OpenVR library is integrated into the MeVisLab platform, allowing a direct and uncomplicated usage of the head mounted display HTC Vive inside the MeVisLab platform. Medical data coming from other MeVisLab modules can directly be connected per drag-and-drop to the Virtual Reality module, rendering the data inside the HTC Vive for immersive virtual reality inspection.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Revealing Cancer Subtypes with Higher-Order Correlations Applied to Imaging and Omics Data== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28359308 BMC Med Genomics. 2017 Mar 31;10(1):20.  PMID: 28359308] | [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5374737/pdf/12920_2017_Article_256.pdf  PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Graim K, Liu TT, Achrol AS, Paull EO, Newton Y, Chang SD, Harsh GR, Cordero SP, Rubin DL, Stuart JM.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Biomedical Engineering, University of California, Santa Cruz, CA, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Patient stratification to identify subtypes with different disease manifestations, severity, and expected survival time is a critical task in cancer diagnosis and treatment. While stratification approaches using various biomarkers (including high-throughput gene expression measurements) for patient-to-patient comparisons have been successful in elucidating previously unseen subtypes, there remains an untapped potential of incorporating various genotypic and phenotypic data to discover novel or improved groupings.&lt;br /&gt;
METHODS:&lt;br /&gt;
Here, we present HOCUS, a unified analytical framework for patient stratification that uses a community detection technique to extract subtypes out of sparse patient measurements. HOCUS constructs a patient-to-patient network from similarities in the data and iteratively groups and reconstructs the network into higher order clusters. We investigate the merits of using higher-order correlations to cluster samples of cancer patients in terms of their associations with survival outcomes.&lt;br /&gt;
RESULTS:&lt;br /&gt;
In an initial test of the method, the approach identifies cancer subtypes in mutation data of glioblastoma, ovarian, breast, prostate, and bladder cancers. In several cases, HOCUS provides an improvement over using the molecular features directly to compare samples. Application of HOCUS to glioblastoma images reveals a size and location classification of tumors that improves over human expert-based stratification.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
Subtypes based on higher order features can reveal comparable or distinct groupings. The distinct solutions can provide biologically- and treatment-relevant solutions that are just as significant as solutions based on the original data.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Graim-BMCMedGenomics2017-fig5.jpg|thumb|300px| HOCUS of GBM MR Images. a. P-values of survival separation (log-rank test) for each of the orders of clustering across a range of k clusters. b. Kaplan-Meier plot of the third-order HOCUS clusters. c. Images of tumors within each cluster projected onto the MNI brain atlas. Showing sagittal, coronal, axial views. Brightness of color indicates the number of patients with tumor at a given location. Generated using [http://slicer.org '''3D Slicer''']. d. Violin plot showing tumor volumes within each third-order cluster. e. Molecular (gene expression based) subtypes within the clusters.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Three-Dimensional Volume Rendering of Pelvic Models and Paraurethral Masses Based on MRI Cross-Sectional Images== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28352953 Int Urogynecol J. 2017 Mar 28. PMID: 28352953]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Doumouchtsis SK, Nazarian DA, Gauthaman N, Durnea CM, Munneke G.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Obstetrics &amp;amp; Gynaecology, Epsom and St. Helier University Hospital NHS Trust, Epsom, UK. &lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' AIMS:&lt;br /&gt;
Our aim was to assess the feasibility of rendering 3D pelvic models using magnetic resonance imaging (MRI) scans of patients with vaginal, urethral and paraurethral lesions and obtain additional information previously unavailable through 2D imaging modalities.&lt;br /&gt;
METHODS:&lt;br /&gt;
A purposive sample of five female patients 26-40 years old undergoing investigations for vaginal or paraurethral mass was obtained in a tertiary teaching hospital. 3D volume renderings of the bladder, urethra and paraurethral masses were constructed using [http://slicer.org '''3D Slicer'''] v.3.4.0. Spatial dimensions were determined and compared with findings from clinical, MRI, surgical and histopathological reports. The quality of information regarding size and location of paraurethral masses obtained from 3D models was compared with information from cross-sectional MRI and review of clinical, surgical and histopathological findings.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The analysis of rendered 3D models yielded detailed anatomical dimensions and provided information that was in agreement and in higher detail than information based on clinical examination, cross-sectional 2D MRI analysis and histopathological reports. High-quality pelvic 3D models were rendered with the characteristics and resolution to allow identification and detailed viewing of the spatial relationship between anatomical structures.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
To our knowledge, this is the first preliminary study to evaluate the role of MRI-based 3D pelvic models for investigating paraurethral masses. This is a feasible technique and may prove a useful addition to conventional 2D MRI. Further prospective studies are required to evaluate this modality for investigating such lesions and planning appropriate management.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==A Study of Volumetric Variations of Basal Nuclei in the Normal Human Brain by Magnetic Resonance Imaging== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28078760 Clin Anat. 2017 Mar;30(2):175-82. PMID: 28078760]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Elkattan A, Mahdy A, Eltomey M, Ismail R.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Anatomy, Tanta University of Medical Sciences, Tanta, Egypt.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Knowledge of the effects of healthy aging on brain structures is necessary to identify abnormal changes due to diseases. Many studies have demonstrated age-related volume changes in the brain using MRI. 60 healthy individuals who had normal MRI aged from 20 years to 80 years were examined and classified into three groups: Group I: 21 persons; nine males and 12 females aging between 20-39 years old. Group II: 22 persons; 11 males and 11 females aging between 40-59 years old. Group III: 17 persons; eight males and nine females aging between 60-80 years old. Volumetric analysis was done to evaluate the effect of age, gender and hemispheric difference in the caudate and putamen by the [http://slicer.org '''3D Slicer'''] 4.3.3.1 software using 3D T1-weighted images. Data were analyzed by student's unpaired t test, ANOVA and regression analysis. The volumes of the measured and corrected caudate nuclei and putamen significantly decreased with aging in males. There was a statistically insignificant relation between the age and the volume of the measured caudate nuclei and putamen in females but there was a statistically significant relation between the age and the corrected caudate nuclei and putamen. There was no significant difference on the caudate and putamen volumes between males and females. There was no significant difference between the right and left caudate nuclei volumes. There was a leftward asymmetry in the putamen volumes. The results can be considered as a base to track individual changes with time (aging and CNS diseases). &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==MITK-OpenIGTLink for Combining Open-Source Toolkits in Real-Time Computer-Assisted Interventions== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/27687984 Int J Comput Assist Radiol Surg. 2017 Mar;12(3):351-61. PMID: 27687984]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Klemm M, Kirchner T, Gröhl J, Cheray D, Nolden M, Seitel A, Hoppe H, Maier-Hein L, Franz AM.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Laboratory for Computer-Assisted Medicine, Department of Electrical Engineering and Information Technology, Offenburg University, Offenburg, Germany.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' PURPOSE:&lt;br /&gt;
Due to rapid developments in the research areas of medical imaging, medical image processing and robotics, computer-assisted interventions (CAI) are becoming an integral part of modern patient care. From a software engineering point of view, these systems are highly complex and research can benefit greatly from reusing software components. This is supported by a number of open-source toolkits for medical imaging and CAI such as the medical imaging interaction toolkit (MITK), the public software library for ultrasound imaging research (PLUS) and [http://slicer.org '''3D Slicer''']. An independent inter-toolkit communication such as the open image-guided therapy link (OpenIGTLink) can be used to combine the advantages of these toolkits and enable an easier realization of a clinical CAI workflow.&lt;br /&gt;
&amp;lt;br&amp;gt;METHODS:&lt;br /&gt;
MITK-OpenIGTLink is presented as a network interface within MITK that allows easy to use, asynchronous two-way messaging between MITK and clinical devices or other toolkits. Performance and interoperability tests with MITK-OpenIGTLink were carried out considering the whole CAI workflow from data acquisition over processing to visualization.&lt;br /&gt;
&amp;lt;br&amp;gt;RESULTS:&lt;br /&gt;
We present how MITK-OpenIGTLink can be applied in different usage scenarios. In performance tests, tracking data were transmitted with a frame rate of up to 1000 Hz and a latency of 2.81 ms. Transmission of images with typical ultrasound (US) and greyscale high-definition (HD) resolutions of [Formula: see text] and [Formula: see text] is possible at up to 512 and 128 Hz, respectively.&lt;br /&gt;
&amp;lt;br&amp;gt;CONCLUSION:&lt;br /&gt;
With the integration of OpenIGTLink into MITK, this protocol is now supported by all established open-source toolkits in the field. This eases interoperability between MITK and toolkits such as PLUS or [http://slicer.org '''3D Slicer'''] and facilitates cross-toolkit research collaborations. MITK and its submodule MITK-OpenIGTLink are provided open source under a BSD-style license (http://mitk.org).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Increased Cerebellar Gray Matter Volume in Head Chefs== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28182712 PLoS One. 2017 Feb 9;12(2):e0171457.  PMID: 28182712] | [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5300254/pdf/pone.0171457.pdf  PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Cerasa A, Sarica A, Martino I, Fabbricatore C, Tomaiuolo F, Rocca F, Caracciolo M, Quattrone A.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Istituto di Bioimmagini e Fisiologia Molecolare, Consiglio Nazionale delle Ricerche, Catanzaro, Italy.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:'''OBJECTIVE:&lt;br /&gt;
Chefs exert expert motor and cognitive performances on a daily basis. Neuroimaging has clearly shown that that long-term skill learning (i.e., athletes, musicians, chess player or sommeliers) induces plastic changes in the brain thus enabling tasks to be performed faster and more accurately. How a chef's expertise is embodied in a specific neural network has never been investigated.&lt;br /&gt;
&amp;lt;br&amp;gt;METHODS:&lt;br /&gt;
Eleven Italian head chefs with long-term brigade management expertise and 11 demographically-/ psychologically- matched non-experts underwent morphological evaluations.&lt;br /&gt;
&amp;lt;br&amp;gt;RESULTS:&lt;br /&gt;
Voxel-based analysis performed with SUIT, as well as, automated volumetric measurement assessed with Freesurfer, revealed increased gray matter volume in the cerebellum in chefs compared to non-experts. The most significant changes were detected in the anterior vermis and the posterior cerebellar lobule. The magnitude of the brigade staff and the higher performance in the Tower of London test correlated with these specific gray matter increases, respectively.&lt;br /&gt;
&amp;lt;br&amp;gt;CONCLUSIONS:&lt;br /&gt;
We found that chefs are characterized by an anatomical variability involving the cerebellum. This confirms the role of this region in the development of similar expert brains characterized by learning dexterous skills, such as pianists, rock climbers and basketball players. However, the nature of the cellular events underlying the detected morphological differences remains an open question.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Carasa-PlosOne2017-fig2.jpg|thumb|300px| Sample color-coded automated brain segmentation results.&lt;br /&gt;
A 3D surface image (created with  [http://slicer.org '''3D Slicer''']  v 4.6, www.slicer.org) showing typical automated subcortical segmentation of the cerebellum performed by FreeSurfer (v 5.3). Scatter plot of the mean normalized volumes of the left and right cerebellar cortex for each single subject has been plotted. Advanced neuroimaging analysis reveals bilateral cerebellar volumetric increase in the chef group with respect to non-expert individuals.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Tumor Heterogeneity Assessed by Texture Analysis on Contrast-Enhanced CT in Lung Adenocarcinoma: Association with Pathologic Grade== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28430603 Oncotarget. 2017 Feb 16.  PMID: 28430603]  | [http://www.impactjournals.com/oncotarget/index.php?journal=oncotarget&amp;amp;page=article&amp;amp;op=download&amp;amp;path%5B%5D=15399&amp;amp;path%5B%5D=49197 PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Liu Y, Liu S, Qu F, Li Q, Cheng R, Ye Z.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Radiology, Tianjin Medical University Cancer Institute and Hospital, National Clinical Research Center of Cancer, Key Laboratory of Cancer Prevention and Therapy, Tianjin, China.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' To investigate whether texture features on contrast-enhanced computed tomography (CECT) images of lung adenocarcinoma have association with pathologic grade.Methods A cohort of 148 patients with surgically operated adenocarcinoma was retrospectively reviewed. Fifty-four CT features of the primary lung tumor were extracted from CECT images using open-source [http://slicer.org/ '''3D Slicer'''] software; meanwhile, enhancement homogeneity was evaluated by two radiologists using visual assessment. Multivariate logistic regression analysis was performed to determine significant image indicator of pathologic grade. Results Tumors of intermediate grade were more likely to be never smokers (P=0.020). Enhancement heterogeneity by visual assessment showed no statistical difference between intermediate grade and high grade (P=0.671). Among those 54 features, 29 of them were significantly associated with pathologic grade. Multivariate logistic regression analyses identified F33 (Homogeneity 1) (P=0.005) and F38 (Inverse Variance) (P=0.032) as unique independent image indicators of pathologic grade, and the AUC calculated from this model (AUC=0.834) was higher than clinical model (AUC=0.615) (P=0.0001).Conclusions Our study revealed that texture analysis on CECT images could be helpful in predicting pathologic grade of lung adenocarcinoma.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Liu-Oncotarget2017.png|thumb|300px|  Example of CT images showing segmentation of lung tumor. Semiautomatic tumor segmentation was done on every slice of the tumor using [http://slicer.org/ '''3D Slicer'''] (a), and the 3D view of the segmented tumor (b) which was shown in yellow.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==SEEG Assistant: A 3D Slicer Extension to Support Epilepsy Surgery== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/28231759 BMC Bioinformatics. 2017 Feb 23;18(1):124.  PMID: 28231759] | [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5324222/pdf/12859_2017_Article_1545.pdf  PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Narizzano M, Arnulfo G, Ricci S, Toselli B, Tisdall M, Canessa A, Fato MM, Cardinale F.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Informatics, Bioengineering Robotics and System engineering (DIBRIS), University of Genoa, Genova, Italy.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' In the evaluation of Stereo-Electroencephalography (SEEG) signals, the physicist's workflow involves several operations, including determining the position of individual electrode contacts in terms of both relationship to grey or white matter and location in specific brain regions. These operations are (i) generally carried out manually by experts with limited computer support, (ii) hugely time consuming, and (iii) often inaccurate, incomplete, and prone to errors.&lt;br /&gt;
&amp;lt;br&amp;gt;RESULTS:&lt;br /&gt;
In this paper we present SEEG Assistant, a set of tools integrated in a single [http://slicer.org '''3D Slicer''']  extension, which aims to assist neurosurgeons in the analysis of post-implant structural data and hence aid the neurophysiologist in the interpretation of SEEG data. SEEG Assistant consists of (i) a module to localize the electrode contact positions using imaging data from a thresholded post-implant CT, (ii) a module to determine the most probable cerebral location of the recorded activity, and (iii) a module to compute the Grey Matter Proximity Index, i.e. the distance of each contact from the cerebral cortex, in order to discriminate between white and grey matter location of contacts. Finally, exploiting [http://slicer.org '''3D Slicer''']  capabilities, SEEG Assistant offers a Graphical User Interface that simplifies the interaction between the user and the tools. SEEG Assistant has been tested on 40 patients segmenting 555 electrodes, and it has been used to identify the neuroanatomical loci and to compute the distance to the nearest cerebral cortex for 9626 contacts. We also performed manual segmentation and compared the results between the proposed tool and gold-standard clinical practice. As a result, the use of SEEG Assistant decreases the post implant processing time by more than 2 orders of magnitude, improves the quality of results and decreases, if not eliminates, errors in post implant processing.&lt;br /&gt;
&amp;lt;br&amp;gt;CONCLUSIONS:&lt;br /&gt;
The SEEG Assistant Framework for the first time supports physicists by providing a set of open-source tools for post-implant processing of SEEG data. Furthermore, SEEG Assistant has been integrated into [http://slicer.org '''3D Slicer'''] , a software platform for the analysis and visualization of medical images, overcoming limitations of command-line tools.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Narizzano-BMCBioinformatics2017-fig3.jpg|thumb|300px| CPE out performs manual segmentation in complex and critical cases. a As an example of SEEG complexity, we show MRI and thresholded post-implant CT scans for one subject from our cohort. Contacts are shown as groups of white voxels. This case illustrates the complexity of SEEG implants with electrode shafts following non-planar directions (e.g. X), shafts targeting almost the same geometrical point (e.g. R and R’). b CPE segments all contacts (green spheres) belonging to each electrode from post-implant CT scans, represented here as red 3D meshes obtained tessellating the thresholded data to ease visualization. c Show the right pial surface with 3D post-implant thresholded-CT meshes and the cut plane used in panel d where the example of X and X’ electrodes are shown. Those examples represent the case of non-planar insertion trajectories which yielded an artefactually fused electrode. CPE integrating the knowledge of the electrode model can segment the contact positions more accurately than visual inspection.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Associations of Radiomic Data Extracted from Static and Respiratory-Gated CT Scans with Disease Recurrence in Lung Cancer Patients Treated with SBRT== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28046060 PLoS One. 2017 Jan 3;12(1):e0169172.  PMID: 28046060]| [http://journals.plos.org/plosone/article/file?id=10.1371/journal.pone.0169172&amp;amp;type=printable  PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Huynh E, Coroller TP, Narayan V, Agrawal V, Romano J, Franco I, Parmar C, Hou Y, Mak RH, Aerts HJ.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Radiation Oncology, Dana-Farber Cancer Institute, Brigham and Women's Hospital, Harvard Medical School, Boston, USA. &lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Radiomics aims to quantitatively capture the complex tumor phenotype contained in medical images to associate them with clinical outcomes. This study investigates the impact of different types of computed tomography (CT) images on the prognostic performance of radiomic features for disease recurrence in early stage non-small cell lung cancer (NSCLC) patients treated with stereotactic body radiation therapy (SBRT). 112 early stage NSCLC patients treated with SBRT that had static free breathing (FB) and average intensity projection (AIP) images were analyzed. Nineteen radiomic features were selected from each image type (FB or AIP) for analysis based on stability and variance. The selected FB and AIP radiomic feature sets had 6 common radiomic features between both image types and 13 unique features. The prognostic performances of the features for distant metastasis (DM) and locoregional recurrence (LRR) were evaluated using the concordance index (CI) and compared with two conventional features (tumor volume and maximum diameter). P-values were corrected for multiple testing using the false discovery rate procedure. None of the FB radiomic features were associated with DM, however, seven AIP radiomic features, that described tumor shape and heterogeneity, were (CI range: 0.638-0.676). Conventional features from FB images were not associated with DM, however, AIP conventional features were (CI range: 0.643-0.658). Radiomic and conventional multivariate models were compared between FB and AIP images using cross validation. The differences between the models were assessed using a permutation test. AIP radiomic multivariate models (median CI = 0.667) outperformed all other models (median CI range: 0.601-0.630) in predicting DM. None of the imaging features were prognostic of LRR. Therefore, image type impacts the performance of radiomic models in their association with disease recurrence. AIP images contained more information than FB images that were associated with disease recurrence in early stage NSCLC patients treated with SBRT, which suggests that AIP images may potentially be more optimal for the development of an imaging biomarker.&lt;br /&gt;
&lt;br /&gt;
'''Funding:'''&lt;br /&gt;
*U01 CA190234/CA/NCI NIH HHS/United States&lt;br /&gt;
*U24 CA194354/CA/NCI NIH HHS/United States&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:journal.pone.0169172.g001.PNG|thumb|300px| A) Examples of free breathing (FB) and average intensity projection (AIP) images, demonstrating the observable differences in tumor phenotype between each image type. AIP images were reconstructed from 4D computed tomography (CT) scans. B) Schematic representation of the radiomics workflow for FB and AIP images. I. CT images of the patient are acquired and the tumor is segmented. II. Imaging features (radiomic and conventional features) are extracted from the tumor volume. III. Radiomic features undergo a feature dimension reduction process to generate a low-dimensional feature set based on feature stability and variance. IV. Imaging features are then analyzed with clinical outcomes to evaluate their prognostic power. FB and AIP radiomics features are compared. A set of 644 radiomic features was extracted from tumor volumes isolated from FB or AIP images (Fig 1B) using an in-house Matlab 2013 toolbox and [http://slicer.org '''3D Slicer'''] 4.4.0 software]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Early Experiences of Planning Stereotactic Radiosurgery using 3D Printed Models of Eyes with Uveal Melanomas== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/28203052 Clin Ophthalmol. 2017 Jan 31;11:267-71.  PMID: 28203052] | [http://www.ncbi.nlm.nih.gov/pmc/articles/PMC5298814/pdf/opth-11-267.pdf  PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Furdová A, Sramka M, Thurzo A, Furdová A.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Ophthalmology, Faculty of Medicine, Comenius University, Bratislava, Slovakia.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' OBJECTIVE:&lt;br /&gt;
The objective of this study was to determine the use of 3D printed model of an eye with intraocular tumor for linear accelerator-based stereotactic radiosurgery.&lt;br /&gt;
&amp;lt;br&amp;gt;METHODS:&lt;br /&gt;
The software for segmentation ([http://slicer.org '''3D Slicer''']) created virtual 3D model of eye globe with tumorous mass based on tissue density from computed tomography and magnetic resonance imaging data. A virtual model was then processed in the slicing software (Simplify3D®) and printed on 3D printer using fused deposition modeling technology. The material that was used for printing was polylactic acid.&lt;br /&gt;
&amp;lt;br&amp;gt;RESULTS:&lt;br /&gt;
In 2015, stereotactic planning scheme was optimized with the help of 3D printed model of the patient's eye with intraocular tumor. In the period 2001-2015, a group of 150 patients with uveal melanoma (139 choroidal melanoma and 11 ciliary body melanoma) were treated. The median tumor volume was 0.5 cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; (0.2-1.6 cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;). The radiation dose was 35.0 Gy by 99% of dose volume histogram.&lt;br /&gt;
&amp;lt;br&amp;gt;CONCLUSION:&lt;br /&gt;
The 3D printed model of eye with tumor was helpful in planning the process to achieve the optimal scheme for irradiation which requires high accuracy of defining the targeted tumor mass and critical structures.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:jFurdova-ClinOphtalmol2017-fig3.jpg|thumb|300px| A) Virtual model of the eye, outer view; arrow indicates optic nerve. A virtual 3D model of eye globe with tumor based on tissue density was created from CT and MRI data by using the [http://slicer.org '''3D Slicer'''] software for segmentation.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Intra-rater Variability in Low-grade Glioma Segmentation== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/27837437 J Neurooncol. 2017 Jan;131(2):393-402. PMID: 27837437]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Bø HK, Solheim O, Jakola AS, Kvistad KA, Reinertsen I, Berntsen EM.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Radiology and Nuclear Medicine, St. Olavs University Hospital, Trondheim, Norway. &lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Assessment of size and growth are key radiological factors in low-grade gliomas (LGGs), both for prognostication and treatment evaluation, but the reliability of LGG-segmentation is scarcely studied. With a diffuse and invasive growth pattern, usually without contrast enhancement, these tumors can be difficult to delineate. The aim of this study was to investigate the intra-observer variability in LGG-segmentation for a radiologist without prior segmentation experience. Pre-operative 3D FLAIR images of 23 LGGs were segmented three times in the software [http://slicer.org '''3D Slicer''']. Tumor volumes were calculated, together with the absolute and relative difference between the segmentations. To quantify the intra-rater variability, we used the Jaccard coefficient comparing both two (J2) and three (J3) segmentations as well as the Hausdorff Distance (HD). The variability measured with J2 improved significantly between the two last segmentations compared to the two first, going from 0.87 to 0.90 (p = 0.04). Between the last two segmentations, larger tumors showed a tendency towards smaller relative volume difference (p = 0.07), while tumors with well-defined borders had significantly less variability measured with both J2 (p = 0.04) and HD (p &amp;lt; 0.01). We found no significant relationship between variability and histological sub-types or Apparent Diffusion Coefficients (ADC). We found that the intra-rater variability can be considerable in serial LGG-segmentation, but the variability seems to decrease with experience and higher grade of border conspicuity. Our findings highlight that some criteria defining tumor borders and progression in 3D volumetric segmentation is needed, if moving from 2D to 3D assessment of size and growth of LGGs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Hybrid Positron Emission Tomography Segmentation of Heterogeneous Lung Tumors using 3D Slicer: Improved Growcut Algorithm with Threshold Initialization== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/28149920 J. Med. Imag. 2017 Jan-Mar;4(1), 011009.  PMID: 28149920] | [[media:Thomas-JMI2017.pdf | PDF]]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Thomas HM, Devakumar D, Sasidharan B, Bowen SR, Heck DK, Jebaseelan J, Samuel E.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' VIT University, School of Advanced Sciences, Department of Physics, Vellore, Tamil Nadu 632004, India.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' This paper presents an improved GrowCut (IGC), a positron emission tomography-based segmentation algorithm, and tests its clinical applicability. Contrary to the traditional method that requires the user to provide the initial seeds, the IGC algorithm starts with a threshold-based estimate of the tumor and a three- dimensional morphologically grown shell around the tumor as the foreground and background seeds, respectively. The repeatability of IGC from the same observer at multiple time points was compared with the traditional GrowCut algorithm. The algorithm was tested in 11 nonsmall cell lung cancer lesions and validated against the clinician-defined manual contour and compared against the clinically used 25% of the maximum standardized uptake value [SUV-(max)], 40% SUV&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;, and adaptive threshold methods. The time to edit IGC-defined functional volume to arrive at the gross tumor volume (GTV) was compared with that of manual contouring. The repeatability of the IGC algorithm was very high compared with the traditional GrowCut (p = 0.003) and demonstrated higher agreement with the manual contour with respect to threshold-based methods. Compared with manual contouring, editing the IGC achieved the GTV in significantly less time (p = 0.11). The IGC algorithm offers a highly repeatable functional volume and serves as an effective initial guess that can well minimize the time spent on labor-intensive manual contouring.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:jThomas-JMI2017-fig3.png|thumb|300px| A) A representative example of the uncertainty volume observed with the [http://slicer.org '''3D Slicer'''] GrowCutmethod. (a) The lesion was delineated in three separate runs. There was variability with each run and the composite error in the variability calculated as the uncertainty volume is highlighted in green in (b).]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Pre-clinical Validation of Virtual Bronchoscopy using 3D Slicer== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/27325238 Int J Comput Assist Radiol Surg. 2017 Jan;12(1):25-38. PMID: 27325238] &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Nardelli P, Jaeger A, O'Shea C, Khan KA, Kennedy MP, Cantillon-Murphy P.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' School of Engineering, University College Cork, College Road, Cork, Ireland.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Lung cancer still represents the leading cause of cancer-related death, and the long-term survival rate remains low. Computed tomography (CT) is currently the most common imaging modality for lung diseases recognition. The purpose of this work was to develop a simple and easily accessible virtual bronchoscopy system to be coupled with a customized electromagnetic (EM) tracking system for navigation in the lung and which requires as little user interaction as possible, while maintaining high usability.&lt;br /&gt;
Methods:&lt;br /&gt;
The proposed method has been implemented as an extension to the open-source platform, [http://slicer.org '''3D Slicer''']. It creates a virtual reconstruction of the airways starting from CT images for virtual navigation. It provides tools for pre-procedural planning and virtual navigation, and it has been optimized for use in combination with a [Formula: see text] of freedom EM tracking sensor. Performance of the algorithm has been evaluated in ex vivo and in vivo testing.&lt;br /&gt;
Results:&lt;br /&gt;
During ex vivo testing, nine volunteer physicians tested the implemented algorithm to navigate three separate targets placed inside a breathing pig lung model. In general, the system proved easy to use and accurate in replicating the clinical setting and seemed to help choose the correct path without any previous experience or image analysis. Two separate animal studies confirmed technical feasibility and usability of the system.&lt;br /&gt;
Conclusions:&lt;br /&gt;
This work describes an easily accessible virtual bronchoscopy system for navigation in the lung. The system provides the user with a complete set of tools that facilitate navigation towards user-selected regions of interest. Results from ex vivo and in vivo studies showed that the system opens the way for potential future work with virtual navigation for safe and reliable airway disease diagnosis.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Anatomical Study and Locating Nasolacrimal Duct on Computed Topographic Image== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/27977487 J Craniofac Surg. 2017 Jan;28(1):275-9. PMID: 27977487]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Zhang S, Cheng Y, Xie J, Wang Z, Zhang F, Chen L, Feng Y, Wang G.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Endocrinology, First Hospital of Jilin University, Changchun, China.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' We performed a novel anatomical and radiological investigation to understand the structure of nasolacrimal duct (NLD) and to provide data to help surgeons locate the openings of NLD efficiently based on landmarks.&lt;br /&gt;
MATERIALS AND METHODS:&lt;br /&gt;
We examined the NLD region using computed tomography images of 133 individuals and 6 dry skull specimens. Multiplanar reconstruction of the computed tomography images was performed, and the anatomical features of the NLD were studied in the coronal, sagittal, and axial planes. The long and short diameters of NLD were measured along its cross-section. The position of NLD was localized using the nostril, concha nasalis media, and medial orbital corner as landmarks. The free and open source software, 3D Slicer, was used for the segmentation of the NLD and 3D visualization of the superior and inferior openings of the NLD.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The length, angle, and diameter of NLD were significantly influenced by the age in females compared to those in males. The inferior opening of the NLD could be located efficiently using the nostril and the midsagittal line while the superior opening of NLD could be located using the medial orbital corner. Third, [http://slicer.org '''3D Slicer'''] enabled us to measure the distance between the skin and the bony structure in the image.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
Our study indicates that the sex and age of the patient should be considered while selecting the optimal NLD stent for a patient, and that the precise location of NLD in reference to landmarks can simplify the surgical difficulties and reduce the risk of injury during the transnasal operation. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Open Wedge High Tibial Osteotomy using Three-Dimensional Printed Models: Experimental Analysis using Porcine Bone== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/27876267 Knee. 2017 Jan;24(1):16-22. PMID: 27876267]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Kwun JD, Kim HJ, Park J, Park IH, Kyung HS.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Orthopaedic Surgery, School of Medicine, Kyungpook National University, Daegu, Republic of Korea. &lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' BACKGROUND:&lt;br /&gt;
The purpose of this study was to evaluate the usefulness of three-dimensional (3D) printed models for open wedge high tibial osteotomy (HTO) in porcine bone.&lt;br /&gt;
METHODS:&lt;br /&gt;
Computed tomography (CT) images were obtained from 10 porcine knees and 3D imaging was planned using the [http://slicer.org '''3D Slicer'''] program. The osteotomy line was drawn from the three centimeters below the medial tibial plateau to the proximal end of the fibular head. Then the osteotomy gap was opened until the mechanical axis line was 62.5% from the medial border along the width of the tibial plateau, maintaining the posterior tibial slope angle. The wedge-shaped 3D-printed model was designed with the measured angle and osteotomy section and was produced by the 3D printer. The open wedge HTO surgery was reproduced in porcine bone using the 3D-printed model and the osteotomy site was fixed with a plate. Accuracy of osteotomy and posterior tibial slope was evaluated after the osteotomy.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The mean mechanical axis line on the tibial plateau was 61.8±1.5% from the medial tibia. There was no statistically significant difference (P=0.160). The planned and post-osteotomy correction wedge angles were 11.5±3.2° and 11.4±3.3°, and the posterior tibial slope angle was 11.2±2.2° pre-osteotomy and 11.4±2.5° post-osteotomy. There were no significant differences (P=0.854 and P=0.429, respectively).&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
This study showed that good results could be obtained in high tibial osteotomy by using 3D printed models of porcine legs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Go to &amp;lt;big&amp;gt;[https://www.slicer.org/wiki/Main_Page/SlicerCommunity-2016 2016]:: [http://wiki.slicer.org/slicerWiki/index.php/Main_Page/SlicerCommunity-2015 2015] :: [http://wiki.slicer.org/slicerWiki/index.php/Main_Page/SlicerCommunity-2011-2014 2014-2011] :: [http://wiki.slicer.org/slicerWiki/index.php/Main_Page/SlicerCommunity-2005-2010 2010-2005]&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Hherhold</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Main_Page/SlicerCommunity&amp;diff=54936</id>
		<title>Main Page/SlicerCommunity</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Main_Page/SlicerCommunity&amp;diff=54936"/>
		<updated>2017-09-19T01:23:42Z</updated>

		<summary type="html">&lt;p&gt;Hherhold: Added 2017 paper on Cretaceous Hell Ant - microCT visualized with Slicer&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=3D Slicer Enabled Research=&lt;br /&gt;
&lt;br /&gt;
[http://www.slicer.org 3D Slicer] is a free open source software package distributed under a BSD style [[Projects/slicerWeb:LicenseText|license]]. The majority of funding for the development of 3D slicer comes from a number of grants and contracts from the National Institutes of Health. See [http://www.slicer.org/wiki/Documentation/4.x/Acknowledgments Slicer Acknowledgments] for more information.&lt;br /&gt;
&lt;br /&gt;
This page focuses on research that was done outside of our immediate collaboration community. That community is represented in the [http://www.slicer.org/publications/pages/display/?collection=11 publication database].&lt;br /&gt;
&lt;br /&gt;
We invite you to provide information on how you are using 3D Slicer to produce peer-reviewed research. Information about the scientific impact of this tool is helpful in raising funding for the continued support.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;[https://www.slicer.org/wiki/Main_Page/SlicerCommunity-2016 2016]:: [http://wiki.slicer.org/slicerWiki/index.php/Main_Page/SlicerCommunity-2015 2015] :: [http://wiki.slicer.org/slicerWiki/index.php/Main_Page/SlicerCommunity-2011-2014 2014-2011] :: [http://wiki.slicer.org/slicerWiki/index.php/Main_Page/SlicerCommunity-2005-2010 2010-2005]&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=2017=&lt;br /&gt;
==A new genus of hell ants from the Cretaceous (Hymenoptera: Formicidae: Haidomyrmecini) with a novel head structure== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://onlinelibrary.wiley.com/doi/10.1111/syen.12253 Systematic Entomology. 2017 Sep 4;42(4):837-846.]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Barden, Phillip A., Herhold, Hollister W., Grimaldi, David A.&lt;br /&gt;
&lt;br /&gt;
'''Institutions:'''  Department of Biological Sciences, New Jersey Institute of Technology, Newark, NJ, U.S.A. (PB), Department of Invertebrate Zoology, American Museum of Natural History, New York, NY, U.S.A. (PB, HH, DG)&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' An unusual Cretaceous trap jaw ant is described from Burmese amber dated to the Late Cretaceous. Linguamyrmex vladi gen.n. sp.n. is distinguished by an unusual suite of morphological characters indicating specialized predatory behaviour and an adaptive strategy no longer found among modern ant lineages. The clypeus, highly modified as in other closely related haidomyrmecine hell ants, is equipped with a paddle-like projection similar to Ceratomyrmex. X-ray imaging reveals that this clypeal paddle is reinforced, most probably with sequestered metals. Presumably this fortified clypeal structure was utilized in tandem with scythe-like mandibles to pin and potentially puncture soft-bodied prey. This unique taxon, which stresses the diversity of stem-group ants, is discussed in the context of modern and other Cretaceous trap jaw ant species.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Linguamyrmex_vladi.png|thumb|300px| Three-dimensional reconstruction and two-dimensional X-ray ‘slices’ of Linguamyrmex vladi. (A) Three-dimensional reconstruction of specimen BuPH-01 in lateral view. Some elements are irrecoverable in X-ray imaging due to the similar attenuation properties of both amber and thin cuticle. Scale bar, 0.75 mm. (B) Lateral view of head capsule, mandibles and clypeal paddle. Planes C and D correspond with panels C and D, respectively. Scale bar, 0.2 mm. (C) Cross-section of clypeal paddle from oblique dorsal view. Labels demonstrate approximate pixel ‘grey values’ for each fossil material, which in turn represent relative X-ray attenuation levels. (D) Cross-section of clypeal paddle from frontal view. Scale bar, 0.08 mm in each cross-section.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Automated Catheter Navigation with Electromagnetic Image Guidance==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
||&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28362578 IEEE Trans Biomed Eng. 2017 Aug;64(8):1972-9.  PMID: 28362578]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Jaeger HA, Nardelli P, O'Shea C, Tugwell J, Khan KA, Power T, O'Shea M, Kennedy MP, Cantillon-Murphy P.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' School of Engineering, University College Cork, Cork, Ireland.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose: ''' This paper describes a novel method of controlling an endoscopic catheter using an automated catheter tensioning system with the objective of providing clinicians with improved manipulation capabilities within the patient. Catheters are used in many clinical procedures to provide access to the cardiopulmonary system. Control of such catheters is performed manually by the clinicians using a handle, typically actuating a single or opposing set of pull-wires. Such catheters are generally actuated in a single plane, requiring the clinician to rotate the catheter handle to navigate the system. The automation system described here allows closed-loop control of a custom bronchial catheter in tandem with an electromagnetic tracking of the catheter tip and image guidance using [http://www.slicer.org '''3D Slicer''']. An electromechanical drive train applies tension to four pull-wires to steer the catheter tip, with the applied force constantly monitored though force sensing load-cells. The applied tension is controlled through a PC connected joystick. An electromagnetic sensor embedded in the catheter tip enables constant real-time position tracking while a working channel provides a route for endoscopic instruments. The system is demonstrated and tested in both a breathing lung model and a preclinical animal study. Navigation to predefined targets in the subject's airways using the joystick while using virtual image guidance and electromagnetic tracking was demonstrated. Average targeting times were 24 seconds and 10 seconds respectively for the breathing lung and live animal studies. This paper presents the first reported remote controlled bronchial working channel catheter utilizing electromagnetic tracking and has many implications for future development in endoscopic and catheter based procedures.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Quantitative CT ventriculography for Assessment and Monitoring of Hydrocephalus: a Pilot Study and Description of Method in Subarachnoid Hemorrhage (SAH)== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28456742 World Neurosurg. 2017 Aug;104:136-141.  PMID: 28456742]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Multani JS, Oermann EK, Titano J, Mascitelli J, Nicol K, Feng R, Skovrlj B, Pain M, Mocco JD, Bederson JB, Costa A, Shrivastava R.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Neurological Surgery, Mount Sinai Health System, New York, NY, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' There is no facile quantitative method for monitoring hydrocephalus (HCP).&lt;br /&gt;
OBJECTIVE:&lt;br /&gt;
We propose quantitative CT ventriculography (qCTV) as a novel computer vision tool for empirically assessing HCP in patients with subarachnoid hemorrhage (SAH).&lt;br /&gt;
METHODS:&lt;br /&gt;
Twenty patients with SAH who were evaluated for ventriculoperitoneal shunt (VPS) placement were selected for inclusion. Ten patients with normal CT head (CTH) were analyzed as negative controls. CTH scans were segmented both manually and automatically (qCTV) to generate measures of ventricular volume.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Median manually calculated ventricular volume was 36.1cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;(IQR 30-115cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;), which was similar to a median qCTV measured volume of 37.5cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; (IQR 32-118cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;) (p=0.796). Patients undergoing VPS placement demonstrated an increase in ventricular volume on qCTV from 21cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; to 40cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; on Day T-2, and 51cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; by Day 0, a change of 144%. This contrasts with patients who did not require shunting whose ventricular volumes decreased from 16 to 14cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; on Day T-2, and 13cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; by Day 0, with an average overall decrease in volume of 19% (p=0.001). Average change in ventricular volume predicted which patients would require VPS placement, successfully identifying 7/10 patients (p=0.004). Using an optimized cutoff of change in ventricular volume of 2.5cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; identified all patients who went on to require VPS placement (10/10, p=0.011).&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
qCTV is a reliable means of quantifying ventricular volume and hydrocephalus. This technique offers a new tool for monitoring neurosurgical patients for hydrocephalus, and may be beneficial for use in future research studies as well as the routine care of patients with hydrocephalus.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==What are the True Volumes of SEGA Tumors? Reliability of Planimetric and Popular Semi-automated Image Segmentation Methods==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
||&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28321524 MAGMA. 2017 Aug;30(4):397-405. PMID: 28321524]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Stawiski K, Trelińska J, Baranska D, Dachowska I, Kotulska K, Jóźwiak S, Fendler W, Młynarski W.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Biostatistics and Translational Medicine, Hematology and Diabetology, Medical University of Lodz, Lodz, Poland.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose: '''OBJECTIVE:&lt;br /&gt;
To evaluate the reliability of the standard planimetric methodology of volumetric analysis and three different open-source semi-automated approaches of brain tumor segmentation.&lt;br /&gt;
MATERIALS AND METHODS:&lt;br /&gt;
The volumes of subependymal giant cell astrocytomas (SEGA) examined by 30 MRI studies of 10 patients from a previous everolimus-related trial (EMINENTS study) were estimated using four methods: planimetric method (modified MacDonald ellipsoid method), ITK-Snap (pixel clustering, geodesic active contours, region competition methods), [http://www.slicer.org '''3D Slicer'''] (level-set thresholding), and NIRFast (k-means clustering, Markov random fields). The methods were compared, and a trial simulation was performed to determine how the choice of approach could influence the final decision about progression or response.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Intraclass correlation coefficient was high (0.95; 95% CI 0.91-0.98). The planimetric method always overestimated the size of the tumor, while virtually no mean difference was found between ITK-Snap and [http://www.slicer.org '''3D Slicer'''] (P = 0.99). NIRFast underestimated the volume and presented a proportional bias. During the trial simulation, a moderate level of agreement between all the methods (kappa 0.57-0.71, P &amp;lt; 0.002) was noted.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
Semi-automated segmentation can ease oncological follow-up but the moderate level of agreement between segmentation methods suggests that the reference standard volumetric method for SEGA tumors should be revised and chosen carefully, as the selection of volumetry tool may influence the conclusion about tumor progression or response.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==MRI Visible Fe&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;O&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt; Polypropylene Mesh: 3D Reconstruction of Spatial Relation to Bony Pelvis and Neurovascular Structures== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28124074 Int Urogynecol J. 2017 Aug;28(8):1131-8.  PMID: 28124074]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Chen L, Lenz F, Alt CD, Sohn C, De Lancey JO, Brocker KA.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Pelvic Floor Research Group, Biomedical Engineering Department, University of Michigan, Ann Arbor, MI, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:'''&lt;br /&gt;
INTRODUCTION AND HYPOTHESIS:&lt;br /&gt;
To demonstrate mesh magnetic resonance imaging (MRI) visibility in living women, the feasibility of reconstructing the full mesh course in 3D, and to document its spatial relationship to pelvic anatomical structures.&lt;br /&gt;
&amp;lt;br&amp;gt;METHODS:&lt;br /&gt;
This is a proof of concept study of three patients from a prospective multi-center trial evaluating women with anterior vaginal mesh repair using a MRI-visible Fe&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;O&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt; polypropylene implant for pelvic floor reconstruction. High-resolution sagittal T2-weighted (T2w) sequences, transverse T1-weighted (T1w) FLASH 2D, and transverse T1w FLASH 3D sequences were performed to evaluate Fe&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;O&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt; polypropylene mesh MRI visibility and overall post-surgical pelvic anatomy 3 months after reconstructive surgery. Full mesh course in addition to important pelvic structures were reconstructed using the  [http://slicer.org '''3D Slicer''']® software program based on T1w and T2w MRI.&lt;br /&gt;
&amp;lt;br&amp;gt;RESULTS:&lt;br /&gt;
Three women with POP-Q grade III cystoceles were successfully treated with a partially absorbable MRI-visible anterior vaginal mesh with six fixation arms and showed no recurrent cystocele at the 3-month follow-up examination. The course of mesh in the pelvis was visible on MRI in all three women. The mesh body and arms could be reconstructed allowing visualization of the full course of the mesh in relationship to important pelvic structures such as the obturator or pudendal vessel nerve bundles in 3D.&lt;br /&gt;
&amp;lt;br&amp;gt;CONCLUSIONS:&lt;br /&gt;
The use of MRI-visible Fe3O4 polypropylene meshes in combination with post-surgical 3D reconstruction of the mesh and adjacent structures is feasible suggesting that it might be a useful tool for evaluating mesh complications more precisely and a valuable interactive feedback tool for surgeons and mesh design engineers.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Three-dimensional Printing of X-ray Computed Tomography Datasets with Multiple Materials using Open-source Data Processing== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28231405 Anat Sci Educ. 2017 Jul;10(4):383-91. PMID: 28231405]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Sander IM, McGoldrick MT, Helms MN, Betts A, van Avermaete A, Owers E, Doney E, Liepert T, Niebur G, Liepert D, Leevy WM.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Biological Sciences, College of Science, University of Notre Dame, Notre Dame, Indiana., USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Advances in three-dimensional (3D) printing allow for digital files to be turned into a &amp;quot;printed&amp;quot; physical product. For example, complex anatomical models derived from clinical or pre-clinical X-ray computed tomography (CT) data of patients or research specimens can be constructed using various printable materials. Although 3D printing has the potential to advance learning, many academic programs have been slow to adopt its use in the classroom despite increased availability of the equipment and digital databases already established for educational use. Herein, a protocol is reported for the production of enlarged bone core and accurate representation of human sinus passages in a 3D printed format using entirely consumer-grade printers and a combination of free-software platforms. The comparative resolutions of three surface rendering programs were also determined using the sinuses, a human body, and a human wrist data files to compare the abilities of different software available for surface map generation of biomedical data. Data shows that  [http://slicer.org '''3D Slicer''']  provided highest compatibility and surface resolution for anatomical 3D printing. Generated surface maps were then 3D printed via fused deposition modeling (FDM printing). In conclusion, a methodological approach that explains the production of anatomical models using entirely consumer-grade, fused deposition modeling machines, and a combination of free software platforms is presented in this report. The methods outlined will facilitate the incorporation of 3D printed anatomical models in the classroom.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==A New Device for Fiducial Registration of Image-guided Navigation System for Liver RFA== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28718001 Int J Comput Assist Radiol Surg. 2017 Jul 17. PMID: 28718001]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Doba N, Fukuda H, Numata K, Hao Y, Hara K, Nozaki A, Kondo M, Chuma M, Tanaka K, Takebayashi S, Koizumi N, Kobayashi A, Tokuda J, Maeda S.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Gastroenterological Center, Yokohama City University Medical Center, Yokohama, Japan.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Radiofrequency ablation for liver tumors (liver RFA) is widely performed under ultrasound guidance. However, discriminating between the tumor and the needle is often difficult because of cavitation caused by RFA-induced coagulation. An unclear ultrasound image can lead to complications and tumor residue. Therefore, image-guided navigation systems based on fiducial registration have been developed. Fiducial points are usually set on a patient's skin. But the use of internal fiducial points can improve the accuracy of navigation. In this study, a new device is introduced to use internal fiducial points using 2D US.&lt;br /&gt;
METHODS:&lt;br /&gt;
3D Slicer as the navigation software, Polaris Vicra as the position sensor, and two target tumors in a 3D abdominal phantom as puncture targets were used. Also, a new device that makes it possible to obtain tracking coordinates in the body was invented. First, two-dimensional reslice images from the CT images using [http://slicer.org '''3D Slicer''']  were built. A virtual needle was displayed on the two-dimensional reslice image, reflecting the movement of the actual needle after fiducial registration. A phantom experiment using three sets of fiducial point configurations: one conventional case using only surface points, and two cases in which the center of the target tumor was selected as a fiducial point was performed. For each configuration, one surgeon punctured each target tumor ten times under guidance from the [http://slicer.org '''3D Slicer''']  display. Finally, a statistical analysis examining the puncture error was performed.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The puncture error for each target tumor decreased significantly when the center of the target tumor was included as one of the fiducial points, compared with when only surface points were used.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
This study introduces a new device to use internal fiducial points and suggests that the accuracy of image-guided navigation systems for liver RFA can be improved by using the new device.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==MultiXplore: Visual Exploration Platform for Multimodal Neuroimaging Data== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28712912 J Neurosci Methods. 2017 Jul 13;290:1-12. PMID: 28712912]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Bakhshmand SM, Khan AR, de Ribaupierre S, Eagleson R.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Biomedical Engineering Graduate Program, University of Western Ontario, London, Ontario, Canada.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' BACKGROUND:&lt;br /&gt;
Construction of brain functional and structural networks by neuroimaging methods facilitates inter-modal studies. These type of studies often demand exploration tools to carry out functional-structural discoveries and answer questions regarding the anatomical basis of brain networks.&lt;br /&gt;
NEW METHOD:&lt;br /&gt;
This paper describes the design and development of a software module for interactive visualization and exploration of dual-modal brain networks. Our objective was to equip the user with a research tool to investigate brain connectivity matrices while visualizing relevant anatomical landmarks within a 3D volumetric view. In order to create this view, MultiXplore was designed to load data from both structural and diffusion MRI and connectivity matrices.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Once user starts to select desired cells through an interactive matrix unit, associated axonal fiber pathways and grey matter regions are generated and displayed. Integration and visualization of functional and structural networks in this 3D interactive framework was successfully implemented and tested.&lt;br /&gt;
COMPARISON WITH EXISTING METHOD(S):&lt;br /&gt;
MultiXplore contributes to the transition of connectivity visualization techniques from node-link format to an anatomically more realistic graphical form and assists scientists in relating connectivity matrices to their anatomical correlates. This module also benefits from additional novel functionalities to annotate and differentiate fibers in a large bundle. Unlike traditional graph displays, interactive functionality helps in the inspection and visualization of relevant structures without cluttering the scene with excessive items.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
This module was designed and developed as a plugin to [http://slicer.org '''3D Slicer'''] imaging platform and is accessible for neuroimaging researchers through NITRC (http://www.nitrc.org/projects/multixplore/).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Optimization of a Novel Large Field of View Distortion Phantom for MR-only Treatment Planning== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28497476 J Appl Clin Med Phys. 2017 Jul;18(4):51-61.  PMID: 28497476]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Price RG, Knight RA, Hwang KP, Bayram E, Nejad-Davarani SP, Glide-Hurst CK.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Radiation Oncology, Henry Ford Health System, Detroit, MI, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' PURPOSE:&lt;br /&gt;
MR-only treatment planning requires images of high geometric fidelity, particularly for large fields of view (FOV). However, the availability of large FOV distortion phantoms with analysis software is currently limited. This work sought to optimize a modular distortion phantom to accommodate multiple bore configurations and implement distortion characterization in a widely implementable solution.&lt;br /&gt;
METHOD AND MATERIALS:&lt;br /&gt;
To determine candidate materials, 1.0 T MR and CT images were acquired of twelve urethane foam samples of various densities and strengths. Samples were precision-machined to accommodate 6 mm diameter paintballs used as landmarks. Final material candidates were selected by balancing strength, machinability, weight, and cost. Bore sizes and minimum aperture width resulting from couch position were tabulated from the literature (14 systems, 5 vendors). Bore geometry and couch position were simulated using MATLAB to generate machine-specific models to optimize the phantom build. Previously developed software for distortion characterization was modified for several magnet geometries (1.0 T, 1.5 T, 3.0 T), compared against previously published 1.0 T results, and integrated into the [http://slicer.org '''3D Slicer'''] application platform.&lt;br /&gt;
RESULTS:&lt;br /&gt;
All foam samples provided sufficient MR image contrast with paintball landmarks. Urethane foam (compressive strength ∼1000 psi, density ~20 lb/ft&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; ) was selected for its accurate machinability and weight characteristics. For smaller bores, a phantom version with the following parameters was used: 15 foam plates, 55 × 55 × 37.5 cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; (L×W×H), 5,082 landmarks, and weight ~30 kg. To accommodate &amp;gt; 70 cm wide bores, an extended build used 20 plates spanning 55 × 55 × 50 cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; with 7,497 landmarks and weight ~44 kg. Distortion characterization software was implemented as an external module into [http://slicer.org '''3D Slicer''']'s plugin framework and results agreed with the literature.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
The design and implementation of a modular, extendable distortion phantom was optimized for several bore configurations. The phantom and analysis software will be available for multi-institutional collaborations and cross-validation trials to support MR-only planning.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Validation of a Method for &amp;quot;Dose of the Day&amp;quot; Calculation in Head-neck Tomotherapy by using Planning CT-to-MVCT Deformable Image Registration== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28619289 Phys Med. 2017 Jul;39:73-79.   PMID: 28619289]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Branchini M, Fiorino C, Dell'Oca I, Belli ML, Perna L, Di Muzio N, Calandrino R, Broggi S.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Medical Physics Department, San Raffaele Scientific Institute, Milano, Italy.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' PURPOSE:&lt;br /&gt;
The aim of this study was to test the feasibility and dosimetric accuracy of a method that employs planning CT-to-MVCT deformable image registration (DIR) for calculation of the daily dose for head and neck (HN) patients treated with Helical Tomotherapy (HT).&lt;br /&gt;
METHODS:&lt;br /&gt;
For each patient, the planning kVCT (CTplan) was deformably registered to the MVCT acquired at the 15th therapy session (MV15) with a B-Spline Free Form algorithm using Mattes mutual information (open-source software [http://slicer.org '''3D Slicer''']), resulting in a deformed CT (CTdef). On the same day as MVCT15, a kVCT was acquired with the patient in the same treatment position (CT15). The original HT plans were recalculated both on CTdef and CT15, and the corresponding dose distributions were compared; local dose differences &amp;lt;2% of the prescribed dose (DD2%) and 2D/3D gamma-index values (2%-2mm) were assessed respectively with Mapcheck SNC Patient software (Sun Nuclear) and with [http://slicer.org '''3D Slicer'''].&lt;br /&gt;
RESULTS:&lt;br /&gt;
On average, 87.9%±1.2% of voxels were found for DD2% (on average 27 slices available for each patient) and 94.6%±0.8% of points passed the 2D gamma analysis test while the 3D gamma test was satisfied in 94.8%±0.8% of body's voxels.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
This study represents the first demonstration of the dosimetric accuracy of kVCT-to-MVCT DIR for dose of the day computations. The suggested method is sufficiently fast and reliable to be used for daily delivered dose evaluations in clinical strategies for adaptive Tomotherapy of HN cancer.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==SLIDE: Automatic Spine Level Identification System using a Deep Convolutional Neural Network== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28361323 Int J Comput Assist Radiol Surg. 2017 Jul;12(7):1189-98.  PMID: 28361323]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Hetherington J, Lessoway V, Gunka V, Abolmaesumi P, Rohling R.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Electrical and Computer Engineering, The University of British Columbia, Vancouver, Canada.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' PURPOSE:&lt;br /&gt;
Percutaneous spinal needle insertion procedures often require proper identification of the vertebral level to effectively and safely deliver analgesic agents. The current clinical method involves &amp;quot;blind&amp;quot; identification of the vertebral level through manual palpation of the spine, which has only 30% reported accuracy. Therefore, there is a need for better anatomical identification prior to needle insertion.&lt;br /&gt;
METHODS:&lt;br /&gt;
A real-time system was developed to identify the vertebral level from a sequence of ultrasound images, following a clinical imaging protocol. The system uses a deep convolutional neural network (CNN) to classify transverse images of the lower spine. Several existing CNN architectures were implemented, utilizing transfer learning, and compared for adequacy in a real-time system. In the system, the CNN output is processed, using a novel state machine, to automatically identify vertebral levels as the transducer moves up the spine. Additionally, a graphical display was developed and integrated within [http://slicer.org '''3D Slicer''']. Finally, an augmented reality display, projecting the level onto the patient's back, was also designed. A small feasibility study [Formula: see text] evaluated performance.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The proposed CNN successfully discriminates ultrasound images of the sacrum, intervertebral gaps, and vertebral bones, achieving 88% 20-fold cross-validation accuracy. Seventeen of 20 test ultrasound scans had successful identification of all vertebral levels, processed at real-time speed (40 frames/s).&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
A machine learning system is presented that successfully identifies lumbar vertebral levels. The small study on human subjects demonstrated real-time performance. A projection-based augmented reality display was used to show the vertebral level directly on the subject adjacent to the puncture site.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==A New Approach for Radiosynoviorthesis: A Dose-Optimized Planning method Based on Monte Carlo Simulation and Synovial Measurement using 3D Slicer and MRI== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28419533 Med Phys. 2017 Jul;44(7):3821-9.  PMID: 28419533]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Torres Berdeguez MB, Thomas S, Rafful P, Arruda Sanchez T, Medeiros Oliveira Ramos S, Albernaz MS, Vasconcellos de Sá L, Lopes de Souza SA, Mas Milian F, Xavier da Silva A.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Nuclear Engineering Department of Federal University of Rio de Janeiro, Rio de Janeiro, Brazil.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Recently, there has been a growing interest in a methodology for dose planning in radiosynoviorthesis to substitute fixed activity. Clinical practice based on fixed activity frequently does not embrace radiopharmaceutical dose optimization in patients. The aim of this paper is to propose and discuss a dose planning methodology considering the radiological findings of interest obtained by three-dimensional magnetic resonance imaging combined with Monte Carlo simulation in radiosynoviorthesis treatment applied to hemophilic arthropathy.&lt;br /&gt;
METHOD:&lt;br /&gt;
The parameters analyzed were: surface area of the synovial membrane (synovial size), synovial thickness and joint effusion obtained by 3D MRI of nine knees from nine patients on a SIEMENS AVANTO 1.5 T scanner using a knee coil. The [http://slicer.org '''3D Slicer'''] software performed both the semiautomatic segmentation and quantification of these radiological findings. A Lucite phantom 3D MRI validated the quantification methodology. The study used Monte Carlo N-Particle eXtended code version 2.6 for calculating the S-values required to set up the injected activity to deliver a 100 Gy absorbed dose at a determined synovial thickness. The radionuclides assessed were: 90Y, 32P, 188Re, 186Re, 153Sm, and 177Lu, and the present study shows their effective treatment ranges.&lt;br /&gt;
RESULT:&lt;br /&gt;
The quantification methodology was successfully tested, with an error below 5% for different materials. S-values calculated could provide data on the activity to be injected into the joint, considering no extra-articular leakage from joint cavity. Calculation of effective treatment range could assist with the therapeutic decision, with an optimized protocol for dose prescription in RSO.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
Using 3D Slicer software, this study focused on segmentation and quantification of radiological features such as joint effusion, synovial size and thickness, all obtained by 3D MRI in patients knees with hemophilic arthropathy. The combination of synovial size and thickness with the parameters obtained by Monte Carlo simulation such as effective treatment range and S-value, from which is calculated the injected activity, could be used for treatment planning in RSO. Data from this methodology could be a potential aid to clinical decision making by selecting the most suitable radionuclide; justifying the procedure, fractioning the dose and the calculated injected activity for children and adolescents, considering both the synovial size and thickness.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Retrospective Evaluation and SEEG Trajectory Analysis for Interactive Multi-trajectory Planner Assistant== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28710548 Int J Comput Assist Radiol Surg. 2017 Jul 14.  PMID: 28710548]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Scorza D, De Momi E, Plaino L, Amoroso G, Arnulfo G, Narizzano M, Kabongo L, Cardinale F.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
e-Health and Biomedical Applications Department, Vicomtech-IK4, Donostia-San Sebastián, Spain. &lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' PURPOSE:&lt;br /&gt;
Focal epilepsy is a neurological disease that can be surgically treated by removing area of the brain generating the seizures. The stereotactic electroencephalography (SEEG) procedure allows patient brain activity to be recorded in order to localize the onset of seizures through the placement of intracranial electrodes. The planning phase can be cumbersome and very time consuming, and no quantitative information is provided to neurosurgeons regarding the safety and efficacy of their trajectories. In this work, we present a novel architecture specifically designed to ease the SEEG trajectory planning using the [http://slicer.org '''3D Slicer'''] platform as a basis.&lt;br /&gt;
METHODS:&lt;br /&gt;
Trajectories are automatically optimized following criteria like vessel distance and insertion angle. Multi-trajectory optimization and conflict resolution are optimized through a selective brute force approach based on a conflict graph construction. Additionally, electrode-specific optimization constraints can be defined, and an advanced verification module allows neurosurgeons to evaluate the feasibility of the trajectory.&lt;br /&gt;
RESULTS:&lt;br /&gt;
A retrospective evaluation was performed using manually planned trajectories on 20 patients: the planning algorithm optimized and improved trajectories in 98% of cases. We were able to resolve and optimize the remaining 2% by applying electrode-specific constraints based on manual planning values. In addition, we found that the global parameters used discards 68% of the manual planned trajectories, even when they represent a safe clinical choice.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
Our approach improved manual planned trajectories in 98% of cases in terms of quantitative indexes, even when applying more conservative criteria with respect to actual clinical practice. The improved multi-trajectory strategy overcomes the previous work limitations and allows electrode optimization within a tolerable time span.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Canal Transportation, Unprepared Areas, and Dentin Removal after Preparation with BT-RaCe and ProTaper Next Systems== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28712638 J Endod. 2017 Jul 13. PMID: 28712638]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Brasil SC, Marceliano-Alves MF, Marques ML, Grillo JP, Lacerda MFLS, Alves FRF, Siqueira JF Jr, Provenzano JC.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Endodontics, Faculty of Dentistry, Estácio de Sá University, Rio de Janeiro, Brazil.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' BACKGROUND:&lt;br /&gt;
This study compared the shaping ability of ProTaper Next (Dentsply Sirona, Tulsa, OK) and BT-RaCe (FKG Dentaire, La Chaux-de-Fonds, Switzerland) instrument systems in the mesial canals of mandibular molars using micro-computed tomographic (micro-CT) imaging.&lt;br /&gt;
METHODS:&lt;br /&gt;
A total of 17 type IV mesial roots of extracted first mandibular molars were scanned using micro-CT imaging before and after root canal preparation with the 2 instrument systems. Both systems were used in the same root but alternating the mesial canals from root to root. The following parameters were analyzed: root canal volume, surface area, unprepared surface areas, transportation, canal/root width ratio, and preparation time.&lt;br /&gt;
RESULTS:&lt;br /&gt;
There were no statistically significant differences between the 2 systems for all evaluated parameters (P &amp;gt; .05). The unprepared surface areas for the full canal length and the apical 5-mm segment were 33% and 14% for BT-RaCe and 31% and 14% for ProTaper Next, respectively. After preparation, all root canals had a diameter that was not larger than 35% of the root diameter at the coronal and middle segments.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
The 2 systems showed no differences in any of the evaluated shaping parameters. None of the tested systems put the roots at risk of fracture because of excessive dentin removal.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Presurgical Planning for Supratentorial Lesions with Free 3D Slicer Software and Sina App== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28673889 World Neurosurg. 2017 Jun 30.   PMID: 28673889]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Chen JG, Han KW, Zhang DF, Li ZX, Li YM, Hou LJ.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  &lt;br /&gt;
Department of Neurosurgery, Shanghai Neurosurgical Institute, Changzheng Hospital, Shanghai, China.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Neuronavigation system is widely used in the localization of intracranial lesions with satisfactory accuracy. However, it's expensive and difficult to learn. Therefore, simple and practical augmented reality (AR) system using mobile devices might be an alternative technique.&lt;br /&gt;
OBJECTIVE:&lt;br /&gt;
We aim to introduce a mobile AR system for the localization of supratentorial lesions. Its practicability and accuracy were examined by clinical application in patients and comparison with standard neuronavigation system.&lt;br /&gt;
METHODS:&lt;br /&gt;
Three-dimensional (3D) model including lesions is created using [http://slicer.org '''3D Slicer''']. 2D image of this 3D model was obtained and overlapped on patients' head using Sina app. Registration was conducted with the assistance of anatomical landmarks and fiducial markers. Center of lesion projected on scalp was identified with our mobile AR system and standard neuronavigation system, respectively. Distance difference between centers identified by these two systems was measured.&lt;br /&gt;
RESULT:&lt;br /&gt;
Our mobile AR system was simple and accurate in the localization of supratentorial lesions with a mean distance difference of 4.4 ± 1.1 mm. Registration added on an average of 141.7 ± 39 seconds to operation time. There was no statistically significant difference for the required time among three registrations (P=0.646).&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
The mobile AR system presents an alternative technology for image-guided neurosurgery and proves to be practical and reliable. The technique contributes to optimal presurgical planning for supratentorial lesions, especially in the absence of neuronavigation system.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Nerve Atrophy in Trigeminal Neuralgia Due to Neurovascular Compression and its Association with Surgical Outcomes after Microvascular Decompression== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28638946 Acta Neurochir (Wien). 2017 Jun 21.   PMID: 28638946]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Cheng J, Meng J, Liu W, Zhang H, Hui X, Lei D.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  &lt;br /&gt;
Department of Neurosurgery, West China Hospital, Sichuan University, Sichuan, China.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' BACKGROUND:&lt;br /&gt;
Idiopathic trigeminal neuralgia (TN) is caused by neurovascular compression and is often related to morphological changes in the trigeminal nerve. The aim of this study was to quantitatively measure atrophic changes of trigeminal nerves in patients with TN, and to further investigate whether nerve atrophy affected the efficacy of microvascular decompression (MVD).&lt;br /&gt;
METHODS:&lt;br /&gt;
We conducted a prospective case-control study of 60 consecutive patients with TN and 30 sex- and age-matched healthy controls. All subjects underwent high-resolution three-dimensional MRI. The volume of the cisternal segment of trigeminal nerves was measured and compared using [http://slicer.org '''3D Slicer'''] software. Patients with TN underwent primary MVD and regular follow-up for at least 2 years. Associations of nerve atrophy with patient characteristics and operative outcomes were analyzed.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The mean volume of the affected trigeminal nerve was significantly reduced in comparison to that of the nonaffected side (65.8 ± 21.1 versus 77.9 ± 19.3 mm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;, P = 0.001) and controls (65.8 ± 21.1 versus 74.7 ± 16.5 mm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;, P = 0.003). Fifty-two patients (86.7%) achieved complete pain relief without medication immediately after surgery, and 77.6% of patients were complete pain relief at the 2-year follow-up. The Spearman correlation test showed that there was a positive correlation (r = 0.46, P = 0.018) between the degree of trigeminal nerve indentation and nerve atrophy. In multivariate logistic regression analysis, two factors, indentation on nerve root (OR = 2.968, P = 0.022) and degree of nerve atrophy (OR = 1.18, P = 0.035), were associated with the long-term outcome.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
TN is associated with atrophy on the affected nerve. Furthermore, greater nerve atrophy is associated with more severe trigeminal nerve indentation and better long-term outcome following MVD.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Complete Thoracolumbar Fracture-dislocation with Intact Neurologic Function: Explanation of a Novel Cord Saving Mechanism== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28648115 J Spinal Cord Med. 2017 Jun 26:1-10.   PMID: 28648115]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Rahimizadeh A, Asgari N, Rahimizadeh A.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Department of Neurosurgery , Pars Advanced and Minimally Invasive Medical Manners Research Center, Pars Hospital, Iran University of Medical Science, Tehran, Iran.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' BACKGROUND:&lt;br /&gt;
The thoracolumbar junction from T11 to L2 is a common site of injury in which fracture and dislocations are the most prevalent ones occurring at this location. Fracture dislocation is defined as failure of all three columns of the spine with gross displacement. Considering the significant violence necessary to produce fracture dislocations, these injuries are often associated with major neural deficit, with the majority of casualties becoming paraplegic immediately. Preservation of neurological function following complete fracture dislocation is quite rare entity.&lt;br /&gt;
OBJECTIVE:&lt;br /&gt;
To represent the possibility of existence of a preservation mechanism for functional integrity of cord despite spinal gross fracture dislocation by reproducing the injury on a plastic model and simulating a corresponding model using [http://slicer.org '''3D Slicer'''] software, detailed description the pathomechanism of neurologic sparing.&lt;br /&gt;
CASE REPORT:&lt;br /&gt;
A 19-year-old female who sustained severe thoracolumbar fracture dislocation but with normal neurology is presented. Despite the severity of the condition, the diagnosis was initially missed due to associated vital injuries.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Combined posterior and anterior surgery resulted in optimal coronal and sagittal alignment, as well as proper stabilization without any complication. At 9-year follow-up, the patient was found to be doing well.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
The prognosis for complete recovery with preplanned surgical intervention in thoracolumbar injuries affecting all three columns but with normal neurologic function is promising based on images, plastic models and 3D simulated model based on digital images.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Device-specific Evaluation of Intraventricular Left Ventricular Assist Device Position by Quantitative Coaxiality Analysis== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28601303 J Surg Res. 2017 Jun 1;213:110-4..   PMID: 28601303]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Anselmi A, Collin S, Haigron P, Verhoye JP, Flecher E.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  INSERM U1099, Rennes, France.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' BACKGROUND:&lt;br /&gt;
Patient-specific anatomy may influence the final intraventricular positioning of inflow cannula in left ventricular assist device (LVAD) recipients. An association exists between such positioning and clinical outcomes (specifically, orientation toward the interventricular septum has negative prognostic implications). Alternative commercially available LVADs are characterized by markedly different design, with potential consequences on intrathoracic fitting among individual patients.&lt;br /&gt;
MATERIAL AND METHODS:&lt;br /&gt;
A cohort of 13 LVAD recipients (either HeartMate II-group A or Jarvik 2000 Flowmaker-group B) was evaluated. On postoperative computed tomography scans, we reconstructed the implanted LVAD (semiautomatic segmentation), defined the target mitral orifice ([http://slicer.org '''3D Slicer'''] software), and built a coordinate system to quantify the coaxiality of the cannula with the mitral valve axis (angles φ and θ, expressed as percentage variation from the ideal value φ = θ = 0°).&lt;br /&gt;
RESULTS:&lt;br /&gt;
Group A presented significantly greater average percentage variation of the φ angle (significantly greater orientation of the intraventricular cannula toward the interventricular septum; 33.2% ± 32.1% versus 1.9% ± 0.9%, P = 0.001). Group A presented significantly greater average percentage variation of the θ angle (52.7% ± 23.6% versus 14.5% ± 6.3%, P = 0.013).&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
The device assessed in group B showed in the present series better average coaxiality with the mitral orifice. Such finding is related with its design (total intraventricular placement) and interaction with thoracic structures. The present method is being integrated in the development of LVAD virtual implantation tools and may help physicians in patient-specific selection among alternative devices.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Anser EMT: The First Open-Source Electromagnetic Tracking Platform for Image-Guided Interventions== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28357627 Int J Comput Assist Radiol Surg. 2017 Jun;12(6):1059-67. PMID: 28357627]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Jaeger HA, Franz AM, O'Donoghue K, Seitel A, Trauzettel F, Maier-Hein L, Cantillon-Murphy P.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  IHU Strasbourg, Strasbourg, France.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' PURPOSE:&lt;br /&gt;
Electromagnetic tracking is the gold standard for instrument tracking and navigation in the clinical setting without line of sight. Whilst clinical platforms exist for interventional bronchoscopy and neurosurgical navigation, the limited flexibility and high costs of electromagnetic tracking (EMT) systems for research investigations mitigate against a better understanding of the technology's characterization and limitations. The Anser project provides an open-source implementation for EMT with particular application to image-guided interventions.&lt;br /&gt;
METHODS:&lt;br /&gt;
This work provides implementation schematics for our previously reported EMT system which relies on low-cost acquisition and demodulation techniques using both National Instruments and Arduino hardware alongside MATLAB support code. The system performance is objectively compared to other commercial tracking platforms using the Hummel assessment protocol.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Positional accuracy of 1.14 mm and angular rotation accuracy of [Formula: see text] are reported. Like other EMT platforms, Anser is susceptible to tracking errors due to eddy current and ferromagnetic distortion. The system is compatible with commercially available EMT sensors as well as the Open Network Interface for image-guided therapy (OpenIGTLink) for easy communication with visualization and medical imaging toolkits such as MITK and [http://slicer.org '''3D Slicer'''].&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
By providing an open-source platform for research investigations, we believe that novel and collaborative approaches can overcome the limitations of current EMT technology.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==The Effects of Iterative Reconstruction and Kernel Selection on Quantitative Computed Tomography Measures of Lung Density== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28376262 Med Phys. 2017 Jun;44(6):2267-80. PMID: 28376262] &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Rodriguez A, Ranallo FN, Judy PF, Fain SB.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Department of Medical Physics, University of Wisconsin School of Medicine and Public Health, Madison, WI, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose: ''' To determine the effects of iterative reconstruction (IR) and high frequency kernels on quantitative computed tomography (qCT) density measures at reduced X-ray dose.&lt;br /&gt;
MATERIALS AND METHODS:&lt;br /&gt;
The COPDGene 2 Phantom (CTP 698, The Phantom Laboratory, Salem, NY) with four embedded lung mimicking foam densities (12lb, 20lb, and 4lb), as well as water, air, and acrylic reference inserts was imaged using a GE 64 slice CT750 HD scanner in helical mode with four current-time products ranging from 12-100 mAs. The raw acquired data was reconstructed using standard (STD - low frequency) and Bone (high frequency) kernels with filtered back projection (FBP), 100% ASIR, and Veo reconstruction algorithms. The reference density inserts were manually segmented using [http://slicer.org '''3D Slicer'''] and the mean, standard deviation, and histograms of the segmented regions were generated using  [http://fiji.sc/Fiji Fiji] for each reconstruction. Measurements of threshold values placed on the cumulative frequency distribution of voxels determined by these measured histograms at 5%, PD5phant , and 15%, PD15phant , (analogous to the relative area below -950 HU (RA950) and percent density 15 (PD15) in human lung emphysema quantification, respectively), were also performed.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The use of high-resolution kernels in conjunction with ASIR, and Veo did not significantly affect the mean Hounsfield units (HU) of each of the density standards (&amp;lt;4 HU deviation) and current-time products within the phantom when compared with the STD+FBP reconstruction conventionally used in clinical applications. A truncation of the scanner reported HU values at -1024 that shifts the mean towards more positive values was found to cause a systematic error in lower attenuating regions. Use of IR drove convergence toward the mean of measured histograms (~100-137% increase in the number measured voxels at the mean of the histogram) while the combination of Bone+ASIR preserved the standard deviation of HU values about the mean compared to STD+FBP, with the added effect of improved spatial resolution and accuracy in airway measures. PD5phant and PD15phant were most similar between the Bone+ASIR and STD+FBP in all regions except those affected by the -1024 truncation artifact.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
Extension of the scanner reportable HU values below the present limit of -1024 will mitigate discrepancies found in qCT lung densitometry in low-density regions. The density histogram became more sharply peaked and standard deviation was reduced for IR, directly effecting density thresholds, PD5phant and PD15phant, placed on the cumulative frequency distribution of each region in the phantom, which serve as analogs to RA950 and PD15 typically used in lung density quantitation. The combination of high frequency kernels (Bone) with ASIR mitigates this effect and preserves density measures derived from the image histogram. Moreover, previous studies have shown improved accuracy of qCT airway measures of wall thickness (WT) and wall area percentage (WA%) when using high frequency kernels in combination with ASIR to better represent airway walls. The results therefore suggest an IR approach for accurate assessment of airway and parenchymal density measures in the lungs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Infantile Cranial Fasciitis: Case-based Review and Operative Technique== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28451777 Childs Nerv Syst. 2017 Jun;33(6):899-908.  PMID: 28451777]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Flouty OE, Piscopo AJ, Holland MT, Abode-Iyamah K, Bruch L, Menezes AH, Dlouhy BJ.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Neurosurgery, University of Iowa Hospitals and Clinics, Iowa City, IA, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Cranial fasciitis (CF) is an uncommon benign primary lesion of the skull that typically affects the pediatric age group. Due to the rarity of CF, no prospective studies exist. Earliest description of this condition dates to 1980. The limited scientific and clinical literature regarding CF is dominated by case reports. For these reasons, questions pertaining to the true incidence, genetic risk factors, prognosis, and long-term outcome remain unanswered.&lt;br /&gt;
DISCUSSION:&lt;br /&gt;
Clinically, CF presents as a firm, painless, growing scalp mass that is typically not considered in the differential diagnosis. Preoperative pathognomonic signs and symptoms are absent, and imaging features are often nonspecific. Treatment is typically through complete surgical resection, at which time histopathological examination confirms the diagnosis of CF. Reconstruction of the skull defect in the child is critical. Autograft techniques help maintain a rigid construct that integrates with the native skull while preserving its continued ability to grow. Generally, a good outcome is observed with complete resection.&lt;br /&gt;
EXEMPLARY CASE:&lt;br /&gt;
We report a case of CF in an infant with emphasis on operative nuances and early follow-up results.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
CF is a rare fibroproliferative disease that has a poorly defined incidence and long-term follow-up. Due to its locally invasive nature and nonspecific presentation, CF is often difficult to differentiate from malignancies and infections. Complete surgical resection is the best approach for diagnosis and cure. Its occult clinical presentation often allows it to achieve considerable growth, leaving a sizeable skull defect following resection. Since CF presents in the pediatric population, allograft reconstruction is preferred over titanium mesh or other synthetic materials to allow osseous integration and continued uninterrupted skull growth.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Biomaterial Shell Bending with 3D-printed Templates in Vertical and Alveolar Ridge Augmentation: A Technical Note== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28215503 Oral Surg Oral Med Oral Pathol Oral Radiol. 2017 Jun;123(6):651-60. PMID: 28215503]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Draenert FG, Gebhart F, Mitov G, Neff A.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Oral &amp;amp; Maxillofacial Surgery, University of Marburg, Germany.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:'''&lt;br /&gt;
Alveolar ridge and vertical augmentations are challenging procedures in dental implantology. Even material blocks with an interconnecting porous system are never completely resorbed. Shell techniques combined with autologous bone chips are therefore the gold standard. Using biopolymers for these techniques is well documented. We applied three-dimensional (3-D) techniques to create an individualized bending model for the adjustment of a plane biopolymer membrane made of polylactide.&lt;br /&gt;
&amp;lt;BR&amp;gt;STUDY DESIGN:&lt;br /&gt;
Two cases with a vertical alveolar ridge defect in the maxilla were chosen. The cone beam computed tomography data were processed with a [http://slicer.org '''3D Slicer'''] and the Autodesk Meshmixer to generate data about the desired augmentation result. STL data were used to print a bending model. A 0.2-mm poly-D, L-lactic acid membrane (KLS Matin Inc., Tuttlingen, Germany) was bended accordingly and placed into the defect via a tunnel approach in both cases. A mesh graft of autologous bone chips and hydroxylapatite material was augmented beneath the shell, which was fixed with osteosynthesis screws.&lt;br /&gt;
&amp;lt;br&amp;gt;RESULTS:&lt;br /&gt;
The operative procedure was fast and without peri- or postoperative complications or complaints. The panoramic x-ray showed correct fitting of the material in the location. Bone quality at the time of implant placement was type II, resulting in good primary stability.&lt;br /&gt;
&amp;lt;br&amp;gt;CONCLUSIONS:&lt;br /&gt;
A custom-made 3-D model for bending confectioned biomaterial pieces is an appropriate method for individualized adjustment in shell techniques. The advantages over direct printing of the biomaterial shell and products on the market, such as the Xyoss shell (Reoss Inc., Germany), include cost-efficiency and avoidance of regulatory issues.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Application of the 3D Slicer Chest Imaging Platform Segmentation Algorithm for Large Lung Nodule Delineation== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28594880 PLoS One. 2017 Jun 8;12(6):e0178944.  PMID: 28594880] | [http://journals.plos.org/plosone/article?id=10.1371/journal.pone.0178944  PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Yip SSF, Parmar C, Blezek D, Estepar RSJ, Pieper S, Kim J, Aerts HJWL.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Radiation Oncology, Dana-Farber Cancer Institute, Brigham and Women's Hospital, Harvard Medical School, Boston, MA, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' PURPOSE:&lt;br /&gt;
Accurate segmentation of lung nodules is crucial in the development of imaging biomarkers for predicting malignancy of the nodules. Manual segmentation is time consuming and affected by inter-observer variability. We evaluated the robustness and accuracy of a publically available semiautomatic segmentation algorithm that is implemented in the 3D Slicer Chest Imaging Platform (CIP) and compared it with the performance of manual segmentation.&lt;br /&gt;
METHODS:&lt;br /&gt;
CT images of 354 manually segmented nodules were downloaded from the LIDC database. Four radiologists performed the manual segmentation and assessed various nodule characteristics. The semiautomatic CIP segmentation was initialized using the centroid of the manual segmentations, thereby generating four contours for each nodule. The robustness of both segmentation methods was assessed using the region of uncertainty (δ) and Dice similarity index (DSI). The robustness of the segmentation methods was compared using the Wilcoxon-signed rank test (pWilcoxon&amp;lt;0.05). The Dice similarity index (DSIAgree) between the manual and CIP segmentations was computed to estimate the accuracy of the semiautomatic contours.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The median computational time of the CIP segmentation was 10 s. The median CIP and manually segmented volumes were 477 ml and 309 ml, respectively. CIP segmentations were significantly more robust than manual segmentations (median δCIP = 14ml, median dsiCIP = 99% vs. median δmanual = 222ml, median dsimanual = 82%) with pWilcoxon~10-16. The agreement between CIP and manual segmentations had a median DSIAgree of 60%. While 13% (47/354) of the nodules did not require any manual adjustment, minor to substantial manual adjustments were needed for 87% (305/354) of the nodules. CIP segmentations were observed to perform poorly (median DSIAgree≈50%) for non-/sub-solid nodules with subtle appearances and poorly defined boundaries.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
Semi-automatic CIP segmentation can potentially reduce the physician workload for 13% of nodules owing to its computational efficiency and superior stability compared to manual segmentation. Although manual adjustment is needed for many cases, CIP segmentation provides a preliminary contour for physicians as a starting point.&lt;br /&gt;
&lt;br /&gt;
'''Funding:'''&lt;br /&gt;
*U01 CA190234/CA/NCI NIH HHS/United States&lt;br /&gt;
*U24 CA194354/CA/NCI NIH HHS/United States&lt;br /&gt;
*R01 HL116931/HL/NHLBI NIH HHS/United States&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Yip-PLoSOne2017.png|thumb|300px| Comparison of manual (left) and CIP-based (right) segmentation.&lt;br /&gt;
Yellow shaded region indicated the disagreement (or region of uncertainty) between contours performed by four radiologists (bottom left) or different CIP-based seed locations (bottom right). In this example, the region of uncertainty for manual segmentation was 3222 ml while the region was only 46 ml for the CIP-based segmentation. dsi&amp;lt;sub&amp;gt;CIP&amp;lt;/sub&amp;gt; was ≈ 100%, while dsi&amp;lt;sub&amp;gt;manual&amp;lt;/sub&amp;gt; was 88%. ]]]&lt;br /&gt;
|}&lt;br /&gt;
==3D Printed Pathological Sectioning Boxes to Facilitate Radiological-Pathological Correlation in Hepatectomy Cases== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/?term=28596154 J Clin Pathol. 2017 Jun 8.  PMID: 28596154]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Trout AT, Batie MR, Gupta A, Sheridan RM, Tiao GM, Towbin AJ.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Radiology, Cincinnati Children's Hospital Medical Center, Cincinnati, OH, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Radiogenomics promises to identify tumour imaging features indicative of genomic or proteomic aberrations that can be therapeutically targeted allowing precision personalised therapy. An accurate radiological-pathological correlation is critical to the process of radiogenomic characterisation of tumours. An accurate correlation, however, is difficult to achieve with current pathological sectioning techniques which result in sectioning in non-standard planes. The purpose of this work is to present a technique to standardise hepatic sectioning to facilitateradiological-pathological correlation. We describe a process in which three-dimensional (3D)-printed specimen boxes based on preoperative cross-sectional imaging (CT and MRI) can be used to facilitate pathological sectioning in standard planes immediately on hepatic resection enabling improved tumour mapping. We have applied this process in 13 patients undergoing hepatectomy and have observed close correlation between imaging and gross pathology in patients with both unifocal and multifocal tumours.&lt;br /&gt;
Following image review, a clinical engineering specialist (MRB) digitally isolates the liver from the cross-sectional imaging study using open-source software [http://www.slicer.org '''3D Slicer'''].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Retrospective Validation of a Computer-Assisted Quantification Model of Intracerebral Hemorrhage Volume on Accuracy, Precision, and Acquisition Time, Compared with Standard ABC/2 Manual Volume Calculation== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28596188 AJNR Am J Neuroradiol. 2017 Jun 8.  PMID: 28596188]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Xue W, Vegunta S, Zwart CM, Aguilar MI, Patel AC, Hoxworth JM, Demaerschalk BM, Mitchell JR.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Biomedical Informatics, Arizona State University, Scottsdale, AZ, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' BACKGROUND AND PURPOSE:&lt;br /&gt;
Intracerebral hemorrhage accounts for 6.5%-19.6% of all acute strokes. Initial intracerebral hemorrhage volume and expansion are both independent predictors of clinical outcomes and mortality. Therefore, a rapid, unbiased, and precise measurement of intracerebral hemorrhage volume is a key component of clinical management. The most commonly used method, ABC/2, results in overestimation. We developed an interactive segmentation program, SegTool, using a novel graphic processing unit, level set algorithm. Until now, the speed, bias, and precision of SegTool had not been validated.&lt;br /&gt;
MATERIALS AND METHODS:&lt;br /&gt;
In a single stroke academic center, 2 vascular neurologists and 2 neuroradiologists independently performed a test-retest experiment that involved repeat measurements of static, unchanging intracerebral hemorrhage volumes on CT from 76 intracerebral hemorrhage cases. Measurements were made with SegTool and ABC/2. True intracerebral hemorrhage volumes were estimated from a consensus of repeat manual tracings by 2 operators. These data allowed us to estimate measurement bias, precision, and speed. Computer-assisted measurements were made with an intensity-threshold algorithm in [http://www.slicer.org 3D Slicer].&lt;br /&gt;
RESULTS:&lt;br /&gt;
The measurements with SegTool were not significantly different from the true intracerebral hemorrhage volumes, while ABC/2 overestimated volume by 45%. The interrater measurement variability with SegTool was 50% less than that with ABC/2. The average measurement times for ABC/2 and SegTool were 35.7 and 44.6 seconds, respectively.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
SegTool appears to have attributes superior to ABC/2 in terms of accuracy and interrater reliability with a 9-second delay in measurement time (on average); hence, it could be useful in clinical trials and practice. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Theoretical Observation on Diagnosis Maneuver for Benign Paroxysmal Positional Vertigo== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28084876 Acta Otolaryngol. 2017 Jun;137(6):567-71. PMID: 28084876]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Yang XK, Zheng YY, Yang XG.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Neurology, Wenzhou People's Hospital, Wenzhou, Zhejiang, PR China.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' To make a comprehensive analysis with a variety of diagnostic maneuvers is conducive to the correct diagnosis and classification of BPPV.&lt;br /&gt;
OBJECTIVE:&lt;br /&gt;
Based on the standard spatial coordinate-based semicircular canal model for theoretical observation on diagnostic maneuvers for benign paroxysmal positional vertigo (BPPV) to analyze the meaning and key point of each step of the maneuver.&lt;br /&gt;
MATERIALS AND METHODS:&lt;br /&gt;
This study started by building a standard model of semicircular canal with space orientation by segmentation of the inner ear done with the [http://slicer.org '''3D Slicer'''] software based on MRI scans, then gives a demonstration and observation of BPPV diagnostic maneuvers by using the model.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The supine roll maneuver is mainly for diagnosis of lateral semicircular canal BPPV. The Modified Dix-Hallpike maneuver is more specific for the diagnosis of posterior semicircular canal BPPV. The side-lying bow maneuver designed here is theoretically suitable for diagnosis of anterior semicircular canal BPPV. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==High Expression of Glypican-1 Predicts Dissemination and Poor Prognosis in Glioblastomas== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28602885 World Neurosurg. 2017 Jun 5.  PMID: 28602885]&lt;br /&gt;
&lt;br /&gt;
'''Authors:'''Saito T, Sugiyama K, Hama S, Yamasaki F, Takayasu T, Nosaka R, Onishi S, Muragaki Y, Kawamata T, Kurisu K.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Neurosurgery, Hiroshima University, Graduate School of Biomedical and Health Science, Hiroshima, Japan.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' OBJECTIVE:&lt;br /&gt;
Glioblastoma (GBM) relapses locally or in a disseminated pattern, and is highly resistant to chemo-radiotherapy. Although dissemination is associated with poor prognosis for GBM patients, the clinico-pathological factors that promote dissemination have not been elucidated. Glypican-1 (GPC-1) is a heparin sulfate proteoglycan that is attached to the extracytoplasmic surface of the cell membrane and regulates cell motility. The aim of this study was to determine whether GPC-1 expression correlated with GBM dissemination and patient prognosis.&lt;br /&gt;
METHODS:&lt;br /&gt;
GPC-1 expression was examined by immunohistochemistry in 53 patients with GBM who received radiotherapy and temozolomide (TMZ) treatment. We assessed the relationship between dissemination and clinico-pathological factors, including GPC-1 expression. Additionally, we evaluated the relationship between GPC-1 expression and overall survival (OS) by uni- and multivariate analyses of a range of clinico-pathological factors, including age, Karnofsky Performance Status (KPS), extent of resection, and O6-methylguanine-DNA methyltransferase (MGMT) status.&lt;br /&gt;
To evaluate the extent of resection by 13 semi-automatic volumetry, we used [http://www.slicer.org '''3D Slicer'''], version 4.0 software.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Logistic regression analysis revealed that GPC-1 expression correlated with dissemination (P = 0.0116). Log-rank tests revealed that age, KPS, extent of resection, MGMT status, dissemination (P = 0.0008) and GPC-1 expression (P = 0.0011) were significantly correlated with OS. Multivariate analysis indicated that age, MGMT status, and GPC-1 expression were significantly correlated with OS. GPC-1 expression had the highest hazard ratio (2.392) among all regressors.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
GPC-1 expression significantly correlated with OS in GBM patients who received radiotherapy and TMZ treatment. GPC-1 expression can help predict the occurrence of dissemination and shorter OS in GBM patients.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Factors Affecting the Visual Outcome of Pituitary Adenoma Patients Treated with Endoscopic Transsphenoidal Surgery== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28583452 World Neurosurg. 2017 Jun 2.  PMID: 28583452]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Luomaranta T, Raappana A, Saarela V, Liinamaa MJ.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Ophthalmology, Oulu University Hospital, Oulu, Finland.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' OBJECTIVE:&lt;br /&gt;
To evaluate visual acuity (VA) and visual fields (VF) quantitatively before and after endoscopic transsphenoidal surgery (ETS), with special attention to prognostic factors such as the pituitary adenomas' (PAs') suprasellar extension (SSE), volume and the patients' age.&lt;br /&gt;
METHODS:&lt;br /&gt;
Medical records of 47 PA patients operated with ETS were evaluated. VA, VF and visual impairment score (VIS) were determined pre- (VISpre) and postoperatively (VISpost). The PA's SSE, volume and chiasmal contact and their correlation with visual function was pre- and postoperatively assessed. Each PA was preoperatively manually segmented from (typically from T1-weighted, contrast-enhanced, coronal) MRI planes of the patient using [http://www.slicer.org '''3D Slicer'''], a modelling software, which also reported the volume of the modeled PA.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The final cohort included 47 patients. VA improved in 54/76 eyes (71.0 %) after ETS and 69/76 eyes (90.7 %) gained normal VA. Postoperative VF recovery occurred in 32/37 (86.5 %) of the eyes. The mean VISchange was 12.0 (95% CI 7.7-16.3) and improved in all patients with tumor-related visual impairment (n=25). However, visual outcome was poorer when VISpre&amp;gt;40. When VISpre was 21-40, age linearly correlated with VIS improvement (p=0.03); younger patients had satisfactory and older poorer visual outcome. The mean SSE in patients with VF defects (n=20) was 16.6 mm (95% CI 13.3-19.9) and in patients with no VF defects (n=23) 6.6 mm (95% CI 4.9-8.3, p&amp;lt;0.001) and cut-off value for visual perturbations was 9.5 mm for SSE and 8.6 ml for PA volume (p&amp;lt;0.001 for both).&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
The visual outcome after ETS for PAs was excellent and significant complications rare. Severe preoperative visual impairment resulted poorer postoperative visual outcome. The SSE of PA was the most important predictor of visual outcome after ETS.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Clinical Outcomes of an Endoscopic Transclival and Transpetrosal Approach for Primary Skull Base Malignancies Involving the Clivus== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28574308 J Neurosurg. 2017 Jun 2:1-9.  PMID: 28574308]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Kim YH1, Jeon C, Se YB, Hong SD, Seol HJ, Lee JI, Park CK, Kim DG, Jung HW, Han DH, Nam DH, Kong DS.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Neurosurgery, Samsung Medical Center, Sungkyunkwan University School of Medicine, Seoul, Republic of Korea.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' OBJECTIVE The endoscopic endonasal approach for treating primary skull base malignancies involving the clivus is a formidable task. The authors hypothesized that tumor involvement of nearby critical anatomical structures creates hurdles to endoscopic gross-total resection (GTR). The aim of this study was to retrospectively review the clinical outcomes of patients who underwent an endoscopic endonasal approach to treat primary malignancies involving the clivus and to analyze prognostic factors for GTR. METHODS Between January 2009 and November 2015, 42 patients underwent the endoscopic endonasal approach for resection of primary skull base malignancies involving the clivus at 2 independent institutions. Clinical data; tumor locations within the clivus; and anatomical involvement of the cavernous or paraclival internal carotid artery, cisternal trigeminal nerve, hypoglossal canal, and dura mater were investigated to assess the extent of resection. Possible prognostic factors affecting GTR were also analyzed.  The preoperative tumor volume was measured radiographically with [http://www.slicer.org '''3D Slicer''']. RESULTS Of the 42 patients, 37 were diagnosed with chordomas and 5 were diagnosed with chondrosarcomas. The mean (± SD) preoperative tumor volume was 25.2 ± 30.5 cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; (range 0.8-166.7 cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;). GTR was achieved in 28 patients (66.7%) and subtotal resection in 14 patients (33.3%). All tumors were classified as upper (n = 17), middle (n = 17), or lower (n = 8) clival tumors based on clival involvement, and as central (24 [57.1%]) or paramedian (18 [42.9%]) based on laterality of the tumor. Univariate analysis identified the tumor laterality (OR 6.25, 95% CI 1.51-25.86; p = 0.011) as significantly predictive of GTR. In addition, the laterality of the tumor was found to be a statistically significant predictor in multivariate analysis (OR 41.16, 95% CI 1.12-1512.65; p = 0.043). CONCLUSIONS An endoscopic endonasal approach can provide favorable clinical and surgical outcomes. However, the tumor laterality should be considered as a potential obstacle to total removal.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==1.5 T Augmented Reality Navigated Interventional MRI: Paravertebral Sympathetic Plexus Injections== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28420598 Diagn Interv Radiol. 2017 May-Jun;23(3):227-32. PMID: 28420598]  |  [http://dirjournal.org/sayilar/62/buyuk/16323.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Marker DR, U Thainual P, Ungi T, Flammang AJ, Fichtinger G, Iordachita II, Carrino JA, Fritz J.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''   Russel H. Morgan Department of Radiology and Radiological Science, Johns Hopkins University School of Medicine, Baltimore, Maryland, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' The high contrast resolution and absent ionizing radiation of interventional magnetic resonance imaging (MRI) can be advantageous for paravertebral sympathetic nerve plexus injections. We assessed the feasibility and technical performance of MRI-guided paravertebral sympathetic injections utilizing augmented reality navigation and 1.5 T MRI scanner.&lt;br /&gt;
METHODS:&lt;br /&gt;
A total of 23 bilateral injections of the thoracic (8/23, 35%), lumbar (8/23, 35%) and hypogastric (7/23, 30%) paravertebral sympathetic plexus were prospectively planned in twelve human cadavers using a 1.5 Tesla (T) MRI scanner and augmented reality navigation system. MRI-conditional needles were used. Gadolinium-DTPA-enhanced saline was injected. Outcome variables included the number of control magnetic resonance images, target error of the needle tip, punctures of critical nontarget structures, distribution of the injected fluid, and procedure length. The isotropic 3D MR&lt;br /&gt;
images were transferred into the navigation module (PerkStation) of the [http://slicer.org '''3D Slicer'''] software for interactive 3D evaluation of the anatomy using its DICOM viewer function.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Augmented-reality navigated MRI guidance at 1.5 T provided detailed anatomical visualization for successful targeting of the paravertebral space, needle placement, and perineural paravertebral injections in 46 of 46 targets (100%). A mean of 2 images (range, 1-5 images) were required to control needle placement. Changes of the needle trajectory occurred in 9 of 46 targets (20%) and changes of needle advancement occurred in 6 of 46 targets (13%), which were statistically not related to spinal regions (P = 0.728 and P = 0.86, respectively) and cadaver sizes (P = 0.893 and P 0.859, respectively). The mean error of the needle tip was 3.9±1.7 mm. There were no punctures of critical nontarget structures. The mean procedure length was 33±12 min.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
1.5 T augmented reality-navigated interventional MRI can provide accurate imaging guidance for perineural injections of the thoracic, lumbar, and hypogastric sympathetic plexus.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Marker-DIR2017-fig.png|thumb|300px|  Procedural photograph demonstrating the operator’s augmented reality consisting of a&lt;br /&gt;
hybrid view of MR image and underlying cadaver. The hybrid view is being created by the reflection&lt;br /&gt;
of the target MR image (black arrow) from a semitransparent mirror (white arrow) into the line of&lt;br /&gt;
sight of the operator, where it merges with the underlying cadaver (gray arrow). Location, size, and&lt;br /&gt;
skin contour of MR image and cadaver are matched through co-registration by the image-overlay&lt;br /&gt;
navigation system.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==From Medical Imaging Data to 3D Printed Anatomical Models== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28562693 PLoS One. 2017 May 31;12(5):e0178540.   PMID: 28562693]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Bücking TM, Hill ER, Robertson JL, Maneas E, Plumb AA, Nikitichev DI.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Medical Physics and Biomedical Engineering, University College London, London, UK.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Anatomical models are important training and teaching tools in the clinical environment and are routinely used in medical imaging research. Advances in segmentation algorithms and increased availability of three-dimensional (3D) printers have made it possible to create cost-efficient patient-specific models without expert knowledge. We introduce a general workflow that can be used to convert volumetric medical imaging data (as generated by Computer Tomography (CT)) to 3D printed physical models. This process is broken up into three steps: image segmentation, mesh refinement and 3D printing. To lower the barrier to entry and provide the best options when aiming to 3D print an anatomical model from medical images, we provide an overview of relevant free and open-source image segmentation tools as well as 3D printing technologies. We demonstrate the utility of this streamlined workflow by creating models of ribs, liver, and lung using a Fused Deposition Modelling 3D printer.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Bucking-PLoSOne2017.jpg|thumb|300px| 3D printed anatomical models generated from medical imaging data using [http://www.slicer.org '''3D Slicer'''] and Seg3D. Part of the ribcage (a), the liver (b), and the right lung (c).]]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==3D Printing and Modelling of Customized Implants and Surgical Guides for Non-human Primates== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28512008 J Neurosci Methods. 2017 May 13;286:38-55. PMID: 28512008]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Chen X, Possel JK, Wacongne C, van Ham AF, Klink PC, Roelfsema PR.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Vision &amp;amp; Cognition, Netherlands Institute for Neuroscience, Meibergdreef 47, 1105 BA, Amsterdam, Netherlands.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Primate neurobiologists use chronically implanted devices such as pedestals for head stabilization and chambers to gain access to the brain and study its activity. Such implants are skull-mounted, and made from a hard, durable material, such as titanium.&lt;br /&gt;
NEW METHOD:&lt;br /&gt;
Here we present a low-cost method of creating customized 3D-printed cranial implants that are tailored to the anatomy of individual animals. We performed pre-surgical computed tomography (CT) and magnetic resonance (MR) scans to generate three-dimensional (3D) models of the skull and brain. We then used 3D modeling software to design implantable head posts, chambers, and a pedestal anchorage base, as well as craniotomy guides to aid us during surgery. Prototypes were made from plastic or resin, while implants were 3D-printed in titanium. The implants underwent post-processing and received a coating of osteocompatible material to promote bone integration.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Their tailored fit greatly facilitated surgical implantation, and eliminated the gap between the implant and the bone. To date, our implants remain robust and well-integrated with the skull.&lt;br /&gt;
COMPARISON WITH EXISTING METHOD(S):&lt;br /&gt;
Commercial-off-the-shelf solutions typically come with a uniform, flat base, preventing them from sitting flush against the curved surface of the skull. This leaves gaps for fluid and tissue ingress, increasing the risk of microbial infection and tissue inflammation, as well as implant loss.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
The use of 3D printing technology enabled us to quickly and affordably create unique, complex designs, avoiding the constraints levied by traditional production methods, thereby boosting experimental success and improving the wellbeing of the animals.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Accuracy of Mobile Biplane X-ray Imaging in Measuring 6-Degree-of-Freedom Patellofemoral Kinematics during Overground Gait== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28454908 J Biomech. 2017 May 24;57:152-6. PMID: 28454908]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Gray HA, Guan S, Pandy MG.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Mechanical Engineering, University of Melbourne, Victoria, Australia.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' The aim of this study was to evaluate the accuracy with which mobile biplane X-ray imaging can be used to measure patellofemoral kinematics of the intact knee during overground gait. A unique mobile X-ray imaging system tracked and recorded biplane fluoroscopic images of two human cadaver knees during simulated overground walking at a speed of 0.7m/s. Six-degree-of-freedom patellofemoral kinematics were calculated using a bone volumetric model-based method and the results then compared against those derived from a gold-standard bead-based method. RMS errors for patellar anterior translation, superior translation and lateral shift were 0.19mm, 0.34mm and 0.37mm, respectively. RMS errors for patellar flexion, lateral tilt and lateral rotation were 1.08°, 1.15° and 1.46°, respectively. The maximum RMS error for patellofemoral translations was approximately one-half that reported previously for tibiofemoral translations using the same mobile X-ray imaging system while the maximum RMS error for patellofemoral rotations was nearly two times larger than corresponding errors reported for tibiofemoral rotations. The lower accuracy in measuring patellofemoral rotational motion is likely explained by the symmetric nature of the patellar geometry and the smaller size of the patella compared to the tibia.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Quality of Radiomic Features in Glioblastoma Multiforme: Impact of Semi-Automated Tumor Segmentation Software==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
||&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28458602 Korean J Radiol. 2017 May-Jun;18(3):498-509. PMID: 28458602]  | [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5390619/pdf/kjr-18-498.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Lee M, Woo B, Kuo MD, Jamshidi N, Kim JH.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Center for Medical-IT Convergence Technology Research, Advanced Institutes of Convergence Technology, Seoul National University, Suwon, Korea.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' The purpose of this study was to evaluate the reliability and quality of radiomic features in glioblastoma multiforme (GBM) derived from tumor volumes obtained with semi-automated tumor segmentation software.&lt;br /&gt;
MATERIALS AND METHODS:&lt;br /&gt;
MR images of 45 GBM patients (29 males, 16 females) were downloaded from The Cancer Imaging Archive, in which post-contrast T1-weighted imaging and fluid-attenuated inversion recovery MR sequences were used. Two raters independently segmented the tumors using two semi-automated segmentation tools (TumorPrism3D and [http://www.slicer.org '''3D Slicer''']). Regions of interest corresponding to contrast-enhancing lesion, necrotic portions, and non-enhancing T2 high signal intensity component were segmented for each tumor. A total of 180 imaging features were extracted, and their quality was evaluated in terms of stability, normalized dynamic range (NDR), and redundancy, using intra-class correlation coefficients, cluster consensus, and Rand Statistic.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Our study results showed that most of the radiomic features in GBM were highly stable. Over 90% of 180 features showed good stability (intra-class correlation coefficient [ICC] ≥ 0.8), whereas only 7 features were of poor stability (ICC &amp;lt; 0.5). Most first order statistics and morphometric features showed moderate-to-high NDR (4 &amp;gt; NDR ≥1), while above 35% of the texture features showed poor NDR (&amp;lt; 1). Features were shown to cluster into only 5 groups, indicating that they were highly redundant.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
The use of semi-automated software tools provided sufficiently reliable tumor segmentation and feature stability; thus helping to overcome the inherent inter-rater and intra-rater variability of user intervention. However, certain aspects of feature quality, including NDR and redundancy, need to be assessed for determination of representative signature features before further development of radiomics.    &lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Lee-KJR2017-fig4.jpg|thumb|300px| Example of segmentation results with two semi-automated software tools.&lt;br /&gt;
Contrast-enhanced, necrotic, and non-enhancing T2 high signal intensity components are indicated by red, green, and blue color, respectively.&lt;br /&gt;
&lt;br /&gt;
A. Represents case in which similar segmentation results were produced. B. Represents case in which difference was observed in segmentation results. FLAIR = fluid-attenuated inversion recovery.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prognostic Implications of the Subcellular Localization of Survivin in Glioblastomas Treated with Radiotherapy Plus Concomitant and Adjuvant Temozolomide== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28430038 J Neurosurg. 2017 Apr 21:1-6. PMID: 28430038]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Saito T, Sugiyama K, Takeshima Y, Amatya VJ, Yamasaki F, Takayasu T, Nosaka R, Muragaki Y, Kawamata T, Kurisu K.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Neurosurgery, Tokyo Women's Medical University, Tokyo, Japan..&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' OBJECTIVE Currently, the standard treatment protocol for patients with newly diagnosed glioblastoma (GBM) includes surgery, radiotherapy, and concomitant and adjuvant temozolomide (TMZ). Various prognostic biomarkers for GBM have been described, including survivin expression. The aim of this study was to determine whether the subcellular localization of survivin correlates with GBM prognosis in patients who received the standard treatment protocol. METHODS The authors retrospectively examined the subcellular localization of survivin (nuclear, cytoplasmic, or both) using immunohistochemistry in 50 patients with GBM who had received the standard treatment. The relationship between survivin localization and overall survival (OS) was assessed with uni- and multivariate analyses including other clinicopathological factors (age, sex, Karnofsky Performance Scale [KPS] score, extent of resection, the use of second-line bevacizumab, O6-methylguanine-DNA methyltransferase [MGMT] status, and MIB-1 labeling index). RESULTS Log-rank tests revealed that patient age, KPS score, extent of resection, MGMT status, and survivin localization (p &amp;lt; 0.0001) significantly correlated with OS. Multivariate analysis indicated that patient age, MGMT status, and survivin localization significantly correlated with OS. Patients with nuclear localization of survivin had a significantly shorter OS than those in whom survivin expression was exclusively cytoplasmic (median OS 19.5 vs 31.7 months, respectively, HR 5.690, 95% CI 2.068-17.612, p = 0.0006). There was no significant difference in OS between patents whose survivin expression was exclusively nuclear or nuclear/cytoplasmic. CONCLUSIONS Nuclear expression of survivin is a factor for a poor prognosis in GBM patients. Subcellular localization of survivin can help to predict OS in GBM patients treated with the standard protocol.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==An Ovine Model of Cerebral Catheter Venography for Implantation of an Endovascular Neural Interface== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28452616 J Neurosurg. 2017 Apr 28:1-8.  PMID: 28452616]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Oxley TJ, Opie NL, Rind GS, Liyanage K, John SE, Ronayne S, McDonald AJ, Dornom A, Lovell TJH, Mitchell PJ, Bennett I, Bauquier S, Warne LN, Steward C, Grayden DB, Desmond P, Davis SM, O'Brien TJ, May CN.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Vascular Bionics Laboratory, Department of Medicine, The Royal Melbourne Hospital, Melbourne, Australia.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Neural interface technology may enable the development of novel therapies to treat neurological conditions, including motor prostheses for spinal cord injury. Intracranial neural interfaces currently require a craniotomy to achieve implantation and may result in chronic tissue inflammation. Novel approaches are required that achieve less invasive implantation methods while maintaining high spatial resolution. An endovascular stent electrode array avoids direct brain trauma and is able to record electrocorticography in local cortical tissue from within the venous vasculature. The motor area in sheep runs in a parasagittal plane immediately adjacent to the superior sagittal sinus (SSS). The authors aimed to develop a sheep model of cerebral venography that would enable validation of an endovascular neural interface. METHODS Cerebral catheter venography was performed in 39 consecutive sheep. Contrast-enhanced MRI of the brain was performed on 13 animals. Multiple telescoping coaxial catheter systems were assessed to determine the largest wide-bore delivery catheter that could be delivered into the anterior SSS. Measurements of SSS diameter and distance from the motor area were taken. The location of the motor area was determined in relation to lateral and superior projections of digital subtraction venography images and confirmed on MRI. RESULTS The venous pathway from the common jugular vein (7.4 mm) to the anterior SSS (1.2 mm) was technically challenging to selectively catheterize. The SSS coursed immediately adjacent to the motor cortex (&amp;lt; 1 mm) for a length of 40 mm, or the anterior half of the SSS. Attempted access with 5-Fr and 6-Fr delivery catheters was associated with longer procedure times and higher complication rates. A 4-Fr catheter (internal lumen diameter 1.1 mm) was successful in accessing the SSS in 100% of cases with no associated complications. Complications included procedure-related venous dissection in two major areas: the torcular herophili, and the anterior formation of the SSS. The bifurcation of the cruciate sulcal veins with the SSS was a reliable predictor of the commencement of the motor area. CONCLUSIONS The ovine model for cerebral catheter venography has generalizability to the human cerebral venous system in relation to motor cortex location. This novel model may facilitate the development of the novel field of endovascular neural interfaces that may include preclinical investigations for cortical recording applications such as paralysis and epilepsy, as well as other potential applications in neuromodulation.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Effectiveness of Endoscopic Surgery for Supratentorial Hypertensive Intracerebral Hemorrhage: A Comparison with Craniotomy==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
||&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28387618 J Neurosurg. 2017 Apr 7:1-7. PMID: 28387618]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Xu X, Chen X, Li F, Zheng X, Wang Q, Sun G, Zhang J, Xu B.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Neurosurgery, Chinese PLA General Hospital, Beijing, China.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' OBJECTIVE The goal of this study was to investigate the effectiveness and practicality of endoscopic surgery for treatment of supratentorial hypertensive intracerebral hemorrhage (HICH) compared with traditional craniotomy. METHODS The authors retrospectively analyzed 151 consecutive patients who were operated on for treatment of supratentorial HICH between January 2009 and June 2014 in the Department of Neurosurgery at Chinese PLA General Hospital. Patients were separated into an endoscopy group (82 cases) and a craniotomy group (69 cases), depending on the surgery they received. The hematoma evacuation rate was calculated using [http://www.slicer.org '''3D Slicer'''] software to measure the hematoma volume. Comparisons of operative time, intraoperative blood loss, Glasgow Coma Scale score 1 week after surgery, hospitalization time, and modified Rankin Scale score 6 months after surgery were also made between these groups. RESULTS There was no statistically significant difference in preoperative data between the endoscopy group and the craniotomy group (p &amp;gt; 0.05). The hematoma evacuation rate was 90.5% ± 6.5% in the endoscopy group and 82.3% ± 8.6% in the craniotomy group, which was statistically significant (p &amp;lt; 0.01). The operative time was 1.6 ± 0.7 hours in the endoscopy group and 5.2 ± 1.8 hours in the craniotomy group (p &amp;lt; 0.01). The intraoperative blood loss was 91.4 ± 93.1 ml in the endoscopy group and 605.6 ± 602.3 ml in the craniotomy group (p &amp;lt; 0.01). The 1-week postoperative Glasgow Coma Scale score was 11.5 ± 2.9 in the endoscopy group and 8.3 ± 3.8 in the craniotomy group (p &amp;lt; 0.01). The hospital stay was 11.6 ± 6.9 days in the endoscopy group and 13.2 ± 7.9 days in the craniotomy group (p &amp;lt; 0.05). The mean modified Rankin Scale score 6 months after surgery was 3.2 ± 1.5 in the endoscopy group and 4.1 ± 1.9 in the craniotomy group (p &amp;lt; 0.01). Patients had better recovery in the endoscopy group than in the craniotomy group. Data are expressed as the mean ± SD. CONCLUSIONS Compared with traditional craniotomy, endoscopic surgery was more effective, less invasive, and may have improved the prognoses of patients with supratentorial HICH. Endoscopic surgery is a promising method for treatment of supratentorial HICH. With the development of endoscope technology, endoscopic evacuation will become more widely used in the clinic. Prospective randomized controlled trials are needed.   &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Asymmetry in Dentition and Shape of Pharyngeal Arches in the Clonal Fish Chrosomus Eos-neogaeus: Phenotypic Plasticity and Developmental Instability== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28380079 PLoS One. 2017 Apr 5;12(4):e0174235. PMID: 28380079]   |  [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5381790/pdf/pone.0174235.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Leung C, Duclos KK, Grünbaum T, Cloutier R, Angers B.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''   Department of Biological Sciences, Université de Montréal, Montreal, Quebec, Canada.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose: ''' The effect of the environment may result in different developmental outcomes. Extrinsic signals can modify developmental pathways and result in alternative phenotypes (phenotypic plasticity). The environment can also be interpreted as a stressor and increase developmental instability (developmental noise). Directional and fluctuating asymmetry provide a conceptual background to discriminate between these results. This study aims at assessing whether variation in dentition and shape of pharyngeal arches of the clonal fish Chrosomus eos-neogaeus results from developmental instability or environmentally induced changes. A total of 262 specimens of the Chrosomus eos-neogaeus complex from 12 natural sites were analysed. X-ray microcomputed tomography (X-ray micro-CT) was used to visualize the pharyngeal arches in situ with high resolution. Variation in the number of pharyngeal teeth is high in hybrids in contrast to the relative stability observed in both parental species. The basal dental formula is symmetric while the most frequent alternative dental formula is asymmetric. Within one lineage, large variation in the proportion of individuals bearing basal or alternative dental formulae was observed among sites in the absence of genetic difference. Both dentition and arch shape of this hybrid lineage were explained significantly by environmental differences. Only individuals bearing asymmetric dental formula displayed fluctuating asymmetry as well as directional left-right asymmetry for the arches. The hybrids appeared sensitive to environmental signals and intraspecific variation on pharyngeal teeth was not random but reflects phenotypic plasticity. Altogether, these results support the influence of the environment as a trigger for an alternative developmental pathway resulting in left-right asymmetry in dentition and shape of pharyngeal arches.&lt;br /&gt;
&lt;br /&gt;
Dicom files were subsequently loaded within the open-source software [http://slicer.org '''3D Slicer'''] (Version 4.5 ). 3D models were rendered from dicom files using the editor module within [http://slicer.org '''3D Slicer'''] and the thresholding algorithm.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Scanning Laser Optical Tomography for in Toto Imaging of the Murine Cochlea.== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28388662 PLoS One. 2017 Apr 7;12(4):e0175431. PMID: 28388662]   |  [http://journals.plos.org/plosone/article/file?id=10.1371/journal.pone.0175431&amp;amp;type=printable PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Nolte L, Tinne N, Schulze J, Heinemann D, Antonopoulos GC, Meyer H, Nothwang HG, Lenarz T, Heisterkamp A, Warnecke A, Ripken T.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  &lt;br /&gt;
Industrial and Biomedical Optics Department, Laser Zentrum Hannover e.V., Hannover, Germany.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:'''  The mammalian cochlea is a complex macroscopic structure due to its helical shape and the microscopic arrangements of the individual layers of cells. To improve the outcomes of hearing restoration in deaf patients, it is important to understand the anatomic structure and composition of the cochlea ex vivo. Hitherto, only one histological technique based on confocal laser scanning microscopy and optical clearing has been developed for in toto optical imaging of the murine cochlea. However, with a growing size of the specimen, e.g., human cochlea, this technique reaches its limitations. Here, we demonstrate scanning laser optical tomography (SLOT) as a valuable imaging technique to visualize the murine cochlea in toto without any physical slicing. This technique can also be applied in larger specimens up to cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; such as the human cochlea. Furthermore, immunolabeling allows visualization of inner hair cells (otoferlin) or spiral ganglion cells (neurofilament) within the whole cochlea. After image reconstruction, the 3D dataset was used for digital segmentation of the labeled region. As a result, quantitative analysis of position, length and curvature of the labeled region was possible. This is of high interest in order to understand the interaction of cochlear implants (CI) and cells in more detail. &lt;br /&gt;
&lt;br /&gt;
To enable correct overlay of the two excitation channels, the general registration algorithm (BRAINS) from the open source software [http://slicer.org '''3D Slicer'''] was used.                          &lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Nolte-PLoSOne2017.PNG|thumb|300px|  Maximum intensity projections (MIP) were performed on the reconstructed data of samples 1 and 2.&lt;br /&gt;
(A) MIP of sample 1. The labeled neurofilament appears as a helical shape inside the cochlea. (B) Higher magnification of the highlighted area in A. The dendrites of the spiral ganglions are visible. (C) Negative control (sample 2). Only autofluorescence and nonspecific binding shows the outer shape of the cochlea. (D) Higher magnification of the highlighted area in C.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Patient Education for Endoscopic Sinus Surgery: Preliminary Experience Using 3D-Printed Clinical Imaging Data== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28387702 J Funct Biomater. 2017 Apr 7;8(2). PMID: 28387702]   |  [http://www.mdpi.com/2079-4983/8/2/13/htm PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Sander IM, Liepert TT, Doney EL, Leevy WM, Liepert DR.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Department of Biological Sciences, University of Notre Dame, South Bend, IN, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Within the Ear, Nose, and Throat (ENT) medical space, a relatively small fraction of patients follow through with elective surgeries to fix ailments such as a deviated septum or occluded sinus passage. Patient understanding of their diagnosis and treatment plan is integral to compliance, which ultimately yields improved medical outcomes and better quality of life. Here we report the usage of advanced, polyjet 3D printing methods to develop a multimaterial replica of human nasal sinus anatomy, derived from clinical X-ray computed tomography (CT) data, to be used as an educational aid during physician consultation. The final patient education model was developed over several iterations to optimize material properties, anatomical accuracy and overall display. A two-arm, single-center, randomized, prospective study was then performed in which 50 ENT surgical candidates (and an associated control group, n = 50) were given an explanation of their anatomy, disease state, and treatment options using the education model as an aid. Statistically significant improvements in patient ratings of their physician's explanation of their treatment options (p = 0.020), self-rated anatomical understanding (p = 0.043), self-rated understanding of disease state (p = 0.016), and effectiveness of the visualization (p = 0.007) were noted from the population that viewed the 3D education model, indicating it is an effective tool which ENT surgeons may use to educate and interact with patients. &lt;br /&gt;
&lt;br /&gt;
All volumes outside of the volume of interest were masked at a value of −1000 Hounsfield Units (HU). The data was exported in Nifti (.nii) format and opened in [http://slicer.org '''3D Slicer'''].&lt;br /&gt;
A 3D surface map for bone was generated using the “Grayscale Modelmaker” tool within [http://slicer.org '''3D Slicer'''] at a threshold of 300 HU. A separate 3D surface map was generated for soft tissue using the same tool and process with a threshold level of −300 HU. Each surface map was exported from 3DSlicer as a .stl file.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Sander-JFB2017.png|thumb|300px|  Nasal cavity model generation and fabrication. (A) 3D surface maps generated from CT scan slices of patient nasal cavity used to generate a 3D-printed model; (B) 3D-printed, sliced model, printed with two distinct polymers to represent hard and soft tissues; (C) Single coronal model slice with specific anatomical details highlighted.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Comprehensive Evaluation of Ten Deformable Image Registration Algorithms for Contour Propagation between CT and Cone-beam CT Images in Adaptive Head &amp;amp; Neck Radiotherapy== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28414799 PLoS One. 2017 Apr 17;12(4):e0175906. PMID: 28414799]   |  [http://journals.plos.org/plosone/article/file?id=10.1371/journal.pone.0175906&amp;amp;type=printable PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Li X, Zhang Y, Shi Y, Wu S, Xiao Y, Gu X, Zhen X, Zhou L.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  &lt;br /&gt;
Department of Biomedical Engineering, Southern Medical University, Guangzhou, Guangdong, China.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:'''Deformable image registration (DIR) is a critical technic in adaptive radiotherapy (ART) for propagating contours between planning computerized tomography (CT) images and treatment CT/cone-beam CT (CBCT) images to account for organ deformation for treatment re-planning. To validate the ability and accuracy of DIR algorithms in organ at risk (OAR) contour mapping, ten intensity-based DIR strategies, which were classified into four categories-optical flow-based, demons-based, level-set-based and spline-based-were tested on planning CT and fractional CBCT images acquired from twenty-one head &amp;amp; neck (H&amp;amp;N) cancer patients who underwent 6~7-week intensity-modulated radiation therapy (IMRT). Three similarity metrics, i.e., the Dice similarity coefficient (DSC), the percentage error (PE) and the Hausdorff distance (HD), were employed to measure the agreement between the propagated contours and the physician-delineated ground truths of four OARs, including the vertebra (VTB), the vertebral foramen (VF), the parotid gland (PG) and the submandibular gland (SMG). It was found that the evaluated DIRs in this work did not necessarily outperform rigid registration. DIR performed better for bony structures than soft-tissue organs, and the DIR performance tended to vary for different ROIs with different degrees of deformation as the treatment proceeded. Generally, the optical flow-based DIR performed best, while the demons-based DIR usually ranked last except for a modified demons-based DISC used for CT-CBCT DIR. These experimental results suggest that the choice of a specific DIR algorithm depends on the image modality, anatomic site, magnitude of deformation and application. Therefore, careful examinations and modifications are required before accepting the auto-propagated contours, especially for automatic re-planning ART systems.&lt;br /&gt;
&lt;br /&gt;
Before performing the rigid and deformable registration, all the images were pre-processed using an open source software [http://slicer.org '''3D Slicer''']. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Exercise Decreases Marrow Adipose Tissue Through ß-Oxidation in Obese Running Mice== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28436105 J Bone Miner Res. 2017 Apr 24. PMID: 28436105]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Styner M, Pagnotti GM, McGrath C, Wu X, Sen B, Uzer G, Xie Z, Zong X, Styner MA, Rubin CT, Rubin J.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Medicine, Division of Endocrinology and Metabolism, University of North Carolina, Chapel Hill, NC, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' The relationship between marrow adipose tissue (MAT) and bone health is poorly understood. We used running exercise to ask whether obesity-associated MAT can be attenuated via exercise and whether this correlates with gains in bone quantity and quality. C57BL/6 mice were divided into diet-induced obesity (DIO, n = 14) versus low-fat diet (LFD, n = 14). After 3 months, 16-week-old mice were allocated to an exercise intervention (LFD-E, DIO-E) or a control group (LFD, DIO) for 6 weeks (4 groups, n = 7/group). Marrow adipocyte area was 44% higher with obesity (p &amp;lt; 0.0001) and after exercise 33% lower in LFD (p &amp;lt; 0.0001) and 39% lower in DIO (p &amp;lt; 0.0001). In LFD, exercise did not affect adipocyte number; however, in DIO, the adipocyte number was 56% lower (p &amp;lt; 0.0001). MAT was 44% higher in DIO measured by osmium-μCT, whereas exercise associated with reduced MAT (-23% in LFD, -48% in DIO, p &amp;lt; 0.05). MAT was additionally quantified by 9.4TMRI, and correlated with osmium-µCT (r = 0.645; p &amp;lt; 0.01). Consistent with higher lipid beta oxidation, perilipin 3 (PLIN3) rose with exercise in tibial mRNA (+92% in LFD, +60% in DIO, p &amp;lt; 0.05). Tibial µCT-derived trabecular bone volume (BV/TV) was not influenced by DIO but responded to exercise with an increase of 19% (p &amp;lt; 0.001). DIO was associated with higher cortical periosteal and endosteal volumes of 15% (p = 0.012) and 35% (p &amp;lt; 0.01), respectively, but Ct.Ar/Tt.Ar was lower by 2.4% (p &amp;lt; 0.05). There was a trend for higher stiffness (N/m) in DIO, and exercise augmented this further. In conclusion, obesity associated with increases in marrow lipid-measured by osmium-μCT and MRI-and partially due to an increase in adipocyte size, suggesting increased lipid uptake into preexisting adipocytes. Exercise associated with smaller adipocytes and less bone lipid, likely invoking increased ß-oxidation and basal lipolysis as evidenced by higher levels of PLIN3. © 2017 American Society for Bone and Mineral Research.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Interactive Outlining of Pancreatic Cancer Liver Metastases in Ultrasound Images== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28420871 Sci Rep. 2017 Apr 18;7(1):892. PMID: 28420871]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Egger J, Schmalstieg D, Chen X, Zoller WG, Hann A.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Institute for Computer Graphics and Vision, Graz University of Technology, Graz, Austria. &lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Ultrasound (US) is the most commonly used liver imaging modality worldwide. Due to its low cost, it is increasingly used in the follow-up of cancer patients with metastases localized in the liver. In this contribution, we present the results of an interactive segmentation approach for liver metastases in US acquisitions. A (semi-) automatic segmentation is still very challenging because of the low image quality and the low contrast between the metastasis and the surrounding liver tissue. Thus, the state of the art in clinical practice is still manual measurement and outlining of the metastases in the US images. We tackle the problem by providing an interactive segmentation approach providing real-time feedback of the segmentation results. The approach has been evaluated with typical US acquisitions from the clinical routine, and the datasets consisted of pancreatic cancer metastases. Even for difficult cases, satisfying segmentations results could be achieved because of the interactive real-time behavior of the approach. In total, 40 clinical images have been evaluated with our method by comparing the results against manual ground truth segmentations. This evaluation yielded to an average Dice Score of 85% and an average Hausdorff Distance of 13 pixels.&lt;br /&gt;
We tested our data with the GrowCut implementation that is available in [http://slicer.org '''3D Slicer'''].&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Egger-SciRep2017.png|thumb|300px|  GrowCut segmentation results for the two metastases from Fig. 9. The left images show the manual&lt;br /&gt;
initialization of GrowCut: the metastases were initialized with green, and the backgrounds were initialized with&lt;br /&gt;
yellow. The images in the middle show the segmentation results of GrowCut (green). The right images show a&lt;br /&gt;
closer view of the segmentation results (green) with a lower opacity.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==The Evolution of Cost-efficiency in Neural Networks during Recovery from Traumatic Brain Injury== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28422992 PLoS One. 2017 Apr 19;12(4):e0170541. PMID: 28422992]  | [http://journals.plos.org/plosone/article/file?id=10.1371/journal.pone.0170541&amp;amp;type=printable PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Roy A, Bernier RA, Wang J, Benson M, French JJ Jr, Good DC, Hillary FG.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  &lt;br /&gt;
Department of Psychology, The Pennsylvania State University, University Park, Pennsylvania, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' A somewhat perplexing finding in the systems neuroscience has been the observation that physical injury to neural systems may result in enhanced functional connectivity (i.e., hyperconnectivity) relative to the typical network response. The consequences of local or global enhancement of functional connectivity remain uncertain and this is particularly true for the overall metabolic cost of the network. We examine the hyperconnectivity hypothesis in a sample of 14 individuals with TBI with data collected at approximately 3, 6, and 12 months following moderate and severe TBI. As anticipated, individuals with TBI showed increased network strength and cost early after injury, but by one-year post injury hyperconnectivity was more circumscribed to frontal DMN and temporal-parietal attentional control regions. Cost in these subregions was a significant predictor of cognitive performance. Cost-efficiency analysis in the Power 264 data parcellation suggested that at 6 months post injury the network requires higher cost connections to achieve high efficiency as compared to the network 12 months post injury. These results demonstrate that networks self-organize to re-establish connectivity while balancing cost-efficiency trade-offs.&lt;br /&gt;
To determine the influence of global pathology on brain networks, we created a 3-dimensional (3D) lesion model for each subject using [http://slicer.org '''3D Slicer'''] that utilizes information from multiple MR sequences, such as SWI, FLAIR, and T1 MPRAGE.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Roy-PLoSOne2017.PNG|thumb|300px|fMRI data preprocessing steps and the analytic pipeline.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Three‐Dimensional Printing: An Aid to Epidural Access for Neuromodulation== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28425137 Neuromodulation. 2017 Apr 20 PMID: 28425137]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Taverner MG, Monagle JP.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  &lt;br /&gt;
Frankston Pain Management, Victoria, Australia.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' OBJECTIVE:&lt;br /&gt;
The case report details to use of three-dimensional (3D) printing as an aid to neuromodulation.&lt;br /&gt;
METHODS:&lt;br /&gt;
A patient is described in whom previous attempts at spinal neuromodulation had failed due to lack of epidural or intrathecal access, and the use of a 3D printed model allowed for improved planning and ultimately, success. Thin-slices (0.625 mm)&lt;br /&gt;
of a high-resolution CT scan of the patient's thoracolumbar spine and iliac crests was used to create a CAD model on [http://slicer.org '''3D Slicer'''] software (Surgical Planning Laboratory, Boston, MA&lt;br /&gt;
RESULTS:&lt;br /&gt;
Successful spinal cord stimulation was achieved with the plan developed by access to a 3D model of the patient's spine.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
Neuromodulation techniques can provide the optimal analgesic techniques for individual patients. At times these can fail due to lack of access to the site for intervention, in this case epidural access. 3D printing may provide additional information to improve the likelihood of access when anatomy is distorted and standard approaches prove difficult.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Biomechanical Flow Amplification Arising From the Variable Deformation of the Subglottic Mucosa== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28433346 J Voice. 2017 Apr 19. PMID: 28433346]  | [http://www.jvoice.org/article/S0892-1997(17)30036-X/pdf  PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Goodyer E, Müller F, Hess M, Kandan K, Farukh F.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  &lt;br /&gt;
De Montfort University, Bio-Informatics Research Group, Leicester, UK.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' OBJECTIVE:&lt;br /&gt;
This study mapped the variation in tissue elasticity of the subglottic mucosa, applied these data to provide initial models of the likely deformation of the mucosa during the myoelastic cycle, and hypothesized as to the impact on the process of phonation.&lt;br /&gt;
STUDY DESIGN:&lt;br /&gt;
Six donor human larynges were dissected along the sagittal plane to expose the vocal folds and subglottic mucosa. A linear skin rheometer was used to apply a controlled shear force, and the resultant displacement was measured. These data provided a measure of the stress/strain characteristics of the tissue at each anatomic point. A series of measurements were taken at 2-mm interval inferior of the vocal folds, and the change in elasticity was determined. CT images of the excised larynges have been used to create 3D reconstructions with the help of an open-source medical imaging software, [http://slicer.org '''3D Slicer'''].&lt;br /&gt;
RESULTS:&lt;br /&gt;
It was found that the elasticity of the mucosa in the subglottic region increased linearly with distance from the vocal folds in all 12 samples. A simple deformation model indicated that under low pressure conditions the subglottic mucosa will deform to form a cone, which could result in a higher velocity, thus amplifying the low pressure effect resulting from the Venturi principle, and could assist in maintaining laminar flow.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
This study indicated that the deformation of the subglottic mucosa could play a significant role in the delivery of a low pressure airflow over the vocal folds. A large scale study will now be undertaken to secure more data to evaluate this hypothesis, and using computational fluid dynamics based on actual three-dimensional structure obtained from computed tomography scans the aerodynamics of this region will be investigated.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Goodyer-JVoice2017.png|thumb|300px|  Three-dimensional (3D) model of a larynx constructed&lt;br /&gt;
from a computed tomography scan images (A) showing the full 3D&lt;br /&gt;
model. (B) and (C) Show the views of larynx looking down the arrow&lt;br /&gt;
as indicated by the letter P and Q, respectively. CT images of&lt;br /&gt;
the excised larynges have been used to create 3D reconstructions&lt;br /&gt;
with the help of an open-source medical imaging software,&lt;br /&gt;
[http://slicer.org/ '''3D Slicer'''].]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==HTC Vive MeVisLab Integration via OpenVR for Medical Applications==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
||&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28323840 PLoS One. 2017 Mar 21;12(3):e0173972. PMID: 28323840]  | [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5360258/pdf/pone.0173972.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Egger J, Gall M, Wallner J, Boechat P, Hann A, Li X, Chen X, Schmalstieg D.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Institute of Computer Graphics and Vision, Graz University of Technology, Graz, Austria.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:'''Virtual Reality, an immersive technology that replicates an environment via computer-simulated reality, gets a lot of attention in the entertainment industry. However, VR has also great potential in other areas, like the medical domain, Examples are intervention planning, training and simulation. This is especially of use in medical operations, where an aesthetic outcome is important, like for facial surgeries. Alas, importing medical data into Virtual Reality devices is not necessarily trivial, in particular, when a direct connection to a proprietary application is desired. Moreover, most researcher do not build their medical applications from scratch, but rather leverage platforms like MeVisLab, MITK, OsiriX or [http://www.slicer.org '''3D Slicer''']. These platforms have in common that they use libraries like ITK and VTK, and provide a convenient graphical interface. However, ITK and VTK do not support Virtual Reality directly. In this study, the usage of a Virtual Reality device for medical data under the MeVisLab platform is presented. The OpenVR library is integrated into the MeVisLab platform, allowing a direct and uncomplicated usage of the head mounted display HTC Vive inside the MeVisLab platform. Medical data coming from other MeVisLab modules can directly be connected per drag-and-drop to the Virtual Reality module, rendering the data inside the HTC Vive for immersive virtual reality inspection.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Revealing Cancer Subtypes with Higher-Order Correlations Applied to Imaging and Omics Data== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28359308 BMC Med Genomics. 2017 Mar 31;10(1):20.  PMID: 28359308] | [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5374737/pdf/12920_2017_Article_256.pdf  PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Graim K, Liu TT, Achrol AS, Paull EO, Newton Y, Chang SD, Harsh GR, Cordero SP, Rubin DL, Stuart JM.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Biomedical Engineering, University of California, Santa Cruz, CA, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Patient stratification to identify subtypes with different disease manifestations, severity, and expected survival time is a critical task in cancer diagnosis and treatment. While stratification approaches using various biomarkers (including high-throughput gene expression measurements) for patient-to-patient comparisons have been successful in elucidating previously unseen subtypes, there remains an untapped potential of incorporating various genotypic and phenotypic data to discover novel or improved groupings.&lt;br /&gt;
METHODS:&lt;br /&gt;
Here, we present HOCUS, a unified analytical framework for patient stratification that uses a community detection technique to extract subtypes out of sparse patient measurements. HOCUS constructs a patient-to-patient network from similarities in the data and iteratively groups and reconstructs the network into higher order clusters. We investigate the merits of using higher-order correlations to cluster samples of cancer patients in terms of their associations with survival outcomes.&lt;br /&gt;
RESULTS:&lt;br /&gt;
In an initial test of the method, the approach identifies cancer subtypes in mutation data of glioblastoma, ovarian, breast, prostate, and bladder cancers. In several cases, HOCUS provides an improvement over using the molecular features directly to compare samples. Application of HOCUS to glioblastoma images reveals a size and location classification of tumors that improves over human expert-based stratification.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
Subtypes based on higher order features can reveal comparable or distinct groupings. The distinct solutions can provide biologically- and treatment-relevant solutions that are just as significant as solutions based on the original data.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Graim-BMCMedGenomics2017-fig5.jpg|thumb|300px| HOCUS of GBM MR Images. a. P-values of survival separation (log-rank test) for each of the orders of clustering across a range of k clusters. b. Kaplan-Meier plot of the third-order HOCUS clusters. c. Images of tumors within each cluster projected onto the MNI brain atlas. Showing sagittal, coronal, axial views. Brightness of color indicates the number of patients with tumor at a given location. Generated using [http://slicer.org '''3D Slicer''']. d. Violin plot showing tumor volumes within each third-order cluster. e. Molecular (gene expression based) subtypes within the clusters.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Three-Dimensional Volume Rendering of Pelvic Models and Paraurethral Masses Based on MRI Cross-Sectional Images== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28352953 Int Urogynecol J. 2017 Mar 28. PMID: 28352953]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Doumouchtsis SK, Nazarian DA, Gauthaman N, Durnea CM, Munneke G.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Obstetrics &amp;amp; Gynaecology, Epsom and St. Helier University Hospital NHS Trust, Epsom, UK. &lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' AIMS:&lt;br /&gt;
Our aim was to assess the feasibility of rendering 3D pelvic models using magnetic resonance imaging (MRI) scans of patients with vaginal, urethral and paraurethral lesions and obtain additional information previously unavailable through 2D imaging modalities.&lt;br /&gt;
METHODS:&lt;br /&gt;
A purposive sample of five female patients 26-40 years old undergoing investigations for vaginal or paraurethral mass was obtained in a tertiary teaching hospital. 3D volume renderings of the bladder, urethra and paraurethral masses were constructed using [http://slicer.org '''3D Slicer'''] v.3.4.0. Spatial dimensions were determined and compared with findings from clinical, MRI, surgical and histopathological reports. The quality of information regarding size and location of paraurethral masses obtained from 3D models was compared with information from cross-sectional MRI and review of clinical, surgical and histopathological findings.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The analysis of rendered 3D models yielded detailed anatomical dimensions and provided information that was in agreement and in higher detail than information based on clinical examination, cross-sectional 2D MRI analysis and histopathological reports. High-quality pelvic 3D models were rendered with the characteristics and resolution to allow identification and detailed viewing of the spatial relationship between anatomical structures.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
To our knowledge, this is the first preliminary study to evaluate the role of MRI-based 3D pelvic models for investigating paraurethral masses. This is a feasible technique and may prove a useful addition to conventional 2D MRI. Further prospective studies are required to evaluate this modality for investigating such lesions and planning appropriate management.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==A Study of Volumetric Variations of Basal Nuclei in the Normal Human Brain by Magnetic Resonance Imaging== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28078760 Clin Anat. 2017 Mar;30(2):175-82. PMID: 28078760]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Elkattan A, Mahdy A, Eltomey M, Ismail R.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Anatomy, Tanta University of Medical Sciences, Tanta, Egypt.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Knowledge of the effects of healthy aging on brain structures is necessary to identify abnormal changes due to diseases. Many studies have demonstrated age-related volume changes in the brain using MRI. 60 healthy individuals who had normal MRI aged from 20 years to 80 years were examined and classified into three groups: Group I: 21 persons; nine males and 12 females aging between 20-39 years old. Group II: 22 persons; 11 males and 11 females aging between 40-59 years old. Group III: 17 persons; eight males and nine females aging between 60-80 years old. Volumetric analysis was done to evaluate the effect of age, gender and hemispheric difference in the caudate and putamen by the [http://slicer.org '''3D Slicer'''] 4.3.3.1 software using 3D T1-weighted images. Data were analyzed by student's unpaired t test, ANOVA and regression analysis. The volumes of the measured and corrected caudate nuclei and putamen significantly decreased with aging in males. There was a statistically insignificant relation between the age and the volume of the measured caudate nuclei and putamen in females but there was a statistically significant relation between the age and the corrected caudate nuclei and putamen. There was no significant difference on the caudate and putamen volumes between males and females. There was no significant difference between the right and left caudate nuclei volumes. There was a leftward asymmetry in the putamen volumes. The results can be considered as a base to track individual changes with time (aging and CNS diseases). &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==MITK-OpenIGTLink for Combining Open-Source Toolkits in Real-Time Computer-Assisted Interventions== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/27687984 Int J Comput Assist Radiol Surg. 2017 Mar;12(3):351-61. PMID: 27687984]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Klemm M, Kirchner T, Gröhl J, Cheray D, Nolden M, Seitel A, Hoppe H, Maier-Hein L, Franz AM.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Laboratory for Computer-Assisted Medicine, Department of Electrical Engineering and Information Technology, Offenburg University, Offenburg, Germany.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' PURPOSE:&lt;br /&gt;
Due to rapid developments in the research areas of medical imaging, medical image processing and robotics, computer-assisted interventions (CAI) are becoming an integral part of modern patient care. From a software engineering point of view, these systems are highly complex and research can benefit greatly from reusing software components. This is supported by a number of open-source toolkits for medical imaging and CAI such as the medical imaging interaction toolkit (MITK), the public software library for ultrasound imaging research (PLUS) and [http://slicer.org '''3D Slicer''']. An independent inter-toolkit communication such as the open image-guided therapy link (OpenIGTLink) can be used to combine the advantages of these toolkits and enable an easier realization of a clinical CAI workflow.&lt;br /&gt;
&amp;lt;br&amp;gt;METHODS:&lt;br /&gt;
MITK-OpenIGTLink is presented as a network interface within MITK that allows easy to use, asynchronous two-way messaging between MITK and clinical devices or other toolkits. Performance and interoperability tests with MITK-OpenIGTLink were carried out considering the whole CAI workflow from data acquisition over processing to visualization.&lt;br /&gt;
&amp;lt;br&amp;gt;RESULTS:&lt;br /&gt;
We present how MITK-OpenIGTLink can be applied in different usage scenarios. In performance tests, tracking data were transmitted with a frame rate of up to 1000 Hz and a latency of 2.81 ms. Transmission of images with typical ultrasound (US) and greyscale high-definition (HD) resolutions of [Formula: see text] and [Formula: see text] is possible at up to 512 and 128 Hz, respectively.&lt;br /&gt;
&amp;lt;br&amp;gt;CONCLUSION:&lt;br /&gt;
With the integration of OpenIGTLink into MITK, this protocol is now supported by all established open-source toolkits in the field. This eases interoperability between MITK and toolkits such as PLUS or [http://slicer.org '''3D Slicer'''] and facilitates cross-toolkit research collaborations. MITK and its submodule MITK-OpenIGTLink are provided open source under a BSD-style license (http://mitk.org).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Increased Cerebellar Gray Matter Volume in Head Chefs== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28182712 PLoS One. 2017 Feb 9;12(2):e0171457.  PMID: 28182712] | [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5300254/pdf/pone.0171457.pdf  PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Cerasa A, Sarica A, Martino I, Fabbricatore C, Tomaiuolo F, Rocca F, Caracciolo M, Quattrone A.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Istituto di Bioimmagini e Fisiologia Molecolare, Consiglio Nazionale delle Ricerche, Catanzaro, Italy.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:'''OBJECTIVE:&lt;br /&gt;
Chefs exert expert motor and cognitive performances on a daily basis. Neuroimaging has clearly shown that that long-term skill learning (i.e., athletes, musicians, chess player or sommeliers) induces plastic changes in the brain thus enabling tasks to be performed faster and more accurately. How a chef's expertise is embodied in a specific neural network has never been investigated.&lt;br /&gt;
&amp;lt;br&amp;gt;METHODS:&lt;br /&gt;
Eleven Italian head chefs with long-term brigade management expertise and 11 demographically-/ psychologically- matched non-experts underwent morphological evaluations.&lt;br /&gt;
&amp;lt;br&amp;gt;RESULTS:&lt;br /&gt;
Voxel-based analysis performed with SUIT, as well as, automated volumetric measurement assessed with Freesurfer, revealed increased gray matter volume in the cerebellum in chefs compared to non-experts. The most significant changes were detected in the anterior vermis and the posterior cerebellar lobule. The magnitude of the brigade staff and the higher performance in the Tower of London test correlated with these specific gray matter increases, respectively.&lt;br /&gt;
&amp;lt;br&amp;gt;CONCLUSIONS:&lt;br /&gt;
We found that chefs are characterized by an anatomical variability involving the cerebellum. This confirms the role of this region in the development of similar expert brains characterized by learning dexterous skills, such as pianists, rock climbers and basketball players. However, the nature of the cellular events underlying the detected morphological differences remains an open question.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Carasa-PlosOne2017-fig2.jpg|thumb|300px| Sample color-coded automated brain segmentation results.&lt;br /&gt;
A 3D surface image (created with  [http://slicer.org '''3D Slicer''']  v 4.6, www.slicer.org) showing typical automated subcortical segmentation of the cerebellum performed by FreeSurfer (v 5.3). Scatter plot of the mean normalized volumes of the left and right cerebellar cortex for each single subject has been plotted. Advanced neuroimaging analysis reveals bilateral cerebellar volumetric increase in the chef group with respect to non-expert individuals.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Tumor Heterogeneity Assessed by Texture Analysis on Contrast-Enhanced CT in Lung Adenocarcinoma: Association with Pathologic Grade== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28430603 Oncotarget. 2017 Feb 16.  PMID: 28430603]  | [http://www.impactjournals.com/oncotarget/index.php?journal=oncotarget&amp;amp;page=article&amp;amp;op=download&amp;amp;path%5B%5D=15399&amp;amp;path%5B%5D=49197 PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Liu Y, Liu S, Qu F, Li Q, Cheng R, Ye Z.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Radiology, Tianjin Medical University Cancer Institute and Hospital, National Clinical Research Center of Cancer, Key Laboratory of Cancer Prevention and Therapy, Tianjin, China.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' To investigate whether texture features on contrast-enhanced computed tomography (CECT) images of lung adenocarcinoma have association with pathologic grade.Methods A cohort of 148 patients with surgically operated adenocarcinoma was retrospectively reviewed. Fifty-four CT features of the primary lung tumor were extracted from CECT images using open-source [http://slicer.org/ '''3D Slicer'''] software; meanwhile, enhancement homogeneity was evaluated by two radiologists using visual assessment. Multivariate logistic regression analysis was performed to determine significant image indicator of pathologic grade. Results Tumors of intermediate grade were more likely to be never smokers (P=0.020). Enhancement heterogeneity by visual assessment showed no statistical difference between intermediate grade and high grade (P=0.671). Among those 54 features, 29 of them were significantly associated with pathologic grade. Multivariate logistic regression analyses identified F33 (Homogeneity 1) (P=0.005) and F38 (Inverse Variance) (P=0.032) as unique independent image indicators of pathologic grade, and the AUC calculated from this model (AUC=0.834) was higher than clinical model (AUC=0.615) (P=0.0001).Conclusions Our study revealed that texture analysis on CECT images could be helpful in predicting pathologic grade of lung adenocarcinoma.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Liu-Oncotarget2017.png|thumb|300px|  Example of CT images showing segmentation of lung tumor. Semiautomatic tumor segmentation was done on every slice of the tumor using [http://slicer.org/ '''3D Slicer'''] (a), and the 3D view of the segmented tumor (b) which was shown in yellow.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==SEEG Assistant: A 3D Slicer Extension to Support Epilepsy Surgery== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/28231759 BMC Bioinformatics. 2017 Feb 23;18(1):124.  PMID: 28231759] | [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5324222/pdf/12859_2017_Article_1545.pdf  PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Narizzano M, Arnulfo G, Ricci S, Toselli B, Tisdall M, Canessa A, Fato MM, Cardinale F.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Informatics, Bioengineering Robotics and System engineering (DIBRIS), University of Genoa, Genova, Italy.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' In the evaluation of Stereo-Electroencephalography (SEEG) signals, the physicist's workflow involves several operations, including determining the position of individual electrode contacts in terms of both relationship to grey or white matter and location in specific brain regions. These operations are (i) generally carried out manually by experts with limited computer support, (ii) hugely time consuming, and (iii) often inaccurate, incomplete, and prone to errors.&lt;br /&gt;
&amp;lt;br&amp;gt;RESULTS:&lt;br /&gt;
In this paper we present SEEG Assistant, a set of tools integrated in a single [http://slicer.org '''3D Slicer''']  extension, which aims to assist neurosurgeons in the analysis of post-implant structural data and hence aid the neurophysiologist in the interpretation of SEEG data. SEEG Assistant consists of (i) a module to localize the electrode contact positions using imaging data from a thresholded post-implant CT, (ii) a module to determine the most probable cerebral location of the recorded activity, and (iii) a module to compute the Grey Matter Proximity Index, i.e. the distance of each contact from the cerebral cortex, in order to discriminate between white and grey matter location of contacts. Finally, exploiting [http://slicer.org '''3D Slicer''']  capabilities, SEEG Assistant offers a Graphical User Interface that simplifies the interaction between the user and the tools. SEEG Assistant has been tested on 40 patients segmenting 555 electrodes, and it has been used to identify the neuroanatomical loci and to compute the distance to the nearest cerebral cortex for 9626 contacts. We also performed manual segmentation and compared the results between the proposed tool and gold-standard clinical practice. As a result, the use of SEEG Assistant decreases the post implant processing time by more than 2 orders of magnitude, improves the quality of results and decreases, if not eliminates, errors in post implant processing.&lt;br /&gt;
&amp;lt;br&amp;gt;CONCLUSIONS:&lt;br /&gt;
The SEEG Assistant Framework for the first time supports physicists by providing a set of open-source tools for post-implant processing of SEEG data. Furthermore, SEEG Assistant has been integrated into [http://slicer.org '''3D Slicer'''] , a software platform for the analysis and visualization of medical images, overcoming limitations of command-line tools.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Narizzano-BMCBioinformatics2017-fig3.jpg|thumb|300px| CPE out performs manual segmentation in complex and critical cases. a As an example of SEEG complexity, we show MRI and thresholded post-implant CT scans for one subject from our cohort. Contacts are shown as groups of white voxels. This case illustrates the complexity of SEEG implants with electrode shafts following non-planar directions (e.g. X), shafts targeting almost the same geometrical point (e.g. R and R’). b CPE segments all contacts (green spheres) belonging to each electrode from post-implant CT scans, represented here as red 3D meshes obtained tessellating the thresholded data to ease visualization. c Show the right pial surface with 3D post-implant thresholded-CT meshes and the cut plane used in panel d where the example of X and X’ electrodes are shown. Those examples represent the case of non-planar insertion trajectories which yielded an artefactually fused electrode. CPE integrating the knowledge of the electrode model can segment the contact positions more accurately than visual inspection.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Associations of Radiomic Data Extracted from Static and Respiratory-Gated CT Scans with Disease Recurrence in Lung Cancer Patients Treated with SBRT== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28046060 PLoS One. 2017 Jan 3;12(1):e0169172.  PMID: 28046060]| [http://journals.plos.org/plosone/article/file?id=10.1371/journal.pone.0169172&amp;amp;type=printable  PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Huynh E, Coroller TP, Narayan V, Agrawal V, Romano J, Franco I, Parmar C, Hou Y, Mak RH, Aerts HJ.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Radiation Oncology, Dana-Farber Cancer Institute, Brigham and Women's Hospital, Harvard Medical School, Boston, USA. &lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Radiomics aims to quantitatively capture the complex tumor phenotype contained in medical images to associate them with clinical outcomes. This study investigates the impact of different types of computed tomography (CT) images on the prognostic performance of radiomic features for disease recurrence in early stage non-small cell lung cancer (NSCLC) patients treated with stereotactic body radiation therapy (SBRT). 112 early stage NSCLC patients treated with SBRT that had static free breathing (FB) and average intensity projection (AIP) images were analyzed. Nineteen radiomic features were selected from each image type (FB or AIP) for analysis based on stability and variance. The selected FB and AIP radiomic feature sets had 6 common radiomic features between both image types and 13 unique features. The prognostic performances of the features for distant metastasis (DM) and locoregional recurrence (LRR) were evaluated using the concordance index (CI) and compared with two conventional features (tumor volume and maximum diameter). P-values were corrected for multiple testing using the false discovery rate procedure. None of the FB radiomic features were associated with DM, however, seven AIP radiomic features, that described tumor shape and heterogeneity, were (CI range: 0.638-0.676). Conventional features from FB images were not associated with DM, however, AIP conventional features were (CI range: 0.643-0.658). Radiomic and conventional multivariate models were compared between FB and AIP images using cross validation. The differences between the models were assessed using a permutation test. AIP radiomic multivariate models (median CI = 0.667) outperformed all other models (median CI range: 0.601-0.630) in predicting DM. None of the imaging features were prognostic of LRR. Therefore, image type impacts the performance of radiomic models in their association with disease recurrence. AIP images contained more information than FB images that were associated with disease recurrence in early stage NSCLC patients treated with SBRT, which suggests that AIP images may potentially be more optimal for the development of an imaging biomarker.&lt;br /&gt;
&lt;br /&gt;
'''Funding:'''&lt;br /&gt;
*U01 CA190234/CA/NCI NIH HHS/United States&lt;br /&gt;
*U24 CA194354/CA/NCI NIH HHS/United States&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:journal.pone.0169172.g001.PNG|thumb|300px| A) Examples of free breathing (FB) and average intensity projection (AIP) images, demonstrating the observable differences in tumor phenotype between each image type. AIP images were reconstructed from 4D computed tomography (CT) scans. B) Schematic representation of the radiomics workflow for FB and AIP images. I. CT images of the patient are acquired and the tumor is segmented. II. Imaging features (radiomic and conventional features) are extracted from the tumor volume. III. Radiomic features undergo a feature dimension reduction process to generate a low-dimensional feature set based on feature stability and variance. IV. Imaging features are then analyzed with clinical outcomes to evaluate their prognostic power. FB and AIP radiomics features are compared. A set of 644 radiomic features was extracted from tumor volumes isolated from FB or AIP images (Fig 1B) using an in-house Matlab 2013 toolbox and [http://slicer.org '''3D Slicer'''] 4.4.0 software]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Early Experiences of Planning Stereotactic Radiosurgery using 3D Printed Models of Eyes with Uveal Melanomas== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/28203052 Clin Ophthalmol. 2017 Jan 31;11:267-71.  PMID: 28203052] | [http://www.ncbi.nlm.nih.gov/pmc/articles/PMC5298814/pdf/opth-11-267.pdf  PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Furdová A, Sramka M, Thurzo A, Furdová A.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Ophthalmology, Faculty of Medicine, Comenius University, Bratislava, Slovakia.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' OBJECTIVE:&lt;br /&gt;
The objective of this study was to determine the use of 3D printed model of an eye with intraocular tumor for linear accelerator-based stereotactic radiosurgery.&lt;br /&gt;
&amp;lt;br&amp;gt;METHODS:&lt;br /&gt;
The software for segmentation ([http://slicer.org '''3D Slicer''']) created virtual 3D model of eye globe with tumorous mass based on tissue density from computed tomography and magnetic resonance imaging data. A virtual model was then processed in the slicing software (Simplify3D®) and printed on 3D printer using fused deposition modeling technology. The material that was used for printing was polylactic acid.&lt;br /&gt;
&amp;lt;br&amp;gt;RESULTS:&lt;br /&gt;
In 2015, stereotactic planning scheme was optimized with the help of 3D printed model of the patient's eye with intraocular tumor. In the period 2001-2015, a group of 150 patients with uveal melanoma (139 choroidal melanoma and 11 ciliary body melanoma) were treated. The median tumor volume was 0.5 cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; (0.2-1.6 cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;). The radiation dose was 35.0 Gy by 99% of dose volume histogram.&lt;br /&gt;
&amp;lt;br&amp;gt;CONCLUSION:&lt;br /&gt;
The 3D printed model of eye with tumor was helpful in planning the process to achieve the optimal scheme for irradiation which requires high accuracy of defining the targeted tumor mass and critical structures.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:jFurdova-ClinOphtalmol2017-fig3.jpg|thumb|300px| A) Virtual model of the eye, outer view; arrow indicates optic nerve. A virtual 3D model of eye globe with tumor based on tissue density was created from CT and MRI data by using the [http://slicer.org '''3D Slicer'''] software for segmentation.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Intra-rater Variability in Low-grade Glioma Segmentation== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/27837437 J Neurooncol. 2017 Jan;131(2):393-402. PMID: 27837437]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Bø HK, Solheim O, Jakola AS, Kvistad KA, Reinertsen I, Berntsen EM.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Radiology and Nuclear Medicine, St. Olavs University Hospital, Trondheim, Norway. &lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Assessment of size and growth are key radiological factors in low-grade gliomas (LGGs), both for prognostication and treatment evaluation, but the reliability of LGG-segmentation is scarcely studied. With a diffuse and invasive growth pattern, usually without contrast enhancement, these tumors can be difficult to delineate. The aim of this study was to investigate the intra-observer variability in LGG-segmentation for a radiologist without prior segmentation experience. Pre-operative 3D FLAIR images of 23 LGGs were segmented three times in the software [http://slicer.org '''3D Slicer''']. Tumor volumes were calculated, together with the absolute and relative difference between the segmentations. To quantify the intra-rater variability, we used the Jaccard coefficient comparing both two (J2) and three (J3) segmentations as well as the Hausdorff Distance (HD). The variability measured with J2 improved significantly between the two last segmentations compared to the two first, going from 0.87 to 0.90 (p = 0.04). Between the last two segmentations, larger tumors showed a tendency towards smaller relative volume difference (p = 0.07), while tumors with well-defined borders had significantly less variability measured with both J2 (p = 0.04) and HD (p &amp;lt; 0.01). We found no significant relationship between variability and histological sub-types or Apparent Diffusion Coefficients (ADC). We found that the intra-rater variability can be considerable in serial LGG-segmentation, but the variability seems to decrease with experience and higher grade of border conspicuity. Our findings highlight that some criteria defining tumor borders and progression in 3D volumetric segmentation is needed, if moving from 2D to 3D assessment of size and growth of LGGs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Hybrid Positron Emission Tomography Segmentation of Heterogeneous Lung Tumors using 3D Slicer: Improved Growcut Algorithm with Threshold Initialization== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/28149920 J. Med. Imag. 2017 Jan-Mar;4(1), 011009.  PMID: 28149920] | [[media:Thomas-JMI2017.pdf | PDF]]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Thomas HM, Devakumar D, Sasidharan B, Bowen SR, Heck DK, Jebaseelan J, Samuel E.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' VIT University, School of Advanced Sciences, Department of Physics, Vellore, Tamil Nadu 632004, India.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' This paper presents an improved GrowCut (IGC), a positron emission tomography-based segmentation algorithm, and tests its clinical applicability. Contrary to the traditional method that requires the user to provide the initial seeds, the IGC algorithm starts with a threshold-based estimate of the tumor and a three- dimensional morphologically grown shell around the tumor as the foreground and background seeds, respectively. The repeatability of IGC from the same observer at multiple time points was compared with the traditional GrowCut algorithm. The algorithm was tested in 11 nonsmall cell lung cancer lesions and validated against the clinician-defined manual contour and compared against the clinically used 25% of the maximum standardized uptake value [SUV-(max)], 40% SUV&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;, and adaptive threshold methods. The time to edit IGC-defined functional volume to arrive at the gross tumor volume (GTV) was compared with that of manual contouring. The repeatability of the IGC algorithm was very high compared with the traditional GrowCut (p = 0.003) and demonstrated higher agreement with the manual contour with respect to threshold-based methods. Compared with manual contouring, editing the IGC achieved the GTV in significantly less time (p = 0.11). The IGC algorithm offers a highly repeatable functional volume and serves as an effective initial guess that can well minimize the time spent on labor-intensive manual contouring.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:jThomas-JMI2017-fig3.png|thumb|300px| A) A representative example of the uncertainty volume observed with the [http://slicer.org '''3D Slicer'''] GrowCutmethod. (a) The lesion was delineated in three separate runs. There was variability with each run and the composite error in the variability calculated as the uncertainty volume is highlighted in green in (b).]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Pre-clinical Validation of Virtual Bronchoscopy using 3D Slicer== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/27325238 Int J Comput Assist Radiol Surg. 2017 Jan;12(1):25-38. PMID: 27325238] &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Nardelli P, Jaeger A, O'Shea C, Khan KA, Kennedy MP, Cantillon-Murphy P.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' School of Engineering, University College Cork, College Road, Cork, Ireland.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Lung cancer still represents the leading cause of cancer-related death, and the long-term survival rate remains low. Computed tomography (CT) is currently the most common imaging modality for lung diseases recognition. The purpose of this work was to develop a simple and easily accessible virtual bronchoscopy system to be coupled with a customized electromagnetic (EM) tracking system for navigation in the lung and which requires as little user interaction as possible, while maintaining high usability.&lt;br /&gt;
Methods:&lt;br /&gt;
The proposed method has been implemented as an extension to the open-source platform, [http://slicer.org '''3D Slicer''']. It creates a virtual reconstruction of the airways starting from CT images for virtual navigation. It provides tools for pre-procedural planning and virtual navigation, and it has been optimized for use in combination with a [Formula: see text] of freedom EM tracking sensor. Performance of the algorithm has been evaluated in ex vivo and in vivo testing.&lt;br /&gt;
Results:&lt;br /&gt;
During ex vivo testing, nine volunteer physicians tested the implemented algorithm to navigate three separate targets placed inside a breathing pig lung model. In general, the system proved easy to use and accurate in replicating the clinical setting and seemed to help choose the correct path without any previous experience or image analysis. Two separate animal studies confirmed technical feasibility and usability of the system.&lt;br /&gt;
Conclusions:&lt;br /&gt;
This work describes an easily accessible virtual bronchoscopy system for navigation in the lung. The system provides the user with a complete set of tools that facilitate navigation towards user-selected regions of interest. Results from ex vivo and in vivo studies showed that the system opens the way for potential future work with virtual navigation for safe and reliable airway disease diagnosis.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Anatomical Study and Locating Nasolacrimal Duct on Computed Topographic Image== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/27977487 J Craniofac Surg. 2017 Jan;28(1):275-9. PMID: 27977487]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Zhang S, Cheng Y, Xie J, Wang Z, Zhang F, Chen L, Feng Y, Wang G.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Endocrinology, First Hospital of Jilin University, Changchun, China.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' We performed a novel anatomical and radiological investigation to understand the structure of nasolacrimal duct (NLD) and to provide data to help surgeons locate the openings of NLD efficiently based on landmarks.&lt;br /&gt;
MATERIALS AND METHODS:&lt;br /&gt;
We examined the NLD region using computed tomography images of 133 individuals and 6 dry skull specimens. Multiplanar reconstruction of the computed tomography images was performed, and the anatomical features of the NLD were studied in the coronal, sagittal, and axial planes. The long and short diameters of NLD were measured along its cross-section. The position of NLD was localized using the nostril, concha nasalis media, and medial orbital corner as landmarks. The free and open source software, 3D Slicer, was used for the segmentation of the NLD and 3D visualization of the superior and inferior openings of the NLD.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The length, angle, and diameter of NLD were significantly influenced by the age in females compared to those in males. The inferior opening of the NLD could be located efficiently using the nostril and the midsagittal line while the superior opening of NLD could be located using the medial orbital corner. Third, [http://slicer.org '''3D Slicer'''] enabled us to measure the distance between the skin and the bony structure in the image.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
Our study indicates that the sex and age of the patient should be considered while selecting the optimal NLD stent for a patient, and that the precise location of NLD in reference to landmarks can simplify the surgical difficulties and reduce the risk of injury during the transnasal operation. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Open Wedge High Tibial Osteotomy using Three-Dimensional Printed Models: Experimental Analysis using Porcine Bone== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/27876267 Knee. 2017 Jan;24(1):16-22. PMID: 27876267]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Kwun JD, Kim HJ, Park J, Park IH, Kyung HS.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Orthopaedic Surgery, School of Medicine, Kyungpook National University, Daegu, Republic of Korea. &lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' BACKGROUND:&lt;br /&gt;
The purpose of this study was to evaluate the usefulness of three-dimensional (3D) printed models for open wedge high tibial osteotomy (HTO) in porcine bone.&lt;br /&gt;
METHODS:&lt;br /&gt;
Computed tomography (CT) images were obtained from 10 porcine knees and 3D imaging was planned using the [http://slicer.org '''3D Slicer'''] program. The osteotomy line was drawn from the three centimeters below the medial tibial plateau to the proximal end of the fibular head. Then the osteotomy gap was opened until the mechanical axis line was 62.5% from the medial border along the width of the tibial plateau, maintaining the posterior tibial slope angle. The wedge-shaped 3D-printed model was designed with the measured angle and osteotomy section and was produced by the 3D printer. The open wedge HTO surgery was reproduced in porcine bone using the 3D-printed model and the osteotomy site was fixed with a plate. Accuracy of osteotomy and posterior tibial slope was evaluated after the osteotomy.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The mean mechanical axis line on the tibial plateau was 61.8±1.5% from the medial tibia. There was no statistically significant difference (P=0.160). The planned and post-osteotomy correction wedge angles were 11.5±3.2° and 11.4±3.3°, and the posterior tibial slope angle was 11.2±2.2° pre-osteotomy and 11.4±2.5° post-osteotomy. There were no significant differences (P=0.854 and P=0.429, respectively).&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
This study showed that good results could be obtained in high tibial osteotomy by using 3D printed models of porcine legs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Go to &amp;lt;big&amp;gt;[https://www.slicer.org/wiki/Main_Page/SlicerCommunity-2016 2016]:: [http://wiki.slicer.org/slicerWiki/index.php/Main_Page/SlicerCommunity-2015 2015] :: [http://wiki.slicer.org/slicerWiki/index.php/Main_Page/SlicerCommunity-2011-2014 2014-2011] :: [http://wiki.slicer.org/slicerWiki/index.php/Main_Page/SlicerCommunity-2005-2010 2010-2005]&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Hherhold</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Main_Page/SlicerCommunity&amp;diff=54935</id>
		<title>Main Page/SlicerCommunity</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Main_Page/SlicerCommunity&amp;diff=54935"/>
		<updated>2017-09-19T01:22:31Z</updated>

		<summary type="html">&lt;p&gt;Hherhold: /* 2017 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=3D Slicer Enabled Research=&lt;br /&gt;
&lt;br /&gt;
[http://www.slicer.org 3D Slicer] is a free open source software package distributed under a BSD style [[Projects/slicerWeb:LicenseText|license]]. The majority of funding for the development of 3D slicer comes from a number of grants and contracts from the National Institutes of Health. See [http://www.slicer.org/wiki/Documentation/4.x/Acknowledgments Slicer Acknowledgments] for more information.&lt;br /&gt;
&lt;br /&gt;
This page focuses on research that was done outside of our immediate collaboration community. That community is represented in the [http://www.slicer.org/publications/pages/display/?collection=11 publication database].&lt;br /&gt;
&lt;br /&gt;
We invite you to provide information on how you are using 3D Slicer to produce peer-reviewed research. Information about the scientific impact of this tool is helpful in raising funding for the continued support.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;[https://www.slicer.org/wiki/Main_Page/SlicerCommunity-2016 2016]:: [http://wiki.slicer.org/slicerWiki/index.php/Main_Page/SlicerCommunity-2015 2015] :: [http://wiki.slicer.org/slicerWiki/index.php/Main_Page/SlicerCommunity-2011-2014 2014-2011] :: [http://wiki.slicer.org/slicerWiki/index.php/Main_Page/SlicerCommunity-2005-2010 2010-2005]&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=2017=&lt;br /&gt;
==A new genus of hell ants from the Cretaceous (Hymenoptera: Formicidae: Haidomyrmecini) with a novel head structure== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://onlinelibrary.wiley.com/doi/10.1111/syen.12253 Systematic Entomology. 2017 Sep 4;42(4):837-846.]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Barden, Phillip A., Herhold, Hollister W., Grimaldi, David A.&lt;br /&gt;
&lt;br /&gt;
'''Institutions:'''  Department of Biological Sciences, New Jersey Institute of Technology, Newark, NJ, U.S.A. (PB), Department of Invertebrate Zoology, American Museum of Natural History, New York, NY, U.S.A. (PB, HH, DG)&lt;br /&gt;
&lt;br /&gt;
'''Abstract:''' An unusual Cretaceous trap jaw ant is described from Burmese amber dated to the Late Cretaceous. Linguamyrmex vladi gen.n. sp.n. is distinguished by an unusual suite of morphological characters indicating specialized predatory behaviour and an adaptive strategy no longer found among modern ant lineages. The clypeus, highly modified as in other closely related haidomyrmecine hell ants, is equipped with a paddle-like projection similar to Ceratomyrmex. X-ray imaging reveals that this clypeal paddle is reinforced, most probably with sequestered metals. Presumably this fortified clypeal structure was utilized in tandem with scythe-like mandibles to pin and potentially puncture soft-bodied prey. This unique taxon, which stresses the diversity of stem-group ants, is discussed in the context of modern and other Cretaceous trap jaw ant species.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Linguamyrmex_vladi.png|thumb|300px| Three-dimensional reconstruction and two-dimensional X-ray ‘slices’ of Linguamyrmex vladi. (A) Three-dimensional reconstruction of specimen BuPH-01 in lateral view. Some elements are irrecoverable in X-ray imaging due to the similar attenuation properties of both amber and thin cuticle. Scale bar, 0.75 mm. (B) Lateral view of head capsule, mandibles and clypeal paddle. Planes C and D correspond with panels C and D, respectively. Scale bar, 0.2 mm. (C) Cross-section of clypeal paddle from oblique dorsal view. Labels demonstrate approximate pixel ‘grey values’ for each fossil material, which in turn represent relative X-ray attenuation levels. (D) Cross-section of clypeal paddle from frontal view. Scale bar, 0.08 mm in each cross-section.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Automated Catheter Navigation with Electromagnetic Image Guidance==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
||&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28362578 IEEE Trans Biomed Eng. 2017 Aug;64(8):1972-9.  PMID: 28362578]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Jaeger HA, Nardelli P, O'Shea C, Tugwell J, Khan KA, Power T, O'Shea M, Kennedy MP, Cantillon-Murphy P.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' School of Engineering, University College Cork, Cork, Ireland.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose: ''' This paper describes a novel method of controlling an endoscopic catheter using an automated catheter tensioning system with the objective of providing clinicians with improved manipulation capabilities within the patient. Catheters are used in many clinical procedures to provide access to the cardiopulmonary system. Control of such catheters is performed manually by the clinicians using a handle, typically actuating a single or opposing set of pull-wires. Such catheters are generally actuated in a single plane, requiring the clinician to rotate the catheter handle to navigate the system. The automation system described here allows closed-loop control of a custom bronchial catheter in tandem with an electromagnetic tracking of the catheter tip and image guidance using [http://www.slicer.org '''3D Slicer''']. An electromechanical drive train applies tension to four pull-wires to steer the catheter tip, with the applied force constantly monitored though force sensing load-cells. The applied tension is controlled through a PC connected joystick. An electromagnetic sensor embedded in the catheter tip enables constant real-time position tracking while a working channel provides a route for endoscopic instruments. The system is demonstrated and tested in both a breathing lung model and a preclinical animal study. Navigation to predefined targets in the subject's airways using the joystick while using virtual image guidance and electromagnetic tracking was demonstrated. Average targeting times were 24 seconds and 10 seconds respectively for the breathing lung and live animal studies. This paper presents the first reported remote controlled bronchial working channel catheter utilizing electromagnetic tracking and has many implications for future development in endoscopic and catheter based procedures.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Quantitative CT ventriculography for Assessment and Monitoring of Hydrocephalus: a Pilot Study and Description of Method in Subarachnoid Hemorrhage (SAH)== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28456742 World Neurosurg. 2017 Aug;104:136-141.  PMID: 28456742]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Multani JS, Oermann EK, Titano J, Mascitelli J, Nicol K, Feng R, Skovrlj B, Pain M, Mocco JD, Bederson JB, Costa A, Shrivastava R.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Neurological Surgery, Mount Sinai Health System, New York, NY, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' There is no facile quantitative method for monitoring hydrocephalus (HCP).&lt;br /&gt;
OBJECTIVE:&lt;br /&gt;
We propose quantitative CT ventriculography (qCTV) as a novel computer vision tool for empirically assessing HCP in patients with subarachnoid hemorrhage (SAH).&lt;br /&gt;
METHODS:&lt;br /&gt;
Twenty patients with SAH who were evaluated for ventriculoperitoneal shunt (VPS) placement were selected for inclusion. Ten patients with normal CT head (CTH) were analyzed as negative controls. CTH scans were segmented both manually and automatically (qCTV) to generate measures of ventricular volume.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Median manually calculated ventricular volume was 36.1cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;(IQR 30-115cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;), which was similar to a median qCTV measured volume of 37.5cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; (IQR 32-118cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;) (p=0.796). Patients undergoing VPS placement demonstrated an increase in ventricular volume on qCTV from 21cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; to 40cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; on Day T-2, and 51cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; by Day 0, a change of 144%. This contrasts with patients who did not require shunting whose ventricular volumes decreased from 16 to 14cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; on Day T-2, and 13cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; by Day 0, with an average overall decrease in volume of 19% (p=0.001). Average change in ventricular volume predicted which patients would require VPS placement, successfully identifying 7/10 patients (p=0.004). Using an optimized cutoff of change in ventricular volume of 2.5cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; identified all patients who went on to require VPS placement (10/10, p=0.011).&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
qCTV is a reliable means of quantifying ventricular volume and hydrocephalus. This technique offers a new tool for monitoring neurosurgical patients for hydrocephalus, and may be beneficial for use in future research studies as well as the routine care of patients with hydrocephalus.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==What are the True Volumes of SEGA Tumors? Reliability of Planimetric and Popular Semi-automated Image Segmentation Methods==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
||&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28321524 MAGMA. 2017 Aug;30(4):397-405. PMID: 28321524]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Stawiski K, Trelińska J, Baranska D, Dachowska I, Kotulska K, Jóźwiak S, Fendler W, Młynarski W.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Biostatistics and Translational Medicine, Hematology and Diabetology, Medical University of Lodz, Lodz, Poland.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose: '''OBJECTIVE:&lt;br /&gt;
To evaluate the reliability of the standard planimetric methodology of volumetric analysis and three different open-source semi-automated approaches of brain tumor segmentation.&lt;br /&gt;
MATERIALS AND METHODS:&lt;br /&gt;
The volumes of subependymal giant cell astrocytomas (SEGA) examined by 30 MRI studies of 10 patients from a previous everolimus-related trial (EMINENTS study) were estimated using four methods: planimetric method (modified MacDonald ellipsoid method), ITK-Snap (pixel clustering, geodesic active contours, region competition methods), [http://www.slicer.org '''3D Slicer'''] (level-set thresholding), and NIRFast (k-means clustering, Markov random fields). The methods were compared, and a trial simulation was performed to determine how the choice of approach could influence the final decision about progression or response.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Intraclass correlation coefficient was high (0.95; 95% CI 0.91-0.98). The planimetric method always overestimated the size of the tumor, while virtually no mean difference was found between ITK-Snap and [http://www.slicer.org '''3D Slicer'''] (P = 0.99). NIRFast underestimated the volume and presented a proportional bias. During the trial simulation, a moderate level of agreement between all the methods (kappa 0.57-0.71, P &amp;lt; 0.002) was noted.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
Semi-automated segmentation can ease oncological follow-up but the moderate level of agreement between segmentation methods suggests that the reference standard volumetric method for SEGA tumors should be revised and chosen carefully, as the selection of volumetry tool may influence the conclusion about tumor progression or response.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==MRI Visible Fe&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;O&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt; Polypropylene Mesh: 3D Reconstruction of Spatial Relation to Bony Pelvis and Neurovascular Structures== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28124074 Int Urogynecol J. 2017 Aug;28(8):1131-8.  PMID: 28124074]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Chen L, Lenz F, Alt CD, Sohn C, De Lancey JO, Brocker KA.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Pelvic Floor Research Group, Biomedical Engineering Department, University of Michigan, Ann Arbor, MI, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:'''&lt;br /&gt;
INTRODUCTION AND HYPOTHESIS:&lt;br /&gt;
To demonstrate mesh magnetic resonance imaging (MRI) visibility in living women, the feasibility of reconstructing the full mesh course in 3D, and to document its spatial relationship to pelvic anatomical structures.&lt;br /&gt;
&amp;lt;br&amp;gt;METHODS:&lt;br /&gt;
This is a proof of concept study of three patients from a prospective multi-center trial evaluating women with anterior vaginal mesh repair using a MRI-visible Fe&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;O&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt; polypropylene implant for pelvic floor reconstruction. High-resolution sagittal T2-weighted (T2w) sequences, transverse T1-weighted (T1w) FLASH 2D, and transverse T1w FLASH 3D sequences were performed to evaluate Fe&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;O&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt; polypropylene mesh MRI visibility and overall post-surgical pelvic anatomy 3 months after reconstructive surgery. Full mesh course in addition to important pelvic structures were reconstructed using the  [http://slicer.org '''3D Slicer''']® software program based on T1w and T2w MRI.&lt;br /&gt;
&amp;lt;br&amp;gt;RESULTS:&lt;br /&gt;
Three women with POP-Q grade III cystoceles were successfully treated with a partially absorbable MRI-visible anterior vaginal mesh with six fixation arms and showed no recurrent cystocele at the 3-month follow-up examination. The course of mesh in the pelvis was visible on MRI in all three women. The mesh body and arms could be reconstructed allowing visualization of the full course of the mesh in relationship to important pelvic structures such as the obturator or pudendal vessel nerve bundles in 3D.&lt;br /&gt;
&amp;lt;br&amp;gt;CONCLUSIONS:&lt;br /&gt;
The use of MRI-visible Fe3O4 polypropylene meshes in combination with post-surgical 3D reconstruction of the mesh and adjacent structures is feasible suggesting that it might be a useful tool for evaluating mesh complications more precisely and a valuable interactive feedback tool for surgeons and mesh design engineers.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Three-dimensional Printing of X-ray Computed Tomography Datasets with Multiple Materials using Open-source Data Processing== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28231405 Anat Sci Educ. 2017 Jul;10(4):383-91. PMID: 28231405]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Sander IM, McGoldrick MT, Helms MN, Betts A, van Avermaete A, Owers E, Doney E, Liepert T, Niebur G, Liepert D, Leevy WM.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Biological Sciences, College of Science, University of Notre Dame, Notre Dame, Indiana., USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Advances in three-dimensional (3D) printing allow for digital files to be turned into a &amp;quot;printed&amp;quot; physical product. For example, complex anatomical models derived from clinical or pre-clinical X-ray computed tomography (CT) data of patients or research specimens can be constructed using various printable materials. Although 3D printing has the potential to advance learning, many academic programs have been slow to adopt its use in the classroom despite increased availability of the equipment and digital databases already established for educational use. Herein, a protocol is reported for the production of enlarged bone core and accurate representation of human sinus passages in a 3D printed format using entirely consumer-grade printers and a combination of free-software platforms. The comparative resolutions of three surface rendering programs were also determined using the sinuses, a human body, and a human wrist data files to compare the abilities of different software available for surface map generation of biomedical data. Data shows that  [http://slicer.org '''3D Slicer''']  provided highest compatibility and surface resolution for anatomical 3D printing. Generated surface maps were then 3D printed via fused deposition modeling (FDM printing). In conclusion, a methodological approach that explains the production of anatomical models using entirely consumer-grade, fused deposition modeling machines, and a combination of free software platforms is presented in this report. The methods outlined will facilitate the incorporation of 3D printed anatomical models in the classroom.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==A New Device for Fiducial Registration of Image-guided Navigation System for Liver RFA== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28718001 Int J Comput Assist Radiol Surg. 2017 Jul 17. PMID: 28718001]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Doba N, Fukuda H, Numata K, Hao Y, Hara K, Nozaki A, Kondo M, Chuma M, Tanaka K, Takebayashi S, Koizumi N, Kobayashi A, Tokuda J, Maeda S.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Gastroenterological Center, Yokohama City University Medical Center, Yokohama, Japan.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Radiofrequency ablation for liver tumors (liver RFA) is widely performed under ultrasound guidance. However, discriminating between the tumor and the needle is often difficult because of cavitation caused by RFA-induced coagulation. An unclear ultrasound image can lead to complications and tumor residue. Therefore, image-guided navigation systems based on fiducial registration have been developed. Fiducial points are usually set on a patient's skin. But the use of internal fiducial points can improve the accuracy of navigation. In this study, a new device is introduced to use internal fiducial points using 2D US.&lt;br /&gt;
METHODS:&lt;br /&gt;
3D Slicer as the navigation software, Polaris Vicra as the position sensor, and two target tumors in a 3D abdominal phantom as puncture targets were used. Also, a new device that makes it possible to obtain tracking coordinates in the body was invented. First, two-dimensional reslice images from the CT images using [http://slicer.org '''3D Slicer''']  were built. A virtual needle was displayed on the two-dimensional reslice image, reflecting the movement of the actual needle after fiducial registration. A phantom experiment using three sets of fiducial point configurations: one conventional case using only surface points, and two cases in which the center of the target tumor was selected as a fiducial point was performed. For each configuration, one surgeon punctured each target tumor ten times under guidance from the [http://slicer.org '''3D Slicer''']  display. Finally, a statistical analysis examining the puncture error was performed.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The puncture error for each target tumor decreased significantly when the center of the target tumor was included as one of the fiducial points, compared with when only surface points were used.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
This study introduces a new device to use internal fiducial points and suggests that the accuracy of image-guided navigation systems for liver RFA can be improved by using the new device.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==MultiXplore: Visual Exploration Platform for Multimodal Neuroimaging Data== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28712912 J Neurosci Methods. 2017 Jul 13;290:1-12. PMID: 28712912]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Bakhshmand SM, Khan AR, de Ribaupierre S, Eagleson R.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Biomedical Engineering Graduate Program, University of Western Ontario, London, Ontario, Canada.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' BACKGROUND:&lt;br /&gt;
Construction of brain functional and structural networks by neuroimaging methods facilitates inter-modal studies. These type of studies often demand exploration tools to carry out functional-structural discoveries and answer questions regarding the anatomical basis of brain networks.&lt;br /&gt;
NEW METHOD:&lt;br /&gt;
This paper describes the design and development of a software module for interactive visualization and exploration of dual-modal brain networks. Our objective was to equip the user with a research tool to investigate brain connectivity matrices while visualizing relevant anatomical landmarks within a 3D volumetric view. In order to create this view, MultiXplore was designed to load data from both structural and diffusion MRI and connectivity matrices.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Once user starts to select desired cells through an interactive matrix unit, associated axonal fiber pathways and grey matter regions are generated and displayed. Integration and visualization of functional and structural networks in this 3D interactive framework was successfully implemented and tested.&lt;br /&gt;
COMPARISON WITH EXISTING METHOD(S):&lt;br /&gt;
MultiXplore contributes to the transition of connectivity visualization techniques from node-link format to an anatomically more realistic graphical form and assists scientists in relating connectivity matrices to their anatomical correlates. This module also benefits from additional novel functionalities to annotate and differentiate fibers in a large bundle. Unlike traditional graph displays, interactive functionality helps in the inspection and visualization of relevant structures without cluttering the scene with excessive items.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
This module was designed and developed as a plugin to [http://slicer.org '''3D Slicer'''] imaging platform and is accessible for neuroimaging researchers through NITRC (http://www.nitrc.org/projects/multixplore/).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Optimization of a Novel Large Field of View Distortion Phantom for MR-only Treatment Planning== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28497476 J Appl Clin Med Phys. 2017 Jul;18(4):51-61.  PMID: 28497476]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Price RG, Knight RA, Hwang KP, Bayram E, Nejad-Davarani SP, Glide-Hurst CK.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Radiation Oncology, Henry Ford Health System, Detroit, MI, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' PURPOSE:&lt;br /&gt;
MR-only treatment planning requires images of high geometric fidelity, particularly for large fields of view (FOV). However, the availability of large FOV distortion phantoms with analysis software is currently limited. This work sought to optimize a modular distortion phantom to accommodate multiple bore configurations and implement distortion characterization in a widely implementable solution.&lt;br /&gt;
METHOD AND MATERIALS:&lt;br /&gt;
To determine candidate materials, 1.0 T MR and CT images were acquired of twelve urethane foam samples of various densities and strengths. Samples were precision-machined to accommodate 6 mm diameter paintballs used as landmarks. Final material candidates were selected by balancing strength, machinability, weight, and cost. Bore sizes and minimum aperture width resulting from couch position were tabulated from the literature (14 systems, 5 vendors). Bore geometry and couch position were simulated using MATLAB to generate machine-specific models to optimize the phantom build. Previously developed software for distortion characterization was modified for several magnet geometries (1.0 T, 1.5 T, 3.0 T), compared against previously published 1.0 T results, and integrated into the [http://slicer.org '''3D Slicer'''] application platform.&lt;br /&gt;
RESULTS:&lt;br /&gt;
All foam samples provided sufficient MR image contrast with paintball landmarks. Urethane foam (compressive strength ∼1000 psi, density ~20 lb/ft&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; ) was selected for its accurate machinability and weight characteristics. For smaller bores, a phantom version with the following parameters was used: 15 foam plates, 55 × 55 × 37.5 cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; (L×W×H), 5,082 landmarks, and weight ~30 kg. To accommodate &amp;gt; 70 cm wide bores, an extended build used 20 plates spanning 55 × 55 × 50 cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; with 7,497 landmarks and weight ~44 kg. Distortion characterization software was implemented as an external module into [http://slicer.org '''3D Slicer''']'s plugin framework and results agreed with the literature.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
The design and implementation of a modular, extendable distortion phantom was optimized for several bore configurations. The phantom and analysis software will be available for multi-institutional collaborations and cross-validation trials to support MR-only planning.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Validation of a Method for &amp;quot;Dose of the Day&amp;quot; Calculation in Head-neck Tomotherapy by using Planning CT-to-MVCT Deformable Image Registration== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28619289 Phys Med. 2017 Jul;39:73-79.   PMID: 28619289]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Branchini M, Fiorino C, Dell'Oca I, Belli ML, Perna L, Di Muzio N, Calandrino R, Broggi S.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Medical Physics Department, San Raffaele Scientific Institute, Milano, Italy.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' PURPOSE:&lt;br /&gt;
The aim of this study was to test the feasibility and dosimetric accuracy of a method that employs planning CT-to-MVCT deformable image registration (DIR) for calculation of the daily dose for head and neck (HN) patients treated with Helical Tomotherapy (HT).&lt;br /&gt;
METHODS:&lt;br /&gt;
For each patient, the planning kVCT (CTplan) was deformably registered to the MVCT acquired at the 15th therapy session (MV15) with a B-Spline Free Form algorithm using Mattes mutual information (open-source software [http://slicer.org '''3D Slicer''']), resulting in a deformed CT (CTdef). On the same day as MVCT15, a kVCT was acquired with the patient in the same treatment position (CT15). The original HT plans were recalculated both on CTdef and CT15, and the corresponding dose distributions were compared; local dose differences &amp;lt;2% of the prescribed dose (DD2%) and 2D/3D gamma-index values (2%-2mm) were assessed respectively with Mapcheck SNC Patient software (Sun Nuclear) and with [http://slicer.org '''3D Slicer'''].&lt;br /&gt;
RESULTS:&lt;br /&gt;
On average, 87.9%±1.2% of voxels were found for DD2% (on average 27 slices available for each patient) and 94.6%±0.8% of points passed the 2D gamma analysis test while the 3D gamma test was satisfied in 94.8%±0.8% of body's voxels.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
This study represents the first demonstration of the dosimetric accuracy of kVCT-to-MVCT DIR for dose of the day computations. The suggested method is sufficiently fast and reliable to be used for daily delivered dose evaluations in clinical strategies for adaptive Tomotherapy of HN cancer.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==SLIDE: Automatic Spine Level Identification System using a Deep Convolutional Neural Network== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28361323 Int J Comput Assist Radiol Surg. 2017 Jul;12(7):1189-98.  PMID: 28361323]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Hetherington J, Lessoway V, Gunka V, Abolmaesumi P, Rohling R.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Electrical and Computer Engineering, The University of British Columbia, Vancouver, Canada.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' PURPOSE:&lt;br /&gt;
Percutaneous spinal needle insertion procedures often require proper identification of the vertebral level to effectively and safely deliver analgesic agents. The current clinical method involves &amp;quot;blind&amp;quot; identification of the vertebral level through manual palpation of the spine, which has only 30% reported accuracy. Therefore, there is a need for better anatomical identification prior to needle insertion.&lt;br /&gt;
METHODS:&lt;br /&gt;
A real-time system was developed to identify the vertebral level from a sequence of ultrasound images, following a clinical imaging protocol. The system uses a deep convolutional neural network (CNN) to classify transverse images of the lower spine. Several existing CNN architectures were implemented, utilizing transfer learning, and compared for adequacy in a real-time system. In the system, the CNN output is processed, using a novel state machine, to automatically identify vertebral levels as the transducer moves up the spine. Additionally, a graphical display was developed and integrated within [http://slicer.org '''3D Slicer''']. Finally, an augmented reality display, projecting the level onto the patient's back, was also designed. A small feasibility study [Formula: see text] evaluated performance.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The proposed CNN successfully discriminates ultrasound images of the sacrum, intervertebral gaps, and vertebral bones, achieving 88% 20-fold cross-validation accuracy. Seventeen of 20 test ultrasound scans had successful identification of all vertebral levels, processed at real-time speed (40 frames/s).&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
A machine learning system is presented that successfully identifies lumbar vertebral levels. The small study on human subjects demonstrated real-time performance. A projection-based augmented reality display was used to show the vertebral level directly on the subject adjacent to the puncture site.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==A New Approach for Radiosynoviorthesis: A Dose-Optimized Planning method Based on Monte Carlo Simulation and Synovial Measurement using 3D Slicer and MRI== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28419533 Med Phys. 2017 Jul;44(7):3821-9.  PMID: 28419533]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Torres Berdeguez MB, Thomas S, Rafful P, Arruda Sanchez T, Medeiros Oliveira Ramos S, Albernaz MS, Vasconcellos de Sá L, Lopes de Souza SA, Mas Milian F, Xavier da Silva A.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Nuclear Engineering Department of Federal University of Rio de Janeiro, Rio de Janeiro, Brazil.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Recently, there has been a growing interest in a methodology for dose planning in radiosynoviorthesis to substitute fixed activity. Clinical practice based on fixed activity frequently does not embrace radiopharmaceutical dose optimization in patients. The aim of this paper is to propose and discuss a dose planning methodology considering the radiological findings of interest obtained by three-dimensional magnetic resonance imaging combined with Monte Carlo simulation in radiosynoviorthesis treatment applied to hemophilic arthropathy.&lt;br /&gt;
METHOD:&lt;br /&gt;
The parameters analyzed were: surface area of the synovial membrane (synovial size), synovial thickness and joint effusion obtained by 3D MRI of nine knees from nine patients on a SIEMENS AVANTO 1.5 T scanner using a knee coil. The [http://slicer.org '''3D Slicer'''] software performed both the semiautomatic segmentation and quantification of these radiological findings. A Lucite phantom 3D MRI validated the quantification methodology. The study used Monte Carlo N-Particle eXtended code version 2.6 for calculating the S-values required to set up the injected activity to deliver a 100 Gy absorbed dose at a determined synovial thickness. The radionuclides assessed were: 90Y, 32P, 188Re, 186Re, 153Sm, and 177Lu, and the present study shows their effective treatment ranges.&lt;br /&gt;
RESULT:&lt;br /&gt;
The quantification methodology was successfully tested, with an error below 5% for different materials. S-values calculated could provide data on the activity to be injected into the joint, considering no extra-articular leakage from joint cavity. Calculation of effective treatment range could assist with the therapeutic decision, with an optimized protocol for dose prescription in RSO.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
Using 3D Slicer software, this study focused on segmentation and quantification of radiological features such as joint effusion, synovial size and thickness, all obtained by 3D MRI in patients knees with hemophilic arthropathy. The combination of synovial size and thickness with the parameters obtained by Monte Carlo simulation such as effective treatment range and S-value, from which is calculated the injected activity, could be used for treatment planning in RSO. Data from this methodology could be a potential aid to clinical decision making by selecting the most suitable radionuclide; justifying the procedure, fractioning the dose and the calculated injected activity for children and adolescents, considering both the synovial size and thickness.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Retrospective Evaluation and SEEG Trajectory Analysis for Interactive Multi-trajectory Planner Assistant== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28710548 Int J Comput Assist Radiol Surg. 2017 Jul 14.  PMID: 28710548]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Scorza D, De Momi E, Plaino L, Amoroso G, Arnulfo G, Narizzano M, Kabongo L, Cardinale F.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
e-Health and Biomedical Applications Department, Vicomtech-IK4, Donostia-San Sebastián, Spain. &lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' PURPOSE:&lt;br /&gt;
Focal epilepsy is a neurological disease that can be surgically treated by removing area of the brain generating the seizures. The stereotactic electroencephalography (SEEG) procedure allows patient brain activity to be recorded in order to localize the onset of seizures through the placement of intracranial electrodes. The planning phase can be cumbersome and very time consuming, and no quantitative information is provided to neurosurgeons regarding the safety and efficacy of their trajectories. In this work, we present a novel architecture specifically designed to ease the SEEG trajectory planning using the [http://slicer.org '''3D Slicer'''] platform as a basis.&lt;br /&gt;
METHODS:&lt;br /&gt;
Trajectories are automatically optimized following criteria like vessel distance and insertion angle. Multi-trajectory optimization and conflict resolution are optimized through a selective brute force approach based on a conflict graph construction. Additionally, electrode-specific optimization constraints can be defined, and an advanced verification module allows neurosurgeons to evaluate the feasibility of the trajectory.&lt;br /&gt;
RESULTS:&lt;br /&gt;
A retrospective evaluation was performed using manually planned trajectories on 20 patients: the planning algorithm optimized and improved trajectories in 98% of cases. We were able to resolve and optimize the remaining 2% by applying electrode-specific constraints based on manual planning values. In addition, we found that the global parameters used discards 68% of the manual planned trajectories, even when they represent a safe clinical choice.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
Our approach improved manual planned trajectories in 98% of cases in terms of quantitative indexes, even when applying more conservative criteria with respect to actual clinical practice. The improved multi-trajectory strategy overcomes the previous work limitations and allows electrode optimization within a tolerable time span.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Canal Transportation, Unprepared Areas, and Dentin Removal after Preparation with BT-RaCe and ProTaper Next Systems== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28712638 J Endod. 2017 Jul 13. PMID: 28712638]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Brasil SC, Marceliano-Alves MF, Marques ML, Grillo JP, Lacerda MFLS, Alves FRF, Siqueira JF Jr, Provenzano JC.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Endodontics, Faculty of Dentistry, Estácio de Sá University, Rio de Janeiro, Brazil.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' BACKGROUND:&lt;br /&gt;
This study compared the shaping ability of ProTaper Next (Dentsply Sirona, Tulsa, OK) and BT-RaCe (FKG Dentaire, La Chaux-de-Fonds, Switzerland) instrument systems in the mesial canals of mandibular molars using micro-computed tomographic (micro-CT) imaging.&lt;br /&gt;
METHODS:&lt;br /&gt;
A total of 17 type IV mesial roots of extracted first mandibular molars were scanned using micro-CT imaging before and after root canal preparation with the 2 instrument systems. Both systems were used in the same root but alternating the mesial canals from root to root. The following parameters were analyzed: root canal volume, surface area, unprepared surface areas, transportation, canal/root width ratio, and preparation time.&lt;br /&gt;
RESULTS:&lt;br /&gt;
There were no statistically significant differences between the 2 systems for all evaluated parameters (P &amp;gt; .05). The unprepared surface areas for the full canal length and the apical 5-mm segment were 33% and 14% for BT-RaCe and 31% and 14% for ProTaper Next, respectively. After preparation, all root canals had a diameter that was not larger than 35% of the root diameter at the coronal and middle segments.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
The 2 systems showed no differences in any of the evaluated shaping parameters. None of the tested systems put the roots at risk of fracture because of excessive dentin removal.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Presurgical Planning for Supratentorial Lesions with Free 3D Slicer Software and Sina App== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28673889 World Neurosurg. 2017 Jun 30.   PMID: 28673889]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Chen JG, Han KW, Zhang DF, Li ZX, Li YM, Hou LJ.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  &lt;br /&gt;
Department of Neurosurgery, Shanghai Neurosurgical Institute, Changzheng Hospital, Shanghai, China.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Neuronavigation system is widely used in the localization of intracranial lesions with satisfactory accuracy. However, it's expensive and difficult to learn. Therefore, simple and practical augmented reality (AR) system using mobile devices might be an alternative technique.&lt;br /&gt;
OBJECTIVE:&lt;br /&gt;
We aim to introduce a mobile AR system for the localization of supratentorial lesions. Its practicability and accuracy were examined by clinical application in patients and comparison with standard neuronavigation system.&lt;br /&gt;
METHODS:&lt;br /&gt;
Three-dimensional (3D) model including lesions is created using [http://slicer.org '''3D Slicer''']. 2D image of this 3D model was obtained and overlapped on patients' head using Sina app. Registration was conducted with the assistance of anatomical landmarks and fiducial markers. Center of lesion projected on scalp was identified with our mobile AR system and standard neuronavigation system, respectively. Distance difference between centers identified by these two systems was measured.&lt;br /&gt;
RESULT:&lt;br /&gt;
Our mobile AR system was simple and accurate in the localization of supratentorial lesions with a mean distance difference of 4.4 ± 1.1 mm. Registration added on an average of 141.7 ± 39 seconds to operation time. There was no statistically significant difference for the required time among three registrations (P=0.646).&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
The mobile AR system presents an alternative technology for image-guided neurosurgery and proves to be practical and reliable. The technique contributes to optimal presurgical planning for supratentorial lesions, especially in the absence of neuronavigation system.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Nerve Atrophy in Trigeminal Neuralgia Due to Neurovascular Compression and its Association with Surgical Outcomes after Microvascular Decompression== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28638946 Acta Neurochir (Wien). 2017 Jun 21.   PMID: 28638946]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Cheng J, Meng J, Liu W, Zhang H, Hui X, Lei D.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  &lt;br /&gt;
Department of Neurosurgery, West China Hospital, Sichuan University, Sichuan, China.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' BACKGROUND:&lt;br /&gt;
Idiopathic trigeminal neuralgia (TN) is caused by neurovascular compression and is often related to morphological changes in the trigeminal nerve. The aim of this study was to quantitatively measure atrophic changes of trigeminal nerves in patients with TN, and to further investigate whether nerve atrophy affected the efficacy of microvascular decompression (MVD).&lt;br /&gt;
METHODS:&lt;br /&gt;
We conducted a prospective case-control study of 60 consecutive patients with TN and 30 sex- and age-matched healthy controls. All subjects underwent high-resolution three-dimensional MRI. The volume of the cisternal segment of trigeminal nerves was measured and compared using [http://slicer.org '''3D Slicer'''] software. Patients with TN underwent primary MVD and regular follow-up for at least 2 years. Associations of nerve atrophy with patient characteristics and operative outcomes were analyzed.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The mean volume of the affected trigeminal nerve was significantly reduced in comparison to that of the nonaffected side (65.8 ± 21.1 versus 77.9 ± 19.3 mm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;, P = 0.001) and controls (65.8 ± 21.1 versus 74.7 ± 16.5 mm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;, P = 0.003). Fifty-two patients (86.7%) achieved complete pain relief without medication immediately after surgery, and 77.6% of patients were complete pain relief at the 2-year follow-up. The Spearman correlation test showed that there was a positive correlation (r = 0.46, P = 0.018) between the degree of trigeminal nerve indentation and nerve atrophy. In multivariate logistic regression analysis, two factors, indentation on nerve root (OR = 2.968, P = 0.022) and degree of nerve atrophy (OR = 1.18, P = 0.035), were associated with the long-term outcome.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
TN is associated with atrophy on the affected nerve. Furthermore, greater nerve atrophy is associated with more severe trigeminal nerve indentation and better long-term outcome following MVD.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Complete Thoracolumbar Fracture-dislocation with Intact Neurologic Function: Explanation of a Novel Cord Saving Mechanism== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28648115 J Spinal Cord Med. 2017 Jun 26:1-10.   PMID: 28648115]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Rahimizadeh A, Asgari N, Rahimizadeh A.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Department of Neurosurgery , Pars Advanced and Minimally Invasive Medical Manners Research Center, Pars Hospital, Iran University of Medical Science, Tehran, Iran.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' BACKGROUND:&lt;br /&gt;
The thoracolumbar junction from T11 to L2 is a common site of injury in which fracture and dislocations are the most prevalent ones occurring at this location. Fracture dislocation is defined as failure of all three columns of the spine with gross displacement. Considering the significant violence necessary to produce fracture dislocations, these injuries are often associated with major neural deficit, with the majority of casualties becoming paraplegic immediately. Preservation of neurological function following complete fracture dislocation is quite rare entity.&lt;br /&gt;
OBJECTIVE:&lt;br /&gt;
To represent the possibility of existence of a preservation mechanism for functional integrity of cord despite spinal gross fracture dislocation by reproducing the injury on a plastic model and simulating a corresponding model using [http://slicer.org '''3D Slicer'''] software, detailed description the pathomechanism of neurologic sparing.&lt;br /&gt;
CASE REPORT:&lt;br /&gt;
A 19-year-old female who sustained severe thoracolumbar fracture dislocation but with normal neurology is presented. Despite the severity of the condition, the diagnosis was initially missed due to associated vital injuries.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Combined posterior and anterior surgery resulted in optimal coronal and sagittal alignment, as well as proper stabilization without any complication. At 9-year follow-up, the patient was found to be doing well.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
The prognosis for complete recovery with preplanned surgical intervention in thoracolumbar injuries affecting all three columns but with normal neurologic function is promising based on images, plastic models and 3D simulated model based on digital images.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Device-specific Evaluation of Intraventricular Left Ventricular Assist Device Position by Quantitative Coaxiality Analysis== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28601303 J Surg Res. 2017 Jun 1;213:110-4..   PMID: 28601303]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Anselmi A, Collin S, Haigron P, Verhoye JP, Flecher E.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  INSERM U1099, Rennes, France.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' BACKGROUND:&lt;br /&gt;
Patient-specific anatomy may influence the final intraventricular positioning of inflow cannula in left ventricular assist device (LVAD) recipients. An association exists between such positioning and clinical outcomes (specifically, orientation toward the interventricular septum has negative prognostic implications). Alternative commercially available LVADs are characterized by markedly different design, with potential consequences on intrathoracic fitting among individual patients.&lt;br /&gt;
MATERIAL AND METHODS:&lt;br /&gt;
A cohort of 13 LVAD recipients (either HeartMate II-group A or Jarvik 2000 Flowmaker-group B) was evaluated. On postoperative computed tomography scans, we reconstructed the implanted LVAD (semiautomatic segmentation), defined the target mitral orifice ([http://slicer.org '''3D Slicer'''] software), and built a coordinate system to quantify the coaxiality of the cannula with the mitral valve axis (angles φ and θ, expressed as percentage variation from the ideal value φ = θ = 0°).&lt;br /&gt;
RESULTS:&lt;br /&gt;
Group A presented significantly greater average percentage variation of the φ angle (significantly greater orientation of the intraventricular cannula toward the interventricular septum; 33.2% ± 32.1% versus 1.9% ± 0.9%, P = 0.001). Group A presented significantly greater average percentage variation of the θ angle (52.7% ± 23.6% versus 14.5% ± 6.3%, P = 0.013).&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
The device assessed in group B showed in the present series better average coaxiality with the mitral orifice. Such finding is related with its design (total intraventricular placement) and interaction with thoracic structures. The present method is being integrated in the development of LVAD virtual implantation tools and may help physicians in patient-specific selection among alternative devices.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Anser EMT: The First Open-Source Electromagnetic Tracking Platform for Image-Guided Interventions== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28357627 Int J Comput Assist Radiol Surg. 2017 Jun;12(6):1059-67. PMID: 28357627]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Jaeger HA, Franz AM, O'Donoghue K, Seitel A, Trauzettel F, Maier-Hein L, Cantillon-Murphy P.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  IHU Strasbourg, Strasbourg, France.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' PURPOSE:&lt;br /&gt;
Electromagnetic tracking is the gold standard for instrument tracking and navigation in the clinical setting without line of sight. Whilst clinical platforms exist for interventional bronchoscopy and neurosurgical navigation, the limited flexibility and high costs of electromagnetic tracking (EMT) systems for research investigations mitigate against a better understanding of the technology's characterization and limitations. The Anser project provides an open-source implementation for EMT with particular application to image-guided interventions.&lt;br /&gt;
METHODS:&lt;br /&gt;
This work provides implementation schematics for our previously reported EMT system which relies on low-cost acquisition and demodulation techniques using both National Instruments and Arduino hardware alongside MATLAB support code. The system performance is objectively compared to other commercial tracking platforms using the Hummel assessment protocol.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Positional accuracy of 1.14 mm and angular rotation accuracy of [Formula: see text] are reported. Like other EMT platforms, Anser is susceptible to tracking errors due to eddy current and ferromagnetic distortion. The system is compatible with commercially available EMT sensors as well as the Open Network Interface for image-guided therapy (OpenIGTLink) for easy communication with visualization and medical imaging toolkits such as MITK and [http://slicer.org '''3D Slicer'''].&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
By providing an open-source platform for research investigations, we believe that novel and collaborative approaches can overcome the limitations of current EMT technology.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==The Effects of Iterative Reconstruction and Kernel Selection on Quantitative Computed Tomography Measures of Lung Density== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28376262 Med Phys. 2017 Jun;44(6):2267-80. PMID: 28376262] &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Rodriguez A, Ranallo FN, Judy PF, Fain SB.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Department of Medical Physics, University of Wisconsin School of Medicine and Public Health, Madison, WI, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose: ''' To determine the effects of iterative reconstruction (IR) and high frequency kernels on quantitative computed tomography (qCT) density measures at reduced X-ray dose.&lt;br /&gt;
MATERIALS AND METHODS:&lt;br /&gt;
The COPDGene 2 Phantom (CTP 698, The Phantom Laboratory, Salem, NY) with four embedded lung mimicking foam densities (12lb, 20lb, and 4lb), as well as water, air, and acrylic reference inserts was imaged using a GE 64 slice CT750 HD scanner in helical mode with four current-time products ranging from 12-100 mAs. The raw acquired data was reconstructed using standard (STD - low frequency) and Bone (high frequency) kernels with filtered back projection (FBP), 100% ASIR, and Veo reconstruction algorithms. The reference density inserts were manually segmented using [http://slicer.org '''3D Slicer'''] and the mean, standard deviation, and histograms of the segmented regions were generated using  [http://fiji.sc/Fiji Fiji] for each reconstruction. Measurements of threshold values placed on the cumulative frequency distribution of voxels determined by these measured histograms at 5%, PD5phant , and 15%, PD15phant , (analogous to the relative area below -950 HU (RA950) and percent density 15 (PD15) in human lung emphysema quantification, respectively), were also performed.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The use of high-resolution kernels in conjunction with ASIR, and Veo did not significantly affect the mean Hounsfield units (HU) of each of the density standards (&amp;lt;4 HU deviation) and current-time products within the phantom when compared with the STD+FBP reconstruction conventionally used in clinical applications. A truncation of the scanner reported HU values at -1024 that shifts the mean towards more positive values was found to cause a systematic error in lower attenuating regions. Use of IR drove convergence toward the mean of measured histograms (~100-137% increase in the number measured voxels at the mean of the histogram) while the combination of Bone+ASIR preserved the standard deviation of HU values about the mean compared to STD+FBP, with the added effect of improved spatial resolution and accuracy in airway measures. PD5phant and PD15phant were most similar between the Bone+ASIR and STD+FBP in all regions except those affected by the -1024 truncation artifact.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
Extension of the scanner reportable HU values below the present limit of -1024 will mitigate discrepancies found in qCT lung densitometry in low-density regions. The density histogram became more sharply peaked and standard deviation was reduced for IR, directly effecting density thresholds, PD5phant and PD15phant, placed on the cumulative frequency distribution of each region in the phantom, which serve as analogs to RA950 and PD15 typically used in lung density quantitation. The combination of high frequency kernels (Bone) with ASIR mitigates this effect and preserves density measures derived from the image histogram. Moreover, previous studies have shown improved accuracy of qCT airway measures of wall thickness (WT) and wall area percentage (WA%) when using high frequency kernels in combination with ASIR to better represent airway walls. The results therefore suggest an IR approach for accurate assessment of airway and parenchymal density measures in the lungs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Infantile Cranial Fasciitis: Case-based Review and Operative Technique== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28451777 Childs Nerv Syst. 2017 Jun;33(6):899-908.  PMID: 28451777]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Flouty OE, Piscopo AJ, Holland MT, Abode-Iyamah K, Bruch L, Menezes AH, Dlouhy BJ.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Neurosurgery, University of Iowa Hospitals and Clinics, Iowa City, IA, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Cranial fasciitis (CF) is an uncommon benign primary lesion of the skull that typically affects the pediatric age group. Due to the rarity of CF, no prospective studies exist. Earliest description of this condition dates to 1980. The limited scientific and clinical literature regarding CF is dominated by case reports. For these reasons, questions pertaining to the true incidence, genetic risk factors, prognosis, and long-term outcome remain unanswered.&lt;br /&gt;
DISCUSSION:&lt;br /&gt;
Clinically, CF presents as a firm, painless, growing scalp mass that is typically not considered in the differential diagnosis. Preoperative pathognomonic signs and symptoms are absent, and imaging features are often nonspecific. Treatment is typically through complete surgical resection, at which time histopathological examination confirms the diagnosis of CF. Reconstruction of the skull defect in the child is critical. Autograft techniques help maintain a rigid construct that integrates with the native skull while preserving its continued ability to grow. Generally, a good outcome is observed with complete resection.&lt;br /&gt;
EXEMPLARY CASE:&lt;br /&gt;
We report a case of CF in an infant with emphasis on operative nuances and early follow-up results.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
CF is a rare fibroproliferative disease that has a poorly defined incidence and long-term follow-up. Due to its locally invasive nature and nonspecific presentation, CF is often difficult to differentiate from malignancies and infections. Complete surgical resection is the best approach for diagnosis and cure. Its occult clinical presentation often allows it to achieve considerable growth, leaving a sizeable skull defect following resection. Since CF presents in the pediatric population, allograft reconstruction is preferred over titanium mesh or other synthetic materials to allow osseous integration and continued uninterrupted skull growth.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Biomaterial Shell Bending with 3D-printed Templates in Vertical and Alveolar Ridge Augmentation: A Technical Note== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28215503 Oral Surg Oral Med Oral Pathol Oral Radiol. 2017 Jun;123(6):651-60. PMID: 28215503]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Draenert FG, Gebhart F, Mitov G, Neff A.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Oral &amp;amp; Maxillofacial Surgery, University of Marburg, Germany.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:'''&lt;br /&gt;
Alveolar ridge and vertical augmentations are challenging procedures in dental implantology. Even material blocks with an interconnecting porous system are never completely resorbed. Shell techniques combined with autologous bone chips are therefore the gold standard. Using biopolymers for these techniques is well documented. We applied three-dimensional (3-D) techniques to create an individualized bending model for the adjustment of a plane biopolymer membrane made of polylactide.&lt;br /&gt;
&amp;lt;BR&amp;gt;STUDY DESIGN:&lt;br /&gt;
Two cases with a vertical alveolar ridge defect in the maxilla were chosen. The cone beam computed tomography data were processed with a [http://slicer.org '''3D Slicer'''] and the Autodesk Meshmixer to generate data about the desired augmentation result. STL data were used to print a bending model. A 0.2-mm poly-D, L-lactic acid membrane (KLS Matin Inc., Tuttlingen, Germany) was bended accordingly and placed into the defect via a tunnel approach in both cases. A mesh graft of autologous bone chips and hydroxylapatite material was augmented beneath the shell, which was fixed with osteosynthesis screws.&lt;br /&gt;
&amp;lt;br&amp;gt;RESULTS:&lt;br /&gt;
The operative procedure was fast and without peri- or postoperative complications or complaints. The panoramic x-ray showed correct fitting of the material in the location. Bone quality at the time of implant placement was type II, resulting in good primary stability.&lt;br /&gt;
&amp;lt;br&amp;gt;CONCLUSIONS:&lt;br /&gt;
A custom-made 3-D model for bending confectioned biomaterial pieces is an appropriate method for individualized adjustment in shell techniques. The advantages over direct printing of the biomaterial shell and products on the market, such as the Xyoss shell (Reoss Inc., Germany), include cost-efficiency and avoidance of regulatory issues.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Application of the 3D Slicer Chest Imaging Platform Segmentation Algorithm for Large Lung Nodule Delineation== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28594880 PLoS One. 2017 Jun 8;12(6):e0178944.  PMID: 28594880] | [http://journals.plos.org/plosone/article?id=10.1371/journal.pone.0178944  PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Yip SSF, Parmar C, Blezek D, Estepar RSJ, Pieper S, Kim J, Aerts HJWL.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Radiation Oncology, Dana-Farber Cancer Institute, Brigham and Women's Hospital, Harvard Medical School, Boston, MA, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' PURPOSE:&lt;br /&gt;
Accurate segmentation of lung nodules is crucial in the development of imaging biomarkers for predicting malignancy of the nodules. Manual segmentation is time consuming and affected by inter-observer variability. We evaluated the robustness and accuracy of a publically available semiautomatic segmentation algorithm that is implemented in the 3D Slicer Chest Imaging Platform (CIP) and compared it with the performance of manual segmentation.&lt;br /&gt;
METHODS:&lt;br /&gt;
CT images of 354 manually segmented nodules were downloaded from the LIDC database. Four radiologists performed the manual segmentation and assessed various nodule characteristics. The semiautomatic CIP segmentation was initialized using the centroid of the manual segmentations, thereby generating four contours for each nodule. The robustness of both segmentation methods was assessed using the region of uncertainty (δ) and Dice similarity index (DSI). The robustness of the segmentation methods was compared using the Wilcoxon-signed rank test (pWilcoxon&amp;lt;0.05). The Dice similarity index (DSIAgree) between the manual and CIP segmentations was computed to estimate the accuracy of the semiautomatic contours.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The median computational time of the CIP segmentation was 10 s. The median CIP and manually segmented volumes were 477 ml and 309 ml, respectively. CIP segmentations were significantly more robust than manual segmentations (median δCIP = 14ml, median dsiCIP = 99% vs. median δmanual = 222ml, median dsimanual = 82%) with pWilcoxon~10-16. The agreement between CIP and manual segmentations had a median DSIAgree of 60%. While 13% (47/354) of the nodules did not require any manual adjustment, minor to substantial manual adjustments were needed for 87% (305/354) of the nodules. CIP segmentations were observed to perform poorly (median DSIAgree≈50%) for non-/sub-solid nodules with subtle appearances and poorly defined boundaries.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
Semi-automatic CIP segmentation can potentially reduce the physician workload for 13% of nodules owing to its computational efficiency and superior stability compared to manual segmentation. Although manual adjustment is needed for many cases, CIP segmentation provides a preliminary contour for physicians as a starting point.&lt;br /&gt;
&lt;br /&gt;
'''Funding:'''&lt;br /&gt;
*U01 CA190234/CA/NCI NIH HHS/United States&lt;br /&gt;
*U24 CA194354/CA/NCI NIH HHS/United States&lt;br /&gt;
*R01 HL116931/HL/NHLBI NIH HHS/United States&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Yip-PLoSOne2017.png|thumb|300px| Comparison of manual (left) and CIP-based (right) segmentation.&lt;br /&gt;
Yellow shaded region indicated the disagreement (or region of uncertainty) between contours performed by four radiologists (bottom left) or different CIP-based seed locations (bottom right). In this example, the region of uncertainty for manual segmentation was 3222 ml while the region was only 46 ml for the CIP-based segmentation. dsi&amp;lt;sub&amp;gt;CIP&amp;lt;/sub&amp;gt; was ≈ 100%, while dsi&amp;lt;sub&amp;gt;manual&amp;lt;/sub&amp;gt; was 88%. ]]]&lt;br /&gt;
|}&lt;br /&gt;
==3D Printed Pathological Sectioning Boxes to Facilitate Radiological-Pathological Correlation in Hepatectomy Cases== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/?term=28596154 J Clin Pathol. 2017 Jun 8.  PMID: 28596154]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Trout AT, Batie MR, Gupta A, Sheridan RM, Tiao GM, Towbin AJ.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Radiology, Cincinnati Children's Hospital Medical Center, Cincinnati, OH, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Radiogenomics promises to identify tumour imaging features indicative of genomic or proteomic aberrations that can be therapeutically targeted allowing precision personalised therapy. An accurate radiological-pathological correlation is critical to the process of radiogenomic characterisation of tumours. An accurate correlation, however, is difficult to achieve with current pathological sectioning techniques which result in sectioning in non-standard planes. The purpose of this work is to present a technique to standardise hepatic sectioning to facilitateradiological-pathological correlation. We describe a process in which three-dimensional (3D)-printed specimen boxes based on preoperative cross-sectional imaging (CT and MRI) can be used to facilitate pathological sectioning in standard planes immediately on hepatic resection enabling improved tumour mapping. We have applied this process in 13 patients undergoing hepatectomy and have observed close correlation between imaging and gross pathology in patients with both unifocal and multifocal tumours.&lt;br /&gt;
Following image review, a clinical engineering specialist (MRB) digitally isolates the liver from the cross-sectional imaging study using open-source software [http://www.slicer.org '''3D Slicer'''].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Retrospective Validation of a Computer-Assisted Quantification Model of Intracerebral Hemorrhage Volume on Accuracy, Precision, and Acquisition Time, Compared with Standard ABC/2 Manual Volume Calculation== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28596188 AJNR Am J Neuroradiol. 2017 Jun 8.  PMID: 28596188]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Xue W, Vegunta S, Zwart CM, Aguilar MI, Patel AC, Hoxworth JM, Demaerschalk BM, Mitchell JR.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Biomedical Informatics, Arizona State University, Scottsdale, AZ, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' BACKGROUND AND PURPOSE:&lt;br /&gt;
Intracerebral hemorrhage accounts for 6.5%-19.6% of all acute strokes. Initial intracerebral hemorrhage volume and expansion are both independent predictors of clinical outcomes and mortality. Therefore, a rapid, unbiased, and precise measurement of intracerebral hemorrhage volume is a key component of clinical management. The most commonly used method, ABC/2, results in overestimation. We developed an interactive segmentation program, SegTool, using a novel graphic processing unit, level set algorithm. Until now, the speed, bias, and precision of SegTool had not been validated.&lt;br /&gt;
MATERIALS AND METHODS:&lt;br /&gt;
In a single stroke academic center, 2 vascular neurologists and 2 neuroradiologists independently performed a test-retest experiment that involved repeat measurements of static, unchanging intracerebral hemorrhage volumes on CT from 76 intracerebral hemorrhage cases. Measurements were made with SegTool and ABC/2. True intracerebral hemorrhage volumes were estimated from a consensus of repeat manual tracings by 2 operators. These data allowed us to estimate measurement bias, precision, and speed. Computer-assisted measurements were made with an intensity-threshold algorithm in [http://www.slicer.org 3D Slicer].&lt;br /&gt;
RESULTS:&lt;br /&gt;
The measurements with SegTool were not significantly different from the true intracerebral hemorrhage volumes, while ABC/2 overestimated volume by 45%. The interrater measurement variability with SegTool was 50% less than that with ABC/2. The average measurement times for ABC/2 and SegTool were 35.7 and 44.6 seconds, respectively.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
SegTool appears to have attributes superior to ABC/2 in terms of accuracy and interrater reliability with a 9-second delay in measurement time (on average); hence, it could be useful in clinical trials and practice. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Theoretical Observation on Diagnosis Maneuver for Benign Paroxysmal Positional Vertigo== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28084876 Acta Otolaryngol. 2017 Jun;137(6):567-71. PMID: 28084876]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Yang XK, Zheng YY, Yang XG.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Neurology, Wenzhou People's Hospital, Wenzhou, Zhejiang, PR China.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' To make a comprehensive analysis with a variety of diagnostic maneuvers is conducive to the correct diagnosis and classification of BPPV.&lt;br /&gt;
OBJECTIVE:&lt;br /&gt;
Based on the standard spatial coordinate-based semicircular canal model for theoretical observation on diagnostic maneuvers for benign paroxysmal positional vertigo (BPPV) to analyze the meaning and key point of each step of the maneuver.&lt;br /&gt;
MATERIALS AND METHODS:&lt;br /&gt;
This study started by building a standard model of semicircular canal with space orientation by segmentation of the inner ear done with the [http://slicer.org '''3D Slicer'''] software based on MRI scans, then gives a demonstration and observation of BPPV diagnostic maneuvers by using the model.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The supine roll maneuver is mainly for diagnosis of lateral semicircular canal BPPV. The Modified Dix-Hallpike maneuver is more specific for the diagnosis of posterior semicircular canal BPPV. The side-lying bow maneuver designed here is theoretically suitable for diagnosis of anterior semicircular canal BPPV. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==High Expression of Glypican-1 Predicts Dissemination and Poor Prognosis in Glioblastomas== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28602885 World Neurosurg. 2017 Jun 5.  PMID: 28602885]&lt;br /&gt;
&lt;br /&gt;
'''Authors:'''Saito T, Sugiyama K, Hama S, Yamasaki F, Takayasu T, Nosaka R, Onishi S, Muragaki Y, Kawamata T, Kurisu K.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Neurosurgery, Hiroshima University, Graduate School of Biomedical and Health Science, Hiroshima, Japan.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' OBJECTIVE:&lt;br /&gt;
Glioblastoma (GBM) relapses locally or in a disseminated pattern, and is highly resistant to chemo-radiotherapy. Although dissemination is associated with poor prognosis for GBM patients, the clinico-pathological factors that promote dissemination have not been elucidated. Glypican-1 (GPC-1) is a heparin sulfate proteoglycan that is attached to the extracytoplasmic surface of the cell membrane and regulates cell motility. The aim of this study was to determine whether GPC-1 expression correlated with GBM dissemination and patient prognosis.&lt;br /&gt;
METHODS:&lt;br /&gt;
GPC-1 expression was examined by immunohistochemistry in 53 patients with GBM who received radiotherapy and temozolomide (TMZ) treatment. We assessed the relationship between dissemination and clinico-pathological factors, including GPC-1 expression. Additionally, we evaluated the relationship between GPC-1 expression and overall survival (OS) by uni- and multivariate analyses of a range of clinico-pathological factors, including age, Karnofsky Performance Status (KPS), extent of resection, and O6-methylguanine-DNA methyltransferase (MGMT) status.&lt;br /&gt;
To evaluate the extent of resection by 13 semi-automatic volumetry, we used [http://www.slicer.org '''3D Slicer'''], version 4.0 software.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Logistic regression analysis revealed that GPC-1 expression correlated with dissemination (P = 0.0116). Log-rank tests revealed that age, KPS, extent of resection, MGMT status, dissemination (P = 0.0008) and GPC-1 expression (P = 0.0011) were significantly correlated with OS. Multivariate analysis indicated that age, MGMT status, and GPC-1 expression were significantly correlated with OS. GPC-1 expression had the highest hazard ratio (2.392) among all regressors.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
GPC-1 expression significantly correlated with OS in GBM patients who received radiotherapy and TMZ treatment. GPC-1 expression can help predict the occurrence of dissemination and shorter OS in GBM patients.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Factors Affecting the Visual Outcome of Pituitary Adenoma Patients Treated with Endoscopic Transsphenoidal Surgery== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28583452 World Neurosurg. 2017 Jun 2.  PMID: 28583452]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Luomaranta T, Raappana A, Saarela V, Liinamaa MJ.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Ophthalmology, Oulu University Hospital, Oulu, Finland.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' OBJECTIVE:&lt;br /&gt;
To evaluate visual acuity (VA) and visual fields (VF) quantitatively before and after endoscopic transsphenoidal surgery (ETS), with special attention to prognostic factors such as the pituitary adenomas' (PAs') suprasellar extension (SSE), volume and the patients' age.&lt;br /&gt;
METHODS:&lt;br /&gt;
Medical records of 47 PA patients operated with ETS were evaluated. VA, VF and visual impairment score (VIS) were determined pre- (VISpre) and postoperatively (VISpost). The PA's SSE, volume and chiasmal contact and their correlation with visual function was pre- and postoperatively assessed. Each PA was preoperatively manually segmented from (typically from T1-weighted, contrast-enhanced, coronal) MRI planes of the patient using [http://www.slicer.org '''3D Slicer'''], a modelling software, which also reported the volume of the modeled PA.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The final cohort included 47 patients. VA improved in 54/76 eyes (71.0 %) after ETS and 69/76 eyes (90.7 %) gained normal VA. Postoperative VF recovery occurred in 32/37 (86.5 %) of the eyes. The mean VISchange was 12.0 (95% CI 7.7-16.3) and improved in all patients with tumor-related visual impairment (n=25). However, visual outcome was poorer when VISpre&amp;gt;40. When VISpre was 21-40, age linearly correlated with VIS improvement (p=0.03); younger patients had satisfactory and older poorer visual outcome. The mean SSE in patients with VF defects (n=20) was 16.6 mm (95% CI 13.3-19.9) and in patients with no VF defects (n=23) 6.6 mm (95% CI 4.9-8.3, p&amp;lt;0.001) and cut-off value for visual perturbations was 9.5 mm for SSE and 8.6 ml for PA volume (p&amp;lt;0.001 for both).&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
The visual outcome after ETS for PAs was excellent and significant complications rare. Severe preoperative visual impairment resulted poorer postoperative visual outcome. The SSE of PA was the most important predictor of visual outcome after ETS.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Clinical Outcomes of an Endoscopic Transclival and Transpetrosal Approach for Primary Skull Base Malignancies Involving the Clivus== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28574308 J Neurosurg. 2017 Jun 2:1-9.  PMID: 28574308]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Kim YH1, Jeon C, Se YB, Hong SD, Seol HJ, Lee JI, Park CK, Kim DG, Jung HW, Han DH, Nam DH, Kong DS.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Neurosurgery, Samsung Medical Center, Sungkyunkwan University School of Medicine, Seoul, Republic of Korea.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' OBJECTIVE The endoscopic endonasal approach for treating primary skull base malignancies involving the clivus is a formidable task. The authors hypothesized that tumor involvement of nearby critical anatomical structures creates hurdles to endoscopic gross-total resection (GTR). The aim of this study was to retrospectively review the clinical outcomes of patients who underwent an endoscopic endonasal approach to treat primary malignancies involving the clivus and to analyze prognostic factors for GTR. METHODS Between January 2009 and November 2015, 42 patients underwent the endoscopic endonasal approach for resection of primary skull base malignancies involving the clivus at 2 independent institutions. Clinical data; tumor locations within the clivus; and anatomical involvement of the cavernous or paraclival internal carotid artery, cisternal trigeminal nerve, hypoglossal canal, and dura mater were investigated to assess the extent of resection. Possible prognostic factors affecting GTR were also analyzed.  The preoperative tumor volume was measured radiographically with [http://www.slicer.org '''3D Slicer''']. RESULTS Of the 42 patients, 37 were diagnosed with chordomas and 5 were diagnosed with chondrosarcomas. The mean (± SD) preoperative tumor volume was 25.2 ± 30.5 cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; (range 0.8-166.7 cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;). GTR was achieved in 28 patients (66.7%) and subtotal resection in 14 patients (33.3%). All tumors were classified as upper (n = 17), middle (n = 17), or lower (n = 8) clival tumors based on clival involvement, and as central (24 [57.1%]) or paramedian (18 [42.9%]) based on laterality of the tumor. Univariate analysis identified the tumor laterality (OR 6.25, 95% CI 1.51-25.86; p = 0.011) as significantly predictive of GTR. In addition, the laterality of the tumor was found to be a statistically significant predictor in multivariate analysis (OR 41.16, 95% CI 1.12-1512.65; p = 0.043). CONCLUSIONS An endoscopic endonasal approach can provide favorable clinical and surgical outcomes. However, the tumor laterality should be considered as a potential obstacle to total removal.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==1.5 T Augmented Reality Navigated Interventional MRI: Paravertebral Sympathetic Plexus Injections== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28420598 Diagn Interv Radiol. 2017 May-Jun;23(3):227-32. PMID: 28420598]  |  [http://dirjournal.org/sayilar/62/buyuk/16323.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Marker DR, U Thainual P, Ungi T, Flammang AJ, Fichtinger G, Iordachita II, Carrino JA, Fritz J.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''   Russel H. Morgan Department of Radiology and Radiological Science, Johns Hopkins University School of Medicine, Baltimore, Maryland, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' The high contrast resolution and absent ionizing radiation of interventional magnetic resonance imaging (MRI) can be advantageous for paravertebral sympathetic nerve plexus injections. We assessed the feasibility and technical performance of MRI-guided paravertebral sympathetic injections utilizing augmented reality navigation and 1.5 T MRI scanner.&lt;br /&gt;
METHODS:&lt;br /&gt;
A total of 23 bilateral injections of the thoracic (8/23, 35%), lumbar (8/23, 35%) and hypogastric (7/23, 30%) paravertebral sympathetic plexus were prospectively planned in twelve human cadavers using a 1.5 Tesla (T) MRI scanner and augmented reality navigation system. MRI-conditional needles were used. Gadolinium-DTPA-enhanced saline was injected. Outcome variables included the number of control magnetic resonance images, target error of the needle tip, punctures of critical nontarget structures, distribution of the injected fluid, and procedure length. The isotropic 3D MR&lt;br /&gt;
images were transferred into the navigation module (PerkStation) of the [http://slicer.org '''3D Slicer'''] software for interactive 3D evaluation of the anatomy using its DICOM viewer function.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Augmented-reality navigated MRI guidance at 1.5 T provided detailed anatomical visualization for successful targeting of the paravertebral space, needle placement, and perineural paravertebral injections in 46 of 46 targets (100%). A mean of 2 images (range, 1-5 images) were required to control needle placement. Changes of the needle trajectory occurred in 9 of 46 targets (20%) and changes of needle advancement occurred in 6 of 46 targets (13%), which were statistically not related to spinal regions (P = 0.728 and P = 0.86, respectively) and cadaver sizes (P = 0.893 and P 0.859, respectively). The mean error of the needle tip was 3.9±1.7 mm. There were no punctures of critical nontarget structures. The mean procedure length was 33±12 min.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
1.5 T augmented reality-navigated interventional MRI can provide accurate imaging guidance for perineural injections of the thoracic, lumbar, and hypogastric sympathetic plexus.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Marker-DIR2017-fig.png|thumb|300px|  Procedural photograph demonstrating the operator’s augmented reality consisting of a&lt;br /&gt;
hybrid view of MR image and underlying cadaver. The hybrid view is being created by the reflection&lt;br /&gt;
of the target MR image (black arrow) from a semitransparent mirror (white arrow) into the line of&lt;br /&gt;
sight of the operator, where it merges with the underlying cadaver (gray arrow). Location, size, and&lt;br /&gt;
skin contour of MR image and cadaver are matched through co-registration by the image-overlay&lt;br /&gt;
navigation system.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==From Medical Imaging Data to 3D Printed Anatomical Models== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28562693 PLoS One. 2017 May 31;12(5):e0178540.   PMID: 28562693]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Bücking TM, Hill ER, Robertson JL, Maneas E, Plumb AA, Nikitichev DI.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Medical Physics and Biomedical Engineering, University College London, London, UK.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Anatomical models are important training and teaching tools in the clinical environment and are routinely used in medical imaging research. Advances in segmentation algorithms and increased availability of three-dimensional (3D) printers have made it possible to create cost-efficient patient-specific models without expert knowledge. We introduce a general workflow that can be used to convert volumetric medical imaging data (as generated by Computer Tomography (CT)) to 3D printed physical models. This process is broken up into three steps: image segmentation, mesh refinement and 3D printing. To lower the barrier to entry and provide the best options when aiming to 3D print an anatomical model from medical images, we provide an overview of relevant free and open-source image segmentation tools as well as 3D printing technologies. We demonstrate the utility of this streamlined workflow by creating models of ribs, liver, and lung using a Fused Deposition Modelling 3D printer.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Bucking-PLoSOne2017.jpg|thumb|300px| 3D printed anatomical models generated from medical imaging data using [http://www.slicer.org '''3D Slicer'''] and Seg3D. Part of the ribcage (a), the liver (b), and the right lung (c).]]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==3D Printing and Modelling of Customized Implants and Surgical Guides for Non-human Primates== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28512008 J Neurosci Methods. 2017 May 13;286:38-55. PMID: 28512008]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Chen X, Possel JK, Wacongne C, van Ham AF, Klink PC, Roelfsema PR.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Vision &amp;amp; Cognition, Netherlands Institute for Neuroscience, Meibergdreef 47, 1105 BA, Amsterdam, Netherlands.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Primate neurobiologists use chronically implanted devices such as pedestals for head stabilization and chambers to gain access to the brain and study its activity. Such implants are skull-mounted, and made from a hard, durable material, such as titanium.&lt;br /&gt;
NEW METHOD:&lt;br /&gt;
Here we present a low-cost method of creating customized 3D-printed cranial implants that are tailored to the anatomy of individual animals. We performed pre-surgical computed tomography (CT) and magnetic resonance (MR) scans to generate three-dimensional (3D) models of the skull and brain. We then used 3D modeling software to design implantable head posts, chambers, and a pedestal anchorage base, as well as craniotomy guides to aid us during surgery. Prototypes were made from plastic or resin, while implants were 3D-printed in titanium. The implants underwent post-processing and received a coating of osteocompatible material to promote bone integration.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Their tailored fit greatly facilitated surgical implantation, and eliminated the gap between the implant and the bone. To date, our implants remain robust and well-integrated with the skull.&lt;br /&gt;
COMPARISON WITH EXISTING METHOD(S):&lt;br /&gt;
Commercial-off-the-shelf solutions typically come with a uniform, flat base, preventing them from sitting flush against the curved surface of the skull. This leaves gaps for fluid and tissue ingress, increasing the risk of microbial infection and tissue inflammation, as well as implant loss.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
The use of 3D printing technology enabled us to quickly and affordably create unique, complex designs, avoiding the constraints levied by traditional production methods, thereby boosting experimental success and improving the wellbeing of the animals.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Accuracy of Mobile Biplane X-ray Imaging in Measuring 6-Degree-of-Freedom Patellofemoral Kinematics during Overground Gait== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28454908 J Biomech. 2017 May 24;57:152-6. PMID: 28454908]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Gray HA, Guan S, Pandy MG.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Mechanical Engineering, University of Melbourne, Victoria, Australia.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' The aim of this study was to evaluate the accuracy with which mobile biplane X-ray imaging can be used to measure patellofemoral kinematics of the intact knee during overground gait. A unique mobile X-ray imaging system tracked and recorded biplane fluoroscopic images of two human cadaver knees during simulated overground walking at a speed of 0.7m/s. Six-degree-of-freedom patellofemoral kinematics were calculated using a bone volumetric model-based method and the results then compared against those derived from a gold-standard bead-based method. RMS errors for patellar anterior translation, superior translation and lateral shift were 0.19mm, 0.34mm and 0.37mm, respectively. RMS errors for patellar flexion, lateral tilt and lateral rotation were 1.08°, 1.15° and 1.46°, respectively. The maximum RMS error for patellofemoral translations was approximately one-half that reported previously for tibiofemoral translations using the same mobile X-ray imaging system while the maximum RMS error for patellofemoral rotations was nearly two times larger than corresponding errors reported for tibiofemoral rotations. The lower accuracy in measuring patellofemoral rotational motion is likely explained by the symmetric nature of the patellar geometry and the smaller size of the patella compared to the tibia.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Quality of Radiomic Features in Glioblastoma Multiforme: Impact of Semi-Automated Tumor Segmentation Software==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
||&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28458602 Korean J Radiol. 2017 May-Jun;18(3):498-509. PMID: 28458602]  | [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5390619/pdf/kjr-18-498.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Lee M, Woo B, Kuo MD, Jamshidi N, Kim JH.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Center for Medical-IT Convergence Technology Research, Advanced Institutes of Convergence Technology, Seoul National University, Suwon, Korea.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' The purpose of this study was to evaluate the reliability and quality of radiomic features in glioblastoma multiforme (GBM) derived from tumor volumes obtained with semi-automated tumor segmentation software.&lt;br /&gt;
MATERIALS AND METHODS:&lt;br /&gt;
MR images of 45 GBM patients (29 males, 16 females) were downloaded from The Cancer Imaging Archive, in which post-contrast T1-weighted imaging and fluid-attenuated inversion recovery MR sequences were used. Two raters independently segmented the tumors using two semi-automated segmentation tools (TumorPrism3D and [http://www.slicer.org '''3D Slicer''']). Regions of interest corresponding to contrast-enhancing lesion, necrotic portions, and non-enhancing T2 high signal intensity component were segmented for each tumor. A total of 180 imaging features were extracted, and their quality was evaluated in terms of stability, normalized dynamic range (NDR), and redundancy, using intra-class correlation coefficients, cluster consensus, and Rand Statistic.&lt;br /&gt;
RESULTS:&lt;br /&gt;
Our study results showed that most of the radiomic features in GBM were highly stable. Over 90% of 180 features showed good stability (intra-class correlation coefficient [ICC] ≥ 0.8), whereas only 7 features were of poor stability (ICC &amp;lt; 0.5). Most first order statistics and morphometric features showed moderate-to-high NDR (4 &amp;gt; NDR ≥1), while above 35% of the texture features showed poor NDR (&amp;lt; 1). Features were shown to cluster into only 5 groups, indicating that they were highly redundant.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
The use of semi-automated software tools provided sufficiently reliable tumor segmentation and feature stability; thus helping to overcome the inherent inter-rater and intra-rater variability of user intervention. However, certain aspects of feature quality, including NDR and redundancy, need to be assessed for determination of representative signature features before further development of radiomics.    &lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Lee-KJR2017-fig4.jpg|thumb|300px| Example of segmentation results with two semi-automated software tools.&lt;br /&gt;
Contrast-enhanced, necrotic, and non-enhancing T2 high signal intensity components are indicated by red, green, and blue color, respectively.&lt;br /&gt;
&lt;br /&gt;
A. Represents case in which similar segmentation results were produced. B. Represents case in which difference was observed in segmentation results. FLAIR = fluid-attenuated inversion recovery.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prognostic Implications of the Subcellular Localization of Survivin in Glioblastomas Treated with Radiotherapy Plus Concomitant and Adjuvant Temozolomide== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28430038 J Neurosurg. 2017 Apr 21:1-6. PMID: 28430038]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Saito T, Sugiyama K, Takeshima Y, Amatya VJ, Yamasaki F, Takayasu T, Nosaka R, Muragaki Y, Kawamata T, Kurisu K.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Neurosurgery, Tokyo Women's Medical University, Tokyo, Japan..&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' OBJECTIVE Currently, the standard treatment protocol for patients with newly diagnosed glioblastoma (GBM) includes surgery, radiotherapy, and concomitant and adjuvant temozolomide (TMZ). Various prognostic biomarkers for GBM have been described, including survivin expression. The aim of this study was to determine whether the subcellular localization of survivin correlates with GBM prognosis in patients who received the standard treatment protocol. METHODS The authors retrospectively examined the subcellular localization of survivin (nuclear, cytoplasmic, or both) using immunohistochemistry in 50 patients with GBM who had received the standard treatment. The relationship between survivin localization and overall survival (OS) was assessed with uni- and multivariate analyses including other clinicopathological factors (age, sex, Karnofsky Performance Scale [KPS] score, extent of resection, the use of second-line bevacizumab, O6-methylguanine-DNA methyltransferase [MGMT] status, and MIB-1 labeling index). RESULTS Log-rank tests revealed that patient age, KPS score, extent of resection, MGMT status, and survivin localization (p &amp;lt; 0.0001) significantly correlated with OS. Multivariate analysis indicated that patient age, MGMT status, and survivin localization significantly correlated with OS. Patients with nuclear localization of survivin had a significantly shorter OS than those in whom survivin expression was exclusively cytoplasmic (median OS 19.5 vs 31.7 months, respectively, HR 5.690, 95% CI 2.068-17.612, p = 0.0006). There was no significant difference in OS between patents whose survivin expression was exclusively nuclear or nuclear/cytoplasmic. CONCLUSIONS Nuclear expression of survivin is a factor for a poor prognosis in GBM patients. Subcellular localization of survivin can help to predict OS in GBM patients treated with the standard protocol.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==An Ovine Model of Cerebral Catheter Venography for Implantation of an Endovascular Neural Interface== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28452616 J Neurosurg. 2017 Apr 28:1-8.  PMID: 28452616]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Oxley TJ, Opie NL, Rind GS, Liyanage K, John SE, Ronayne S, McDonald AJ, Dornom A, Lovell TJH, Mitchell PJ, Bennett I, Bauquier S, Warne LN, Steward C, Grayden DB, Desmond P, Davis SM, O'Brien TJ, May CN.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Vascular Bionics Laboratory, Department of Medicine, The Royal Melbourne Hospital, Melbourne, Australia.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Neural interface technology may enable the development of novel therapies to treat neurological conditions, including motor prostheses for spinal cord injury. Intracranial neural interfaces currently require a craniotomy to achieve implantation and may result in chronic tissue inflammation. Novel approaches are required that achieve less invasive implantation methods while maintaining high spatial resolution. An endovascular stent electrode array avoids direct brain trauma and is able to record electrocorticography in local cortical tissue from within the venous vasculature. The motor area in sheep runs in a parasagittal plane immediately adjacent to the superior sagittal sinus (SSS). The authors aimed to develop a sheep model of cerebral venography that would enable validation of an endovascular neural interface. METHODS Cerebral catheter venography was performed in 39 consecutive sheep. Contrast-enhanced MRI of the brain was performed on 13 animals. Multiple telescoping coaxial catheter systems were assessed to determine the largest wide-bore delivery catheter that could be delivered into the anterior SSS. Measurements of SSS diameter and distance from the motor area were taken. The location of the motor area was determined in relation to lateral and superior projections of digital subtraction venography images and confirmed on MRI. RESULTS The venous pathway from the common jugular vein (7.4 mm) to the anterior SSS (1.2 mm) was technically challenging to selectively catheterize. The SSS coursed immediately adjacent to the motor cortex (&amp;lt; 1 mm) for a length of 40 mm, or the anterior half of the SSS. Attempted access with 5-Fr and 6-Fr delivery catheters was associated with longer procedure times and higher complication rates. A 4-Fr catheter (internal lumen diameter 1.1 mm) was successful in accessing the SSS in 100% of cases with no associated complications. Complications included procedure-related venous dissection in two major areas: the torcular herophili, and the anterior formation of the SSS. The bifurcation of the cruciate sulcal veins with the SSS was a reliable predictor of the commencement of the motor area. CONCLUSIONS The ovine model for cerebral catheter venography has generalizability to the human cerebral venous system in relation to motor cortex location. This novel model may facilitate the development of the novel field of endovascular neural interfaces that may include preclinical investigations for cortical recording applications such as paralysis and epilepsy, as well as other potential applications in neuromodulation.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Effectiveness of Endoscopic Surgery for Supratentorial Hypertensive Intracerebral Hemorrhage: A Comparison with Craniotomy==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
||&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28387618 J Neurosurg. 2017 Apr 7:1-7. PMID: 28387618]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Xu X, Chen X, Li F, Zheng X, Wang Q, Sun G, Zhang J, Xu B.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Neurosurgery, Chinese PLA General Hospital, Beijing, China.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' OBJECTIVE The goal of this study was to investigate the effectiveness and practicality of endoscopic surgery for treatment of supratentorial hypertensive intracerebral hemorrhage (HICH) compared with traditional craniotomy. METHODS The authors retrospectively analyzed 151 consecutive patients who were operated on for treatment of supratentorial HICH between January 2009 and June 2014 in the Department of Neurosurgery at Chinese PLA General Hospital. Patients were separated into an endoscopy group (82 cases) and a craniotomy group (69 cases), depending on the surgery they received. The hematoma evacuation rate was calculated using [http://www.slicer.org '''3D Slicer'''] software to measure the hematoma volume. Comparisons of operative time, intraoperative blood loss, Glasgow Coma Scale score 1 week after surgery, hospitalization time, and modified Rankin Scale score 6 months after surgery were also made between these groups. RESULTS There was no statistically significant difference in preoperative data between the endoscopy group and the craniotomy group (p &amp;gt; 0.05). The hematoma evacuation rate was 90.5% ± 6.5% in the endoscopy group and 82.3% ± 8.6% in the craniotomy group, which was statistically significant (p &amp;lt; 0.01). The operative time was 1.6 ± 0.7 hours in the endoscopy group and 5.2 ± 1.8 hours in the craniotomy group (p &amp;lt; 0.01). The intraoperative blood loss was 91.4 ± 93.1 ml in the endoscopy group and 605.6 ± 602.3 ml in the craniotomy group (p &amp;lt; 0.01). The 1-week postoperative Glasgow Coma Scale score was 11.5 ± 2.9 in the endoscopy group and 8.3 ± 3.8 in the craniotomy group (p &amp;lt; 0.01). The hospital stay was 11.6 ± 6.9 days in the endoscopy group and 13.2 ± 7.9 days in the craniotomy group (p &amp;lt; 0.05). The mean modified Rankin Scale score 6 months after surgery was 3.2 ± 1.5 in the endoscopy group and 4.1 ± 1.9 in the craniotomy group (p &amp;lt; 0.01). Patients had better recovery in the endoscopy group than in the craniotomy group. Data are expressed as the mean ± SD. CONCLUSIONS Compared with traditional craniotomy, endoscopic surgery was more effective, less invasive, and may have improved the prognoses of patients with supratentorial HICH. Endoscopic surgery is a promising method for treatment of supratentorial HICH. With the development of endoscope technology, endoscopic evacuation will become more widely used in the clinic. Prospective randomized controlled trials are needed.   &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Asymmetry in Dentition and Shape of Pharyngeal Arches in the Clonal Fish Chrosomus Eos-neogaeus: Phenotypic Plasticity and Developmental Instability== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28380079 PLoS One. 2017 Apr 5;12(4):e0174235. PMID: 28380079]   |  [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5381790/pdf/pone.0174235.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Leung C, Duclos KK, Grünbaum T, Cloutier R, Angers B.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''   Department of Biological Sciences, Université de Montréal, Montreal, Quebec, Canada.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose: ''' The effect of the environment may result in different developmental outcomes. Extrinsic signals can modify developmental pathways and result in alternative phenotypes (phenotypic plasticity). The environment can also be interpreted as a stressor and increase developmental instability (developmental noise). Directional and fluctuating asymmetry provide a conceptual background to discriminate between these results. This study aims at assessing whether variation in dentition and shape of pharyngeal arches of the clonal fish Chrosomus eos-neogaeus results from developmental instability or environmentally induced changes. A total of 262 specimens of the Chrosomus eos-neogaeus complex from 12 natural sites were analysed. X-ray microcomputed tomography (X-ray micro-CT) was used to visualize the pharyngeal arches in situ with high resolution. Variation in the number of pharyngeal teeth is high in hybrids in contrast to the relative stability observed in both parental species. The basal dental formula is symmetric while the most frequent alternative dental formula is asymmetric. Within one lineage, large variation in the proportion of individuals bearing basal or alternative dental formulae was observed among sites in the absence of genetic difference. Both dentition and arch shape of this hybrid lineage were explained significantly by environmental differences. Only individuals bearing asymmetric dental formula displayed fluctuating asymmetry as well as directional left-right asymmetry for the arches. The hybrids appeared sensitive to environmental signals and intraspecific variation on pharyngeal teeth was not random but reflects phenotypic plasticity. Altogether, these results support the influence of the environment as a trigger for an alternative developmental pathway resulting in left-right asymmetry in dentition and shape of pharyngeal arches.&lt;br /&gt;
&lt;br /&gt;
Dicom files were subsequently loaded within the open-source software [http://slicer.org '''3D Slicer'''] (Version 4.5 ). 3D models were rendered from dicom files using the editor module within [http://slicer.org '''3D Slicer'''] and the thresholding algorithm.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Scanning Laser Optical Tomography for in Toto Imaging of the Murine Cochlea.== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28388662 PLoS One. 2017 Apr 7;12(4):e0175431. PMID: 28388662]   |  [http://journals.plos.org/plosone/article/file?id=10.1371/journal.pone.0175431&amp;amp;type=printable PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Nolte L, Tinne N, Schulze J, Heinemann D, Antonopoulos GC, Meyer H, Nothwang HG, Lenarz T, Heisterkamp A, Warnecke A, Ripken T.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  &lt;br /&gt;
Industrial and Biomedical Optics Department, Laser Zentrum Hannover e.V., Hannover, Germany.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:'''  The mammalian cochlea is a complex macroscopic structure due to its helical shape and the microscopic arrangements of the individual layers of cells. To improve the outcomes of hearing restoration in deaf patients, it is important to understand the anatomic structure and composition of the cochlea ex vivo. Hitherto, only one histological technique based on confocal laser scanning microscopy and optical clearing has been developed for in toto optical imaging of the murine cochlea. However, with a growing size of the specimen, e.g., human cochlea, this technique reaches its limitations. Here, we demonstrate scanning laser optical tomography (SLOT) as a valuable imaging technique to visualize the murine cochlea in toto without any physical slicing. This technique can also be applied in larger specimens up to cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; such as the human cochlea. Furthermore, immunolabeling allows visualization of inner hair cells (otoferlin) or spiral ganglion cells (neurofilament) within the whole cochlea. After image reconstruction, the 3D dataset was used for digital segmentation of the labeled region. As a result, quantitative analysis of position, length and curvature of the labeled region was possible. This is of high interest in order to understand the interaction of cochlear implants (CI) and cells in more detail. &lt;br /&gt;
&lt;br /&gt;
To enable correct overlay of the two excitation channels, the general registration algorithm (BRAINS) from the open source software [http://slicer.org '''3D Slicer'''] was used.                          &lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Nolte-PLoSOne2017.PNG|thumb|300px|  Maximum intensity projections (MIP) were performed on the reconstructed data of samples 1 and 2.&lt;br /&gt;
(A) MIP of sample 1. The labeled neurofilament appears as a helical shape inside the cochlea. (B) Higher magnification of the highlighted area in A. The dendrites of the spiral ganglions are visible. (C) Negative control (sample 2). Only autofluorescence and nonspecific binding shows the outer shape of the cochlea. (D) Higher magnification of the highlighted area in C.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Patient Education for Endoscopic Sinus Surgery: Preliminary Experience Using 3D-Printed Clinical Imaging Data== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28387702 J Funct Biomater. 2017 Apr 7;8(2). PMID: 28387702]   |  [http://www.mdpi.com/2079-4983/8/2/13/htm PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Sander IM, Liepert TT, Doney EL, Leevy WM, Liepert DR.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Department of Biological Sciences, University of Notre Dame, South Bend, IN, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Within the Ear, Nose, and Throat (ENT) medical space, a relatively small fraction of patients follow through with elective surgeries to fix ailments such as a deviated septum or occluded sinus passage. Patient understanding of their diagnosis and treatment plan is integral to compliance, which ultimately yields improved medical outcomes and better quality of life. Here we report the usage of advanced, polyjet 3D printing methods to develop a multimaterial replica of human nasal sinus anatomy, derived from clinical X-ray computed tomography (CT) data, to be used as an educational aid during physician consultation. The final patient education model was developed over several iterations to optimize material properties, anatomical accuracy and overall display. A two-arm, single-center, randomized, prospective study was then performed in which 50 ENT surgical candidates (and an associated control group, n = 50) were given an explanation of their anatomy, disease state, and treatment options using the education model as an aid. Statistically significant improvements in patient ratings of their physician's explanation of their treatment options (p = 0.020), self-rated anatomical understanding (p = 0.043), self-rated understanding of disease state (p = 0.016), and effectiveness of the visualization (p = 0.007) were noted from the population that viewed the 3D education model, indicating it is an effective tool which ENT surgeons may use to educate and interact with patients. &lt;br /&gt;
&lt;br /&gt;
All volumes outside of the volume of interest were masked at a value of −1000 Hounsfield Units (HU). The data was exported in Nifti (.nii) format and opened in [http://slicer.org '''3D Slicer'''].&lt;br /&gt;
A 3D surface map for bone was generated using the “Grayscale Modelmaker” tool within [http://slicer.org '''3D Slicer'''] at a threshold of 300 HU. A separate 3D surface map was generated for soft tissue using the same tool and process with a threshold level of −300 HU. Each surface map was exported from 3DSlicer as a .stl file.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Sander-JFB2017.png|thumb|300px|  Nasal cavity model generation and fabrication. (A) 3D surface maps generated from CT scan slices of patient nasal cavity used to generate a 3D-printed model; (B) 3D-printed, sliced model, printed with two distinct polymers to represent hard and soft tissues; (C) Single coronal model slice with specific anatomical details highlighted.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Comprehensive Evaluation of Ten Deformable Image Registration Algorithms for Contour Propagation between CT and Cone-beam CT Images in Adaptive Head &amp;amp; Neck Radiotherapy== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28414799 PLoS One. 2017 Apr 17;12(4):e0175906. PMID: 28414799]   |  [http://journals.plos.org/plosone/article/file?id=10.1371/journal.pone.0175906&amp;amp;type=printable PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Li X, Zhang Y, Shi Y, Wu S, Xiao Y, Gu X, Zhen X, Zhou L.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  &lt;br /&gt;
Department of Biomedical Engineering, Southern Medical University, Guangzhou, Guangdong, China.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:'''Deformable image registration (DIR) is a critical technic in adaptive radiotherapy (ART) for propagating contours between planning computerized tomography (CT) images and treatment CT/cone-beam CT (CBCT) images to account for organ deformation for treatment re-planning. To validate the ability and accuracy of DIR algorithms in organ at risk (OAR) contour mapping, ten intensity-based DIR strategies, which were classified into four categories-optical flow-based, demons-based, level-set-based and spline-based-were tested on planning CT and fractional CBCT images acquired from twenty-one head &amp;amp; neck (H&amp;amp;N) cancer patients who underwent 6~7-week intensity-modulated radiation therapy (IMRT). Three similarity metrics, i.e., the Dice similarity coefficient (DSC), the percentage error (PE) and the Hausdorff distance (HD), were employed to measure the agreement between the propagated contours and the physician-delineated ground truths of four OARs, including the vertebra (VTB), the vertebral foramen (VF), the parotid gland (PG) and the submandibular gland (SMG). It was found that the evaluated DIRs in this work did not necessarily outperform rigid registration. DIR performed better for bony structures than soft-tissue organs, and the DIR performance tended to vary for different ROIs with different degrees of deformation as the treatment proceeded. Generally, the optical flow-based DIR performed best, while the demons-based DIR usually ranked last except for a modified demons-based DISC used for CT-CBCT DIR. These experimental results suggest that the choice of a specific DIR algorithm depends on the image modality, anatomic site, magnitude of deformation and application. Therefore, careful examinations and modifications are required before accepting the auto-propagated contours, especially for automatic re-planning ART systems.&lt;br /&gt;
&lt;br /&gt;
Before performing the rigid and deformable registration, all the images were pre-processed using an open source software [http://slicer.org '''3D Slicer''']. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Exercise Decreases Marrow Adipose Tissue Through ß-Oxidation in Obese Running Mice== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28436105 J Bone Miner Res. 2017 Apr 24. PMID: 28436105]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Styner M, Pagnotti GM, McGrath C, Wu X, Sen B, Uzer G, Xie Z, Zong X, Styner MA, Rubin CT, Rubin J.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Medicine, Division of Endocrinology and Metabolism, University of North Carolina, Chapel Hill, NC, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' The relationship between marrow adipose tissue (MAT) and bone health is poorly understood. We used running exercise to ask whether obesity-associated MAT can be attenuated via exercise and whether this correlates with gains in bone quantity and quality. C57BL/6 mice were divided into diet-induced obesity (DIO, n = 14) versus low-fat diet (LFD, n = 14). After 3 months, 16-week-old mice were allocated to an exercise intervention (LFD-E, DIO-E) or a control group (LFD, DIO) for 6 weeks (4 groups, n = 7/group). Marrow adipocyte area was 44% higher with obesity (p &amp;lt; 0.0001) and after exercise 33% lower in LFD (p &amp;lt; 0.0001) and 39% lower in DIO (p &amp;lt; 0.0001). In LFD, exercise did not affect adipocyte number; however, in DIO, the adipocyte number was 56% lower (p &amp;lt; 0.0001). MAT was 44% higher in DIO measured by osmium-μCT, whereas exercise associated with reduced MAT (-23% in LFD, -48% in DIO, p &amp;lt; 0.05). MAT was additionally quantified by 9.4TMRI, and correlated with osmium-µCT (r = 0.645; p &amp;lt; 0.01). Consistent with higher lipid beta oxidation, perilipin 3 (PLIN3) rose with exercise in tibial mRNA (+92% in LFD, +60% in DIO, p &amp;lt; 0.05). Tibial µCT-derived trabecular bone volume (BV/TV) was not influenced by DIO but responded to exercise with an increase of 19% (p &amp;lt; 0.001). DIO was associated with higher cortical periosteal and endosteal volumes of 15% (p = 0.012) and 35% (p &amp;lt; 0.01), respectively, but Ct.Ar/Tt.Ar was lower by 2.4% (p &amp;lt; 0.05). There was a trend for higher stiffness (N/m) in DIO, and exercise augmented this further. In conclusion, obesity associated with increases in marrow lipid-measured by osmium-μCT and MRI-and partially due to an increase in adipocyte size, suggesting increased lipid uptake into preexisting adipocytes. Exercise associated with smaller adipocytes and less bone lipid, likely invoking increased ß-oxidation and basal lipolysis as evidenced by higher levels of PLIN3. © 2017 American Society for Bone and Mineral Research.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Interactive Outlining of Pancreatic Cancer Liver Metastases in Ultrasound Images== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28420871 Sci Rep. 2017 Apr 18;7(1):892. PMID: 28420871]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Egger J, Schmalstieg D, Chen X, Zoller WG, Hann A.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  Institute for Computer Graphics and Vision, Graz University of Technology, Graz, Austria. &lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Ultrasound (US) is the most commonly used liver imaging modality worldwide. Due to its low cost, it is increasingly used in the follow-up of cancer patients with metastases localized in the liver. In this contribution, we present the results of an interactive segmentation approach for liver metastases in US acquisitions. A (semi-) automatic segmentation is still very challenging because of the low image quality and the low contrast between the metastasis and the surrounding liver tissue. Thus, the state of the art in clinical practice is still manual measurement and outlining of the metastases in the US images. We tackle the problem by providing an interactive segmentation approach providing real-time feedback of the segmentation results. The approach has been evaluated with typical US acquisitions from the clinical routine, and the datasets consisted of pancreatic cancer metastases. Even for difficult cases, satisfying segmentations results could be achieved because of the interactive real-time behavior of the approach. In total, 40 clinical images have been evaluated with our method by comparing the results against manual ground truth segmentations. This evaluation yielded to an average Dice Score of 85% and an average Hausdorff Distance of 13 pixels.&lt;br /&gt;
We tested our data with the GrowCut implementation that is available in [http://slicer.org '''3D Slicer'''].&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Egger-SciRep2017.png|thumb|300px|  GrowCut segmentation results for the two metastases from Fig. 9. The left images show the manual&lt;br /&gt;
initialization of GrowCut: the metastases were initialized with green, and the backgrounds were initialized with&lt;br /&gt;
yellow. The images in the middle show the segmentation results of GrowCut (green). The right images show a&lt;br /&gt;
closer view of the segmentation results (green) with a lower opacity.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==The Evolution of Cost-efficiency in Neural Networks during Recovery from Traumatic Brain Injury== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28422992 PLoS One. 2017 Apr 19;12(4):e0170541. PMID: 28422992]  | [http://journals.plos.org/plosone/article/file?id=10.1371/journal.pone.0170541&amp;amp;type=printable PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Roy A, Bernier RA, Wang J, Benson M, French JJ Jr, Good DC, Hillary FG.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  &lt;br /&gt;
Department of Psychology, The Pennsylvania State University, University Park, Pennsylvania, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' A somewhat perplexing finding in the systems neuroscience has been the observation that physical injury to neural systems may result in enhanced functional connectivity (i.e., hyperconnectivity) relative to the typical network response. The consequences of local or global enhancement of functional connectivity remain uncertain and this is particularly true for the overall metabolic cost of the network. We examine the hyperconnectivity hypothesis in a sample of 14 individuals with TBI with data collected at approximately 3, 6, and 12 months following moderate and severe TBI. As anticipated, individuals with TBI showed increased network strength and cost early after injury, but by one-year post injury hyperconnectivity was more circumscribed to frontal DMN and temporal-parietal attentional control regions. Cost in these subregions was a significant predictor of cognitive performance. Cost-efficiency analysis in the Power 264 data parcellation suggested that at 6 months post injury the network requires higher cost connections to achieve high efficiency as compared to the network 12 months post injury. These results demonstrate that networks self-organize to re-establish connectivity while balancing cost-efficiency trade-offs.&lt;br /&gt;
To determine the influence of global pathology on brain networks, we created a 3-dimensional (3D) lesion model for each subject using [http://slicer.org '''3D Slicer'''] that utilizes information from multiple MR sequences, such as SWI, FLAIR, and T1 MPRAGE.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Roy-PLoSOne2017.PNG|thumb|300px|fMRI data preprocessing steps and the analytic pipeline.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Three‐Dimensional Printing: An Aid to Epidural Access for Neuromodulation== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28425137 Neuromodulation. 2017 Apr 20 PMID: 28425137]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Taverner MG, Monagle JP.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  &lt;br /&gt;
Frankston Pain Management, Victoria, Australia.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' OBJECTIVE:&lt;br /&gt;
The case report details to use of three-dimensional (3D) printing as an aid to neuromodulation.&lt;br /&gt;
METHODS:&lt;br /&gt;
A patient is described in whom previous attempts at spinal neuromodulation had failed due to lack of epidural or intrathecal access, and the use of a 3D printed model allowed for improved planning and ultimately, success. Thin-slices (0.625 mm)&lt;br /&gt;
of a high-resolution CT scan of the patient's thoracolumbar spine and iliac crests was used to create a CAD model on [http://slicer.org '''3D Slicer'''] software (Surgical Planning Laboratory, Boston, MA&lt;br /&gt;
RESULTS:&lt;br /&gt;
Successful spinal cord stimulation was achieved with the plan developed by access to a 3D model of the patient's spine.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
Neuromodulation techniques can provide the optimal analgesic techniques for individual patients. At times these can fail due to lack of access to the site for intervention, in this case epidural access. 3D printing may provide additional information to improve the likelihood of access when anatomy is distorted and standard approaches prove difficult.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Biomechanical Flow Amplification Arising From the Variable Deformation of the Subglottic Mucosa== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28433346 J Voice. 2017 Apr 19. PMID: 28433346]  | [http://www.jvoice.org/article/S0892-1997(17)30036-X/pdf  PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Goodyer E, Müller F, Hess M, Kandan K, Farukh F.&lt;br /&gt;
&lt;br /&gt;
'''Institution:'''  &lt;br /&gt;
De Montfort University, Bio-Informatics Research Group, Leicester, UK.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' OBJECTIVE:&lt;br /&gt;
This study mapped the variation in tissue elasticity of the subglottic mucosa, applied these data to provide initial models of the likely deformation of the mucosa during the myoelastic cycle, and hypothesized as to the impact on the process of phonation.&lt;br /&gt;
STUDY DESIGN:&lt;br /&gt;
Six donor human larynges were dissected along the sagittal plane to expose the vocal folds and subglottic mucosa. A linear skin rheometer was used to apply a controlled shear force, and the resultant displacement was measured. These data provided a measure of the stress/strain characteristics of the tissue at each anatomic point. A series of measurements were taken at 2-mm interval inferior of the vocal folds, and the change in elasticity was determined. CT images of the excised larynges have been used to create 3D reconstructions with the help of an open-source medical imaging software, [http://slicer.org '''3D Slicer'''].&lt;br /&gt;
RESULTS:&lt;br /&gt;
It was found that the elasticity of the mucosa in the subglottic region increased linearly with distance from the vocal folds in all 12 samples. A simple deformation model indicated that under low pressure conditions the subglottic mucosa will deform to form a cone, which could result in a higher velocity, thus amplifying the low pressure effect resulting from the Venturi principle, and could assist in maintaining laminar flow.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
This study indicated that the deformation of the subglottic mucosa could play a significant role in the delivery of a low pressure airflow over the vocal folds. A large scale study will now be undertaken to secure more data to evaluate this hypothesis, and using computational fluid dynamics based on actual three-dimensional structure obtained from computed tomography scans the aerodynamics of this region will be investigated.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Goodyer-JVoice2017.png|thumb|300px|  Three-dimensional (3D) model of a larynx constructed&lt;br /&gt;
from a computed tomography scan images (A) showing the full 3D&lt;br /&gt;
model. (B) and (C) Show the views of larynx looking down the arrow&lt;br /&gt;
as indicated by the letter P and Q, respectively. CT images of&lt;br /&gt;
the excised larynges have been used to create 3D reconstructions&lt;br /&gt;
with the help of an open-source medical imaging software,&lt;br /&gt;
[http://slicer.org/ '''3D Slicer'''].]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==HTC Vive MeVisLab Integration via OpenVR for Medical Applications==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
||&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28323840 PLoS One. 2017 Mar 21;12(3):e0173972. PMID: 28323840]  | [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5360258/pdf/pone.0173972.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Egger J, Gall M, Wallner J, Boechat P, Hann A, Li X, Chen X, Schmalstieg D.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Institute of Computer Graphics and Vision, Graz University of Technology, Graz, Austria.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:'''Virtual Reality, an immersive technology that replicates an environment via computer-simulated reality, gets a lot of attention in the entertainment industry. However, VR has also great potential in other areas, like the medical domain, Examples are intervention planning, training and simulation. This is especially of use in medical operations, where an aesthetic outcome is important, like for facial surgeries. Alas, importing medical data into Virtual Reality devices is not necessarily trivial, in particular, when a direct connection to a proprietary application is desired. Moreover, most researcher do not build their medical applications from scratch, but rather leverage platforms like MeVisLab, MITK, OsiriX or [http://www.slicer.org '''3D Slicer''']. These platforms have in common that they use libraries like ITK and VTK, and provide a convenient graphical interface. However, ITK and VTK do not support Virtual Reality directly. In this study, the usage of a Virtual Reality device for medical data under the MeVisLab platform is presented. The OpenVR library is integrated into the MeVisLab platform, allowing a direct and uncomplicated usage of the head mounted display HTC Vive inside the MeVisLab platform. Medical data coming from other MeVisLab modules can directly be connected per drag-and-drop to the Virtual Reality module, rendering the data inside the HTC Vive for immersive virtual reality inspection.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Revealing Cancer Subtypes with Higher-Order Correlations Applied to Imaging and Omics Data== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28359308 BMC Med Genomics. 2017 Mar 31;10(1):20.  PMID: 28359308] | [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5374737/pdf/12920_2017_Article_256.pdf  PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Graim K, Liu TT, Achrol AS, Paull EO, Newton Y, Chang SD, Harsh GR, Cordero SP, Rubin DL, Stuart JM.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Biomedical Engineering, University of California, Santa Cruz, CA, USA.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Patient stratification to identify subtypes with different disease manifestations, severity, and expected survival time is a critical task in cancer diagnosis and treatment. While stratification approaches using various biomarkers (including high-throughput gene expression measurements) for patient-to-patient comparisons have been successful in elucidating previously unseen subtypes, there remains an untapped potential of incorporating various genotypic and phenotypic data to discover novel or improved groupings.&lt;br /&gt;
METHODS:&lt;br /&gt;
Here, we present HOCUS, a unified analytical framework for patient stratification that uses a community detection technique to extract subtypes out of sparse patient measurements. HOCUS constructs a patient-to-patient network from similarities in the data and iteratively groups and reconstructs the network into higher order clusters. We investigate the merits of using higher-order correlations to cluster samples of cancer patients in terms of their associations with survival outcomes.&lt;br /&gt;
RESULTS:&lt;br /&gt;
In an initial test of the method, the approach identifies cancer subtypes in mutation data of glioblastoma, ovarian, breast, prostate, and bladder cancers. In several cases, HOCUS provides an improvement over using the molecular features directly to compare samples. Application of HOCUS to glioblastoma images reveals a size and location classification of tumors that improves over human expert-based stratification.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
Subtypes based on higher order features can reveal comparable or distinct groupings. The distinct solutions can provide biologically- and treatment-relevant solutions that are just as significant as solutions based on the original data.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Graim-BMCMedGenomics2017-fig5.jpg|thumb|300px| HOCUS of GBM MR Images. a. P-values of survival separation (log-rank test) for each of the orders of clustering across a range of k clusters. b. Kaplan-Meier plot of the third-order HOCUS clusters. c. Images of tumors within each cluster projected onto the MNI brain atlas. Showing sagittal, coronal, axial views. Brightness of color indicates the number of patients with tumor at a given location. Generated using [http://slicer.org '''3D Slicer''']. d. Violin plot showing tumor volumes within each third-order cluster. e. Molecular (gene expression based) subtypes within the clusters.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Three-Dimensional Volume Rendering of Pelvic Models and Paraurethral Masses Based on MRI Cross-Sectional Images== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28352953 Int Urogynecol J. 2017 Mar 28. PMID: 28352953]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Doumouchtsis SK, Nazarian DA, Gauthaman N, Durnea CM, Munneke G.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Obstetrics &amp;amp; Gynaecology, Epsom and St. Helier University Hospital NHS Trust, Epsom, UK. &lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' AIMS:&lt;br /&gt;
Our aim was to assess the feasibility of rendering 3D pelvic models using magnetic resonance imaging (MRI) scans of patients with vaginal, urethral and paraurethral lesions and obtain additional information previously unavailable through 2D imaging modalities.&lt;br /&gt;
METHODS:&lt;br /&gt;
A purposive sample of five female patients 26-40 years old undergoing investigations for vaginal or paraurethral mass was obtained in a tertiary teaching hospital. 3D volume renderings of the bladder, urethra and paraurethral masses were constructed using [http://slicer.org '''3D Slicer'''] v.3.4.0. Spatial dimensions were determined and compared with findings from clinical, MRI, surgical and histopathological reports. The quality of information regarding size and location of paraurethral masses obtained from 3D models was compared with information from cross-sectional MRI and review of clinical, surgical and histopathological findings.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The analysis of rendered 3D models yielded detailed anatomical dimensions and provided information that was in agreement and in higher detail than information based on clinical examination, cross-sectional 2D MRI analysis and histopathological reports. High-quality pelvic 3D models were rendered with the characteristics and resolution to allow identification and detailed viewing of the spatial relationship between anatomical structures.&lt;br /&gt;
CONCLUSIONS:&lt;br /&gt;
To our knowledge, this is the first preliminary study to evaluate the role of MRI-based 3D pelvic models for investigating paraurethral masses. This is a feasible technique and may prove a useful addition to conventional 2D MRI. Further prospective studies are required to evaluate this modality for investigating such lesions and planning appropriate management.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==A Study of Volumetric Variations of Basal Nuclei in the Normal Human Brain by Magnetic Resonance Imaging== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28078760 Clin Anat. 2017 Mar;30(2):175-82. PMID: 28078760]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Elkattan A, Mahdy A, Eltomey M, Ismail R.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Anatomy, Tanta University of Medical Sciences, Tanta, Egypt.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Knowledge of the effects of healthy aging on brain structures is necessary to identify abnormal changes due to diseases. Many studies have demonstrated age-related volume changes in the brain using MRI. 60 healthy individuals who had normal MRI aged from 20 years to 80 years were examined and classified into three groups: Group I: 21 persons; nine males and 12 females aging between 20-39 years old. Group II: 22 persons; 11 males and 11 females aging between 40-59 years old. Group III: 17 persons; eight males and nine females aging between 60-80 years old. Volumetric analysis was done to evaluate the effect of age, gender and hemispheric difference in the caudate and putamen by the [http://slicer.org '''3D Slicer'''] 4.3.3.1 software using 3D T1-weighted images. Data were analyzed by student's unpaired t test, ANOVA and regression analysis. The volumes of the measured and corrected caudate nuclei and putamen significantly decreased with aging in males. There was a statistically insignificant relation between the age and the volume of the measured caudate nuclei and putamen in females but there was a statistically significant relation between the age and the corrected caudate nuclei and putamen. There was no significant difference on the caudate and putamen volumes between males and females. There was no significant difference between the right and left caudate nuclei volumes. There was a leftward asymmetry in the putamen volumes. The results can be considered as a base to track individual changes with time (aging and CNS diseases). &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==MITK-OpenIGTLink for Combining Open-Source Toolkits in Real-Time Computer-Assisted Interventions== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/27687984 Int J Comput Assist Radiol Surg. 2017 Mar;12(3):351-61. PMID: 27687984]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Klemm M, Kirchner T, Gröhl J, Cheray D, Nolden M, Seitel A, Hoppe H, Maier-Hein L, Franz AM.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Laboratory for Computer-Assisted Medicine, Department of Electrical Engineering and Information Technology, Offenburg University, Offenburg, Germany.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' PURPOSE:&lt;br /&gt;
Due to rapid developments in the research areas of medical imaging, medical image processing and robotics, computer-assisted interventions (CAI) are becoming an integral part of modern patient care. From a software engineering point of view, these systems are highly complex and research can benefit greatly from reusing software components. This is supported by a number of open-source toolkits for medical imaging and CAI such as the medical imaging interaction toolkit (MITK), the public software library for ultrasound imaging research (PLUS) and [http://slicer.org '''3D Slicer''']. An independent inter-toolkit communication such as the open image-guided therapy link (OpenIGTLink) can be used to combine the advantages of these toolkits and enable an easier realization of a clinical CAI workflow.&lt;br /&gt;
&amp;lt;br&amp;gt;METHODS:&lt;br /&gt;
MITK-OpenIGTLink is presented as a network interface within MITK that allows easy to use, asynchronous two-way messaging between MITK and clinical devices or other toolkits. Performance and interoperability tests with MITK-OpenIGTLink were carried out considering the whole CAI workflow from data acquisition over processing to visualization.&lt;br /&gt;
&amp;lt;br&amp;gt;RESULTS:&lt;br /&gt;
We present how MITK-OpenIGTLink can be applied in different usage scenarios. In performance tests, tracking data were transmitted with a frame rate of up to 1000 Hz and a latency of 2.81 ms. Transmission of images with typical ultrasound (US) and greyscale high-definition (HD) resolutions of [Formula: see text] and [Formula: see text] is possible at up to 512 and 128 Hz, respectively.&lt;br /&gt;
&amp;lt;br&amp;gt;CONCLUSION:&lt;br /&gt;
With the integration of OpenIGTLink into MITK, this protocol is now supported by all established open-source toolkits in the field. This eases interoperability between MITK and toolkits such as PLUS or [http://slicer.org '''3D Slicer'''] and facilitates cross-toolkit research collaborations. MITK and its submodule MITK-OpenIGTLink are provided open source under a BSD-style license (http://mitk.org).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Increased Cerebellar Gray Matter Volume in Head Chefs== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28182712 PLoS One. 2017 Feb 9;12(2):e0171457.  PMID: 28182712] | [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5300254/pdf/pone.0171457.pdf  PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Cerasa A, Sarica A, Martino I, Fabbricatore C, Tomaiuolo F, Rocca F, Caracciolo M, Quattrone A.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Istituto di Bioimmagini e Fisiologia Molecolare, Consiglio Nazionale delle Ricerche, Catanzaro, Italy.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:'''OBJECTIVE:&lt;br /&gt;
Chefs exert expert motor and cognitive performances on a daily basis. Neuroimaging has clearly shown that that long-term skill learning (i.e., athletes, musicians, chess player or sommeliers) induces plastic changes in the brain thus enabling tasks to be performed faster and more accurately. How a chef's expertise is embodied in a specific neural network has never been investigated.&lt;br /&gt;
&amp;lt;br&amp;gt;METHODS:&lt;br /&gt;
Eleven Italian head chefs with long-term brigade management expertise and 11 demographically-/ psychologically- matched non-experts underwent morphological evaluations.&lt;br /&gt;
&amp;lt;br&amp;gt;RESULTS:&lt;br /&gt;
Voxel-based analysis performed with SUIT, as well as, automated volumetric measurement assessed with Freesurfer, revealed increased gray matter volume in the cerebellum in chefs compared to non-experts. The most significant changes were detected in the anterior vermis and the posterior cerebellar lobule. The magnitude of the brigade staff and the higher performance in the Tower of London test correlated with these specific gray matter increases, respectively.&lt;br /&gt;
&amp;lt;br&amp;gt;CONCLUSIONS:&lt;br /&gt;
We found that chefs are characterized by an anatomical variability involving the cerebellum. This confirms the role of this region in the development of similar expert brains characterized by learning dexterous skills, such as pianists, rock climbers and basketball players. However, the nature of the cellular events underlying the detected morphological differences remains an open question.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Carasa-PlosOne2017-fig2.jpg|thumb|300px| Sample color-coded automated brain segmentation results.&lt;br /&gt;
A 3D surface image (created with  [http://slicer.org '''3D Slicer''']  v 4.6, www.slicer.org) showing typical automated subcortical segmentation of the cerebellum performed by FreeSurfer (v 5.3). Scatter plot of the mean normalized volumes of the left and right cerebellar cortex for each single subject has been plotted. Advanced neuroimaging analysis reveals bilateral cerebellar volumetric increase in the chef group with respect to non-expert individuals.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Tumor Heterogeneity Assessed by Texture Analysis on Contrast-Enhanced CT in Lung Adenocarcinoma: Association with Pathologic Grade== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28430603 Oncotarget. 2017 Feb 16.  PMID: 28430603]  | [http://www.impactjournals.com/oncotarget/index.php?journal=oncotarget&amp;amp;page=article&amp;amp;op=download&amp;amp;path%5B%5D=15399&amp;amp;path%5B%5D=49197 PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Liu Y, Liu S, Qu F, Li Q, Cheng R, Ye Z.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' &lt;br /&gt;
Department of Radiology, Tianjin Medical University Cancer Institute and Hospital, National Clinical Research Center of Cancer, Key Laboratory of Cancer Prevention and Therapy, Tianjin, China.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' To investigate whether texture features on contrast-enhanced computed tomography (CECT) images of lung adenocarcinoma have association with pathologic grade.Methods A cohort of 148 patients with surgically operated adenocarcinoma was retrospectively reviewed. Fifty-four CT features of the primary lung tumor were extracted from CECT images using open-source [http://slicer.org/ '''3D Slicer'''] software; meanwhile, enhancement homogeneity was evaluated by two radiologists using visual assessment. Multivariate logistic regression analysis was performed to determine significant image indicator of pathologic grade. Results Tumors of intermediate grade were more likely to be never smokers (P=0.020). Enhancement heterogeneity by visual assessment showed no statistical difference between intermediate grade and high grade (P=0.671). Among those 54 features, 29 of them were significantly associated with pathologic grade. Multivariate logistic regression analyses identified F33 (Homogeneity 1) (P=0.005) and F38 (Inverse Variance) (P=0.032) as unique independent image indicators of pathologic grade, and the AUC calculated from this model (AUC=0.834) was higher than clinical model (AUC=0.615) (P=0.0001).Conclusions Our study revealed that texture analysis on CECT images could be helpful in predicting pathologic grade of lung adenocarcinoma.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Liu-Oncotarget2017.png|thumb|300px|  Example of CT images showing segmentation of lung tumor. Semiautomatic tumor segmentation was done on every slice of the tumor using [http://slicer.org/ '''3D Slicer'''] (a), and the 3D view of the segmented tumor (b) which was shown in yellow.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==SEEG Assistant: A 3D Slicer Extension to Support Epilepsy Surgery== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/28231759 BMC Bioinformatics. 2017 Feb 23;18(1):124.  PMID: 28231759] | [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5324222/pdf/12859_2017_Article_1545.pdf  PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Narizzano M, Arnulfo G, Ricci S, Toselli B, Tisdall M, Canessa A, Fato MM, Cardinale F.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Informatics, Bioengineering Robotics and System engineering (DIBRIS), University of Genoa, Genova, Italy.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' In the evaluation of Stereo-Electroencephalography (SEEG) signals, the physicist's workflow involves several operations, including determining the position of individual electrode contacts in terms of both relationship to grey or white matter and location in specific brain regions. These operations are (i) generally carried out manually by experts with limited computer support, (ii) hugely time consuming, and (iii) often inaccurate, incomplete, and prone to errors.&lt;br /&gt;
&amp;lt;br&amp;gt;RESULTS:&lt;br /&gt;
In this paper we present SEEG Assistant, a set of tools integrated in a single [http://slicer.org '''3D Slicer''']  extension, which aims to assist neurosurgeons in the analysis of post-implant structural data and hence aid the neurophysiologist in the interpretation of SEEG data. SEEG Assistant consists of (i) a module to localize the electrode contact positions using imaging data from a thresholded post-implant CT, (ii) a module to determine the most probable cerebral location of the recorded activity, and (iii) a module to compute the Grey Matter Proximity Index, i.e. the distance of each contact from the cerebral cortex, in order to discriminate between white and grey matter location of contacts. Finally, exploiting [http://slicer.org '''3D Slicer''']  capabilities, SEEG Assistant offers a Graphical User Interface that simplifies the interaction between the user and the tools. SEEG Assistant has been tested on 40 patients segmenting 555 electrodes, and it has been used to identify the neuroanatomical loci and to compute the distance to the nearest cerebral cortex for 9626 contacts. We also performed manual segmentation and compared the results between the proposed tool and gold-standard clinical practice. As a result, the use of SEEG Assistant decreases the post implant processing time by more than 2 orders of magnitude, improves the quality of results and decreases, if not eliminates, errors in post implant processing.&lt;br /&gt;
&amp;lt;br&amp;gt;CONCLUSIONS:&lt;br /&gt;
The SEEG Assistant Framework for the first time supports physicists by providing a set of open-source tools for post-implant processing of SEEG data. Furthermore, SEEG Assistant has been integrated into [http://slicer.org '''3D Slicer'''] , a software platform for the analysis and visualization of medical images, overcoming limitations of command-line tools.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:Narizzano-BMCBioinformatics2017-fig3.jpg|thumb|300px| CPE out performs manual segmentation in complex and critical cases. a As an example of SEEG complexity, we show MRI and thresholded post-implant CT scans for one subject from our cohort. Contacts are shown as groups of white voxels. This case illustrates the complexity of SEEG implants with electrode shafts following non-planar directions (e.g. X), shafts targeting almost the same geometrical point (e.g. R and R’). b CPE segments all contacts (green spheres) belonging to each electrode from post-implant CT scans, represented here as red 3D meshes obtained tessellating the thresholded data to ease visualization. c Show the right pial surface with 3D post-implant thresholded-CT meshes and the cut plane used in panel d where the example of X and X’ electrodes are shown. Those examples represent the case of non-planar insertion trajectories which yielded an artefactually fused electrode. CPE integrating the knowledge of the electrode model can segment the contact positions more accurately than visual inspection.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Associations of Radiomic Data Extracted from Static and Respiratory-Gated CT Scans with Disease Recurrence in Lung Cancer Patients Treated with SBRT== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/28046060 PLoS One. 2017 Jan 3;12(1):e0169172.  PMID: 28046060]| [http://journals.plos.org/plosone/article/file?id=10.1371/journal.pone.0169172&amp;amp;type=printable  PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Huynh E, Coroller TP, Narayan V, Agrawal V, Romano J, Franco I, Parmar C, Hou Y, Mak RH, Aerts HJ.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Radiation Oncology, Dana-Farber Cancer Institute, Brigham and Women's Hospital, Harvard Medical School, Boston, USA. &lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Radiomics aims to quantitatively capture the complex tumor phenotype contained in medical images to associate them with clinical outcomes. This study investigates the impact of different types of computed tomography (CT) images on the prognostic performance of radiomic features for disease recurrence in early stage non-small cell lung cancer (NSCLC) patients treated with stereotactic body radiation therapy (SBRT). 112 early stage NSCLC patients treated with SBRT that had static free breathing (FB) and average intensity projection (AIP) images were analyzed. Nineteen radiomic features were selected from each image type (FB or AIP) for analysis based on stability and variance. The selected FB and AIP radiomic feature sets had 6 common radiomic features between both image types and 13 unique features. The prognostic performances of the features for distant metastasis (DM) and locoregional recurrence (LRR) were evaluated using the concordance index (CI) and compared with two conventional features (tumor volume and maximum diameter). P-values were corrected for multiple testing using the false discovery rate procedure. None of the FB radiomic features were associated with DM, however, seven AIP radiomic features, that described tumor shape and heterogeneity, were (CI range: 0.638-0.676). Conventional features from FB images were not associated with DM, however, AIP conventional features were (CI range: 0.643-0.658). Radiomic and conventional multivariate models were compared between FB and AIP images using cross validation. The differences between the models were assessed using a permutation test. AIP radiomic multivariate models (median CI = 0.667) outperformed all other models (median CI range: 0.601-0.630) in predicting DM. None of the imaging features were prognostic of LRR. Therefore, image type impacts the performance of radiomic models in their association with disease recurrence. AIP images contained more information than FB images that were associated with disease recurrence in early stage NSCLC patients treated with SBRT, which suggests that AIP images may potentially be more optimal for the development of an imaging biomarker.&lt;br /&gt;
&lt;br /&gt;
'''Funding:'''&lt;br /&gt;
*U01 CA190234/CA/NCI NIH HHS/United States&lt;br /&gt;
*U24 CA194354/CA/NCI NIH HHS/United States&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:journal.pone.0169172.g001.PNG|thumb|300px| A) Examples of free breathing (FB) and average intensity projection (AIP) images, demonstrating the observable differences in tumor phenotype between each image type. AIP images were reconstructed from 4D computed tomography (CT) scans. B) Schematic representation of the radiomics workflow for FB and AIP images. I. CT images of the patient are acquired and the tumor is segmented. II. Imaging features (radiomic and conventional features) are extracted from the tumor volume. III. Radiomic features undergo a feature dimension reduction process to generate a low-dimensional feature set based on feature stability and variance. IV. Imaging features are then analyzed with clinical outcomes to evaluate their prognostic power. FB and AIP radiomics features are compared. A set of 644 radiomic features was extracted from tumor volumes isolated from FB or AIP images (Fig 1B) using an in-house Matlab 2013 toolbox and [http://slicer.org '''3D Slicer'''] 4.4.0 software]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Early Experiences of Planning Stereotactic Radiosurgery using 3D Printed Models of Eyes with Uveal Melanomas== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/28203052 Clin Ophthalmol. 2017 Jan 31;11:267-71.  PMID: 28203052] | [http://www.ncbi.nlm.nih.gov/pmc/articles/PMC5298814/pdf/opth-11-267.pdf  PDF]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Furdová A, Sramka M, Thurzo A, Furdová A.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Ophthalmology, Faculty of Medicine, Comenius University, Bratislava, Slovakia.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' OBJECTIVE:&lt;br /&gt;
The objective of this study was to determine the use of 3D printed model of an eye with intraocular tumor for linear accelerator-based stereotactic radiosurgery.&lt;br /&gt;
&amp;lt;br&amp;gt;METHODS:&lt;br /&gt;
The software for segmentation ([http://slicer.org '''3D Slicer''']) created virtual 3D model of eye globe with tumorous mass based on tissue density from computed tomography and magnetic resonance imaging data. A virtual model was then processed in the slicing software (Simplify3D®) and printed on 3D printer using fused deposition modeling technology. The material that was used for printing was polylactic acid.&lt;br /&gt;
&amp;lt;br&amp;gt;RESULTS:&lt;br /&gt;
In 2015, stereotactic planning scheme was optimized with the help of 3D printed model of the patient's eye with intraocular tumor. In the period 2001-2015, a group of 150 patients with uveal melanoma (139 choroidal melanoma and 11 ciliary body melanoma) were treated. The median tumor volume was 0.5 cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; (0.2-1.6 cm&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;). The radiation dose was 35.0 Gy by 99% of dose volume histogram.&lt;br /&gt;
&amp;lt;br&amp;gt;CONCLUSION:&lt;br /&gt;
The 3D printed model of eye with tumor was helpful in planning the process to achieve the optimal scheme for irradiation which requires high accuracy of defining the targeted tumor mass and critical structures.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:jFurdova-ClinOphtalmol2017-fig3.jpg|thumb|300px| A) Virtual model of the eye, outer view; arrow indicates optic nerve. A virtual 3D model of eye globe with tumor based on tissue density was created from CT and MRI data by using the [http://slicer.org '''3D Slicer'''] software for segmentation.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Intra-rater Variability in Low-grade Glioma Segmentation== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/27837437 J Neurooncol. 2017 Jan;131(2):393-402. PMID: 27837437]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Bø HK, Solheim O, Jakola AS, Kvistad KA, Reinertsen I, Berntsen EM.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Radiology and Nuclear Medicine, St. Olavs University Hospital, Trondheim, Norway. &lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Assessment of size and growth are key radiological factors in low-grade gliomas (LGGs), both for prognostication and treatment evaluation, but the reliability of LGG-segmentation is scarcely studied. With a diffuse and invasive growth pattern, usually without contrast enhancement, these tumors can be difficult to delineate. The aim of this study was to investigate the intra-observer variability in LGG-segmentation for a radiologist without prior segmentation experience. Pre-operative 3D FLAIR images of 23 LGGs were segmented three times in the software [http://slicer.org '''3D Slicer''']. Tumor volumes were calculated, together with the absolute and relative difference between the segmentations. To quantify the intra-rater variability, we used the Jaccard coefficient comparing both two (J2) and three (J3) segmentations as well as the Hausdorff Distance (HD). The variability measured with J2 improved significantly between the two last segmentations compared to the two first, going from 0.87 to 0.90 (p = 0.04). Between the last two segmentations, larger tumors showed a tendency towards smaller relative volume difference (p = 0.07), while tumors with well-defined borders had significantly less variability measured with both J2 (p = 0.04) and HD (p &amp;lt; 0.01). We found no significant relationship between variability and histological sub-types or Apparent Diffusion Coefficients (ADC). We found that the intra-rater variability can be considerable in serial LGG-segmentation, but the variability seems to decrease with experience and higher grade of border conspicuity. Our findings highlight that some criteria defining tumor borders and progression in 3D volumetric segmentation is needed, if moving from 2D to 3D assessment of size and growth of LGGs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Hybrid Positron Emission Tomography Segmentation of Heterogeneous Lung Tumors using 3D Slicer: Improved Growcut Algorithm with Threshold Initialization== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [https://www.ncbi.nlm.nih.gov/pubmed/28149920 J. Med. Imag. 2017 Jan-Mar;4(1), 011009.  PMID: 28149920] | [[media:Thomas-JMI2017.pdf | PDF]]&lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Thomas HM, Devakumar D, Sasidharan B, Bowen SR, Heck DK, Jebaseelan J, Samuel E.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' VIT University, School of Advanced Sciences, Department of Physics, Vellore, Tamil Nadu 632004, India.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' This paper presents an improved GrowCut (IGC), a positron emission tomography-based segmentation algorithm, and tests its clinical applicability. Contrary to the traditional method that requires the user to provide the initial seeds, the IGC algorithm starts with a threshold-based estimate of the tumor and a three- dimensional morphologically grown shell around the tumor as the foreground and background seeds, respectively. The repeatability of IGC from the same observer at multiple time points was compared with the traditional GrowCut algorithm. The algorithm was tested in 11 nonsmall cell lung cancer lesions and validated against the clinician-defined manual contour and compared against the clinically used 25% of the maximum standardized uptake value [SUV-(max)], 40% SUV&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;, and adaptive threshold methods. The time to edit IGC-defined functional volume to arrive at the gross tumor volume (GTV) was compared with that of manual contouring. The repeatability of the IGC algorithm was very high compared with the traditional GrowCut (p = 0.003) and demonstrated higher agreement with the manual contour with respect to threshold-based methods. Compared with manual contouring, editing the IGC achieved the GTV in significantly less time (p = 0.11). The IGC algorithm offers a highly repeatable functional volume and serves as an effective initial guess that can well minimize the time spent on labor-intensive manual contouring.&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[image:jThomas-JMI2017-fig3.png|thumb|300px| A) A representative example of the uncertainty volume observed with the [http://slicer.org '''3D Slicer'''] GrowCutmethod. (a) The lesion was delineated in three separate runs. There was variability with each run and the composite error in the variability calculated as the uncertainty volume is highlighted in green in (b).]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Pre-clinical Validation of Virtual Bronchoscopy using 3D Slicer== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/27325238 Int J Comput Assist Radiol Surg. 2017 Jan;12(1):25-38. PMID: 27325238] &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Nardelli P, Jaeger A, O'Shea C, Khan KA, Kennedy MP, Cantillon-Murphy P.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' School of Engineering, University College Cork, College Road, Cork, Ireland.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' Lung cancer still represents the leading cause of cancer-related death, and the long-term survival rate remains low. Computed tomography (CT) is currently the most common imaging modality for lung diseases recognition. The purpose of this work was to develop a simple and easily accessible virtual bronchoscopy system to be coupled with a customized electromagnetic (EM) tracking system for navigation in the lung and which requires as little user interaction as possible, while maintaining high usability.&lt;br /&gt;
Methods:&lt;br /&gt;
The proposed method has been implemented as an extension to the open-source platform, [http://slicer.org '''3D Slicer''']. It creates a virtual reconstruction of the airways starting from CT images for virtual navigation. It provides tools for pre-procedural planning and virtual navigation, and it has been optimized for use in combination with a [Formula: see text] of freedom EM tracking sensor. Performance of the algorithm has been evaluated in ex vivo and in vivo testing.&lt;br /&gt;
Results:&lt;br /&gt;
During ex vivo testing, nine volunteer physicians tested the implemented algorithm to navigate three separate targets placed inside a breathing pig lung model. In general, the system proved easy to use and accurate in replicating the clinical setting and seemed to help choose the correct path without any previous experience or image analysis. Two separate animal studies confirmed technical feasibility and usability of the system.&lt;br /&gt;
Conclusions:&lt;br /&gt;
This work describes an easily accessible virtual bronchoscopy system for navigation in the lung. The system provides the user with a complete set of tools that facilitate navigation towards user-selected regions of interest. Results from ex vivo and in vivo studies showed that the system opens the way for potential future work with virtual navigation for safe and reliable airway disease diagnosis.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Anatomical Study and Locating Nasolacrimal Duct on Computed Topographic Image== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/27977487 J Craniofac Surg. 2017 Jan;28(1):275-9. PMID: 27977487]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Zhang S, Cheng Y, Xie J, Wang Z, Zhang F, Chen L, Feng Y, Wang G.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Endocrinology, First Hospital of Jilin University, Changchun, China.&lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' We performed a novel anatomical and radiological investigation to understand the structure of nasolacrimal duct (NLD) and to provide data to help surgeons locate the openings of NLD efficiently based on landmarks.&lt;br /&gt;
MATERIALS AND METHODS:&lt;br /&gt;
We examined the NLD region using computed tomography images of 133 individuals and 6 dry skull specimens. Multiplanar reconstruction of the computed tomography images was performed, and the anatomical features of the NLD were studied in the coronal, sagittal, and axial planes. The long and short diameters of NLD were measured along its cross-section. The position of NLD was localized using the nostril, concha nasalis media, and medial orbital corner as landmarks. The free and open source software, 3D Slicer, was used for the segmentation of the NLD and 3D visualization of the superior and inferior openings of the NLD.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The length, angle, and diameter of NLD were significantly influenced by the age in females compared to those in males. The inferior opening of the NLD could be located efficiently using the nostril and the midsagittal line while the superior opening of NLD could be located using the medial orbital corner. Third, [http://slicer.org '''3D Slicer'''] enabled us to measure the distance between the skin and the bony structure in the image.&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
Our study indicates that the sex and age of the patient should be considered while selecting the optimal NLD stent for a patient, and that the precise location of NLD in reference to landmarks can simplify the surgical difficulties and reduce the risk of injury during the transnasal operation. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Open Wedge High Tibial Osteotomy using Three-Dimensional Printed Models: Experimental Analysis using Porcine Bone== &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''Publication:''' [http://www.ncbi.nlm.nih.gov/pubmed/27876267 Knee. 2017 Jan;24(1):16-22. PMID: 27876267]  &lt;br /&gt;
&lt;br /&gt;
'''Authors:''' Kwun JD, Kim HJ, Park J, Park IH, Kyung HS.&lt;br /&gt;
&lt;br /&gt;
'''Institution:''' Department of Orthopaedic Surgery, School of Medicine, Kyungpook National University, Daegu, Republic of Korea. &lt;br /&gt;
&lt;br /&gt;
'''Background/Purpose:''' BACKGROUND:&lt;br /&gt;
The purpose of this study was to evaluate the usefulness of three-dimensional (3D) printed models for open wedge high tibial osteotomy (HTO) in porcine bone.&lt;br /&gt;
METHODS:&lt;br /&gt;
Computed tomography (CT) images were obtained from 10 porcine knees and 3D imaging was planned using the [http://slicer.org '''3D Slicer'''] program. The osteotomy line was drawn from the three centimeters below the medial tibial plateau to the proximal end of the fibular head. Then the osteotomy gap was opened until the mechanical axis line was 62.5% from the medial border along the width of the tibial plateau, maintaining the posterior tibial slope angle. The wedge-shaped 3D-printed model was designed with the measured angle and osteotomy section and was produced by the 3D printer. The open wedge HTO surgery was reproduced in porcine bone using the 3D-printed model and the osteotomy site was fixed with a plate. Accuracy of osteotomy and posterior tibial slope was evaluated after the osteotomy.&lt;br /&gt;
RESULTS:&lt;br /&gt;
The mean mechanical axis line on the tibial plateau was 61.8±1.5% from the medial tibia. There was no statistically significant difference (P=0.160). The planned and post-osteotomy correction wedge angles were 11.5±3.2° and 11.4±3.3°, and the posterior tibial slope angle was 11.2±2.2° pre-osteotomy and 11.4±2.5° post-osteotomy. There were no significant differences (P=0.854 and P=0.429, respectively).&lt;br /&gt;
CONCLUSION:&lt;br /&gt;
This study showed that good results could be obtained in high tibial osteotomy by using 3D printed models of porcine legs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Go to &amp;lt;big&amp;gt;[https://www.slicer.org/wiki/Main_Page/SlicerCommunity-2016 2016]:: [http://wiki.slicer.org/slicerWiki/index.php/Main_Page/SlicerCommunity-2015 2015] :: [http://wiki.slicer.org/slicerWiki/index.php/Main_Page/SlicerCommunity-2011-2014 2014-2011] :: [http://wiki.slicer.org/slicerWiki/index.php/Main_Page/SlicerCommunity-2005-2010 2010-2005]&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Hherhold</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=File:Linguamyrmex_vladi.png&amp;diff=54934</id>
		<title>File:Linguamyrmex vladi.png</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=File:Linguamyrmex_vladi.png&amp;diff=54934"/>
		<updated>2017-09-18T22:46:55Z</updated>

		<summary type="html">&lt;p&gt;Hherhold: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Hherhold</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=User:Hherhold&amp;diff=52865</id>
		<title>User:Hherhold</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=User:Hherhold&amp;diff=52865"/>
		<updated>2017-07-09T14:03:21Z</updated>

		<summary type="html">&lt;p&gt;Hherhold: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I use uCT scans to study the evolution of both extant and fossil insects and arthropods. 3D Slicer is my platform of choice for post-processing and segmentation of data sets.&lt;br /&gt;
&lt;br /&gt;
Paleoentomological studies include inclusions in Dominican amber (~Miocene/Eocene), Burmese amber (Cretaceous), and Crato Formation specimens (Cretaceous).&lt;br /&gt;
Extant specimens incude an array of orders to investigate evolution of flight mechanics.&lt;br /&gt;
&lt;br /&gt;
Division of Invertebrate Zoology, American Museum of Natural History&lt;br /&gt;
&lt;br /&gt;
New York, NY&lt;/div&gt;</summary>
		<author><name>Hherhold</name></author>
		
	</entry>
</feed>