文件 | 语言 | 大小 | 版本 | 开发者 | 最后更新 | |
lands/effe production | JavaScript | 4.2KB | v1.0.0 | YB | 2024-10-21 | 查看 |
lands/effe source code | JavaScript | 11.4KB | v1.0.0 | YB | 2024-10-21 | 查看 |
const effe = await Lan.import('effe');
var image = ... // load image
image = effe.grayworld(image);
参见向导程序:图像处理。
import * as effe from "https://ddzeb.com/lands/effe";
var image = ... // load image
image = effe.grayworld(image);
const effe = await import("https://ddzeb.com/lands/effe");
var image = ... // load image
image = effe.grayworld(image);
effe 主要用于研究图像处理算法,我们已经开发了灰世界白平衡、直方图均衡化等算法。因为 effe 实际上是一个框架算法,要开发和试验新算法也相当简单。
这是一个图像处理的框架算法,是整个 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;
});
运行结果如下:
这个算法是将对比度进行拉伸,在某种程度上可以起到亮度均衡化的作用,图像处理软件的自动对比度基本上就是该算法,使用例子请参考:Auto Contrast。
直方图均衡化的基本原理是统计出亮度分布,然后重新进行均衡化的分布。
滑动窗口(Sliding Window)自适应直方图均衡化,每个像素点在其邻域内做直方图均衡化处理。
Component Stretch 是按每个颜色分量进行拉伸操作。
基于灰世界理论的白平衡处理。
Component Stretch 是按每个颜色分量进行拉伸操作。
油画效果。