【目标检测】基于帧间差法实现视频目标检测和轨迹分析附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电子书和数学建模资料


相关文章
|
2天前
|
算法
基于小波变换和峰值搜索的光谱检测matlab仿真,带GUI界面
本程序基于小波变换和峰值搜索技术,实现光谱检测的MATLAB仿真,带有GUI界面。它能够对CO2、SO2、CO和CH4四种成分的比例进行分析和提取。程序在MATLAB 2022A版本下运行,通过小波分解、特征提取和峰值检测等步骤,有效识别光谱中的关键特征点。核心代码展示了光谱数据的处理流程,包括绘制原始光谱、导数光谱及标注峰值位置,并保存结果。该方法结合了小波变换的时频分析能力和峰值检测的敏锐性,适用于复杂信号的非平稳特性分析。
|
1月前
|
机器学习/深度学习 监控 算法
基于yolov4深度学习网络的排队人数统计系统matlab仿真,带GUI界面
本项目基于YOLOv4深度学习网络,利用MATLAB 2022a实现排队人数统计的算法仿真。通过先进的计算机视觉技术,系统能自动、准确地检测和统计监控画面中的人数,适用于银行、车站等场景,优化资源分配和服务管理。核心程序包含多个回调函数,用于处理用户输入及界面交互,确保系统的高效运行。仿真结果无水印,操作步骤详见配套视频。
54 18
|
1月前
|
算法 人机交互 数据安全/隐私保护
基于图像形态学处理和凸包分析法的指尖检测matlab仿真
本项目基于Matlab2022a实现手势识别中的指尖检测算法。测试样本展示无水印运行效果,完整代码含中文注释及操作视频。算法通过图像形态学处理和凸包检测(如Graham扫描法)来确定指尖位置,但对背景复杂度敏感,需调整参数PARA1和PARA2以优化不同手型的检测精度。
|
2月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于yolov4深度学习网络的公共场所人流密度检测系统matlab仿真,带GUI界面
本项目使用 MATLAB 2022a 进行 YOLOv4 算法仿真,实现公共场所人流密度检测。通过卷积神经网络提取图像特征,将图像划分为多个网格进行目标检测和识别,最终计算人流密度。核心程序包括图像和视频读取、处理和显示功能。仿真结果展示了算法的有效性和准确性。
88 31
空心电抗器的matlab建模与性能仿真分析
空心电抗器是一种无铁芯的电感元件,通过多层并联导线绕制而成。其主要作用是限制电流、滤波、吸收谐波和提高功率因数。电抗器的损耗包括涡流损耗、电阻损耗和环流损耗。涡流损耗由交变磁场引起,电阻损耗与电抗器半径有关,环流损耗与各层电流相关。系统仿真使用MATLAB2022a进行。
|
2月前
|
编解码 算法 数据安全/隐私保护
基于BP译码的LDPC误码率matlab仿真,分析不同码长,码率,迭代次数以及信道类型对译码性能的影响
本内容介绍基于MATLAB 2022a的低密度奇偶校验码(LDPC)仿真,展示了完整的无水印仿真结果。LDPC是一种逼近香农限的信道编码技术,广泛应用于现代通信系统。BP译码算法通过Tanner图上的消息传递实现高效译码。仿真程序涵盖了不同Eb/N0下的误码率计算,并分析了码长、码率、迭代次数和信道类型对译码性能的影响。核心代码实现了LDPC编码、BPSK调制、高斯信道传输及BP译码过程,最终绘制误码率曲线并保存数据。 字符数:239
83 5
|
2月前
|
供应链 算法 调度
排队算法的matlab仿真,带GUI界面
该程序使用MATLAB 2022A版本实现排队算法的仿真,并带有GUI界面。程序支持单队列单服务台、单队列多服务台和多队列多服务台三种排队方式。核心函数`func_mms2`通过模拟到达时间和服务时间,计算阻塞率和利用率。排队论研究系统中顾客和服务台的交互行为,广泛应用于通信网络、生产调度和服务行业等领域,旨在优化系统性能,减少等待时间,提高资源利用率。
|
6月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
272 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
6月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
162 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
6月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
138 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码

热门文章

最新文章