Обнаружение пятна цвета на изображении - PullRequest
9 голосов
/ 24 января 2011

У меня есть изображение, которое является тепловой картой глубины, и я отфильтровал все, что находится дальше, чем первые 25% изображения.

Это выглядит примерно так: enter image description here

На изображении есть две цветные капли: одна - моя рука (с частью моего лица за ней), а другая - стол в левом нижнем углу. Как я могу найти изображение, чтобы найти эти капли? Я хотел бы иметь возможность нарисовать прямоугольник вокруг них, если это возможно.

Я также могу сделать это (игнорировать оттенки и фильтровать черный или белый): enter image description here

Ответы [ 5 ]

3 голосов
/ 24 января 2011

Выберите случайный пиксель в качестве начального пикселя. Это становится областью A. Повторно расширяйте A, пока A не станет больше. Это ваша область.

Способ расширения A заключается в поиске соседних пикселей в A, чтобы они имели цвет, аналогичный по меньшей мере одному соседнему пикселю в A.

То, что для вас означает «похожий цвет», несколько изменчиво. Если вы можете сделать ровно два цвета, как вы говорите в другом ответе, то «похожий» будет «равным». В противном случае «подобное» будет означать цвета, которые имеют значения RGB или еще много чего, где каждый компонент двух цветов находится в небольшом количестве друг друга (то есть 255, 128, 128 похож на 252, 125, 130).

Вы также можете ограничить выбранные пиксели, чтобы они были похожи на начальный пиксель, но это работает лучше, когда человек выбирает начальное число. (Я считаю, что это то, что делается в Photoshop, например.)

Это может быть лучше, чем обнаружение кромок, поскольку вы можете работать с градиентами, не отфильтровывая их из-за отсутствия, и вам не нужно обрабатывать полученные обнаруженные кромки в согласованную область. Недостатком является то, что градиент может пройти весь путь от черного до белого, и он будет регистрироваться как одна и та же область, но это может быть тем, что вы хотите. Кроме того, вы должны быть осторожны с реализацией, иначе она будет слишком медленной.

2 голосов
/ 24 января 2011

Это может быть излишним для того, что вам нужно, но есть отличная оболочка для C # для библиотек OpenCV.

Я успешно использовал OpenCV в C ++ для обнаружения блобов, так что вы можете найти его полезным для того, что вы пытаетесь сделать.

http://www.emgu.com/wiki/index.php/Main_Page

и вики-страница на OpenCV:

http://en.wikipedia.org/wiki/OpenCV

Отредактировано, чтобы добавить: Вот библиотека обнаружения капли для Emgu в C #. Есть даже несколько приятных особенностей упорядочения капель по убыванию (полезно для фильтрации шума).

http://www.emgu.com/forum/viewtopic.php?f=3&t=205

Редактировать еще раз:

Если Emgu слишком тяжелый, Aforge.NET также включает некоторые методы обнаружения BLOB-объектов

http://www.aforgenet.com/framework/

2 голосов
/ 24 января 2011

Если на самом деле изображение имеет только два или более различных цвета (очень небольшое размытие между цветами), это простой случай для алгоритма распознавания краев .

1 голос
/ 20 ноября 2017

Обнаружение объекта по изображению на основе цвета объекта с помощью C #.

Чтобы обнаружить объект по цвету, существует простой алгоритм для этого.Вы должны выбрать метод фильтрации.Обычно это следующие шаги:

  1. Взять изображение
  2. Применить фильтрацию
  3. Применить оттенки серого
  4. Вычесть фон и получить свои объекты
  5. Найти положение всех объектов
  6. Отметить объекты

Сначала вам нужно выбрать метод фильтрации, для C # предусмотрено множество методов фильтрации.В основном я предпочитаю фильтры AForge, для этого у них немного фильтров:

  1. ColorFiltering
  2. ChannelFiltering
  3. HSLFiltering
  4. YCbCrFiltering
  5. EuclideanColorFiltering

Мой любимый - EuclideanColorFiltering.Это легко и просто.Для получения информации о других фильтрах вы можете посетить ссылку ниже.Вы должны скачать AForge dll, чтобы применить их в своем коде.Более подробную информацию о точных шагах можно найти здесь: Ссылка

1 голос
/ 24 января 2011

Вы можете использовать что-то вроде примера кода из этого вопроса: найти цвет на изображении в c #

Это поможет вам найти х / у определенных цветов на вашем изображении. Тогда вы можете использовать min x / max x и min y / max y, чтобы нарисовать ваши прямоугольники.

...