急需,用MATLAB实现视频图像车辆计数的代码!!!

急需,用MATLAB实现视频图像车辆计数的代码!!!,第1张

这已经是商用级别的产品了,5点积分,还是想多了,

还是 RMB 实际一点

1 图像识别,识别出一辆车/车牌

2图像跟踪,跟踪车辆到移除屏幕

3多目标跟踪,识别多个目标,进行跟踪,计数

我只能说用Python 可以比较方便的实现上述功能 神经网络+多目标跟踪 毕竟有现成的框架和算法,自己写也就2个星期,找外包没个 几万RMB 怕是不行哦

我给你一个标准遗传算法程序供你参考:

该程序是遗传算法优化BP神经网络函数极值寻优:

%% 该代码为基于神经网络遗传算法的系统极值寻优

%% 清空环境变量

clc

clear

%% 初始化遗传算法参数

%初始化参数

maxgen=100; %进化代数,即迭代次数

sizepop=20; %种群规模

pcross=[04]; %交叉概率选择,0和1之间

pmutation=[02]; %变异概率选择,0和1之间

lenchrom=[1 1]; %每个变量的字串长度,如果是浮点变量,则长度都为1

bound=[-5 5;-5 5]; %数据范围

individuals=struct('fitness',zeros(1,sizepop), 'chrom',[]); %将种群信息定义为一个结构体

avgfitness=[]; %每一代种群的平均适应度

bestfitness=[]; %每一代种群的最佳适应度

bestchrom=[]; %适应度最好的染色体

%% 初始化种群计算适应度值

% 初始化种群

for i=1:sizepop

%随机产生一个种群

individualschrom(i,:)=Code(lenchrom,bound);

x=individualschrom(i,:);

%计算适应度

individualsfitness(i)=fun(x); %染色体的适应度

end

%找最好的染色体

[bestfitness bestindex]=min(individualsfitness);

bestchrom=individualschrom(bestindex,:); %最好的染色体

avgfitness=sum(individualsfitness)/sizepop; %染色体的平均适应度

% 记录每一代进化中最好的适应度和平均适应度

trace=[avgfitness bestfitness];

%% 迭代寻优

% 进化开始

for i=1:maxgen

i

% 选择

individuals=Select(individuals,sizepop);

avgfitness=sum(individualsfitness)/sizepop;

%交叉

individualschrom=Cross(pcross,lenchrom,individualschrom,sizepop,bound);

% 变异

individualschrom=Mutation(pmutation,lenchrom,individualschrom,sizepop,[i maxgen],bound);

% 计算适应度

for j=1:sizepop

x=individualschrom(j,:); %解码

individualsfitness(j)=fun(x);

end

%找到最小和最大适应度的染色体及它们在种群中的位置

[newbestfitness,newbestindex]=min(individualsfitness);

[worestfitness,worestindex]=max(individualsfitness);

% 代替上一次进化中最好的染色体

if bestfitness>newbestfitness

bestfitness=newbestfitness;

bestchrom=individualschrom(newbestindex,:);

end

individualschrom(worestindex,:)=bestchrom;

individualsfitness(worestindex)=bestfitness;

avgfitness=sum(individualsfitness)/sizepop;

trace=[trace;avgfitness bestfitness]; %记录每一代进化中最好的适应度和平均适应度

end

%进化结束

%% 结果分析

[r c]=size(trace);

plot([1:r]',trace(:,2),'r-');

title('适应度曲线','fontsize',12);

xlabel('进化代数','fontsize',12);ylabel('适应度','fontsize',12);

axis([0,100,0,1])

disp('适应度 变量');

x=bestchrom;

% 窗口显示

disp([bestfitness x]);

这个情况的可能性很多。根据您的描述前几回运行正常后几回就无法再运行。我认为可能是法度榜样运行后没有将变量清空比如i的初始值应当是1运行几回今后i的初始值变了进入了逝世轮回。你可以尝尝在法度榜样开首附上clear语句并用调试不雅察轮回部分变量值的变更情况。假如不可请将问题描述更具体一些。

试过了还不可是吗吗之前可以之后不可的原因我能想到的只是法度榜样的常量变量的初值变更了。具体的还须要你本身设置断点慢慢调试不雅察了。欲望对你有赞助啊

从你给出的形式看,这是一个非常简单的线性规划题,只要把偏差量理解成x3-x10即可:

% 目标规划

% x3 = d1-, x7 = d1+

% x4 = d2-, x8 = d2+

% x5 = d3-, x9 = d3+

% x6 = d4-, x10 = d4+

f = zeros(10, 1);

f([7 8]) = [2 3];

A = -eye(10);

b = zeros(10, 1);

A1 = [1 1; 1 0; 5 3; 1 1];

A2 = [eye(4) -eye(4)];

A3 = zeros(1, 10);

A3(5) = 1;

Aeq = [A1 A2; A3];

beq = [10; 4; 56; 12; 0];

x = linprog(f,A,b,Aeq,beq)

但是,目标规划的偏差变量应该始终满足 d+ d- = 0,所以,还应该补充4个非线性约束,考虑用linprog的结果作为初值,然后调用fmincon进行规划:

% 目标规划

% x3 = d1-, x7 = d1+

% x4 = d2-, x8 = d2+

% x5 = d3-, x9 = d3+

% x6 = d4-, x10 = d4+

function zd581643424

f = zeros(10, 1);

f([7 8]) = [2 3];

A = -eye(10);

b = zeros(10, 1);

A1 = [1 1; 1 0; 5 3; 1 1];

A2 = [eye(4) -eye(4)];

A3 = zeros(1, 10);

A3(5) = 1;

Aeq = [A1 A2; A3];

beq = [10; 4; 56; 12; 0];

x0 = linprog(f,A,b,Aeq,beq);

x = fmincon(@obj,x0,A,b,Aeq,beq,[],[],@nlc)

function f = obj(x)

f = 2  x(7) + 3  x(8);

function [c, ceq] = nlc(x)

c = [];

ceq = x(3:6)  x(7:10);

得到的结果是(由于是数值计算,计算得到的结果并不是严格的整数,根据数量级作适当的舍入):

x1=4

x2=12

d1+ = 6

d4+ = 4

其余为0。

另外,MATLAB中提供了用于多目标优化的函数fgoalattain,但是这个函数怎样和楼主现在的问题形式联系起来,我一时之间没想明白(好多年没接触目标规划了),时间精力所限,就不深入研究了,仅提供这么一个线索,供参考。

在这篇文章中,我们将介绍如何使用通过 MultiTracker 类实现的 OpenCV 的多对象跟踪 API。我们将共享C++ 和 Python 代码。

大多数计算机视觉和机器学习的初学者都学习对象检测。如果您是初学者,您可能会想为什么我们需要对象跟踪。我们不能只检测每一帧中的对象吗?

让我们来探究一下跟踪是有用的几个原因。

首先,当在视频帧中检测到多个对象(例如人)时,跟踪有助于跨帧建立对象的身份。

其次,在某些情况下,对象检测可能会失败,但仍可能跟踪对象,因为跟踪考虑了对象在前一帧中的位置和外观。

第三,一些跟踪算法非常快,因为它们做的是局部搜索,而不是全局搜索。因此,我们可以通过每n帧进行目标检测,并在中间帧中跟踪目标,从而为我们的系统获得很高的帧率。

那么,为什么不在第一次检测后无限期地跟踪对象呢?跟踪算法有时可能会丢失它正在跟踪的对象。例如,当对象的运动太大时,跟踪算法可能跟不上。许多现实世界的应用程序同时使用检测和跟踪。

在本教程中,我们只关注跟踪部分。我们想要跟踪的对象将通过拖动它们周围的包围框来指定。

OpenCV 中的 MultiTracker 类提供了多目标跟踪的实现。它是一个简单的实现,因为它独立处理跟踪对象,而不对跟踪对象进行任何优化。

让我们逐步查看代码,了解如何使用 OpenCV 的多目标跟踪 API。

21 第 1 步:创建单一对象跟踪器

多目标跟踪器只是单目标跟踪器的集合。我们首先定义一个函数,该函数接受一个跟踪器类型作为输入,并创建一个跟踪器对象。OpenCV有8种不同的跟踪器类型:BOOSTING, MIL, KCF,TLD, MEDIANFLOW, GOTURN, MOSSE, CSRT。

如果您想使用 GOTURN 跟踪器,请务必阅读这篇文章并下载 caffe 模型。

在下面的代码中,给定跟踪器类的名称,我们返回跟踪器对象。这将在稍后用于多目标跟踪器。

Python

C++

22 第 2 步:读取视频的第一帧

多目标跟踪器需要两个输入

给定这些信息,跟踪器在所有后续帧中跟踪这些指定对象的位置。 在下面的代码中,我们首先使用 VideoCapture 类加载视频并读取第一帧。这将在稍后用于初始化 MultiTracker。

Python

C++

23 第 3 步:在第一帧中定位对象

接下来,我们需要在第一帧中定位我们想要跟踪的对象。该位置只是一个边界框。 OpenCV 提供了一个名为 selectROI 的函数,该函数会d出一个 GUI 来选择边界框(也称为感兴趣区域 (ROI))。 在 C++ 版本中,selectROI 允许您获取多个边界框,但在 Python 版本中,它只返回一个边界框。所以,在 Python 版本中,我们需要一个循环来获取多个边界框。 对于每个对象,我们还选择一种随机颜色来显示边界框。 代码如下所示。

Python

C++

getRandomColors 函数相当简单

24 第 3 步:初始化 MultiTracker

到目前为止,我们已经读取了第一帧并获得了对象周围的边界框。这就是我们初始化多目标跟踪器所需的所有信息。

我们首先创建一个 MultiTracker 对象,并向其中添加与边界框一样多的单个对象跟踪器。在此示例中,我们使用 CSRT 单对象跟踪器,但您可以通过将下面的 trackerType 变量更改为本文开头提到的 8 个跟踪器之一来尝试其他跟踪器类型。 CSRT 跟踪器不是最快的,但在我们尝试的许多情况下它产生了最好的结果。

您还可以使用包裹在同一个 MultiTracker 中的不同跟踪器,但当然,这没什么意义。

MultiTracker 类只是这些单个对象跟踪器的包装器。正如我们从上一篇文章中知道的那样,单个对象跟踪器是使用第一帧初始化的,并且边界框指示我们想要跟踪的对象的位置。 MultiTracker 将此信息传递给它在内部包装的单个对象跟踪器。

Python

C++

25 第 4 步:更新 MultiTracker 并显示结果

最后,我们的 MultiTracker 已准备就绪,我们可以在新帧中跟踪多个对象。我们使用 MultiTracker 类的 update 方法来定位新框架中的对象。每个跟踪对象的每个边界框都使用不同的颜色绘制。

Python

C++

C++

Python

状态预测(位置、速度等)的准不准,影响了目标之间能否正确匹配(目标编号)。

上图是多目标跟踪的一个例子,有效跟踪范围为x=0到x=200之间, 红线 表示卡尔曼滤波的 初始化 更新 阶段, 绿线 表示 预测 阶段。

当t=1时,

当t=2时,

当t=3时,

当t=4时,

当t=5时,

当t=6时,

由上述分析可知,卡尔曼滤波算法对多目标的状态进行估计,匈牙利算法对多目标进行匹配,实现多目标跟踪。

参考 >

以上就是关于急需,用MATLAB实现视频图像车辆计数的代码!!!全部的内容,包括:急需,用MATLAB实现视频图像车辆计数的代码!!!、跪求一份多目标优化遗传算法 matlab源代码,不甚感激。邮 箱991882239、matlab运行一个目标跟踪程序的时候程序跑几次就无法再运行只能重启才能继续运行这个程序如何回事等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9307809.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存