2012-05-17 3 views
1

Im разрабатывает систему, которая использует 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 
    } 
} 

Проблема с этим алгоритмом, что если цвет темных/светлые (из-за солнечный свет/отражения) он выходит из строя (и я должен изменить tresholds к получить хорошее обнаружение). В идеале я хотел бы архивировать, что каждый зеленый пиксель/объект будет обнаружен (независимо от того, насколько он яркий/темный). Знает ли какой-либо хороший (надежный) алгоритм для его архивирования? Почитал бы точку в правильном направлении.

Спасибо.

ответ

2

Возможно, вам потребуется использовать другое цветовое пространство. Преобразуйте в HSV и работайте с оттенком. Посмотрите на this article, это пример. Это с openCV, но его не следует слишком сложно адаптировать.

+0

отличная статья, спасибо! – blejzz

+0

ссылка теперь будет разбита – Drodbar

+1

Нашла статью через Google. Ссылка в ответе должна работать сейчас. Если он не проверяет - http://www.aishack.in/tutorials/tracking-colored-objects-in-opencv/ –

Смежные вопросы