govips中多张图片的并行叠加

Parallel overlaying of multiple images in govips

Govips中,是否有将多个图像并行叠加在基本图像上的功能? 有一个函数 - compositeMulti 获取图像列表但它是否并行渲染它?此外,它是否能够识别必须在图像上渲染哪个图像的哪个像素,而不是迭代地遍历所有图像并一张一张地渲染。

libvips(govips背后的图像处理库)是demand-driven和horizontally-threaded。正在计算的图像处理管道以图形表示,您 PC 上的每个线程在输出图像中选择一个图块(通常为 128 x 128 像素),并且线程独立地从图形的末端开始计算像素。

composite 运算符(compositeMulti 调用的东西)计算使用 PDF-style 混合模式叠加一组图层的结果。对于每个图块,它选择在该点可见的图层子集。它只能在选择的混合模式为 'skippable' 时执行此操作,即。在基本图像上合成黑色(空像素)将无效。

您可以在此处查看可跳过性测试:

https://github.com/libvips/libvips/blob/master/libvips/conversion/composite.cpp#L1273-L1296

图层剔除循环在这里:

https://github.com/libvips/libvips/blob/master/libvips/conversion/composite.cpp#L443-L460

最后,选择的层被合成,如果可能的话使用矢量算法。它将 RGBA 像素表示为四个浮点数的向量,并将它们一起计算。

tldr:libvips 组合是线程化的、矢量化的,并且(如果可能的话)进行 tile-wise 可见性剔除。