Python Imaging Library: ImageMath Module(图像数学运算模块)
(新版本1.1.6)可以使用ImageMath模块来评估“图像表达式”。这个模块提供了一个eval函数,它使用一个表达式字符串和一个或多个图像。
例程
import Image, ImageMathim1 = Image.open("image1.jpg")
im2 = Image.open("image2.jpg")
out = ImageMath.eval("convert(min(a, b), 'L')", a=im1, b=im2)
out.save("result.png")
函数
eval
eval(expression, environment) ⇒ image or value
在给定的环境中对表达式求值。
表达式参数是使用标准Python表达式语法的字符串。除了标准操作符之外,您还可以使用下面描述的函数。
环境参数将图像名称映射到图像实例。您可以使用一个或多个关键字参数而不是字典,如上述示例所示。
注意,名称必须是有效的Python标识符。
在当前版本中,ImageMath只支持单层图像。要处理多波段图像,先使用分割和合并函数。
这个函数返回一个图像,一个整数值,一个浮点值,或者一个像素元组,这取决于表达式。
表达式语法(Expression Syntax)
表达式是标准的Python表达式,但是它们是在一个非标准的环境中进行评估的。
您可以像往常一样使用方法,加上下面的操作符和函数:
标准运算符(Standard Operators)
您可以使用标准的算术运算符,如加(+)、减(-)、乘()和除(/)。
该模块还支持一元负号(-)、模数(%)和幂(**)操作符。
注意,所有操作都是在32位整数或32位浮点值的情况下完成的。
例如,如果您添加两个8位图像,结果将是一个32位整型图像。
如果您将浮点数添加到一个8位图像,结果将是一个32位的浮点图像。
您可以使用下面描述的转换、浮动和int函数来强制转换。
按位运算符(Bitwise Operators)
该模块还提供单个位操作运算符。这包括和(&)、或(|)、亦或(^)、取反(^)。
注意,在应用位操作之前,操作数被转换为32位有符号整数。
这意味着,如果你取反一个普通灰度图像,你会得到负值。
你可以使用和(&)操作符来屏蔽不想要位。
位操作不适用于浮点数图像。
逻辑运算符(Logical Operators)
逻辑运算符,如和(and)、或(or)、非(not),对整个图像进行处理,而不是单个像素。
一个空的图像(所有像素值为0)被认为是错误的。所有其他图像都被认为是正确的。
注意,和(and)、或(or)运算符返回最后一个求值的操作数,而非(not)总是返回一个布尔值。
内置函数(Built-in Functions)
这些函数适用于每个像素。
abs(image):绝对值。
convert(image, mode):将图像转换为指定模式。模式必须以字符串常量的形式给出。
float(image):将图像转换为32位浮点数图像。这等价于:convert(image, “F”)。
int(image):将图像转换为32位整数图像。这相当于:convert(image, “I”)。
注意,如果有必要,1位和8位图像会自动转换为32位整数图像,以得到正确的结果。
max(image1, image2):最大值。
min(image1, image2):最小值。