基于字典的图像超分辨率实现 - CSDN博客 http://blog.csdn.net/u011630458/article/details/65635155

简介

  这段时间在看基于字典的单帧图像超分辨率重建,本篇主要是对这块做个笔记记录。

基本原理

预处理

     1、准备好用于字典训练的低分辨率图像LR及与之对应的高分辨率图片HR。
2、将低分辨率图像双线性或者三次方插值到高分辨率图像相同大小,得到MR。
3、将MR图像分成若干个3x3或者5x5之类的小块,小块之间有1x1或者2x2之类的重叠区域,对应的高分辨率图像同样对应坐标位置,分成这个多块。
4、对MR的图像块做特征提取操作,可以是每个块减去该块平均值、或者是每个块做梯度散度提取。

非稀疏字典处理

方法一

     1、MR特征块集合作为低分辨率字典,对应的高分辨率块集合作为高分辨率字典。
2、输入待处理的低分辨率图像,并用和字典训练一样的块大小做分割。
3、所有低分辨率图像分割块做特征提取。
4、每个特征块X,在低分辨率字典中找到最接近的K个块。
5、通过这K个块,拟合得到最接近该特征块的权重系数A。
6、找到高分辨率字典上对应的该K个块,乘上权重系数A,得到低分辨率块X对应的高分辨率图像块Y。
7、循环计算,直到所有低分辨率块都得到对应高分辨率块。
8、所有高分辨率块,根据之前分割坐标,反向贴合(块与块之间重合区域,直接平均),得到结果的高分辨率图像。
     参考论文:Super-Resolution Through Neighbor Embedding

方法二

     1、MR特征块集合作为低分辨率字典,对应的高分辨率块集合作为高分辨率字典。
2、将所有低分辨率块和高分辨率块集合,通过欧式距离,分成1024或者4096个类。
3、每个类中,使用最小二程法之类,计算对应所属的低分辨率块到高分辨率块之间的投影矩阵。
4、输入待处理的低分辨率图像,并用和字典训练一样的块大小做分割。
5、所有低分辨率图像分割块做特征提取。
6、找到每个低分辨率特征块X与字典中哪个类最接近,直接使用该类所属的投影矩阵,得到对应高分辨率块Y。
7、循环计算,直到所有低分辨率块都得到对应高分辨率块。
8、所有高分辨率块,根据之前分割坐标,反向贴合(块与块之间重合区域,直接平均),得到结果的高分辨率图像。
     参考论文:Fast Direct Super-Resolution by Simple Functions

稀疏字典处理

   常规稀疏字典训练:
1、首先通过DCT之内算法,得到一个初始字典。
2、预处理得到的低分辨率特征块,在初始字典中找到最相关原子。
3、该块和原子相减,得到残差,继续在字典中找到和该残差最接近的原子,继续相减,不断循环,直到残差对于设置阀值或者循环次数超过一定范围,所有对应原子位置,存入稀疏矩阵A中。
4、循环处理,直到计算出所有块的稀疏矩阵A。
5、保持所有稀疏矩阵A不变,迭代更新字典,每次更新之后保证所有稀疏矩阵A和字典生成的块与原始低分辨率特征块,误差更小。
6、当误差小于某个阀值之后,便得到对应低分辨率训练字典。
     注意:用来去噪之类的字典可以这么训练,但是超分辨率重建需要高低分辨率字典联合训练,分别得到低分辨率字典和高分辨率字典,在这基础上,更复杂一点。
参考论文:On Single Image Scale-Up Using Sparse-Representations.
   方法一:
1、输入待处理的低分辨率图像,并用和字典训练一样的块大小做分割。
2、所有低分辨率图像分割块做特征提取。
3、每个特征块,在低分辨率字典中找到最接近原子。
4、该块和原子相减,得到残差,继续在字典中找到和该残差最接近的原子,继续相减,不断循环,直到残差对于设置阀值或者循环次数超过一定范围,所有对应原子位置,存入稀疏矩阵A中。
5、对应高分辨率字典和稀疏矩形A相乘,得到高分辨率图像块。
6、循环计算,直到所有低分辨率块都得到对应高分辨率块。
7、所有高分辨率块,根据之前分割坐标,反向贴合(块与块之间重合区域,直接平均),得到结果的高分辨率图像。
     参考论文:1、Image super-resolution as sparse representation of raw image patches.
2、On Single Image Scale-Up Using Sparse-Representations.
   方法二:
1、在低分辨率字典中,每个原子找到若干个和它最接近的原子;高分辨率字典中,同样取出对应的这些原子。
2、使用最小二程法之类,计算这些低分辨率块、高分辨率原子之间的投影矩阵。
3、遍历完整个字典原子,最终每个原子,对应都有一团邻居原子及投影矩阵。
4、输入待处理的低分辨率图像,并用和字典训练一样的块大小做分割。
5、所有低分辨率图像分割块做特征提取。
6、找到每个低分辨率特征块X与字典中哪个类最接近,直接使用该类所属的投影矩阵,得到对应高分辨率块Y。
7、循环计算,直到所有低分辨率块都得到对应高分辨率块。
8、所有高分辨率块,根据之前分割坐标,反向贴合(块与块之间重合区域,直接平均),得到结果的高分辨率图像。
     参考论文:Anchored Neighborhood Regression for Fast Example-Based Super Resolution.
   方法三:
与方法二类似,区别在于:计算投影矩阵时候,每个原子寻找邻居不是找其他原子,而是在训练用的低分辨率、高分辨率块中找,论文中建议是2048个。
如此,计算出来的投影矩阵,得到的高分辨率图像,比方法二效果更好。
    参考论文:A+: Adjusted Anchored Neighborhood Regression for Fast Super-Resolution

效果演示

    4倍插值效果比较(左边为opencv双线性插值效果, 右边为低配版方法三效果)

基于字典SR各种方法【稀疏编码多种方法】的更多相关文章

  1. 稀疏编码概率解释(基于1996年Olshausen与Field的理论 )

    一.Sparse Coding稀疏编码 稀疏编码算法是一种无监督学习方法,它用来寻找一组“超完备”基向量来更高效地表示样本数据.稀疏编码算法的目的就是找到一组基向量 ,使得我们能将输入向量 表示为这些 ...

  2. 稀疏编码直方图----一种超越HOG的轮廓特征

    该论文是一篇来自CMU 的CVPR2013文章,提出了一种基于稀疏编码的轮廓特征,简称HSC(Histogram of Sparse Code),并在目标检测中全面超越了HOG(Histogram o ...

  3. 使用mshta.exe绕过应用程序白名单(多种方法)

      0x00 简介 很长一段时间以来,HTA文件一直被web攻击或在野恶意软件下载程序用作恶意程序的一部分.HTA文件在网络安全领域内广为人知,从红队和蓝队的角度来看,它是绕过应用程序白名单有价值的“ ...

  4. Sparsity稀疏编码(三)

    稀疏编码(sparse coding)和低秩矩阵(low rank)的区别        上两个小结介绍了稀疏编码的生命科学解释,也给出一些稀疏编码模型的原型(比如LASSO),稀疏编码之前的探讨文章 ...

  5. Sparsity稀疏编码(一)

    稀疏编码来源于神经科学,计算机科学和机器学习领域一般一开始就从稀疏编码算法讲起,上来就是找基向量(超完备基),但是我觉得其源头也比较有意思,知道根基的情况下,拓展其应用也比较有底气.哲学.神经科学.计 ...

  6. 稀疏编码(Sparse Coding)的前世今生(一) 转自http://blog.csdn.net/marvin521/article/details/8980853

    稀疏编码来源于神经科学,计算机科学和机器学习领域一般一开始就从稀疏编码算法讲起,上来就是找基向量(超完备基),但是我觉得其源头也比较有意思,知道根基的情况下,拓展其应用也比较有底气.哲学.神经科学.计 ...

  7. 用 Python 排序数据的多种方法

    用 Python 排序数据的多种方法 目录 [Python HOWTOs系列]排序 Python 列表有内置就地排序的方法 list.sort(),此外还有一个内置的 sorted() 函数将一个可迭 ...

  8. MFC 在对话框显示图片的多种方法

      我们先从简单的开始吧.先分一个类: (一) 非动态显示图片(即图片先通过资源管理器载入,有一个固定ID) (二) 动态载入图片(即只需要在程序中指定图片的路径即可载入) 为方便说明,我们已经建好一 ...

  9. 转载 deep learning:八(SparseCoding稀疏编码)

    转载 http://blog.sina.com.cn/s/blog_4a1853330102v0mr.html Sparse coding: 本节将简单介绍下sparse coding(稀疏编码),因 ...

随机推荐

  1. push和unshift方法

    push和unushift都是向数组插入元素. push是向数组尾部插入元素. unshift是向数组头部插入元素. 共同点:都可以一次插入多个元素. arrayObject.push(newelem ...

  2. ubuntu 改动 ls 下的文件夹颜色

    ubuntu 下, ls 显示的文件夹的颜色,怎么说呢,看起来太费劲了. 于是想着改动成easy识别的颜色. 于是搜索了一下. 这里列举三个搜到的教程吧. 简单说我按这上面的方法做了,然后都失败了. ...

  3. ZK框架笔记1、ZK Ajax框架简介

    简介    ZK是一个基于事件驱动和组件的框架,他为web应用提供了丰富的接口.zk包括一个基于Ajax的事件驱动引擎.一整套丰富的XML用户接口语言(XML User Interface Langu ...

  4. spring-boot 集成 swagger 问题的解决

    spring-boot 集成 swagger 网上有许多关于 spring boot 集成 swagger 的教程.按照教程去做,发现无法打开接口界面. 项目由 spring mvc 迁移过来,是一个 ...

  5. Errors occurred during the build

    Errors occurred during the build.Errors running builder 'Integrated External Tool Builder' on projec ...

  6. 带 IK 分词器的 Luke 和 搜索应用服务器solr

    首先在网上查了一下: Solr Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口.用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索 ...

  7. 学会Git玩转Github笔记(二)——Git使用

    一.Git基本工作流程 Git工作区域 向仓库中添加文件流程 二. Git初始化及仓库创建和操作 基本信息设置 . 设置用户名 git config --global user.name 'itcas ...

  8. 为每个页面加上Session判断

    首先新建一个类,继承自System.Web.UI.Page,然后重写OnInit,如下: using System; using System.Data; using System.Configura ...

  9. UNIX网络编程卷1 时间获取程序client UDP 协议无关

    本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie /** * UDP.协议无关,调用 getaddrinfo 和 udp_client **/ ...

  10. Oracle 版本号说明

    Oracle 的版本非常多,先看11g的一个版本说明: 注意: 在oracle 9.2 版本号之后, oracle 的maintenance release number 是在第二数字位更改. 而在之 ...