Engee 文档
Notebook

在 Engee 中处理图像

让我们介绍一种设计图像处理算法的方法,将图像加载到 Engee 画布上的组件中,并处理不同的颜色通道。

示例目的

图形设计环境可以实现极高的开发速度。虽然全面的图形开发需要一个庞大的组件库,而设计者必须能够理解这些组件,但这种方法可以避免编码错误,并在总体上使专业程序员和其他应用科学领域的专家机会均等。

任务描述

在本示例中,我们将演示如何将图像载入画布组件并反转其中一个通道。输入图像文件的名称应作为Изображение 块的参数Название файла 提供。假设图像有 4 个通道。

如果输入图像中没有 Alpha 通道(透明度通道),模型将在输出端 A 输出一个由 255 个值组成的矩阵。

图像大小警告

在处理大图像时,在代码块内存储图像的方法效率不高。如果在块代码中以文本形式存储矩阵,可能会出现这种情况。

我们建议在小尺寸图像(单边小于 200 像素)上调试算法。为了很好地处理大尺寸图像,很可能需要将图像以char* 格式放在组件代码中,并借助额外的 C/C++ 库进行 "解包"。

初始图像为 300 x 300,模型编译时间为 62 秒,初始化时间为 49 秒,执行时间为 0.36 秒(总计 110 秒)。

使用 200 x 200 的源图像,模型编译 18 秒,初始化 25 秒,运行 0.32 秒(总计 43 秒)。

包括模型编译和初始化在内,处理 100*100 图像的时间不到 10 秒。

模型描述

更改遮罩参数时,图块正面的图像也会更新。图像也放在图块代码内,即使移动模型或移动或删除原始图像文件,图像也不会被删除。

image.png

让我们通过程序控制机制来运行模型:

In [ ]:
model_name = "picture_read_model";
model_name in [m.name for m in engee.get_all_models()] ? engee.open(model_name) : engee.load( "$(@__DIR__)/$(model_name).engee");
res = engee.run( model_name );

通过访问函数库RGBA 查看转换后的图像Images.jl

In [ ]:
pic = RGBA.( collect(res["out_R"])[end,end]./255,
       collect(res["out_G"])[end,end]./255,
       collect(res["out_B"])[end,end]./255,
       collect(res["out_A"])[end,end]./255 )
Out[0]:
No description has been provided for this image

将获得的图像保存到文件中。

In [ ]:
save( "out.png", pic )

不出所料,我们反转了红色通道的值,删除了透明通道并输出了图像。

结论

Engee 可以相对轻松地构建机器视觉算法原型,同时保持图形编程所提供的操作层次和逻辑清晰度。

示例中使用的块