Source code for porespy.filters.imagej._funcs

import logging
import numpy as np


logger = logging.getLogger(__name__)


[docs] def imagej_wrapper(im, plugin_name, path): # pragma: no cover r""" Apply ImageJ filters on 3D images. Parameters ---------- im : ndarray The 3D image of the porous material. plugin_name : str Name of the applied ImageJ plugin which could be one of these options: - Distance Transform Watershed 3D - Dilation 3D - Erosion 3D - Opening 3D - Closing 3D - Median 3D - Gaussian Blur 3D - Minimum 3D - Maximum 3D - Mean 3D path: str path to the Fiji application in the local directory Returns ------- ndarray Outputs a ndarray after applying the desired filter on the image. """ try: import imagej from scyjava import jimport except ModuleNotFoundError: msg = ("The pyimagej python bindings must be installed using conda" " install -c conda-forge paraview, however this may require" " using a virtualenv since conflicts with other packages are" " common. This is why it is not explicitly included as a" " dependency in porespy.") logger.critical(msg) i = False ij = imagej.init(path, headless=False) img = 255 * np.array(im.astype("uint8")) WindowManager = jimport("ij.WindowManager") ij.ui().show("Image", ij.py.to_java(img)) plugin = "Duplicate..." args = {"duplicate range": (1, im.shape[0])} ij.py.run_plugin(plugin, args) if "watershed" in plugin_name.lower(): ij.py.run_macro("""run("Distance Transform Watershed 3D","options=True");""") ij.py.run_macro("""run("3-3-2 RGB");""") elif "erosion" in plugin_name.lower(): plugin = "Morphological Filters (3D)" args = {"operation": "Erosion"} ij.py.run_plugin(plugin, args) elif "dilation" in plugin_name.lower(): plugin = "Morphological Filters (3D)" args = {"operation": "Dilation"} ij.py.run_plugin(plugin, args) elif "opening" in plugin_name.lower(): plugin = "Morphological Filters (3D)" args = {"operation": "Opening"} ij.py.run_plugin(plugin, args) elif "closing" in plugin_name.lower(): plugin = "Morphological Filters (3D)" args = {"operation": "Closing"} ij.py.run_plugin(plugin, args) elif "median" in plugin_name.lower(): plugin = "Median 3D..." args = {"options": "True"} ij.py.run_plugin(plugin, args) i = True elif "mean" in plugin_name.lower(): plugin = "Mean 3D..." args = {"options": "True"} ij.py.run_plugin(plugin, args) i = True elif "gaussian" in plugin_name.lower(): plugin = "Gaussian Blur 3D..." args = {"options": "True"} ij.py.run_plugin(plugin, args) i = True elif "maximum" in plugin_name.lower(): plugin = "Maximum 3D..." args = {"options": "True"} ij.py.run_plugin(plugin, args) i = True elif "minimum" in plugin_name.lower(): plugin = "Minimum 3D..." args = {"options": "True"} ij.py.run_plugin(plugin, args) i = True results = np.array(ij.py.from_java(WindowManager.getCurrentImage())) if i: results = np.moveaxis(results, -1, 0) ij.getContext().dispose() WindowManager.closeAllWindows() return results
[docs] def imagej_plugin(im, path, plugin_name, args=None): # pragma: no cover r""" Apply ImageJ filters on 3D images. In This function the plugin_name should have a same format as the plugin_name in the ImageJ. For example, to apply a Gaussian blur on a 3D image, the plugin_name should be 'Gaussian Blur 3D...' Parameters ---------- im : ndarray The 3D image of the porous material path: str Path to the Fiji application in the local directory plugin_name : str Name of the applied ImageJ plugin args : dict A dictionary that containes the required arguments of the applied plugin. For example, it could be {'options': 'True'} Returns ------- ndarray Outputs a ndarray after applying the desired filter on the image. """ try: import imagej from scyjava import jimport except ModuleNotFoundError: msg = ("The pyimagej python bindings must be installed using conda" " install -c conda-forge paraview, however this may require" " using a virtualenv since conflicts with other packages are" " common. This is why it is not explicitly included as a" " dependency in porespy.") logger.critical(msg) ij = imagej.init(path, headless=False) img = 255 * np.array(im.astype("uint8")) WindowManager = jimport('ij.WindowManager') ij.ui().show('Image', ij.py.to_java(img)) plugin = 'Duplicate...' arg = {'duplicate range': (1, im.shape[0])} ij.py.run_plugin(plugin, arg) ij.py.run_plugin(plugin_name, args) results = np.array(ij.py.from_java(WindowManager.getCurrentImage())) ij.getContext().dispose() WindowManager.closeAllWindows() return (results)