红外弱小目标检测:常见的评价指标

本文总结红外弱小目标检测领域论文中经常出现的算法评价指标,并对部分评价指标用MATLAB实现。

目前总结的评价指标最为常见,像检测率、ROC曲线这些都要基于大量的实验才能得到数据,进而绘制表格或曲线对算法进行客观评价。(所以,有好的idea,一定要尽快做实验呀!)

本文代码全部原创,若有不足之处,欢迎指正。


常见的评价指标(evaluation metrics)

一、检测率P_d与虚警率F_a

检测率P_d与虚警率F_a的定义如图1.

红外弱小目标检测:常见的评价指标_第1张图片

                                                                                 图1 检测率P_d与虚警率F_a,摘自[1]

关于检测率P_d的理解:

  1. 单帧图像中,拍摄到M个目标,正确检测出N个目标,则P_d=\frac{N}{M};
  2. 图像序列中,拍摄到多个目标或目标出现多次,假设目标共出现M次,目标被正确检测出N次,则P_d=\frac{N}{M}

关于虚警率F_a的理解:

  1. 单帧图像中,若所有目标被正确检出,则虚警率为0;
  2. 图像序列中,图像共N帧,检测出的误检的数量为F,则F_a=\frac{F}{N}。 

怎样的检测结果才可以被看作是“true detection“?

必须同时满足两个条件:

  1. 检测结果与图像中的真实目标有重叠(have overlap pixels);
  2. 检测结果的中心像素位置与真实目标的中心像素位置相差不超过一定的范围,文献[1]中阈值为4 pixels。

二、信噪比(Signal-to-Clutter Ratio,  SCR)

2.1 SCR定义

SCR=\frac{ |\mu_t-\mu_b|}{ \sigma_b}  ……………… 公式(1)

式中,\mu_t表示目标的像素平均值,\mu_b, \quad \sigma_b分别表示目标周围背景的像素平均值和像素标准差。

红外弱小目标检测:常见的评价指标_第2张图片

                                                                图2 目标及其邻域示意图,摘自[1],其中d的大小不超过20个像素

2.2 MATLAB 计算SCR

2.2.1 绘制弱小目标的三维灰度图

在阅读文献时,经常可以看到目标的三维灰度图,作者通过展示目标增强前与增强后,或背景抑制前和抑制后的三维灰度图来直观地向读者呈现其算法的效果。

此外绘制目标的三维灰度图也可以直观的感受目标的SCR。所以,我们先来学习如何绘制目标的三维灰度图。

补充说明,绘制目标的三维灰度图有两种选择:

(1)有些文章会选择绘制整张图的三维灰度图,然后用箭头—>标示出目标的“峰值”;

(2)也可以选择绘制目标的局部区域,观察目标的局部对比度是否得到了增强。

这里给出分别给出两种方式的MATLAB代码与图例。

%% 绘制图像的三维灰度图
img1 = imread('images/1.jpg');
if (size(img1,3) > 1)
    img1 = rgb2gray(img1);
end
subplot(221)
imshow(img1);title('原图');
sub_img1 = img1(68:88,99:119);   % 这里需要人工选择目标区域位置及大小
subplot(222)
imshow(sub_img1);title('目标局部图像 20*20');

subplot(223)
[y,x] = size(img1);
[X,Y] = meshgrid(1:x, 1:y);
surf(X, Y, img1);title('全局三维灰度图');
shading interp;

subplot(224)
[sub_y, sub_x] = size(sub_img1);
[sub_X, sub_Y] = meshgrid(1:sub_x, 1:sub_y);
surf(sub_X, sub_Y, sub_img1);title('局部三维灰度图');
shading interp;

红外弱小目标检测:常见的评价指标_第3张图片

                                                                         图3 含弱小目标的红外图像的全局三维灰度图与局部三维灰度图

2.2.2 求目标的SCR

  1. 本文给出的代码只适用于灰度图;
  2. 参考计算模型如图2.
function scr = CalculateSCR(img, pos, t_size, d)
%% 功能说明:计算弱小目标的SCR
%% 参数说明: img -- 原图像
%            pos -- 目标在原图像中的位置
%            t_size = [a,b]-- 目标尺寸
%            d -- 目标邻域半径,最终计算的目标及其局部区域的大小为(2d+a)*(2d+b)
   
    % 1. 转灰度图
    if(size(img,3)>1)
        img = rgb2gray(img);
    end
    
    % 2. 目标大小为a*b
    a = t_size(1);
    b = t_size(2);
    T = img(ceil(pos(1)-b/2):ceil(pos(1)+b/2), ceil(pos(2)-a/2):ceil(pos(2)+a/2));
    
    % 3. 目标与其周围邻域,大小为(a+2d)*(b+2d) 
    B = img(ceil(pos(1)-b/2-d):ceil(pos(1)+b/2+d), ceil(pos(2)-a/2-d):ceil(pos(2)+a/2+d));
    B(d:d+b,d:d+a) = 0;
    
    % 4. 分别显示目标图与背景图
    figure
    imshow(T);title('Target');
    figure
    imshow(B);title('Background');
    
    % 5. 分别计算目标的灰度均值、背景的灰度均值与标准差
    T_avg = mean(T(:));
    B_avg = sum(B(:)) / ((a+2*d)*(b+2*d) - a*b);
    size(B)
    B_1 = B(1:d,:);
    B_2 = B(a+d+1:a+2*d,:);
    B_3 = B(d+1:d+a, 1:d);
    B_4 = B(d+1:d+a, d+b+1: 2*d+b);
    
    B_final = [B_1(:)',B_2(:)',B_3(:)',B_4(:)'];
    size(B_final);
    B_std = std(double(B_final));
    
    % 6. 计算SCR
    scr = abs(T_avg - B_avg)/B_std;
end

红外弱小目标检测:常见的评价指标_第4张图片

                                                                图4 原图、目标图与局部背景图,

                              这里原图大小为(150,200),手动选择的目标位置为pos=(80,108),目标尺寸为t_size=(4,4),d = 10.

三、平均信噪比(Average SCR, \overline{SCR})

当(1)一张图中含有多个目标;(2)图像序列中含有多个目标时,目标的平均信杂比来评估多目标检测的难度与算法的性能。

平均信杂比的定义为:      \overline{SCR} = \frac{1}{N} \sum^{N}_{i=1}{ SCR_i}   ……………………公式(2)

式中,N表示目标的数量;SCR_i表示第i个目标的信杂比。

文献[1]中,还使用\overline{SCR_d},\quad\overline{SCR_l} 分别表示被检测的真实目标与未被检测出的真实目标的平均信杂比。通常,在检测虚警率确定的情况下,\overline{SCR_d},\quad\overline{SCR_l}越小,算法的检测性能越好。

四、ROC曲线

弱小目标检测中的ROC曲线与机器学习中的ROC曲线定义略微不同。

弱小目标检测中的ROC曲线,以虚警率(false-rate, FA)为横轴,以检测率(Probability of detection, PD)为纵轴(FA,PD的定义见第一部分)。

通常,虚警率相同的情况下,检测率越高,则算法的性能越好。

红外弱小目标检测:常见的评价指标_第5张图片

                                                                                               图5 不同算法的ROC曲线对比,摘自[1]

绘制ROC曲线并不难,难点在于需要通过实验获取数据——不同算法的在相同虚警率下的检测率。

这里给出MATLAB绘制折线图的简单示例,包含一些小技巧:设置x, y轴的间隔;设置线宽与线的样式;设置x, y坐标轴描述

x = 0:0.5:15;

%% 这里需要替换为实验结果
Pd_1 = 1 - exp(-x) ;
Pd_2 = 1 - exp(-1/2*x);

% 设置显示样式与线宽LineWidth
plot(x, Pd_1, '-ob', 'LineWidth', 2);
hold on
plot(x, Pd_2, '-*r', 'LineWidth', 1);

% 设置坐标轴范围
axis([0,15,0,1]);
% 设置坐标轴范围及间隔
set(gca, 'XTick', [0:5:15]);
set(gca, 'YTick', [0:0.1:1]);

% 显示图例
legend('method_1', 'method_2');

% 显示坐标轴描述与标题
xlabel('False-rate, F_a');
ylabel('Probability of detection, P_d');
title('不同算法的ROC曲线');

红外弱小目标检测:常见的评价指标_第6张图片

                                                                                                      图6 ROC示例图

参考文献

[1]   C. Gao et al., “Infrared Patch-Image Model for Small Target Detection in a Single Image,” vol. 22, no. 12, pp. 4996–5009, 2013.

你可能感兴趣的:(红外弱小目标检测,图像处理,matlab,机器学习,神经网络)