大家好,又见面了,我是你们的朋友全栈君。
代码的解析已经给出,现在补上:单图像超分辨率重建示例代码解析
图像超分辨率重建技术就是利用一组低质量、低分辨率图像(或运动序列)来产生单幅高质量、高分辨率图像。图像超分辨率重建应用领域及其宽广,在军事,医学,公共安全,计算机视觉等方面都存在着重要的应用前景。在计算机视觉领域,图像超分辨率重建技术有可能使图像实现从检出水平(detection level)向识别水平(recognition level)的转化,或更进一步实现向细辨水平(identification level)的转化。图像超分辨率重建技术可以提高图像的识别能力和识别精度。图像超分辨率重建技术可以实现目标物的专注分析,从而可以获取感兴趣区域更高空间分辨率的图像,而不必直接采用数据量巨大的高空间分辨率图像的配置。[1]
目前超分辨率技术主要有以下两大类:基于重建的方法、基于学习的方法。
1、基于重建的超分辨率技术:
基于重建的超分辨率方法的基础是均衡及非均衡采样定理。它假设低分辨率的输入采样信号(图像) 能很好地预估出原始的高分辨率信号(图像)。绝大多数超分辨率算法都属于这一类,其中主要包括频域法和空域法。
频率域方法是图像超分辨率重建中一类重要方法,其中最主要的是消混叠重建方法。消混叠重建方法是通过解混叠而改善图像的空间分辨率实现超分辨率复原,最早的研究工作是由 Tsai 和 Huang在 1984 年进行的。在原始场景信号带宽有限的假设下,利用离散傅立叶变换和连续傅立叶变换之间的平移、混叠性质,给出了一个由一系列欠采样观察图像数据复原高分辨率图像的公式。多幅观察图像经混频而得到的离散傅立叶变换系数与未知场景的连续傅立叶变换系数以方程组的形式联系起来,方程组的解就是原始图像的频率域系数,再对频率域系数进行傅立叶逆变换就可以实现原始图像的准确复原。
在空域类方法中,其线性空域观测模型涉及全局和局部运动、光学模糊、帧内运动模糊、空间可变点扩散函数、非理想采样等内容。空域方法具有很强的包含空域先验约束的能力,主要包括非均匀空间样本内插、迭代反投影方法、凸集投影法、最大后验概率以及混合 MAP/ POCS 方法、最优和自适应滤波方法、确定性重建方法等。
2、基于学习的超分辨率技术
基于学习的方法是近年来超分辨率算法研究中的热点,它采用大量的高分辨率图像构造学习库产生学习模型,在对低分辨率图像进行恢复的过程中引入由学习模型获得的先验知识,以得到图像的高频细节,获得较好的图像恢复效果。
具体步骤为:
(1)将高分辨率图像按照降质模型进行降质,产生训练集。
(2)根据高分辨率图像的低频部分和高频部分对应关系对图像分块,通过一定
算法进行学习,获得先验知识,建立学习模型。
(3)以输入的低分辨率块为依据,在建立好的训练集中搜索最匹配的高频块。
基于学习的超分辨率方法中关键是建立学习模型,获得先验知识。常用的学习模型有马尔科夫随机场模型、图像金字塔模型、神经网络模型、主成分分析模型等。基于学习的方法充分利用了图像本身的先验知识,在不增加输入图像样本数量的情况下仍能产生高频细节,获得比基于重建方法更好的复原结果,并能较好的应用于人脸和文字等图像的复原。
目前,图像超分辨率重建的研究比较成熟,但距离实用还有较大差距。未来研究方向主要集中在以下几个方面:
1)发展和寻求新的退化模型,使成像模型更加精确和全面,实现对点扩散函数和噪声的精确估计。图像超分辨率增强的成功依赖于准确的、符合实际成像系统特性和成像条件的降模型,而要获得符合实际成像过程的降质模型是十分困难的,通常采用简单、确定的降质模型进行近似,这样的近似模型与实际成像过程差距较大。
2)压缩域的超分辨率重建。传统的超分辨率算法都是针对图像序列,而实际中最常见的图像序列是视频文件。因而下一步的工作可以针对不同的视频压缩格式和编解码技术,在超分辨率算法中综合考虑成像模型和压缩算法带来的图像降质效果,以及运动补偿和编码传输机制,实现压缩域的超分辨率重建。
3)效率和鲁棒性问题。目前的超分辨率算法具有很高的计算复杂度,如何减少计算量,提高算法速度,是下一步值得研究问题。同时,在目前很多算法中都做了各种假设,如照度变等,这在实际应用中是很难满足的,因此需要研究稳健的算法满足实际应用的需要。
4)模糊图像和三维图像的超分辨率研究。模糊一直是图像处理中的一个难点,如何对模糊图像进行超分辨率需要进一步研究。目前针对三维图像的超分辨率研究还很少,如何对三维图像进行建模也是一个值得研究的课题。
5)超分辨率客观评价标准研究。目前对于图像超分辨率结果主要依靠人的主观评价,缺少一种客观的评价标准,现有的 PSNR、MSE 等并不能很好的反映超分辨率效果,需要发展一种客观的评价机制。
我们的代码来源于:https://github.com/qobilidop/srcnn[2],不过我进行了一定的修改使得其能够按照我的说明更好的运行,修改后的代码在:https://github.com/wenchangyu213/modifiedSrcnn[3],其中也包括了运行后的结果。
首先,我们从官网上下载合适版本的Anaconda,这里我使用的是最新版本。注意,在安装的时候会问你是否要添加到Path中去,记得勾选,否则后面自己添加的话会麻烦一些。
正常安装后,会有这样的列表项,并且在cmd里面输入conda –version也是可以出现Anaconda的版本的:
我们以管理员的身份进入Anaconda Prompt。转到下载git之后的根目录下,输入conda env create -f install/env-cpu.yml(如果是安装gpu版本的话就改成env-gpu.yml),不出意外的话会为你建立一个名为srcnn的环境,之后的步骤都在这下面进行。我这里使用的是cpu版本。
如果这一步没有成功的话,大部分原因是访问外网挂了,那么可以自己手动建立一个运行环境,从国内的镜像网站下载需要的包。使用conda create –n test python=3.6建立一个名为test的Python环境,使用activate test激活环境(会在前面出现一个(test)的标识),我们通过pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow来安装合适版本的tensorflow,其他的包也可以通过类似的方法获取。
除了清华的镜像网站,还有其他的一些镜像网站可以使用[4]:
清华:https://pypi.tuna.tsinghua.edu.cn/simple
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学:http://pypi.hustunique.com/
山东理工大学:http://pypi.sdutlinux.org/
豆瓣:http://pypi.douban.com/simple/
使用我提供的修改过的文件,从Anaconda Prompt进入,转到根目录下的experiments文件夹,使用activate test激活test环境,使用python run.py bicubic-sc3.json(不同的json文件使用了不同的方法,有bicubic,SRCNN,ESPCN,FSRCNN四个方法,很容易就能够从文件名上看出来)就可以跑动程序,会生成名为bicubic-sc3的文件夹,所有生成的文件都在里面。
下面介绍一下文件夹下面的内容:
test->Set5(/Set14):带有input的是输入模型的文件,即缩小后的文件;带有original的是原始文件;带有output的是输出文件;metrics.csv中存放的是各个图片重建的时间、各自的psnr(峰值信噪比,是一种评价图像的客观标准,它具有局限性,一般是用于最大值信号和背景噪音之间的一个工程项目[5])以及它们的平均值。
train->weights:存放了每次运算之后的结果文件,以hdf5格式保存(HDF,Hierarchical Data Format,可以存储不同类型的图像和数码数据的文件格式,并且可以在不同类型的机器上传输,同时还有统一处理这种文件格式的函数库。大多数普通计算机都支持这种文件格式。[6])。
train->history.csv:历史记录的总表
train->history.loss.png:绘制了历史损失曲线
train->history.psnr.png:绘制了历史峰值信噪比曲线
config.yaml:python的参数
model.hdf5:模型的数据文件
接下来说明一下json文件中的内容,以bicubic-sc3.json为例。我们可以通过修改参数来获得不同的结果,一般而言,当训练次数增多时得到的结果会更好一些(不排除出现过拟合现象)。
json文件当中的epochs参数即训练次数被我修改过以能够较快的得到结果,因此得到的结果并没有那么出色,读者可以自行修改以得到更好的结果。
[1] 图像超分辨率重建简介,ChenLee_1 https://blog.csdn.net/carson2005/article/details/11631081
[2] A course project on convolutional neural networks for single image super-resolution, qobilidop https://github.com/qobilidop/srcnn
[3] https://github.com/lingluotianshi/modifiedSrcnn
[4] 让PIP源使用国内镜像,提升下载速度和安装成功率 https://www.cnblogs.com/microman/p/6107879.html
[5] psnr https://baike.baidu.com/item/psnr/2925132?fr=aladdin
[6] HDF https://baike.baidu.com/item/HDF/1256312?fr=aladdin
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/126414.html原文链接:https://javaforall.cn