14

sto usando Marvin Framework per ottenere il modello vene, ma non so come rimuovere il contorno fogliaRimozione profilo con Marvin quadro in Java

che sto facendo quanto segue: (Ogni funzione chiama la sua corrispondente Marvin plugin):.

MarvinImage source = MarvinImageIO.loadImage("source.jpg"); 

    MarvinImage gsImage = grayscaleImage(source); 

    MarvinImage blImage1 = blurEffect(gsImage.clone(),1); 

    MarvinImage blImage2 = blurEffect(blImage1.clone(), 13); 

    MarvinImage difi = subtract(blImage2.clone(), blImage1.clone()); 

    difi = invertC(difi.clone()); 

    difi = closingEffect(difi.clone()); 

    difi = MarvinColorModelConverter.binaryToRgb(difi.clone()); 

    difi = reduceNoise(difi.clone()); 

    difi = invertC(difi.clone()); 

    MarvinImageIO.saveImage(difi, "result.jpg"); 

enter image description here

enter image description here

+0

Non vedo come si possa fare ciò senza identificare lo sfondo e impedire che lo sfondo venga incluso quando è sfocato. –

risposta

0

Ho sviluppato un approccio semplice che potrebbe aiutarti. Rimuove solo i bordi delle foglie da sinistra a destra e da destra a sinistra.

L'unica implicazione è l'orientamento della foglia. Ho ruotato manualmente l'immagine di output. Tuttavia, penso che dovresti considerare le foglie in quella posizione per una migliore analisi.

leaf_rotated.jpg:

http://marvinproject.sourceforge.net/other/leaf_rotated.jpg

leaf_rotated_out.jpg:

http://marvinproject.sourceforge.net/other/leaf_rotated_out.jpg

CODICE SORGENTE:

public class LeafTest { 

    public static void main(String[] args) { 

     MarvinImage image = MarvinImageIO.loadImage("./res/leaf_rotated.jpg"); 
     removeBorder(image); 
     MarvinImageIO.saveImage(image, "./res/leaf_rotated_out.jpg"); 
    } 

    private static void removeBorder(MarvinImage image){ 

     // left to right 
     for(int y=0; y<image.getHeight(); y++){ 
      for(int x=0; x<image.getWidth(); x++){ 

       if(image.getIntComponent0(x, y) > 10){ 

        for(int x2=x; x2<image.getWidth() && x2 < x+40; x2++){ 
         image.setIntColor(x2, y, 0,0,0); 
        } 

        x=0; 
        break; 
       } 
      } 
     } 

     // right to left 
     for(int y=0; y<image.getHeight(); y++){ 
      for(int x=image.getWidth()-1; x>=0; x--){ 

       if(image.getIntComponent0(x, y) > 10){ 

        for(int x2=x; x2>=0 && x2 > x-40; x2--){ 
         image.setIntColor(x2, y, 0,0,0); 
        } 

        x=image.getWidth()-1; 
        break; 
       } 
      } 
     } 
    } 
} 
+0

Sì, l'ho già provato, ma l'obiettivo è rimuovere il contorno usando i plugin marvin ... –

+2

Cosa intendi con "obiettivo"? È un esercizio? Qual è la definizione del problema? –