Apri i file immagine (jpg), esegui l'analisi e passa all'immagine successivaSono molto interessato a utilizzare JMP per eseguire l'elaborazione e l'analisi automatica delle immagini e dispongo di uno script (fortemente basato sul componente aggiuntivo di John Pontes) e di informazioni raccolte dal suo eccellente blog John Ponte, autore del blog JMP ) che posso eseguire su un'immagine alla volta sulle immagini, ma quello che voglio veramente fare dopo è creare uno script 'looping' che faccia quanto segue
- conta il numero di file .jpg in una directory.
- uno alla volta apre un'immagine, inserisce le informazioni disponibili (sto utilizzando il componente aggiuntivo e lo script dell'analizzatore di immagini John Pontes 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 utilizzo quanto segue
Per ( io = 1 , io <= N articoli ( File ) , io ++,
Se ( Finisce con ( File [ io ] , ".jpg" ) ,
Aprire ( File [ io ] ) ;
);
i file aperti (file ); apre i file jpg in un altro programma (il programma predefinito che non voglio modificare). Come posso ottenerlo in modo che si apra in JMP utilizzando quanto segue (o qualcos'altro se è meglio)
imm = Nuova immagine ( "ilnomefiledel.jpg" ) ;
w = Nuova finestra ( "Immagine" , immagine) ;
Posso quindi eseguire l'analisi, chiudere il tutto e ripetere l'operazione fino a quando tutte le immagini non sono state analizzate.
[*Modifica al post originale del membro dello staff seligman. Seconda parte della domanda dell'utente aggiunta qui al post originale.]
Mi scuso molto, non sono stato abbastanza chiaro nel mio post originale. Quello che voglio fare è inserire le informazioni sui pixel in una tabella dati, non nell'immagine originale stessa.
questo è, in effetti, automatizzare il ImageToDatatable JSL script che è già stato scritto, ma esamina ciascuna immagine all'interno di una cartella e salva la tabella 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 effettuare qualsiasi analisi di cui ho bisogno. Ho allegato una tabella 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 sarebbe il caso di farli uno alla volta quasi impossibile.
mi scuso ancora per la cattiva formulazione e la mancanza di chiarezza nel post originale.
Saluti
Davide
Ri: Apri file immagine (jpg), esegui l'analisi e passa all'immagine successivaConsolidare due risposte a questo post come soluzione.
Parte 1 dallo 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 dallo staff @GiovanniPonte :
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 questo processo, utilizza la funzionalità del sistema operativo, come aprire l'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 utilizzare un altro script che ho realizzato (prima dell'Analizzatore di immagini) su File Exchange, chiamato ImageToDatatable . Convertirà la tua immagine in una tabella dati, in modo simile all'Analizzatore di immagini, ma non otterrai tutto il resto di ciò che fa l'Analizzatore di immagini.
Avvolgilo nel circuito come @Craige_Hales mostra (sopra) e dovresti essere a posto.
Ri: Apri file immagine (jpg), esegui l'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 in cui sia 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 questo processo, utilizza la funzionalità del sistema operativo, come aprire l'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 utilizzare un altro script che ho realizzato (prima dell'Analizzatore di immagini) su Scambio file, chiamato ImageToDatatable . Convertirà la tua immagine in una tabella dati, in modo simile all'Analizzatore di immagini, ma non otterrai tutto il resto di ciò che fa l'Analizzatore di immagini.
Avvolgilo nel circuito come Craige@JMP mostra (sopra) e dovresti essere a posto.
Ri: Apri file immagine (jpg), esegui l'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" ); ););Ri: Apri file immagine (jpg), esegui l'analisi e passa all'immagine successivaMi scuso molto, non sono stato abbastanza chiaro nel mio post originale. Quello che voglio fare è inserire le informazioni sui pixel in una tabella dati, non nell'immagine originale stessa.
questo è, in effetti, automatizzare il ImageToDatatableJSL script che è già stato scritto, ma esamina ciascuna immagine all'interno di una cartella e salva la tabella 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 effettuare qualsiasi analisi di cui ho bisogno. Ho allegato una tabella 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 sarebbe il caso di farli uno alla volta quasi impossibile.
mi scuso ancora per la cattiva formulazione e la mancanza di chiarezza nel post originale.
Davide.
Ri: Apri file immagine (jpg), esegui l'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; indica a JMP di restituire l'immagine anziché ricorrere al programma predefinito del sistema operativo per l'estensione.
open("$desktop/setFont.PNG","PNG")
Nuova immagine(
Carattere in BLOB(
"640745eJxkugdUU0v3PgyCIFKiotKDCsL10ovUEFBQRJodKQJKLyF0gpSIKIjSpEgnCgoqVVrooRk6obcACUaaG...
oppure usa newimage per ottenere l'oggetto immagine.
nuovaimmagine("$desktop/setFont.PNG")
Nuova immagine(
Carattere in BLOB(
"640745eJxkugdUU0v3PgyCIFKiotKDCsL10ovUEFBQRJodKQJKLyF0gpSIKIjSpEgnCgoqVVrooRk6obcACUaaG...
newimage è più semplice; open potrebbe essere necessario se l'immagine è un URL o un BLOB.
Ri: Apri file immagine (jpg), esegui l'analisi e passa all'immagine successivaQuesto dovrebbe inserire 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 = FileInDirectory ( dir ) ;
Se ( 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 ) , AggiungiRighe ( Articoli ( fList ))
) ;
per ( F = 1 , F <= Articoli ( fList ) , F ++,
fp = dir || "/" || fList [ F ] ;
Colonna ( dt , "Percorso del file" )[ F ] = fp ;
Tentativo ( Colonna ( dt , "Immagine" )[ F ] = Nuova immagine ( fp )) ; // Usa 'Try()' nel caso non sia un file immagine
) ;