delphi 生成 超大量xml_用OpenCV4实现图像的超分别率

用OpenCV4实现图像的超分别率

本实验原文链接:·

f="https://arxiv.org/pdf/1807.06779.pdf">https://arxiv.org/pdf/1807.06779.pdf

原文摘要

单图像超分辨率(SISR)的主要挑战是如何恢复微小纹理等高频细节。然而,大多数最先进的方法缺乏识别高频区域的特定模块,导致输出图像模糊。本文提出了一种基于注意的方法来区分纹理区域和平滑区域。高频细节定位后,进行高频补偿。这种方法可以与先前提出的SISR网络相结合。通过提供高频增强,可以获得更好的性能和视觉效果。本文还提出了自己的由DenseRes块组成的SISR网络。该模块提供了一种将低层特征和高层特征相结合的有效方法。大量的基准测试表明,本文提出的方法比SISR的最新作品有了显著的改进。

单图像超分辨率(SISR)的任务是从单低分辨率(LR)输入图像中推断出高分辨率(HR)图像。

这是一个高度不适定的问题,因为在低通滤波和下采样过程中,诸如微小纹理等高频信息会丢失。因此,SISR是一对多的映射,本文的任务是找到最合理的图像,尽可能地恢复微小的纹理。为了从LR图像中恢复HR图像,需要大的接收场从LR图像中获取更多的上下文信息。使用更深层的网络是增加接受视野的更好方法。深度网络的一个缺点是梯度问题的消失,使得网络难以训练。Heetal.[1]利用这些学习框架来进行网络训练。跳过连接是另一种通过网络增加梯度和信息流动的解决方案。低层特征包含了有效的信息,可以用来重建HR图像。SISR将从不同层次的集体信息中获益。SISR的难点在于恢复高频细节,如微小纹理。

输出图像与原始图像之间的均方误差(MSE)常作为损失函数来训练卷积神经网络。然而,在追求高峰值信噪比(PSNR)的过程中,MSE会返回许多可能解的均值,从而使输出图像变得模糊和不可信。为了恢复高频细节,人们提出了知觉损失[2],它鼓励生成特征表示相似的图像的网络,从而产生更清晰的图像。莱迪格在阿尔。[3] ,[4]结合对抗性网络、感知损失和纹理损失,鼓励输出图像恢复微小纹理等高频细节。但是所有这些网络并不清楚高频细节的位置,它们只是试图盲目地恢复

纹理。因此,这些网络的性能并不令人满意。为了解决这些问题,首先,在denseNet[5]的基础上,本文提出了一种新的由剩余积木块(Resblock)[1]组成的DenseRes块。每个Resblock的输出都连接到其他Resblock,增强了信息的流动性,避免了冗余特征的重新学习。利用DenseRes块,减少了梯度消失问题,网络易于训练。第二,本文提供一个注意机制来处理高频细节的恢复。受用于语义像素级分割的U-net[6]的启发,本文提出了一种新的混合密集连接U-net,以帮助网络区分是否存在需要修复或类似于插值图像的细小纹理区域。它作为一个特征选择器,有选择地增强高频特征。因此,可以尽可能接近地恢复纹理。这是第一次将注意机制引入SISR。方法简单有效。通过选择性地提供高频增强,它缓解了输出图像容易模糊的问题。注意机制可以与先前提出的SISR网络相结合。获得了较高的信噪比和信噪比。另一个贡献是本文提出了DenseRes块,它提供了一种有效的方法来结合低层特征和高层特征。这有利于恢复高频细节。本文在四个公开的基准数据集上评估本文的模型。它在PSNR和结构相似性(SSIM)指数方面优于当前最新的方法。PSNR比VDSR[7]和DRCN[8]分别提高了0.54db和0.52dB。

图像超像素

传统方式的图像超像素常见的方式就是基于立方插值跟金字塔重建。OpenCV中对这两种方式均有实现,低像素图像在纹理细节方面很难恢复,从低像素图像到高像素图像是典型的一对多映射,如果找到一种好的映射关系可以尽可能多的恢复或者保留图像纹理细节是图像超像素重建的难点之一,传统方式多数都是基于可推导的模型实现。而基于深度学习的超像素重新方式过程未知但是结果优于传统方式。在深度学习方式的超像素重建中,对低像素图像采样大感受野来获取更多的纹理特征信息。OpenVINO中提供的单张图像超像素网络参考了下面这篇文章

该网络模型主要分为两个部分

· 特征重建网络,实现从低分辨率到高分辨率的像素重建

· 注意力生成网络,主要实现图像中高频信息的修复

通过两个网络的的输出相乘,还可以得到高分辨率图像的残差。特征重建网络主要包括三个部分。卷积层实现特征提取,卷积层采样大感受野来得到更多纹理细节;多个DenseRes 叠加模块,级联DenseRes可以让网络更深,效果更好;一个亚像素卷积层作为上采样模块。注意力生成网络部分,用来恢复小的纹理细节,如图像的边缘与形状,网络可以准确定位到细节特征,然后进行相对提升,注意力特征网络设计受到UNet网络架构的启发。完整的模型结构如下:

18d280df7a396c1fb1f57c111e7312aa.png

一个更简介的网络结构如下:

c9231f47a77ee34aa027bbd5a7d672f9.png

其中LR表示低分辨率图像、HR表示高分辨率图像,Bicubic表示双立方插值上采样。

模型文件

OpenVINO提供的模型是在这个模型基础上进行简化,计算量更低,速度更快。从上面的模型结构知道,模型有两个输入部分,分别是输入的低分辨率图像与双立方上采样的图像

· LR的输入:[1x3x270x480]双立方采样:[1x3x1080x1920]三通道顺序是:BGR

模型的输出

·

输出层是一个blob对象,格式为[1x3x1080x1920]

程序演示

首先需要加载网络模型,获取可执行网络,然后设置输入与输出的数据格式与数据精度,这部分的代码如下:

// 加载检测模型
CNNNetReader network_reader;
network_reader.ReadNetwork(model_xml);
network_reader.ReadWeights(model_bin);
// 请求网络输入与输出信息
auto network = network_reader.getNetwork();
InferenceEngine::InputsDataMap input_info(network.getInputsInfo());
InferenceEngine::OutputsDataMap output_info(network.getOutputsInfo());
// 设置输入格式
for (auto &item : input_info) {
auto input_data = item.second;
input_data->setPrecision(Precision::U8);
input_data->setLayout(Layout::NCHW);
input_data->getPreProcess().setResizeAlgorithm(RESIZE_BILINEAR);
input_data->getPreProcess().setColorFormat(ColorFormat::BGR);
}
printf("get it n");
// 设置输出格式
for (auto &item : output_info) {
auto output_data = item.second;
output_data->setPrecision(Precision::FP32);
}
// 创建可执行网络对象
auto executable_network = ie.LoadNetwork(network, "CPU");
// 请求推断图
auto infer_request = executable_network.CreateInferRequest();

代码演示步骤中有两个输入,对输入的设置可以使用下面的代码

/** Iterating over all input blobs **/
for (auto & item : input_info) {
auto input_name = item.first;
printf("input_name : %s n", input_name.c_str());
/** Getting input blob **/
auto input = infer_request.GetBlob(input_name);
size_t num_channels = input->getTensorDesc().getDims()[1];
size_t h = input->getTensorDesc().getDims()[2];
size_t w = input->getTensorDesc().getDims()[3];
size_t image_size = h*w;
Mat blob_image;
resize(src, blob_image, Size(w, h));
printf("input channel : %d, height : %d, width : %d n", num_channels, h, w);
// NCHW
unsigned char* data = static_cast<unsigned char*>(input->buffer());
for (size_t row = 0; row < h; row++) {
for (size_t col = 0; col < w; col++) {
for (size_t ch = 0; ch < num_channels; ch++) {
data[image_size*ch + row*w + col] = blob_image.at<Vec3b>(row, col)[ch];
}
}
}
}

最后执行推理,完成对输出的解析,在解析输出的时候其实输的是[NCHW] = [1x3x1080x1920]的浮点数矩阵,需要转换为Mat类型为[HWC] =[1080x1920x3],采用的是循环方式,是不是有更好的数据处理方法可以转换这个,值得研究。解析部分的代码如下

// 执行预测
infer_request.Infer();
// 处理输出结果
for (auto &item : output_info) {
auto output_name = item.first;
// 获取输出数据
auto output = infer_request.GetBlob(output_name);
float* buff = static_cast<PrecisionTrait<Precision::FP32>::value_type*>(output->buffer());
const int c = output->getTensorDesc().getDims()[1];
const int h = output->getTensorDesc().getDims()[2];
const int w = output->getTensorDesc().getDims()[3];
// 获得输出的超像素图像
Mat result = Mat::zeros(Size(w, h), CV_32FC3);
for (int ch = 0; ch < c; ch++) {
for (int row = 0; row < h; row++) {
for (int col = 0; col < w; col++) {
result.at<Vec3f>(row, col)[ch] = buff[ch*w*h+ row*w + col];
}
}
}
printf("channel : %d, height : %d, width : %d n", c, h, w);
normalize(result, result, 0, 255.0, NORM_MINMAX);
result.convertTo(result, CV_8U);
imshow("High-Resolution Demo", result);
imwrite("D:/result.png", result);
}

测试结果分别如下:(原图)

a6def3b4274a49c1d8d5afc3e8a9abad.png

超分辨输出:(1920x1080)

ab0e3a0a8835d920095dfc248f0afefe.png

总结

也许模型被简化的太厉害了,速度是很快了,单身效果感觉比双立方好那么一点点而已!

本文提出了一种基于注意的方法来区分纹理区域和平滑区域。当高频细节的位置被定位时,注意机制起到了增强高频特征和抑制平滑区域噪声的特征选择器的作用。因此,本文的方法避免了盲目地恢复高频细节。本文将该机制集成到包括SRResNet、VDSR和DRCN的SISR网络中,提高了这些SISR网络的性能。因此,本文验证了注意机制的有效性。对于特征重构网络,本文提出了DenseRes块,它提供了一种将低层特征和高层特征相结合的有效方法。通过多个致密块的级联,本文的网络有一个大的接收场。因此,从LR图像中获取有用的大区域上下文信息,以恢复HR图像中的高频细节。与目前最先进的方法相比,本文的方法具有最好的性能。今后,本文将探索注意机制在视频超分辨率中的应用,以产生直观、定量的高质量结果。

d58876c980429875d4a9d4ec5676bb85.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/534116.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

义教志愿服务系统c语言,[志愿服务]以己为师 东科学子义教传爱心

为积极响应国家教育计划&#xff0c;丰富孩子们的暑期生活&#xff0c;进一步落实“春泥”课堂先进义教理念&#xff0c;7月12日&#xff0c;浙江海洋大学东海科学技术学院大学生“海岛征程十五载&#xff0c;红色基因永传承”赴蚂蚁岛实践团23名队员走进蚂蚁岛文化礼堂&#x…

java可视化压缩_WEB可视化技术发展

EverCraft一直在关注Web可视化技术的发展&#xff0c;本文对国外一篇感觉很不错的综述性文章进行翻译&#xff0c;供这一领域的爱好者相互学习。这篇paper的信息为&#xff1a;“Mwalongo, F., et al., State-of-the-Art Report in Web-based Visualization. COMPUTER GRAPHICS…

wordpress phpmyadmin_西部数码使用指南:虚拟主机WordPress部署SSL注意事项

版权归西部数码所有&#xff0c;原文链接&#xff1a;https://www.west.cn/faq/list.asp?unid2068注意事项&#xff1a;1.如果您的主题/插件使用绝对地址调用了http请求可能会导致网站打开会乱码&#xff0c;或不能有绿锁标识&#xff0c;需要联系程序提供商将所有http请求修改…

android html转pdf工具,android – 使用iText库将html转换为pdf时未应用hr的内联CSS

我是.NET开发人员,因此代码在C#中.但是你应该能够轻松翻译以下内容.iText是一个PDF优先的库,[X] HTML解析非常复杂,因此在这方面并不完整.每当解析[X] HTML并且事情不按预期的方式进行特定标记时,您应遵循的基本步骤是&#xff1a;>验证XML Worker支持标记&#xff1a;Tags …

python 小说爬虫_从零开始写Python爬虫 --- 1.7 爬虫实践: 排行榜小说批量下载

从零开始写Python爬虫 --- 1.7 爬虫实践&#xff1a; 排行榜小说批量下载Ehco 5 个月前 本来只是准备做一个爬起点小说名字的爬虫&#xff0c;后来想了一下&#xff0c;为啥不顺便把小说的内容也爬下来呢&#xff1f;于是我就写了这个爬虫&#xff0c;他爬下了各类小说排行榜上…

java 某个字符在字符串中出现的所有位置_Java面试常考核心概念

这篇文章专注于Java基础知识&#xff0c;不涉及List、Map、多线程、锁相关的内容&#xff0c;需要的可以查看我的其他博客hofes blog​hhf443.github.ioJDK&JRE&JVMJDK&#xff08;Java Development Kit&#xff09;是针对 Java 开发员的产品&#xff0c;是整个 Java 的…

lan交换和无线教师手册_简单几步,无线路由器变交换机

当原来的路由器lan口不够用&#xff0c;可以加一个交换机扩展lan口数量&#xff0c;如果需要增加的lan口数量不超过3个可以考虑找台不用的无线路由器当交换机用。另外&#xff0c;随着交换机更新家中都有旧无线路由器闲置&#xff0c;完全可以再次利用。下面看一下&#xff0c;…

revit找不到附加模块程序集_TensorFlow基础知识——常用模块(一)

1本节简述对于开展深度学习开发的目标而言&#xff0c;我们需要掌握的除了必要的深度学习理论基础、必要的开发依赖库基础知识、基本的开发套路之外&#xff0c;我们还需要掌握它常见的外围小帮手都有哪些。这些小帮手就是深度学习依赖库中的其他并不是核心的模块&#xff0c;但…

99 网络编程_网络工程师技能图谱,看看你会多少技能

技术推动了时代变革&#xff0c;互联网则加速了这场变革。在蓬勃发展的互联网浪潮下&#xff0c;网络作为基础设施的关键纽带保障着网路流量的顺利流通&#xff0c;维持着赛博世界的繁荣。而在这繁荣之下&#xff0c;生存着这样一个群体——网络工程狮&#xff0c;为网络纽带保…

python 3.8.0安卓_Python for Mac v3.8.0 官方最新版

Python for Mac是一款全新推出的编程工具&#xff0c;所有 python.org macOS 安装程序都附带了 OpenSSL 的内置副本。此外&#xff0c;还有一个针对 macOS 10.9 的新增安装程序变体&#xff0c;其中包含 Tcl / Tk 8.6的内置版本&#xff0c;有需要的朋友快来下载试试吧!Python …

线程join_Java 并发编程:线程间的协作(wait/notify/sleep/yield/join)

点击上方“Coder编程”&#xff0c;选择“置顶公众号”技术文章第一时间送达&#xff01;并发编程.png每天进步一点&#xff0c;不做curd工程师与Api调用工程师 欢迎访问个人博客网站&#xff1a;https://www.coder-programming.cn/ 作者&#xff1a;liuxiaopeng | http://www…

4位先行进位电路 logisim_你真的了解74系列集成电路吗?让我帮你总结一下

74系列集成电路大致可分为6大类&#xff1a;74(标准型)74LS(低功耗肖特基)74S(肖特基)74ALS(先进低功耗肖特基)74AS(先进肖特基)74F(高速)HC为COMS工作电平&#xff1b;HCT为TTL工作电平&#xff0c;可与74LS系列互换使用HCU适用于无缓冲级的CMOS电路。这9种74系列产品&#xf…

android ios av tv,iOS使用AVPlayer制作战旗TvDEMO OC版

在视频教学中看到一个别人写的战旗TvDEMO写得很好&#xff0c;于是自己动手试着制作一个。效果如下图所示主界面竖屏播放横屏播放点击出现工具栏视频播放使用的是AVPlayer,具体的使用方式如下//---PlayView---_playView [[UIView alloc]init];_playView.frame CGRectMake(0, …

matlab 子图title的位置_matlab 画图基本介绍

1.在命令窗口输入命令时&#xff0c;可以不必每输入一条命令就按enter键执行&#xff0c;可以在输入几行后一同运行。方法是&#xff1a;换行时&#xff0c;只要在按住<shift>键的同时按<enter>键即可&#xff0c;否则matlab就会执行上面输入的所有语句。2.如何将数…

二元一次方程有唯一解的条件_人教版初中数学七年级下册用适当方法解二元一次方程组公开课优质课课件教案视频...

解二元一次方程组---加减法一、教学目的&#xff1a;1&#xff0e;使学生掌握用加减法解二元一次方程组的步骤。2&#xff0e;熟练运用加减法解二元一次方程组。3&#xff0e;培养学生分析问题、解决问题的能力。二、教学重点、难点和关键&#xff08;一&#xff09;重点&#…

为什么从网页上打印怎们好像被缩放_全网最详细关于3D打印的zbrush技术

这个小教程旨在为刚开始对3D打印感兴趣的新人朋友提供一些快速上手小技巧&#xff0c;以便在zbrush中制作适合桌面FDM 3D打印的创作&#xff0c;本次小教程需要读者已经有一些zbrush基础知识。1设置系统单位导入1英尺的box&#xff0c;1英尺X1英尺X1英尺。一旦导入到场景中&…

android图片浏览远近,快图浏览编辑图片方法介绍_怎么编辑图片_3DM手游

既然是图片管理工具&#xff0c;那么快图浏览肯定也是少不了图片编辑功能的。如何使用快图浏览编辑图片呢&#xff1f;下面小编带来的详细的使用方法&#xff0c;有需要的小伙伴一起来看看吧&#xff01;编辑照片方法介绍&#xff1a;1.第一步&#xff0c;下载安装快图浏览&…

matlab 三维 作图 坐标轴_MATLAB学习——MATLAB中的三维绘图指令

2 基本XYZ立体绘图命令mesh和plot是三度空间立体绘图的基本命令&#xff0c;mesh可画出立体网状图&#xff0c;plot则可画出立体曲面图&#xff0c;两者产生的图形都会依高度而有不同颜色。下列命令可画出由函数形成的立体网状图: xlinspace(-2, 2, 25); % 在x轴上取25点 ylins…

说说python程序的执行过程_表示说的词语

展开全部1、奉劝 [ fng qun ] 释义&#xff1a;敬辞。郑重劝说62616964757a686964616fe58685e5aeb931333365653331。 造句&#xff1a;我们厌恶那些阴险的恶人&#xff0c;奉劝他们改恶为善&#xff0c;才能得到社会的原谅&#xff01; 2、劝告 [ qun go ] 释义&#xff1a;拿道…

HTML4基本编译原理,Stanford公开课《编译原理》学习笔记(1~4课)

课程里涉及到的内容讲的还是很清楚的&#xff0c;但个别地方有点脱节&#xff0c;任何看不懂卡住的地方&#xff0c;请自行查阅经典著作《Compilers——priciples, Techniques and Tools》(也就是大名鼎鼎的龙书)的对应章节。一. 编译的基本流程完整的编译的5个基本步骤包括lex…