ImageJ: Medidas e histogramas#

Hide code cell content
%load_ext autoreload
%autoreload 2

# Default imports
import sys
sys.path.append('../../../')
from helpers import *
from matplotlib import pyplot as plt
from myst_nb import glue
import numpy as np
from scipy import ndimage

Introducción#

ImageJ hace que generar histogramas y medidas básicas sea extremadamente fácil:

  • Presione M para hacer Mediciones

    • Este es el atajo para ejecutar Analizar ‣ Medir.

  • Presione H para crear un Histograma

    • Este es el atajo para ejecutar Analizar ‣ Histograma.

Suponiendo que su imagen es 2D y no hay un ROI activo (exploraremos dimensions y ROIs más adelante), ambos comandos usarán todos los píxeles de la imagen.

Exploraremos cómo personalizar las regiones que se miden y exactamente qué mediciones se realizan más adelante en esta sección, pero ya debería ser posible responder las siguientes preguntas.

similar_1.tif, similar_2.tif, similar_3.tif y similar_4.tif son todos, bueno, similares. Sin embargo, sólo dos contienen valores de píxeles idénticos.

¿Qué dos imágenes contienen los mismos valores?

lanzar ImageJ.JS

Sólo similar_1.tif y similar_3.tif pueden contener los mismos valores. Una forma sencilla de determinar esto es calcular la media (promedio) de todos los píxeles en cada una de las imágenes. Sólo esas dos imágenes comparten el mismo valor medio.

disguise_matching.tif ha perdido a su pareja.

¿Cuál de las siguientes tres imágenes tiene los mismos valores de píxeles que disguise_matching.tif?

  • disguised_1.tif

  • disguised_2.tif

  • disguised_3.tif

lanzar ImageJ.JS

disguised_3.tif es la imagen correspondiente.

Medición de imágenes#

Cuando se utiliza Analizar ‣ Medir, las mediciones se agregan a una tabla de resultados.

Por default, se proporcionan los valores de píxeles medio, mínimo y máximo, junto con el área de la imagen… y eso es todo. No es mucho.

Además, si realiza varias mediciones, se agregan a la misma tabla de resultados, sin ningún identificador. Esto es especialmente confuso si tiene varias imágenes abiertas al mismo tiempo y no tiene idea de qué fila de la tabla de resultados corresponde a las mediciones de cada imagen.

Analizar ‣ Establecer medidas… hace posible abordar ambas limitaciones. No solo proporciona muchas más medidas que se pueden seleccionar, sino que incluye una opción crucial Mostrar etiqueta que hará que el título de la imagen se incluya en la tabla de resultados ( Figura 13).

Las unidades de medida importan, ¡pero no se muestran!

La tabla de resultados no incluye unidades de medida, aunque éstas son imprescindibles. Ver un área de 10 podría significar 10 píxeles2, o 10 µm 2… o algo completamente distinto.

Consulte Tamaño y dimensiones de píxeles para obtener más información sobre por qué eso es importante para cualquier medida de tamaño (área, longitud, etc.) y cómo verificar las unidades.

Hide code cell content
fig = create_figure(figsize=(7, 4))
plt.subplot(1, 3, 1)
show_image('images/measure-image.png', title='Image')
plt.subplot(1, 3, 2)
show_image('images/measure-set.png', title='Set Measurements dialog')
plt.subplot(1, 3, 3)
show_image('images/measure-results.png', title='Results table')
plt.tight_layout()
glue_fig('fig_measure_results', fig)
../../../_images/51dc0d37736d4678f3a66995db775ccaa8f253a55b8c163c987837735341dc0f.png

Figura 13 Las medidas realizadas en una imagen se agregan a una tabla de resultados. La elección de las medidas a realizar se puede cambiar usando el comando Analizar ‣ Establecer medidas….#

Hide code cell content
fig = create_figure(figsize=(8, 4))
show_image('images/measure-results.png', title="'Official' results table", pos=121)
show_image('images/measure-unofficial.png', title="'Unofficial' results table", pos=122)
glue_fig('fig_measure_tables', fig)

La “Tabla Unica de Resultados Verdaderos” y sus impostores

Una pequeña idiosincrasia a tener en cuenta es que, en lo que respecta a ImageJ, solo hay una tabla de resultados «oficial»: la que tiene el título Resultados .

Se pueden crear tablas diferentes y de apariencia similar mediante diferentes comandos o duplicando una tabla de resultados existente con Archivo ‣ Duplicar…. Sin embargo, cualquier medición nueva que realice con el comando Medir solo se agregará a la tabla oficial original. Esto también tiene una entrada adicional Resultados en su barra de menú de la que carecen otras tablas.

../../../_images/31a31b272f849266e2cfb9ede483654786049dacbfb38dd36b9d57424df1621f.png

Elegir qué medidas seleccionar#

Algunas opciones dentro de Analizar ‣ Establecer medidas… son tan universalmente útiles que casi siempre deberían estar configuradas. Por el contrario, algunas opciones son manifiestamente confusas y peligrosas y deberían usarse rara vez, o no usarse en absoluto.

Opciones para seleccionar siempre:

  • Área, Valor de gris medio, Desviación estándar, Valor de gris mínimo y máximo: valores resumidos básicos

  • Mostrar etiqueta: incluye el título de la imagen

  • Posición de serie z: incluye el plano 2D que se ha medido en una imagen con más dimensiones.

Opciones para evitar:

  • Limitar al umbral: restringe la región que se mide según cualquier umbral que se ha configurado; no haga esto de forma rutinaria; en vez de esto, convierta su umbral en un ROI y utilícelo en vez de la opción “limitar al umbral”.

  • Redireccionar a: mide una imagen diferente de la seleccionada. Suena raro, pero está pensado para casos en los que tienes dos imágenes correspondientes; uno en el que puede identificar una región para medir y otro que contiene los valores de píxeles que debe medir.

Las dos opciones que creo que debería evitar pueden resultar en medidas inesperadas si no sabe (o ha olvidado) que alguna de ellas fue seleccionada en Analizar – > Establecer medidas….

Afortunadamente, no son realmente necesarias si domina el arte de generar, gestionar y transferir regiones de interés entre imágenes.

Regiones de interés#

Las regiones de interés (ROI) se pueden utilizar para definir partes específicas de una imagen que deben procesarse o medirse de forma independiente. Solo los píxeles dentro de cualquier ROI que dibujemos se incluirán en los cálculos cuando ejecutemos Analizar ‣ Medir.

Hide code cell content
fig = create_figure(figsize=(3, 3.5))
show_image('images/roi-toolbar.png', title="Tool bar", pos=211)
show_image('images/roi-glasses.png', title="'Image + ROI", pos=212)
plt.tight_layout()
glue_fig('fig_rois_drawing', fig)
../../../_images/6cc91583c13109c9ddeded56ef5a7ec9409b842b314afb73aee5611e7824835b.png

Figura 14 Las herramientas de dibujo de ROI se encuentran en el lado izquierdo de la barra de herramientas de ImageJ (A). El ROI en (B) se creó dibujando un ROI rectangular y dos circulares, manteniendo presionada la tecla Shift entre cada uno para que las regiones se combinaran.#

Se pueden dibujar ROIs de diferentes tipos (por ejemplo, rectángulos, círculos, líneas, puntos, polígonos, formas a mano alzada) usando los comandos en la barra de herramientas (Figura 14), y son invariablemente 2D. Hacer click con el botón derecho en las herramientas a menudo proporciona acceso a herramientas relacionadas, mientras que hacer doble clic puede brindar opciones adicionales. Al dibujar una ROI, presionar Shift o Control antes de soltar el botón del mouse agrega la ROI que se está dibujando a cualquier ROI existente ya presente.

De manera algo confusa, los ROI a veces se denominan selecciones en ImageJ. Es por eso que algunos comandos adicionales para crear o ajustar ROI aparecen en el submenú Editar ‣ Selección.

Uno de esos comandos es Editar ‣ Selección ‣ Crear máscara. Esto crea una nueva imagen binaria (black and white) que diferencia entre los píxeles que están dentro y fuera del ROI.

Hide code cell content
fig = create_figure(figsize=(6, 4))
show_image('images/binary-happy-cell.png', title="Image with ROI", pos=121)
show_image('images/binary-happy-mask.png', title="Binary mask from ROI", pos=122)
#plt.tight_layout()
glue_fig('fig_rois_mask', fig)
../../../_images/f932c1e3f44cd84004dd9ddbab33dce33b1b798ae951c41ecc5a9b5764269ccd.png

Figura 15 Una ROI que representa un área generalmente se representa mediante líneas amarillas dibujadas en una imagen, pero a veces no está claro qué píxeles están dentro o fuera de la ROI. Editar ‣ Selección ‣ Crear máscara puede ayudar a aclarar esto.#

../../../_images/binary-options.png

Figura 16 Proceso ‣ Binario ‣ Opciones…#

Interpretación de “Crear máscara”

Desafortunadamente, cuando se usa Editar ‣ Selección ‣ Crear Máscara no es completamente seguro si negro significa «adentro» o «afuera». Esto depende de si Fondo negro está seleccionado dentro de Proceso ‣ Binario ‣ Opciones… .

Esto normalmente no importa en la práctica, porque tiende a quedar claro a partir del contexto; Las ROI suelen cubrir una pequeña región de la imagen, por lo que el color de fondo es el que se ve en la mayoría de los píxeles.

Una excepción a esto es si se ha utilizado Editar ‣ Selección ‣ Hacer Inverso para invertir una ROI para representar todos los píxeles de fondo del original, con el primer plano eliminado.

No sobreestime la precisión de las mediciones.

Aunque ImageJ puede medir con mucha exactitud cualquier región que se le indique medir dentro de una imagen, tenga en cuenta que en imágenes de microscopía óptica, cualquier medida de tamaño no corresponderá exactamente a los tamaños de estructuras en la vida real. Esto es especialmente cierto en escalas muy pequeñas (cientos de nanómetros o menos), por razones relacionadas con la resolución que se describirán en Desenfoque y Función de dispersión de punto (Point Spread Function o PSF por sus siglas en inglés).

Trabajar con múltiples ROI#

Normalmente, solo una ROI puede estar «activa» en ImageJ (e.g. afectar las mediciones) a la vez. Si necesita controlar múltiples ROIs, hay dos lugares donde puede almacenarlos. Estos difieren según su finalidad:

  1. El Administrador de ROI: para la mayoría de los ROI que desea poder editar y usar para mediciones

  2. La superposición de imágenes: para las regiones de interés que solo desea mostrar

El administrador de ROIs#

ROI Manager de ImageJ proporciona una manera conveniente de almacenar múltiples ROI en una lista, lo que le permite acceder a ellos, editarlos y medirlos fácilmente.

La forma lenta de abrir el Administrador de ROI es elegir Analizar ‣ Herramientas ‣ Administrador de ROI…. La forma rápida es simplemente dibujar un ROI y presionar T.

El comando adicional Medir dentro del administrador es como aplicar Analizar ‣ Medir a cada ROI por turno. Si desea mostrar todas las ROIs simultáneamente, puede seleccionar la opción Mostrar todo [^fn_1].

Debido a que las ROIs en el Administrador de ROIs se representan independientemente de la imagen en la que se definieron, puede crear una ROI en una imagen, agregarla al administrador de ROI, seleccionar una imagen diferente y luego hacer clic en la ROI en el Administrador de ROIs para colocarla en la segunda imagen. Esto nos permite transferir una ROI de una imagen a otra.

Las mediciones realizadas desde el Administrador de ROIs siempre utilizan la imagen seleccionada más recientemente, así que tenga cuidado si tiene varias imágenes abiertas al mismo tiempo. Esta es otra razón por la que elegir Mostrar etiqueta en Analizar ‣ Establecer medidas… es tan importante.

Transferir ROI individuales

Una forma más rápida de transferir un único ROI entre imágenes sin usar el Administrador de ROIs es hacer clic en la segunda imagen y presionar Shift+E (el atajo para Editar ‣ Selección ‣ Restaurar selección)

Uso experto del ROI con el ROI Manager

Con el Administrador de ROIs, puede crear sus ROI en formas más complejas: agregando o eliminando otras ROIs.

Para hacer esto, primero agregue al administrador las principales ROI con las que desea trabajar. Luego selecciónalas y elija entre las opciones:

  • AND: genere un ROI que contenga solo las regiones donde los ROI seleccionados se superponen

  • OR: crea un único ROI compuesto combinando todos los ROI seleccionados

  • XOR: genera un único ROI que contenga todos los ROI seleccionados, excepto los lugares donde se superponen («OR eXclusivo»)

../../../_images/binary-happy-roi-manager.png

Figura 17 El Administrador de ROIs con dos ROIs#

Para Figura 15, utilicé el Administrador de ROIs para crear un ROI con un agujero.

Para hacer esto en happy_cell.tif, puede

  1. Dibujar un ROI alrededor de la célula completa y agregarlo al Administrador de ROIs

  2. Dibujar un segundo ROI alrededor del núcleo y agregarlo al Administrador de ROIs

Luego puede seleccionar ambas ROIs y usar una de las operaciones combinadas: AND, OR , XOR – para restar el ROI del núcleo del ROI de la célula. El resultado final es una ROI que representa el citoplasma, sin el núcleo.

¿Qué operación combinada necesita para lograr esto?

Consejo: Recuerde que Editar ‣ Selección ‣ Crear máscara le permitirá ver qué píxeles están dentro y qué píxeles están fuera del ROI.

lanzar ImageJ.JS

XOR (“OR exclusivo”) proporciona un ROI que contiene píxeles que están dentro de la célula O dentro del núcleo, pero NO ambos.

Superposiciones#

Las superposiciones también contienen una lista de ROIs que se muestran simultáneamente en la imagen. Sin embargo, a diferencia del Administrador de ROIs, las ROIs almacenadas en una superposición generalmente no afectan el comando Medir.

Por lo tanto, las superposiciones son adecuadas para almacenar anotaciones con fines de visualización. Imagine que existen en capas separadas, de modo que agregar y eliminar la superposición no estropea los valores de píxeles subyacentes (Figura 18).

Los comandos principales para trabajar con superposiciones se encuentran en el submenú Imagen ‣ Superposición ‣, donde puede comenzar dibujando un ROI y eligiendo Agregar selección (o simplemente presione B). El mismo submenú también proporciona comandos para transferir ROI entre la superposición y el Administrador de ROIs.

Truco

Puede “reactivar” una ROI en una superposición haciendo click en él con la tecla Alt presionada (siempre que se seleccione una herramienta de ROI adecuada) y luego editarla o reubicarla.

Tenga en cuenta que si una ROI en una superposición se ha «reactivado» de esta manera, entonces influye en las mediciones.

Guardar ROIs#

Las ROIs individuales, actualmente activas en una imagen, se pueden guardar simplemente eligiendo Archivo ‣ Guardar como ‣ Selección…

El Administrador de ROIs también tiene un comando Guardar… (bajo Más), que guardará todas las ROIs que se encuentren seleccionadas en el administrador (o, si no se selecciona ninguna, todas).

Las superposiciones se fijan para imágenes específicas y no tienen su propio comando especial para guardar, pero de todos modos se incluirán si guarda la imagen como un archivo TIFF (el formato predeterminado de ImageJ). Cualquier ROI actualmente activo también se guardará en un TIFF.

Todo esto está bien si trabaja sólo en ImageJ o Fiji, pero desafortunadamente, si intenta ver sus ROIs en otro software, es muy poco probable que funcione correctamente. El formato ROI es específico de ImageJ.

La forma de solucionar esto es utilizar el comando Imagen ‣ Superponer ‣ Aplanar. Esto crea una copia RGB de la imagen en la que se han cambiado los valores de píxeles de manera que cualquier ROI o superposición aparezca cada vez que abra la imagen en otro lugar. Por lo tanto, es posible que desee utilizar este comando al crear figuras o presentaciones, pero no desea aplicar posteriormente su análisis a la imagen que ha aplanado; utilice siempre el original.

Para obtener más detalles sobre el impacto de convertir una imagen a RGB, consulte Canales y colores.

Hide code cell content
fig = create_figure(figsize=(8, 4))
show_image('images/rois_and_overlays.png', pos=121)
show_image('images/rois_flattened.png', pos=122)
glue_fig('fig_rois_flatten', fig)
../../../_images/f0aefb64597a76ba5b89260094972fb14d97210937098974a4c9cb33ab59dace.png

Figura 18 Las ROIs y las superposiciones se muestran encima de las imágenes y, por lo tanto, se pueden eliminar fácilmente sin tener ningún efecto sobre los valores de los píxeles. Las imágenes aplanadas pueden aparecer iguales en la pantalla, pero invariablemente son RGB (ver Canales y colores) y sus valores de píxeles han cambiado permanentemente para mostrar cualquier anotación.#

Abra las imágenes Annotated_Cyclists_1.tif y Annotated_Cyclists_2.tif, que representan las 3 características principales de los ciclistas que encontré más desconcertantes cuando fui peatón en Heidelberg.

Inicialmente, las imágenes deberían verse iguales, pero en una, el texto está superpuesto, mientras que en la otra la imagen se ha aplanado. ¿Cual es cual? Intente pensar en varias formas de investigar esto.

Consejo: Hacer Zoom puede ser útil. También podría ser posible buscar en los menús comandos relacionados con la superposición (con la ayuda de L).

lanzar ImageJ.JS

Annotated_Cyclists_1.tif es el que tiene la superposición.

Cinco formas de determinar si una anotación es una superposición o no:

  1. Haga Zoom en la región que contiene la anotación. Si se vuelve «en bloques», es decir, formado por píxeles (o pixelada), no es una superposición. Si permanece liso, entonces es una superposición.

  2. Mueva el cursor sobre la región donde aparece la anotación y observe los valores de píxeles. Si los valores son todos iguales donde está presente la anotación, pero diferentes en otros lugares, entonces es poco probable que se trate de una superposición: la anotación está influyendo en los valores de los píxeles.

  3. Usando la herramienta Pincel ../../../_images/brush.png de la barra de herramientas, intente poner algún otro color donde aparece la anotación. Si la anotación permanece visible encima de donde dibujó, debe estar en una superposición.

  4. Elija Imagen ‣ Superposición ‣ Ocultar superposición y vea si la anotación desaparece.

  5. Elija Imagen ‣ Superposición ‣ Al Administrador de ROI y vea si sucede algo.

Utilizando la imagen del ciclista que contiene la superposición de la práctica anterior, reorganice las anotaciones para que cada una se ubique junto a diferentes ciclistas.

Puede hacer esto eliminando la superposición y comenzando de nuevo, pero hay otras posibilidades más rápidas (usando una técnica mencionada anteriormente, o la Imagen ‣ Superposición ‣ Al comando ROI Manager).

lanzar ImageJ.JS

Haga clic en la anotación mientras mantiene presionada la tecla Alt para darle vida y poder moverla nuevamente. Esto sólo funciona si se seleccionan determinadas herramientas, p. Rectangle o Text, porque algunas otras herramientas tienen funciones más primordiales, como hacer Zoom o desplazarse.

Generando histogramas#

Crear un histograma en ImageJ, a través de Analyze ‣ Histogram o simplemente presionar H, da como resultado que se genere un histograma en una nueva ventana. Al igual que con Analizar ‣ Medir, esto utilizará un ROI si está disponible; de lo contrario utilizará la imagen completa.

Se muestra un histograma de ImageJ encima de algunas estadísticas resumidas básicas y cuatro botones intrigantes:

  • List: para enumerar los contenedores reales y las cuantificaciones asociadas con el histograma

  • Copiar: para copiar la lista anterior al portapapeles

  • Log – para cambiar el eje y para mostrar el registro de las cuantificaciones de cada contenedor; esto es útil para distinguir entre cuantificaciones que son muy pequeñas

  • Live: para hacer que el histograma responda a cualquier cosa que haga con la imagen, incluyendo cambios a las LUT o a cualquier ROI

../../../_images/measure-imagej-histogram.png

Figura 19 Una imagen con su histograma en ImageJ.#

Un histograma de una imagen… y una imagen de un histograma

Una característica ligeramente extraña de los histogramas de ImageJ es que el histograma también es una imagen. Eso significa que puede dibujar ROIs e incluso realizar mediciones al respecto. Revisaremos esto en Tamaño y dimensiones de píxeles.