作者:王先荣

    大约在两年前翻译了《随机抽样一致性算法RANSAC》,在文章的最后承诺写该算法的C#示例程序。可惜光阴似箭,转眼许久才写出来,实在抱歉。本文将使用随机抽样一致性算法来来检测直线和圆,并提供源代码下载。

一、RANSAC检测流程

    在这里复述下RANSAC的检测流程,详细的过程见上一篇翻译文章:

    RANSAC算法的输入是一组观测数据,一个可以解释或者适应于观测数据的参数化模型,一些可信的参数。

    RANSAC通过反复选择数据中的一组随机子集来达成目标。被选取的子集被假设为局内点,并用下述方法进行验证:
    1.有一个模型适应于假设的局内点,即所有的未知参数都能从假设的局内点计算得出。
    2.用1中得到的模型去测试所有的其它数据,如果某个点适用于估计的模型,认为它也是局内点。
    3.如果有足够多的点被归类为假设的局内点,那么估计的模型就足够合理。
    4.然后,用所有假设的局内点去重新估计模型,因为它仅仅被初始的假设局内点估计过。
    5.最后,通过估计局内点与模型的错误率来评估模型。
    这个过程被重复执行固定的次数,每次产生的模型要么因为局内点太少而被舍弃,要么因为比现有的模型更好而被选用。

二、得到观测数据

    我们没有实验(测试)数据,这里用手工输入的数据来替代——记录您在PictureBox中的点击坐标,作为观测数据。

        /// <summary>
        /// 得到样本点
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void pbSample_Click(object sender, EventArgs e)
        {
            MouseEventArgs me=(MouseEventArgs)e;
            txtRandomPoints.Text += string.Format("({0},{1}),", me.X, me.Y);
            DrawPoint(new Point(me.X, me.Y));
        }
得到样本点

相关文章:

  • 2021-10-17
  • 2021-08-21
  • 2022-12-23
  • 2021-08-04
  • 2021-04-01
  • 2021-06-05
猜你喜欢
  • 2021-09-16
  • 2021-12-17
  • 2021-11-08
  • 2021-07-03
  • 2021-09-09
相关资源
相似解决方案