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