图像的主导"颜色"

use*_*438 6 algorithm processing image image-processing computer-vision

我有以下图片:

在此输入图像描述

我想要做的是根据它们的主色来"识别"各个条带.这样做的最佳方法是什么?

我所做的是使用图像的值(HSV)并对该值的出现进行分布.问题是,对于strip0值[27=32191, 28=5433, others=8]strip1值[26=7107, 27=23111, others=22].我无法得到明确的区分.

该项目的主要目标是将实际的黄色纸与条带进行比较,并确定哪个条带最相似.

mmg*_*mgp 5

首先,由于您知道参考图像中每个条带的边界,因此这里唯一可能的问题是您的参考图像有噪声.一种相对过度的处理方法是将每个条带中的颜色聚类并将聚类的质心作为条带的代表颜色.为了在此处获得更有意义的响应,请考虑此步骤的CIELAB颜色空间.这样做,并将结果转换回RGB,对于第一个条带我得到rgb三元组(0.949375, 0.879872, 0.147898),对于第二个条带(0.945324, 0.857322, 0.129756)(每个通道在范围[0,1]中).

获得新图像时,执行相同的操作.但这里有很多问题.例如,您如何处理此输入图像中的白平衡?假设你没有这样的问题,那么现在只需找到与你刚刚通过同一过程找到的颜色最接近的颜色.要找到最接近的颜色,您必须使用有意义的颜色空间,并且再次推荐使用CIELAB,因为在其上定义了完善的Delta-E函数.有关此类指标,请参阅http://en.wikipedia.org/wiki/Color_difference,最简单的是CIELAB中的欧氏距离.


And*_*ham 2

您可以扫描所有颜色并使用哈希表来跟踪每种颜色有多少个像素。

取出这些数字,记住它们对应的颜色,然后按降序对它们进行排序。

查看排序后的数字列表,找出每对连续数字之间的差异。跟踪导致每个差异的两个数字列表中的索引。对这个差异列表进行排序。

查看差异列表中的最大数字。现在两组像素之间的下降幅度最大。去找找哪个更大。具有此像素数及以上的所有内容都是主色。下面的所有颜色都是次主色。现在您知道有多少种主色以及它们是什么。

从那里做任何你想做的事情应该很容易。

唯一不起作用的情况是,如果某些噪声与条带的颜色相同,以至于损坏了您的数据。

在这种情况下,您将使用不同的方法,您也可以在第一种情况下使用该方法 - 查看运行。遍历像素,每次找到新颜色时,查看以下像素中有多少个是相同颜色的。

使用前面描述的方法将颜色分为主色和非主色,以获得相同的结果。

在这两种情况下,如果您知道图片是垂直条带,则可以限制您看到的水平颜色线的数量,以使事情进展得更快。