我有以下图片:
我想要做的是根据其主色调“id”各个条带。这样做的最佳方法是什么?
我所做的是使用图像的值(HSV)并对该值的出现进行分布。问题是,对于strip0值[27=32191, 28=5433, others=8]
strip1值[26=7107, 27=23111, others=22]
。我无法得到明确的区别。
该项目的主要目标是将实际的黄色纸与条带进行比较,并确定哪个条带最相似。
答案 0 :(得分: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中的欧氏距离。
答案 1 :(得分:3)
校准设备。如果您没有校准设备,测试样品和参考样品之间会有任意误差。照明是您设备的一部分。
使用边缘检测和您对参考条的几何形状(条带宽度相等)的了解来确定采样区域。对于每个采样区域,提取内部补丁。
对于测试条,计算图像,其中每个像素是采样窗口内的最大差异(例如5x5)。这将使您能够识别与外部区域(即纸张)不同的相对均匀的区域。提取补丁。
使用下采样为每个svnpenn的建议找到每个补丁的集成颜色。您可以稍后查看其他计算方法,但这应该可以很好地工作。
对于权重wh,ws,wv,计算相似度= wh abs(h0-h1)+ ws abs(s0-s1)+ wv * abs(v0-v1)之间的测试颜色和每种参考颜色。您可以稍后查看其他距离测量,但这应该可以很好地工作。从相同的权重开始。这种方法的一个好处是,无论参考条带的尺寸或尺寸组合如何变化,它都表现良好。
对结果进行排序,以找到最相似和第二类似的匹配。请注意,设置相似性,因此零是精确匹配,而大数字是匹配不佳。使用这两个结果的比率来估计最相似的匹配的质量 - 如果前两个匹配非常接近,那么它可能不是很好的匹配。
答案 2 :(得分:2)
您可以扫描所有颜色并使用哈希表来跟踪每种颜色的像素数。
记下这些数字,并记住它们对应的颜色,按降序排序。
查看已排序的数字列表,找出每对连续数字之间的差异。跟踪导致每个差异的两个数字列表中的索引。排序此差异列表。
查看差异列表中的最大数量。您现在拥有两组像素之间的最大下降。去寻找哪个更大。具有此像素数及以上的所有内容都是主色。以下所有内容都是次主导颜色。现在你知道你有多少主色,它们是什么。
从那里做任何你想做的事都应该很容易。
唯一不行的方法是,如果某些噪音与条带颜色相同,那么就会损坏您的数据。
在这种情况下,您将使用不同的方法,您也可以在第一种情况下使用 - 查看运行。浏览像素,每次找到新颜色时,请查看以下有多少像素具有相同的颜色。
使用前面描述的方法将颜色聚类为显性和非显性,以获得相同的结果。
在这两种情况下,如果你知道图片是垂直条带,你可以限制你看到的水平线条的数量,以使事情变得更快。
答案 3 :(得分:1)
您可以将图像分割成多个部分,然后将每个部分的大小调整为一个像素。这是使用整个图像的示例
$ convert Y82IirS.jpg -resize 1x1 txt:
# ImageMagick pixel enumeration: 1,1,255,srgb
0,0: (220,176, 44) #DCB02C srgb(220,176,44)