]> Panopticon :: Python :: PILのImageFilter

<< 明けまして | main | Pythonの多次元リストをどのように作るべきか >>

PILのImageFilter

PIL(Python Imaging Library) は、Pythonインタープリタ用の画像処理ライブラリ群。これを使うとPythonで多くの形式のファイルを読み取って相互に変換できたり、非常に便利。

例えば、RGB画像を開いてその画素値を配列で取得するには、

import Image

filename = "xxx.xxx"
im = Image.open(filename)
print list(im.getdata())

輝度表現に変換。

im = im.convert("L")
print list(im.getdata())

輪郭検出フィルタを適用して保存。

import ImageFilter

im_contour = im.filter(ImageFilter.CONTOUR)
savefilename = "yyy.yyy"
im_contour.save(savefilename)

フィルタを自分で定義することもできます。ImageFilter.CONTOURは8方向ラプラシアンフィルタ(画素値の変化分の変化分を検出)ですが、4方向のものが使いたいときには、

from ImageFilter import BuiltinFilter

class LAP4CONTOUR(BuiltinFilter):
    name = "Lap4Contour"
    filterargs = (3, 3),1, 255, (
        0, -1,  0,
        -1, 4, -1,
        0, -1,  0
        )

im_l4contour = im.filter(LAP4CONTOUR)
im_l4contour.save(savefilename)

また、簡単なフィルタはクラスにしなくても作れます。下は4方向ラプラシアンを用いた鮮鋭化フィルタ。

from ImageFilter import Kernel

f = Kernel((3,3), (0, -1, 0, -1, 5, -1, 0, -1, 0), 1, 0)
im_l4edge = im.filter(f)
im_l4edge.save(savefilename)

それぞれの値の意味は、

class SomeFilter(BuiltinFilter):
    name = "SomeFilter"
    filterargs = matrixsize, scale, offset, matrix

f = Kernel(matrixsize, matrix, scale, offset)

# matrixsize フィルタ行列の大きさをあらわすタプル (3,3) または (5,5)
# matrix : フィルタ行列
# scale : フィルタ後の画素値はscaleで除算される 省略された場合はフィルタ行列の和
# offset : scaleで除算した後、この値を足す 下地の画素値
カテゴリ

Trackback URI

http://www.panopticon.jp/mt/mt-tb.cgi/102

Trackbacks(1)

[Python]巡回 from 常山日記

[Python][お勉強] Python入門(36) - モジュールのインポート Pythonで「〜」をエンコードすると例外が発生 The beauty... [続きを読む]

コメントする