如何用MATLAB进行预测跟踪呢?
一、定位粒子位置
你想要对图像中的粒子进行定位和跟踪。在MATLAB里面,图像可以是任何格式的(.jpg , .tif , etc.),但是你要想很好的定位你期望的特征,此处,使用的定位功能 要与使用的算法兼容。根据经验,你要能够通过眼睛定位大量的点。
这里有一副图像,图像上白色区域上有很多胶体粒子。想要读取,显示,查询这幅图像,请键入以下MATLAB命令符:
>>a=double(imread('test.jpg'));
>>colormap('gray'),imagesc(a);
>>whos a
上面的图片对于定位来说是很完美的,然而想要定位的恰当,粒子与背景相比就要更加明亮。如果你的图像和上述图形很像,那就请跟着下面的步骤走。如果那些粒子 在黑色背景上已经很明亮,那就跳过这步。
>>a=255-a;
>>colormap('gray'),imagesc(a);
现在,我们要使用一个宏。首先,我们要对这幅图像进行空间滤波。要完成这个,请输入以下命令:
>>b=bpass(a,1,10);
>>colormap('gray'),image(b);
bpass是使图像平滑并减去背景的空间带通滤波器。这两个数字是以像素为单位的空间滤波长截止值。第一个参数通常总设置为“1”。第二个数字应该是你想要在像素 里面找的“blob”直径。尝试几个值,然后使用一个能够给你最好效果的那个值。
接下来是识别bpass已经找到的blob作为特征。你可能需要先使用宏pkfnd.
>>pk=pkfnd(b,60,11);
这里给出的所有峰的位置都是阈值高于此处给出的值60。这个数字将取决于你最终的带通图像的外观。一种大致的估计明显特征的方法如下所示:
>>max(max(b)
这里给出的第二个数字11,大致是以像素为单位的平均要素的直径。这个参数对于噪音来说是有帮助的。如果你有噪音数据,请阅读pkfnd里面的前言。对于整个代码 而言,确定你阅读了完整的文档。
>>cnt=cntrd(b,pk,15)
>>whos cnt
这些基本上就是,你成功的定位了,或者预先跟踪了单张图片。既然你会了单张图像的,那你肯定会多张图像的了。你需要了解关于for循环更多的知识来完成这项工 作。
为了确保你已经找到特征子像素的精度,请查阅IDL教程(点击打开链接)。检查子像素特征位置的命令特别简单,如下所示:
>>hist(mod(cnt(:,1),1),20);
这将导致x位置的模数为1的直方图,如果你有足够的特征,并且它们不是单像素偏置,则该直方图应该看起来比较平坦。
二、将粒子位置和前面的轨迹连接起来
如果你所使用的数据集包含x、y,甚至z轴,那么你可以根据时间的变化进行粒子位置跟踪。如果你使用IDL进行跟踪,那么转换到MATLAB应该非常简单,因为宏是IDL 版本的副本。
首先,你应该阅读track的文档。这对于你将你的位置列表转换为要求的格式很重要。一旦你做了这些,你就会非常的清楚。只需要调用适合你的参数轨迹。这里有个 例子:
>>tr=track(pos_lst,3);
pos_lst是要被考虑垂直连接的每个帧的粒子位置和时间戳的列表。通过在函数调用中传递一个附加结构、参数,你可以调整在跟踪中的重要参数:
>>tr=track(pos_lst,3,param);
阅读track的文档了解更多的参数,打开文档的命令为:
>>help track
注:文中所需函数的代码可以在参考链接里面下载到。
参考链接: