スリットスキャンの静止画が撮れるアプリをiPhoneで作ってみたけど、やっぱ動画じゃないと面白くなかった。今回はPCのカメラ画像でリアルタイムにやっみようと思う。
スリットスキャンてこんなやつ。
Slit Scan from Stephen Boehnemann on Vimeo.
以下は、プログラム作成のためのメモ。
スリットスキャンを実装する場合、時間差で過去フレームを再生するわけだから、おそらくスリット数分のフレームを保存して置かなければならない。スリットの数Nとした場合、最低限確保が必要なメモリは下記の通り。
sizeof(unsigned char)*N*3*width*height
仮に、ソースサイズが1024×768で200スリットとすると、
200*3*1024*768 =471,859,200byte=450Mbyte
最近のPCは8Gぐらい普通に積んでるから1Gぐらい使うようなアプリでもいけるのかな?
問題になりそうなのは結果画像の生成速度。各フレームのリード自体は画像一枚分だから、そこまで重くないのかもしれない。スリットの動き・形状もいろいろ考えられるけど、リアルタイム処理の場合は上から下、または下から上ならピクセル配列的にも高速に処理できそうだ。
スリット幅が1pxを超えると、おそらくフレーム間のズレが目立つため理想はN=heightなのかな。その場合メモリは1.68GByte、 スレッドの遅延は768/30fpsで20秒以上かかってしまうことになる。ちょっと遅すぎるしメモリも絶望的だなぁ。とりあえずスリットの幅を広げてフレーム間をアルファ合成する方法でやってみようと思う。あとはカメラが30のFPS出ないようであればフレーム間がガタガタになってしまいそう。
この辺りの落とし所は探りながら。相当パワーのあるマシンが必要になりそうだ。
実装は次回。