我目前在寻找一个好的算法来获取对象的每个外边缘点的坐标时遇到问题,不幸的是,它可能很复杂并且包含内部区域。
我有一个点列表,其中包含已从连接组件标记算法生成的对象的每个像素点。这使我能够检查图像中每个像素周围的每个坐标,如果不存在,那么我可以通过以下方式知道它的间隙或边缘。
public List<IntPoint> SquareSearch(List<IntPoint> ListOfPoints, IntPoint point)
{
List<IntPoint> UnfoundPixels = new List<IntPoint>();
int MoveX = point.X;
int MoveY = point.Y;
for (int LTR = MoveX - 1; LTR <= MoveX + 1; LTR++)
{
for (int TTB = MoveY - 1; TTB <= MoveY + 1; TTB++)
{
if (ListOfPoints.IndexOf(new IntPoint(LTR, TTB)) == -1)
{
if ((LTR > -1) && (TTB > -1))
{
UnfoundPixels.Add(new IntPoint(LTR, TTB));
}
}
}
}
}
然而,这个过程非常缓慢并且与每个对象的大小成正比,因为它必须针对对象中的每个像素重复。关于替代方法的任何建议?