1 为什么要进行帧间降噪
1.1 红外图像噪声分类
1 时域噪声
2 空域噪声
先谈时间噪声。顾名思义,随着时间变化也会发生变化的噪声即时域噪声。也就是随着图像的帧数的增加,图像中的目标可能会产生模糊或者拖影的情况,如何滤除这个拖尾和模糊的情况也就是我们要如何去除时域噪声。
1.2 去除时域噪声的优点
如前所述,要滤除时域上的噪声我们就需要做运动检测,检测运动物体,最典型、最简单的做法就是使用帧间差分去实现。帧间差分的思想:“如果场景(帧)内没有运动目标,则连续帧的变化很微弱,如果存在运动目标,则连续的帧和帧之间会有明显地变化”。帧间差分比较典型的又有两帧差分或者三帧差分。这里先考虑两帧差分。
如图1所示,为帧间差分的流程。
2 帧间差分理论
如图1所示,第n+1帧图像和第n帧图像,分别表示为前帧和后帧图像。这里用
f
f
表示图像矩阵,表示位置在
(i,j)
(
i
,
j
)
的像素点。主要计算公式如公式1和公式2所示。
通过公式(1)和公式(2)计算运动点,并作出相应的处理。如果针对可见光,则直接判定‘移动’后做二值化处理,再做连通性分析,最后再进行判定。
2 总结
FPGA上对图像进行时域滤波,需要实现的是无拖尾,图像不模糊。这需要很高的阈值作为基础。但是这就会造成弱目标(移动缓慢、像素值变化不大)的像素点移动无法识别。如果考虑弱目标的移动,降低阈值,则会导致拖影现象。总体来讲,在时域上有一定的滤波作用。
Code
function imgOut = MFNR( imgIn )
[M, N, num] = size( imgIn );
flag = XX;
imgOut = zeros(M, N, num);
imgOut(:, :, 1) = imgIn(:, :, 1);
for i = 2 : num
temp = zeros(M, N);
bFrame = imgIn(:, :, i - 1);
aFrame = imgIn(:, :, i);
differ = abs( aFrame - bFrame );
sp = find(differ < XX);
mp = find(differ >= XX);
temp(sp) = (aFrame(sp) + bFrame(sp)) / 2;
temp(mp) = aFrame(mp);
imgOut(:, :, i) = temp;
end
end