利用OpenCV实现基于深度学习的超分辨率处理
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
OpenCV是一个非常强大的计算机视觉处理的工具库。很多小伙伴在入门图像处理时都需要学习OpenCV的使用。但是随着计算机视觉技术的发展,越来越多的算法涌现出来,人们逐渐觉得OpenCV比较落后而放弃了使用OpenCV。
但是,实际上OpenCV时一个与时俱进的开源代码库。正在逐渐的吸收和接纳最新的算法。本文我们来介绍如何使用OpenCV实现基于深度学习的图像超分辨率(SR)。使用OpenCV的好处就是,我们不需要知道任何图像超分辨率的相关知识,就可以使用这个代码,并实现图像超分辨率。
具体操作步骤
1. 安装OpenCV contrib模块
OpenCV中的超分辨率功能被集成在了contrib模块中,因此我们首先需要安装OpenCV的扩展模块。安装过程可以参考【从零学习OpenCV 4】opencv_contrib扩展模块的安装。超分辨率被集成在dnn_superres模块中,如果小伙伴们电脑空间有限,可以只编译这一个模块。
近期有小伙伴反馈自己安装扩展模块失败,为了解决这个问题,小白近期在筹划搭建一个各个版本opencv-contrib编译完成的数据库。各位小伙伴随时关注我们公众号的动态。
2. 下载训练的模型
由于某些模型比较大,因此OpenCV代码库中没有包含他们,因此我们在使用的时候需要单独的下载经过训练的模型。目前,仅支持4种不同的超分辨率模型,他们可以实现2倍、3倍、4倍甚至8倍的图像方法。这些模型具体如下:
EDSR:这个是表现最好的模型。但是这个模型也是最大的,所以运行速度会比较慢。
ESPCN:这个模型具有速度快,效果好的特点,并且模型较小。它可以进行对视频进行实时处理(取决于图像大小)。
FSRCNN:这也是具有快速准确推断功能的小型模型。也可以进行实时视频升频。
LapSRN:这是一个中等大小的模型,它的特点是最大可以将图像放大8倍。
公众号后台回复“SR模型”获取下载这四个模型的方式。
3. 通过程序实现超分辨率
我们首先给出C++完整程序,之后对程序中每一行代码进行介绍。完整程序如下:
#include <opencv2/dnn_superres.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>using namespace std;
using namespace cv;
using namespace dnn;
using namespace dnn_superres;int main(int argc, char *argv[])
{//Create the module's objectDnnSuperResImpl sr;//Set the image you would like to upscalestring img_path = "image.png";Mat img = cv::imread(img_path);//Read the desired modelstring path = "FSRCNN_x2.pb";sr.readModel(path);//Set the desired model and scale to get correct pre- and post-processingsr.setModel("fsrcnn", 2);//UpscaleMat img_new;sr.upsample(img, img_new);cv::imwrite( "upscaled.png", img_new);return 0;
}
首先加载我们选择的模型,并将其输入到神经网络的变量中。需要注意的是模型文件所存在的地址,本文放置在了程序的根目录中。
//Read the desired model
string path = "FSRCNN_x2.pb";
sr.readModel(path);
之后设置模型的种类和放大系数。本文选择的模型是fsrcnn,放大系数选择的2。
//Set the desired model and scale to get correct pre- and post-processing
sr.setModel("fsrcnn", 2);
可以选择的模型有“ edsr”,“ fsrcnn”,“ lapsrn”,“ espcn”,这几个参数就是我们刚才介绍的4中模型。需要注意的是,每个模型能够放大的倍数是不一致的。前三种模型能够放大2、3、4倍,最后一个模型能够放大2、3、4、8倍。
之后通过upsample()函数进行超分辨率放大。
//Upscale
Mat img_new;
sr.upsample(img, img_new);
cv::imwrite( "upscaled.png", img_new);
上述是C++代码,接下来给出Python实现超分辨率的代码
import cv2
from cv2 import dnn_superres# Create an SR object
sr = dnn_superres.DnnSuperResImpl_create()# Read image
image = cv2.imread('./input.png')# Read the desired model
path = "EDSR_x3.pb"
sr.readModel(path)# Set the desired model and scale to get correct pre- and post-processing
sr.setModel("edsr", 3)# Upscale the image
result = sr.upsample(image)# Save the image
cv2.imwrite("./upscaled.png", result)
不同于C++代码,在使用python代码时,需要先通过如下代码进行声明。
# Create an SR object
sr = dnn_superres.DnnSuperResImpl_create()
4. 处理结果
输入图像
双线性插值放大3倍
FSRCNN放大3倍
ESDR放大3倍
下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。
下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。
下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。
交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
利用OpenCV实现基于深度学习的超分辨率处理相关推荐
- python opencv 实现基于深度学习的超分辨率处理
s超分辨率(super-resolution)的通俗解释就是:将低分辨率的图像通过算法转换成高分辨率图像. 通常的超分辨率分两种:SISR和VSR.前者叫做单图像超分辨率,后者叫做视频超分辨率.我们通 ...
- 黄浴:基于深度学习的超分辨率图像技术发展轨迹一览
作者 | 黄浴 转载自知乎 导读:近年来,使用深度学习技术的图像超分辨率(SR)取得了显著进步.本文中,奇点汽车自动驾驶首席科学家黄浴对基于深度学习技术的图像超分辨率技术进行了一次全面的总结,分析了这 ...
- 基于深度学习的超分辨率综述
1.单图像超分辨率重建 SISR方法框架由两部分组成,非线性映射学习和上采样模块. 非线性映射学习模块负责完成LR到HR的映射,这过程中利用损失函数引导和监督学习的进程:上采样模块实现重建图像的放大, ...
- 开源代码基于深度学习的超分辨率如何让大脑显微镜成像去除毛刺
背景 通过显微成像拍摄大脑非常薄的层的照片并以三维形式对其进行重构,可以确定结构在哪里以及它们之间的关系.但这会带来巨大挑战.获取高分辨率图像并快速捕获以覆盖大脑的合理区域是一项主要任务. 一部分问题 ...
- 普通视频转高清:10个基于深度学习的超分辨率神经网络
原文:http://www.tinymind.cn/articles/1176 在 AlphaGo 对弈李世石.柯洁之后,更多行业开始尝试通过机器学习优化现有技术方案.其实对于实时音视频来讲,对机器学 ...
- 基于深度学习的超级分辨率,无需使用GAN
本文介绍了技术和培训深度学习模型的图像改进,图像恢复,修复和超分辨率.这利用了Fastai课程中教授的许多技术,并利用Fastai软件库.这种训练模型的方法是基于非常有才华的AI研究人员的方法和研究, ...
- 在OpenCV中基于深度学习的边缘检测
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:AI算法与图像处理 导读 分析了Canny的优劣,并给出 ...
- opencv threshold_基于深度学习OpenCV与python进行字符识别
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 当我们在处理图像数据集时,总是会想有没有什么办法以简单的文本格式检 ...
- 深度学习图像超分辨率最新综述:从模型到应用
点击我爱计算机视觉标星,更快获取CVML新技术 今日arXiv新上论文<Deep Learning for Image Super-resolution:A Survey>,详细回顾了近年 ...
最新文章
- 运行jsp时,报错404
- iOS.Performance-trick-presentViewController-is-so-slow-in-didSelectRowAtIndexPath
- angular 使用data-bs-datepicker时的一个小问题及解决
- 使用Spring Boot和MongoDB构建一个React式应用程序
- HDU1114 Piggy-Bank 完全背包
- Go语言学习之GOPATH
- UWP 手绘视频创作工具技术分享系列 - 位图的绘制
- 5G计费方式将迎来彻底变化 运营商向2B服务出手?
- html5整个桌面背景图片,HTML5 body设置全屏背景图片 如何让body的背景图片自适应整个屏----实战经验...
- VMWare网络连接方式与设置
- html开源flash视频播放器代码下载
- MRP里如何预测lead time :Approaches for the Prediction of Lead Times in an Engineer to Order Environment
- 计算机网络速成【网络层】
- Mac 文本对比工具(比较两份文件差异)
- 站班汇报 水印 加相册插件
- ACCESS中Dlookup函数使用
- ARM架构(RISC)和x86架构(CISC)以及传统与移动CPU/GPU厂商
- c语言编写dxf文件吗,判断dxf文件的版本
- 读《所谓情商高,就是会说话》笔记
- 自动化的内容生成语言模型如何帮助您赢得seo竞赛
热门文章
- AI大佬“互怼”:Bengio和Gary Marcus隔空对谈深度学习发展现状
- 刷爆了!这项技术BAT力捧!程序员:我彻底慌了...
- 异类框架BigDL,TensorFlow的潜在杀器!
- Facebook频谱图模型生成比尔·盖茨声音,性能完胜WaveNet、MAESTRO
- 最萌算法学习来啦,看不懂才怪!| 码书
- 百度SLG拿下前锤子科技CTO钱晨,还要合并小鱼在家? | 极客头条
- 美团大脑:知识图谱的建模方法及其应用 | 公开课笔记
- 秒杀商品超卖事故:Redis分布式锁请慎用!
- 彻底透析SpringBoot jar可执行原理
- SpringBoot 并发登录人数控制