NLEM算法图像去噪源码程序

function  imgDenoised  =   NLEM(imgNoisy, h, P, S)


[m, n] = size(imgNoisy);

N  = 2*P + 1;
h2 = h * h;

kNN = ceil ( (2*S + 1)^2 / 2 ); % top 50% of the neighbors used 

imgPad  = padarray(imgNoisy, [P P], 'symmetric');

imgDenoised = zeros(m,n);

fprintf('Looping over pixels....\n');
for i = 1 : m 
    ii = i + P;
    for j = 1 : n
        jj = j + P;
        
        patchRef = imgPad(ii - P : ii + P, jj - P : jj + P);  
        
        pmin = max(i - S, 1) + P;
        qmin = max(j - S, 1) + P;
        pmax = min(i + S, m) + P;
        qmax = min(j + S, n) + P;
        
        s1 = pmax - pmin + 1;
        s2 = qmax - qmin + 1;
        
        w  =  zeros(s1, s2);
        neighborPatches =  zeros(s1, s2, N^2);
        patchCurrent    =  zeros(2*P + 1, 2*P + 1);
        patch           =  zeros(N, N);  %#ok<*NASGU>
        
        u = 0;
        for p = pmin : pmax
            u = u + 1;
            v = 0;
            for q = qmin : qmax
                v = v + 1;
                patchCurrent = imgPad(p - P : p + P, q - P : q + P);
                d2 = sum(sum( (patchRef - patchCurrent) ...
                    .* (patchRef - patchCurrent) ));
                w(u, v)  =  exp(- d2 / h2);
                patch  =  imgPad(p - P : p + P, q - P : q + P);
                neighborPatches(u, v, :) = reshape(patch, [N^2  1]);
            end
        end
        
        % sort weights
        w  = reshape(w, [s1*s2  1]);
        [w , I] = sort(w, 'descend');
        
        L = min(kNN, s1*s2);  
        
        f       =  reshape(neighborPatches, [s1*s2   N^2])';
        median  =  findEuclideanMedian(f(: , I(1 : L)), w(1 : L));
        patch_est  =  reshape(median, [N  N]);
        imgDenoised(i, j) =  patch_est(P + 1, P + 1);
    end
end
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值