通过超分辨率重构来提高二维码的对比度

1 问题描述

(1)图像分辨率小。例如一些嵌入在海报(如图1)或远距离拍摄的码,其分辨率远小于通常情况下的码图像。
在这里插入图片描述
图1.海报中的二维码占比很小
(2)图像质量较低。有很多是经过了多次的压缩和转发,存在严重的人工效应(如振铃效应)干扰。
在这里插入图片描述
(3)由于光照等原因,导致二维码亮度不均匀、图像模糊等。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2 微信超分辨率重构的框架

通常情况下,相比于低分辨率图像,高分辨率图像能够提供更丰富的细节,呈现出良好的视觉效果,对于二维码识别这种以图像作为输入的后续流程,也有助于提高系统的整体表现。然而,受成像设备、存储空间和网络资源的限制,我们常常只能获得较低分辨率的图像。于是,超分辨率技术便派上了用场。
超分辨率技术以低分辨率图像作为输入,重建高分辨率输出,是计算机视觉领域的一个经典问题。传统的基于像素插值的超分算法以其计算简单、速度快的优势,被广泛采用,如最近邻(nearest)插值,双线性(bilinear)插值以及双三次(bicubic)插值等。但它们无法适应多样的图像内容,感知能力较差,难以重建出图像的高频信息,输出图像过于模糊,应用于压缩图像时,甚至会放大人工效应干扰。
近年来,计算机视觉技术和深度学习飞速发展,学术界开始关注利用深度学习解决图像重建问题。我们根据扫码图像的特点,设计了适用于移动端的超分网络,实现了快速高效的码图像重建,并改善图像质量,大大提高了扫码算法的识别成功率。网络结构如图所示。
在这里插入图片描述图1 码图像重建网络结构

3 API

基于OpenCV开发了相应的API。

3.1 cv.wechat_qrcode_WeChatQRCode

cv.wechat_qrcode_WeChatQRCode(detector_prototxt_path, detector_caffe_model_path, super_resolution_prototxt_path, super_resolution_caffe_model_path) -> <wechat_qrcode_WeChatQRCode object>

初始化微信 QR 码检测模块,包括两个基于 CNN 的模型:对象检测模型和超分辨率模型。对象检测模型用于检测带有边界框的二维码。当 QR 码较小时,采用超分辨率模型对其进行放大。

文件地址:https://github.com/WeChatCV/opencv_3rdparty

3.1.1 参数说明:

参数名参数含义
detector_prototxt_path对象检测模型的prototex文件路径
detector_caffe_model_path对象检测模型的caffe模型文件路径
super_resolution_prototxt_path超分辨率模型的prototex文件路径
super_resolution_caffe_model_path超分辨率模型的caffe模型文件路径

3.1.2 返回值:

wechat_qrcode_WeChatQRCode 对象

3.2 cv.wechat_qrcode_WeChatQRCode.detectAndDecode

cv.wechat_qrcode_WeChatQRCode.detectAndDecode(img[, points]) ->retval, points

检测和解析二维码

3.2.1 参数说明:

参数名参数含义
imgopencv 读取的灰度图或 BGR 图
points检测到 QR 码四边形顶点后,将其位置输出到该数组

3.2.2 返回值:

retval: 解析结果

points: QR 码四边形顶点位置数组,如果找不到则为空

4 二维码提升对比度测试

4.1 测试代码:

import cv2
import osif __name__ == '__main__':# 初始化对象detector = cv2.wechat_qrcode_WeChatQRCode("detect.prototxt","detect.caffemodel","sr.prototxt","sr.caffemodel")results = {"image": [], "res": [], "points": []}image_dir = "src"files = os.listdir(image_dir)# 遍历图片目录for f in files:image_file = os.path.join(image_dir, f)img = cv2.imread(image_file)  # 读取图像res, points = detector.detectAndDecode(img)  # 检测图像if res:  # 非空表示检测成功results["image"].append(image_file)results["res"].append(res)results["points"].append(points)image_num = len(files)detected_num = len(results['res'])print("Image dir:", image_dir)print(f"Processed images: {image_num} , detected images: {detected_num}",f"detection success rate : {detected_num / image_num * 100}%. ")print("Detected images are:")for i in results['image']:print(i, end=',')

4.2 输出结果

Image dir: src
Processed images: 134 , detected images: 19 detection success rate : 14.17910447761194%.

Dected images are:
src/4_217.jpg,src/4_135.jpg,src/10_144.jpg,src/4_171.jpg,src/19_146.jpg,src/4_148.jpg,src/19_164.jpg,src/6_29.jpg,src/19_171.jpg,src/4_39.jpg,src/2.jpg,src/6_41.jpg,src/19_162.jpg,src/19_154.jpg,src/19_181.jpg,src/4_228.jpg,src/4_140.jpg,src/4_26.jpg,src/4_38.jpg

Image dir: detect
Processed images: 137 , detected images: 22 detection success rate : 16.05839416058394%.

Detected images are:
detect/4_217.jpg,detect/4_171.jpg,detect/19_146.jpg,detect/4_148.jpg,detect/19_164.jpg,detect/4_196.jpg,detect/19_151.jpg,detect/4_76.jpg,detect/4_81.jpg,detect/4_39.jpg,detect/19_159.jpg,detect/2.jpg,detect/19_165.jpg,detect/6_41.jpg,detect/19_162.jpg,detect/19_154.jpg,detect/19_137.jpg,detect/5_13.jpg,detect/4_132.jpg,detect/4_228.jpg,detect/4_26.jpg,detect/4_38.jpg

5 简单分析

以未能成功检测的src/5_50.jpg为例:

该图片通过微信扫码可以成功检测,检测成功时摄像头离图片较近,因此考虑在 QR 检测程序中对图片进行缩放预处理:

x, y = img.shape[0:2]
img = cv2.resize(img, (int(y * 1.5), int(x * 1.5)))

结果如下:
Image dir: detect
Processed images: 137 , detected images: 33 detection success rate : 24.087591240875913%.
Detected images are:
detect/4_217.jpg,detect/4_135.jpg,detect/10_144.jpg,detect/4_171.jpg,detect/4_133.jpg,detect/4_69.jpg,detect/19_164.jpg,detect/19_151.jpg,detect/6_29.jpg,detect/4_76.jpg,detect/6_2.jpg,detect/7_47.jpg,detect/4_81.jpg,detect/4_39.jpg,detect/2.jpg,detect/19_165.jpg,detect/15_75.jpg,detect/7_44.jpg,detect/7_7.jpg,detect/6_12.jpg,detect/19_162.jpg,detect/11_99.jpg,detect/4_100.jpg,detect/19_154.jpg,detect/19_137.jpg,detect/5_50.jpg,detect/5_13.jpg,detect/19_181.jpg,detect/14_11.jpg,detect/4_228.jpg,detect/6_30.jpg,detect/4_26.jpg,detect/4_38.jpg

Image dir: src
Processed images: 134 , detected images: 32 detection success rate : 23.88059701492537%.
Detected images are:
src/4_217.jpg,src/4_135.jpg,src/10_144.jpg,src/4_171.jpg,src/19_146.jpg,src/4_69.jpg,src/19_164.jpg,src/4_196.jpg,src/6_29.jpg,src/4_76.jpg,src/19_171.jpg,src/6_2.jpg,src/4_220.jpg,src/7_47.jpg,src/4_81.jpg,src/7_29.jpg,src/4_39.jpg,src/19_159.jpg,src/4_237.jpg,src/2.jpg,src/19_165.jpg,src/15_75.jpg,src/4_115.jpg,src/19_162.jpg,src/19_154.jpg,src/5_50.jpg,src/5_13.jpg,src/19_181.jpg,src/4_228.jpg,src/6_30.jpg,src/4_26.jpg,src/4_38.jpg

测试结果表明 opencv 中的 QR 码识别 API 主要针对理想位置和大小的 QR 码图像进行识别,而简单的图像预处理可以提高 QR 码识别成功率。

6 总结及展望

我们目前通过调用微信API来实现检测和超分辨率重构,下一步工作将搭建图1所示的网络,利用微信已经训练好的模型,来看看通过超分辨率重构后的效果。

参考文献

https://blog.csdn.net/qq_35054151/article/details/113647111

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

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

相关文章

android web 访问数据库,Web下的JDBC访问数据库的基本步骤

Web下的JDBC访问数据库的基本步骤(2012-06-02 12:09:33)在Java程序中连接数据库的一般步骤分为一下几部分&#xff0c;我摘录出来&#xff0c;跟大家分享。(1)将数据库的JABC驱动加载到classpath中&#xff0c;在基于JavaEE的Web应用开发过程中&#xff0c;通常把JDBC驱动放在W…

linux 磁盘扩容_记录一次ESXi Linux在线扩容,不重启系统

因为工作需要&#xff0c;需要将运行在ESXi主机上面的一台Centos 里面的一个LV卷进行扩容&#xff0c;下面记录了此次扩展的详细过程&#xff0c;整个过程&#xff0c;不需要重启服务器。1. 首先通过df-h 查看当前磁盘结构如下&#xff1a;我们此次的最终目标&#xff0c;就是将…

android item三种,Android RecyclerView中的ItemDecoration的几种绘制方法

如题&#xff0c;我们使用recyclerview的时候&#xff0c;如果没有设置显示条目的margin&#xff0c;或者padding的话&#xff0c;是没有分割线效果的。那么除去使用margin或padding,其余的方法是用itemdecoration绘制分割线我们绘制分割线的时候通常会使用drawable去绘制&…

上传文件和提交textfield_0基础掌握Django框架(37)文件上传

为了更好的学习效果&#xff0c;请搭配视频教程一起学习&#xff1a;Django零基础到项目实战 - 网易云课堂​study.163.com文件上传&#xff1a;文件上传是网站开发中非常常见的功能。这里详细讲述如何在Django中实现文件的上传功能。前端HTML代码实现&#xff1a;在前端中&…

华为p10刷原生android,华为p10怎么刷机 华为p10刷机方法【详细介绍】

喜欢折腾手机的用户一定对于手机root权限获取不陌生&#xff0c;root后虽然不能享受官方联保服务但同时带来的好处不用小编多说。前面给大家介绍了 华为p10 刷入第三方recovery教程&#xff0c;现在华为p10刷机包已经放出来&#xff0c;小编给大家带来华为p10刷机权限获取教程。…

使用container的嵌套_ElementUI 技术揭秘(4)— Container 布局容器组件的设计与实现。...

前言上一篇文章我们分析了 Layout 布局组件的设计和实现&#xff0c;它的应用场景通常是局部布局。对于整个页面的布局&#xff0c;element-ui 提供了 Container 布局容器组件&#xff0c;专门用于 PC 管理后台页面的整体布局。需求分析我们先通过几幅图看一下页面的常见布局。…

宝马屏幕共享android,宝马屏幕共享功能怎么用

【太平洋汽车网】使用宝马屏幕共享要先打开车载电脑多媒体功能&#xff0c;再选择屏幕共享手机投屏&#xff0c;勾掉宝马互联选项&#xff0c;然后再打开手机wifi&#xff0c;选择BMW输入密码即可使用屏幕共享。车手机互联映射即车机互联&#xff0c;就是将手机投屏到车载显示器…

“用于无监督图像生成解耦的正交雅可比正则化”论文解读

Tikhonov regularization terms https://blog.csdn.net/jiejinquanil/article/details/50411617 本文是对博客https://baijiahao.baidu.com/s?id1710942953471566583&wfrspider&forpc的重写。 1 简介 本文是对发表于计算机视觉和模式识别领域的顶级会议 ICCV 2021 的…

html带正方形项目列表,5种简单实用的css列表样式实例,可以直接用到项目中。...

谁不希望有一个好看而又干净的列表&#xff1f;这篇文章中我们给出几个实用的例子&#xff0c;你可以把他们直接用到自己的工作中。我们从一个带有动画效果的垂直列表开始&#xff0c;接着是一个图文混排的例子&#xff0c;然后是一个只有图片的list例子跟一个水平菜单的例子&a…

pb 打印html页面,用PB开发WEB应用

用PB开发WEB应用用PB开发WEB应用烟台教育学院网络中心 孙连三一、PB Window plug &#xff0d;in 的用途PowerBuilder Window plug &#xff0d;in 的用途是在HTML 页面中插入PowerBuilder 中定义的窗口对象&#xff0c;此窗口对象上定义的功能在浏览器中一样被执行&#xff0…

html加上百度统计,vue单页面应用加入百度统计

版权声明&#xff1a;本文为CSDN博主「钟文辉」的原创文章&#xff0c;遵循CC 4.0 by-sa版权协议&#xff0c;转载请附上原文出处链接及本声明。原文链接&#xff1a;https://blog.csdn.net/qq_39753974/article/details/80322643在单页面中&#xff0c;要是只加在head中的话那…

推荐系统:猜你喜欢

0 简介 网络的迅速发展带来了信息超载&#xff08;information overload&#xff09;问题。解决信息超载问题一个非常有潜力的办法是推荐系统&#xff0c;它根据用户的信息需求、兴趣等&#xff0c;将用户感兴趣的信息、产品等推荐给用户。推荐系统最典型应用领域是电子商务领…

量子计算机九章能否预测未来,张礼立 : 中国 “九章”量子计算机到底厉害在哪?...

原标题&#xff1a;张礼立 &#xff1a; 中国 “九章”量子计算机到底厉害在哪&#xff1f;【背景信息】12月4日&#xff0c;《科学》杂志公布了 中国 “九章” 的重大突破。 这台由中国科学技术大学潘建伟、陆朝阳等学者研制的76个光子的量子计算原型机&#xff0c;推动全球量…

利用GAN实现QR Code超分辨率的研究

文章目录1 传统方案2 基于CNN的实现方案2.1 SRCNN2.2 WeChat AI3 基于GAN的实现方案3.1 SRGAN3.2 ESRGAN3.3 Real-ESRGAN4 基于GAN的QR Code的实现方案1 传统方案 https://blog.csdn.net/caomin1hao/article/details/81092134?utm_mediumdistribute.pc_relevant.none-task-bl…

如何用计算机截部分屏,电脑如何长屏幕的截图?电脑截取长屏的方法

新手用户对windows系统截取长屏的方法比较陌生&#xff0c;正常情况下&#xff0c;我们截取屏幕内容是登录QQ&#xff0c;按ctrlalta来截取屏幕的&#xff0c;只能截取部分内容&#xff0c;无法截图整个页面。日常的工作生活中&#xff0c;截图是经常会用到的&#xff0c;如果你…

Audio-based snore detection using deep neural networks解读

0 摘要 Background and Objective: 打鼾是一种普遍现象。 它可能是良性的&#xff0c;但也可能是阻塞性睡眠呼吸暂停 (OSA) 一种普遍存在的睡眠障碍的症状。 准确检测打鼾可能有助于筛查和诊断 OSA。 Methods: 我们介绍了一种基于卷积神经网络 (CNN) 和循环神经网络 (RNN) 组合…

2018计算机专业考研报名人数,2018年全国考研报考人数、各省市考研报考人数、历年考研录取率、全日制及非全日制硕士研究生比例及考研动机分析【图】...

一、考研报考人数、录取率及报录比分析从上世纪末开始&#xff0c;研究生和本科生招生数量一样在逐步增多。本科扩招的同时&#xff0c;研究生也在扩招。1999年&#xff0c;全国报考研究生人数31.9万&#xff0c;录取人数7.3万&#xff0c;录取率22.8%。2008年&#xff0c;报考…

用计算机怎样搜wifi网,笔记本电脑搜索不到无线网络(Wifi)怎么办

在使用Windows 10工作时会遇到形形色色的问题&#xff0c;比如笔记本电脑搜索不到无线网络。那么如何排除故障呢&#xff1f;下面小编与你分享具体步骤和方法。工具/材料Windows 10操作系统操作方法第1&#xff1a;启动Windows 10操作系统&#xff0c;如图所示。点击任务栏&quo…

怎么用计算机杀毒,电脑怎样查杀病毒

病毒往往会利用计算机操作系统的弱点进行传播&#xff0c;那么大家知道电脑怎样查杀病毒吗?接下来大家跟着学习啦小编一起来了解一下电脑查杀病毒的解决方法吧。电脑查杀病毒方法一一、使用杀毒软件进行杀毒1、首先进入“安全模式”2、进入方法&#xff1a;开机在进入Windows系…

将文件中所有数读到一个数组中_「数据结构与算法」将5个文件中的一千万年龄合并到一个新文件中...

现在有5个文件&#xff0c;文件里面分别存储着1千万个用户年龄&#xff0c;并且每个文件中的年龄都是有序的&#xff08;从小到大&#xff09;&#xff0c;现在需要将这5个文件整合到一个文件中&#xff0c;新文件的内容依然要保持有序&#xff08;从小到大&#xff09;。初始化…