Пиковое обнаружение в 2D массиве
Я помогаю ветеринарной клинике измерять давление под собачьей лапой. Я использую Python для анализа данных, и теперь я застрял, пытаясь разделить лапы на (анатомические) подобласти.
Я сделал 2D массив каждой лапы, который состоит из максимальных значений для каждого датчика, который был загружен лапой с течением времени. Вот пример одной лапы, где я использовал Excel для рисования областей, которые я хочу "обнаружить". Это 2 на 2 коробки вокруг датчика с локальными максимумами, которые вместе имеют самую большую сумму.

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

Итак, каков был бы лучший способ сказать Python, какой из этих максимумов я хочу?
Примечание.: Квадраты 2x2 не могут перекрываться, так как они должны быть отдельными пальцами!
также я взял 2x2 в качестве удобства, любое более продвинутое решение приветствуется, но я просто ученый движения человека, поэтому я не настоящий программист или математик, поэтому, пожалуйста, держите его "простым".
здесь версия, которая может быть загружена с np.loadtxt
результаты
поэтому я попробовал решение @jextee (см. результаты ниже). Как вы можете смотрите, он очень хорошо работает на передних лапах, но он работает менее хорошо для задних ног.
более конкретно, он не может распознать небольшой пик, который является четвертым пальцем ноги. Это, очевидно, присуще тому факту, что цикл смотрит сверху вниз к самому низкому значению, не принимая во внимание, где это находится.
кто-нибудь знает, как настроить алгоритм @jextee, чтобы он мог найти 4-й палец тоже?

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

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

лапа слишком велика, поэтому, принимая размер 2x2 без перекрытия, некоторые пальцы ног обнаруживаются дважды. Наоборот, у маленьких собак часто не удается найти 5-й палец, который, как я подозреваю, вызван слишком большой площадью 2x2.
после пробовать текущее решение на всех моих измерениях I пришел к ошеломляющему выводу, что почти для всех моих маленьких собак он не нашел 5-й палец и что в более чем 50% ударов для больших собак он найдет больше!
так ясно, что мне нужно изменить его. Моя собственная догадка меняла размер neighborhood на что-то поменьше для маленьких собак и для больших собак. Но generate_binary_structure не позволил бы мне изменить размер массива.
поэтому я надеюсь, что у кого-нибудь еще есть лучшее предложение для поиска пальцев ног, возможно, имея масштаб области пальца ноги с размером лапы?
Comments