¿Cómo conectar ImageJ a python?

Estoy usando Python para diseñar un software, y el procesamiento de imágenes es uno de los pasos. Estoy usando ImageJ para darme cuenta de esto.

Ya que hay un intérprete Jython dentro de ImageJ, que puede abrirse dentro del software ImageJ, debe haber una manera de conectar ImageJ a Python y llamar a todas las funciones dentro de Python.

Me pregunto cómo puedo hacer eso para finalizar todo el procesamiento en Python en lugar de abrir el intérprete en ImageJ.

Existe este módulo https://github.com/imagej/imagej.py que proporciona una integración entre Python y ImageJ.

Con él puedes usar fácilmente ImageJ en Python. Aquí hay un script de ejemplo:

# Spin up ImageJ. import imagej ij = imagej.init('/Applications/Fiji.app') # Import an image with scikit-image. import skimage from skimage import io # NB: Blood vessel image from: https://www.fi.edu/heart/blood-vessels img = io.imread('http://sofes.miximages.com/python/General_EduRes_Heart_BloodVessels_0.jpg') import numpy as np img = np.mean(img, axis=2) # Invoke ImageJ's Frangi vesselness op. vessels = np.zeros(img.shape, dtype=img.dtype) import imglyb ij.op().filter().frangiVesselness(imglyb.to_imglib(vessels), imglyb.to_imglib(img), [1, 1], 20) 

El proyecto imglib2-imglyb permite acceder a arrays numpy desde Java con ImgLib2 y viceversa.

Algunos ejemplos ilustrativos se pueden encontrar en imglyb-examples .

Dependiendo del tamaño de la imagen, puede usar el conector javabridge desarrollado por el grupo del Perfilador de Células. Sin embargo, es notoriamente lento.

Si desea diseñar su propio enlace a ImageJ, puede usar jepp / jpype couple, pero será mucho trabajo.

La forma más fácil de hacerlo probablemente sería guardar su imagen de ImageJ en un archivo externo y escribir una macro que la guarde, comenzar su secuencia de comandos de procesamiento de Python personalizado y luego volver a abrir la imagen procesada.

EDITAR 2018-07-02: Ahora hay un módulo de ImageJ python que permite iniciar y usar ImageJ de Python. https://github.com/imagej/imagej.py

Me pregunto cómo puedo hacer eso para finalizar todo el procesamiento en Python en lugar de abrir el intérprete en ImageJ.

Puede escribir un script Jython con un encabezado especial que usa el iniciador de ImageJ para ejecutar, asegurándose de que todas las bibliotecas necesarias estén en la ruta de clase:

 #!/bin/sh ''''exec "$(dirname "$0")"/ImageJ.sh --jython "$0" "$@" # (call again with fiji)''' 

Pero este truco solo funciona en plataformas compatibles con POSIX (es decir, en el caso de Windows necesitaría CYGWIN).

Fiji incluye varios scripts de ejemplo como este: uno corto y dulce es screenshot.py .

Tenga en cuenta que Jython no puede llamar a las bibliotecas de Python que están respaldadas por código nativo (por ejemplo, scipy y numpy ). Pero hay un lenguaje de script CPython experimental, que utiliza el javabridge . Todavía es inmaduro, y aún no se ha distribuido con Fiji . Pero permite llamar código Python nativo, incluidas bibliotecas respaldadas por C / C ++, desde ImageJ . El plan es incluir este idioma en Fiji en el futuro. Mientras tanto, puedes crearlo tú mismo y soltar el archivo JAR en la carpeta de archivos jar de ImageJ. Y por supuesto, la retroalimentación es bienvenida.

Si desarrolla una solución más “llave en mano con Python” como desee, ¡sería increíble agregar una página al wiki de ImageJ al respecto!