2016-01-19 4 views
-1

Для небольшого фона я являюсь частью проекта, в котором мы создаем карту давления ударов ног. Будет сделана компоновка датчиков 8x4. Каждое поперечное сечение представляет собой датчик, который приводит к 32 уникальным точкам давления.Создание тепловой карты давления стопы

Я больше знаком с анализом данных из данных датчиков, но я точно не знаю, как лучше всего использовать давление/тепловую карту стопы. По существу, это выглядело бы как-то вроде this. То, что я имел в виду, это использовать какой-то инструмент рисования для создания контура формы ноги и попытаться найти точку пикселя или место размещения для каждой точки датчика.

Каждый «датчик» может быть сделан из блока 5 × 5 пикселей, например, чтобы сделать окраску более похожим на карту давления. Вот my very first crude design of 8x3 sensors. Каждый блок будет напоминать «датчик» (я забыл четвертую колонку). Чтобы лучше представлять карту давления, я подумывал о том, чтобы сделать каждый датчик в блоке размером 5x5 или 10x10 пикселей, чтобы лучше разогнать цвета. Моя последняя мысль о создании окончательного визуального (связанного с первым изображением) заключалась в том, чтобы каким-то образом замаскировать форму ножки по прямоугольной форме, что сделало бы внешнюю сторону стопы просто пустой/белой и сохранила цвета карты давления внутри контура стопы. Как я могу замаскировать форму стопы?

Если есть лучший инструмент, я открыт для предложений или просто подталкиваю ресурс, который я могу использовать. Я ценю всю помощь!

+0

Я предполагаю, что это может быть интересно: http://stackoverflow.com/questions/4087919/how-can-i-improve-my-paw-detection и HTTP: // stackoverflow.com/questions/4502656/how-to-sort-my-paws – jrjc

+0

Можете ли вы опубликовать код, который вы использовали для создания первой попытки? – Emma

ответ

0

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

Так что вам нужно, чтобы получить диапазон:

r = float(highest-lowest) 
r_resolution = r/32 

и установить каждое деление в указанном диапазоне на один шаг по вашей цветовой гамме.

Что касается разделения ваших датчиков на пиксели - вы говорите об интерполяции, хотя степень, в которой вы хотите интерполировать, вероятно, слишком высока.

+0

Спасибо, резолюция не самая большая проблема. Для визуальных целей я буду интерполировать датчики. Мне более любопытно, как замаскировать изображение на поверхности карты тепла, снова для визуальных целей, чтобы увидеть ногу. – Michael

0

Чтобы создать форму ноги, вы можете создать и добавить патч к вашему сюжету, который маскирует фон (см. Fill OUTSIDE of polygon | Mask array where indicies are beyond a circular boundary?).

Я сделал грубую форму ноги, используя кубические кривые Безье (CURVE4). Я сделал мой в CorelDRAW (потому что это то, что у меня есть), но есть множество бесплатных инструментов для рисования с кубическими Безье, или вы можете просто настроить точки вручную в своем коде. Для работы с путями есть учебник here.

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.patches as patches 
from matplotlib.path import Path 

# Create a heat map with some fake data 
ax = plt.subplot(111) 
plt.pcolor(np.random.random((10,10))) 

# Define a path that is a foot shape 
foot_verts = [(3.2, 7.5),       #Start point 
      (2.9, 5.6), (4.1, 4.4), (4, 3.5), #Cubic Bezier controls and end point 
      (4.1,2.5), (3.9, 1.3), (4.4, 0.6), 
      (5, 0), (6.3, 0.2), (6.8, 0.5), 
      (7.3, 1.7), (6.7, 2.6), (6.5, 3.8), 
      (6.4, 5.1), (7.6, 5.7), (7.2, 8.3), 
      (6.7, 10.8), (3.5, 9.4), (3.2, 7.5)] 

foot_codes = [Path.MOVETO, 
       Path.CURVE4, Path.CURVE4, Path.CURVE4, 
       Path.CURVE4, Path.CURVE4, Path.CURVE4, 
       Path.CURVE4, Path.CURVE4, Path.CURVE4, 
       Path.CURVE4, Path.CURVE4, Path.CURVE4, 
       Path.CURVE4, Path.CURVE4, Path.CURVE4, 
       Path.CURVE4, Path.CURVE4, Path.CURVE4] 

# Define a path that is the same size as the plot area 
xlim = ax.get_xlim() 
ylim = ax.get_ylim() 

ax_verts = [(xlim[0],ylim[0]), 
      (xlim[0],ylim[1]), 
      (xlim[1],ylim[1]), 
      (xlim[1],ylim[0]), 
      (xlim[0],ylim[0])] 

ax_codes = [Path.MOVETO, 
      Path.LINETO, 
      Path.LINETO, 
      Path.LINETO, 
      Path.LINETO 
      ] 

#Create a patch that is the plot area minus the foot shape and add to the plot 
path = Path(ax_verts + foot_verts, ax_codes + foot_codes) 
patch = patches.PathPatch(path, facecolor='white', edgecolor='none') 
ax.add_patch(patch) 

plt.show() 

Foot heatmap

Смежные вопросы