2013-02-08 115 views
2

我正在研究Java中的一種方法來做一些簡單的邊緣檢測。我想在兩個像素之間取一個像素的顏色強度和另一個像素的正下方像素的差值。無論我爲該方法投入了多少門檻,我正在使用的圖片都是黑色的。我不確定我目前的方法是不是計算我需要的方法,但我無法找到我應該尋找的問題。簡單的邊緣檢測方法Java

這裏是我的方法迄今:

public void edgeDetection(double threshold) 
{ 

    Color white = new Color(1,1,1); 
    Color black = new Color(0,0,0); 

    Pixel topPixel = null; 
    Pixel lowerPixel = null; 

    double topIntensity; 
    double lowerIntensity; 

    for(int y = 0; y < this.getHeight()-1; y++){ 
    for(int x = 0; x < this.getWidth(); x++){ 

     topPixel = this.getPixel(x,y); 
     lowerPixel = this.getPixel(x,y+1); 

     topIntensity = (topPixel.getRed() + topPixel.getGreen() + topPixel.getBlue())/3; 
     lowerIntensity = (lowerPixel.getRed() + lowerPixel.getGreen() + lowerPixel.getBlue())/3; 

     if(Math.abs(topIntensity - lowerIntensity) < threshold) 
     topPixel.setColor(white); 
     else 
     topPixel.setColor(black); 
    } 
    } 
} 

回答

4

new Color(1,1,1)調用的ColorColor(int,int,int)構造函數0和255之間取值所以你Color white基本上仍是黑色的(好,非常暗灰色,但還不夠通知)。

如果你想使用Color(float,float,float)構造函數,你需要浮動文字:

Color white = new Color(1.0f,1.0f,1.0f); 
+0

謝謝你,我想讀的構造函數的文檔。 –

0
public void edgeDetection(int edgeDist) 
    { 
Pixel leftPixel = null; 
Pixel rightPixel = null; 
Pixel bottomPixel=null; 
Pixel[][] pixels = this.getPixels2D(); 
Color rightColor = null; 
boolean black; 
for (int row = 0; row < pixels.length; row++) 
{ 
    for (int col = 0; 
     col < pixels[0].length; col++) 
    { 
    black=false; 
    leftPixel = pixels[row][col]; 
    if (col<pixels[0].length-1) 
    { 
     rightPixel = pixels[row][col+1]; 
     rightColor = rightPixel.getColor(); 
     if (leftPixel.colorDistance(rightColor) > 
      edgeDist) 
     black=true; 
    } 
    if (row<pixels.length-1) 
    { 
     bottomPixel =pixels[row+1][col]; 
     if (leftPixel.colorDistance(bottomPixel.getColor())>edgeDist) 
     black=true; 

    } 
    if (black) 
     leftPixel.setColor(Color.BLACK); 
    else 
     leftPixel.setColor(Color.WHITE); 
    } 
} 

}