你需要一些更基本的东西,没有太多理由去寻找花哨的方法。你的数字已经是二进制的,它们的形状总体上非常相似。
一个初步的想法:考虑某个图像中的上点和下点,并形成上壳和下壳(只是一个壳,而不是凸壳或其他任何东西)。如果给定 column i,它是从图像顶部(底部)开始的第一个点,而不是背景点i. 此外,您的图像主要是一个单一的连接组件(在某些情况下,垂直条分开,但这很好),因此您可以轻松丢弃小组件。这一步对您的情况很重要,因为我看到有些数字带有某种形式的噪声,与图像的其余部分无关。考虑到少于 100 个点的连接组件很小,这些是您为问题中包含的各个图像获得的外壳:


蓝线表示上层船体,绿线表示下层船体。如果不明显,当我们考虑这些船体的区域最大值和区域最小值时,我们会在两者中获得相同的数量。y此外,除了轴上的一些位移外,它们都非常接近。如果我们考虑极值的平均x位置并将两个图像的线绘制在一起,我们会得到下图。在这种情况下,蓝色和绿色的线条用于第二张图像,红色和青色的线条用于第一张图像。红点位于x某些区域最小值的平均坐标中,蓝点相同,但区域最大值(这些是我们的兴趣点)。(下图已调整大小以获得更好的可视化效果)

如您所见,您无需执行任何操作即可获得许多几乎重叠的点。如果我们做得更少,即甚至不关心这种重叠,并继续以微不足道的方式对图像进行分类:如果一个图像a和另一个图像b在上层外壳中具有相同数量的区域最大值,则相同数量的区域最小值在上船体,下船体的区域最大值相同,底船体的区域最小值相同,则a和b属于同一类。对所有图像执行此操作,所有图像都正确分组,但以下情况除外:


在这种情况下,第一张图像中的上层船体只有 3 个最大值和 3 个最小值,而第二张图像有 4 个最大值和 4 个最小值。在您看到船体和获得的兴趣点的图之后:

如您所见,在第二个上层船体中有两个非常接近的极值。平滑这条曲线消除了两个极值,使图像通过简单的方法匹配。另外,请注意,如果您在图像周围绘制一个矩形,那么此方法将告诉它们都是相等的。在这种情况下,您将需要比较多个船体,丢弃当前船体中的点并构建其他船体。尽管如此,这种方法能够正确地对所有图像进行分组,因为它们都非常简单并且几乎没有噪音。