Я помогаю ветеринарной клинике измерять давление под собачьей лапой. Я использую Python для анализа данных, и теперь я застреваю, пытаясь разделить лапы на (анатомические) субрегионы.
Я сделал 2D-массив каждой лапы, который состоит из максимальных значений для каждого датчика, который был загружен лапой со временем. Вот пример одной лапы, где я использовал Excel для рисования областей, которые я хочу "обнаружить". Это 2 на 2 ячейки вокруг датчика с локальными максимумами, которые вместе имеют наибольшую сумму.
Итак, я попробовал несколько экспериментов и решил просто искать максимальные значения для каждого столбца и строки (не может выглядеть в одном направлении из-за формы лапы). Это, по-видимому, "обнаруживает" расположение отдельных пальцев ноги довольно хорошо, но также отмечает соседние датчики.
Итак, что было бы лучшим способом сказать Python, какие из этих максимальных значений я хочу?
Примечание. Квадраты 2x2 не могут пересекаться, так как они должны быть отдельными пальцами!
Также я взял 2x2 в качестве удобства, любое более продвинутое решение приветствуется, но я просто научный сотрудник по человеческому движению, поэтому я не настоящий программист или математик, поэтому, пожалуйста, держите его "простым".
Здесь версия, которая может быть загружена с помощью np.loadtxt
Результаты
Итак, я попробовал решение @jextee (см. результаты ниже). Как вы можете видеть, он очень хорошо работает на передних лапах, но он работает менее хорошо для задних ног.
Более конкретно, он не может распознать маленький пик, который имеет четвертый палец. Это, очевидно, связано с тем, что петля смотрит сверху вниз на самое низкое значение, не принимая во внимание, где это.
Кто-нибудь знает, как настроить алгоритм @jextee, чтобы он мог также найти 4-й носок?
Поскольку я еще не обработал никаких других испытаний, я не могу предоставить какие-либо другие образцы. Но данные, которые я дал раньше, были средними для каждой лапы. Этот файл представляет собой массив с максимальными данными из 9 лапок в том порядке, в котором они соприкасались с пластиной.
Это изображение показывает, как они были пространственно распределены по пластине.
Обновление:
Я создал блог для всех заинтересованных и Я установил SkyDrive со всеми необработанными измерениями. Таким образом, каждому, кто запрашивает больше данных, больше энергии для вас!
Новое обновление:
Итак, после получения справки, касающейся обнаружения лапы и сортировки лапы, я, наконец, в состоянии проверить обнаружение носка для каждой лапы! Оказывается, он не работает так хорошо ни в чем, кроме лап размером, как у моего собственного примера. Конечно, задним числом, это моя собственная ошибка для выбора 2x2 так произвольно.
Вот хороший пример того, где он идет не так: гвоздь распознается как палец, а "пятка" настолько широк, что он распознается дважды!
Лапа слишком большая, поэтому с размером 2x2 без перекрытия несколько признаков обнаружения пальцев. Другое дело, у маленьких собак часто не удается найти пятый палец, который, как я подозреваю, вызван слишком большой площадью 2x2.
После пробуя текущее решение во всех моих измерениях. Я пришел к ошеломляющему выводу, что почти для всех моих маленьких собак он не нашел 5-й палец и что более 50% ударов для крупных собак он найдет больше!
Поэтому я должен изменить его. Моя собственная догадка меняла размер neighborhood
на меньшее, чем у маленьких собак, и больше для больших собак. Но generate_binary_structure
не позволит мне изменить размер массива.
Поэтому я надеюсь, что у кого-то еще есть лучшее предложение для определения пальцев ног, возможно, с областью области пальца с размером лапы?