Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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 Zhang Suen细化算法实现未按预期工作_Java_Algorithm - Fatal编程技术网

Java Zhang Suen细化算法实现未按预期工作

Java Zhang Suen细化算法实现未按预期工作,java,algorithm,Java,Algorithm,我正在尝试使用。我试图用Java实现它。但问题是它发现我的边缘不是一个像素宽的线。我第一次使用这个算法时,我不知道我的逻辑出了什么问题 我想要实现的是: public void thinStepI(){ delList.clear(); neighbor = 0; connectivity = 0; for(int i=4;i<width-4;i++) for(int j=4;j<height-4;j++){

我正在尝试使用。我试图用Java实现它。但问题是它发现我的边缘不是一个像素宽的线。我第一次使用这个算法时,我不知道我的逻辑出了什么问题

我想要实现的是:

 public void thinStepI(){

     delList.clear();
    neighbor = 0;
    connectivity = 0;

     for(int i=4;i<width-4;i++)
        for(int j=4;j<height-4;j++){
            p = pixelList[i][j];
            if (p == 1){
                p1 = pixelList[i-1][j]; 
                p2 = pixelList[i-1][j+1]; 
                p3 = pixelList[i][j+1]; 
                p4 = pixelList[i+1][j+1]; 
                p5 = pixelList[i+1][j];
                p6 = pixelList[i+1][j-1]; 
                p7 = pixelList[i][j-1]; 
                p8 = pixelList[i-1][j-1];  


                neighbor = p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8;

                if (p1 == 0 && p2 == 1)
                    connectivity ++;
                if (p2 == 0 && p3 == 1)
                    connectivity ++;
                if (p3 == 0 && p4 == 1)
                    connectivity ++;
                if (p4 == 0 && p5 == 1)
                    connectivity ++;
                if (p5 == 0 && p6 == 1)
                    connectivity ++;
                if (p6 == 0 && p7 == 1)
                    connectivity ++;
                if (p7 == 0 && p8 == 1)
                    connectivity ++;
                if (p8 == 0 && p1 == 1)
                    connectivity ++;

                if ( connectivity == 1 && (neighbor >= 2 && neighbor <= 6) &&
                     (p1 * p3 * p5 == 0) && (p3 * p5 * p7 == 0) ){
                    delList.add(i);
                    delList.add(j);
                }



            }      
        }

     int length = delList.size();
     if (length != 0){
        for(int i =0; i < (length - 1); i+=2){
            pixelList[delList.get(i)][delList.get(i+1)] = 0;
            System.out.println("oldu");
        }
        thinStepI();
     }


}

   public void thinStepII(){
    delList.clear();
    neighbor = 0;
    connectivity = 0;

     for(int i=4;i<width-4;i++)
        for(int j=4;j<height-4;j++){
            if (pixelList[i][j] == 1){
                p  = pixelList[i][j]; // ** Origin Pixel ** 
                p1 = pixelList[i-1][j]; 
                p2 = pixelList[i-1][j+1]; 
                p3 = pixelList[i][j+1]; 
                p4 = pixelList[i+1][j+1]; 
                p5 = pixelList[i+1][j];
                p6 = pixelList[i+1][j-1]; 
                p7 = pixelList[i][j-1]; 
                p8 = pixelList[i-1][j-1];                    

                neighbor = p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8;

                if (p1 == 0 && p2 == 1)
                    connectivity ++;
                if (p2 == 0 && p3 == 1)
                    connectivity ++;
                if (p3 == 0 && p4 == 1)
                    connectivity ++;
                if (p4 == 0 && p5 == 1)
                    connectivity ++;
                if (p5 == 0 && p6 == 1)
                    connectivity ++;
                if (p6 == 0 && p7 == 1)
                    connectivity ++;
                if (p7 == 0 && p8 == 1)
                    connectivity ++;
                if (p8 == 0 && p1 == 1)
                    connectivity ++;

                if ( connectivity == 1 && (neighbor >= 2 && neighbor <= 6) &&
                     (p1 * p3 * p7 == 0) && (p1 * p5 * p7 == 0) ){
                    delList.add(i);
                    delList.add(j);
                }



            }     
        }

     int length = delList.size();
     if (length != 0){
        for(int i =0; i < (length - 1); i+=2){
            pixelList[delList.get(i)][delList.get(i+1)] = 0;
            System.out.println("oldu2");
        }
        thinStepII();
     }

}

我能做到的是:

 public void thinStepI(){

     delList.clear();
    neighbor = 0;
    connectivity = 0;

     for(int i=4;i<width-4;i++)
        for(int j=4;j<height-4;j++){
            p = pixelList[i][j];
            if (p == 1){
                p1 = pixelList[i-1][j]; 
                p2 = pixelList[i-1][j+1]; 
                p3 = pixelList[i][j+1]; 
                p4 = pixelList[i+1][j+1]; 
                p5 = pixelList[i+1][j];
                p6 = pixelList[i+1][j-1]; 
                p7 = pixelList[i][j-1]; 
                p8 = pixelList[i-1][j-1];  


                neighbor = p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8;

                if (p1 == 0 && p2 == 1)
                    connectivity ++;
                if (p2 == 0 && p3 == 1)
                    connectivity ++;
                if (p3 == 0 && p4 == 1)
                    connectivity ++;
                if (p4 == 0 && p5 == 1)
                    connectivity ++;
                if (p5 == 0 && p6 == 1)
                    connectivity ++;
                if (p6 == 0 && p7 == 1)
                    connectivity ++;
                if (p7 == 0 && p8 == 1)
                    connectivity ++;
                if (p8 == 0 && p1 == 1)
                    connectivity ++;

                if ( connectivity == 1 && (neighbor >= 2 && neighbor <= 6) &&
                     (p1 * p3 * p5 == 0) && (p3 * p5 * p7 == 0) ){
                    delList.add(i);
                    delList.add(j);
                }



            }      
        }

     int length = delList.size();
     if (length != 0){
        for(int i =0; i < (length - 1); i+=2){
            pixelList[delList.get(i)][delList.get(i+1)] = 0;
            System.out.println("oldu");
        }
        thinStepI();
     }


}

   public void thinStepII(){
    delList.clear();
    neighbor = 0;
    connectivity = 0;

     for(int i=4;i<width-4;i++)
        for(int j=4;j<height-4;j++){
            if (pixelList[i][j] == 1){
                p  = pixelList[i][j]; // ** Origin Pixel ** 
                p1 = pixelList[i-1][j]; 
                p2 = pixelList[i-1][j+1]; 
                p3 = pixelList[i][j+1]; 
                p4 = pixelList[i+1][j+1]; 
                p5 = pixelList[i+1][j];
                p6 = pixelList[i+1][j-1]; 
                p7 = pixelList[i][j-1]; 
                p8 = pixelList[i-1][j-1];                    

                neighbor = p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8;

                if (p1 == 0 && p2 == 1)
                    connectivity ++;
                if (p2 == 0 && p3 == 1)
                    connectivity ++;
                if (p3 == 0 && p4 == 1)
                    connectivity ++;
                if (p4 == 0 && p5 == 1)
                    connectivity ++;
                if (p5 == 0 && p6 == 1)
                    connectivity ++;
                if (p6 == 0 && p7 == 1)
                    connectivity ++;
                if (p7 == 0 && p8 == 1)
                    connectivity ++;
                if (p8 == 0 && p1 == 1)
                    connectivity ++;

                if ( connectivity == 1 && (neighbor >= 2 && neighbor <= 6) &&
                     (p1 * p3 * p7 == 0) && (p1 * p5 * p7 == 0) ){
                    delList.add(i);
                    delList.add(j);
                }



            }     
        }

     int length = delList.size();
     if (length != 0){
        for(int i =0; i < (length - 1); i+=2){
            pixelList[delList.get(i)][delList.get(i+1)] = 0;
            System.out.println("oldu2");
        }
        thinStepII();
     }

}

public void thinStepI(){
delList.clear();
邻居=0;
连通性=0;

对于(int i=4;i我认为您用于描述ZS算法的链接是错误的。删除前景像素的必要条件是其交叉数为1。“交叉数”是按顺时针顺序遍历8个相邻像素时前景像素变为背景像素的次数。链接中的描述中似乎缺少此项。请参阅: 为了更好的讨论。

声明

connectivity = 0;

应在每个方法中的两个for循环内放置。

必须循环,直到位图没有更改为止。
您只对算法进行了一次迭代。

正如我所研究的,它应该将字符细化为一行。我的意思是,每个字符应该像第二张图像中一样由一条宽线组成。但它是作为字母的框架找到的。我只需要像第二张图像中的一样。