画像処理ライブラリPillowのImage.pointにより画像に対して画素毎の変換処理ができる。
Pillow(PIL)を使うためにはインポートが必要。PIL.Imageモジュールは通常以下の形式でインポートされる。
from PIL import Image
また例に用いる元画像 'river.jpg' は以下(フリー写真素材ぱくたそより)
1. pointによる画素の補正
pointは引数のルックアップテーブルまたは関数に応じて画素値を変換する。
全画素の画素値を1.5倍する場合。引数に無名関数(ラムダ式)で画素値1.5倍の式を与える。
from PIL import Image # 画像読み出し im = Image.open('river.jpg') # 画素値を1.5倍変換 out = im.point(lambda i: i * 1.5) # 画像保存 out.save('river_point.png')
実行結果
全画素の画素値を0.5倍する場合。引数に無名関数(ラムダ式)で画素値0.5倍の式を与える。
from PIL import Image # 画像読み出し im = Image.open('river.jpg') # 画素値を0.5倍変換 out = im.point(lambda i: i * 0.5) # 画像保存 out.save('river_point.png')
実行結果
2. ガンマ補正
全画素に単純に定数をかけると256以上の画素値は255に、0未満の画素値は0となりコントラストが失われいわゆる「白とび黒つぶれ」の状態となる。補正式にガンマカーブを用いることでこれを回避できる。
ガンマ=0.5のγカーブで補正した場合。画像が明るく補正されるが白飛びは抑制される。
from PIL import Image # 画像読み出し im = Image.open('river.jpg') # 画素値をgamma = 0.5のガンマ補正 gamma = 0.5 out = im.point(lambda i: (i/255)**gamma*255) # 画像保存 out.save('river_point.png')
実行結果
ガンマ=2のガンマカーブで補正した場合。画像が暗く補正されるが黒つぶれは抑制される。
from PIL import Image # 画像読み出し im = Image.open('river.jpg') # 画素値をgamma = 2のガンマ補正 gamma = 2 out = im.point(lambda i: (i/255)**gamma*255) # 画像保存 out.save('river_point.png')
実行結果
3. チャンネル別の処理
特定のチャンネルを指定して、特定のチャンネルのみにpointを適用できる。まずsplitでチャンネルごとに分割し、pointで特定チャンネルを処理、mergeでチャンネルを統合、という手順になる。
R(チャンネル0)のみ1.5倍にする場合。
from PIL import Image # 画像読み出し im = Image.open('river.jpg') # RGBチャネルに分割 source = im.split() # Rチャネルのみ画素値を1.5倍変換 red = source[0].point(lambda i: i *1.5) # 変換したRチャンネルを分割したRチャンネルに張り付け source[0].paste(red) # 分割したチャンネルをマージ new = Image.merge(im.mode, source) # 画像保存 new.save('river_red.png')
実行結果
4. リファレンス
Pillow (PIL Fork) > The Image Class > Image.point(lut, mode=None)
Pillow (PIL Fork) > Handbook > Tutorial > Point Operations
0 件のコメント:
コメントを投稿