【问题标题】:How to get intersection of two hashmaps with tolerence in Java?如何在Java中获得两个具有容差的哈希图的交集?
【发布时间】:2014-10-18 02:26:54
【问题描述】:

在我的 java 代码中,我有两个哈希图,我想将交集作为一个值。键是颜色的 ARGB 值(整数),其值是频率(整数)。基本上每个 hashmap 都是从图像生成的。

我想确定一个值,该值表示地图之间的距离。值越高,两张地图越接近。当然不可能完全严格,因为在现实生活中两种颜色可能看起来相同但 ARGB 值略有不同,这就是公差部分的用武之地。

到目前为止,我得到了这个:

private int colorCompare(Result otherResult) {
    HashMap<Integer, Integer> colorMap1 = getColorMap();
    HashMap<Integer, Integer> colorMap2 = otherResult.getColorMap();

    int sum = 0;
    for (Map.Entry<Integer, Integer> entry : colorMap1.entrySet()) {
        Integer key = entry.getKey();
        Integer value = entry.getValue();

        if (colorMap2.containsKey(key)) {
            sum += value + colorMap2.get(key);
        }   
    }

    return sum;
}


public double CloseTo(Pixel otherpixel) {
    Color mycolor = getColor();
    Color othercolor = otherpixel.getColor();
    double rmean = ( mycolor.getRed() + othercolor.getRed() )/2;
    int r = mycolor.getRed() - othercolor.getRed();
    int g = mycolor.getGreen() - othercolor.getGreen();
    int b = mycolor.getBlue() - othercolor.getBlue();
    double weightR = 2 + rmean/256;
    double weightG = 4.0;
    double weightB = 2 + (255-rmean)/256;
    return Math.sqrt(weightR*r*r + weightG*g*g + weightB*b*b);
} 

有谁知道如何将公差部分纳入其中,因为我不知道...

谢谢

【问题讨论】:

    标签: java algorithm colors hashmap


    【解决方案1】:

    我不确定两张地图的交集是什么,但听起来好像您想根据两张图像的直方图计算某种距离。解决此问题的一种经典方法是Earth mover's distance (EMD)。暂时假设图像具有相同数量的像素。这两个图像之间的 EMD 由第一个图像的像素和第二个图像的像素之间的一一对应关系确定,该对应关系使所有成对像素的颜色之间距离的总和最小化。可以使用Hungarian algorithm 在多项式时间内计算 EMD。

    如果图像大小不同,那么我们必须对频率进行归一化,并将匈牙利算法换成可以解决更一般的minimum-cost flow problem 的算法。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    • 2018-04-05
    • 2021-03-25
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多