Image processing 颜色检测算法

Image processing 颜色检测算法,image-processing,colors,Image Processing,Colors,我正在开发一个使用kinect进行图像处理的系统。系统需要根据颜色(从kinect图像)检测某些对象 我目前的解决方案是使用一个窗口(固定大小)并在整个图像中滑动它。然后我计算(在窗口中)绿色像素的数量,并将其与一些树状图进行比较。要检查像素是否为绿色,我使用参考颜色(0x00FF00),然后计算当前像素到参考颜色的距离 算法如下所示: referenceColor = 0x00FF00; window_width = 10; window_height = 10; colorSum = 0;

我正在开发一个使用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
   }
}
referenceColor=0x00FF00;
窗宽=10;
窗高=10;
色和=0;
颜色=20;
窗口颜色阈值=70;
foreach(图像中的像素)
{
色和=0;
对于(i=0;i
这个算法的问题是,如果颜色变暗/变亮(由于阳光/反射),它将失败(我必须更改树型以获得良好的检测)。理想情况下,我希望存档每个绿色像素/对象都会被检测到(无论它有多亮/多暗)。有人知道有什么好的(健壮的)将此存档的算法?希望有一个正确的方向


谢谢。

您可能需要使用其他颜色空间。请转换为HSV,然后使用色调。
看一看,它提供了一个例子。这是openCV,但适应起来应该不会太困难。

链接现在看起来已经断了。通过谷歌搜索找到了文章。答案中的链接现在应该可以工作了。如果不检查,两个链接都已断开