我终于解决了这个问题,下面是我的方法。@jnovacho 的答案非常有用,当我这样做时,我意识到这对于计算机视觉专家来说是多么微不足道。不过,由于我自己最初认为有必要在这里发布问题,所以我想我也应该给出一个更详细的答案。
首先,由于问题没有很好地说明问题,我应该指出我有一组灰色圆柱体,从上面的单一来源点亮。圆柱体可以旋转、尺寸变化和移位。任务是学习圆柱体的旋转,不受大小和位置的影响。
0)手工制作解决方案的样品缸就是这个。
1) 使用一组 2D Gabors 来捕捉圆柱体内的梯度。为了找到正确的 Gabor 参数,我手动改变了滤波器的带宽和大小,直到可以看到内部梯度和边缘都被检测到。该图在左侧显示了一个不对称的 Gabor,以及这个精确滤波器与原始圆柱图像的两个卷积。当卷积与灰度图像重叠时,可以看出滤波器的不同方向会在圆柱体的不同区域产生响应。最强的响应在边缘,但对圆柱体的内部阴影的响应也较弱。这个内部梯度是我需要提取的特征。
2) 现在为了获得这个阴影渐变,我通过组合来自 8 个 Gabor 方向的响应来消除边缘。基本上,在每个像素的所有八个卷积中取最大值可以很好地估计这个圆柱体周围的边缘。然而,边缘并不是完全需要的,所以从这个最大的图像中,我构造了一个位掩码来摆脱它们,只得到内部梯度。简而言之,我将弱响应阈值化,只得到边缘图像,应用加厚和关闭形态学操作。然后对这个加厚的边缘应用逻辑与,最大化卷积转换为黑白,最后腐蚀它。结果是贴片的掩码近似于圆柱体内部梯度的大小。现在我只是将这个位掩码应用到原件上,以获取 Gabor 对内部着色的响应,而不需要边缘信息。该图像从左到右显示了滤波器响应的最大拉力、通过使用上述图像形态进行操作构建的位掩码,以及应用位掩码后产生的内部梯度。
3) 现在,只要有阴影梯度,就会得到一个表示原始方向的特征,该特征对位置和大小具有鲁棒性。平均这个内部梯度的所有响应似乎就足够了,仍然保持原来的 Gabor 方向。因此,对于 8 个 Gabor 方向,特征向量将是在先前步骤中提取的内部梯度区域内所有采样点的平均响应的 8 向量。为了不考虑每个像素值,我只对图像进行第 5 次或第 5 次下采样。为了从经验上看出梯度被正确拾取,左图是矢量图,其中每个箭头都指向原始 Gabor 的方向,只要响应强,它就会成比例。所以图像上的点,重要的是边缘,显示零强度响应,而箭头实际上表示梯度方向。现在我可以为非零值取每个方向的平均值,因此右图显示了该给定圆柱体在 8 个方向上的所有非零响应的直方图,其中每条蓝线是一个采样像素处的响应。我还举了另一个圆柱图像的例子,其中恰好有来自暴露的圆柱内部的一些噪声,并且梯度区域通常较小。
4) 最后,为了获得这个 8 向量特征,在位置和大小上具有一定的不变性(可能还有一些光照强度),我对每个方向平均所有非零响应的总和对所有非零响应。此特征在与上述相同的直方图中用红色表示,由于它们是对称的,因此已归一化并采用无负值。我已经加入了其他几个圆柱体方向以显示一定程度的不变性。最后的 8 向量特征在它的圆柱体左侧是红色的。
最后,现在可以将其赋予学习方向的回归模型。然而,一个明显的问题是被忽略的凹度梯度,它表示第三轴上的方向(一个从观察者指向的方向,如@jnovacho 所见)。幸运的是,在我需要此功能的不同问题的范围内,它可能会得到不同的处理。