[英]How do I merge the labels in connected component labeling
嗨,我必须找出一个图像中有多少个对象。
http://en.wikipedia.org/wiki/Connected-component_labeling
我需要帮助存储邻居之间的对等以及第二遍。 该通行证给了我173个左右的物体,是第一关。 我想存储等效项(当它们发生时),然后在第二遍中能够将等效项替换为最低等效值。
等效表可以使用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]);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.