一、基本概念

  • 针对图片分辨率不足的问题,传统的解决方案是使用双线性或双三次插值的方法来放大图像;而针对图片压缩噪声的问题,传统的解决方案则是通过各种算法实现平滑、去噪。
  • 本 SDK 使用智能的方法,基于深度神经网络,依托硬件的神经网络加速器,提供适用于移动终端的1x和3x超分能力;1x超分可以去除图片的压缩噪声,3x超分在有效抑制压缩噪声的同时,提供3倍的边长放大能力。
  • “超分”,即单张图片空间域超分辨率(SISR:Single Image Super-Resolution),指给定单张图片,使用智能方法将其放大,令其分辨率更高,得到比传统放大更加清晰的细节纹理;或者在分辨率不变的情况下,去除压缩噪声,获得更加锐利、干净的图片。
  • 运作机制:图像超分引擎内置于手机中,应用程序可以通过本 SDK 访问超分能力,降低图片超分应用的开发门槛,减小应用程序大小。

二、约束与限制

  • 支持处理的图片格式包括 JPEG、JPG、PNG,最终输出的图片仅支持 JPEG 格式。
  • 目前支持1x和3x超分,两种超分对图片规格的支持情况如下表所示:
超分类型 效果 支持图片较长边最大像素数 支持图片较短边最大像素数
1x 不改变图片的尺寸,但可以智能识别、抑制图片本身的压缩噪声,令图片更加干净清晰 1920 1080
3x 图片的边长放大3倍 1024 768
  • 目前支持灰度图和 RGB 图像,在 JAVA 中为 PixelMap 的 ALPHA_8 和 ARGB_8888 两种 PixelFormat 格式。其中,如果 ARGB_8888 格式的输入图片的 Alpha 通道没有做超分或放大处理,输出图片的 Alpha 通道将被置为 255。
  • 正如其他智能算法存在着准确率的限制,本 SDK 并不能解决所有图片的放大和噪声抑制问题。对于某些成像质量特别差或者存在着除压缩噪声外其他种类噪声的图片,本 SDK 并不一定总能得到令人满意的结果。

三、应用场景

  • 图像超分在实际应用中有广泛的前景,比如提升网络图片的画质,在阅读新闻时获得更加清晰的大图等等。
  • 图像超分可能的应用场景包括但不限于:
    • 抑制压缩噪声:1x的超分可以去除高压缩率图片的压缩噪声。
    • 节省存储和流量:可加大图片压缩率,有助于存储及传送高压缩率的图片。
    • 高质量放大:3x超分将图片放大3倍,还能有效抑制压缩噪声。

四、API 说明

  • 图像超分提供了 setVisionConfiguration() 和 doSuperResolution() 两个函数接口。
  • setVisionConfiguration 是 IImageSuperResolution 接口的成员,通过传入的 SisrConfiguration,选择具体的超分参数:
 void setVisionConfiguration(SisrConfiguration config);
  • SisrConfiguration 的常用设置如下:
接口 参数名 类型 参数说明
setScale() scale float 设置超分倍数。目前支持SisrConfiguration.SISR_SCALE_1X和SisrConfiguration.SISR_SCALE_3X
setScale() void void 设置超分倍数为默认值SisrConfiguration.SISR_SCALE_1X
setQuality() quality int 设置超分质量。目前支持的参数类别为
SisrConfiguration.SISR_QUALITY_LOW、
SisrConfiguration.SISR_QUALITY_MEDIUM和
SisrConfiguration.SISR_QUALITY_HIGH。
但该入参目前并未实际使用,无论如何设置都会执行当前能力下的最高质量超分。
setQuality() void void 设置返回图片的超分质量为SisrConfiguration.SISR_QUALITY_HIGH
  • 调用 IImageSuperResolution 的 doSuperResolution() 方法,执行图像超分:
 int doSuperResolution(VisionImage image, ImageResult result, VisionCallback<ImageResult> visionCallback);
  • 参数说明:
    • image 为待超分的输入图片。
    • 如果 visionCallback 为 null,执行同步调用,结果码由方法返回,超分结果由 result 中返回。
    • 如果 visionCallback 为有效的回调函数,则该函数为异步调用,函数返回时result中的结果无效,实际超分结果由回调函数返回。
    • 同步模式调用成功时,该函数返回结果码0;异步模式调用请求发送成功时,该函数返回结果码700。

五、开发流程

  • 在使用图像超分 SDK 时,先将相关的类添加至工程:
 import ohos.ai.cv.common.ConnectionCallback;import ohos.ai.cv.common.VisionCallback;import ohos.ai.cv.common.VisionImage;import ohos.ai.cv.common.VisionManager;import ohos.ai.cv.common.ImageResult;import ohos.ai.cv.sr.IImageSuperResolution;import ohos.ai.cv.sr.SisrConfiguration;import ohos.app.Context;import ohos.media.image.PixelMap;
  • 定义 ConnectionCallback 回调,实现连接能力引擎成功与否后的操作:
 ConnectionCallback connectionCallback = new ConnectionCallback() {@Overridepublic void onServiceConnect() {// 定义连接能力引擎成功后的操作。}@Overridepublic void onServiceDisconnect() {// 定义连接能力引擎失败后的操作。}};
  • 调用 VisionManager.init() 方法,将此工程的 context 和和已经定义的 connectionCallback 回调作为入参,建立与能力引擎的连接,context 应为 ohos.aafwk.ability.Ability 或 ohos.aafwk.ability.AbilitySlice 的实例或子类实例:
 int result = VisionManager.init(context, connectionCallback);
  • 实例化 VisionImage 对象 image,并传入待超分图片 pixelMap:
 VisionImage image = VisionImage.fromPixelMap(pixelMap);
  • 实例化 ImageResult 对象 imageResult,该对象用于在同步模式下存放 doSuperResolution() 方法传出的超分后图片结果:
 ImageResult imageResult = new ImageResult();
  • (可选)定义 VisionCallback 回调:
    • 在异步模式下,该类的 onResult() 方法用于获得超分的结果 imageResult(内含超分后图片结果);onError() 方法用于处理错误返回码;onProcessing() 方法用于返回处理进度,目前没有实现此接口的功能。
    • 同步与异步模式区别在于 doSuperResolution() 的最后一个参数 visionCallback 是否为空。若非空则为异步模式,此时会忽略自定义的 ImageResult 输入 result,接口调用结果一律从回调类 visionCallback 获得。
 VisionCallback<ImageResult> callback= new VisionCallback<ImageResult>() {@Overridepublic void onResult(ImageResult imageResult) {// 对正确获得图片超分结果进行处理}@Overridepublic void onError(int i) {// 处理错误返回码}@Overridepublic void onProcessing(float v) {// 返回处理进度}};
  • 通过 SisrConfiguration 配置超分参数,可选择超分倍数、质量、调用模式(推荐使用 MODE_IN 同进程模式)等。跨进程模式(MODE_OUT)下调用方与能力引擎处于不同进程;同进程模式(MODE_IN)下,能力引擎在调用方进程中实例化,调用方通过反射的方式调用引擎里的图像超分能力。以下以同进程调用,3x最高质量超分为例:
 SisrConfiguration.Builder builder = new SisrConfiguration.Builder();builder.setProcessMode(VisionConfiguration.MODE_IN);SisrConfiguration config = builder.build();config.setScale(SisrConfiguration.SISR_SCALE_3X);config.setQuality();imageSuperResolution.setVisionConfiguration(config);
  • (可选)调用 IImageSuperResolution 的 prepare 方法,如果返回的 result 不为0,说明当前超分能力准备失败,需要处理错误,不再执行之后的动作。在 doSuperResolution() 方法中会首先调用 prepare() 启动引擎,如果引擎已经启动则不会再次启动
 result = imageSuperResolution.prepare();
  • 调用 IImageSuperResolution 的 doSuperResolution 方法:
    • 同步模式调用完成时,该函数立即返回结果码。
    • 异步模式调用请求发送成功时,该函数返回结果码700。如果返回其他的值,说明异步调用请求不成功,需要先处理错误,回调函数不会被调用。
    • 如果异步模式调用请求发送成功,则超分完成后,相应的回调函数会被自动调用:
    • 如果 onResult() 回调被调用,说明超分成功,相当于同步模式结果码为“0”的情况。
    • 如果 onError() 方法被调用,说明超分发生了错误,具体的调用结果码将由 onError() 的参数接收。
 result = imageSuperResolution.doSuperResolution(image, imageResult, null); // 同步// 或result = imageSuperResolution.doSuperResolution(image, null, callback); // 异步
  • 结果码定义如下表:
结果码 说明
0 成功
-1 未知错误
-2 不支持的功能或接口
-3 内存分配失败或创建对象失败
-4 所需库加载失败
-10 引擎开关已经关闭
101 失败
102 超时
200 输入参数不合法(图片尺寸错误)
201 输入参数不合法(为空)
210 输入参数合法
500 服务绑定异常
521 服务绑定异常断开
522 服务已连接
600 模型文件异常
601 模型文件不存在
602 模型加载失败
700 异步调用请求发送成功
1001 神经网络处理单元错误
  • 调用 IImageSuperResolution 的 release() 方法,释放模型资源;调用 pixelMap 的 release() 方法,释放图片内存:
 result = imageSuperResolution.release();if (pixelMap != null) {pixelMap.release();pixelMap = null;}
  • 调用 VisionManager.destroy() 方法,断开与能力引擎的连接:
 VisionManager.destroy();

HarmonyOS之AI能力·图像超分辨率相关推荐

  1. HarmonyOS之AI能力·文字图像超分

    一.简介 文字图像超分辨率可以对包含文字内容的图像进行 9 倍放大(高宽各放大 3 倍),同时增强图像内文字的清晰度,称为"文字图像超分辨率",简称"文字图像超分&quo ...

  2. 图像超分辨率与天气预报

    图像超分辨率与天气预报 虽然我们每天都看天气预报,但是你知道我们所看到的天气预报是怎么预测出来的吗?气象预报按天气预报的时效长短,可粗略分为:短时天气预报.短期天气预报.中期天气预报和长期天气预报.数 ...

  3. 小米9拍照黑科技:基于NAS的图像超分辨率算法

    作者:Xiangxiang Chu, Bo Zhang等 丨 机器之心编译丨 雷军表示:这是一篇小米最新出炉的论文,基于弹性搜索在图像超分辨率问题上取得了令人震惊的结果,该模型已开源. 本篇是基于 N ...

  4. 图像超分辨率进ASC19超算大赛,PyTorch+GAN受关注

    近日,2019 ASC世界大学生超级计算机竞赛(ASC19)公布了初赛赛题. 来自全球200余所高校的300多支大学生队伍,将在长达两个月的初赛阶段,尝试挑战一项当前热门的人工智能技术--单张图像超分 ...

  5. 超分辨率 | 综述!使用深度学习来实现图像超分辨率

    关注公众号"AI算法修炼营",选择"星标"公众号 精选作品,第一时间送达 今天给大家介绍一篇图像超分辨率邻域的综述,这篇综述总结了图像超分辨率领域的几方面:pr ...

  6. 基于Python的图像超分辨率(Image Super Resolution)

    资源下载地址:https://download.csdn.net/download/sheziqiong/85596189 一.业务背景 本实验将使用时深度学习技术对图像进行超分辨率重建,设计到的技术 ...

  7. GAN的应用-SRGAN图像超分辨率重构、U-net结构和字“姐”跳动学习心得

    GAN的应用 -- SRGAN图像超分辨率重构 项目地址:https://aistudio.baidu.com/aistudio/projectdetail/843989 文章来源:2017 IEEE ...

  8. 图像超分辨率重建算法,让模糊图像变清晰(附数据和代码)

    一.  图像超分辨率重建概述 1. 概念 图像分辨率是一组用于评估图像中蕴含细节信息丰富程度的性能参数,包括时间分辨率.空间分辨率及色阶分辨率等,体现了成像系统实际所能反映物体细节信息的能力.相较于低 ...

  9. CVPR 2021 | 基于跨任务场景结构知识迁移的单张深度图像超分辨率方法

    ©PaperWeekly 原创 · 作者|孙宝利 学校|大连理工大学硕士 研究方向|计算机视觉 项目主页: http://faculty.dlut.edu.cn/yexinchen/zh_CN/zdy ...

最新文章

  1. BZOJ1011 莫比乌斯反演(基础题
  2. 解决TCP网络传输“粘包”问题
  3. 文件描述符在内核态下的一些小把戏
  4. 2018 亚太数学建模大赛B题解题思路
  5. python 双向链表_python算法与数据结构-双向链表(40)
  6. 20155305乔磊2016-2017-2《Java程序设计》第四周学习总结
  7. flask-02-简单认识
  8. Java程序员最喜爱的编辑器之一(Sublime Text 3)
  9. Windows Serer2003域升级到Windows Server2008R2域
  10. 在 VM的CentOS 中 安装 sspanel 宝塔面板 总结
  11. 电脑安装有道后打开word文档很慢
  12. python判断正数和负数教案_正数和负数的教案设计
  13. pytorch gpu版本安装
  14. android动态文本框,Android文本框实现搜索和清空效果
  15. 下一代云原生应用交付会怎样发展?KubeVela帮大忙。
  16. LVGL (8) 绘制流程
  17. 小白学习,歌词解析(全)
  18. pytest【marker标记】
  19. 使用Wechaty实现微信机器人操作
  20. idea中摸鱼插件_IDEA 看书摸鱼插件,时隔一年,再次更新

热门文章

  1. 33. Search in Rotated Sorted Array
  2. vue全局路由守卫beforeEach
  3. 使用python实现简单的爬虫
  4. 实验九 根据材料编程
  5. HDU.5909.Tree Cutting(树形DP FWT/点分治)
  6. 饲料企业精细化生产管理方案
  7. 开发HTML5手机游戏的5个注意要点--手机开发前景-- 转
  8. android roboto字体下载,Android字体设置及Roboto字体使用方法
  9. Java黑皮书课后题第8章:*8.32(几何:三角形面积)编写一个方法,使用下面的方法头,返回一个三角形的面积。编写一个程序,提示用户输入三角形的三个点,然后显示三角形的面积
  10. Java黑皮书课后题第4章:*4.5(几何:正多边形的面积)正多边形是一个具有n条边的多边形,它每条边的长度都相等,而且所有角的度数也相等。编写程序,提示用户数输入边个数和边长,然后显示它的面积