Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在连接的零部件标签中合并标签_Java_Image Processing_Computer Vision_Labeling - Fatal编程技术网

Java 如何在连接的零部件标签中合并标签

Java 如何在连接的零部件标签中合并标签,java,image-processing,computer-vision,labeling,Java,Image Processing,Computer Vision,Labeling,嗨,我得找出一张图片里有多少物体 http://en.wikipedia.org/wiki/Connected-component_labeling 我需要帮助存储邻居之间的等价关系以及第二个通行证。这一关给了我173个左右的对象,这是第一关。我想存储等价物(当它们发生时),然后在第二次传递中,只需用最低的等价值替换相应的等价物。等价表可以使用HashMap实现。每次找到与另一个标签等效的标签时,只需将该关系添加到哈希映射中 final Map<Integer, Integer>

嗨,我得找出一张图片里有多少物体

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);
  }
}
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]);
    }  
  }
}
for(int x=1;x
非常感谢…所以在区域[x][y]=Math.min(区域[x-1][y],区域[x][y-1])之后;如果存在等价物,我是否声明StoreEquality(区域[x-1][y],区域[x][y-1],等价物);?如果If语句
If(imageTwo.getRed(x-1,y)!=0)
If(imageTwo.getRed(x,y-1)!=0)
都是真的,那么您应该检查标签是否不同,如果是真的,则将它们存储在等价表中(如果它们相同,则显然不需要存储在表中)。我已经相应地编辑了答案。在我的…区域[x][y]=Math.min(区域[x-1][y],区域[x][y-1])之后;。。。如果(region[x-1][y]!=region[x][y-1]){storeEquivalence(region[x-1][y],region[x][y-1],equivalentable);…netbeans告诉我不能从静态上下文引用非静态方法……我应该怎么做?听起来你需要使
storeEquivalence
static(将方法签名更改为
private static void storeEquivalence(…)
)。好的,我让它工作并编译…但是在第二次通过后,我如何打印我有多少对象?我已经相应地更新了我的代码。您不应该从问题中删除代码。这将使涉及代码的答案难以理解。
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]);
    }  
  }
}