スーパー高速に射影変換するには
昨日のてら子で質問にあった射影変換の高速化。気になったのでやってみましたよ。射影変換 (Homography) てのは↓こういうのを言います。

左のようなパースのついた画像から、真っ正面むいてる絵を取り出すのに使ったりするですね。まーったく理論とかわかってなかったのでいろいろググって探してみたところ、AS3 で書いてる人がいたのでこれをベースにやってみました。OpenCV のソースみてるとかなり複雑そうだったのにこれはすごくシンプル。意外と簡単。
高速化の方法としては 2 つ。1 つは、Pixel Bender を使う方法。もう 1 つは DisplacementMapFilter を使う方法。両方書いてみた。で、処理速度を計測してみた結果。
–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– .TestSuite (20 iterations) –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– method...................................................ttl ms...avg ms Test1_setPixel 6594 329.70 Test2a_PixelBender 155 7.75 Test2b_PixelBender_Smoothed 187 9.35 Test3_DisplacementMap 87 4.35 ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––それぞれの方法で 20 回処理した時間が ttl ms。avg ms は 1 回あたりの平均処理時間。Test1_setPixel てのが元のコード。329.7ms。これじゃリアルタイムには使えない。Test2a_PixelBender が Pixel Bender 版。40 倍高速。さすが。Test2b_PixelBender_Smoothed これも Pixel Bender なんだけど、sampleNearest じゃなくって sampleLinear で色を取ってきてるので画質的には一番きれい。で、最速、Test3_DisplacementMap。DisplacementMapFilter 版。(あー、ちなみにこのベンチマークテストは gSkinner の PerformanceTest クラスを使わせてもらってます。便利。)
まあ数字だけ見ると DisplacementMapFilter が一番かなっと思うのだけど、画質がけっこうアレでして。このサンプルで一番歪みが激しい左上のを比較してみるとよくわかる。

というわけで、速度的には、DisplacementMapFilter が一番速いけど画質も考慮すると Pixel Bender (sampleNearest) がベストですかね、っと。
追記:Test3_DisplacementMap には DisplacementMap 用の画像を生成する時間が含まれてないので、対象となる四角形がグリグリ変わるのなら Pixel Bender のが断然高速。って、あー、そっか、Displace map を Pixel Bender で作ればいいのか。

の、Web サイトの中、、、じゃなくって、店頭イベントで FLARToolKit が使われてます。ケータイサイトで応援メッセージを投稿すると日本代表のエンブレムに描かれている 3 本足の烏がデザインされたマーカー壁紙がゲットできて、それを店頭に設置してあるモニターにかざすとみんなの投稿したメッセージがそのマーカーから飛び出してくるって仕組み。長い。こんなん→