【航迹识别】基于改进的 Hausdorff 距离的DBSCAN船舶异常行为识别附matlab代码

简介: 【航迹识别】基于改进的 Hausdorff 距离的DBSCAN船舶异常行为识别附matlab代码

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

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

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

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

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

⛄ 内容介绍

随着海上交通量的迅猛增长以及海上交通环境日益复杂,船舶在生产活动中产生的时空轨迹也越来越多,如何对船舶异常轨迹进行有效的监控与管理,及时发现异常轨迹,是实现海上智能交通的关键技术之一,而及时发现异常轨迹的前提为获得船舶典型运动轨迹。由于传统的海上交通调查方法费时费力,且效率低下。而基于海量的船载AIS信息集合蕴藏着大量的海上交通特征,从中获取能够反映船舶行为规律的、有效的、潜在的信息,有利于进行海上交通调查获取数据信息。

⛄ 部分代码

clc

close all

clear all

% %%

% global noisenum

% % %% 数据路径

% % path='AIS1246-1.CSV';

% % %% 计算H距离

% % [data1,px,tempMapDis,tempMapV,tempMapHeading]=myHuasdoff(path);

% % Hdist = (tempMapDis + tempMapV + tempMapHeading) / 3;

% % %% 取距离中的较小值

% % for i = 1 : size(Hdist,1)

% %     for j = i + 1 : size(Hdist,2)

% %         max1 = Hdist(i,j);

% %         if max1 < Hdist(j,i)

% %             max1 = Hdist(j,i);

% %         end

% %         Hdist(i,j) = max1;

% %         Hdist(j,i) = max1;

% %     end

% % end

load data.mat

%% 设置聚类参数

eps=0.056;

MinNum=18;

%% DBscan 聚类

cluster_label=DBSCAN(Hdist,eps,MinNum);

%% 计算聚类数

cluster_num=max(cluster_label);

%% 计算轨迹平均位置

meanpos=zeros(length(cluster_label),2);

for i=1:length(cluster_label)

   meanpos(i,1)=mean(data1(data1(:,1)==i,2));

   meanpos(i,2)=mean(data1(data1(:,1)==i,3));

end

%% 画图

% %% plot trace

figure

Plottrace(data1,cluster_label)

title(sprintf(['DBSCAN聚类结果(航迹示意图) \n邻域距离 = ' num2str(eps) ', 最小样本数 = ' num2str(MinNum) '\n航迹类别:' num2str(cluster_num) '类,噪声航迹:' num2str(noisenum) '条']));

xlabel('经度')

ylabel('纬度')

%% plot meanpos

figure

Plotmeanpos(meanpos, cluster_label);

title(sprintf(['DBSCAN聚类结果(航迹平均坐标示意图) \n邻域距离 = ' num2str(eps) ', 最小样本数 = ' num2str(MinNum) '\n航迹类别:' num2str(cluster_num) '类,噪声航迹:' num2str(noisenum) '条']));

xlabel('经度')

ylabel('维度')

% 逐类计数典型轨迹

filename='典型轨迹数据.xlsx';

DXcolor={'black','magenta'};

DXindexlist=[15,36];

Legendslist={'主航道出口船舶典型轨迹','主航道进口船舶典型轨迹'};


for k=1:cluster_num

   data_ind=[];

   temp_trace_ind=find(cluster_label==k);

   for t=1:length(temp_trace_ind)

       data_ind1=find(data1(:,1)==temp_trace_ind(t));

       data_ind=[data_ind;data_ind1];

   end

   %     Legendsname = ['第' num2str(k) '类航迹的典型航迹'];

   Legendsname=Legendslist{k};

   [DXfinalData{k},DXdatanew{k},DXpx{k},DXfData{k},DXMapDis{k},DXMapV{k},DXMapHeading{k}]=DXGJ(data1(data_ind,:),DXcolor{k},Legendsname,DXindexlist(k));

   datawriter(filename,DXfData{k},Legendsname)% end

end


% %%

% addpath '识别数据集'

% filename_train_in1='进口正常行为数据.xlsx';

% filename_train_in0='进口异常行为数据.xlsx';

addpath '正常与异常数据'

filename_train_in1='进口正常轨迹数据.xlsx';

filename_train_in0='进口异常轨迹数据.xlsx';

[data_in1,finalData_in1]=makeData(filename_train_in1);

[data_in0,finalData_in0]=makeData(filename_train_in0);

stepNum=20;

DistThre=linspace(1,250,stepNum);

SogThre=linspace(1,8,stepNum);

CogThre=linspace(1,8,stepNum);

%

% DistThre=1:0.01:250;

DXTrace=DXfData{2};

% ACC_P=[];

% ACC_S=[];

% ACC_C=[];

for i=1:stepNum

   tDistThre=DistThre(i);

   tSogThre=SogThre(i);

   tCogThre=CogThre(i);

   [ACC_P(i),ACC_S(i),ACC_C(i)]=drawErrerRate(finalData_in1,finalData_in0,DXTrace,tDistThre,tSogThre,tCogThre);

end

%%

filename='阈值.xlsx';

data=xlsread(filename);

figure

plot(DistThre,[ACC_P.r],'-gp','DisPlayName','准确率')

hold on

plot(DistThre,1-[ACC_P.r],'-rd','DisPlayName','误警率')

xlabel('位置偏差')

legend

figure

plot(SogThre,[ACC_S.r],'-gp','DisPlayName','准确率')

hold on

plot(SogThre,1-[ACC_S.r],'-rd','DisPlayName','误警率')

xlabel('航速偏差')

legend

figure

plot(CogThre,[ACC_C.r],'-gp','DisPlayName','准确率')

hold on

plot(CogThre,1-[ACC_C.r],'-rd','DisPlayName','误警率')

xlabel('航向偏差')

legend

% 2类:进口 1类出口

global DistThre SogThre CogThre

DistThre=60;

SogThre=2.8;

CogThre=3.8;

addpath '正常与异常数据'

filename_in='验证进口道船舶异常行为.xlsx';

tracetype=input('请选择要验证的船舶类型:1(出口)/ 2(进口)');

try

DXTrace=DXfData{tracetype};

catch

   disp('输入错误')

   return

end

checkTrace(filename_in,DXTrace);

⛄ 运行结果

⛄ 参考文献


⛳️ 代码获取关注我

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


相关文章
|
3月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
191 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
3月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
124 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
3月前
|
机器学习/深度学习 监控 算法
基于深度学习网络的人员行为视频检测系统matlab仿真,带GUI界面
本仿真展示了基于GoogLeNet的人员行为检测系统在Matlab 2022a上的实现效果,无水印。GoogLeNet采用创新的Inception模块,高效地提取视频中人员行为特征并进行分类。核心程序循环读取视频帧,每十帧执行一次分类,最终输出最频繁的行为类别如“乐队”、“乒乓球”等。此技术适用于智能监控等多个领域。
69 4
|
3月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
88 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
|
5月前
|
监控 数据可视化 数据挖掘
利用Matlab进行员工上网行为监控数据处理
使用Matlab处理员工上网行为监控数据,通过导入CSV数据、去除异常值并转换时间戳,进行数据预处理。然后,分析数据以计算每日上网时长并进行可视化,识别员工行为模式,如使用K-means聚类。最后,生成分析报告并自动提交结果至指定网站,提升工作效率并保障数据安全。本文提供具体代码示例,助读者实践操作。
128 2
|
6月前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)
|
6月前
|
算法 调度
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
|
6月前
|
Serverless
基于Logistic函数的负荷需求响应(matlab代码)
基于Logistic函数的负荷需求响应(matlab代码)
|
6月前
|
供应链 算法
基于分布式优化的多产消者非合作博弈能量共享(Matlab代码)
基于分布式优化的多产消者非合作博弈能量共享(Matlab代码)

热门文章

最新文章