比较两个颜色列表(未排序和不同长度)

2024-04-26 02:28:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一件事真的很难办。我已经产生了一个算法,将颜色分类到箱子/子组中。我想评估它与人类的直觉相比有多好。因此,我创建了一些颜色列表(我的数据),并手动将它们分类到我认为算法应该如何对颜色(我的基本事实)进行排序的箱子/子组中。然后,我将这些相同的颜色列表(我的数据)输入算法,并将其排序与我的基本事实进行比较。你知道吗

这就是我的问题。我不知道如何最好地将基本事实与结果进行比较,以便评估算法的工作情况。有谁能提供建议,如何比较两个颜色列表?你知道吗

下面是一个地面真理和算法结果的例子。我需要比较这两个不同的颜色列表,看看结果是多么接近地面真相(左一)。正如你所看到的,箱子的数量是变化的,每个箱子的长度是可变的,每个箱子的颜色顺序也是可变的。唯一不变的是两个列表总是有相同数量的颜色(只是排序不同)。这就是为什么弄清楚如何比较它们变得如此复杂(至少对我来说)。你知道吗

enter image description here

示例输入数据,即提供给颜色分类器的颜色列表:

[[69,99,121],[59,91,103],[71,107,140],[97,132,162],[85,117,141],[94,136,153],[86,131,144],[65,99,118],[211,214,201],[204,204,191],[203,207,188],[215,216,203],[194,199,180],[222,215,200],[219,213,195],[214,206,191],[197,188,172],[186,177,160],[206,197,181],[206,196,183],[38,35,31],[5,5,12],[31,34,41],[42,39,34],[30,32,27],[12,8,9]]

颜色分拣机的输出示例(上述颜色已被分为4个箱子/子组):

[ [[69,99,121],[59,91,103],[71,107,140],[97,132,162],[85,117,141],[94,136,153],[86,131,144],[65,99,118]], [[211,214,201],[204,204,191],[203,207,188],[215,216,203],[194,199,180]], [[222,215,200],[219,213,195],[214,206,191],[197,188,172],[186,177,160],[206,197,181],[206,196,183]], [[38,35,31],[5,5,12],[31,34,41],[42,39,34],[30,32,27],[12,8,9]] ]

注意:我可以很容易地将排序颜色的格式更改为其他格式(如numpy数组或直方图),如果您认为这样会更容易比较的话。请注意,对于柱状图,每个箱子的数量必须相同,因此我可能需要填充其中一个列表。你知道吗

如果子列表顺序无关紧要,而且子列表长度变化很大,我如何比较这两个python列表?

编辑澄清问题:我想我已经解决了bin比较问题(见下面的代码)。问题是如何知道哪一个箱子从地面真相比较哪一个箱子从结果。例如,在上面的图像中,我需要比较从地面真相(左侧)到从结果(右侧)的箱子1的箱子2,也就是说,比较每个箱子的橙色箱子。同样的问题也出现了,当没有从结果到地面真相的比较。你知道吗

def validator(result_bin, ground_truth_bin):
    # todo: padd the shorter bin with black values so each is the same length
    dists = cdist(result_bin, ground_truth_bin, 'euclidean')
    correct_guesses = np.sum(dists<25, axis=1)
    score = float(len(correct_guesses)) / len(ground_truth_bin)
    return score

Tags: 数据算法示例列表数量bin排序顺序
1条回答
网友
1楼 · 发布于 2024-04-26 02:28:12

RGB是一种非常不适合人类颜色感知的表示。你知道吗

转换为HSVLab。然后你可以用cosine similarity来表示每一对颜色。你知道吗

由于列表的长度不同,可以通过多种方式找到要比较的对。我可以提几个建议。你知道吗

  • 对于长列表中的每种颜色,在短列表中找到最接近的颜色;使用差异向量的欧几里德长度作为标量度量。

  • 对于较短列表中的每种颜色,在较长列表中找到最接近的颜色,如上所述测量差异,并将其从较长列表中删除。现在又有两个列表,重复这个过程。现在您有了一个差异度量的列表;通过运行次数(算术或几何平均数)对其进行平均。

希望这有帮助。你知道吗

相关问题 更多 >