带处理的边缘检测算法(Java)

时间:2017-01-15 23:08:14

标签: java algorithm image-processing processing edge-detection

我想编写一个算法,可以对图像进行边缘检测。 我已经有了部分代码,它以水平方式检测所有边缘。 示例图片:enter image description here

但我需要水平,垂直和对角线方式的边缘检测。 如果我像水平方式一样尝试它,我得到一个ArrayOutOfBoundaryException(例如,如果我做 pixRechts = color(meinBild1.pixels [index1(x + 1,y)]);

你有什么想法怎么做? 我正在使用Processing。

感谢。

我的代码直到现在。

PImage meinBild1, meinBild2;
int anzahlPixel1, anzahlPixel2;

void setup()
{
  size(1000,250); 


  meinBild1 = loadImage("stonehenge.jpg"); //500x250
  meinBild2 = createImage(500,250, RGB);


  anzahlPixel1 = meinBild1.width * meinBild1.height;
  anzahlPixel2 = meinBild2.width * meinBild2.height;


  meinBild1.loadPixels();
  meinBild2.loadPixels();

  edgeDetection();


  meinBild1.updatePixels();
  image(meinBild1, 0, 0);  


  meinBild2.updatePixels();
  image(meinBild2, 500, 0);  

}

void draw()
{

}

void edgeDetection()
{
  int x,y;
  float edge;
  color pix, pixLinks;


  for ( x = 1; x < meinBild2.width; x++) 
  { 
    for ( y = 0; y < meinBild2.height; y++) 
    {

      pix= color(meinBild1.pixels[index1(x,y)]);
      pixLinks= color(meinBild1.pixels[index1(x-1,y)]);

      edge = abs(brightness(pix)-brightness(pixLinks));

      if (edge>50) {
        edge=255;
      }
      else{
          edge=0;
      }

      meinBild2.pixels[index2(x,y)] = color(edge);

    }
  }

}

int index1(int x, int y)
{
  int r= x + y*meinBild1.width;
  return r;
} 


int index2(int x, int y)
{
  int r= x + y*meinBild2.width;
  return r;
} 

1 个答案:

答案 0 :(得分:0)

  

(例如,如果我做pixRechts = color(meinBild1.pixels [index1(x + 1,y)]);)

此行只会找到已经检测到的边缘。

我建议你像你的例子中提到的那样做,但你应该只检测:

  1. x -1,y -1表示垂直
  2. x -1,y +1表示垂直
  3. x,y -1表示水平
  4. 你还应该看看你的两个循环。上面提到的情况也将在您的代码中使用ArrayOutOfBoundsException运行。

    1. 将停在第一个像素
    2. 将停在最后一个y像素