【问题标题】:How to normalize position of the elements on the picture [OpenCV]如何标准化图片上元素的位置[OpenCV]
【发布时间】:2021-02-18 14:44:14
【问题描述】:

我目前正在研究可能对我的工作有所帮助的程序。我正在尝试将机器学习用于分类目的。问题是我没有足够的样本来训练模型,而增强是我试图避免的事情,因为我的公司笔记本电脑和 Google Collab 上的硬件问题(没有足够的 RAM)。所以我决定尝试以某种方式标准化元素的位置,这样即使没有大量不同的样本,机器也能看到差异。不幸的是,现在我正在努力如何规范化这些图片。

元素 1a:

元素 1b:

元素 2a:

元素 2b:

元素 1a 和 1b 是同一类型,而 2a - 2b 是同一类型。有没有办法以某种方式标准化这些图片的位置(例如位置 0),这将有助于算法看到它们之间的差异?我尝试使用 cv2.minAreaSquare 来获得正方形位置,旋转它们并裁剪不需要的区域,但不幸的是,这些元素可以有不同的宽度,因此在缩小它们后,轮廓会不均匀地变形。然后我试图获得对称轴并使用它在旋转后进行适当的裁剪,但结果仍然没有达到我的预期。我正在考虑添加更多这样的标准化点:

归一化点:

并使用这些点标准化我的其余元素的位置,但透视变换只需要 4 个点,而 4 个点也不是很好的方法。也许你们知道如何移动这些元素以使它们处于相同的位置。

【问题讨论】:

    标签: opencv image-processing


    【解决方案1】:

    看到图片,我相信两张图片之间的变换要么是等距(平移+旋转),要么是相似(平移+旋转+缩放)。这些可以通过两点来确定。 (透视需要四分,但我认为这是矫枉过正。)

    但为了获得良好的准确性,您必须确保可靠且准确地找到这些点。 首先,您需要猜测形状的哪些特征可以从一个样本重复到下一个样本。

    例如,您可能会估计直边始终处于相同的相对位置。在这种情况下,我建议在某些边缘上找到两个点,在它们之间画一条线,然后找到线之间的交点。

    在插图中,您可以找到沿红色轮廓的边缘点,并从中绘制绿线。它们在黄点处相交。

    为了提高准确性,您可以使用最小二乘法在两个以上的点上找到最佳拟合。

    【讨论】:

    • 非常感谢您的回答。它让我想到了元素的重复点,即使你的想法由于元素的宽度不同而没有给出很好的结果,它也向我展示了我的思维错误。好吧,为了获得归一化点,我使用了元素宽度的方程,并且基于每个元素我有这个点的不同位置(因为这些元素可能有不同的宽度)。当我用常数值替换方程中的宽度时,它给了我很好的结果。非常感谢您引导我走上正确的道路。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 2017-07-05
    • 2017-03-31
    • 2015-04-04
    • 2016-10-27
    • 1970-01-01
    • 2012-05-21
    相关资源
    最近更新 更多