【问题标题】:How to chose the optimal HSV values for InRange thresholding in OpenCV如何在 OpenCV 中为 InRange 阈值选择最佳 HSV 值
【发布时间】:2014-12-27 13:24:06
【问题描述】:

我有两个相关的问题:

  1. 我正在使用inRange 阈值函数在 OpenCV 中进行颜色对象检测。如果我手动选择 HSV 下限和上限,我会得到很好的结果,但这对光照条件非常敏感。有没有一种算法可以在给定目标和背景的 HSV 值的情况下确定最佳阈值界限?

    例如,以下是我正在使用的值:

    目标 HSV 值:[15,37,51]

    背景 HSV 值:[90, 21, 211]

  2. inRange 是简单的逐像素过滤器。它不会动态更改阈值条件。是否有与自适应阈值或 Otsu 阈值等效的颜色?或者可以利用目标和背景的先验 HSV 值的算法?

【问题讨论】:

  • 您可以尝试在 V 通道上运行 otsu 阈值,然后使用返回值通过 inRange 获取 V 的边界

标签: opencv image-processing threshold


【解决方案1】:

如果大部分图像或多或少相同(例如大部分是背景),则可以执行以下操作:

  1. 计算图像中像素值的中值 (M)。有些人使用均值代替,但我更喜欢中值的稳健性。

  2. 计算图像中像素值的中值绝对偏差 (MAD)。同样,我更喜欢它而不是标准差,因为它的稳健性。

介于 (M - k * MAD) 和 (M + k * MAD) 之间的所有内容都将是背景(或对象)。根据您的应用选择常量“k”的值(我猜它会在 1 到 5 之间)。

小提示,如果这是您第一次使用 MAD:在正态分布的情况下,1 个标准差大约等于 1.5 MAD。

【讨论】:

  • (M - k * MAD) 你的意思是把k * MAD(m - k) * MAD 分开吗?根据我的经验,这很容易产生负数而不是正数(因此下限几乎总是达到 0)。
  • @DouglasGaskell,不,这不是 k*MAD。如果下限为 0,则没有什么不好,只要它对当前灰度级分布有意义(而且通常是这样)。
猜你喜欢
  • 2019-12-19
  • 1970-01-01
  • 2017-05-26
  • 2019-02-05
  • 2016-02-03
  • 1970-01-01
  • 2012-08-25
  • 2020-03-22
  • 2012-06-12
相关资源
最近更新 更多