引用———“关于图像分割Snake算法(c#)的一些不解之惑,望大神指点:我手头有一个别人的代码,是winform程序,其中包含了两个类,分别是FormSnake.cs和SnakeSharp.cs在FormSnake类中的鼠标事件里,用了一个动态数组presetContour来记录鼠标每次每次停留位置的坐标,在SnakeSarp中也定义一个数组snakePoints,我的问题是:presetContour里面是肯定有数据的,而snakePoints是怎么得到这些数据的。我把两个类的代码都放上来,请明白的前辈指点一下。”
1、在FormSnake.cs中
private void splitContainer1_Panel1_MouseUp(object sender, MouseEventArgs e)
{
if (isMouseDown)
{
isDrawingContour = false;
isMouseDown = false;
buttonSetContour.Enabled = true;
buttonStart.Enabled = true;
buttonStep.Enabled = true;
graphics = Graphics.FromImage(curImage);
Pen p = new Pen(Color.Green);
if (presetContour.Count > 1)
{
graphics.DrawLine(p, presetContour[0], presetContour[presetContour.Count - 1]);
}
graphics.Save();
mainContainer.Panel1.Refresh();
textBoxInfo.AppendText("\r\n边界设定完毕,共设定" + presetContour.Count + "个点。");
if (snakeSharp != null)
{
snakeSharp.SetCurcePoints(presetContour);//传递设置的边界点
}
}
}
2、在SnakeSharp.cs中
public void SetCurcePoints(List<Point> pos)
{
//定义参数
snakePoints = new CurvePoint[pos.Count];
for (int i = 0; i < pos.Count;i++ )
{
snakePoints[i] = new CurvePoint(pos[i]);
}
threshold_curvature = 0.2;//曲率阈值
threshold_grad = 100;//梯度阈值
pointsMovedThreshold = SnakePointsCount / 10;
}
3、
presetCountour中的内容即可传递到snakePoints[ ]里
4、
具体程序见于https://yq.aliyun.com/wenzhang/show_1680