スリットスキャン
メディアアート作品やCreative Codingでよく使われる手法としてスリットスキャンという手法がある。原理的にはスキャナーと同じで、一定の範囲ごとに画像を読み取る仕組み。
読み取りのタイミングに合わせて対象物を動かすと、歪んだ画像が得られ、面白い視覚効果が生まれるので、さまざまな場面で利用されている。
それをProcessingで素直に実装してみたのがこれ(2019年)。スキャンする線に合わせて画像を回転させたり移動させたりしている。
この実装は簡単ではあるが負荷がかかり、印刷クオリティで画像を作ろうとして解像度を上げたら、操作できないほど処理が重くなってしまった。解決法としてProcessingでなくopenFrameworksで実装し直すとか、マシンを買い換えるなどが考えられるけれども、それでうまくいかなかった場合の損失は大きい。
どうやらボトルネックは画像の回転にあるようだった。考えてみればひとつひとつのピクセルの値を保持し、それを移動させなければならないので、扱う画像のサイズが2倍になれば4倍のピクセル操作が必要になる。
そこで発想を変えて、画像を動かすのではなく、読み取り位置を動かすようにしてみる。
画像のx軸に対して平行な直線を引き、これをy軸方向に動かしてスキャンする。
回転した画像をスキャンするには、この直線を回転させれば良い。もともとx軸に平行な直線というのは、一次関数y=ax+bの傾きaが0の場合と考えられる。
傾きaを変化させ、切片bを移動させれば、画像の回転と同じことが実現できる。
関数の形を変えれば、また違った読み取り方ができるようになる。
// 長らく下書きにしてあった記事。もっと前のはずだが、タイトルなどを変更したせいか2024年になっている。
// 実装もしたはずなので追って掲載する。