2012-06-26 13 views
5

के रूप में काम नहीं कर रहा है, मैं Zhang-Suen thinning algorithm का उपयोग करने की कोशिश कर रहा हूं। मैंने जावा में इसे लागू करने का प्रयास किया है। लेकिन समस्या यह है कि यह मुझे एक पिक्सेल चौड़ाई रेखा के रूप में किनारों को नहीं पाता है। पहली बार मैं इस एल्गोरिदम का उपयोग कर रहा हूं और मुझे नहीं पता कि मेरे तर्क में क्या गलत है।झांग-सुएन पतला एल्गोरिदम कार्यान्वयन

क्या मैं हासिल करना चाहते हैं:

enter image description here

क्या मैं प्राप्त करने में सक्षम हूँ:

enter image description here

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(); 
    } 

} 

कहाँ कि खड़ी कर रहा है मेरी तर्क में त्रुटि है मुझे गलत परिणाम प्राप्त करने के लिए?

+2

आपका प्रश्न क्या है? – tskuzzy

+0

जैसा कि मैंने शोध किया है, इसे पात्रों को एक पंक्ति के रूप में पतला करना चाहिए। मेरा मतलब है, प्रत्येक चरित्र में दूसरी छवि में एक चौड़ाई वाली रेखाएं होनी चाहिए। लेकिन यह पत्रों के फ्रेम के रूप में मिल रहा है। मुझे केवल दूसरी छवि में ही चाहिए। – Ecrin

उत्तर

1

मुझे लगता है कि आप जेडएस एल्गोरिदम के विवरण के लिए उपयोग कर रहे लिंक गलत हैं। अग्रभूमि पिक्सेल को हटाने के लिए एक आवश्यक आवश्यकता यह है कि क्रॉसिंग नंबर 1 है। "क्रॉसिंग नंबर" समय सीमावर्ती पिक्सेल पृष्ठभूमि पिक्सेल में बदल जाता है क्योंकि आप घड़ी के क्रम में 8 पड़ोसी पिक्सल को पार करते हैं। ऐसा लगता है कि आपके लिंक में विवरण से गायब है। देखें: http://www.uel.br/pessoal/josealexandre/stuff/thinning/ftp/lam-lee-survey.pdf बेहतर चर्चा के लिए।

1

बयान

connectivity = 0; 

प्रत्येक विधि में छोरों के लिए दो के अंदर रखा जाना चाहिए।

1

आपको लूप करना है जब तक बिटमैप में कोई बदलाव नहीं छोड़ा जाता है। आपने केवल एल्गोरिदम का एक पुनरावृत्ति किया है।

संबंधित मुद्दे