14

Tôi đang sử dụng Marvin Framework để có được mô hình tĩnh mạch, nhưng tôi không biết làm thế nào để loại bỏ các đường viền láLoại bỏ đường viền bằng Marvin Khung trong Java

Tôi đang làm như sau: (Mỗi chức năng gọi của nó tương ứng 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

Tôi không thấy cách bạn có thể thực hiện việc này mà không xác định nền và ngăn không cho nền được bao gồm khi bị mờ. –

Trả lời

0

Tôi đã phát triển một cách tiếp cận đơn giản có thể giúp bạn. Nó chỉ loại bỏ các đường viền lá từ trái sang phải và từ phải sang trái.

Ý nghĩa duy nhất là hướng lá. Tôi đã xoay hình ảnh đầu ra của bạn theo cách thủ công. Tuy nhiên, tôi nghĩ bạn nên xem xét lá ở vị trí đó để phân tích tốt hơn.

leaf_rotated.jpg:

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

leaf_rotated_out.jpg:

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

MÃ NGUỒN:

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

Vâng, tôi đã thử điều này, nhưng mục đích là để loại bỏ các đường viền bằng cách sử dụng các plugin marvin ... –

+2

Ý của bạn là gì với "mục tiêu"? Nó là một bài tập? Định nghĩa của vấn đề là gì? –

Các vấn đề liên quan