На данный момент результаты испытаний таковы:
У робота болезнь Паркинсона, бедняга
Колебания сильно портят точность определения позиции (завожу сигнал с потенциометра сервы на АЦП МК), колебания даже на 7битном значении есть (я поажлуй ниже не буду опускать, может и так нормально будет). Изображение с камеры дерьмовенькое - с уменьшением яркости участка изображения повышается шум, даже отлично освещенный зеленый шарик по краям имеет шумы и надо делать поправку на освещение при определении размера объекта на изображении. Динамические характеристики камеры оказались не столь высоки - изображение смазанное на полном ходу при повороте платформы, поэтому зря я гнался за большим fps. Зато это (плюс еще одна особенность режима вывода изображения камеры) сильно увеличивают доступное для колор-трекинга процессорное время.
Я решил сделать свой алгоритм колор-трекинга и накидал кое-какие соображения. Для моего случая цветовые модели HSV и HSL подходят как нельзя лучше.
Color tracking, адаптированный для OV9650
Условия/ограничения:
- неточечное освещение со спины манипулятора, желательно снизу вверх (далее, подсветка)
- объект: круглый мячик/шарик
- с связи с маленьким разрешением изображения макс. дистанция видимости 0,5м
Положения:
Обработка построчная. Возможно хранить верхнюю и нижнюю строку, что в перспективе позволит улучшить алгоритм.
Цветовая модель HSV(HSB) или HSL. Разница между ними здесь играет очень большое значение,
т.к. наибольшее влияние оказывает яркость и светлота, пока я еще не определился с выбором.
Минимальная длина строки пикселей, принадлежащих объекту, 3, меньшие последовательности считаются шумом.
Диапазона цвета объекта нету как такового, есть разброс среднего значения цвета, который зависит от доверия цвету.
В режиме поиска зона доверия пониженная, а минимальная длина пикселей 2.
Оценочные зависимости:
- больше яркость пикселя -> больше доверия цвету, но есть верхний порог (~97%), после которого доверия вообще нет
Стратегия:
- сбор статистики по яркости, не включая пиксели объекта
если яркость маленькая
-> края объекта зашумлены, коэффициент увеличения размера k_size = f(яркость)
если большая, то скорее всего освещение распределенное
-> края объекта незашумлены, коэффициент увеличения размера k_size = 1.0,
-> фоновое изображение становиться ближе к зоне доверия, поднимаем зону доверия
если сильно большая, то камера неведена на яркий свет
-> условия очень плохие даже при подсветке, шансы на успех крайне малы
-> <поведение не определено>
- оценка формы объекта (пока что ничего определенного)
Собственно само распознавание:
- построчно фиксируются точки в начале и конце последовательностей пикселей, принадлежащих объекту
- находится геометрический центр всех точек
- радиус определяется как среднее значение расстояний от центра точек. точек берется несколько самых дальних от центра
плюс еще всякие коррекции и поправки
Вот образец при условиях "маленькой яркости":