2

画像処理に kinect を使用するシステムを開発しています。システムは、(kinect 画像から) 色に基づいて特定のオブジェクトを検出する必要があります。

私の現在の解決策は、(固定サイズの)ウィンドウを使用して、画像全体をスライドさせることです。次に、(ウィンドウ内で)緑色のピクセル数を数え、それをいくつかのしきい値と比較します。ピクセルが緑色かどうかを確認するには、参照色 (0x00FF00) を使用し、現在のピクセルから参照色までの距離を計算します。

アルゴリズムは次のようになります。

referenceColor = 0x00FF00;
window_width = 10;
window_height = 10;
colorSum = 0;

COLOR_TRESHOLD = 20;
WINDOW_COLOR_TRESHOLD = 70;

foreach (pixel in image)
{
   colorSum = 0;
   for(i = 0; i < window_width; i++)
   { 
      for(j = 0; j < window_height; j++)
      { 
        //get the current pixel that is processed by the window
        curPixel = image.getPixelAt(i+pixel.indexX,j+pixel.indexY);
        // calculate the distance
        distance = sqrt((curPixel.r - referenceColor.r) ^ 2 + (curPixel.g - referenceColor.g) ^ 2 + (curPixel.b - referenceColor.b) ^ 2); 

        // check if distance smaller than the treshold
        if(distance <= COLOR_TRESHOLD) 
        {
           // pixel is green
           colorSum++;
        }
      }
   }
   // check if there are enough green pixels in the image
   if(colorSum > WINDOW_COLOR_TRESHOLD)
   {
       // green object detected
   }
}

このアルゴリズムの問​​題は、色が暗い/明るい (日光/反射による) 場合に失敗することです (適切な検出を得るには、しきい値を変更する必要があります)。理想的には、すべての緑色のピクセル/オブジェクトが検出されることをアーカイブしたいと思います (明るさ/暗さに関係なく)。これをアーカイブするための優れた(堅牢な)アルゴリズムを知っている人はいますか? 正しい方向へのポイントをいただければ幸いです。

ありがとう。

4

1 に答える 1

2

別の色空間を使用する必要がある場合があります。HSV に変換し、色相を操作します。この記事を見てください。例が示されています。これはopenCVの場合ですが、適応するのはそれほど難しくありません。

于 2012-05-17T18:04:24.397 に答える