蓝紫™
DDZEB 完全自主知识产权图形图像开发平台
开放源码 免费使用 在线运行
纯 JS 链式图像处理算法及框架,轻松开发新算法。
文件语言大小版本开发者最后更新
lands/effe productionJavaScript4.2KBv1.0.0YB2024-10-21查看
lands/effe source codeJavaScript11.4KBv1.0.0YB2024-10-21查看
一、简要介绍 二、接口方法一、简要介绍

effe 主要用于研究图像处理算法,我们已经开发了灰世界白平衡、直方图均衡化等算法。因为 effe 实际上是一个框架算法,要开发和试验新算法也相当简单。

二、接口方法 2.1、process(source, processing, initialize)

这是一个图像处理的框架算法,是整个 effe 库的基础。

const {process} = await Lan.import('effe');
const inputimage = ... // load input image   
const processing = (x, y, source) => {...};
const initlize   = (source, processor) => {...};
const processor  = process(inputimage, processing, initialize);

其中 inputimage 为源图像,Image、ImageData、ImageBitmap 或 VideoFrame 等类型均可。

函数 processing 为图像处理算法,三个参数分别为:输出图像 x 坐标、输出图像 y 坐标以及输入图像 source(类型为 ImageData)。

函数 initialize 为可选参数,它负责进行初始化运算,通常会根据输入图像数据 source(类型为 ImageData)进行一些统计或计算。正常情况下它需要返回输出图像尺寸 [width, height],当它没有返回的时候,我们认为输出图像尺寸与输入图像尺寸一致。

process 函数返回对象(processor)具有如下接口:

输入图像 source 附加接口:

接下来看一个实际的例子,我们可以使用 process 接口做一个简单的图像取反(invert)运算效果:

const media = (await Lan.import('media')).media();
const {process} = await Lan.import('effe');

const runner = process(await media.image('I2'), (x, y, source) => {
  var [r, g, b, a] = source.get(x, y);
  return [255 - r, 255 - g, 255 - b, a];
});
const canvas = await Lan.pixels(runner.output.width, runner.output.height);

Lan.loop(() => {
  canvas.refresh(runner.process());
  return runner.active;
});

运行结果如下:

图像取反
自定义图像处理示例:图像取反
2.2、contrastStretch(source, options = {})

这个算法是将对比度进行拉伸,在某种程度上可以起到亮度均衡化的作用,图像处理软件的自动对比度基本上就是该算法,使用例子请参考:Auto Contrast

自动对比度
自动对比度图像处理:Auto Contrast
2.3、equalize(source, options = {})

直方图均衡化的基本原理是统计出亮度分布,然后重新进行均衡化的分布。

直方图均衡化
直方图均衡化图像处理:Histogram Equalization
2.4、equalizeAdaptive(source, options = {})

滑动窗口(Sliding Window)自适应直方图均衡化,每个像素点在其邻域内做直方图均衡化处理。

自适应直方图均衡化
自适应直方图均衡化图像处理:Adaptive Histogram Equalization
2.5、componentStretch(source, options = {})

Component Stretch 是按每个颜色分量进行拉伸操作。

Component stretching
分量拉伸图像处理:Component Stretch
2.6、grayworld(source, options = {})

基于灰世界理论的白平衡处理。

灰世界白平衡图像处理
灰世界白平衡图像处理:Gray World
2.7、grayscale(source, options = {})

Component Stretch 是按每个颜色分量进行拉伸操作。

Grayscale
灰度化(去色)图像处理:Grayscale
2.8、oilify(source, options = {})

油画效果。

油画效果
油画效果图像处理:Oilify