作为一个小背景,我是一个项目的一部分,在这个项目中,我们正在创建一张脚部碰撞的压力图。将制作传感器的8x4布局。每个横截面将是一个传感器,这将导致32个独特的压力点。
我更熟悉从传感器数据中解析数据,但我并不确切地知道绘制脚部压力/热图的最佳方法。从本质上讲,它看起来像是this。我的想法是使用某种绘图工具来创建脚部形状轮廓,并尝试找到每个感应点的像素点或位置。
例如,每个“传感器”可以由一个5x5像素的块组成,以使着色更好地类似于压力图。这是my very first crude design of 8x3 sensors。每个模块都类似于一个“传感器”(我忘记了第四列)。为了更好地表示压力图,我正在考虑将每个传感器制作成5x5或10x10像素的块,以便更好地分散颜色。我创建最终视觉(链接的第一张图像)的最后一个想法是以某种方式将脚部形状遮盖在矩形形状上,这将使脚部外部仅为空白/白色,并将压力贴图颜色保留在脚部轮廓内。我怎么才能遮住脚的形状呢?
如果有更好的工具,我愿意接受建议,或者只是推动我可以使用的资源。感谢大家的帮助!
发布于 2016-01-20 06:21:25
要创建像第一张图像一样的热图,您需要更多的传感器--以获得更高的分辨率。要获得轮廓,您可以设置一个阈值,低于该阈值,框将显示为白色,最后,您需要将阈值以上的数据从蓝色(最少)映射到红色(大多数),比方说,32个分区。
因此,您需要获取一个范围:
r = float(highest-lowest)
r_resolution = r/32并将所述范围内的每个分割设置为沿您的色标的一个增量。
至于将传感器细分为像素--你在谈论插值,尽管你想要插值的程度可能太高了。
发布于 2016-01-21 01:17:52
若要创建脚部形状,可以创建一个面片并将其添加到绘图中,以遮罩背景(请参见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()

https://stackoverflow.com/questions/34887917
复制相似问题