基于邻域嵌入的超分辨率方法理解与实现

本文介绍了一种基于邻域嵌入的超分辨率图像重建方法,通过流型学习,从低分辨率图像(LR)和训练图像(SR training images)中恢复高分辨率图像(SR)。详细步骤包括图像降质、分块、特征提取、NE过程以及图像重建。在特征提取中,计算低分辨率图像和训练图像的梯度,并寻找最相似的邻居进行权重求和。最终通过MATLAB实现代码完成图像的超分辨率重建。
摘要由CSDN通过智能技术生成

声明:

本文为博主原创,只是个人理解,如有理解错误的地方,欢迎指正。代码部分有参考导师提供的部分代码,来源不详。

参考文献:

Super-Resolution through Neighbor Embedding
(http://doi.ieeecomputersociety.org/10.1109/CVPR.2004.243)

算法描述:

给定一副低分辨率图像(LR)和多幅训练图像(SR training images),通过流型学习,得到目标高分辨率图像(SR)。

详细步骤:

  1. 降质
    对训练图像降质(比如目标SR是LR的N倍大,则把训练图像缩小N倍)得到LR training images;
  2. 分块
    把LR和LR training images分成大小s*s ,重叠区域宽为overlap的重叠图像块(image pitch),SR training images则是Ns*Ns大的重叠图像块(image pitch),其中low-resolution training images中的每一块对应SR training images中每一块;
  3. 特征提取
    计算LR和LR training images各像素点的一阶梯度和二阶梯度,用一个特征向量代表一个图像块,特征向量的集合分别为XT,XS。对于SR training images,只需要每个pitch内每个像素减去块内所有像素值的平均值,这里为什么减去均值的原因是,超分辨率的本质是要找回由于图像降质过程丢失的高频细节信息,高频细节信息是由低分辨率图像中的中频信息所决定,而不是整个低分辨率图像。减去它的均值其实就是中频信息。SR training pitch同样是用一个向量表示,集合记为YS;
  4. NE
    对于XT中的每一个列向量,在XS中找到K个与之最相似(欧式距离最近)的列向量(neighbor),求出每个neighbor的权值,然后除以所有权值之和,使这K个权值相加为一(归一化);
    前面提到每个LR training pitch对应一个SR training pitch,即用前面选出的K个neighbor对应的SR training pitch分别乘以对应的权重,加起来即为重建的image pitch的特征向量。
    重复步骤4,直到所有的XT中向量都处理完,此时得到一个重叠的image pitch集合,记为YT;
  5. 图像重建
    现在已知YT,只要把YT中的特征向量恢复到图像即可。只需按顺序把YT中的每个向量代表的图像块恢复到原来的位置,重叠区域值为相邻image pitch在该区域的平均值表示,最后加上LR每个图像块的中频信息,即SR每个图像块像素值减去平均值,即可求出目标SR。

代码实现 :

MATLAB语言:

%——————————————————————————————————————————————————————————
%主程序
function example
s = 3;                                     %3*3的图像块
overlap = 2;                               %重叠区域宽为2
K = 5;                                 %在XS中查找K个neighbor

for i = 1:X                                %X幅训练图像
    RGB_YS = imread('.\pic\....bmp','bmp');%输入训练图像的地址
    RGB_XS = downsize(RGB_YS,4);           %假设放大4倍
    YIQ = rgb2ntsc(RGB_XS);XS = YIQ(:,:,1);
    %这里是把RGB图像转换为YIQ图像,然后针对Y放大,具体转换原因文献里
    %有提到,这里就不赘述了。
    YIQ = rgb2ntsc(RGB_YS);YS = YIQ(:,:,1); 
    [XSp,XSrow,XScol] = overlapcut(XS, s, overlap);
    [YSp,YSrow,YScol] = overlapcut(YS, 4*s, 4*overlap);   
    XSv2 = findgradient(XSp,XS,XSrow,XScol);
    %计算每个像素值的梯度值
    YSv2 = findfeature(YSp,YSrow,YScol);
    %计算YS的特征向量
    if i==1
        XSv = XSv2;
        YSv = YSv2;
    else
        XSv(:,size(XSv,2)+1:size(XSv,2)+size(XSv2,2)) = XSv2;
        YSv(:,size(YSv,2)+1:size(YSv,2)+size(YSv2,2)) = YSv2;
        %添加到XS,YS集合中
    end 
end

RGB_XT = imread('.\pic\low.bmp','bmp');
YIQ = rgb2ntsc(RGB
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值