1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/ZJWUlp1v
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
meanshift算法其实通过名字就可以看到该算法的核心,mean(均值),shift(偏移),简单的说,也就是有一个点 ,它的周围有很多个点 我们计算点 移动到每个点 所需要的偏移量之和,求平均,就得到平均偏移量,(该偏移量的方向是周围点分布密集的方向)该偏移量是包含大小和方向的。然后点 就往平均偏移量方向移动,再以此为新的起点不断迭代直到满足一定条件结束。
Camshift它是MeanShift算法的改进,称为连续自适应的MeanShift算法,CamShift算法的全称是"Continuously Adaptive Mean-SHIFT",它的基本思想是视频图像的所有帧作MeanShift运算,并将上一帧的结果(即Search Window的中心和大小)作为下一帧MeanShift算法的Search Window的初始值,如此迭代下去。
4.部分源码
.........................................................................
PIX = VideoReader('vedios.avi');
PIX_Size = [PIX.Width,PIX.Height];
Num_Frame = floor(PIX.Duration * PIX.FrameRate);
Start_frame = 120;
I0 = read(PIX,Start_frame);
[jishu,rect,a,b,m_wei,C,hist1,y,trace_x,trace_y] = select(I0);
for Frm = Start_frame:Num_Frame
Frm
Im = read(PIX,Frm);
jishu = jishu+1;
num = 0;
Y = [2,2];
%将前一的结果作为下一次的初始值
[rect,M00] = func_meanshift(Y,Im,rect,a,b,num,m_wei,C,hist1,y);
windowsize = 2 * (M00/256)^.5;
sidelength = sqrt(windowsize);
v1=rect(1);
v2=rect(2);
v3=rect(3)+sidelength;
v4=rect(4)+sidelength;
trace_x = [trace_x v1 + v3/2];
trace_y = [trace_y v2 + v4/2];
%显示跟踪结果
figure(2);
imshow(uint8(Im))
hold on;
plot([v1,v1+v3],[v2,v2],[v1,v1],[v2,v2+v4],[v1,v1+v3],[v2+v4,v2+v4],[v1+v3,v1+v3],[v2,v2+v4],'LineWidth',2,'Color','y')
if jishu>2
plot(trace_x(1:jishu-1),trace_y(1:jishu-1),'LineWidth',2,'Color','g');
end
end
10_027_m