顔交換のためのOpenCVを用いた(C ++ / Pythonの)

-

 

 

 図3顔アラインメント。左:顔が検出され、フラグ凸包。で:凸包点のドロネー三角形分割。右:アフィン歪みによって整列三角形の顔。

1つの顔アライメント

1.1  顔検出のランドマーク

2つの非常に異なる顔の形状、私たちは、ターゲット面を覆うようにねじれ、いくつかの顔を調達する必要があるが、我々はまた、我々は歪めていないと認識していないことを確認します。

まず、DLIB上の2枚の画像の使用を検出顔マーカしかし、「で  顔面奇形」違う、私たちは、アラインメントに直面してはならないすべてのポイントを使用しないでください。

私達はちょうど外面との国境に図のポイントに示されている人々を必要としています。

1.2の凸包検索
コンピュータビジョンと数学用語、境界点のセットをまたはと呼ばれる形状「のパッケージ。」何凹面境界は呼ばない「凸包」

左側のパネルは、赤色検出された顔DLIBランドマークの使用を示す図3において、凸包は青色で示されています。

凸包の点の集合は、OpenCVのに使用することができるconcealHullの関数計算します

パイソン:

ポイントが獲得ポイントのnumpyのアレイである
#をDLIBを使用します。
hullIndex = cv2.convexHull(点、returnPoints = 偽)
 #1 hullIndex点のインデックスのベクトルである凸包を形成します。

 

C ++:

ベクトル< int型 > hullIndex。
// ポイント型ベクターである<Point2f>得られた 
 // DLIBを使用。
凸包(点、hullIndex、)。
// hullIndexポイントのインデックスのベクトルである 
 // 凸包を形成します。

 

 

1.3ドローネ三角形分割
位置合わせ次のステップは、凸包上の点ドロネー三角形分割図の三角中間像を示す。3。

これは、顔に私たちを可能にする小さな部分に分割することができます。私の前の記事詳細な説明ドロネー三角形分割を参照してくださいここに

1.4ツイスト三角形アフィン

顔のためのフラッシュソースとターゲット面との間の対応する三角形の面を考慮するために、最後のステップを、ターゲット面にソース三角形アフィン歪みに直面します。

私についての顔が変形より多くの情報を、私の記事を参照してください

あなたは、図3の右側に見ることができるようしかし、自然に見えるしていない別の顔に顔に上面と平手打ちを合わせます

光の2つの画像間の色差が、関節を見ることができます。次のステップは、2枚の画像のどのようにシームレスに組み合わせを示しています。

 

 

シームレスなクローニング2

良い技術的思想は、魔法のようなものです。マジック信じられないほどの結果を達成するために、優れた物理学、心理学、そして古き良き手のスキルを兼ね備えています。

唯一の歪んだ画像は、非常に悪いになります。これは、とのシームレスなクローニング組み合わせて使用し、結果は素晴らしいです!私は、詳細を説明する記事を書いたここに

これは、OpenCVの3の特徴である、あなたがシームレスソース画像(マスク識別)の一部は、対象画像中にクローン化したことを可能にします。

パイソン:

出力= cv2.seamlessClone(SRC、DST、マスク、中央、cv2.NORMAL_CLONE)

 

C ++:

seamlessClone(SRC、DST、マスク、中央、出力、NORMAL_CLONE)。

 

 

上記使用SRCの図に示すような画像。(右)。DSTの画像は、私たちは、ソース画像(すなわちトランプの画像)をミックスしたい画像です。

使用してfillConvexPolyを白マスクを充填した凸包計算板を中心とマスクの境界ボックスの中心を含みます。

 

要約:

ランドマーク検出顔(顔のランドマーク)点

凸包(凸包)面を探します

ドローネ三角形分割(ドロネー三角) 

(顔を標的とする三角形の面アフィン歪み源)アフィンねじれ三角形(アフィンワープ三角形)

シームレスクローニング(シームレスクローニング)

 

 

 

 

 

 

 

 

 

 

 

-

おすすめ

転載: www.cnblogs.com/Ph-one/p/11773293.html
おすすめ