Processing3で平滑化(ガウシアンフィルタ)

Processing3でフィルタ処理(平滑化)はどのように行うのか気になったので調べてみました。

平滑化についてはProcessingのfilter()関数を用いて簡単に実装することができます。

PImage img;

void setup() {
  size(512, 512);
  img = loadImage("hogehoge.jpg");
  image(img, 0, 0, 512, 512);
  filter(BLUR,11);
}

void draw() {
}

今回のソースコードは上のようになります。アルゴリズムとか仰々しいものではないですが処理は次のようになります。

  • ウィンドウサイズを指定
size(512, 512)

Processingのウィンドウサイズは原画像の画像のサイズを使うことにします。自分が使いたい画像に合わせてsize()関数の引数を任意で変更してください(今回使ったlenaの画像は512×512なのでsize(512,512))。

  • 画像読み込み
img = loadImage("hogehoge.jpg")

Processingのスケッチが入っているフォルダ(.pdeファイルが入っているフォルダ)に原画像ファイルをいれるのを忘れないでください。また、ソースコード上では”hogehoge.jpg”となっていますが自分の使いたい画像の名前に書き換えてください。

  • 画像表示
image(img, 0, 0, 512, 512)

image()関数を用いていったん原画像の表示を行います(1/60秒しか表示されないのでほとんど見えません)。

  • 平滑化処理(ガウシアンフィルタ)
filter(BLUR,11)

ここでガウシアンフィルタを適用しています。実際に原画像を変換しているというイメージではなく、ウィンドウに表示されたすべてのものに対してぼかし(平滑化)の効果を与えているイメージという方が正しそうです。

filter()関数の1つ目の引数のBLURがガウシアンフィルタでぼかし効果を与えるという命令を出す引数です。2つ目の引数で指定するのは半径というパラメータですが、簡単に言うとガウシアンフィルタのかけ方の強さです。11だと元の画像の面影がなくなってきます。

BLURには他の引数を入れることができます。たとえばTHRESHOLDなら二値化、GRAYならグレースケール化などです。Processingのリファレンスを読むといいかもしれません(英語のページですが個人的にはサンプルスケッチとparamの部分だけ読めればOK)。

https://processing.org/reference/filter_.html

最後に処理結果を載せておきます。

lena

20151216_2

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Scroll to top