2014-10-31 7 views
2

У меня есть два взаимосвязанных вопроса:Как выбрать оптимальные значения HSV для InRange пороговым в OpenCV

  1. Я делаю обнаружение цвета объекта в OpenCV с inRange пороговой функции. Я получаю отличные результаты, если вручную выбрать нижнюю и верхнюю границы HSV, но это очень чувствительно к условиям освещения. Есть ли алгоритм, который может определять оптимальные пороговые границы, учитывая значения HSV для цели и фона?

    В качестве примера здесь значения я работать:

    значение

    Целевой ВПГ: [15, 37, 51]

    фона ВПГ значение: [90, 21, 211]

  2. inRange - простой пиксельно-пиксельный фильтр. Он не меняет пороговые условия динамически. Есть ли эквивалент цвета адаптивного порога или порога Otsu? Или алгоритм, который может использовать априорные значения HSV для цели и фона?

+2

Вы можете попытаться запустить порог otsu на V-канале, а затем использовать возвращаемое значение, чтобы получить границы для V с inRange – berak

ответ

2

Если большая часть изображения более или менее то же самое (например, большинство из них является фоном), чем вы можете сделать следующее:

  1. Вычислить медиану (M) значений пикселей на изображении. Некоторые люди используют среднее значение, но я предпочитаю медианную для его надежности.

  2. Вычисление медианного абсолютного отклонения (MAD) значений пикселей в изображении. Опять же, я предпочитаю его за стандартное отклонение за его надежность.

Все, что будет падать в диапазоне между (M - K * MAD) и (M + K * MAD) будет фон (или объект). Выберите значение константы 'k' в соответствии с вашим приложением (я думаю, это будет где-то между 1 и 5).

Маленький наконечник, если это ваш первый раз с использованием MAD: 1 стандартное отклонение приблизительно равно 1,5 MAD в случае нормального распределения.

+0

'(M - k * MAD)' вы хотели выделить 'k * MAD' для' (m - k) * MAD'? Это легко производит отрицательные числа чаще, чем положительные, из моего опыта (так что нижняя граница почти всегда достигает 0). –

+0

@ DouglasGaskell, нет, это не k * MAD. Нет ничего плохого, если нижняя граница равна 0, если она имеет смысл для текущего распределения уровней серого (и очень часто это). –