【问题标题】:Connected Component Labelling in JavaJava中的连接组件标签
【发布时间】:2014-05-19 19:55:01
【问题描述】:

我目前正在尝试创建一些 Java 代码来执行连接组件标签。

这里有一个关于它是如何工作的解释:http://aishack.in/tutorials/labelling-connected-components-example/

我已经在我的代码中找到了一个点,我正在查看一个像素并比较它周围的所有像素。我现在完全迷失了,我很难找出我用什么来存储像素是背景像素、以前发现的对象还是新对象。

我的问题是我应该调用或更改什么来允许我存储这些值。提前谢谢你。

(为了清楚起见,这是我的代码)

private void connectedComponentLabelling(ImageProcessor ip) {

    int w = ip.getWidth();
    int h = ip.getHeight();
    int background = 255; //black
    int foreground = 0;   //white
    int nextLabel = 1;

    int [] linked;
    int [][] NEIGHBOUR = new int [w][h];

    for (int v=0; v<h; v++){
        for (int u=0; u<w; u++){
            if (ip.getPixel(v,u) != background){

                for (int j=-1; j<=1; j++){
                    for (int i=-1; i<=1; i++){

                        int p = ip.getPixel(v+j, u+i);

                        if (p != background){

                            //linked[nextLabel];
                            NEIGHBOUR[v][u] = nextLabel;

                    }else{
                     nextLabel++;
                    }



                }
            }
        }
    }
    }

【问题讨论】:

    标签: java components


    【解决方案1】:

    一些提示:

    • 由于您是从左上角到右下角扫描像素,因此您应该只比较已扫描的像素。所以你应该只比较左上、上、右上和左像素。

    • 然后,如果所有这些像素都是背景(这意味着你不知道连接这个新像素的原因)你为这个像素创建一个新标签:NEIGHBOUR[v][u] = nextLabel++

    • 另一方面,如果您发现其中一个像素不是背景,则将其标签分配给该像素。例如,如果您发现左上角的像素不是背景的一部分,则将其标签传播到当前像素:NEIGHBOUR[v][u] = NEIGHBOUR[v-1][u-1]

    • 当您进行此项检查时,您可能还会发现多个邻居具有不同的NEIGHBOUR[v][u] 值。例如。 NEIGHBOUR[v-1][u-1]!=NEIGHBOUR[v-1][u+1]。在这种情况下, 您将此信息添加到地图中,例如 connections.put(NEIGHBOUR[v-1][u-1],NEIGHBOUR[v-1][u+1]) 。但这值得提出一个新问题。

    【讨论】:

      猜你喜欢
      • 2017-05-07
      • 2018-03-08
      • 2011-01-10
      • 2011-07-31
      • 2014-04-13
      • 2013-12-02
      • 2013-01-06
      • 2013-11-26
      相关资源
      最近更新 更多