3

私はこのような白黒画像を持っています (カラー オーバーレイは私のもので、削除できます): ここに画像の説明を入力 表示されている手の端を把握する必要があります。

私の現在のアルゴリズム:

        List<Point> edgePoints = new List<Point>();
        for (int x = 0; x < largest.Rectangle.Width && edgePoints.Count == 0; x++) {
            //top
            for (int y = 0; y < largest.Rectangle.Height - 3 && edgePoints.Count == 0; y++) {
                if (colorGrid[x, y].ToArgb() == Color.White.ToArgb() &&
                    colorGrid[x, y + 1].ToArgb() == Color.White.ToArgb() &&
                    colorGrid[x, y + 2].ToArgb() == Color.White.ToArgb() &&
                    colorGrid[x, y + 3].ToArgb() == Color.White.ToArgb()
                    ) {
                    edgePoints.Add(new Point(x, y));
                    //g.DrawLine(new System.Drawing.Pen(Color.Orange), new Point(largest.Rectangle.X + x, largest.Rectangle.Y + y), new Point(largest.Rectangle.X + x, largest.Rectangle.Y + y + 3));
                    break;
                }
            }
            //bottom
            for (int y = largest.Rectangle.Height - 1; y > 3 && edgePoints.Count == 0; y++) {
                if (colorGrid[x, y].ToArgb() == Color.White.ToArgb() &&
                    colorGrid[x, y - 1].ToArgb() == Color.White.ToArgb() &&
                    colorGrid[x, y - 2].ToArgb() == Color.White.ToArgb() &&
                    colorGrid[x, y - 3].ToArgb() == Color.White.ToArgb()
                    ) {
                    edgePoints.Add(new Point(x, y));
                    //g.DrawLine(new System.Drawing.Pen(Color.Orange), new Point(largest.Rectangle.X + x, largest.Rectangle.Y + y), new Point(largest.Rectangle.X + x, largest.Rectangle.Y + y + 3));
                    break;
                }
            }
        }

かなり明確な輪郭が得られますが、 と がどこかにカーブしている場合、そのエッジは検出されません。いえ、手を横に持ったら上の指と下の指の端が取れてしまいますが、それだけです。

これを修正して真の優位性を得るにはどうすればよいですか?

4

2 に答える 2

5

次のようなプロジェクトをご覧ください: http://code.google.com/p/aforge/これは非常に役立ち、車輪を再発明する必要はありません!

于 2011-02-04T15:58:41.937 に答える
0

C++ には解決策がありますhttp://outliner.codeplex.com/ しかし、それを C# に変換するのは簡単なことではありません。アルゴリズムは非常に複雑です。

于 2011-02-07T06:17:18.563 に答える