【问题标题】:Compare intensity pixel value Vec3b in OpenCV比较 OpenCV 中的强度像素值 Vec3b
【发布时间】:2016-02-05 15:09:40
【问题描述】:

我有一个 3 通道 Mat 图像,类型是 CV_8UC3。 我想在一个循环中比较一个像素与其邻居的强度值,然后设置01 是否邻居更大。 我可以拨打Img.at<Vec3b>(x,y) 获得强度。

但我的问题是:如何比较两个Vec3b

我是否应该比较每个通道(BGR 或Vec3b[0]Vec3b[1]Vec3b[2])的像素值,然后将三个通道结果合并到一个Mat 对象中?

【问题讨论】:

  • 是的,您需要分别比较 3 个频道。
  • intensity 是单个值(因此您的矩阵是单通道),而不是 BGR 三元组。那么,你想比较什么?
  • 我想比较一下CV_8UC3所代表的强度。
  • 所以要分别比较每个通道的强度?也许在 3 个频道中取最大值?或者您想在Vec3b 上定义一个比较操作,以便您可以比较它们?这完全取决于您,以及您需要做什么。如果您澄清您的最终目标是什么,我们可以提供明确的答案。
  • 另外,您可以在 RGB 颜色空间的所有三个通道上独立执行普查变换,然后将结果连接在一起。存储人口普查值所需的位数将是灰度图像的三倍。即在 3x3 人口普查窗口的情况下,该值将是 3*2^3 = 24 位。

标签: c++ opencv image-processing mat


【解决方案1】:

又是我 :)

如果您想比较(更大或更小)两个 RGB 值,您需要将 3 维 RGB 空间投影到平面或轴上。

当然,有很多可能性可以做到这一点,但一种简单的方法是使用 HSV 颜色空间。然而,色调 (H) 不适合作为线性顺序函数,因为它是循环的(即值 1.0 与 0.0 相同,因此您无法确定是 0.5 > 0.0 还是 0.5 S) 或值 (V) 是适合您目的的投影函数:

  • 如果您希望彩色像素比单色像素“更大”,您会更喜欢S
  • 如果您想让较亮的像素大于较暗的像素,您可能更喜欢V
  • SV 的任意组合也是有效的投影函数,例如S+V

【讨论】:

  • 我又来了:D。这属于您比较单个值而不是三元组的情况。由于这个问题现在还不清楚,因为 OP 没有明确最终目标,所以我会在发布一些随机猜测之前稍等片刻。总而言之,这个答案在某种程度上是有效的,但我们实际上不知道这个答案是否问题。
  • 是的,我完全同意,我只想指出 RGB 空间的结构不足以比较强度值,所以无论如何你必须找到另一种方法来进行比较
  • 这就是我没有投反对票的原因:D。但你可能是错的。例如,如果 OP 试图获得类似于 Dark Channel Prior 的东西,则必须在 RGB 空间上工作。但是,除非问题更清楚,否则我们无能为力:D
【解决方案2】:

据我了解,您需要一个度量来计算两个 Vec3b 像素之间的距离/相似度。这可以反映到在 n 数学空间中求两个向量之间的距离的一般问题。

欧几里得距离是著名的度量之一(我认为这就是您所要求的)。

如果您使用的是 Opencv,那么您可以简单地使用:

cv::Vec3b a(1, 1, 1);
cv::Vec3b b(5, 5, 5);
double dist = cv::norm(a, b, CV_L2);

您可以参考this 了解有关 cv::norm 及其选项的信息。

编辑:如果您这样做是为了测量颜色相似性,建议使用 LAB 颜色空间,因为事实证明 LAB 空间中的欧几里德距离是人类感知颜色的良好近似值。

编辑2:我明白你的意思,为此你可以得到每个向量的大小,然后比较它们,如下所示:

    double a_magnitude = cv::norm(a, CV_L2);
    double b_magnitude = cv::norm(b, CV_L2);
    if(a_magnitude > b_magnitude)
      // do something
    else
      // do something else.

【讨论】:

  • 查看我对@Kornel 答案的评论。
  • 至于@Kornel 的回答,没有错。只是现在我们知道 OP 想要什么。所以任何答案都可能正确与否。只是不值得回答。通过回答,我们也鼓励 OP 不要澄清这个问题。
  • 欺骗我 :) .. 我认为 OP 是评论的人。我完全同意你的看法,我立即建议他正在寻找基于颜色的相似性度量。他可能要求的是完全不同的东西。
猜你喜欢
  • 1970-01-01
  • 2015-03-24
  • 1970-01-01
  • 1970-01-01
  • 2013-03-24
  • 2015-10-15
  • 1970-01-01
  • 2015-04-30
  • 1970-01-01
相关资源
最近更新 更多