繁体   English   中英

具有单个阈值的Canny边缘检测器

[英]Canny edge detector with a single threshold value

我正在尝试将一些Matlab代码移植到C ++。 我碰到过这条线:

edges = edge(gray,'canny',0.1);

样本图像的输出是全黑图像。 我想使用cv :: Canny重现相同的行为。 低阈值和高阈值应使用什么值?

样品:
样本图片

输出:
输出量

在上面的行中,您尚未定义阈值,那么阈值可能为零,从而产生黑色图片。 另外,您使用的西格玛值为0.1,这意味着在Canny的第一步中几乎没有高斯模糊。 在Matlab中,您可以通过以下方式获得优化的阈值:

 [~, th] = edge(gray,'canny');

然后应用优化的阈值th乘以某个因子f(根据我的经验f应该在1-3之间),您必须尝试一下:

 edges=edge(gray,'canny',f*th,'both', sigma);

默认情况下,sigma是sqrt(2)(您使用的是上面的0.1)。 以下说明:

  • Matlab将优化阈值计算为强度梯度分布的百分比(如果我没记错的话,如果输入“ edit edge”,则可以看到edge()的构造)
  • 上面的参数th是由低和高阈值组成的向量。 Matlab始终使用low_threshold = 0.4 * high_threshold

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM