image-processing - 颜色检测算法

标签 image-processing colors

我正在开发一个使用 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
   }
}

该算法的问题是,如果颜色太暗/太亮(由于阳光/反射),它就会失败(并且我必须更改阈值才能获得良好的检测)。理想情况下,我想存档每个绿色像素/对象都会被检测到(无论它有多亮/暗)。有谁知道有什么好的(强大的)算法来存档这个吗?希望能指出正确的方向。

谢谢。

最佳答案

您可能需要使用其他色彩空间。转换为 HSV,并使用色调。 看看this article ,它提供了一个例子。这是用openCV的,不过适应起来应该不会太困难。

关于image-processing - 颜色检测算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10640995/

相关文章:

c++ - OpenCV 中 FaceRecognizer 中的 LBP 运算符

Matlab: bar 不存在公共(public)属性 CData

ios - 如何根据 View 图层的颜色更改状态栏颜色

object - 使用卡尔曼滤波器来跟踪物体的位置,但需要知道该物体的位置作为卡尔曼滤波器的输入。到底是怎么回事?

php - 人脸检测和图像组合

css - 如何使用正在使用的过渡元素更改下划线颜色? (CSS)

python - 检查字符串是否定义了颜色

jquery - 使用jquery从colorpicker设置渐变背景颜色?

c++ - 使用高斯模糊和 Sobel 算子保留颜色

java - OpenCV 2.4 双边滤波