CS-NLR 学习笔记(三)——块匹配

CS-NLR算法利用块匹配来利用图像的相似结构进行图像处理。NonLocalMeans作为块匹配的一种,不仅考虑块的相似度,还考虑它们在图像上的相对位置。核心函数包括NonLocalMean、MakeKernel以及计算PSNR的CaculatePSNR。通过理解NonLocalMeans,可以更好地掌握块匹配算法的原理。
摘要由CSDN通过智能技术生成

图像自身有很多相似性的结构:例如大块单色、规整的边缘等
块匹配利用了这种相似结构进行平均或滤波,可以较好的还原图片

利用块匹配较为出名的算法有:NonLocal Means、BM3D等

CS_NLR算法中作者给出的块匹配函数如下:

function  pos_arr   =  Block_matching(im, par)
% im读入图片, par是一个参数结构体,里面含有提前设置好的参数
S         =   20;
f         =   par.win;
% par.win 是块匹配的大小
f2        =   f^2;
s         =   par.step;
% par.step 是块匹配移动的步长
% 在CS_NLR算法中step = min{par.win-1, 6}

N         =   size(im,1)-f+1;
M         =   size(im,2)-f+1;
r         =   [1:s:N];
% r是每一块行的索引值
r         =   [r r(end)+1:N];
c         =   [1:s:M];
% c是每一块列的索引值
c         =   [c c(end)+1:M];
L         =   N*M;
X         =   zeros(f*f, L, 'single');

k    =  0;
for i  = 1:f
    for j  = 1:f
        k    =  k+1;
        blk  =  im(i:end-f+i,j:end-f+j);
        X(k,:) =  blk(:)';
        % X(k, :)是第k块,这个块在原来图片中的位置为[i:i+6, j:j+6]
    end
end

% Index image
I     =   (1:L);
I     =   reshape(I, N, M);
N1    =   length(r);
M1    =   length(c);
pos_arr   =  zeros(par.nblk, N1*M1 );
X         =  X';

for  i  =  1 : N1
    for  j  =  1 : M1
        
        row     =   r(i);
        col     =   c(j);
        off     =  (col-1)*N + row;
        off1    =  (j-1)*N1 + i;
                
        rmin    =   max( row-S, 1 );
        rmax    =   min( row+S, N );
        cmin    &
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值