Alcuni mesi fa, un cliente JMP ha contattato l'Assistenza tecnica JMP per informazioni sulla funzionalità dell'immagine in JMP 9 . In particolare, il cliente ha chiesto se esistesse una funzione che unisse due immagini insieme. Il supporto tecnico mi ha inoltrato questa domanda.
Avevo aggiunto alcune funzionalità di immagine in JMP 9, incluso un certo numero di funzioni che avrebbero manipolato una singola immagine. Ma non avevo aggiunto alcuna funzione che agisse su più immagini insieme. Ho pensato a questa richiesta e mi sono reso conto che sarebbe stato abbastanza facile farlo in JSL (JMP Scripting Language) utilizzando la funzionalità esistente.

Ho rapidamente messo insieme un semplice script JSL per unire due immagini insieme. La GUI consente all'utente di specificare due immagini e controllare il rapporto tra Image1 e Image2. Visualizza anche l'immagine miscelata risultante per l'utente.
I pulsanti, etichettati Image1 e Image2, fanno apparire un selettore di file e consentono all'utente di navigare tra le immagini da miscelare. Una volta selezionata un'immagine, l'utente ottiene una piccola vista dell'immagine. Il cursore definisce la proporzione di Immagine1 in Immagine2. Con il pollice alla sinistra del cursore, il risultato è 100% Image1. Un pollice centrato sul cursore produrrà il 50% di Image1 e il 50% di Image2.
L'ampia area di visualizzazione in alto mostra i risultati delle due immagini miscelate. L'immagine miscelata avrà le stesse dimensioni delle immagini originali e l'area di visualizzazione verrà ridimensionata di conseguenza. Attualmente, presumo che le due immagini da assemblare abbiano le stesse dimensioni. Alla fine, forse aggiungerò qualche logica per gestire il caso in cui sono diversi. O forse lascerò questo come esercizio per te!
La motivazione per volere originariamente questa funzionalità era confrontare immagini scattate prima e dopo un tornado. Un violento tornado EF5 aveva colpito Joplin, nel Missouri, e l'utente della JMP voleva confrontare queste immagini in modo misto. Ho cercato su Internet e ho trovato alcune immagini scattate in giro per Joplin sia prima che dopo il tornado. Le foto non erano esattamente allineate, ma erano abbastanza vicine da poter lavorare. Ho fatto alcune manipolazioni delle immagini al di fuori di JMP per farle allineare meglio e le ho ritagliate per avere le stesse dimensioni. Ecco un esempio di un set delle immagini prima e dopo con una miscela del 50%.

Puoi scaricare l'intero script JSL dal Scambio file JMP . Lo script è chiamato ImageBlend.jsl . Ma il codice più interessante nello script è l'effettiva funzione di fusione:
doBlend = espr (
{mat1R, mat1G, mat1B} = img1 << getPixels ( "Rgb" );
{mat2R, mat2G, mat2B} = img2 << getPixels ( "Rgb" );
mat3R = mat2R * per + mat1R * ( 1.0 - per);
mat3G = mat2G * per + mat1G * ( 1.0 - per);
mat3B = mat2B * per + mat1B * ( 1.0 - per);
img3 << setPixels ( "Rgb" , {mat3R, mat3G, mat3B});
imgBlendBox << reshow;
);
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à di immagine, controlla un altro post sul mio, Migliora la tua immagine con JMP 9 .
Se hai frequentato il JMP Discovery Summit 2011 questo potrebbe sembrarti tutto familiare. L'ho dimostrato come parte della mia presentazione, L'immagine non è tutto ma è sicuro che c'è qualcosa in JMP 9 , sebbene tu possa riconoscere che ho deciso di cambiare leggermente l'interfaccia.
Come sempre, fammi sapere cosa ne pensi.