3

Kinect SDK には、カラー ストリームで顔メッシュを作成するサンプルが付属しています。次のようになります。

http://imgur.com/TV6dHBC

深度ストリーム用の 3D メッシュを作成したい

私のコードは現在次のようになっています。

private EnumIndexableCollection<FeaturePoint, PointF> facePoints;
private EnumIndexableCollection<FeaturePoint, Vector3DF> depthPoints;

public void DrawFaceModel(DrawingContext drawingContext)
{
    if (!this.lastFaceTrackSucceeded || this.skeletonTrackingState != SkeletonTrackingState.Tracked)
        return;

    var faceModelPts = new List<Point>();
    var faceModelPts3D = new List<Point3D>();
    var faceModel = new List<FaceModelTriangle>();
    var faceModel3D = new List<FaceModelTriangle3D>();

    for (int i = 0; i < this.facePoints.Count; i++)
    {
        faceModelPts3D.Add(new Point3D(this.depthPoints[i].X + 0.5f, this.depthPoints[i].Y + 0.5f, this.depthPoints[i].Z + 0.5f));
    }

    FaceDataPoints.Number_of_Points = this.facePoints.Count;

    foreach (var t in ImageData.faceTriangles)
    {
        var triangle = new FaceModelTriangle3D();
        triangle.Point1_3D = faceModelPts3D[t.First];
        triangle.Point2_3D = faceModelPts3D[t.Second];
        triangle.Point3_3D = faceModelPts3D[t.Third];
        faceModel3D.Add(triangle);
    }

    var faceModelGroup = new GeometryGroup();
    for (int i = 0; i < faceModel.Count; i++)
    {
        var faceTriangle = new GeometryGroup();  
        faceTriangle.Children.Add(new LineGeometry(faceModel3D[i].Point1_3D, faceModel3D[i].Point2_3D)); 
        faceTriangle.Children.Add(new LineGeometry(faceModel3D[i].Point2_3D, faceModel3D[i].Point3_3D));
        faceTriangle.Children.Add(new LineGeometry(faceModel3D[i].Point3_3D, faceModel3D[i].Point1_3D));
        faceModelGroup.Children.Add(faceTriangle); //Add lines to image
    }

    drawingContext.DrawGeometry(Brushes.LightYellow, new Pen(Brushes.LightYellow, 1.0), faceModelGroup);
}

private struct FaceModelTriangle3D
{
     public Point3D Point1_3D;
     public Point3D Point2_3D;
     public Point3D Point3_3D;
}

現在、「エラー 2 引数 1: 'System.Windows.Media.Media3D.Point3D' から 'System.Windows.Point' F:\Work\Uni\4th Year\Final Year Project\Project\ に変換できません」というエラーが表示されます。プロジェクト 3.0\プロジェクト 3.0\FaceTrackingViewer.xaml.cs 275 68 プロジェクト 3.0」

原因は次のとおりです。

(new LineGeometry(faceModel3D[i].Point2_3D, faceModel3D[i].Point3_3D));

これを機能させるには、LineGeometry の代わりに何を使用する必要がありますか、またはこれを行うためのより効果的な方法はありますか?

また、顔メッシュを作成したら、この情報を保存して、顔のポイント間の距離を計算できるようにしたいと考えています。では、三角形の情報を保存するにはどうすればよいでしょうか。

4

3 に答える 3

0

kinect fracetrack からメッシュを取得するには?

2 番目の質問:
三角形の情報から面が得られるので、.obj などに保存したい場合は、

  1. 頂点: vxyz
    (x、y、z は座標を表す対応する数字に置き換える必要がありますが、v は頂点をリストしていることを示します)

  2. 三角形の面: fijk
    (x、y、z は座標を表す対応する数字に置き換える必要がありますが、f は面をリストしていることを示します)

あなたはあなたの.objを持っています

プログラムに保存する場合は、頂点用と面用の 2 つのコンテナー (おそらく、必要に応じて配列またはリンク リスト) を提案するか、すべてを格納するクラスを用意します。

于 2014-04-16T11:24:33.470 に答える