Обнаружение края на C # - PullRequest
       67

Обнаружение края на C #

3 голосов
/ 04 февраля 2011

У меня есть черно-белое изображение, подобное этому (цветовые наложения мои, и их можно удалить): enter image description here Мне нужно выяснить край руки, как я могу это сделать?

Мой текущий алгоритм:

        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;
                }
            }
        }

В результате получается довольно четко очерченный контур, но если и где-либо изгибается, этот край не обнаруживается То есть, если бы я держал руку в стороны, я бы получил край верхнего и нижнего пальцев, но это все.

Что я могу сделать, чтобы исправить это и получить реальное преимущество?

Ответы [ 2 ]

5 голосов
/ 04 февраля 2011

Посмотрите на такие проекты: http://code.google.com/p/aforge/, которые вам очень помогут, и вам не придется изобретать велосипед!

0 голосов
/ 07 февраля 2011

Существует решение на C ++ http://outliner.codeplex.com/ Но преобразовать его в C # будет непросто, алгоритм довольно сложный.

...