簡體   English   中英

帶有處理的邊緣檢測算法(Java)

[英]Edge Detection Algorithm with Processing (Java)

我想編碼一種算法,可以對圖像進行邊緣檢測。 我已經有一部分代碼,可以水平檢測所有邊緣。 圖片示例: 在此處輸入圖片說明

但是我需要水平,垂直和對角線的邊緣檢測。 如果我像水平方式一樣嘗試它,則會得到ArrayOutOfBoundaryException(例如,如果我做pixRechts = color(meinBild1.pixels [index1(x + 1,y)]);

您有任何想法怎么做嗎? 我正在使用處理。

謝謝。

到目前為止,我的代碼。

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;
} 

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

這條線只會找到已經檢測到的邊緣。

我建議您按照示例中的說明進行操作,但是您應該檢測以下內容:

  1. x -1,y -1(垂直)
  2. x -1,y +1(垂直)
  3. x,y -1為水平

您還應該查看兩個循環。 上述情況還將在您的代碼與ArrayOutOfBoundsException中一起運行。

  1. 將在第一個像素處停止
  2. 將在最后一個y像素處停止

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM