繁体   English   中英

Java中的连接组件标签

[英]Connected Component Labelling in Java

我目前正在尝试创建一些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++;
                    }



                }
            }
        }
    }
    }

一些技巧:

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

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

  • 另一方面,如果发现这些像素之一不是背景像素,则可以将其标签分配给该像素。 对于instace,如果发现左上像素不是背景的一部分,则将其标签传播到当前像素: 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]) 但这值得一个新问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM