为啥在 Matlab 中没有使用 KLT 跟踪来跟踪特征?

Posted

技术标签:

【中文标题】为啥在 Matlab 中没有使用 KLT 跟踪来跟踪特征?【英文标题】:Why no feature is being tracked using KLT-tracking in Matlab?为什么在 Matlab 中没有使用 KLT 跟踪来跟踪特征? 【发布时间】:2015-05-01 12:25:31 【问题描述】:

我正在尝试使用 Kanade-Lucas-Tomasi (KLT) 算法跟踪两帧之间的一些特征(使用多尺度哈里斯检测器提取),使用您可以找到的函数 here (Mathworks documentation)。

我不明白出了什么问题。没有一个点可以被跟踪。我尝试增加迭代次数并更改特征周围窗口的大小,但结果始终相同,没有跟踪任何特征。

是不是数据有问题(图片分辨率太低(240x180像素))?

是所选功能有问题吗?

这是我正在使用的两张图片:

这是我的代码:

img = single(imread('img.png'));
end_img = single(imread('end_img.png'));

coord_first = [24,21;25,97;29,134;37,25;37,55;37,64;38,94;38,103;40,131;41,139;43,14;44,22;44,54;44,63;46,93;46,101;47,111;49,131;49,140;52,166;55,52;62,151;76,51;78,89;81,151;81,165;83,13;92,165;111,18;111,96;155,42;155,62;155,81;155,100;156,129;163,133;168,126;170,40;170,65;172,26;173,134;174,59;174,84;174,103;174,116;175,73;178,97;186,142;186,149;190,119;190,132;194,75;209,99;210,42;210,66;212,133;212,152;215,61;215,79;218,119];

% display of the target image and all the features I want to track
figure
imshow(img,[]), 
colormap gray
hold on
plot(coord_first(:,1), coord_first(:,2), 'r*');

% point tracker creation
% the paramters reported here are the default ones
pointTracker = vision.PointTracker('MaxIterations', 30, 'BlockSize', [31,31]);
% point tracker initialization
initialize(pointTracker,coord_first,img);

% actual tracking
[coord_end, point_validity] = step(pointTracker, end_img);

% display of all the correctly tracked featrures
figure
imshow(end_img,[]), 
colormap gray
hold on
plot(coord_end(point_validity,1), coord_end(point_validity,2), 'r*');

【问题讨论】:

size(pointTracker)size(coord_end)size(point_validity)多少钱? size(pointTracker)size(coord_end)size(point_validity)分别是[1 , 1][60 , 2][60, 1] 【参考方案1】:

其实我刚刚解决了这个问题。当然,问题在于没有跟踪任何点。

问题是输入中给出的图像必须具有 [0, 1] 中的灰度值,而不是 [0, 255] 中的灰度值(正如我所做的那样)。

一旦数据以正确的方式传递(至少在我的这些低分辨率灰度图像的情况下),就不需要调整任何参数。

【讨论】:

啊,我明白了。顺便说一句,无需将图像转换为singlevision.PointTracker 可以直接拍摄uint8 图片。在这种情况下,[0 255] 范围就可以了。【参考方案2】:

检查point_validity 的内容。如果points_validity 的所有元素都是假的,那么您将看不到任何点。如果是这样的话,下一个问题是为什么没有跟踪积分。

对于这种大小的图像,请尝试将'NumPyramidLevels' 设置为 1。

【讨论】:

以上是关于为啥在 Matlab 中没有使用 KLT 跟踪来跟踪特征?的主要内容,如果未能解决你的问题,请参考以下文章

干货 | OpenCV中KLT光流跟踪原理详解与代码演示

使用光流的汽车跟踪。为啥向量不能正确绘制

为啥我的分类数组时间中的年份没有在 Matlab 中正确转换?

为啥 appcenter 分析没有立即显示跟踪来自 android 应用程序的事件?

为啥默认配置的spring webflux中没有异常堆栈跟踪?

为啥我装了matlab,windowa系统变量没有matlab的