域适应算法
㈠ 视觉追踪的典型算法
(1)基于区域的跟踪算法
基于区域的跟踪算法基本思想是:将目标初始所在区域的图像块作为目标模板,将目标模板与候选图像中所有可能的位置进行相关匹配,匹配度最高的地方即为目标所在的位置。最常用的相关匹配准则是差的平方和准则,(Sum of Square Difference,SSD)。
起初,基于区域的跟踪算法中所用到的目标模板是固定的,如 Lucas 等人提出 Lucas-Kanade 方法,该方法利用灰度图像的空间梯度信息寻找最佳匹配区域,确定目标位置。之后,更多的学者针对基于区域方法的缺点进行了不同的改进,如:Jepson 等人提出的基于纹理特征的自适应目标外观模型[18],该模型可以较好的解决目标遮挡的问题,且在跟踪的过程中采用在线 EM 算法对目标模型进行更新;Comaniciu 等人[19]提出了基于核函数的概率密度估计的视频目标跟踪算法,该方法采用核直方图表示目标,通过 Bhattacharya 系数计算目标模板与候选区域的相似度,通过均值漂移(MeanShift)算法快速定位目标位置。
基于区域的目标跟踪算法采用了目标的全局信息,比如灰度信息、纹理特征等,因此具有较高的可信度,即使目标发生较小的形变也不影响跟踪效果,但是当目标发生较严重的遮挡时,很容易造成跟踪失败。
(2)基于特征的跟踪方法
基于特征的目标跟踪算法通常是利用目标的一些显着特征表示目标,并通过特征匹配在图像序列中跟踪目标。该类算法不考虑目标的整体特征,因此当目标被部分遮挡时,仍然可以利用另一部分可见特征完成跟踪任务,但是该算法不能有效处理全遮挡、重叠等问题。
基于特征的跟踪方法一般包括特征提取和特征匹配两个过程:
a) 特征提取
所谓特征提取是指从目标所在图像区域中提取合适的描绘性特征。这些特征不仅应该较好地区分目标和背景,而且应对目标尺度伸缩、目标形状变化、目标遮挡等情况具有鲁棒性。常用的目标特征包括颜色特征、灰度特征、纹理特征、轮廓、光流特征、角点特征等。D.G. Lowe 提出 SIFT(Scale Invariant Feature Transform)算法[20]是图像特征中效果较好的一种方法,该特征对旋转、尺度缩放、亮度变化具有不变性,对视角变化、仿射变换、噪声也具有一定的稳定性。
b) 特征匹配
特征匹配就是采用一定的方式计算衡量候选区域与目标区域的相似性,并根据相似性确定目标位置、实现目标跟踪。在计算机视觉领域中,常用的相似性度量准则包括加权距离、Bhattacharyya 系数、欧式距离、Hausdorff 距离等。其中,Bhattacharyya 系数和欧式距离最为常用。
Tissainayagam 等人提出了一种基于点特征的目标跟踪算法[21]。该算法首先在多个尺度空间中寻找局部曲率最大的角点作为关键点,然后利用提出的MHT-IMM 算法跟踪这些关键点。这种跟踪算法适用于具有简单几何形状的目标,对于难以提取稳定角点的复杂目标,则跟踪效果较差。
Zhu 等人提出的基于边缘特征的目标跟踪算法[22],首先将参考图像划分为多个子区域,并将每个子区域的边缘点均值作为目标的特征点,然后利用类似光流的方法进行特征点匹配,从而实现目标跟踪。
(3)基于轮廓的跟踪方法
基于轮廓的目标跟踪方法需要在视频第一帧中指定目标轮廓的位置,之后由微分方程递归求解,直到轮廓收敛到能量函数的局部极小值,其中,能量函数通常与图像特征和轮廓光滑度有关。与基于区域的跟踪方法相比,基于轮廓的跟踪方法的计算复杂度小,对目标的部分遮挡鲁棒。但这种方法在跟踪开始时需要初始化目标轮廓,因此对初始位置比较敏感,跟踪精度也被限制在轮廓级。
Kass 等人[23]于 1987 年提出的活动轮廓模型(Active Contour Models,Snake),通过包括图像力、内部力和外部约束力在内的三种力的共同作用控制轮廓的运动。内部力主要对轮廓进行局部的光滑性约束,图像力则将曲线推向图像的边缘,而外部力可以由用户指定,主要使轮廓向期望的局部极小值运动,。
Paragios 等人[24]提出了一种用水平集方法表示目标轮廓的目标检测与跟踪算法,该方法首先通过帧差法得到目标边缘,然后通过概率边缘检测算子得到目标的运动边缘,通过将目标轮廓向目标运动边缘演化实现目标跟踪。
(4)基于模型的跟踪方法[25]
在实际应用中,我们需要跟踪的往往是一些特定的我们事先具有认识的目标,因此,基于模型的跟踪方法首先根据自己的先验知识离线的建立该目标的 3D 或2D 几何模型,然后,通过匹配待选区域模型与目标模型实现目标跟踪,进而在跟踪过程中,根据场景中图像的特征,确定运动目标的各个尺寸参数、姿态参数以及运动参数。
Shu Wang 等人提出一种基于超像素的跟踪方法[26],该方法在超像素基础上建立目标的外观模板,之后通过计算目标和背景的置信图确定目标的位置,在这个过程中,该方法不断通过分割和颜色聚类防止目标的模板漂移。
(5)基于检测的跟踪算法
基于检测的跟踪算法越来越流行。一般情况下,基于检测的跟踪算法都采用一点学习方式产生特定目标的检测器,即只用第一帧中人工标记的样本信息训练检测器。这类算法将跟踪问题简化为简单的将背景和目标分离的分类问题,因此这类算法的速度快且效果理想。这类算法为了适应目标外表的变化,一般都会采用在线学习方式进行自更新,即根据自身的跟踪结果对检测器进行更新。
㈡ LMS自适应算法分析及在数字滤波器设计中的应用
自适应过程一般采用典型LMS自适应算法,但当滤波器的输入信号为有色随机过程时,特别是当输入信号为高度相关时,这种算法收敛速度要下降许多,这主要是因为输入信号的自相关矩阵特征值的分散程度加剧将导致算法收敛性能的恶化和稳态误差的增大。此时若采用变换域算法可以增加算法收敛速度。变换域算法的基本思想是:先对输入信号进行一次正交变换以去除或衰减其相关性,然后将变换后的信号加到自适应滤波器以实现滤波处理,从而改善相关矩阵的条件数。因为离散傅立叶变换�DFT本身具有近似正交性,加之有FFT快速算法,故频域分块LMS�FBLMS算法被广泛应用。
FBLMS算法本质上是以频域来实现时域分块LMS算法的,即将时域数据分组构成N个点的数据块,且在每块上滤波权系数保持不变。其原理框图如图2所示。FBLMS算法在频域内可以用数字信号处理中的重叠保留法来实现,其计算量比时域法大为减少,也可以用重叠相加法来计算,但这种算法比重叠保留法需要较大的计算量。块数据的任何重叠比例都是可行的,但以50%的重叠计算效率为最高。对FBLMS算法和典型LMS算法的运算量做了比较,并从理论上讨论了两个算法中乘法部分的运算量。本文从实际工程出发,详细分析了两个算法中乘法和加法的总运算量,其结果为:
复杂度之比=FBLMS实数乘加次数/LMS实数乘加次数=(25Nlog2N+2N-4)/[2N(2N-1)]�
采用ADSP的C语言来实现FBLMS算法的程序如下:
for(i=0;i<=30;i++)
{for(j=0;j<=n-1;j++)
{in[j]=input[i×N+j;]
rfft(in,tin,nf,wfft,wst,n);
rfft(w,tw,wf,wfft,wst,n);
cvecvmlt(inf,wf,inw,n);
ifft(inw,t,O,wfft,wst,n);
for(j=0,j<=N-1;j++)
{y[i×N+j]=O[N+j].re;
e[i×N+j]=refere[i×N+j]-y[i×N+j];
temp[N+j]=e[i×N+j;}
rfft(temp,t,E,wfft,wst,n);
for(j=0;j<=n-1;j++)
{inf_conj[j]=conjf(inf[j]);}��
cvecvmlt(E,inf_conj,Ein,n);
ifft(Ein,t,Ein,wfft,wst,n);
for(j=0;j<=N-1;j++)
{OO[j]=Ein[j].re;
w[j]=w[j]+2*u*OO[j];}��
}
在EZ-KIT测试板中,笔者用汇编语言和C语言程序分别测试了典型LMS算法的运行速度,并与FBLMS算法的C语言运行速度进行了比较,表2所列是其比较结果,从表2可以看出滤波器阶数为64时,即使是用C语言编写的FBLMS算法也比用汇编编写的LMS算法速度快20%以上,如果滤波器的阶数更大,则速度会提高更多。
㈢ 【高分悬赏】用C/C++语言设计一个适应算法(最先、最佳或最坏适应算法)
考的是内存的动态划分区域内容,很好写啊
1.可以用数字来模拟内存区域划分情况,比如建一个100大小的数组(结构为struc (区号,值),值为0表示空闲,值为1表示占用,初始化几个已确定占有的分区,分区一,1-5 占有,6-12 空闲,。。。。。。。,并建立空闲区域表,很简单,从头到尾对数组扫描下就知道了
2.最先适应:从内存开始地址找到第一个大于请求大小的连续空闲区域,如请求5个空间,那就在刚开始6-12空闲处建立分区二 ,6-11 ,占用
3.最佳适应:指所有空闲块最适应请求大小的那块,min(空闲块大小-请求大小)
4.最坏:指适应请求大小,且最大的那块空闲区域