ImageJ: Medidas e histogramas#
Show 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
.
Presione H para crear un Histograma
Este es el atajo para ejecutar
.
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?
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.
Medición de imágenes#
Cuando se utiliza
, 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.
Mostrar etiqueta que hará que el título de la imagen se incluya en la tabla de resultados ( Figura 13).
hace posible abordar ambas limitaciones. No solo proporciona muchas más medidas que se pueden seleccionar, sino que incluye una opción crucialLas 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.
Show 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)
Show 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 Resultados en su barra de menú de la que carecen otras tablas.
. Sin embargo, cualquier medición nueva que realice con el comando solo se agregará a la tabla oficial original. Esto también tiene una entrada adicionalElegir qué medidas seleccionar#
Algunas opciones dentro de
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
.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
.Show 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)
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ú
.Uno de esos comandos es binaria (black and white) que diferencia entre los píxeles que están dentro y fuera del ROI.
. Esto crea una nueva imagenShow 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)
Interpretación de “Crear máscara”
Desafortunadamente, cuando se usa Fondo negro está seleccionado dentro de .
no es completamente seguro si negro significa «adentro» o «afuera». Esto depende de siEsto 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
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:
El Administrador de ROI: para la mayoría de los ROI que desea poder editar y usar para mediciones
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
. La forma rápida es simplemente dibujar un ROI y presionar T.El comando adicional Medir dentro del administrador es como aplicar 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 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
)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»)
Para Figura 15, utilicé el Administrador de ROIs para crear un ROI con un agujero.
Para hacer esto en happy_cell.tif, puede
Dibujar un ROI alrededor de la célula completa y agregarlo al Administrador de ROIs
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
le permitirá ver qué píxeles están dentro y qué píxeles están fuera del ROI.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ú 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.
, donde puede comenzar dibujando un ROI y eligiendoTruco
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
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
. 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.
Show 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)
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).
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:
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.
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.
Usando la herramienta Pincel 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.
Elija
y vea si la anotación desaparece.Elija
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
).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
o simplemente presionar H, da como resultado que se genere un histograma en una nueva ventana. Al igual que con , 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
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.