Skip to content

Scripting

Introduction

MicroView supports two extension mechanisms for running third-party code: plugins and scripts. While MicroView's plugin architecture is more powerful, and gives fine-grain control over the application, it has a steeper learning curve. For simple tasks, MicroView's scripting interface is sufficient.

Directories and Files

On application startup, MicroView looks for scripts by searching for python *.py files under the Scripts folder in it's application settings folder. The application settings folder can be found by selecting Help → Open User directory from MicroView's menu. The actual folder location will vary depending on your platform.

In the figure, below, the script folder is show for a Windows 10 computer. test1.py will be examined on application startup to see if it is a valid script.

Screenshot

Anatomy of a MicroView Script File

The contents of test1.py are shown below:

import logging

logger = logging.getLogger(__name__)

def zero_image(image, origin, spacing, dicom_info):
    """
    replace image values with zero
    """
    image[:] = 0

def flip_image(image, origin, spacing, dicom_info):
    """
    flip image in x-axis
    """
    image[:] = image[:, ::-1]
    logger.info("flipped image in x axis")

def print_dicom_header(image, origin, spacing, dicom_info):
    """
    print image dicom header
    """
    logger.info("DICOM info: {}".format(str(dicom_info)))

zero_image.__menu__ = 'Fill image with zeros'
flip_image.__menu__ = 'Flip image in x-axis'
print_dicom_header.__menu__ = 'Show image DICOM header'
print_dicom_header.__requires__ = ['BeautifulSoup']

This script file contains three entry-point functions: zero_img(), flip_image() and print_dicom_header() all with the same argument list (image, origin, spacing, dicom_info). In order for MicroView to call a script function, it must have this calling syntax.

Arguments

  • image: contains the currently-selected image as a numpy array.
  • origin: the (x,y,z) origin of the image, measured in mm
  • spacing: the image voxel spacing (x,y,z), measured in mm
  • dicom_info: a pydicom compatible dictionary representing the image meta-info in DICOM format. If the original image data was DICOM this will be a verbatim copy, otherwise a DICOM header is interpolated for the image

    Note: The image array is a shared copy of the current image in MicroView: modifications to the image array modify the image in MicroView directly.

Meta-info

At the bottom of test1.py are four static lines that may seem a little odd. The first three attach a static attribute named __menu__ to each function. MicroView searches for this attribute before deciding if a function should be displayed from the Scripts menu. The final line provides a python list of required packages in order for the given function to be run. For instance, in test1.py above, print_dicom_header() is a simple script that prints DICOM header values to MicroView's central logging window - but it claims to require additional python software (BeautifulSoup in this case) before the plugin can be run. This last attribute provides a rudimentary way for MicroView to bootstrap additional software dependencies using python's pip installer.

Comments