从直方图 maxValue 中获取颜色向量

Posted

技术标签:

【中文标题】从直方图 maxValue 中获取颜色向量【英文标题】:Get color vector from histogram maxValue 【发布时间】:2014-04-23 09:24:39 【问题描述】:

我正在尝试计算图像中最常见的颜色。使用 calcHist 函数,我知道我可以得到一个直方图,其单个通道中的 bin 是像素值,每个 bin 的值是该值存在的次数在图像中。

此外,使用 minMaxLoc 函数很容易获得直方图的最大值(即双精度)及其位置。

但我想要的是整个颜色(带有每个通道值的 Vec3b 对象)。

这是我目前所拥有的:

 split(image, lab_channels); 

 histSize = 256;
 range[0] = 0;
 range[1] = 256;
 const float *lRange = range;
 calcHist( &lab_channels[0], 1, 0, Mat(), 
     l_hist, 1, &histSize, &lRange, 
     true, false );

 histSize = 256;
 range[0] = 0;
 range[1] = 256;
 const float *aRange = range;
 calcHist( &lab_channels[1], 1, 0, Mat(), 
     a_hist, 1, &histSize, &aRange, 
     true, 
     false );

 histSize = 256;
 range[0] = 0;
 range[1] = 256;

 const float *bRange = range;
 calcHist( &lab_channels[2], 1, 0, Mat(), 
      b_hist, 1, &histSize, &bRange, t
      rue, false );

 minMaxLoc(l_hist, 0, 0, 0, &maxPos);
 result[0] = maxPos.y; 
 minMaxLoc(a_hist, 0, 0, 0, &maxPos);
 result[1] = maxPos.y; 
 minMaxLoc(b_hist, 0, 0, 0, &maxPos);
 result[2] = maxPos.y; 

其中 result 是我的 Vec3b 矢量,具有最常见的颜色。

这段代码工作正常(它确实检索了一种颜色),但问题是它从每个通道中分别获得最常见的颜色,最后它不一定是组合通道中最常见的颜色。

所以,如果我执行此过程,但对于 3 个通道(如 opencv 文档中所示),我如何从生成的直方图中获取此 Vec3b 向量?或者至少是我可以转换或转换为它的另一种数据类型。

【问题讨论】:

【参考方案1】:

您可以这样做:

1st) 计算联合直方图。对三通道图像使用calcHist,而不是为每个通道计算一个独立的直方图。

2nd) 寻找联合直方图中的最大值,就像您在通道直方图中所做的那样,使用minMaxLoc

现在,如果我们知道为联合直方图中的每个 bin 分配什么颜色,那就太好了,但这并不简单。您可以查看 OpenCV 的实现,或者询问某人..或尝试以下操作:

3rd) 将所有联合直方图值设置为 0,除了与您刚刚找到的最大值对应的值。将此 bin 的值设置为最大值(即,如果这是标准化直方图,则为 1.0)。然后对原始图像进行直方图的反投影(使用calcBackProject)。具有最常见颜色的像素(您正在寻找的那个)应该在反投影图像中突出显示。

希望对你有帮助!

【讨论】:

因此,根据我从您的回答和文档中了解到的情况,执行 calcBackProject 将获得其值可能是最常见的像素位置(可能有一些变化)。如我错了请纠正我。我只有最后一个问题:在这个函数的返回 Mat 对象中,匹配的像素是如何突出显示的?按他们的价值?可以说他们都是一个人。 如果您的固定直方图除了在与所选颜色对应的 bin 中全为零,则反投影图像将仅在具有此类颜色值的像素中包含 非零 值原始图像。也就是说,您可以在返回的Mat 对象中搜索值>0 的像素(甚至可以将此Mat 用作掩码)。

以上是关于从直方图 maxValue 中获取颜色向量的主要内容,如果未能解决你的问题,请参考以下文章

使用从颜色图中获取的颜色绘制直方图

(转)颜色直方图, HSV直方图, histogram bins

图像特征分析:颜色特征描述,颜色矩,颜色直方图(附matlab代码)

图像特征分析:颜色特征描述,颜色矩,颜色直方图(附matlab代码)

图像特征分析:颜色特征描述,颜色矩,颜色直方图(附matlab代码)

图像特征分析:颜色特征描述,颜色矩,颜色直方图(附matlab代码)