Обнаружение пиков в двумерном массиве

| | | | | | | | | | | | | | | | | | | | | |

Я помогаю ветеринарной клинике измерять давление под лапой собаки. Я использую Python для анализа данных, и теперь я застрял, пытаясь разделить лапы на (анатомические) субрегионы.

Я сделал двумерный массив каждой лапы, состоящий из максимальных значений для каждого датчика, загруженного лапой с течением времени. Вот пример одной лапы, где я использовал Excel для рисования областей, которые я хочу «обнаружить». Это прямоугольники 2 на 2 вокруг датчика с локальными максимумами, которые вместе имеют наибольшую сумму.

alt text

Поэтому я попробовал немного поэкспериментировать и решил просто найти максимумы каждого столбца и ряда (не могу смотреть в одном направлении из-за формы лапы). Это, кажется, довольно хорошо "определяет" расположение отдельных пальцев, но также помечает соседние датчики.

alt text

Как лучше всего указать Python, какой из этих Мне нужны максимальные значения?

Примечание: квадраты 2x2 не могут перекрываться, так как они должны быть отдельными пальцами!

Также я взял 2x2 для удобства приветствуется любое более продвинутое решение, но я просто ученый, занимающийся человеческими движениями, поэтому я не настоящий программист или математик, поэтому, пожалуйста, держите его «простым».

Здесь находится версия, которую можно загрузить с помощью np.loadtxt


Результаты

Итак, я попробовал решение @jextee (см. результаты ниже). Как видите, это хорошо работает на передних лапах, но хуже на задних.

В частности, он не может распознать маленькую вершину четвертого пальца. Очевидно, это связано с тем, что цикл смотрит сверху вниз к наименьшему значению, не принимая во внимание, где оно находится.

Кто-нибудь знает, как настроить алгоритм @jextee, чтобы он мог найти и четвертый палец ноги?

alt text

Поскольку я еще не обрабатывал другие испытания, я не могу предоставить другие образцы. Но данные, которые я предоставил ранее были средними для каждой лапы. Этот файл представляет собой массив с максимальными данными о 9 лапах в том порядке, в котором они соприкасались с пластиной.

На этом изображении показано, как они были распределены в пространстве по пластине.

alt text

Обновление:

Я создал блог для всех, кто заинтересован и Я настроил SkyDrive со всеми необработанными измерениями. Так что всем запрос дополнительных данных: больше мощности для вас!


Новое обновление:

Итак, после помощи, которую я получил с моими вопросами относительно обнаружение лап и сортировка лап, я наконец-то смог проверить обнаружение пальцев для каждой лапы! Оказывается, это не работает так хорошо ни с чем, кроме лап размером с лапу в моем собственном примере. Конечно, оглядываясь назад, я сам виноват в том, что так произвольно выбрал 2x2.

Здесь" хороший пример того, где что-то идет не так: ноготь распознается как палец ноги, а «пятка» настолько широка, что распознается дважды!

alt text

Лапа слишком велика, поэтому размер 2x2 без наложения приводит к тому, что некоторые пальцы обнаруживаются дважды. Наоборот , у маленьких собак часто не удается найти 5-й палец, что, как я подозреваю, вызвано слишком большой площадью 2x2.

После попробовав текущее решение на всех моих измерениях, я пришел к ошеломляющему выводу, что почти для всех моих маленьких собак он не нашел 5-го палец, и что в более чем 50% ударов для крупных собак он найдет больше!

Поэтому очевидно, что мне нужно его изменить. Мое собственное предположение заключалось в изменении размера соседства на что-то меньшее для маленьких собак и большее для больших собак. Но generate_binary_structure не позволил бы мне изменить размер массива.

Поэтому я надеюсь, что у кого-нибудь еще есть лучшее предложение по расположению пальцев, возможно, имея палец масштаб площади с размером лапы?