✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。
🍎完整代码获取 定制创新 论文复现点击:Matlab科研工作室
👇 关注我领取海量matlab电子书和数学建模资料
🍊个人信条:做科研,博学之、审问之、慎思之、明辨之、笃行之,是为:博学慎思,明辨笃行。
🔥 内容介绍
一、引言
在雷达、声纳等目标探测与跟踪系统中,航迹起始是至关重要的环节。它旨在从众多的观测数据中准确识别出真实目标的初始轨迹,为后续的目标跟踪奠定基础。标准 Hough 变换、修正 Hough 变换和序列 Hough 变换是三种典型的航迹起始算法,各自具有独特的原理和特点。深入研究这三种算法,对于提升航迹起始的准确性和效率具有重要意义。
二、标准 Hough 变换
(一)基本原理
标准 Hough 变换基于点与线在不同空间的对偶性。在图像空间中的一条直线,在 Hough 空间中对应一个点;反之,图像空间中的一个点,在 Hough 空间中对应一条曲线。对于二维平面上的直线方程 y=mx+c(其中 m 为斜率,c 为截距),将其变形为 c=−mx+y。给定图像空间中的一个点 (x0,y0),所有经过该点的直线在 Hough 空间中形成一条直线 c=−mx0+y0。通过对图像空间中所有点进行这样的映射,Hough 空间中交点越多的位置,对应图像空间中经过点越多的直线,这些直线就可能代表目标的航迹。
(二)算法步骤
- 参数空间量化
:将 Hough 空间的斜率 m 和截距 c 划分为离散的区间,形成量化的参数空间。
- 累加器初始化
:设置一个与量化后 Hough 空间对应的累加器数组,初始值均为 0。
- 映射与累加
:遍历图像空间中的每个数据点 (x,y),对于该点,在 Hough 空间中计算其对应的曲线,并在累加器数组中对应位置进行累加。
- 峰值检测
:在累加器数组中寻找峰值,这些峰值对应的参数 (m,c) 即代表可能的航迹直线。
(三)优点与局限性
- 优点
:对噪声和数据缺失具有一定的鲁棒性,能够检测出连续或不连续的直线航迹,原理相对简单,易于实现。
- 局限性
:计算量较大,尤其是在数据点较多时,参数空间的搜索范围广;对斜率为无穷大(垂直直线)的情况需要特殊处理;容易受到虚假目标和杂波的影响,产生过多的虚假航迹。
三、修正 Hough 变换
(一)改进思路
修正 Hough 变换针对标准 Hough 变换的局限性进行改进。为减少计算量,它采用了更合理的参数表示和搜索策略。例如,对于直线表示,使用极坐标形式 ρ=xcosθ+ysinθ(其中 ρ 为原点到直线的垂直距离,θ 为直线法线与 x 轴的夹角),这种表示避免了斜率无穷大的特殊情况,且在参数空间的搜索更为均匀。同时,通过引入一些先验知识或约束条件,如目标运动的大致方向、速度范围等,来缩小参数空间的搜索范围,降低计算复杂度。
(二)算法流程
- 参数空间定义
:确定极坐标形式下 ρ 和 θ 的取值范围,并进行量化。
- 累加器设置与初始化
:构建与量化参数空间对应的累加器,并清零。
- 数据映射与累加
:遍历观测数据点,将每个点 (x,y) 映射到极坐标参数空间,计算对应的 (ρ,θ) 值,并在累加器相应位置累加。
- 利用约束条件筛选
:根据目标运动的先验信息,如速度范围限制航迹的角度变化范围,对累加器中的值进行筛选,去除不符合条件的潜在航迹。
- 检测与确认航迹
:寻找累加器中的峰值,结合筛选条件确定最终的航迹起始参数。
(三)性能提升
相较于标准 Hough 变换,修正 Hough 变换显著降低了计算量,提高了算法的运行效率。通过合理利用先验知识,减少了虚假航迹的产生,增强了对真实航迹的检测能力,尤其在处理复杂背景和大量杂波数据时,表现出更好的性能。
四、序列 Hough 变换
(一)核心思想
序列 Hough 变换基于这样的认识:目标的航迹是一个时间序列上的连续过程。它将航迹起始问题看作是对一系列观测数据进行逐步处理和分析的过程。该算法按照时间顺序依次处理观测数据,每获得一组新的数据,就在已有的处理结果基础上进行更新和判断,逐步确定航迹。这种方法利用了目标运动的连续性和相关性,能够更有效地从连续的观测中提取真实航迹。
(二)具体实现
- 初始处理
:对于初始的观测数据,采用类似标准或修正 Hough 变换的方法进行初步处理,得到一些潜在的航迹起始点或短航迹片段。
- 序列更新
:随着新观测数据的到来,将其与已有的潜在航迹进行关联。通过计算新数据点与潜在航迹的匹配程度(如距离、角度等因素),判断该数据点是否属于已有航迹。如果匹配,则更新航迹参数;如果不匹配,则可能产生新的潜在航迹。
- 航迹确认
:通过设定一定的确认准则,如连续匹配次数、航迹长度等,对潜在航迹进行确认,最终确定真实的航迹起始。
(三)优势与适用场景
序列 Hough 变换充分利用了目标运动的时间序列特性,对目标的连续运动轨迹有很好的跟踪能力,能够在杂波环境中更准确地起始航迹。它适用于目标运动相对平稳、连续性较好的场景,对于实时性要求较高的系统也具有较好的适应性,因为它可以在新数据到来时及时进行处理和更新。
五、三种算法性能对比与分析
(一)实验设置
- 数据生成
:利用仿真软件生成包含不同数量目标、不同程度噪声和杂波的观测数据。设置多种场景,如不同密度的目标分布、不同强度的噪声干扰等。
- 评估指标
:采用航迹起始准确率、虚假航迹率、计算时间等指标来评估三种算法的性能。航迹起始准确率衡量正确起始航迹的比例;虚假航迹率反映产生虚假航迹的情况;计算时间体现算法的运行效率。
(二)结果讨论
- 航迹起始准确率
:在低噪声和少量杂波环境下,标准 Hough 变换、修正 Hough 变换和序列 Hough 变换都能达到较高的航迹起始准确率。然而,随着噪声和杂波的增加,标准 Hough 变换的准确率下降明显,修正 Hough 变换凭借其对参数空间的优化和先验知识的利用,仍能保持较高的准确率,序列 Hough 变换则利用目标运动的连续性,在复杂环境中展现出更好的航迹起始能力,准确率最高。
- 虚假航迹率
:标准 Hough 变换由于对杂波和虚假目标较为敏感,虚假航迹率较高。修正 Hough 变换通过约束条件筛选,有效降低了虚假航迹率。序列 Hough 变换在处理过程中不断根据新数据进行航迹确认,虚假航迹率最低,能更有效地排除虚假目标的干扰。
- 计算时间
:标准 Hough 变换计算量较大,在数据量增多时计算时间显著增加。修正 Hough 变换通过优化参数空间搜索,计算时间明显缩短。序列 Hough 变换虽然需要对每个新数据进行处理,但由于其逐步更新的特性,在实时处理场景下,整体计算时间相对较为稳定,且在数据量较大时,计算时间优势更为明显。
⛳️ 运行结果



📣 部分代码
% L1-regularized least-squares example
%% Generate problem data
randn('seed', 1);
rand('seed',1);
mm = 150; % number of examples
nn = 500; % number of features
% pp = 100/n; % sparsity density
dimension=5;
paras.abstol = 1e-6;
paras.reltol = 1e-4;
aa=[];
alpha= 0;
for ii=1:dimension
m=mm+(ii-1)*150+750;
mmm(ii)=m;
n=nn+(ii-1)*500+2500;
nnn(ii)=n;
fprintf('&$ %3d \\times %3d$',mmm(ii),nnn(ii));
p=100/n;
x0 = sprandn(n,1,p);
A = randn(m,n);
A = A*spdiags(1./sqrt(sum(A.^2))',0,n,n); % normalize columns
b = A*x0 + sqrt(0.001)*randn(m,1);
ATA=A'*A;
[v,d]=eigs(ATA);
eig_AA=max(d(:));
lambda_max = norm( A'*b, 'inf' );
lambda = 0.1*lambda_max;
%% Solve problem
paras.alpha = 0; %% for IDADMM and LSADMM, alpha\in (-1,1)
paras.rho = 1; %% penalty factor
paras.lambda = lambda; %% objective parameter
paras.step = 1.8; %% for the correction step of PCSLM
paras.tau = 0.25; %% for the prediction step of PCSLM
[x2 history2] = lasso_PCSALM(A, b, eig_AA,paras);
[x3 history3] = lasso_IDSADMM(A, b, eig_AA,paras);
[x4 history4] = lasso_LSADMM(A, b,eig_AA,paras);
kk2(ii)=history2.iteration;
tt2(ii)=history2.time;
kk3(ii)=history3.iteration;
tt3(ii)=history3.time;
kk4(ii)=history4.iteration;
tt4(ii)=history4.time;
% result_temp=[result_temp kk3(ii), tt3(ii),kk4(ii), tt4(ii), kk4(ii)/kk3(ii),tt4(ii)/tt3(ii)];
% fprintf(' & %3d(%10.2f) & %3d(%10.2f)&%10.2f(%10.2f)\\\\ \n',...
% kk4(ii), tt4(ii), kk3(ii),tt3(ii), kk4(ii)/kk3(ii), tt4(ii)/tt3(ii));
fprintf(' & %3d(%10.3f)&%3d(%10.3f)&%10.2f(%10.2f)& %3d(%10.3f)&%10.2f(%10.2f)\\\\ \n',...
kk2(ii), tt2(ii),kk4(ii), tt4(ii),kk2(ii)/kk4(ii), tt2(ii)/tt4(ii),kk3(ii),tt3(ii), kk2(ii)/kk3(ii), tt2(ii)/tt3(ii));
end
clear A
clear b
🔗 参考文献
[1]王国宏,苏峰,毛士艺,等.杂波环境下基于Hough变换和逻辑的快速航迹起始算法[J].系统仿真学报, 2002, 14(7):3.DOI:10.3969/j.issn.1004-731X.2002.07.012.
8412

被折叠的 条评论
为什么被折叠?



