モルフィングプログラム説明

プログラムの特徴

映画や CM の CG でお馴染みのモルフィングの簡易版で、 全自動で輪郭のワープと内側のディゾルブを行います (普通のモルフィングは制御線の設定が必要です) 。 そのため、適切な画像を用意するだけでモルフィング (もどき?) が簡単にできる反面、意図した通りに変形しない、 そのため変形がぎこちないという欠点はあります。 尚、ディゾルブ機能の方は普通のディゾルブです。

ダウンロード

一括ダウンロードをクリックすると、ZIP形式の圧縮ファイルがダウンロードできます。 解凍して使ってください。 含まれているファイルは、以下のものです。

使い方

このプログラムを使うには、 を用意します。
HTMLファイルは、サンプルページをコピーして書き換えると良いでしょう。 アプレットを使う部分は以下のようになっています。

<APPLET CODE="Morphing.class" ARCHIVE="Morphing.jar"
WIDTH=240 HEIGHT=180>
<PARAM NAME="image1" VALUE="ron.jpg">
<PARAM NAME="image2" VALUE="foo.jpg">
<PARAM NAME="waitTime" VALUE="2000">
<PARAM NAME="morphTime" VALUE="5000">
<PARAM NAME="step" VALUE="20">
<PARAM NAME="threshold" VALUE="40">
<PARAM NAME="MDswitch" VALUE="morphing">
</APPLET>

Flash版は以下のようになっています。

<object width="240" height="180">
<param name="movie" value="Morphing.swf">
<param name="bgcolor" value="#ffffff">
<param name="loop" value="false">
<param name="FlashVars"
value="image1=ron.jpg&image2=foo.jpg&waitTime=2000&morphTime=5000&step=20&threshold=40&MDswitch=morphing">
<embed src="Morphing.swf" width="240" height="180" bgcolor="#ffffff"
loop="false"
FlashVars="image1=ron.jpg&image2=foo.jpg&waitTime=2000&morphTime=5000&step=20&threshold=40&MDswitch=morphing" />
</object>

順に説明します。
パラメータ 内容
APPLETタグ JAVAアプレットを使うものですが、 変更する必要があるのはWIDTH (幅) とHEIGHT (高さ) だけです。 これらは画像の大きさに合わせて変えて下さい。
PARAMタグ PARAM NAME はパラメータの種類を表します。 VALUE の中がパラメータの値です。ここを必要に応じて変更して下さい。
image* 画像ファイルの名称です。* の部分は 1 から順番に入れてください。 画像の数は2つ以上、上限は明確ではありませんが、 メモリーの都合上あまり多くはできません。 変形は 1 から順に進み、最後にまた 1 に戻ります。
waitTime 変形と変形の間で画像を保持する時間 (単位はミリ秒) です。 この場合、2秒待ってから次の変換を始めることになります。 設定しない場合のデフォルト値は2000です。
morphTime 1回の変形にかける時間です。実際に変形にかかる時間は
morphTime + 変換画像の計算時間 (マシンに依存)
となります。設定しない場合のデフォルト値は2000です。
step 変形の間に生成するコマの数です。 多いほど変形は滑らかになります (ただしマシン性能の許す限り) 。 設定しない場合のデフォルト値は10です。
threshold 背景色を識別するためのの閾値です。 JPEGでは画像の輪郭がぼやけるため、少々凝った判別をしています。 このプログラムでは画像の左上の隅の色を背景色とします。 それぞれの画素について、
sqrt((画素の Red - 背景の Red)2 + (画素の Green - 背景の Green)2 + (画素の Blue - 背景の Blue)2)
を計算します( Red, Green, Blue はそれぞれ 0 〜 255 )。 この値がthresholdより小さい部分を背景、 大きい部分を対象内部と判定します。 設定しない場合のデフォルト値は40です。 また、ディゾルブの場合はこの値は関係ありません。
MDswitch モルフィングとディゾルブを切り替えるものです。 morphingでモルフィング、dissolvingでディゾルブになります。 設定しない場合のデフォルトはモルフィングです。

補足事項

モルフィングの場合、対象物と背景を分ける必要があります (ディゾルブでは必要無し)。 プログラムでは左上の隅の色を背景色として認識しますので、 対象の周りを同じ色で包む必要があります。 thresholdを調節すれば、多少背景色が変化しても大丈夫ですが、 基本は背景は単一色だと思って下さい。 また、背景色には対象物に含まれない色を使ってください。 例えば車の背景を黒くすると、 タイヤは背景と認識される可能性が高くなります。
2つの画像の大きさは、そろえた方が見た目が良いでしょう。 必ず一致させる必要があるわけではありませんが、見た目は悪くなります (サンプルでも幅が少し違います) 。

技術屋の魂(?)に戻る