Sto aiutando una clinica veterinaria a misurare la pressione sotto una zampa di cane. Uso Python per la mia analisi dei dati e ora sono bloccato nel tentativo di dividere le zampe in sottoregioni (anatomiche).
Ho creato un array 2D per ogni zampa, che consiste dei valori massimi per ciascun sensore che è stato caricato dalla zampa nel tempo. Ecco un esempio di una zampa, in cui ho usato Excel per disegnare le aree che voglio "rilevare". Si tratta di scatole da 2 per 2 attorno al sensore con valori massimi locali, che insieme hanno la somma maggiore.
Quindi ho provato alcuni esperimenti e ho deciso di cercare semplicemente i massimi di ogni colonna e riga (non posso guardare in una direzione a causa della forma della zampa). Questo sembra "rilevare" abbastanza bene la posizione delle dita separate, ma segna anche i sensori vicini.
Quindi quale sarebbe il modo migliore per dire a Python quali di questi massimi sono quelli che voglio?
Nota: i quadrati 2x2 non possono sovrapporsi, poiché devono essere dita separate!
Inoltre ho preso 2x2 per comodità, qualsiasi soluzione più avanzata è benvenuta, ma sono semplicemente uno scienziato del movimento umano, quindi non sono né un vero programmatore o un matematico, quindi per favore mantienilo "semplice".
Ecco una versione che può essere caricatanp.loadtxt
risultati
Quindi ho provato la soluzione di @ jextee (vedere i risultati di seguito). Come puoi vedere, funziona molto bene sulle zampe anteriori, ma funziona meno bene per le zampe posteriori.
Più specificamente, non è in grado di riconoscere il piccolo picco che è il quarto dito. Ciò è ovviamente inerente al fatto che il ciclo guarda dall'alto verso il basso verso il valore più basso, senza tener conto di dove si trova.
Qualcuno saprebbe come modificare l'algoritmo di @exexee, in modo che possa trovare anche il 4o dito?
Dal momento che non ho ancora elaborato altre prove, non posso fornire altri campioni. Ma i dati che ho dato prima erano le medie di ogni zampa. Questo file è un array con i dati massimi di 9 zampe nell'ordine in cui sono entrati in contatto con la piastra.
Questa immagine mostra come sono stati spazialmente spaziati sul piatto.
Aggiornare:
Ho creato un blog per chiunque sia interessato e ho installato uno SkyDrive con tutte le misure grezze. Quindi, per chiunque richieda più dati: più potenza per te!
Nuovo aggiornamento:
Quindi, dopo l'aiuto che ho ricevuto con le mie domande sul rilevamento delle zampe e l' ordinamento delle zampe , sono stato finalmente in grado di controllare il rilevamento delle dita per ogni zampa! Si scopre che non funziona così bene in nient'altro che zampe di dimensioni simili a quella del mio esempio. Ovviamente col senno di poi, è colpa mia per aver scelto il 2x2 in modo arbitrario.
Ecco un bell'esempio di dove va storto: un chiodo viene riconosciuto come una punta e il "tallone" è così largo che viene riconosciuto due volte!
La zampa è troppo grande, quindi prendere una dimensione 2x2 senza sovrapposizioni, fa rilevare due dita dei piedi. Al contrario, nei cani di piccola taglia spesso non riesce a trovare un 5 ° dito del piede, che sospetto sia causato dall'area di 2x2 troppo grande.
Dopo aver provato la soluzione attuale su tutte le mie misurazioni sono giunto alla sorprendente conclusione che per quasi tutti i miei cani di piccola taglia non ha trovato un 5o dito del piede e che in oltre il 50% degli impatti per i cani di grossa taglia ne avrebbe trovato di più!
Quindi chiaramente ho bisogno di cambiarlo. La mia ipotesi stava cambiando le dimensioni di neighborhood
qualcosa di più piccolo per i cani di piccola taglia e più grande per i cani di grossa taglia. Ma generate_binary_structure
non mi permetterebbe di modificare le dimensioni dell'array.
Pertanto, spero che qualcun altro abbia un suggerimento migliore per localizzare le dita dei piedi, forse avendo la scala dell'area delle dita con le dimensioni della zampa?