■ morphingPicture関数を利用した面白い?動画

 [2006/07/18]

 morphingPicture 関数の試験を兼ねて面白い動画を作ってみました。試験というのは画像を変形したときに発生する変換エラーの事です。画像データは1ピクセル毎に格納されて いますが格納場所は整数アドレスにあります(デジタルな訳です)。ところが画像変形をすると、例えば (100,230)のアドレスが(100.3, 230.7)とか小数点以下のアドレスになってしまう事があります。これを無理矢に理整数化すると本来は(100.3, 230.7)のはずが (100,230)と、まったく変化しないことが起こります。たいしたことないではないかと思うかもしれませんが意外にはっきり判ります。論より証拠で画 像を見ると判ります。

tmpPicture.jpg tmpPicture_1.jpg

 左が変形前の画像で、右が 変形後の画像です。何も普通でそんなに違和感が無い、そう思われるかもしれませんが気になりませんか。止まっている画像で見ると違和感が無いかもしれませ んが、これが動画にすると嫌でもはっきり判るのです。


 まだ納得しないかもしれま せんが、この変換エラーのチェックのため動画を作ってみます。


● まずは変形対象の画像をクリップボードから取り出します

a# = getClipPict(0);

a#;

tmpPicture_2.jpg


● 次にgetPictPoints関数で変形前の画像に特徴点を設定します

p = getPictPoints(a#);

tmpPicture_3.jpg


● この画像の鼻の部分だけ少し右下に移動してみます

pp = getPictPoints(a#,p);

tmpPicture_4.jpg


● さらに今度はまた少し左下に移動します

ppp = getPictPoints(a#,pp);

tmpPicture_5.jpg


● 変換した画像を見てみましょう

b1# = morphingPicture(a#,p,pp,getPictSize(a#));

b2# = morphingPicture(a#,p,ppp,getPictSize(a#));

changePictSize(a#*b1#/b2#,2/3);

tmpPicture_6.jpg


● これを滑らかに移動したデータに変換します


p1 = changeMN(p,1)'; ~ 1行のデータに変換

n = nsize(p1);

p2 = changeMN(pp,1)';

p3 = changeMN(ppp,1)';

p3 = cat(p1,cat(p2,p3)); ~ 3行のデータにする

p4 =(hokan(p3,60,n)); ~ ここで補間し60行のデータに増やします


● 変換エラーが発生する関数で動画を作る


movie_create(0);

for(i=1;i<=60;i++){

px = changeMN(p4[i,#],9);

b# = morphingPicture_old(a#,p,px);

movie_addImage(b#,0.1);

}

for(i=60;i>=1;i--){

px = changeMN(p4[i,#],9);

b# = morphingPicture_old(a#,p,px);

movie_addImage(b#,0.1);

}

movie_saveAs(0);

movie_close(0);

 見て判るように1ピクセル の移動にしかならないため見るからにぎこちない動きをすると思いませんか? 一枚一枚の静止画ではちょっと判りにくいですが動画にするとはっきり判るで しょう! これが変換エラーなんです。


● 変換エラーが発生しないよう近傍4点から補間した関数で動画を作る

 この変換エラーを少しでも 押さえるため小数点以下のピクセル位置を近傍4点から直線補間をしてみます(厳密にいうと直線ではなく双曲面になるかな?)。


movie_create(0);

for(i=1;i<=60;i++){

px = changeMN(p4[i,#],9);

b# = morphingPicture(a#,p,px,getPictSize(a#));

movie_addImage(b#,0.1);

}

for(i=60;i>=1;i--){

px = changeMN(p4[i,#],9);

b# = morphingPicture(a#,p,px,getPictSize(a#));

movie_addImage(b#,0.1);

}

movie_saveAs(0);

movie_close(0);

 どうですか? 違和感が無 くなったでしょう


● おわり

 判っているなら最初から補 間したら良いのにと思うでしょう。それは甘い、天才のプログラマならそうでしょうが私みたいな凡人がプログラミングすると 1+2 が4になることもあるのです。だからまずは補間しないで画像変形をチェックし問題が無くなったら次のステップへ進む。その時のチェックの手段が動画の作成 になった訳です。

 でも一枚の写真から動画が 作れるのですね。試験とは言いながら面白い発見をしたみたいです。そうか最近の映画はこんなふうに誤摩化して、いや作っているのですね。