小蜗牛 爬呀爬

预测未来最好的方式就是实现未来

红外图像去坏点总结

红外图像去坏点总结

Blog: https://blog.csdn.net/AnimateX

Email: semi_xiaobai@qq.com

风景如画

1 为什么要去坏点

严重影响成像质量!
因为我们显示时,灰度值会进行压缩,比如坏点的灰度值为10000而其他值都在2000左右,带来的后果就是整体图像偏暗。

2 目前硬件上的去坏点做法

  1. 先整帧检测坏点,判断并标记坏点,直接用整帧均值进行坏点替换
  2. 先整帧检测坏点,判断并标记坏点,利用图像的四邻域均值进行坏点替换
  3. 先整帧检测坏点,判断并标记坏点,利用图像的八邻域均值进行坏点替换

考虑速度和质量的影响,一般采用第二种方法,或者在第二种方法的基础上进行行列上的进一步扩展。第三种方法也可以再FPGA平台实时。这里只讲第三种方法如何实现,大家要先看前面我讲的两点校正算法,知道我们如果要去坏点,要经过两个过程,第一个过程是增益校正系数A的坏点抑制。第二个过程是第一个过程的进一步检测和优化。参考下面步骤

  1. 先对增益校正系数矩阵A进行坏点去除,A的范围根据实际情况进行设置或者对周边的15领域进行自适应判定,如果A不在该阈值范围内,则标记为坏点。然后用周边8(或15)邻域的均值进行替换,具体如果出现坏块的情况,这种方法无法有效去除。如果不影响效果,可以用平坦区或者整帧均值进行替换也可以。
  2. 在step1的基础上进行校正,检测图像的坏点是否存在,如果不存在,可以不进行进一步处理。如果部分坏点依然存在,则需要在进行第二次坏点去除,同样设置上下灰度阈值,检测坏点是否在双阈值范围内。如果不在则标记为坏点,并用周边邻域的均值进行坏点值替换。

Code


function imgOut = RemoveBadPoint( object )
% 本函数仅针对灰度图像!!!!
    [M, N, num] = size( object );
    imgOut = zeros(M, N, num);

    for i = 1 : num
        flag = 0;
        Temp = object(:, :, i);
        % 先标记无法通过后续手段处理的坏点
        Temp( isnan( Temp(:) ) == 1 ) = flag;
        Temp( isinf( Temp(:) ) == 1 ) = flag;

        % Pre process
        Min = min( Temp(:) );
        Temp = Temp - Min .* ones(M, N);

        avgTemp = mean( Temp(:) );
        % 针对不同图像 XXX 需要自己设置
        th = avgTemp * XXX;
        tl = avgTemp * XXX;

        for s = 1 : M
            for t = 1: N
                if Temp(s, t) > th
                    Temp(s, t) = flag;
                elseif Temp(s, t) < tl
                    Temp(s, t) = flag;
                end
            end
        end

        TempNew = padarray(Temp, [1 1], 'replicate');

        for k = 2 : M + 1
            for l = 2 : N + 1
                judge = TempNew(k-1 : k+1, l-1 : l+1);
                % bad point
                bp  = find(judge == flag);
                gp  = find(judge ~= flag);
                % number of good point
                nbp = 9 - numel(bp);
                if TempNew(k, l) == flag
                    if nbp > 0
                        TempNew(k, l) = sum( judge(gp) ) / nbp;
                    else
                        TempNew(k, l) = avgTemp;
                    end
                end
            end
        end
        imgOut(:, :, i) = TempNew(2 : M+1, 2 : N+1);

    end
end
阅读更多
文章标签: 图像去坏点
想对作者说点什么? 我来说一句

dpc 去坏点

2013年01月10日 216KB 下载

红外图像的处理及其MATLAB实现

2012年03月12日 592KB 下载

没有更多推荐了,返回首页

不良信息举报

红外图像去坏点总结

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭