Machine learning canny边缘检测边缘旋转不变吗?

Machine learning canny边缘检测边缘旋转不变吗?,machine-learning,computer-vision,edge-detection,Machine Learning,Computer Vision,Edge Detection,假设Canny边缘检测器成功地检测到图像中的边缘。然后将边旋转θ,其中原始边(x,y)(x,y)上的点与旋转边(x′,y′)(x′,y′)上的点之间的关系定义为x′=xcosθ;y′=xsinθ 是否使用相同的Canny边缘检测器检测旋转边缘 (考虑到Canny边缘检测器对边缘的检测只取决于其导数的大小,我认为我们应该找到答案。)答案是肯定和否定的,你选择哪一个取决于你对问题的理解 首先,我们处理的是一个矩形网格,因此给定一个整数位置(x,y),旋转图像中的对应点(x',y')很可能不是整数位置

假设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
或其他东西(即,我们使用浮点值进行计算)

如果你读了这篇文章,你会发现他建议在紧凑的支持和计算精度之间最好的折衷。我看到很少有实现真正做到这一点。通常我会看到一个卷积和高斯导数,然后是索贝尔导数。特别是对于较小的SIGMA(平滑度较低),差异可能相当大。高斯导数是旋转不变的,索贝尔导数不是

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

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

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

因此,答案是肯定和否定的:)


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

您的旋转定义相当不可靠,我在回答中忽略了这一点。:)