ImageJ: Tamaño de píxel y dimensiones#
Show code cell content
%load_ext autoreload
%autoreload 2
# Default import
import sys
sys.path.append('../../../')
from helpers import *
import numpy as np
from matplotlib import pyplot as plt
Introducción#
Esta sección explorará los tamaños y dimensiones de los píxeles en ImageJ. En el camino, veremos cómo generar barras de escala y arreglar imágenes donde el tamaño del píxel o las dimensiones son incorrectas – al menos siempre que sepamos cuáles son los valores correctos.
Tamaño y propiedades de los píxeles#
Puedes ver el tamaño en píxeles de una imagen en ImageJ en Pixel width y Pixel height.
. Se proporcionan por separado como valores paraTambién hay un valor adicional, Voxel depth, que sólo es relevante para z-stacks; esto da el espaciado entre secciones en z.
Si la información sobre el tamaño de los píxeles no está disponible, los tamaños de los píxeles se dan como 1 píxel: lo cual no es muy informativo. De lo contrario, los tamaños de píxel se dan en las unidades mostradas en el diálogo de propiedades.
La anchura y la altura de los píxeles suelen ser las mismas. La profundidad del vóxel (en caso de ser relevante) suele ser diferente.
Una forma de comprobar si la información del tamaño de píxel está configurada para una imagen es utilizar
¿De qué otra forma puedes comprobarlo, incluso más fácilmente?
Consejo: La respuesta ya debería ser visible en Figura 43 y Figura 44.
El tamaño de la imagen se indica en la parte superior de cada ventana de imagen. Si se dispone de información sobre el tamaño de los píxeles, se indica en unidades calibradas. En caso contrario, se indica sólo en píxeles.
Tamaños y medidas de los píxeles#
Como hemos descrito antes, el tamaño del píxel influye en las medidas en ImageJ – pero las unidades no aparecen en ninguna parte de la Tabla de resultados. Además, una vez que una medida se añade a la Tabla de resultados es fija: no se actualizará automáticamente si los tamaños de píxel se cambian más tarde.
Por eso, hay que tener cuidado de comprobar el tamaño de los píxeles antes de realizar cualquier medición y asegurarse de que queda claro qué unidades se han utilizado.
Ajuste del tamaño de los píxeles#
Si falta información sobre el tamaño de los píxeles, pero sabes cuál debería ser, puedes introducir simplemente los valores necesarios de anchura y altura en el cuadro de diálogo Properties….
Escribir µm
Dependiendo de tu ordenador, escribir µm para las unidades puede ser complicado. Afortunadamente, escribir um también funciona – ImageJ convierte automáticamente um → µm.
Si no sabes cuál debe ser el tamaño de los píxeles, pero sí conoces la longitud de alguna estructura de tu imagen, entonces puedes
Dibujar una línea a lo largo de la estructura conocida con la herramienta de línea
Ejecutar
.
Esto rellenará automáticamente Distance in pixels basándose en la longitud de la línea. A continuación, puedes introducir la longitud física conocida y las unidades, y hacer click en OK. Deberías comprobar para confirmar que los valores se han actualizado correctamente.
Usando Set Scale…
Lo ideal sería utilizar macro).
con una diapositiva de calibración para establecer el tamaño de los píxeles de forma fiable. Los valores pueden entonces ser transferidos a otras imágenes adquiridas con los mismos ajustes usando (o unTen en cuenta que, si has dibujado una línea como se ha descrito anteriormente, el valor Distance in pixels se inicializa a partir de esa línea – así que no lo cambies. En su lugar, cambia los valores Known distance y Unit of length de acuerdo con la longitud física indicada por la línea.
Si la Unit of length debe ser µm pero tu teclado carece de µ, puedes escribir um en su lugar.
Mostrar una barra de escala#
Por lo general, es una buena práctica incluir una barra de escala en las figuras. Esto sólo tiene sentido si el tamaño de los píxeles es correcto en las propiedades de la imagen.
Puedes crear una barra de escala utilizando
.Existen varias opciones para ajustar el aspecto de la barra de escala. Una de las más importantes es la opción Overlay
de {guilabel}, ya que determina si la barra de escala se «incrusta» en la imagen (es decir, se modifican los valores de píxel) o si se añade como una ROI (texto) como parte de la superposición de la imagen.
Mi consejo es que añadas siempre la barra de escala como una superposición. Eso significa que puedes volver a quitarla o ajustar su aspecto. El único inconveniente es que, si guardas la imagen inmediatamente, puede que no aparezca en otro software. La solución es generar una imagen RGB que incluya la superposición como paso final antes de guardar, utilizando .
Pilas e hiperpilas#
Las imágenes 2D han existido desde el principio. Entonces ImageJ trabajaba con stacks (o pilas), que permitían una dimensión extra que podía incluir diferentes puntos temporales o z-slices – pero no ambos. Hoy en día, los hyperstacks (hiperpilas) son el derivado más flexible de los stacks, y pueden (actualmente) almacenar hasta 5 dimensiones sin que se confundan.
Flexibilidad de Hyperstack
Una hiperpila puede contener de 0 a 5 dimensiones, mientras que una pila sólo puede contener de 0 a 3. Entonces, ¿por qué preocuparse por las pilas?
La razón principal es la evolución de ImageJ a lo largo del tiempo. Algunos comandos – quizás originados en la era pre-hiperpilas – fueron escritos sólo para datos 2D o 3D. Intentar aplicarlos a imágenes 4D o 5D puede provocar un error, o simplemente producir resultados extraños.
En la práctica, es poco probable que esto suponga un problema hoy en día. Las hiperpilas existen desde hace tanto tiempo que todos los comandos importantes que trabajan con pilas también deberían manejar las hiperpilas correctamente. No obstante, es útil tener una perspectiva histórica para entender por qué ambos términos siguen existiendo en la interfaz de ImageJ.
También puede ayudar si te encuentras con algún plugin muy antiguo que fue escrito para pilas pero que no maneja hiperpilas correctamente.
Corrección de las dimensiones#
Al igual que el tamaño en píxeles, las dimensiones de una imagen pueden encontrarse en
.A veces, las dimensiones pueden ser incorrectas. Esto puede ocurrir, por ejemplo, si al abrir un archivo se interpretan erróneamente diferentes cortes z como puntos temporales, o no se detecta la presencia de varios canales. La interpretación errónea de las dimensiones no sólo puede afectar a la visualización de la imagen, sino también a algunos procesamientos y mediciones.
También es posible cambiar las dimensiones a través de
, pero creo que a veces puede ser poco fiable debido a la antigua distinción pila/hiperpila (es decir, no convierte una pila en hiperpila, y por lo tanto no muestra todos los deslizadores que se necesitan). Una mejor opción es utilizar para corregir las dimensiones.Algo terrible le ha ocurrido al archivo lost_dimensions.tif, de modo que se muestra como una pila 3D, cuando en realidad debería tener más dimensiones.
Inspeccionando el archivo, identifica cuántos canales, secciones de z y puntos de tiempo contenía originalmente, y ajústalos usando
para que se muestre correctamente. ¿Cuáles son las dimensiones correctas?lost_dimensions.tif debe contener 2 canales, 3 cortes z y 16 puntos temporales.
Las dimensiones están en el orden default (xyczt).
Gráficos y perfiles#
Un mayor número de dimensiones puede dificultar la visualización e interpretación de los datos. Reducir las dimensiones puede ayudar.
Line width.
se puede utilizar para generar un gráfico 1D de los valores de los píxeles a lo largo de una línea dentro de la imagen. Para utilizarlo, primero puedes dibujar una línea ROI . Por defecto, los valores de píxel que ocurren a lo largo de la línea se mostrarán en el gráfico, sin embargo es posible promediar múltiples píxeles perpendiculares a la línea si es necesario. Para ello, haz doble clic en la herramienta de línea y ajusta el valorTambién es posible aplicar
K a un rectángulo , en cuyo caso promediará los píxeles verticalmente (por defecto) u horizontalmente (si se pulsa la tecla Alt).Otra opción si tienes una pila o hiperpila es utilizar
para generar un perfil a través de las secciones. Esto esencialmente traza el valor medio dentro de cualquier ROI (o a través de toda la imagen) para cada corte o sección en la pila. Quizás inesperadamente, el mismo comando es capaz de generar un perfil a través de puntos de tiempo también; cuando es necesario, se muestra un diálogo para elegir la dimensión.En todos los casos, los gráficos de perfil contienen un botón Live
en {guilabel}. Esto significa que los datos del gráfico se actualizan a medida que se realizan cambios en la imagen, incluidos los ROI que se generan y se desplazan.
Crea un trazado de perfil a partir de cualquier imagen, dibujando una línea ROI y pulsando K.
En lo que respecta a ImageJ, el propio trazado del perfil es una imagen, aunque extraña. Esto significa que puedes utilizar
para comprobar el tamaño en píxeles del trazado del perfil.¿Qué notas en el tamaño de los píxeles?
Probablemente verás que la anchura y la altura de los píxeles son diferentes. De hecho, la anchura del píxel depende de la escala del eje x y la altura del píxel depende de la escala del eje y.
Esto puede resultar muy útil, ya que permite realizar mediciones dentro del propio trazado del perfil.
Si deseas medir una distancia a lo largo de los ejes x o y, puedes utilizar la herramienta de línea mientras pulsas Shift. Esto obliga a la línea a ser perfectamente horizontal o perfectamente vertical; sin Shift sería fácil dibujar una línea en una ligera diagonal que podría dar resultados incorrectos.
Visualización de las dimensiones#
Proyecciones en Z#
El comando para generar una z-proyección en ImageJ es . Esto permite diferentes tipos de proyección, como se muestra en Figura 50.
Show code cell content
fig = create_figure(figsize=(8, 4))
show_image('images/z-project-sum.png', title='Sum projection', pos=131)
show_image('images/z-project-max.png', title='Max projection', pos=132)
show_image('images/z-project-min.png', title='Min projection', pos=133)
glue_fig('fig_dimensions*z*project', fig)
Imagina que calculas la suma y la proyección máxima de una pila de 10 cortes que contiene un núcleo grande y enfocado. Cómo se vería afectada cada una de estas proyecciones si la pila contuviera:
4 cortes adicionales desenfocados (con valores de píxel distintos de cero)
varios píxeles atípicos muy brillantes, aislados y distribuidos aleatoriamente, con valores dos veces superiores a los que deberían tener (debido al ruido)
Los planos desenfocados adicionales tendrán un efecto sobre las proyecciones de suma: aumentarán todos los valores de píxel resultantes. Sin embargo, los planos adicionales tendrían efectos mínimos sobre las proyecciones máximas, ya que es poco probable que contengan valores más altos que los planos enfocados.
Sin embargo, las proyecciones máximas se verán muy afectadas por los valores atípicos brillantes: éstos seguramente aparecerán en el resultado con sus valores inalterados. Estos valores atípicos también influirían en una proyección de suma, pero de forma menos drástica, ya que cada píxel contendría la suma de 9 valores razonables y sólo 1 valor grande (a menos que, por mala suerte o por un detector dudoso, muchos valores atípicos se superpongan en la misma coordenada xy).
¿Qué ocurre si calculas una proyección máxima dos veces para la imagen 5D
?Con esto quiero decir que ejecutes
en la imagen original, y luego otra vez en el output de la primera proyección.Deberías acabar con una proyección z máxima, seguida de una proyección temporal.
Si hay una dimensión temporal pero no una dimensión z,
utilizará el tiempo en su lugar.Si existe una dimensión z pero quieres una proyección temporal de todos modos, puedes intentar usar cuidadosamente
o para cambiar temporalmente los nombres de las dimensiones y engañar a ImageJ para que haga lo que quieres.Vistas ortogonales#
El comando
permite generar [cortes ortogonales] interactivos (sec_dims_orthogonal) a partir de una pila de imágenes. Esto abre 2 ventanas adicionales, de modo que cuando se hace click en cualquier punto de la vista xy original, se muestran cortes transversales a través de ese punto desde cada dirección.Ten en cuenta que al visualizar los cortes ortogonales, los clicks en la imagen son interceptados. Esto dificulta la interacción normal con la imagen o la creación de nuevos ROIs. Si cierras cualquiera de las vistas adicionales, el comando se desactiva y puedes volver a trabajar con la imagen como antes.
Re-sección#
Si observas detenidamente los cortes ortogonales, verás que son imágenes RGB, aunque la pila original no sea RGB. También están bloqueadas para usar la LUT y los ajustes de brillo/contraste que estaban activos cuando se ejecutó el comando por primera vez.
Esto los convierte en un truco de visualización útil, pero no proporcionan una versión rotada de los datos para su análisis.
Si lo que deseas es rotar toda la pila de modo que puedas navegar a través de lo que son efectivamente secciones xz o yz y hacer lo que quieras con ellas, el comando que necesitas es
.Después de re-seccionar la imagen, puedes utilizar
para generar proyecciones z ortogonales.Re-sección e interpolación
Interpolar significa, en efecto, inventar nuevos valores de píxel plausibles para rellenar los huecos «entre» píxeles conocidos. En este caso, la interpolación tiene en cuenta el hecho de que la anchura, la altura y la profundidad del vóxel (espaciado z) rara vez son idénticas.
Teniendo esto en cuenta, si necesitas re-seccionar una imagen, te recomiendo que lo intentes con y sin seleccionar Avoid pixel interpolation, comprobando el tamaño del píxel en en ambos casos. Viendo lo que realmente sucede es probable que sea más informativo que tratar de darle sentido a cualquier explicación que yo podría tratar de dar.