view Sphinx/source/plugins/pixels-masker.rst @ 1251:2da32965a475

object move-storage
author Alain Mazy <am@orthanc.team>
date Tue, 23 Dec 2025 13:22:17 +0100
parents c4658464a0eb
children
line wrap: on
line source

.. _pixels-masker-plugin:


Pixels Masker plugin
====================

.. contents::

This page describes a plugin that extends the ``/modify`` and ``/anonymize``
REST API routes enabling masking of pixels in the image.

.. Disclaimer::
  This plugin is very low-level and does not detect the area to masks.
  This plugin does not have a UI; it is only available through the REST API.


Configuration
-------------

.. highlight:: json

Here's a sample configuration section for this plugin with its default values::

  {
    "PixelsMasker": {

      // Enables/disables the plugin
      "Enable": false
  }


REST API
--------

The plugins does not replace the default ``/modify`` and ``/anonymize`` API routes but provides new
variants at:

- ``/plugins/pixels-masker/studies/../modify``
- ``/plugins/pixels-masker/studies/../anonymize``
- ``/plugins/pixels-masker/series/../modify``
- ``/plugins/pixels-masker/series/../anonymize``
- ``/plugins/pixels-masker/instances/../modify``
- ``/plugins/pixels-masker/instances/../anonymize``


These are the additional fields that can be added to regular ``/modify`` and ``/anonymize`` payloads::

    {
        "MaskPixelData" : {
            "Regions": [
                {
                    "MaskType": "MeanFilter",
                    "FilterWidth": 20,
                    "RegionType" : "2D",             // area is defined by an area in pixel coordinates
                    "Origin": [150, 100],            // X, Y in pixel coordinates
                    "End": [400, 200],               // X, Y in pixel coordinates
                    "TargetSeries" : [               // the series the pixel mask applies to.  If empty -> applies to all series
                        "cd589a09-6e705e06-57997219-7812eb49-709873a9"
                    ],
                    "TargetInstances" : [            // the instances the pixel mask applies to.  If empty -> applies to all instances
                    ]
                },
                {
                    "MaskType": "Fill",
                    "FillValue": 0,
                    "RegionType" : "3D",                // area is defined by a volume in world coordinates
                    "Origin": [-150.5, -250.4, -811],   // X, Y, Z in World coordinates
                    "End": [148.4, 220.7, -955],        // X, Y, Z in World coordinates
                    "TargetSeries" : [                  // in this mode, no need to list the instances since the Z coordinate shall handle that !
                        "94df9100-3b476f5b-f4e8c381-d78c327f-a387bc7e"
                    ]
                }
            ]
        }
    }


Here's a sample REST API call to mask the pixels with a constant value in a 3D image::

    $ curl -X POST http://localhost:8042/plugins/pixels-masker/studies/321d3848-40c81c82-49f6f235-df6b1ec7-ed52f2fa/modify \
        --data-binary '{
                "Replace" : {
                    "StudyInstanceUID": "1.2.3", 
                    "StudyDescription": "Filled Area"
                },
                "Force": true,
                "MaskPixelData": {
                    "Regions": [{
                        "MaskType": "Fill",
                        "FillValue": 0,
                        "RegionType" : "3D",
                        "Origin": [-150.0, -300, -750],
                        "End": [150.0, -250, -1000]
                }]
                }
            }'

.. image:: ../images/pixels-masker-fill-face.png
           :align: center
           :width: 250px


And the same request to apply a mean filter on the same area::

    $ curl -X POST http://localhost:8042/plugins/pixels-masker/studies/321d3848-40c81c82-49f6f235-df6b1ec7-ed52f2fa/modify \
        --data-binary '{
                "Replace" : {
                    "StudyInstanceUID": "1.2.4", 
                    "StudyDescription": "Mean Filter"
                },
                "Force": true,
                "MaskPixelData": {
                    "Regions": [{
                        "MaskType": "MeanFilter",
                        "FilterWidth": 30,
                        "RegionType" : "3D",
                        "Origin": [-150.0, -300, -750],
                        "End": [150.0, -250, -1000]
                }]
                }
            }'

.. image:: ../images/pixels-masker-mean-filter-30-face.png
           :align: center
           :width: 250px

Here is a request to apply multiple 2D masks on an US series::

    $ curl -X POST http://localhost:8042/plugins/pixels-masker/series/4583e108-24b5e113-2be9a691-7183e535-902578c7/modify \
        --data-binary '{
                "Replace" : {
                    "StudyInstanceUID": "1.2.5", 
                    "StudyDescription": "Masked US"
                },
                "Force": true,
                "MaskPixelData": {
                    "Regions": [{
                        "MaskType": "MeanFilter",
                        "FilterWidth": 20,
                        "RegionType" : "2D",
                        "Origin": [0, 0],
                        "End": [400, 60]
                }, {
                        "MaskType": "Fill",
                        "FillValue": 100,
                        "RegionType" : "2D",
                        "Origin": [1080, 0],
                        "End": [1380, 60]
                }]
                }
            }'

.. image:: ../images/pixels-masker-us.png
           :align: center
           :width: 400px