【目标检测】基于帧间差法实现视频目标检测和轨迹分析附matlab代码和GUI界面

简介: 【目标检测】基于帧间差法实现视频目标检测和轨迹分析附matlab代码和GUI界面

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信      无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机

⛄ 内容介绍

运动目标检测算法是从视频图像序列中提取感兴趣目标的一项技术,是目标分类、目标跟踪、目标行为等其他视频分析技术的前提条件,也是机器视觉和数字图像处理所研究的重点问题之一,因此对实时视频的运动目标检测算法的研究有着重要的研究价值和意义。

⛄ 部分代码

function [Xpoints1, Ypoints1, Xpoints2, Ypoints2, tms, yc] = ProcessVideo(videoFilePath)

if nargin < 1

   videoFilePath = fullfile(pwd, 'video/video.avi');

end

% clc; clear all; close all;

% videoFilePath = fullfile(pwd, 'video/video.avi');

time_start = cputime;

[pathstr, name, ext] = fileparts(videoFilePath);

foldername = fullfile(pwd, sprintf('%s_images', name));

T = 1;

P = 5;

W1 = [75 95];

L1 = [360 17];

W2 = [55 55];

L2 = [35 1565];

Xpoints1 = [];

Ypoints1 = [];

Xpoints2 = [];

Ypoints2 = [];

Xpointst1 = [];

Ypointst1 = [];

Xpointst2 = [];

Ypointst2 = [];

figure('Position', get(0, 'ScreenSize'));

hg1 = subplot(1, 2, 1);

hg2 = subplot(1, 2, 2);

for frame = 1:146

   filename = fullfile(foldername, sprintf('%04d.jpg', frame));

   R = imread(filename);

   Imi = R;

   xc1 = 0;

   yc1 = 0;

   xc2 = 0;

   yc2 = 0;

   if frame > 72

       I = rgb2hsv(Imi);

       I = I(:,:,1);

       I = roicolor(I, 0.1, 0.17);

       MeanConverging1 = 1;

       while MeanConverging1

           M00 = 0.0;

           for i = L1(1)-P : (L1(1)+W1(1)+P)

               for j = L1(2)-P : (L1(2)+W1(2)+P)

                   if i > size(I,1) || j > size(I,2) || i < 1 || j < 1

                       continue;

                   end

                   M00 = M00 + double(I(i,j));

               end

           end

           M10 = 0.0;

           for i = L1(1)-P : (L1(1)+W1(1)+P)

               for j = L1(2)-P : (L1(2)+W1(2)+P)

                   if i > size(I,1) || j > size(I,2) || i < 1 || j < 1

                       continue;

                   end

                   M10 = M10 + i * double(I(i,j));

               end

           end

           M01 = 0.0;

           for i = L1(1)-P : (L1(1)+W1(1)+P)

               for j = L1(2)-P : (L1(2)+W1(2)+P)

                   if i > size(I,1) || j > size(I,2)|| i < 1 || j < 1

                       continue;

                   end

                   M01 = M01 + j * double(I(i,j));

               end

           end

           xc1 = round(M10 / M00);

           yc1 = round(M01 / M00);

           oldL = L1;

           L1 = [floor(xc1 - (W1(1)/2)) floor(yc1 - (W1(2)/2))];

           if abs(oldL(1)-L1(1)) < T || abs(oldL(2)-L1(2)) < T

               MeanConverging1 = 0;

           end

       end

       s = round(1.1 * sqrt(M00));

       W1 = [ s floor(1.2*s) ];

       L1 = [floor(xc1 - (W1(1)/2)) floor(yc1 - (W1(2)/2))];

       Xpoints1 = [Xpoints1 xc1];

       Ypoints1 = [Ypoints1 yc1];

       yc1t = yc1+randi(2,1,1)*25;

       xc1t = xc1+randi(2,1,1)*25;

       Xpointst1 = [Xpointst1 xc1t];

       Ypointst1 = [Ypointst1 yc1t];

   else

       Xpoints1 = [Xpoints1 NaN];

       Ypoints1 = [Ypoints1 NaN];

       Xpointst1 = [Xpointst1 NaN];

       Ypointst1 = [Ypointst1 NaN];

   end

   if frame > 90 && frame < 146

       R = Imi;

       I = rgb2ycbcr(R);

       I = I(:,:,1);

       I = mat2gray(I);

       I = roicolor(I, 0.05, 0.3);

       MeanConverging2 = 1;

       while MeanConverging2

           M00 = 0.0;

           M00 = 0.0;

           for i = L2(1)-P : (L2(1)+W2(1)+P),

               for j = L2(2)-P : (L2(2)+W2(2)+P),

                   if i > size(I,1) || j > size(I,2) || i < 1 || j < 1

                       continue;

                   end

                   M00 = M00 + double(I(i,j));

               end

           end

           M10 = 0.0;

           for i = L2(1)-P : (L2(1)+W2(1)+P),

               for j = L2(2)-P : (L2(2)+W2(2)+P),

                   if i > size(I,1) || j > size(I,2) || i < 1 || j < 1

                       continue;

                   end

                   M10 = M10 + i * double(I(i,j));

               end

           end

           M01 = 0.0;

           for i = L2(1)-P : (L2(1)+W2(1)+P),

               for j = L2(2)-P : (L2(2)+W2(2)+P),

                   if i > size(I,1) || j > size(I,2)|| i < 1 || j < 1

                       continue;

                   end

                   M01 = M01 + j * double(I(i,j));

               end

           end

           xc2 = round(M10 / M00);

           yc2 = round(M01 / M00);

           oldL = L2;

           L2 = [floor(xc2 - (W2(1)/2)) floor(yc2 - (W2(2)/2))];

           if abs(oldL(1)-L2(1)) < T || abs(oldL(2)-L2(2)) < T

               MeanConverging2 = 0;

           end

       end

       s = round(1.1 * sqrt(M00));

       W2 = [ s      floor(1.2*s) ];

       L2 = [floor(xc2 - (W2(1)/2)) floor(yc2 - (W2(2)/2))];

       Xpoints2 = [Xpoints2 xc2];

       Ypoints2 = [Ypoints2 yc2];

       yc2t = yc2+randi(2,1,1)*25;

       xc2t = xc2+randi(2,1,1)*25;

       Xpointst2 = [Xpointst2 xc2t];

       Ypointst2 = [Ypointst2 yc2t];

   else

       Xpoints2 = [Xpoints2 NaN];

       Ypoints2 = [Ypoints2 NaN];

       Xpointst2 = [Xpointst2 NaN];

       Ypointst2 = [Ypointst2 NaN];

   end

   axes(hg1); cla;

   imshow(Imi, []); hold on;

   if xc1 > 0 && yc1 > 0

       plot(yc1, xc1, 'go', 'MarkerFaceColor', 'g');

       plot(yc1t, xc1t, 'g+', 'MarkerFaceColor', 'g');

   end

   if xc2 > 0 && yc2 > 0

       plot(yc2, xc2, 'bo', 'MarkerFaceColor', 'b');

       plot(yc2t, xc2t, 'b+', 'MarkerFaceColor', 'b');

   end

   hold off; title(sprintf('%04d帧', frame));

   bg = true(size(Imi,1), size(Imi,2));

   axes(hg2); cla; imshow(bg);

   hold on; box on;

   plot(Ypoints1, Xpoints1, 'go-', 'MarkerFaceColor', 'g');

   plot(Ypoints2, Xpoints2, 'bo-', 'MarkerFaceColor', 'b');

   hold off; title(sprintf('%04d帧', frame));

   pause(0.001);

end

time_end = cputime;

tms = time_end - time_start;

yc.Xpointst1 = Xpointst1;

yc.Ypointst1 = Ypointst1;

yc.Xpointst2 = Xpointst2;

yc.Ypointst2 = Ypointst2;

⛄ 运行结果

⛄ 参考文献

[1] 张学荣, 雷国伟. 基于灰度直方图的背景差目标检测算法[J]. 计算机安全, 2010(02):45-47.

[2] 张学荣. 直方图在视频监控系统中的应用[J]. 电脑知识与技术, 2009, 005(030):8520-8521.

[3] 戴鑫, 黄愐, 张进. 帧间差法在视频目标检测的仿真应用[J]. 电子技术与软件工程, 2021, 000(021):P.110-111.

[4] 邱祯艳. 基于实时视频的运动目标检测算法[D]. 中国计量学院.

⛳️ 代码获取关注我

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料


相关文章
|
20天前
|
传感器 算法 vr&ar
六自由度Stewart控制系统matlab仿真,带GUI界面
六自由度Stewart平台控制系统是一种高精度、高稳定性的运动模拟装置,广泛应用于飞行模拟、汽车驾驶模拟、虚拟现实等领域。该系统通过六个独立的线性致动器连接固定基座与移动平台,实现对负载在三维空间内的六个自由度(三维平移X、Y、Z和三维旋转-roll、pitch、yaw)的精确控制。系统使用MATLAB2022a进行仿真和控制算法开发,核心程序包括滑块回调函数和创建函数,用于实时调整平台的位置和姿态。
|
1月前
|
存储 算法 数据可视化
基于 MATLAB的GUI信号处理界面设计 源码+运行截图
基于 MATLAB的GUI信号处理界面设计 源码+运行截图
62 2
|
1月前
|
监控 算法 数据安全/隐私保护
基于三帧差算法的运动目标检测系统FPGA实现,包含testbench和MATLAB辅助验证程序
本项目展示了基于FPGA与MATLAB实现的三帧差算法运动目标检测。使用Vivado 2019.2和MATLAB 2022a开发环境,通过对比连续三帧图像的像素值变化,有效识别运动区域。项目包括完整无水印的运行效果预览、详细中文注释的代码及操作步骤视频,适合学习和研究。
|
1月前
|
算法 决策智能
基于禁忌搜索算法的VRP问题求解matlab仿真,带GUI界面,可设置参数
该程序基于禁忌搜索算法求解车辆路径问题(VRP),使用MATLAB2022a版本实现,并带有GUI界面。用户可通过界面设置参数并查看结果。禁忌搜索算法通过迭代改进当前解,并利用记忆机制避免陷入局部最优。程序包含初始化、定义邻域结构、设置禁忌列表等步骤,最终输出最优路径和相关数据图表。
|
1月前
|
编解码 算法 数据安全/隐私保护
基于BP译码的LDPC误码率matlab仿真,分析码长,码率,信道对译码性能的影响,对比卷积码,turbo码以及BCH码
本程序系统基于BP译码的LDPC误码率MATLAB仿真,分析不同码长、码率、信道对译码性能的影响,并与卷积码、Turbo码及BCH编译码进行对比。升级版增加了更多码长、码率和信道的测试,展示了LDPC码的优越性能。LDPC码由Gallager在1963年提出,具有低复杂度、可并行译码等优点,近年来成为信道编码研究的热点。程序在MATLAB 2022a上运行,仿真结果无水印。
57 0
|
2月前
|
算法 数据可视化
基于SSA奇异谱分析算法的时间序列趋势线提取matlab仿真
奇异谱分析(SSA)是一种基于奇异值分解(SVD)和轨迹矩阵的非线性、非参数时间序列分析方法,适用于提取趋势、周期性和噪声成分。本项目使用MATLAB 2022a版本实现从强干扰序列中提取趋势线,并通过可视化展示了原时间序列与提取的趋势分量。代码实现了滑动窗口下的奇异值分解和分组重构,适用于非线性和非平稳时间序列分析。此方法在气候变化、金融市场和生物医学信号处理等领域有广泛应用。
128 19
|
2月前
|
算法 数据挖掘 vr&ar
基于ESTAR指数平滑转换自回归模型的CPI数据统计分析matlab仿真
该程序基于ESTAR指数平滑转换自回归模型,对CPI数据进行统计分析与MATLAB仿真,主要利用M-ESTAR模型计算WNL值、P值、Q值及12阶ARCH值。ESTAR模型结合指数平滑与状态转换自回归,适用于处理经济数据中的非线性趋势变化。在MATLAB 2022a版本中运行并通过ADF检验验证模型的平稳性,适用于复杂的高阶自回归模型。
|
3月前
|
算法 测试技术 SoC
基于直流潮流的IEEE30电力系统停电分布及自组织临界性分析matlab仿真
本研究提出一种基于直流潮流的算法来分析电力系统的停电分布及自组织临界性。算法迭代更新参数并模拟线路随机断开,运用粒子群优化计算关键值,并评估线路接近容量极限的概率。通过改变参数β和μ,分析不同线路可靠性和容量增加方式下的停电分布,并探索系统趋向临界状态的过程及停电概率分布。该方法基于IEEE30测试系统,利用MATLAB2022a实现,简化处理有功功率流动,适用于评估电力系统稳定性及预防大规模停电事故。
|
3月前
|
存储 算法 Serverless
【matlab】matlab基于DTW和HMM方法数字语音识别系统(源码+音频文件+GUI界面)【独一无二】
【matlab】matlab基于DTW和HMM方法数字语音识别系统(源码+音频文件+GUI界面)【独一无二】
|
3月前
|
算法
蜂窝网络下行链路的覆盖率和速率性能matlab仿真分析
此程序在MATLAB2022a环境下运行,基于随机几何模型评估蜂窝网络的下行链路覆盖率和速率性能。通过模拟不同场景下的基站(BS)配置与噪声情况,计算并绘制了各种条件下的信号干扰加噪声比(SINR)阈值与覆盖率概率的关系图。结果显示,在考虑噪声和不同基站分布模型时,覆盖率有显著差异,提出的随机模型相较于传统网格模型更为保守但也更加贴合实际基站的分布情况。

热门文章

最新文章

下一篇
无影云桌面