本文参考文献:
作者 | 年份 | 论文题目 | 期刊 |
Xiangzhi Bai | 2010 | 《Analysis of new top-hat transformation and the application for infrared dim small target detection》 | Pattern Recognition |
白相志 | 2009 | 新型Top-hat变换及其在红外小目标检测中的应用 |
本文的贡献——
形态学操作:腐蚀erosion与膨胀dilation
膨胀:
对于膨胀,由于取最大值操作,膨胀处理后的图像的灰度值大于原图灰度值,因此膨胀增大原图中的亮区域,填充原图暗区域。
腐蚀:, 其中
表示待处理图像,
表示结构元素.
对于腐蚀,由于取最小值操作,腐蚀处理后的图像的灰度值小于原图灰度值,因此腐蚀增大原图中的暗区域,填充原图亮区域。
形态学操作:开运算opening 与闭运算closing
开运算:
开运算先腐蚀后膨胀,对于尺寸小于结构元素的亮区域会被完全腐蚀,对于尺寸大于结构元素的亮区域,其边缘会被平滑。
闭运算:
闭运算先膨胀后腐蚀,可以消除尺寸小于结构元素的暗的孔洞。
top-hat算法:white top-hat transformation, WTH & black top-hat transformation, BTH
, 得到亮区域 (面积小于结构元素的亮区域后被保留,因为这部分亮区域在开运算中被腐蚀了);
, 得到暗区域 (面积小于结构元素的暗区域被保留,因为这部分暗区域在闭运算的膨胀中被背景覆盖了);
因此,WTH可以检测亮目标,BTH可以检测暗目标。
传统的top-hat算法的开/闭运算中,使用相同的结构元素对原图进行膨胀与腐蚀,存在以下问题:
1. 提出新的结构元素
其中,为环形结构,内环半径由
决定,外环半径由
决定;
为实心结构,半径位于
与
之间。
2. 改变了膨胀、腐蚀的顺序
与WTH相比,NWTH中先膨胀后腐蚀;与BTH相比,NBTH中先腐蚀后膨胀,且使用的结构元素不同。
1. 当时,新top-hat算法不满足
用到了局部信息,引入不确定性,导致输入图像与输出图像的不确定关系,NMTH/NBTH会出现负值,因此引入新的计算:
2. 固定,
越大,算法平滑噪声的性能越好;
3. 若,原图的尺寸会被改变;
4. 若,算法平滑噪声的性能最好,且图像的尺寸不会被改变;
5. 固定,
越大,利用的冗余像素越多,算法平滑噪声的性能越差;
6. 若,且
取最大值,则结构元素相同,算法演变为传统的top-hat算法。
共有3种多尺度操作:
1. 改变的尺寸,
的尺寸不改变
这种方法下,均固定不变,
的一定被
包含,所以,改变
的尺度,只能提取被
覆盖的局部区域的特征。
2. 改变的尺寸,
的尺寸相对不改变
的尺寸相对不变是指:
的尺寸改变多少,
的尺寸也同样改变多少
3. 同时改变和
的尺寸
的尺寸随
改变的同时,可以在
范围内自由增减。
文中,分别就多尺度、new top-hat算法在弱小目标检测的应用、图像噪声抑制效果随与
的尺寸变化作了相应的实验。
多尺度实验
选取morphological alternating sequential filters(ASFs)作为对照算法,对比二者对椒盐噪声的抑制效果。
对比之下,本文的算法不仅可以抑制噪声,而且保留更多的图像细节。
小目标检测
与classic top-hat算法相比,new top-hat算法对背景和噪声的抑制效果能好。
对于亮目标区域,NWTH算法首先使用环状结构膨胀,即以目标邻域像素值覆盖目标区域像素值,然后使用实心结构腐蚀,即取目标邻域的最小值取代目标区域,使用原图与膨胀腐蚀后的图像相减抑制背景与噪声。
在此过程中,膨胀相当于邻域取最大值,腐蚀相当于取被覆盖目标区域的最小值,膨胀选取的半径越大,计算的邻域像素数量越多,引入噪声的风险越大;腐蚀选取的半径越大,对高亮点噪声的平滑能力越强,因此膨胀腐蚀操作后的目标区域像素值被拉低,继而图像相减后,目标得到增强而背景、噪声得到抑制。
(其实原理有点像 取目标区域的最小值/其邻域的最大值,以此增大目标与背景的对比度)
尺寸的变化对图像噪声抑制的影响
结论1:随着的增大,LSBR减小
实验结论显示尺寸越小,目标检测率越高;但由于目标的尺寸有最低限(至少肉眼可分辨),其考虑算法的特性3,4,本文选择
,既能保持图像大小不变,又能最大化腐蚀对平滑噪声的效果。
结论2:随着的增大,LSBR增大
实验中令,实验显示
越大,目标检测率越高;但在实际检测中,须保证
大于目标尺寸,本文令
.
1. 构造矩形环状结构元素
function [SE] = newRingStrel(R_o,R_i)
% 构造矩形环状结构元素
% R_o : the radius of out
% R_i : the radius of inner
% delta_R = R_o - R_i
d = 2 * R_o + 1;
SE = ones(d);
start_index = R_o + 1 - R_i;
end_index = R_o +1 + R_i;
SE(start_index:end_index, start_index:end_index) = 0;
end
2. 复现new top-hat 中的MNWTH
function [out] = MNWTH(img, delta_B, B_b)
% MNWTH算法,检测亮目标
% img: 待检测图像
% delta_B, B_b: 结构元素
if(size(img, 3) > 1)
img = rgb2gray(img);
end
%% 先膨胀
img_d = imdilate(img, delta_B);
%% 后腐蚀
img_e = imerode(img_d, B_b);
%% 图像相减
out = img - img_e;
out(find(out<0)) = 0;
out = mat2gray(out);
end
3. 绘制图像3D灰度图
function [out] = Draw3DGrayGraph(img, isShowLine)
%绘制三维灰度图
% img:输入图像
% isShowLine: 是否显示网格
if (size(img, 3) > 1)
img = rgb2gray(img);
end
[y, x] = size(img);
[X, Y] = meshgrid(1:x, 1:y);
surf(X, Y, img);
% title('3D gray distribution of the whole image')
if ~isShowLine
shading interp;
end
out = 0;
end
4. 实验测试
clc;clear;close all
addpath('../');
img = imread('test.bmp');
R_o = 9;
R_i = 4;
delta_B = newRingStrel(R_o, R_i);
B_b = ones(R_i);
img_MNWTH = MNWTH(img, delta_B, B_b);
subplot(221)
imshow(img);title('orignal image')
subplot(223)
Draw3DGrayGraph(img, 0);
subplot(222)
imshow(img_MNWTH);title('MNWTH result')
subplot(224)
Draw3DGrayGraph(img_MNWTH, 0);