Se hai frequentato il JMP Discovery Summit 2011 a Denver, in Colorado, a settembre, potresti aver partecipato alla mia presentazione, L'immagine non è tutto ma è sicuro che c'è qualcosa in JMP 9 . Ho parlato della funzionalità dell'immagine che è stata aggiunta JMP per la versione 9, e ho dimostrato alcuni esempi reali di come gli utenti JMP stiano utilizzando la funzionalità immagine per estrarre i dati contenuti nelle loro immagini. Ho condiviso alcuni script JMP Scripting Language (JSL) nella speranza che potessero essere avviati (puniti) gli sforzi per utilizzare la funzionalità dell'immagine. Per lo stesso motivo, ho deciso di mettere insieme un file JSL di frammenti di codice che dimostra anche la funzionalità dell'immagine. Quel file, chiamato ImageExamples.jsl , può essere trovato nel JMP Scambio di file . Prendiamo alcuni esempi da quel file e ne parliamo un po 'di più.
La prima cosa che potresti voler fare è ottenere un'immagine esistente in JMP. Per fare ciò, usa semplicemente il comando Nuova immagine.
img = nuova immagine ( "C: \ Users \ sasjvp Immagini \ Yellowstone08 \ IMG_0262.JPG \" ) ;
nuova finestra ( "Immagine originale" , img ) ;

Questo esempio legge un'immagine JPEG e la memorizza in JSL come oggetto immagine, chiamato img. NewImage () può leggere i file JPG, PNG, BMP, GIF e TIF.
Quando l'ho fatto per la prima volta, la finestra risultante era molto grande, a causa del fatto che l'immagine era così grande. Mi sono chiesto quali fossero effettivamente le dimensioni dell'immagine, quindi l'ho fatto:
{ w , h } = img << getSize () ;
Questo comando mi ha dato la larghezza e l'altezza dell'immagine, che era 3264 x 2448, un'immagine piuttosto grande. Quindi, per visualizzarlo in una dimensione più ragionevole, l'ho ridimensionato specificando una nuova larghezza e altezza per l'immagine.
img << setSize ( { w / 4 , h / 4 } ) ;
Ora l'immagine è 816 x 612 o un quarto della dimensione originale in ogni dimensione. Si noti che la larghezza e l'altezza vengono passate come un elenco, avvolgendoli tra parentesi graffe.
Ora voglio manipolare l'immagine, ma voglio conservare la versione originale. Quindi creerò una copia della mia immagine usando NewImage ().
img2 = nuova immagine ( img ) ;
Questo crea una copia della mia immagine originale come seconda immagine, chiamata img2.
La prossima cosa che voglio fare è ottenere i valori dei pixel dell'immagine. Poiché la mia immagine è un'immagine a colori, ogni pixel è definito in termini di tre componenti colore: rosso, verde e blu. I dati dei pixel vengono restituiti come una matrice per ogni componente di colore che chiedo.
{ r , g , B } = img2 << getPixels ( "Rgb" ) ;
In questo caso, otterrò tre matrici. Se la mia immagine avesse trasparenza, potrei chiedere quattro matrici specificando "rgba". Posso anche chiedere un solo componente di colore semplicemente specificando il componente che voglio, ad esempio "g" per il componente verde. Ogni matrice rappresenta i valori dei colori dei pixel nello spazio colore normalizzato, il che significa che i valori sono compresi tra 0.0 e 1.0 inclusi.
La cosa bella di ottenere i valori dei pixel come matrici è che ora posso fare matematica matematica sui miei pixel. Se volessi creare una versione in scala di grigio della mia immagine, potrei farlo in modo molto semplice con la seguente formula.
io = .30 * r + .59 * g + .11 * B ;
Questa è la stessa formula che una TV userebbe per convertire uno spettacolo di colori in bianco e nero. Se sei vecchio come me, potresti ricordare la televisione in bianco e nero, che non era solo in bianco e nero, ma includeva una gamma di grigio tra il bianco e il nero. Questa formula combina il 30% del mio componente rosso con il 59% del mio componente verde e l'11% del mio componente blu. Questo calcola un valore di intensità per la mia scala di grigi. Ora posso sostituire le componenti cromatiche originali di rosso, verde e blu con i valori di intensità della scala di grigi per produrre un'immagine in scala di grigi.
img2 << setPixels ( "Rgb" , { io , io , io } ) ;
Ecco il risultato.

Poiché JMP supporta Matrix Matem in JSL, non è necessario attraversare l'immagine e manipolare ciascun pixel singolarmente. Possiamo applicare questa formula all'intera immagine in una sola volta, che è allo stesso tempo comoda ed efficiente.

Ovviamente, la vera forza di JMP è la sua capacità di fare analisi statistiche e data discovery. Per fare questo, abbiamo bisogno che i dati siano nella forma di una tabella di dati. Quindi leggiamo un'immagine, estraiamo i dati dei pixel e creiamo una tabella di dati da essa.
Diamo un'occhiata a un'immagine presa da una risonanza magnetica. Possiamo usare il comando NewImage () come prima per leggere l'immagine in JMP. Possiamo anche usare il comando getPixels () come prima, tranne per il fatto che questa immagine è già un'immagine in scala di grigi, quindi dobbiamo solo chiedere un componente di colore. Il primo componente è ancora definito come componente "r". Una volta ottenuti i valori dei pixel, possiamo creare la tabella dei dati.
img = Nuova immagine ( "C: \ JMP \ mri.jpg" ) ;
{ pix } = img << getPixels ( "R" ) ;
dt = Nuova tabella ( "Pixel Data" ,
newColumn ( "valori" , imposta valori ( pix ))) ;
Distribuzione ( Distribuzione continua ( Colonna ( : valori ) , Scatola dei precedenti
Tracciare ( 0 ) ) ) ;
nuova finestra ( "Analizza dati immagine" , img ) ;
I valori dei pixel sono ora in una tabella dati come qualsiasi altro dato letto in JMP. Ciò significa che ora possiamo utilizzare le funzionalità di analisi statistica in JMP per analizzare i dati. Cosa usare a questo punto dipende da cosa sono i tuoi dati e da quali domande stai cercando di rispondere. In questo esempio, ho fatto una semplice distribuzione per mostrarmi qual è la portata e la frequenza dei miei dati.

Spero che a questo punto ti abbia dato abbastanza esempi per iniziare a utilizzare le immagini in JMP. Non dimenticare di scaricare lo script degli esempi, ImageExamples.jsl , dal JMP Scambio di file . Mostra più esempi di quelli che ho menzionato qui. Include comandi per rotazione, trasparenza e filtri, tra le altre cose. Fatemi sapere cosa ne pensate.
Manipolazione delle immagini in JMP con JSL ha scritto:
[...] Il comando, getPixels ("rgb"), restituisce ogni immagine come una raccolta di tre matrici - una per ogni componente di colore, rosso, verde e blu. Per unire le immagini, moltiplichiamo Immagine2 per la percentuale e quindi la aggiungiamo a Immagine1 moltiplicata per 1 meno la percentuale. Quindi lo impostiamo come immagine risultante, Image3. Questo è tutto ciò che c'è da fare. Per un'ulteriore spiegazione di getPixels (), oltre ad altre funzionalità dell'immagine, consulta un altro post del mio blog, Migliora l'immagine con JMP 9. [...]