algorithm - 除了 Haar 级联之外,还有哪些算法或方法可用于自定义对象检测?

标签 algorithm opencv computer-vision object-detection

我需要执行计算机视觉任务以检测水瓶或汽水 jar 。我将获得瓶子、汽水 jar 或任何其他随机物体的“正面”图像(一个接一个),我的算法应该确定它是瓶子、 jar 头还是其中任何一个

关于对象检测场景的一些细节:

  • 如前所述,我将针对每个图像/视频帧测试一个对象。
  • 并非所有的水壶都是一样的。塑料、盖子或标签可能有颜色差异。 也许有些人无法获得标签或盖子。
  • 汽水 jar 也有同样的变化。不过,不会对起皱的汽水 jar 进行测试。
  • 物体之间可能存在微小的尺寸差异。
  • 我可以使用绿色(或任何自定义颜色)背景。
  • 我会对图片进行任何需要的过滤。
  • 这将在 Raspberry Pi 上运行。

以防万一,每个示例:

enter image description here enter image description here

我已经测试了几次 OpenCV 人脸检测算法,我知道它工作得很好,但我需要获得一个特殊的 Haar Cascades 特征 XML 文件来检测此方法中的每个自定义对象。

因此,我想到的不同替代方案是:

我想要一个简单的算法,我认为甚至不需要创建自定义 Haar 分类器。你有什么建议?

更新

我强烈考虑了形状/纵横比方法。

但是我想我遇到了一些问题,因为瓶子的尺寸甚至形状各不相同。 但是这让我想到或设定了以下考虑因素:

  • 我正在使用 THRESH_BINARY 方法应用阈值。 (感谢答案)。
  • 我将在检测时使用白色背景。
  • 汽水 jar 大小都一样。
  • 因此,高精度的汽水 jar 边界框可以区分 jar 头。

我取得的成就:

阈值确实帮助了我,我注意到在白色背景测试中我会获得 jar 头:

enter image description here enter image description here enter image description here enter image description here enter image description here

这是从瓶子中得到的:

enter image description here enter image description here enter image description here enter image description here

因此,较暗的区域占据主导地位是显而易见的。在某些情况下, jar 头可能会变成假阴性。对于瓶子,光线和角度可能会导致结果不一致,但我真的认为这可能是一种更短的方法。

所以,我现在很困惑我应该如何评估 黑暗 主导地位,我读过 findContours 导致它,但我完全不知道如何捕获这样的功能。例如,对于汽水 jar ,它可能会找到多个轮廓,所以我不知道要评估什么。

注意:我愿意测试与 Open CV 不同的任何其他算法或库。

最佳答案

我在这里看到了一些基本的想法:

  1. 检查对象(准确地说是对象边界和矩形)的宽度/高度比。对于 jar 头,它大约是 2-2.5,对于瓶子,我认为它会 >3。这是一个非常简单的想法,它应该很容易快速测试,我认为它应该具有很好的准确性。对于某些值,例如 2.75(假设我给出的值是正确的,这很可能不是真的),您可以使用一些不同的算法。
  2. 检查您的对象是否包含玻璃/透明区域 - 如果是,则肯定是瓶子。 Here您可以阅读更多相关信息。
  3. 使用 grabcut 算法获取对象蒙版/更精确的形状,并检查顶部的形状宽度是否与底部的宽度相似 - 如果是,则不是 jar 头,不是 - 瓶子(瓶子顶部有螺帽) .

关于algorithm - 除了 Haar 级联之外,还有哪些算法或方法可用于自定义对象检测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29397564/

相关文章:

swift - CoreML 图像检测

algorithm - 正则表达式匹配支持 '.' 和 '*'

c++ - 如何测试某些数字是否沿区间均匀分布?

java - getChar 函数如何工作?

c - Windows 中 Eclipse 上的 OpenCV242

c++ - 使用 OpenCV 检测视频中的特定(定性)颜色

python - 视频流变得失真的QImage

java - 霍夫圆检测精度很低

python - 具有边缘畸变和 1 个缺失角的方形检测

algorithm - 找到一个完美的匹配或证明这是不可能的