Matlab:具有单一阈值的Canny边缘检测器

时间:2015-10-22 00:49:28

标签: matlab opencv edge threshold

我试图将一些Matlab代码移植到C ++中。 我遇到过这一行:

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

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

Sample Image

Output

1 个答案:

答案 0 :(得分:0)

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

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

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

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

sigma默认为sqrt(2)(上面使用0.1)。以下是评论:

  • Matlab将优化阈值计算为强度梯度分布的百分位数(如果您输入"编辑边缘",如果我没记错的话,您可以看到edge()的构造)
  • 上述参数th是由低阈值和高阈值组成的向量。 Matlab总是使用low_threshold = 0.4 * high_threshold