代码都是本人参考李纯明教授的matlab源码实现的。 做了一定的优化。 效果很好,能达到李纯明教授的matlab源码运行效果,且速度更快。
可以到李纯明教授个人博客下载matlab代码并对照此代码,算法的实现逻辑基本一致,可以在此代码上进行修改能做更多的优化和改进。
1、配置opencv环境。(本人项目是在opencv3.4.1版本上运行的。应该版本3以上都可以)
2、如下三种初始化方式(有些差别,但很有用),参数可以试着调。
方式一、
Mat input(); //这里初始化一个要处理的图像。 Rect set0(); //这里初始化一个矩形区域。 Drlse dr(1, 5, 5, -3, 1.5, 0.8, DOUBLEPOT); dr.init(input, set0); //传入待处理图像,并将矩形区域作为初始轮廓。 dr.evolution(80, true); //传入迭代次数和是否显示迭代过程。 Mat output = dr.getres(); //ouput则为得到的最终轮廓。
方式二、
Mat input(); //这里初始化一个要处理的图像。 Rect set0(); //这里初始化一个矩形区域。 Rect roi(); //这里初始化一个感兴趣区域。(作为一种优化) Drlse dr(1, 5, 5, -3, 1.5, 0.8, DOUBLEPOT); dr.init(input, roi, set0); //传入待处理图像,并传入感兴趣区域,并将矩形区域作为初始轮廓。 dr.evolution(80, true); //传入迭代次数和是否显示迭代过程。 Mat output = dr.getres(); //ouput则为得到的最终轮廓。
方式三、
Mat input(); //这里初始化一个要处理的图像。 Mat set0(); //这里初始化一个二值图像(必须是二值图)。 Rect roi(); //这里初始化一个感兴趣区域。(作为一种优化) Drlse dr(1, 5, 5, -3, 1.5, 0.8, DOUBLEPOT); dr.init(input, roi, set0); //传入待处理图像,并传入感兴趣区域,并将二值图作为初始轮廓。(默认会将255的值作为轮廓内区域) dr.evolution(80, true); //传入迭代次数和是否显示迭代过程。 Mat output = dr.getres(); //ouput则为得到的最终轮廓。