Reference:《Super-Resolution Through Neighbor Embedding》Hong Chang,Dit-Yan Yeung,Yimin Xiong
本文主旨:利用局部邻域嵌入流行学习方法,提出可邻域嵌入的实例学习超分辨方法,该方法假设低分辨图像块与高分辨图像块组成的两个流行具有相似的局部几何结构。根据这假设,将低分辨输入图像块与训练集中的K近邻之间的重构关系,映射到对应的高分辨图像块上,合成需要的高分辨图像。与以往实例学习方法相比,邻域嵌入方法不需要学习大量的训练样本,在重建质量与计算复杂度方面能保持一定的平衡。
基于邻域嵌入的超分辨率重建算法主要分为两大部分:样本训练和图像重建。
(1)样本训练
对自然图像建立图像库,然后以图像块为单位,抽取各图像块的特征信息,生成该图像库的低分辨率样本集及对应的高分辨率样本集;
步骤:
①降质
②特征提取
③分块
(2)图像重建
同样对待重建图像进行分块处理,然后在低分辨率样本集中,为每一个待重建图像块寻找最相似的K 个样本块,同时可以获得这些低分辨率样本块所对应的高分辨率样本块,将K 个低分辨率近邻块的进行线性组合重建当前低分辨率块,使重建误差最小,求得重建权重,以该权重对对应的高分辨率样本块加权求和,即可重建当前图像块,最终可重建整幅图像。
步骤:
①特征提取
②分块
③寻找K个近邻块
④计算权值
⑤重建图像
典型代码附录:
①LLE代码及解析:
LLE算法代码
% LLE ALGORITHM (using K nearest neighbors)
%
% [Y] = lle(X,K,dmax)
%
% X = data as D x N matrix (D = dimensionality, N = #points)
% K = number of neighbors(领域点的个数)
% dmax = max embedding dimensionality(最大嵌入维数)
% Y = embedding as dmax x N matrix
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [Y] = lle(X,K,d)
[D,N] = size(X);
%D是矩阵的行数,N是矩阵的列数
fprintf(1,'LLE running on %d points in %d dimensions\n',N,D);
% STEP1: COMPUTE PAIRWISE DISTANCES & FIND NEIGHBORS
%寻找邻居数据点
fprintf(1,'-->Finding %d nearest neighbours.\n',K);
X2 = sum(X.^2,1);
%矩阵X中的每个元素以2为指数求幂值,并且竖向相加
%if two point X=(x1,x2),Y=(y1,y2)
%than the distance between X and Y is sqtr(x1-y1)+sqtr(x2-y2)
distance = repmat(X2,N,1)+repmat(X2',1,N)-2*X'*X;
%repmat就是在行方向把X2复制成N份,列方向为1份
[sorted,index] = sort(distance);
%sort是对矩阵排序,sorted是返回对每列排序的结果,index是返回排序后矩阵中每个数在矩阵未排序前每列中的位置
neighborhood = index(2:(1+K),:);
% STEP2: SOLVE FOR RECONSTRUCTION WEIGHTS
%计算重构权
fprintf(1,'-->Solving for reconstruction weights.\n');
if(K>D)
fprintf(1,' [note: K>D; regularization will be used]\n');
tol=1e-3; % reg