Мой короткий вопрос
Как определить черные точки на следующих изображениях? (Я вставляю только одно тестовое изображение, чтобы вопрос выглядел компактным. Еще изображения можно найти → здесь ←).
Мой длинный вопрос
Как показано выше, цвет фона примерно синий, а цвет точек - черный. Если выбрать один черный пиксель и измерить его цвет в RGB, значение может быть (0, 44, 65) или
(14, 69, 89).... Поэтому мы не можем установить диапазон, чтобы сказать пиксель является частью черной точки или фона.
Я тестирую 10 изображений разных цветов, но надеюсь, что смогу найти метод обнаружения черных точек из более сложного фона, который может состоять из трех или более цветов, если человеческие глаза могут легко идентифицировать черные точки, Некоторые чрезвычайно маленькие или размытые точки можно опустить.
Предыдущая работа
В прошлом месяце я спросил аналогичный вопрос в stackoverflow, но не получил идеального решения, хотя некоторые отличные ответы. Узнайте больше о моей работе, если вы заинтересованы.
Вот методы, которые я пробовал:
-
Преобразование в оттенки серого или яркость изображения. Трудность заключается в том, что я не могу найти адаптивный порог для бинаризации. Очевидно, что превращение цветного изображения в оттенки серого или использование яркости (HSV) потеряет много полезной информации. Алгоритм Otsu, который вычисляет адаптивный порог, также не может работать.
-
Расчет гистограммы RGB. В моем последнем вопросе метод natan - оценить черный цвет по гистограмме. Это экономит время, но адаптивный порог также является проблемой.
-
Кластеризация. Я пробовал k-mean clustering и нашел его достаточно эффективным для фона, который имеет только один цвет. Недостаток (см. Мой собственный ответ) заключается в том, что мне нужно заранее установить количество центров кластеризации, но я не знаю, как это будет происходить. Что еще, это слишком [сильный] медленный! Мое приложение предназначено для захвата в реальном времени на iPhone, и теперь он может обрабатывать 7 ~ 8 кадров в секунду, используя k-средства (20 FPS хороши, я думаю).
Резюме
Я думаю, что не только похожие цвета, но и соседние пиксели должны быть "сгруппированы" или "объединены", чтобы извлечь черные точки. Пожалуйста, направляйте мне правильный способ решить мою проблему. Любые советы или алгоритмы будут оценены. Нет бесплатного обеда, но я надеюсь на лучший компромисс между ценой и точностью.