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 к получить хорошее обнаружение). В идеале я хотел бы архивировать, что каждый зеленый пиксель/объект будет обнаружен (независимо от того, насколько он яркий/темный). Знает ли какой-либо хороший (надежный) алгоритм для его архивирования? Почитал бы точку в правильном направлении.
Спасибо.
отличная статья, спасибо! – blejzz
ссылка теперь будет разбита – Drodbar
Нашла статью через Google. Ссылка в ответе должна работать сейчас. Если он не проверяет - http://www.aishack.in/tutorials/tracking-colored-objects-in-opencv/ –