【RxImg】基于响应式数据流的图像处理新范式

什么是RxImg

RxImg是以响应式数据流为主的一个图像处理工具,可以在一个低代码可视化的界面上搭建图像处理流程。由于引入了响应式的数据流,相对于以往类似的工具RxImg有如下优势。

  1. 支持更复杂的图像数据流,比如多分枝的,循环的,带条件的。
  2. 流程可视化
  3. 低代码
  4. 可以利用python生态中的各种图像处理,深度学习资源

什么是响应式数据流

以观察者模式抽象图像处理步骤,这样数据源和图像处理函数就可以表达成一个有向图。只要数据源有更新,有向图中剩下的节点就会响应式的执行。

现有哪些技术

基本上用过opencv等图像处理库的人都有可能产生一个想法,如果有个工具集成了图像处理中所有函数,然后将这些函数作为节点用线连接起来,最后规定好输入输出,是不是就可以以这种有向图的方式搭建一个图像处理系统。而且由于采用有向图的方式,这样的系统应该可以在界面上进行节点的删减和功能的调整。

事实上这种系统已经有一些了,比如ImagePlay。
在这里插入图片描述

ImagePlay采用有向图的方式将图处理函数串联起来,中间每个步骤都可以编辑
除了显式的有向图的工具,还有像ImageJ这样采用hardcode实现了各种图像处理算法的工具。
在这里插入图片描述

ImageJ通过制定好的控件,可以在界面上进行各种图像处理操作
这些工具似乎实现了人们的愿望,就是不用编码,只用熟悉图像处理本身的知识,就可以搭建一个图像处理系统。但是,这样工具出现已经很多年了,却并没有很广泛的应用。我认为一个很重要的原因在于相对于编码的方式,这种基于界面搭建图像处理系统的方式不够灵活,只能满足一些相对单一的流程,处理不了复杂的需求。

如何实现

Rxjs是JavaScript领域的一个函数式库,RxPY是Rxjs的python实现。通过引入这一框架,就可以将python的图像处理步骤变成响应式的,达到我们的目的。

响应式数据流的基础概念

Observable可观察对象

可观察对象是一种可被订阅的响应式数据。响应式的意思是一旦数据有更新,会往订阅者推送该更新。

Observer观察者

被订阅的回调函数,接收来自可观察对象的更新。

Subscription订阅

订阅的时候就会执行一个可观察对象。

Operators操作符

可以以函数式的编程风格使用的一些纯函数。

Subject主体

可以将数据流分发给多个下游观察者

Schedulers调度器

调度器用于数据流执行的调度。

范例

一个最简单的单播数据流

在这里插入图片描述

这是一个只包含,Observable、Observer和Operator的数据流。这个数据流的功能是读取图片,显示图片。

一个最简单的多播数据流

在这里插入图片描述

这个of数据源支持了一个多播的数据流,分别分发给了两个由imshow订阅的subject。

整个数据处理流程用一个GIF表示就像这样子。
在这里插入图片描述

工具链

除了直接导入RxJS这样的库,这个工具还需要一些函数式的思想来支持,整个工具链如下:

Python3.9以上,因为3.9以上对typehints的支持好一些,既然是一个函数式的工具,需要很强的类型支持。
Opencv,Opencv封装了大部分的图像处理操作,而且都是纯函数。
Numpy,封装了大部分矩阵操作,而且相对于C++的opencv来说,python中的图片都是numpy类型。
RxPy,Rxjs的python版本。
采用这样的工具链可以带来如下好处

输入数据的类型单一,只需要int、float、str、list、tuple、NDArray这几个类型即可覆盖大部分功能。后续需要新的数据类型也只用进行少量扩充即可。
函数组件都是无副作用的纯函数。
可以通过类型注解去推导出函数的控件和默认值,这样只用把函数以及参数类型定义好,就可以在界面上自动生成输入控件,而且可选参数有默认值。
Numpy的broadcast操作可以替代一些for循环操作。

系列目录

https://github.com/rximg/rximg.git
【RxImg】一个响应式的图像处理工具
https://zhuanlan.zhihu.com/p/496054199
【RxImg】基础概念 of
https://zhuanlan.zhihu.com/p/497466246
【RxImg】各个模块介绍
https://zhuanlan.zhihu.com/p/498125496
【RxImg】自定义函数输出参数自动推断
https://zhuanlan.zhihu.com/p/508226687
【RxImg】低代码玩转ImageNet深度学习图像分类
https://zhuanlan.zhihu.com/p/514739271
【RxImg】低代码玩转PaddleHub的360+深度学习模型
https://zhuanlan.zhihu.com/p/517834251

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值