atand 结果分布的奇怪模式
Strange pattern on atand results distribution
我有粒子轨迹,是在图像序列(20 个粒子,3500 帧)上跟踪它们后获得的。我需要获得这些粒子的速度矢量角度分布。每个帧上粒子的位置存储在矩阵 tracksX
和 tracksY
中,每个矩阵为 3500x20。这是我正在使用的代码:
speedX = diff(tracksX);
speedY = diff(tracksY);
angles = atand(speedY./speedX);
anglesh = angles(:);
figure(1); hist(anglesh,360);
但是,我在直方图上得到一个奇怪的对称模式,在 [-0.5, 0] bin 中有一个巨大的峰值,在 [0, 0.5] bin 中有零角度。
我没有足够的代表来添加图像,所以这里是 link Weird distribution figure
会不会是因为 Matlab 执行了一些舍入?如何解决?
粒子运动有点随机,倾向于在 X 方向移动,对应于 0° - 20° 区间,所以我非常怀疑这种模式是否会出现在初始数据中。
让我猜猜:位置以像素为单位,并且粒子在时间点之间不会移动很多像素?
您看到的是一堆离散化伪像。
- 0 处的峰值反映了静止或向右移动的像素
- 峰值在 +/- 45 度和 90 度反射粒子移动一个像素 up/down 或沿对角线移动。
- 移动的更多峰值,例如右边 2 个,顶部 1 个
根据您的数据,您也许可以对粒子位置进行一些拟合以估计亚像素定位(尽管您应该小心地正确设置它以避免像素锁定),或者您可以人为地使用更大的时间步长(例如,取第 1-4、第 2-5、第 3-6 个时间点之间的差异来制作直方图)使这看起来更合理。
我有粒子轨迹,是在图像序列(20 个粒子,3500 帧)上跟踪它们后获得的。我需要获得这些粒子的速度矢量角度分布。每个帧上粒子的位置存储在矩阵 tracksX
和 tracksY
中,每个矩阵为 3500x20。这是我正在使用的代码:
speedX = diff(tracksX);
speedY = diff(tracksY);
angles = atand(speedY./speedX);
anglesh = angles(:);
figure(1); hist(anglesh,360);
但是,我在直方图上得到一个奇怪的对称模式,在 [-0.5, 0] bin 中有一个巨大的峰值,在 [0, 0.5] bin 中有零角度。 我没有足够的代表来添加图像,所以这里是 link Weird distribution figure
会不会是因为 Matlab 执行了一些舍入?如何解决? 粒子运动有点随机,倾向于在 X 方向移动,对应于 0° - 20° 区间,所以我非常怀疑这种模式是否会出现在初始数据中。
让我猜猜:位置以像素为单位,并且粒子在时间点之间不会移动很多像素?
您看到的是一堆离散化伪像。
- 0 处的峰值反映了静止或向右移动的像素
- 峰值在 +/- 45 度和 90 度反射粒子移动一个像素 up/down 或沿对角线移动。
- 移动的更多峰值,例如右边 2 个,顶部 1 个
根据您的数据,您也许可以对粒子位置进行一些拟合以估计亚像素定位(尽管您应该小心地正确设置它以避免像素锁定),或者您可以人为地使用更大的时间步长(例如,取第 1-4、第 2-5、第 3-6 个时间点之间的差异来制作直方图)使这看起来更合理。