【问题标题】:Edge detection on C#C# 上的边缘检测
【发布时间】:2011-02-04 15:54:50
【问题描述】:

我有一张这样的黑白图像(彩色叠加层是我的,可以删除): 我需要弄清楚所示手的边缘,我该怎么做?

我目前的算法:

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

产生一个相当明确的轮廓,但如果 和 曲线在任何地方,则不会检测到该边缘。即,如果我把手放在一边,我会得到上指和下指的边缘,但就是这样。

我能做些什么来纠正这个问题并获得真正的优势?

【问题讨论】:

    标签: c# computer-vision edge-detection


    【解决方案1】:

    看看这样的项目:http://code.google.com/p/aforge/,这将对您有很大帮助,而且您不必重新发明轮子!

    【讨论】:

    • 我一直在使用 aforge.net,但我只看到了如何让它进行 blob 检测的示例,这不是我想要的。
    • 其实我找到了他们的边缘过滤器。
    • 这是一个相当不错的库,他们涵盖了大部分内容。祝你好运!
    【解决方案2】:

    C++上有解决方案http://outliner.codeplex.com/ 但是转成C#可不是一件容易的事,算法相当复杂。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-18
      • 2019-01-29
      • 1970-01-01
      • 2012-08-12
      • 2011-06-25
      • 1970-01-01
      • 2014-03-30
      • 1970-01-01
      相关资源
      最近更新 更多