こんにちは。顔モーフィングの記事3本目で今回が最後です。今日は「三角形をワープしてブレンド」について書いていきます。もしご興味のある方は前回の記事もご覧になってください。
- 顔の特徴点の検出
- ドロネーの三角形分割でメッシュ生成
- 三角形をワープしてブレンド

顔モーフィング(1.顔の特徴点の検出)

顔モーフィング(2.メッシュ生成(ドロネーの三角形分割))
三角形をワープしてブレンド
前回の記事で画像をドロネーの三角形分割する方法をご紹介しました。それを使用して、オードリーヘップバーンとマリリンモンローの特徴点を一定の割合にしたワープさせたい特徴点を取得し、三角形分割します。オードリーとマリリンのオリジナルも三角形分割します。そして三角形を1つずつ画像1,2をワープさせたい位置に変換します。この時アフィン変換を使用します。アフィン変換後、画像1画像2をブレンドします。
openCVでアフィン変換はwarpAffineを使用します。ただ、warpAffineは三角形ではなく画像を取り込むので、三角形のままでは使用できないので、以下手順で行います。
手順
- 三角形の座標を含む最小の矩形領域 (バウンディングボックス)を取得
- 三角形のマスクを生成 三角形の領域のピクセル値は1で、残りの領域のピクセル値は0になる
- アフィン変換の実行
- 2つの画像に重みを付けて、三角形の最終的なピクセル値を見つける
- マスクと投影結果を使用して論理AND演算を実行し、三角形領域の投影されたピクセル値を取得しOutput用画像にコピー
アフィン変換「cv2.warpAffine」の使い方
|
|
src | 入力画像 |
---|---|
M | 2 × 3 変換行列 |
dsize | 出力画像のサイズ |
dst | 出力イメージ |
flags | 変換方法 |
borderMode | 境界の対処方法 |
borderValue | 一定の境界線に使用される値 |
ソースコード
|
|
ソース呼び出し方
「1.顔の特徴点の検出」「2.ドロネーの三角形分割でメッシュ生成」「3.三角形をワープしてブレンド」のソースを使用して顔モーフィング画像を作成します。最終的には写真を繋げてgifを作成しています。わかりやすいように、三角形を描いた状態で作ってみました。
|
|
これで顔モーフィング作成記事は終わります。