阅读 126

canny代码移植调试体会

canny代码移植调试体会

将基于mat数据结构的非极大值抑制算法和磁滞阀值算法修改成2 维array的非极大抑制和磁滞阀值调试体会

1、非极大值抑制输入参数bit位个数不一致,尤其变小了,导致一部分数据丢失,影响中间处理过程,导致结果不正确

首先输入梯度和梯度方向,输出强弱边缘标志图像指针;输入梯度参数mat结构是32位的梯度值,改成二维数组变成了8bit的梯度值,所以梯度值的被截去了高字节,导致低于最小阈值,最终输出黑屏。

2、非极大值抑制输出参数的bit位个数不一致,同样也是改小,导致bit个数不够,数据丢失,这个会影响到下一步运算:

图像的行列索引,不小心用了unsigned char,导致行宽大于256都被截断。

我的体会,就是每一步骤都要打断点调试,首先不要眉目胡子一把抓的调试,这样定位不是很准确。调试一个算法函数是否正确,首先保证输入一样参数,看看输出图像是否一样,再查看输出数据是否一样,每一个相关输出数据都要认真对照,首先看一下bit位,然后理解一下算法原理,基本上都能对上。这一步输出是下一步输入,同样保证下一步输入是一致,这样可以方向理解一下下一步算法。调试代码一定耐下心一步一步调试,打印出来文本进行对比,再返回头看代码,逐步缩小范围,定位问题。

这里增加deque的打印,需要了解一下deque的用法,

std::Deque使用总结_大山喵写博客的地方-CSDN博客

3、非极大值抑制输出一致,但是经过磁滞阈值化最后还是错误

原来算法是所有的强边界周围的弱边界点都变成强边界点,同时变成新强边界点的弱边界点,其周围需要进一步判断是否是弱边界点,直到没有弱边界点。我理解成了强边界周围的弱边界点变成强边界点就行了,导致边界点没有被连接起来。


文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐