ImageMath モジュール

ImageMath モジュールは、複数の画像を受け取り結果を生成する「画像式」を評価するために使用できます。

ImageMath は単層画像のみをサポートします。マルチバンド画像を処理するには、split()メソッドまたはmerge()関数を使用します。

例: ImageMath モジュールの使用

from PIL import Image, ImageMath

with Image.open("image1.jpg") as im1:
    with Image.open("image2.jpg") as im2:
        out = ImageMath.lambda_eval(
          lambda args: args["convert"](args["min"](args["a"], args["b"]), 'L'),
          a=im1,
          b=im2
        )
        out = ImageMath.unsafe_eval(
          "convert(min(a, b), 'L')",
          a=im1,
          b=im2
        )
PIL.ImageMath.lambda_eval(expression, options, **kw)[ソース]

画像関数の結果を返します。

パラメータ:
  • **expression** - 辞書を受け取る関数。

  • **options** - 関数の辞書に追加する値。名前は有効な Python 識別子である必要があります。非推奨。上記の例に示すように、代わりに1つ以上のキーワード引数を使用できます。

  • ****kw** - 関数の辞書に追加する値。画像名と Image インスタンスをマッピングします。

戻り値:

式に応じて、画像、整数値、浮動小数点値、またはピクセルタプル。

PIL.ImageMath.unsafe_eval(expression, options, **kw)[ソース]

画像式を評価します。

危険

これは、Python の eval() 関数を使用して式文字列を処理するため、そのセキュリティリスクが伴います。これを考慮せずに式を処理することはお勧めしません。lambda_eval() は、より安全な代替手段です。

ImageMath は単層画像のみをサポートします。マルチバンド画像を処理するには、split()メソッドまたはmerge()関数を使用します。

パラメータ:
  • **expression** - 標準の Python 式構文を使用する文字列。標準演算子に加えて、以下で説明する関数も使用できます。

  • **options** - 評価コンテキストに追加する値。名前は有効な Python 識別子である必要があります。非推奨。上記の例に示すように、代わりに1つ以上のキーワード引数を使用できます。

  • ****kw** - 評価コンテキストに追加する値。画像名と Image インスタンスをマッピングします。

戻り値:

式に応じて、画像、整数値、浮動小数点値、またはピクセルタプル。

式構文

  • lambda_eval() 式は、画像と演算子を含む辞書を受け取る関数です。

  • unsafe_eval() 式は標準の Python 式ですが、非標準環境で評価されます。

危険

unsafe_eval() は、Python の eval() 関数を使用して式文字列を処理するため、そのセキュリティリスクが伴います。これを考慮せずに式を処理することはお勧めしません。lambda_eval() は、より安全な代替手段です。

標準演算子

加算(+)、減算(-)、乗算(*)、除算(/)には、標準の算術演算子を使用できます。

モジュールは、単項マイナス(-)、剰余(%)、べき乗(**)演算子もサポートしています。

すべての演算は、必要に応じて32ビット整数または32ビット浮動小数点値を使用して行われます。たとえば、2つの8ビット画像を追加すると、結果は32ビット整数画像になります。浮動小数点定数を8ビット画像に追加すると、結果は32ビット浮動小数点画像になります。

以下で説明する convert()float()、および int() 関数を使用して、変換を強制できます。

ビット演算子

モジュールは、個々のビットを操作する演算も提供します。これには、and(&)、or(|)、および排他的論理和(^)が含まれます。すべてのピクセルビットを反転(〜)することもできます。

ビット演算が適用される前に、オペランドは32ビット符号付き整数に変換されます。これは、通常のグレースケール画像を反転すると負の値が得られることを意味します。and(&)演算子を使用して、不要なビットをマスクできます。

ビット演算子は、浮動小数点画像では機能しません。

論理演算子

andornot などの論理演算子は、個々のピクセルではなく、画像全体を操作します。

空の画像(すべてのピクセルがゼロ)は偽として扱われます。他のすべての画像は真として扱われます。

and および or は最後に評価されたオペランドを返す一方で、not は常にブール値を返すわけではないことに注意してください。

組み込み関数

これらの関数は、個々のピクセルに適用されます。

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)

最小値。