跟踪其中一根辐条运动的可能方法是什么?你知道吗
我问这个是因为我没有任何视频处理的经验。所以任何建议都是有用的!我在追踪什么?从我所读到的,通常我必须首先检测到我想要跟踪的对象。我使用了一个角点检测算法,比如goodfeaturestotrack
。但如何确保检测到正确的轮辐等?你知道吗
一些附加信息:视频的帧速率是30fps。轮子只能顺时针转动。当我一帧一帧地点击视频时,很明显一个轮辐的移动不会超过两个轮辐之间角度的一半(从一帧到另一帧)。 另外:车轮半径为5厘米。你知道吗
我现在已经试过马克的答案了。我将Tmax
和帧的时间戳记录在一个txt文件中,然后编写以下代码来计算相应的速度:
ListOfVelocities = []
for idx in range(1,len(ListOfAngles)):
if ListOfAngles[idx] < ListOfAngles[idx-1]:
rotation = (360-ListOfAngles[idx]) + ListOfAngles[idx-1]
else:
rotation = ListOfAngles[idx] - ListOfAngles[idx-1]
timePassed = VideoTimestamp[idx]-VideoTimestamp[idx-1]
velocity = 2*np.pi/360 * rotation * RADIUS * timePassed
ListOfVelocities.append(velocity)
我并不认为这是一个跟踪问题,因为轮子是受约束的,所以它不能在整个帧中移动,它只能改变它的角度位置,所以你只需要知道它的某个部分在一帧中的位置,以及它在下一帧中旋转了多少。然后,如你所知的帧速率,即帧间时间,你可以计算速度。你知道吗
所以,问题是如何判断哪个是你在前一帧中测量的同一辐条。由于辐条后面的区域是黑暗的,你会想要一个光辐条对比度好,所以你可以很容易地找到它。所以,我会把四个辐条涂成黑色,然后你只需要在深色背景上找一个浅色的辐条。我也会考虑把车轮的中心漆成红色(或其他饱和的颜色),这样你就可以很容易地找到中间。你知道吗
现在,在开始处理时,通过寻找红色找到轮子的中心,并在图像中得到它的x,y坐标。现在以像素为单位选择一个半径,你可以稍后更改,然后计算出一个x,y坐标的列表,比如说在以红点为圆心的圆的周长上360个点(1/degree)。这些点和所有的正弦/余弦在整个处理过程中都不会改变,所以在主视频处理循环之外这样做。你知道吗
现在,在每一帧中,使用索引来获取360个点中每个点的亮度,并且至少在最初,将最亮的一个点作为轮辐。你知道吗
所以,我在你的图像上粗略地画了一下,中心是红色的,只有一个轮辐是白色的:
现在代码如下所示:
输出如下:
如果在下一帧中,峰值亮度现在与垂直方向成100度角,则您知道轮子在1/(每秒帧数)内旋转了10度。你知道吗
你可能需要改变半径以获得最佳效果-实验!图像上显示的白色半径与代码中的60像素半径相对应。你知道吗
与其求峰值亮度,不如求圆周上360像素亮度的平均值和标准偏差,然后取角度作为亮度大于平均值以上标准偏差数的角度的平均值。这取决于你需要的分辨率/精确度。你知道吗
您还可以将θ索引的圆周围的所有亮度收集到单个360元素数组中,如下所示:
你会得到:
卢克,马苏德解释的是你在轮子上做了标记。这可能是一个小的白色贴纸或一滴油漆。如果你是转换到灰度然后白色将是最好的选择,我。如果是我,我会找到车轮使用霍夫圆和阈值。一旦你有了轮子,创建一个遮罩来移除背景。只剩下轮子了。一旦你让轮子找到最亮的点(应该是白色的贴纸,油漆滴或任何使用的东西),记录它的位置,最好是中心和每个帧做同样的过程,测量位置的变化,并用它来计算角动量。你知道吗
道格
对于提供的帧,不可能跟踪单个辐条,因为所有辐条都具有相同的形状和颜色。跟踪的实际方法是通过物理标记辐条。然后,只要相机有移动,就需要image registration来对齐帧。事后追踪轮辐并不困难。你知道吗
编辑:物理标记可以是轮辐上的色点(为简单起见,请使用图像中唯一的颜色)。然后使用thresholding技术来挑选颜色。你可能需要一些增强来消除噪音。你知道吗
相关问题 更多 >
编程相关推荐