Алгоритм обнаружения ребер с обработкой (Java)

я хочу кодировать алгоритм, который может сделать обнаружение края для изображения.
У меня уже есть часть кода, которая определяет все ребра по горизонтали.
Пример изображения:Введите описание изображения здесь

Но мне нужно обнаружение края в горизонтальном, вертикальном и раскосном пути.
Если я попробую так же, как горизонтальный способ, я получу исключение ArrayOutOfBoundaryException (например, если я делаю pixRechts= color(meinBild1.пиксели[index1 (x+1, y)]); )

Есть ли у вас идеи, как это сделать?
Im с помощью обработки.

Спасибо.

Мой код до сих пор.

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 ответ

  1. (например, если я делаю pixRechts= color (meinBild1.пиксели[index1 (x+1, y)]); )

    Эта линия просто найдет уже обнаруженные ребра.

    Я бы рекомендовал вам сделать это так, как вы упомянули в своем примере, но вы должны просто определить для:

    1. x -1, y -1 для вертикали
    2. x -1, y +1 для вертикали
    3. x, y -1 для горизонтального

    Вы также должны посмотреть на свои две петли. Вышеупомянутые случаи также будут выполняться в ArrayOutOfBoundsException с вашим кодом.

    1. остановится на первом пикселе
    2. остановится на последнем пикселе y