Si asististe al JMP Cumbre Descubrimiento 2011 en Denver, Colorado, en septiembre, es posible que te hayas sentado en mi presentación, La imagen no lo es todo, pero seguro que es algo en JMP 9 . Hablé sobre la funcionalidad de imagen que se agregó a JMP para la versión 9, y demostré algunos ejemplos reales de cómo los usuarios de JMP están utilizando la funcionalidad de imagen para extraer los datos contenidos en sus imágenes. Compartí algunas secuencias de comandos de JMP Scripting Language (JSL) con la esperanza de que pudiera poner en marcha los esfuerzos para usar la funcionalidad de la imagen. Por ese mismo motivo, decidí armar un archivo JSL de fragmentos de código que también demuestra la funcionalidad de la imagen. Ese archivo, llamado ImageExamples.jsl , se puede encontrar en el JMP Intercambio de archivos . Saquemos algunos ejemplos de ese archivo y hablemos un poco más sobre ellos.
Lo primero que puede hacer es obtener una imagen existente en JMP. Para hacer esto, simplemente use el comando Nueva imagen.
img = nueva imagen ( "C: \ Users \ sasjvp \ Pictures \ Yellowstone08 \ IMG_0262.JPG" ) ;
nueva ventana ( "Imagen original" , img ) ;

Este ejemplo lee una imagen JPEG y la almacena en JSL como un objeto de imagen, llamado img. NewImage () puede leer archivos JPG, PNG, BMP, GIF y TIF.
La primera vez que hice esto, la ventana resultante era muy grande, debido al hecho de que la imagen era muy grande. Me pregunté cuáles eran realmente las dimensiones de la imagen, así que hice esto:
{ w , h } = img << obtener tamaño () ;
Este comando me dio el ancho y el alto de la imagen, que era 3264 x 2448, una imagen bastante grande. Entonces, para mostrarlo en un tamaño más razonable, lo reduje especificando un nuevo ancho y alto para la imagen.
img << setSize ( { w / 4 , h / 4 } ) ;
Ahora la imagen es de 816 x 612, o un cuarto del tamaño original en cada dimensión. Observe que el ancho y la altura se pasan como una lista, envolviéndolos entre corchetes.
Ahora quiero manipular la imagen, pero quiero conservar la versión original. Así que crearé una copia de mi imagen usando NewImage ().
img2 = nueva imagen ( img ) ;
Esto crea una copia de mi imagen original como una segunda imagen, llamada img2.
Lo siguiente que quiero hacer es obtener los valores de píxeles de la imagen. Como mi imagen es una imagen en color, cada píxel se define en términos de tres componentes de color: rojo, verde y azul. Los datos de píxeles se devuelven como una matriz para cada componente de color que solicito.
{ r , sol , segundo } = img2 << getPixels ( rgb ) ;
En este caso, obtendré tres matrices. Si mi imagen tuviera transparencia, podría pedir cuatro matrices especificando "rgba". También puedo pedir un solo componente de color simplemente especificando el componente que quiero, como "g" para el componente verde. Cada matriz representa los valores de color de píxel en el espacio de color normalizado, lo que significa que los valores están entre 0.0 y 1.0 inclusive.
Lo bueno de obtener los valores de píxeles como matrices es que ahora puedo hacer matrices de matriz en mis píxeles. Si quisiera crear una versión en escala de grises de mi imagen, podría hacerlo de manera muy simple con la siguiente fórmula.
yo = .30 * r + .59 * sol + .11 * segundo ;
Esta es la misma fórmula que un televisor usaría para convertir un espectáculo de color en blanco y negro. Si eres tan viejo como yo, quizás recuerdes la televisión en blanco y negro, que no era solo en blanco y negro, sino que incluía un rango de gris entre el blanco y el negro. Esta fórmula combina el 30% de mi componente rojo con el 59% de mi componente verde y el 11% de mi componente azul. Esto calcula un valor de intensidad para mi escala de grises. Ahora puedo reemplazar los componentes de color originales de rojo, verde y azul con los valores de intensidad de escala de grises para producir una imagen en escala de grises.
img2 << setPixels ( rgb , { yo , yo , yo } ) ;
Aquí está el resultado.

Ya que JMP admite matrices matemáticas en JSL, no tenemos que atravesar la imagen y manipular cada píxel individualmente. Podemos aplicar esta fórmula a toda la imagen a la vez, lo cual es conveniente y eficiente.

Por supuesto, la verdadera fortaleza de JMP es su capacidad para realizar análisis estadísticos y descubrir datos. Para hacer esto, necesitamos que los datos estén en forma de una tabla de datos. Así que vamos a leer en una imagen, extraer los datos de píxeles y crear una tabla de datos a partir de ella.
Veamos una imagen tomada de una resonancia magnética. Podemos usar el comando NewImage () como antes para leer la imagen en JMP. También podemos usar el comando getPixels () como antes, excepto que esta imagen ya es una imagen en escala de grises, por lo que solo necesitamos pedir un componente de color. El primer componente todavía se conoce como el componente "r". Una vez que tengamos los valores de píxel podemos crear la tabla de datos.
img = Nueva imagen ( "C: \ JMP \ mri.jpg" ) ;
{ pix } = img << getPixels ( "r" ) ;
dt = Nueva mesa ( "Datos de píxeles" ,
nuevoColumna ( "valores" , establecer valores ( pix ))) ;
Distribución ( Distribución continua ( Columna ( : valores ) , Caja atípica
Trama ( 0 ) ) ) ;
nueva ventana ( "Analizar datos de imagen" , img ) ;
Los valores de píxel ahora están en una tabla de datos al igual que cualquier otro dato leído en JMP. Esto significa que ahora podemos usar las funciones de análisis estadístico en JMP para analizar los datos. Lo que debe usar en este punto depende de cuáles sean sus datos y de las preguntas que intenta responder. En este ejemplo, hice una distribución simple para mostrarme cuál es el rango y la frecuencia de mis datos.

Espero que para este punto, le haya dado suficientes ejemplos para que pueda comenzar a usar imágenes en JMP. No te olvides de descargar el script de ejemplos, ImageExamples.jsl , desde el JMP Intercambio de archivos . Muestra más ejemplos de los que he mencionado aquí. Incluye comandos para rotación, transparencia y filtros, entre otras cosas. Déjame saber lo que piensas.
Manipulación de imágenes en JMP utilizando JSL. escribió:
[...] El comando, getPixels ("rgb"), devuelve cada imagen como una colección de tres matrices, una para cada componente de color, rojo, verde y azul. Para combinar las imágenes, multiplicamos Image2 por el porcentaje y luego lo agregamos a Image1 multiplicado por 1 menos el porcentaje. Luego lo configuramos como la imagen resultante, Image3. Eso es todo al respecto. Para obtener una explicación más detallada de getPixels (), así como otras funciones de imagen, consulte otra publicación de mi blog, Mejore su imagen con JMP 9. [...]