等价表可以使用HashMap 来实现。每次找到与另一个标签等效的标签时,只需将该关系添加到哈希映射中即可。
final Map<Integer, Integer> equivalenceTable = new HashMap<>();
所以每当你找到两个相等的标签时,只需将它们放入等价表中即可。
private void storeEquivalence(final Integer label0, final Integer label1, final Map<Integer, Integer> table) {
if (table.keySet().contains(label0)) {
table.put(label1, table.get(label0));
}
else if (table.keySet().contains(label1)) {
table.put(label0, table.get(label1));
}
else {
table.put(label0, label1);
}
}
因此,当您确定 region[x-1][y] 和 region[x][y-1] 相等时,您应该检查标签是否不同(它们应该不同)并通过调用更新等价表
storeEquivalence(region[x-1][y], region[x][y-1], equivalenceTable);
然后在第二遍中,您只需替换等价表中具有值的每个标签。
for (int x = 1; x < imageTwo.getWidth(); x++) {
for (int y =1; y < imageTwo.getHeight(); y++) {
if (equivalenceTable.keySet().contains(region[x][y])) {
region[x][y] = equivalenceTable.get(region[x][y]);
}
}
}