Metadata-Version: 2.1
Name: slicerio
Version: 0.1.6
Summary: Utilities for 3D Slicer
Home-page: https://github.com/lassoan/slicerio
Author: Andras Lasso
Author-email: lasso@queensu.ca
Maintainer: Andras Lasso
Maintainer-email: lasso@queensu.ca
License: UNKNOWN
Download-URL: https://github.com/lassoan/slicerio/archive/master.zip
Description: [![Python package](https://github.com/lassoan/slicerio/workflows/Python%20package/badge.svg)](https://github.com/lassoan/slicerio/actions?query=workflow%3A%22Python+package%22)
        ![Upload Python Package](https://github.com/lassoan/slicerio/workflows/Upload%20Python%20Package/badge.svg)
        [![PyPI version](https://badge.fury.io/py/slicerio.svg)](https://badge.fury.io/py/slicerio)
        
        # *slicerio*
        
        Python utilities for [3D Slicer](https://www.slicer.org) interoperability.
        
        The package contains utility functions for reading and writing segmentation files and convenience functions for using 3D Slicer via its web API. More functions will be added in the future.
        
        ## Installation
        
        Using [pip](https://pip.pypa.io/en/stable/):
        
        ```
        pip install slicerio
        ```
        
        ## Examples
        
        ### Read segmentation and show some information about segments
        
        ```python
        import slicerio
        import json
        
        segmentation_info = slicerio.read_segmentation_info("Segmentation.seg.nrrd")
        
        number_of_segments = len(segmentation_info["segments"])
        print(f"Number of segments: {number_of_segments}")
        
        segment_names = slicerio.segment_names(segmentation_info)
        print(f"Segment names: {', '.join(segment_names)}")
        
        segment0 = slicerio.segment_from_name(segmentation_info, segment_names[0])
        print("First segment info:\n" + json.dumps(segment0, sort_keys=False, indent=4))
        ```
        
        ### Extract selected segments with chosen label values
        
        ```python
        import slicerio
        import nrrd
        
        input_filename = "path/to/Segmentation.seg.nrrd"
        output_filename = "path/to/SegmentationExtracted.seg.nrrd"
        segment_names_to_labels = [("ribs", 10), ("right lung", 12), ("left lung", 6)]
        
        voxels, header = nrrd.read(input_filename)
        extracted_voxels, extracted_header = slicerio.extract_segments(voxels, header, segmentation_info, segment_names_to_labels)
        nrrd.write(output_filename, extracted_voxels, extracted_header)
        ```
        
        ### View files in 3D Slicer
        
        The `server` module allows using Slicer as a data viewer in any Python environment.
        All files are loaded into a single Slicer instance, which eliminates the wait time for application startup
        and also allows analyzing, comparing multiple data sets in one workspace. The feature is implemented by using
        3D Slicer's built-in Web Server module, which offers data access via a REST API.
        
        For example, an image file can be loaded with the command below. The command starts a new Slicer application instance
        with the web API enabled.
        
        ```python
        import os
        import slicerio.server
        
        # Load from remote URL
        slicerio.server.file_load("https://github.com/rbumm/SlicerLungCTAnalyzer/releases/download/SampleData/LungCTAnalyzerChestCT.nrrd")
        
        # Load from local file
        # A Slicer application instance (with Web Server enabled) is automatically started, if it is not running already.
        slicerio.server.file_load("path/to/SomeImage.nrrd", slicer_executable=f"{os.environ["LOCALAPPDATA"]}/NA-MIC/Slicer 5.2.0/Slicer.exe")
        ```
        
        A segmentation file can be loaded by specifying the `SegmentationFile` file type:
        
        ```python
        slicerio.server.file_load("path/to/Segmentation.seg.nrrd", "SegmentationFile")
        ```
        
        #### Supported file types
        - image files (nrrd, nii.gz, ...): `VolumeFile`
        - segmentation file (.seg.nrrd, nrrd, nii.gz, ...): `SegmentationFile`
        - model file (.stl, .ply, .vtk, .vtp, .vtu, ...): `ModelFile`
        - markup file (.mrj.json): `MarkupsFile`
        - transform file (.tfm, .h5, .txt): `TransformFile`
        - spreadsheet file (.csv, .tsv): `TableFile`
        - text file (.txt, .json, ...): `TextFile`
        - sequence file (.mrb, .seq.nrrd): `SequenceFile`
        - Slicer scene file (.mrml, .mrb): `SceneFile`
        
        ### Inspect data in 3D Slicer
        
        Metadata of data sets loaded into the server can be obtained using `node_properties` function:
        
        ```python
        properties= slicerio.server.node_properties(name="MRHead")[0]
        properties["ClassName"]
        properties["ImageData"]["Extent"]
        
        properties = slicerio.server.node_properties(id=segmentationId)[0]
        segments = properties["Segmentation"]["Segments"]
        for segmentId in segments:
           print(f"{segments[segmentId]['Name']} color: {segments[segmentId]['Color']}")
        ```
        
        List of available nodes can be retrieved using `node_names` and `node_ids`functions:
        
        ```python
        # Retreve node names of all images
        slicerio.server.node_names(class_name="vtkMRMLVolumeNode")
        
        # Retrieve all node IDs
        slicerio.server.node_ids(class_name="vtkMRMLVolumeNode")
        ```
        
        Nodes can be removed from the workspace:
        
        ```python
        # Remove node by name
        slicerio.server.node_remove(name="MRHead")
        
        # Clear the whole scene
        slicerio.server.node_remove()
        ```
        
        ### Export files from 3D Slicer
        
        Data sets created in Slicer (e.g., segmentations, landmark point sets), which can be retrieved by writing into file.
        
        ```python
        # Save the node identified by `MRHead` node name, uncompressed, into the specified file.
        slicerio.server.file_save("c:/tmp/MRHeadSaved.nrrd", name="MRHead", properties={'useCompression': False})
        ```
        
Keywords: 3DSlicer medical imaging segmentation
Platform: UNKNOWN
Classifier: License :: OSI Approved :: MIT License
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Healthcare Industry
Classifier: Intended Audience :: Science/Research
Classifier: Development Status :: 4 - Beta
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: OS Independent
Classifier: Topic :: Scientific/Engineering :: Medical Science Apps.
Classifier: Topic :: System :: Networking
Requires-Python: >=3.6
Description-Content-Type: text/markdown
