角点检测一直是图像处理中的重要课题。这是至关重要的,因为它有助于我们找到图像中的独特特征。有几种方法可以检测图像中的角点。我认为的是Harris Corner Detection。我在Open-CV文档中阅读它之后,它让我了解了如何检测图像中的角点。我决定开发一种检测角落的方法,以便我能够理解逻辑。
可以通过过滤器找到图像中的角。那么,我们需要什么样的过滤器来找到图像中的角?
示例1:假设我们有一个有角的二进制图像。
0 0 0 0
0 0 0 0
0 0 1 1
0 0 1 1
实施例-2:
1 1 0
1 1 0
0 0 0
示例3:即使它看起来不像上面给出的角,下面给出的二进制图像也代表一个角。
0 1 1 0
0 1 1 0
0 0 0 0
0 0 0 0
假设我们有很多这样的模式。通过经典模式匹配方法,可以检测上述模式中任何角落的存在。对于经典模式匹配方法,请查看(http://scikit-image.org/docs/0.9.x/auto_examples/plot_template.html)。
但是,不是像这样有几个过滤模式,我们可以将它们全部包含在一个大模式中吗?
我们可以。但首先,让我们看看角落的模式应该有多大:
如果我们有如下所示的过滤模式,我们可能会遇到一些问题。
0 1/1 0
0 0/0 0
可能会出现什么样的问题?
假设我们在图像中有一条直线。我们需要找到的角落是线的起点和终点。
线图像:
0 1 0 0 0
0 0 1 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
当您看到粗体数字时,即使在那里没有角落,也可以在一条线的中间找到2x2角图案。
那么,我们该怎么办?我们将扩大模式。
如果我们有如下所示的过滤模式,则可以避免此问题。
1 1 0 0/0 0 1 1
1 1 0 0/0 0 1 1
0 0 0 0/0 0 0 0
0 0 0 0/0 0 0 0
我们决定了模式的大小和类型。现在,是时候将它们合并为一般过滤模式,其中包含我们想要检测的所有类型的角落。
一般模式:
0 0 0 0 0 0
0 0 0 0 0 0
0 0 1 1 0 0
0 0 1 1 0 0
0 0 0 0 0 0
0 0 0 0 0 0
让我们看看可以从上面的一般过滤模式中获得什么样的4x4过滤模式。
0 0 0 0
0 0 1 1
0 0 1 1
0 0 0 0
0 0 0 0
0 0 0 0
0 0 1 1
0 0 1 1
1 1 0 0
1 1 0 0
0 0 0 0
0 0 0 0
等等…
因此,如果我们从输入图像中剪切模板,并且如果我们在一般过滤模式中搜索并找到它,那么我们可以检测输入图像中的角。
角落的角度关系怎么样?
在我们应用上述方法后,我们将找到我们检测到的角点的坐标。在此之后,将找到检测到的角落坐标的平均坐标。
显示平均坐标。 (图中有角落。)
找到平均坐标后,将找到平均坐标和每个角之间的线的角度。
找到这些角度后,我们可以研究它们代表什么。
平均坐标和输入图像角之间的角度表示。 (输入图像是来自MNIST数据集的数字1图像。青色是来自数字5图像。)
如我们所见,一些数字1图像显示彼此相似。但数字5(青色)图像显示完全不同的行为。
结论:
角之间的关系的角度表示可以适合用于特征描述。该特征提取可以提高准确率,同时减少分类算法训练所花费的时间。
用Python解释方法的代码: