MATLAB里得粒子滤波代码存储库

来源:互联网 发布:cydia点击软件源闪退 编辑:程序博客网 时间:2024/04/30 12:36

如何用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

注:文中所需函数的代码可以在参考链接里面下载到。

参考链接:

http://site.physics.georgetown.edu/matlab/

http://site.physics.georgetown.edu/matlab/tutorial.html

0 0
原创粉丝点击