2017-01-15 16 views
0

画像のエッジ検出を行うアルゴリズムをコーディングする必要があります。 私は既にコードの一部分を持っています。これは水平方向にすべてのエッジを検出します。 サンプル画像:enter image description here処理によるエッジ検出アルゴリズム(Java)

しかし、私は水平、垂直、斜め方向にエッジ検出が必要です。私はそれを水平道のような同じようにしようと が、私はArrayOutOfBoundaryExceptionを取得する(私はpixRechtsを行う場合などを=色(meinBild1.pixels [index1の(X + 1、Y)]);

Uを実行します。どのようにそれを行うためのアイデアがありますか?処理を使用している

ありがとうございました。

今までのコード。

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

答えて

0

(例えばiはpixRechts =色(meinBild1.pixels [index1の(X + 1、Y)])を行う場合;)

にこのラインを単に既に検出されたエッジを見つけるだろう。

あなたはあなたの例で述べたように、私はそれを行うには、あなたをお勧めします、しかし、あなたはちょうど検出する必要のため:

  1. のx -1、Y -1垂直
  2. のx -1について、yの1垂直
  3. xに対して、yの-1水平

のためにまた、あなたの二つのループになっているはずです。上記のケースは、あなたのコードでArrayOutOfBoundsExceptionでも実行されます。

  1. は現在
+0

がUに感謝最後のyピクセル、私はそれを持っているで停止する最初のピクセルで停止します。) – Sascha

関連する問題