Snowy: Numpy加速的图像处理库

Snowy: Numpy加速的图像处理库

Snowy

Snowy是一个能够处理和生成图像的小模块。它具有以下特征:

  • 浅显易懂的API接口(只有开源函数组成)。

  • 纯Python3 语言编写。

  • 使用numba进行加速优化。

  • 可配置的边界条件(参见校正模式)。

Snowy 并不把图片定义为一个类对象,而是定义为一个三维numpy数组,该三维数组以行为主序。举个例子,RGB图像具有形状[高度,宽度,3 ],灰度图像具有形状[高度,宽度,1 ]。Snowy提供了一些实用功能,使其易于与其他模块一起工作(参见互用性)。

安装

安装和更新Snowy,请执行如下命令:

pip3 install -U snowy

使用举例

尺寸调整和模糊处理

以下部分代码首先对图片进行尺寸调整,然后进行模糊化处理,最后把处理后的图片和原始图片水平连接在一起。

Snowy: Numpy加速的图像处理库
Snowy: Numpy加速的图像处理库

以下部分代码首先使用最近邻滤波器对对图片进行放大,再使用默认的米切尔滤波器进行放大。

Snowy: Numpy加速的图像处理库
Snowy: Numpy加速的图像处理库

旋转和翻转

Snowy: Numpy加速的图像处理库
Snowy: Numpy加速的图像处理库

裁剪

如果您需要对图片进行裁剪,只需使用numpy的切片功能即可。

例如,如下代码将载入一张OpenEXR格式的图片,并截取图片的上半部分。

Snowy: Numpy加速的图像处理库

顺便说一句,如果您对色调映射以及其他的HDR操作感兴趣的话,务必看一下hydra模块。如果您只是想简单加载或者存储原始双精度数据的话,可以考虑使用npy文件,而不是用图像文件。相对应的函数是numpy.load(filename) 和 numpy.save(filename, array)。

Snowy: Numpy加速的图像处理库

Alpha合成

如果您要将某张图片的一部分复制到另外一张图上,只需使用numpy的切片功能即可。

但是您想将两部分图片实现source-over(在目标图像上显示源图像)风格的叠加,使用numpy的函数是比较麻烦的。Snowy提供的组合功能使这样的操作变得更容易:

Snowy: Numpy加速的图像处理库Snowy: Numpy加速的图像处理库

阴影

把模糊处理和合成两个功能联合起来使用,可以生成带阴影效果的图片,如下

Snowy: Numpy加速的图像处理库Snowy: Numpy加速的图像处理库

梯度噪声

Snowy的generate_noise函数可以生成一个值在[-1,+1 ]之间的单通道图像。下面的代码生成了一个可以平铺的平方噪声图像:

Snowy: Numpy加速的图像处理库Snowy: Numpy加速的图像处理库

如果您对其他类型的噪声感兴趣的话,或者您需要一个超级快的噪声生成器,你可以试试pyfastnoisesimd.模块

距离场

下面这个例子使用generate_sdf函数从一副黑白图像产生了有向距离场,图像由被正方形包围的两个圆构成。注意使用归一化函数(unitize)将图像值调整到[0,1]之间。

Snowy: Numpy加速的图像处理库Snowy: Numpy加速的图像处理库

生成图像

结合Snowy独特的功能特性和numpy可以生成一些有序的程序化图像。下面的例子对一个虚构海岛生成了对应的海拔图像。

Snowy: Numpy加速的图像处理库Snowy: Numpy加速的图像处理库

形变模式

Snowy的blur, resize, generate_noise, and generate_sdf的函数都有一个wrapx和wrapy参数,默认值是False。这些参数告诉Snowy如何从源图像边界外或噪声函数取样。

为了帮助大家理解参数的含义,看下面这幅平铺图片及其2*2的扩展图像:

Snowy: Numpy加速的图像处理库Snowy: Numpy加速的图像处理库

接下来,我们对扩展图像进行模糊处理:

Snowy: Numpy加速的图像处理库

看到图片之间的接缝了么?现在我们重新对图片进行模糊处理,但是在调用blur函数时,将wrapx和wrapy参数设置为True。

Snowy: Numpy加速的图像处理库

可形变梯度噪声

形变参数对于2D的噪声处理也是很有帮助的。一种生成可平铺梯度噪声的方法是在圆柱体,圆环面或立方体的表面上对3D噪声进行采样。然而,Snowy可以通过arithmetic函数生成2D噪声,这种方式更加有效。

下面的图片,我们使用generate_noise函数创建了一个128x256噪声图像,没有使用wrapx参数,然后将其水平扩展两次:

Snowy: Numpy加速的图像处理库

下面是另一幅梯度噪声的图像,但是这次使用了wrapx参数:

Snowy: Numpy加速的图像处理库

可行变距离场

Snowy的generate_sdf函数同样有warp参数,下面是一个4*2扩展的距离场图像:

Snowy: Numpy加速的图像处理库

下面是同样的图像,但是在调用generate_sdf函数时,wrapx和wrapy参数设置为True:

Snowy: Numpy加速的图像处理库

互操作性

Snowy的算法要求可处理的图像是以行为主序的三维float64精度numpy数组,并且颜色通道位于尾部维度中。如果您使用的其他模块没有遵循此约定,可以考虑使用以下互操作函数进行格式转换。

    • 若要从灰度图像尾部添加或移除1单位,请使用reshape 和unshape函数。

    • 若要在主维度中交换颜色通道,请使用to_planar 和 from_planar。

    • 若要在float64和其他类型之间进行转换,只需使用numpy。 例如,np.uint8(myimg * 255)或np.float64(myimg)/255。

    • 若要交换行列,请使用numpy的swapaxes函数。

英文原文:https://github.prideout.net/snowy/
译者:少年


分享到:


相關文章: