2010-11-01 15 views
2

嗨,大家好,我是一個圖像處理技術的嬰兒在java中,我決定開發一個項目的圖像處理,所以我需要什麼是算法都遵循,哪一個更容易開發請有人引導我它可能是非常適合我.....以及哪種技術最適合圖像處理java或Matlab?指導我...如何在java中執行圖像分割?

回答

0

MATLAB對圖像處理更好。最好的方法是找到特殊的圖像處理工具(或庫)。

2

對於JAVA中的圖像分割,您還可以考慮使用開源IMMI工具(http://spl.utko.feec.vutbr.cz/en/)。與Matlab相比,它(在我看來)更簡單易用,並且簡單地啓用圖像挖掘。

1

圖像分割算法取決於分割後需要的輸出類型。每個算法執行不同的分段。我認爲該地區的增長或Flood Fill是有利於這一目的。 您可以使用Java/JAI和JavaCV進行此圖像處理任務。

1

我認爲最適合您的圖像處理工具取決於您正在使用的項目類型。

如果您正在研究一個需要生產力,快速驗證和寫入報告的研究項目,Matlab和類似的工具是最好的選擇。另一方面,如果你正在開發一個軟件產品,Java,C++,C,Objective-C等是更多的指示。 Matlab解決方案不易於生產交付和維護。

既然您問過如何在Java中進行圖像分割,我將使用Java和Marvin Image Processing Framework提供一個示例。正如@Asif Sharif所建議的那樣,FloodFill細分是一個很好的策略,我使用它!

INPUT IMAGE: enter image description here

輸出圖像: enter image description here

運作方式:

  1. 負載輸入圖像。
  2. 將綠色像素更改爲白色像素。
  3. 應用強度閾值來分離前景和背景。
  4. 將形態學關閉應用於同一對象的分組部分
  5. 使用FloodFill分段獲取分段。
  6. 在原始圖像中繪製線段座標。

SOURCE:

import static marvin.MarvinPluginCollection.*; 

public class SimpleSegmentation { 
    public SimpleSegmentation(){ 
     // 1. Load image 
     MarvinImage original = MarvinImageIO.loadImage("./res/robocup.jpg"); 
     MarvinImage image = original.clone(); 
     // 2. Change green pixels to white 
     filterGreen(image); 
     // 3. Use threshold to separate foreground and background. 
     MarvinImage bin = MarvinColorModelConverter.rgbToBinary(image, 127); 
     // 4. Morphological closing to group separated parts of the same object 
     morphologicalClosing(bin.clone(), bin, MarvinMath.getTrueMatrix(30, 30)); 
     // 5. Use Floodfill segmention to get image segments 
     image = MarvinColorModelConverter.binaryToRgb(bin); 
     MarvinSegment[] segments = floodfillSegmentation(image); 
     // 6. Show the segments in the original image 
     for(int i=1; i<segments.length; i++){ 
      MarvinSegment seg = segments[i]; 
      original.drawRect(seg.x1, seg.y1, seg.width, seg.height, Color.yellow); 
      original.drawRect(seg.x1+1, seg.y1+1, seg.width, seg.height, Color.yellow); 
     } 
     MarvinImageIO.saveImage(original, "./res/robocup_segmented.png"); 
    } 
    private void filterGreen(MarvinImage image){ 
     int r,g,b; 
     for(int y=0; y<image.getHeight(); y++){ 
      for(int x=0; x<image.getWidth(); x++){ 
       r = image.getIntComponent0(x, y); 
       g = image.getIntComponent1(x, y); 
       b = image.getIntComponent2(x, y); 
       if(g > r*1.5 && g > b*1.5){ 
        image.setIntColor(x, y, 255,255,255); 
     }}} 
    } 
    public static void main(String[] args) { new SimpleSegmentation(); } 
} 
+0

錯誤無法的分辨率:Ljavax/ImageIO的/ ImageIO的;幫幫我。 – Roadies 2016-09-30 12:59:19