C#上的边缘检测

我有这样的黑白图像(颜色覆盖是我的,可以删除): 在此处输入图像描述 我需要弄清楚所示手的边缘,我该怎么做?

我目前的算法:

List edgePoints = new List(); for (int x = 0; x < largest.Rectangle.Width && edgePoints.Count == 0; x++) { //top for (int y = 0; 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; } } } 

得到一个定义相当清晰的轮廓,但如果和曲线在任何地方,那么边缘就不会被检测到。 IE,如果我侧身握住我的手,我会得到顶部手指和底部手指的边缘,但就是这样。

我该怎么做才能纠正这个并获得真正的优势?

看看这样的项目: http : //code.google.com/p/aforge/ ,它将帮助你很多,你不必重新发明轮子!