Github个人博客:
https://joeyos.github.io
红外弱小目标的检测与跟踪算法主要分为两类:跟踪前检测DBT和检测前跟踪TBD。经典的小目标检测与跟踪方法是DBT,即先根据检测概率和虚警概率计算单帧图像的检测门限,然后对每帧图像进行分割,并将目标的单帧检测结果与目标运动轨迹进行关联,最后进行目标跟踪,适应于信噪比比较高的情况,常用的方法有:小波分析方法、背景抑制法、基于变换的方法、门限检测方法。TBD即对单帧图像中有无目标先不进行判断,而是先对图像中较多的可能轨迹同时进行跟踪,然后根据检测概率、虚警概率和信噪比计算出多帧图像的检测门限进行决策,步骤为:背景抑制-可疑目标跟踪-目标检测。
基于局域概率分布的小目标检测
1) 计算序列图像中某一帧图像个像素点的局域灰度概率值,得到该幅图像的局域概率分布图。
2)设定阈值,提取图像中的孤立奇异点
3)提取目标,驱除噪声
4)剔除伪目标:如果某一奇异点在连续的n内连续出现t次,则认为该奇异点为目标点,否则认为是伪目标。
clear
%生成待检测的图像im1;
im1=0.6*ones(128,128);
im1(80,90)=256;
im1(100,100)=256;
imshow(im1)
% 确定邻域的大小:5×5;
r=2;
k=1;
% 调用编写的函数计算图像的局域灰度概率矩阵;
P=target_detect(im1,r);
figure
mesh(P)
%检测奇异点;
[Pr Pc]=find(P>k/(2*r+1)^2+0.1);
figure
imshow(im1)
hold on
% 在图像im1上标出检测到的奇异点;
for i=1:length(Pr)
plot(Pc(i),Pr(i),'g+')
end
hold on
im2=0.6*ones(128,128);
im2(81,90)=256;
im2(200,200)=256;
r1=1;
k1=1;
% 检测下一帧图像中奇异点位置(上一帧检测到的)附近邻域是否存在奇异点;
P1=target_refine(Pr,Pc,im2,r1);
%确定奇异点的位置;
[Prt Pct]=find(P1>k1/(2*r1+1)^2+0.1);
% 标出最终检测到的小目标
for i=1:length(Prt)
plot(Pct(i),Prt(i),'ro');
end
function P=target_detect(im,r)
% 功能:计算图像局域灰度概率矩阵
% 输入:im-RGB图像 r-局域半径
% 输出:P-局域灰度概率矩阵
% P-图像转换
if size(size(im),2)==3
im=rgb2gray(im);
end
[m,n]=size(im);
local_region=zeros(2*r+1,2*r+1);
% 计算局域概率矩阵
for i=r+1:m-r
for j=r+1:n-r
local_region=im(i-r:i+r,j-r:j+r);
P(i,j)=im(i,j)/sum(sum(local_region));
end
end
function P2=target_refine(Pr,Pc,im2,r1)
% 功能:检测下一帧图像中奇异点位置(上一帧检测到的)附近邻域是否存在奇异点;
local_region1=zeros(2*r1+1,2*r1+1);
P2=zeros(1000,1000);
for i1=1:length(Pr)
for a=Pr(i1)-r1:Pr(i1)+r1
for b=Pc(i1)-r1:Pc(i1)+r1
local_region1=im2(a-r1:a+r1,b-r1:b+r1);
P2(a,b)=im2(a,b)/sum(sum(local_region1));
end
end
end
版权声明:本文为zhangquan2015原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。