ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

canny代码移植调试体会

2021-05-12 17:03:48  阅读:225  来源: 互联网

标签:输出 梯度 边界点 算法 调试 canny bit 移植


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

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

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

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

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

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

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

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

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

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

 

标签:输出,梯度,边界点,算法,调试,canny,bit,移植
来源: https://www.cnblogs.com/happyhorse72/p/14760589.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有