Pomagam klinice weterynaryjnej mierzącej ciśnienie pod łapą psa. Używam Pythona do analizy danych i teraz utknąłem próbując podzielić łapy na (anatomiczne) podregiony.
Zrobiłem tablicę 2D każdej łapy, która składa się z maksymalnych wartości dla każdego czujnika, który został obciążony przez łapę w czasie. Oto przykład jednej łapy, w której użyłem programu Excel do narysowania obszarów, które chcę „wykryć”. Są to 2 na 2 pola wokół czujnika z lokalnymi maksimami, które razem mają największą sumę.
Więc spróbowałem trochę eksperymentować i postanowiłem po prostu poszukać maksimów każdej kolumny i rzędu (nie mogę patrzeć w jednym kierunku z powodu kształtu łapy). Wydaje się, że dość dobrze „wykrywa” to położenie oddzielnych palców, ale oznacza także sąsiednie czujniki.
Więc jaki byłby najlepszy sposób, aby powiedzieć Pythonowi, które z tych maksimów są tymi, których chcę?
Uwaga: kwadraty 2x2 nie mogą się pokrywać, ponieważ muszą być oddzielnymi palcami!
Również wziąłem 2x2 jako wygodę, każde bardziej zaawansowane rozwiązanie jest mile widziane, ale jestem po prostu naukowcem zajmującym się ludzkim ruchem, więc nie jestem ani prawdziwym programistą, ani matematykiem, więc proszę, zachowaj prostotę.
Oto wersja, którą można załadowaćnp.loadtxt
Wyniki
Wypróbowałem więc rozwiązanie @ jextee (zobacz wyniki poniżej). Jak widać, działa bardzo na przednich łapach, ale działa gorzej na tylne nogi.
Mówiąc dokładniej, nie rozpoznaje małego piku, który jest czwartym palcem. Jest to oczywiście nieodłączne od faktu, że pętla wygląda od góry w dół w kierunku najniższej wartości, bez względu na to, gdzie to jest.
Czy ktokolwiek wiedziałby, jak dostosować algorytm @ jextee, aby mógł znaleźć również czwarty palec u nogi?
Ponieważ nie przetworzyłem jeszcze żadnych prób, nie mogę dostarczyć żadnych innych próbek. Ale dane, które podałem wcześniej, były średnimi dla każdej łapy. Ten plik to tablica z maksymalnymi danymi 9 łap w kolejności, w której zetknęły się z płytką.
Ten obraz pokazuje, jak zostały one rozmieszczone przestrzennie na talerzu.
Aktualizacja:
Założyłem blog dla wszystkich zainteresowanych i skonfigurowałem SkyDrive ze wszystkimi nieprzetworzonymi pomiarami. Tak więc każdemu, kto prosi o więcej danych: więcej mocy dla Ciebie!
Nowa aktualizacja:
Więc po otrzymaniu pomocy z pytaniami dotyczącymi wykrywania i sortowania łap , w końcu mogłem sprawdzić wykrywanie palców u każdej łapy! Okazuje się, że nie działa tak dobrze w niczym innym, jak łapy wielkości podobne do tej z mojego przykładu. Oczywiście z perspektywy czasu to moja wina, że wybrałem 2x2 tak arbitralnie.
Oto dobry przykład, w którym idzie źle: paznokieć jest rozpoznawany jako palec u nogi, a „pięta” jest tak szeroka, że zostaje rozpoznana dwukrotnie!
Łapa jest zbyt duża, więc przyjęcie rozmiaru 2x2 bez zachodzenia na siebie powoduje dwukrotne wykrycie niektórych palców. Odwrotnie, u małych psów często nie znajduje się 5. palec u nogi, co, jak podejrzewam, jest spowodowane zbyt dużym obszarem 2x2.
Po wypróbowaniu obecnego rozwiązania we wszystkich moich pomiarach doszedłem do oszałamiającego wniosku, że dla prawie wszystkich moich małych psów nie znalazł piątego palca u nogi i że w ponad 50% uderzeń dużych psów znalazłby więcej!
Tak wyraźnie muszę to zmienić. Domyślam się, że zmieniłem rozmiar neighborhood
na coś mniejszego dla małych psów i większego dla dużych psów. Ale generate_binary_structure
nie pozwoliłbym zmienić rozmiaru tablicy.
Dlatego mam nadzieję, że ktokolwiek ma lepszą propozycję lokalizacji palców, być może mając skalę obszaru palców wraz z rozmiarem łapy?