Apri i file di immagine (jpg), esegui l'analisi e passa all'immagine successivaSono molto interessato all'uso di JMP per eseguire l'elaborazione e l'analisi automatiche delle immagini e ho uno script (molto basato sul componente aggiuntivo John Pontes - e informazioni raccolte dal suo eccellente blog John Ponte, autore del blog JMP ) che posso eseguire su un'immagine alla volta su immagini, ma quello che voglio davvero fare dopo è creare uno script "loop" che faccia quanto segue
- conta il numero di file .jpg in una directory.
- uno per uno apre un'immagine, mette le informazioni disponibili (sto usando il componente aggiuntivo John Pontes Image Analyzer e lo script per questo) in una tabella di dati
- esegue un'analisi di base (media di colonne e righe ecc.)
- lo salva con il nome del file jpg
- chiude i file e passa all'immagine successiva.
Ho una serie di piccoli problemi con questo, ma i principali sono quando uso quanto segue
Per ( io = 1 , io <= N articoli ( File ) , io ++,
Se ( Finisce con ( File [ io ] , ".jpg" ) ,
Aprire ( File [ io ] ) ;
);
l'apertura (file ); apre i file jpg in un altro programma (prog predefinito che non voglio cambiare). Come faccio a farlo in modo che si apra in JMP usando quanto segue (o qualcos'altro se è meglio)
img = Nuova immagine ( "il nomefiledel.jpg" ) ;
w = Nuova finestra ( "Immagine" , img) ;
Posso quindi eseguire l'analisi e chiudere tutto e tornare indietro fino a quando tutte le immagini non sono state analizzate.
[*Modifica nel post originale del membro dello staff sseligman. Seconda parte della domanda dell'utente aggiunta qui al post originale.]
Molte scuse, non sono stato abbastanza chiaro nel mio post originale. Quello che voglio fare è inserire le informazioni sui pixel in una tabella di dati, non nell'immagine originale stessa.
questo è, in effetti, automatizzare il ImageToDatatable JSL script che è già stato scritto ma passa attraverso ogni immagine all'interno di una cartella e salva la tabella di dati risultante con l'eventuale analisi risultante dei pixel nella stessa cartella.
le coordinate x e y insieme a RGB, I e HSL sono sufficienti per eseguire qualsiasi analisi di cui ho bisogno. Ho allegato una tabella di dati di esempio su cui posso eseguire l'analisi, ho anche allegato l'immagine originale da cui sono stati presi questi dati, ne ho alcune migliaia che devo esaminare, quindi farli uno alla volta sarebbe quasi impossibile.
mi scuso ancora per la cattiva formulazione e la mancanza di chiarezza nel post originale.
Saluti
Davide
Re: Apri file immagine (jpg), esegui analisi e passa all'immagine successivaConsolidare due risposte a questo post come soluzione.
Parte 1 dello staff @Craige_Hales :
path = "$desktop/temp/";
files = Files In Directory( path );
For( ifile = 1, ifile <= N Items( files ), ifile++,
filename = files[ifile];
If( Right( filename, 4 ) == ".jpg",
pic = Open( path || filename, "jpg" );
jslcolor = pic << getpixels();
{red, green, blue} = Color To RGB( jslcolor );
{hue, lightness, saturation} = Color To HLS( jslcolor );
nr = N Rows( jslcolor );
nc = N Cols( jslcolor );
dt = New Table( Substr( filename, 1, Length( filename ) - 4 ),
addrows( nr * nc ),
New Column( "x" ),
New Column( "y" ),
New Column( "red", setvalues( red ) ),
New Column( "green", setvalues( green ) ),
New Column( "blue", setvalues( blue ) ),
New Column( "hue", setvalues( hue ) ),
New Column( "lightness", setvalues( lightness ) ),
New Column( "saturation", setvalues( saturation ) ),
);
irow = 0;
For( iy = 1, iy <= nr, iy++,
For( ix = 1, ix <= nc, ix++,
irow++;
dt:y[irow] = iy;
dt:x[irow] = ix;
)
);
// do something with dt
Wait( 1 );
Close( dt, "nosave" );
);
);
Parte 2 dello staff @Giovanni Ponte :
Una cosa che suggerirò è che puoi usare NewImage(), invece di Open() per il file immagine. Open() è una funzione più generale che deve capire cosa stai aprendo. In quel processo, utilizza la funzionalità del sistema operativo, come l'apertura dell'immagine in un altro programma. img = NuovaImmagine("nomefile.jpg"); aprirà il file immagine e creerà un'immagine JSL, restituendoti l'handle.
L'altro suggerimento è che puoi usare un altro script che ho fatto (prima di Image Analyzer) su File Exchange, chiamato ImageToDatatable . Convertirà la tua immagine in una tabella di dati, in modo simile all'Analizzatore di immagini, ma non otterrai tutto il resto di ciò che fa l'Analizzatore di immagini.
Avvolgilo nel ciclo come @Craige_Hales mostra (sopra) e dovresti essere a posto.
Re: Apri file immagine (jpg), esegui analisi e passa all'immagine successiva<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Mi sono appena imbattuto in questo post e ho pensato di aggiungere un paio di punti, nel caso fosse ancora utile.
Una cosa che suggerirò è che puoi usare NewImage(), invece di Open() per il file immagine. Open() è una funzione più generale che deve capire cosa stai aprendo. In quel processo, utilizza la funzionalità del sistema operativo, come l'apertura dell'immagine in un altro programma. img = NuovaImmagine("nomefile.jpg"); aprirà il file immagine e creerà un'immagine JSL, restituendoti l'handle.
L'altro suggerimento è che puoi usare un altro script che ho fatto (prima di Image Analyzer) su File Exchange, chiamato ImageToDatatable . Convertirà la tua immagine in una tabella di dati, in modo simile all'Analizzatore di immagini, ma non otterrai tutto il resto di ciò che fa l'Analizzatore di immagini.
Avvolgilo nel ciclo come Craige@JMP mostra (sopra) e dovresti essere a posto.
Re: Apri file immagine (jpg), esegui analisi e passa all'immagine successivapath = "$desktop/temp/";files = Files In Directory( path );For( ifile = 1, ifile <= N Items( files ), ifile++, filename = files[ifile]; If( Right( filename, 4 ) == ".jpg", pic = Open( path || filename, "jpg" ); jslcolor = pic << getpixels(); {red, green, blue} = Color To RGB( jslcolor ); {hue, lightness, saturation} = Color To HLS( jslcolor ); nr = N Rows( jslcolor ); nc = N Cols( jslcolor ); dt = New Table( Substr( filename, 1, Length( filename ) - 4 ), addrows( nr * nc ), New Column( "x" ), New Column( "y" ), New Column( "red", setvalues( red ) ), New Column( "green", setvalues( green ) ), New Column( "blue", setvalues( blue ) ), New Column( "hue", setvalues( hue ) ), New Column( "lightness", setvalues( lightness ) ), New Column( "saturation", setvalues( saturation ) ), ); irow = 0; For( iy = 1, iy <= nr, iy++, For( ix = 1, ix <= nc, ix++, irow++; dt:y[irow] = iy; dt:x[irow] = ix; ) ); // do something with dt Wait( 1 ); Close( dt, "nosave" ); ););Re: Apri file immagine (jpg), esegui analisi e passa all'immagine successivaMolte scuse, non sono stato abbastanza chiaro nel mio post originale. Quello che voglio fare è inserire le informazioni sui pixel in una tabella di dati, non nell'immagine originale stessa.
questo è, in effetti, automatizzare il ImageToDatatable JSL script che è già stato scritto ma passa attraverso ogni immagine all'interno di una cartella e salva la tabella di dati risultante con l'eventuale analisi risultante dei pixel nella stessa cartella.
le coordinate x e y insieme a RGB, I e HSL sono sufficienti per eseguire qualsiasi analisi di cui ho bisogno. Ho allegato una tabella di dati di esempio su cui posso eseguire l'analisi, ho anche allegato l'immagine originale da cui sono stati presi questi dati, ne ho alcune migliaia che devo esaminare, quindi farli uno alla volta sarebbe quasi impossibile.
mi scuso ancora per la cattiva formulazione e la mancanza di chiarezza nel post originale.
Davide.
Re: Apri file immagine (jpg), esegui analisi e passa all'immagine successivaaggiungi il parametro del tipo di file.quindi il valore restituito sarà un oggetto immagine.Probabilmente funzionerà anche se mescoli e abbini PNG, JPG, GIF; dice a JMP di restituire l'immagine piuttosto che ricorrere al programma predefinito del sistema operativo per l'estensione.
open("$desktop/setFont.PNG","PNG")
Nuova immagine(
Char To Blob(
"640745eJxkugdUU0v3PgyCIFKiotKDCsL10ovUEFBQRJodKQJKLyF0gpSIKIjSpEgnCgoqVVrooRk6obcACUaaG...
oppure usa newimage per ottenere l'oggetto immagine.
newimage("$desktop/setFont.PNG")
Nuova immagine(
Char To Blob(
"640745eJxkugdUU0v3PgyCIFKiotKDCsL10ovUEFBQRJodKQJKLyF0gpSIKIjSpEgnCgoqVVrooRk6obcACUaaG...
newimage è più semplice; open potrebbe essere necessario se l'immagine è un URL o un BLOB.
Re: Apri file immagine (jpg), esegui analisi e passa all'immagine successivaQuesto dovrebbe mettere i file di immagine in una cartella in una tabella JMP:
// ian.cox@jmp.com :23 giugno 2014
Nomi predefiniti qui ( 1 ) ;
dir = Scegli Directory ( "Scegli una directory contenente file di immagine:" ) ;
flist = FilesInDirectory ( dir ) ;
Se ( NI articoli ( flist ) < 1 , Stampa ( "Nessun file trovato nella cartella" || dir || "." ) ; Bip () ; Gettare ()) ;
dt = Nuova tabella ( "Immagini da" || dir ,
Nuova colonna ( "Percorso del file" , Carattere , Nominale ) ,
Nuova colonna ( "Immagine" , Espressione ) , Aggiungi righe ( NI articoli ( flist ))
) ;
per ( f = 1 , f <= Articoli ( flist ) , f ++,
pp = dir || "/" || flist [ f ] ;
Colonna ( dt , "Percorso del file" )[ f ] = pp ;
Provare ( Colonna ( dt , "Immagine" )[ f ] = Nuova immagine ( pp )) ; // Usa 'Try()' nel caso non sia un file immagine
) ;