Estrai una zona predefinita all'interno di un'immagineCaro amico,
Voglio sapere se è possibile estrarre con uno script i pixel all'interno della cerchia predefinita della mia immagine (vedi allegato).
Grazie in anticipo per il vostro aiuto.
KRS,
Samir
Ri: Estrai una zona predefinita all'interno di un'immaginePuò essere. Potresti essere in grado di creare un modello utilizzando le statistiche sui valori dei pixel nell'immagine per creare i due valori soglia richiesti dal filtro. Potresti voler lisciare l'immagine prima del filtro canny (non all'interno del filtro canny) in modo da poter costruire il modello con i pixel smussati. (Modifica: l'effetto filtro canny interno è migliore perché tiene traccia dei dati in virgola mobile. Una sfocatura esterna ridurrà i dati in virgola mobile a valori di pixel interi 0..255 nell'immagine sfocata e la maggior parte dei pixel nell'immagine scura sono pari a 0..10 circa).
https://en.wikipedia.org/wiki/Canny_edge_detector descrive come funziona il filtro canny; il grande valore di soglia (molto piccolo per le tue immagini) è dove inizia una linea. Due pixel adiacenti devono essere diversi di così tanto. La linea viene "seguita" fino a quando non scende sotto il valore di soglia piccolo (molto, molto piccolo per le tue immagini). "I due valori soglia sono determinati empiricamente e la loro definizione dipenderà dal contenuto di una determinata immagine di input." - Wikipedia
I colori sono importanti in queste immagini? In caso contrario, potresti voler ridurre l'immagine alla scala di grigi. Sarà un problema più semplice, penso. Potresti fare una distribuzione dei valori della scala di grigi ...
Cosa farai con la linea dopo averla ottenuta in un'immagine? E 'solo una visualizzazione, o farai più calcoli su quell'immagine? L'approccio al cluster potrebbe funzionare bene se hai bisogno di un centro di massa e raggio.
Ri: Estrai una zona predefinita all'interno di un'immagineCaro Craige,
abbiamo implementato la soluzione in modo automatico, ma dobbiamo ancora adattare manualmente i parametri di soglia perché le foto sono eterogenee. pensi che sia possibile automatizzare questo passaggio?
Molte grazie,
Samir
Ri: Estrai una zona predefinita all'interno di un'immagineCaro Craige,
Il filtro canny è davvero utile.
Proverò ad automatizzare il processo.
Il clustering è anche molto interessante ma il risultato è meno chiaro per alcune altre foto.
Grazie mille per il vostro aiuto,
Samir
Ri: Estrai una zona predefinita all'interno di un'immagineDai un'occhiata all'esempio di filtro canny nell'indice di scripting. I parametri sono su slider e possono essere troppo permalosi se i dati variano in intensità, ma per l'immagine di esempio che ho usato
Impostazioni del cursore nell'esempio di Scripting Index
Per ottenere questo
Il filtro Canny rileva i bordi
Il rumore nell'immagine è stato levigato, molto, dai primi due cursori. I due cursori inferiori sono stati adattati ai valori appropriati per queste intensità di pixel. Lo script è nell'esempio; potresti essere in grado di automatizzare il tuo processo se le immagini sono abbastanza simili. L'output è un'immagine in bianco e nero o uno e zeri. Potresti catturare quei pixel in una matrice per un'ulteriore elaborazione.
Potresti anche voler fare un'analisi dei colori dei pixel. Forse il clustering ti darebbe un buio blu e più scuro coppia blu di cluster. Forse potresti usare le coordinate xy dei pixel in cluster blu scuro. per esempio:
// load the test image
img = open("$desktop/large.png","png");
// grab the rgb data from the image
{r,g,b} = img<<GETPIXELS></GETPIXELS>
I risultati del raggruppamento si sono trasformati in un'immagine
Potrebbe essere più sensato lavorare con le coordinate XY dei pixel raggruppati per trovare i parametri che si desidera.
Ri: Estrai una zona predefinita all'interno di un'immagineCaro Craige,
Grazie per il suggerimento.
Sfortunatamente, la localizzazione del cerchio all'interno dell'immagine può passare da una foto all'altra (non ancora standardizzata).
La mia domanda è se è possibile rilevare i contorni del cerchio in modo automatico.
KRS,
Samir
Ri: Estrai una zona predefinita all'interno di un'immagineSì. Ottieni una matrice dei valori dei pixel per l'intera immagine, qualcosa di simile
image << getpixels (controlla l'indice di scripting, sono lontano dalla mia scrivania in questo momento).
È possibile ottenere i pixel come canali separati r, g, b o come colore JMP combinato.
Successivamente, avrai bisogno di una matrice maschera delle stesse dimensioni, con una per i pixel da conservare e zero per i pixel da rifiutare. È possibile utilizzare un programma di pittura con bianco per uno e nero per zero. Carica quell'immagine e ottieni solo un canale, rosso forse (r, g, b dovrebbero essere tutti uguali per l'immagine in bianco e nero), che avrà lo zero e un valore.
Ora decidi cosa vuoi che il risultato sia: solo una lista non ordinata dei soli pixel interessanti? O una matrice delle stesse dimensioni di prima con i valori non interessanti impostati a zero?
imageMatrix [Loc (mask)] ti darà i pixel non ordinati in cui la maschera ha valori diversi da zero.
imageMatrix: * mask ti darà zero dove la maschera è zero, valori originali dove la maschera è uno. (: * è il moltiplicare elemento-saggio. * è matrix-algebra moltiplicare ... non quello che vuoi.)
Questo inviare potrebbe aiutare.