3

私はJavaでいくつかの単純なエッジ検出を行うためのメソッドに取り組んでいます。1つのピクセルとそのすぐ下のピクセルの2つの色の強度の差を取得したいと思います。私が使用している画像は、メソッドにどのようなしきい値を設定しても、黒に着色されています。現在の方法が必要なものを計算していないかどうかはわかりませんが、問題を見つけるために何をトレースする必要があるのか​​途方に暮れています。

これまでの私の方法は次のとおりです。

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

2 に答える 2

5

new Color(1,1,1)0から255までの値をとるColor(int,int,int)コンストラクターを呼び出します。したがって、基本的には黒です(まあ、非常に濃い灰色ですが、気付くには十分ではありません)。ColorColor white

コンストラクターを使用する場合は、Color(float,float,float)floatリテラルが必要です。

Color white = new Color(1.0f,1.0f,1.0f);
于 2013-02-08T04:10:48.213 に答える
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);
  }
}

}

于 2015-05-12T03:13:34.597 に答える