文章转自:http://blog.csdn.net/jiangjieqazwsx/article/details/50414259
最近在看杨建超老师的关于基于字典的SR方法,觉得特别有意思,在研究了作者的几篇论文和代码,并在南冲岭博友的帮助下,做了如下总结,希望对于刚接稀疏的朋友有帮助:
1. 什么是信号稀疏
信号稀疏的定义:
令字典D的原子个数M,信号维度为N,则有以下三种关系:
M = N时,D为完备的;
M > N时,D为冗余的;
M>>N时, D为过完备的。
图解如下:
2. 为什么要选择稀疏表示的方法
借鉴了压缩感知的思想,通过对大量低分辨率图像和高分辨率图像的稀疏表示和训练降维,实现超分辨率在整个学习样本空间的优化求解。一方面保证了足够的先验知识,减少了重构时所需的数据,提高了效率;另一方面有效克服了领域嵌入方法的过拟合或欠拟合现象。(可以稀疏化表示 )
3. 程序的流程图
流程图:
杨的是对一系列高分辨率图像进行HR图块的选取,再对这些高分辨率的图像降质,形成一系列LR的图块,组成训练集。
代码下载:
4. 有趣的地方
a.字典训练的图片并不需要跟测试图片内容相同,例如,我要对一个人脸进行SRR,我的训练集的图片可以是花,建筑或者其它事物。只要结构相似就行。
原因分析:因为在训练字典的时候,杨老师取的是样本的特征向量,所以只要图像块具有类似的特征就行,稀疏重建的过程本来也就是从字典中自适应的选择一个或者多个最适合当前输入低分辨率图像块特征的字典原子,利用这些字典原子的线性组合来得到相应的高频细节。不过,我个人认为,训练集最好和你需要处理的图像是相同类别的,例如,你要对人脸图像进行超分辨率重建的话,训练集最好大部分是人脸图像,这样重建的效果应该会好些;这个我觉得非常有意思。
b.为什么要采用下面的方式选择图像高低图像块:作者从训练图片里面抽取出高分辨率的图像块Px,然后把这些图片进行减采样,再双三次插值成跟原训练图片一样大小的图片,抽取出低分辨率的图像块Py。
原因分析:我查过相关文献,有文章说尽管低分辨率的图像存在退化降质,高分辨率图像与其对应的低分辨率图像的几何结构,或两者在变换域(字典)下的稀疏表示是近似的。
总结一下特征块的选取步骤:
低分辨率图像特征小块的步骤:首先对训练库中的高分辨率图像进行下采样处理,得到低分辨率图像,然后对得到的低分辨率图像进行上采样,通过插值得到与原始高分辨率图像同样大小的图像,最后,利用四个滤波器hf1, vf1, hf2,vf2来提取其中的高频细节特征。 高分辨率图像特征小块的获取简单些:首先,对训练库中原始高分辨率图像进行分块操作,然后,减去其均值即可。得到低分辨率图像特征小块和高分辨率图像特征小块之后,再将它们组合在一起进行联合字典训练来保证低分辨率图像块和高分辨率图像块稀疏表示系数的一致性。
c.用来重建的图片似乎也不需要知道其分辨率是否跟前使用的一致?
原因分析:杨建超老师这篇论文的主要思想是输入单幅低分辨率图像的每个图像块能够在一个低分辨率超完备字典上得到一组稀疏表示系数,高分辨率图像块能够用同样的稀疏表示系数在给定的高分辨率超完备字典上进行重建,然后由高分辨率图像块连接得到完整的高分辨率图像。这种基本思想的前提是,低分辨率超完备字典和高分辨率超完备字典需要进行联合训练来保证它们稀疏表示系数的一致性。因此,只要通过对训练集中的图片进行联合字典训练,得到了共同的稀疏表示系数,那么,对需要进行重建的输入图像的分辨率大小是没有要求的。只要我们能够提高训练图片的结构丰富性就好!
5. 对程序的思考:
a).很多地方都有中心化和归一化,在训练字典的时候,只对高分辨率块进行了去中心化,对低分辨率块进行了特征提取,为什么不需要对低分辨率块进行去中心化再提特征?是不是我去中心化后的特征将不是图片的高频信息的原因?
用高分辨率图像块减去其均值是为了更好地表示图像的纹理,而后面对低分辨率样本做的是滤波处理,目的在于提取低分辨率图像的多种特征,不仅仅是纹理特征,所以没有对其进行减去均值的操作。
b). 为什么在使用字典进行图像重建的时候,只对低分辨率块进行归一化?
程序中对低分辨率图像字典Dl和输入图像块同时进行了归一化,然后利用Dl和y,优化求解得到稀疏表示系数w,归一化的操作让优化求解更快的收敛。后面,利用求解得到的稀疏表示系数w与高分辨率图像字典Dh相乘得到高分辨率图像块,对Dh只是一个相乘的操作,没必要归一化,如果要对Dh进行归一化的话,后面还得进行还原,这样反而增加了程序运行的复杂度,所以对高分辨率图像字典Dh可以不进行归一化。
6. 程序出错的地方
参考资料:
http://blog.csdn.net/geekmanong/article/details/44905279