【发布时间】:2015-05-08 00:46:12
【问题描述】:
我已经实现了一个密集的光流算法,我想用下面的颜色模型来可视化它
(颜色表示某一点的流动方向,强度表示位移向量的长度)
我已经实现了可视化的肮脏版本
def visualizeFlow(u, v):
colorModel = cv2.imread('../colormodel.png')
colorModelCenter = (colorModel.shape[0]/2, colorModel.shape[1]/2)
res = np.zeros((u.shape[0], u.shape[1], 3), dtype=np.uint8)
mag = np.max(np.sqrt(u**2 + v**2))
if mag == 0:
return res, colorModel
for i in xrange(res.shape[0]):
for j in xrange(res.shape[1]):
res[i, j] = colorModel[
colorModelCenter[0] + (v[i, j]/mag*colorModelCenter[0]),
colorModelCenter[1] + (u[i, j]/mag*colorModelCenter[1])
]
return res, colorModel
一般情况下的图片效果很好,但速度很慢
所以我的问题是任何人都可以帮助我更快地进行可视化吗?如果有人知道一种更好的方式来可视化密集流动,那可能会很酷
【问题讨论】:
-
“真的很慢”是什么意思?
-
@Micka 对大小为 2637 x 1300 的流进行可视化需要几分钟。这对我来说非常重要,因为我想在扭曲迭代中使用它来跟踪优化过程中的流量如何变化。至少金字塔可视化级别可能需要很长时间。
-
如果将高度和宽度相加,那就是 for 循环运行的次数。你能看出它慢的原因吗?
-
@GPPK 刚才我从循环中删除 /mag*colorModelCenter (并用单乘法替换它),似乎函数变得更快。我想另一个问题是在 python 代码中多次调用矩阵项。
-
如果你经常调用这个,你可能不应该在每次调用中读取模型,而是加载一次并通过。但我不在 python 中,所以不确定。
标签: python opencv computer-vision opticalflow