精明的边缘检测边缘旋转不变吗?



假设Canny边缘检测器成功检测到图像中的边缘。然后按 θ 旋转边,其中原始边(x,y)(x,y)上的点与旋转边(x′,y′)(x′,y′)上的点之间的关系定义为x′ = xcosθ; y′ = xsinθ;

是否会使用相同的Canny边缘检测器检测旋转的边缘?

(我认为我们应该找到答案,因为Canny边缘检测器对边缘的检测仅取决于其导数的大小。

答案是肯定的和否定的,你选择哪一个取决于你对问题的字面意思。

首先,我们处理的是矩形网格,因此给定一个整数位置 (x,y),旋转图像中的相应点 (x',y') 很可能不是整数位置。考虑到Canny的输出是一组点,而不是可以插值的平滑函数,因此很难在旋转产生的集合和原始图像产生的集合之间建立对应关系。

例如,考虑给定长度的离散线上 0 度和 45 度处的像素数。(提示:45 度的线的像素少sqrt(2)倍。

但是,如果您更笼统地将问题解释为"将图像旋转θ度后,原始图像中检测到的边缘是否也会被检测到?"那么理论上答案是肯定的。

当然,实践总是与理论有点不同。实现的细节在这里很重要。而且总是有数字上的不精确性需要应对。

让我们首先假设旋转计算正确,使用精确的插值方案(立方体,Lanczos),而不是四舍五入到uint8或其他东西(即我们使用浮点值进行计算)。

如果你读过Canny的原始论文,你会发现他建议使用高斯导数作为紧凑支持和计算精度之间的最佳折衷方案。我见过很少有实际这样做的实现。 通常,我看到的是高斯导数和索贝尔导数的卷积。特别是对于较小的西格马(较少平滑),差异可能非常大。高斯导数是旋转不变的,索贝尔导数不是。

算法的下一步是非最大抑制。这是将连续渐变转换为一组点的地方。对于每个像素,它会检查它是否是渐变方向上的局部最大值。由于这是按像素完成的,因此与原始图像相比,在旋转图像中测试一组不同的位置。尽管如此,在这两种情况下,它应该检测沿相同山脊的点。

接下来,应用滞后阈值。这是一个双阈值操作,只要同一连接的组件中至少存在一个高于第二个阈值的像素,它就会使像素保持在一个阈值以上。这是旋转图像和原始图像之间可能发生差异的地方。请记住,我们正在处理一组像素。我们对离散点的连续梯度函数进行了采样。在图像的一个版本中,可能存在一个像素高于第二个阈值的边,但在另一个版本中则不然。当然,这只会发生在非常接近所选阈值的边上。

接下来是变薄。由于非最大抑制可能会沿较粗的线产生点,因此将应用细化操作,从集中移除维护线连通性不需要的像素。此处选择的像素在旋转图像和原始图像之间也会有所不同,但这不会改变解决方案的几何形状,因此我们仍然具有相同的点集。

所以,答案是肯定的,:)

请注意,相同的逻辑适用于翻译。

最新更新