【问题标题】:Compare 2 lists of colours (unsorted and different length)比较 2 个颜色列表(未排序且长度不同)
【发布时间】:2019-07-02 23:30:08
【问题描述】:

我有一个任务让我很头疼。我已经生成了一种算法,可以将颜色分类到箱/子组中。我想评估它与 人类直觉 相比的效果如何。所以我创建了一些颜色列表(我的数据)并手动将它们分类到我认为算法应该如何对颜色进行排序的箱/子组中(我的基本事实)。然后我将这些相同的颜色列表(我的数据)提供给算法,并将其排序与我的基本事实进行比较。

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

以下是基本事实和算法结果的示例。我需要比较这 2 个不同的颜色列表,以查看结果与基本事实(左侧)的接近程度。 如您所见;箱的数量变化,每个箱的长度是可变的,每个箱中的颜色顺序是可变的。唯一不变的是两个列表将始终具有相同数量的颜色(它们的排序方式不同)。这就是为什么要弄清楚如何比较它们变得如此复杂(至少对我来说)。

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

[[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,2191],[204,20], [203,207,188],[194,199,180],[219,215,200],[214,206,195],[197,188,191],[197,188,192],[186,197,180],[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 个 bin/sub-groups):

[ [[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 数组或直方图)。请注意直方图,每个 bin 的数量需要相同,因此我可能需要填充其中一个列表。

当子列表顺序无关紧要且子列表长度如此多变时,如何比较这两个 python 列表?

编辑 澄清问题:我想我已经解决了 bin 比较(见下面的代码)。问题是如何知道从ground truth 中的哪个bin 与结果中的哪个bin 进行比较。例如,在上面的图像中,我需要比较来自地面实况(左侧)的 bin 2 和来自结果(右侧)的 bin 1,即比较它们每个的橙色 bin。当结果中没有 bin 可与基本事实进行比较时,也会出现问题。

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

【问题讨论】:

    标签: python numpy opencv scipy


    【解决方案1】:

    RGB 是人类颜色感知的非常不合适的表示。

    转换为HSVLab。然后你可以使用例如cosine similarity 每个颜色对。

    由于您的列表长度不同,因此可以通过多种方式找到要比较的配对。我可以推荐一些。

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

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

    希望这会有所帮助。

    【讨论】:

    • 感谢您的回答。但请记住,垃圾箱不是按顺序排列的。因此,在我的示例图像中,我将比较来自地面实况的 bin 1(左)与来自结果的 bin 1(右)。但我应该比较 bin 2(左)和 bin 1(右),即从左到右的橙色组。
    • 我的回答不假设在任何一种情况下都进行排序。但是,它会花费 O(len(list1) * len(list2)) 时间,因为它会为另一个列表的每个元素扫描一个列表。有了相当短的列表,这可能是可以接受的快。
    猜你喜欢
    • 2021-02-25
    • 2021-03-18
    • 2021-11-28
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多