Обнаружение поверхности

9

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

введите описание изображения здесь

Вы видите, что это большая область серого цвета, и она четко отличается от остальных. Как вы можете сегментировать это, если эта область может иметь любой оттенок серого, и она должна работать в режиме реального времени.

Спасибо заранее.

Olivier_s_j
источник
Я вижу несколько серых областей, четко различимых. Не могли бы вы показать желаемый результат?
Доктор Велизарий
Мой желаемый результат - координаты верхнего правого и левого углов и координата левого нижнего угла среднего серого прямоугольника
Olivier_s_j
Можете ли вы рассказать нам что-нибудь еще об окружающей среде и потенциальной дисперсии изображений, которые вам нужно будет обработать? Будет ли цель всегда находиться ближе к середине изображения? Будут ли присутствовать другие серые прямоугольники, возможно, того же размера? Что, если они проявятся как один и тот же оттенок серого? Есть ли другие вещи, которые мы могли бы использовать, чтобы идентифицировать это? Будет ли он всегда иметь маленькую «Т» форму сверху?
Джастис
Привет, цель не всегда будет ближе к середине изображения. Цель всегда будет своего рода прямоугольником. (Это тоже может быть просто стена). Если есть несколько прямоугольников, они также должны быть обнаружены, но они должны быть большими. Небольшие участки могут быть отброшены. Если все они выглядят как один и тот же вид серого, все они должны быть обнаружены, но вероятность того, что это произойдет, очень мала. Единственное реальное свойство, которое можно обнаружить, это то, что поверхность будет иметь одинаковый серый цвет (более или менее) по всей поверхности и является прямоугольником. Каждый раз не будет маленького верха в форме
буквы

Ответы:

9

Вы получите разумную сегментацию серой области, используя алгоритм водораздела или разрезы графиков. Водораздел доступен в opencv, но сокращение графиков еще не сделано. (Кстати, это карта глубины от Kinect?)

навигационный
источник
1
Функция водораздела в opencv требует 8-битное 3-канальное изображение в качестве входных данных. Моя карта глубины - 8-битное 1 изображение. Есть идеи, как это решить?
Olivier_s_j
/ * получить свойства изображения / width = src-> width; высота = src-> высота; / создать новое изображение для версии в градациях серого * / IplImage * dst = cvCreateImage (cvSize (ширина, высота), IPL_DEPTH_8U, 1); cvCvtColor (src, dst, CV_RGB2GRAY);
Nav
Другой вопрос, я только что получил функцию водораздела, работающую в другом изображении (только пример из opencv). Но они начинаются с цветного изображения и двоичного изображения. У меня есть только 1 изображение ... изображение grascale. Есть идеи о том, какой должна быть маска (вторая входная переменная)?
Olivier_s_j
4

В Mathematica вы можете сделать что-то вроде:

Colorize[MorphologicalComponents[
  ColorNegate@
   Erosion[Dilation[
     DeleteSmallComponents[
      Erosion[Binarize[
        GradientFilter[
         ColorConvert[Import@"http://i.stack.imgur.com/XdnaW.png", 
          "RGB"], 2], .015], 1], 100], 2], 2]], 
 ColorFunction -> "ThermometerColors"]

введите описание изображения здесь

Возможно, вы сможете перевести этот код в любую библиотеку обработки изображений.

Доктор Велизарий
источник
Привет, выглядит мило. Но у меня нет математики. Но я предполагаю, что вы использовали пороговое значение, основанное на оттенках серого на этой фотографии? Может быть, вы могли бы дать немного информации с вашим кодом? Thx
Olivier_s_j
1
@Ojt Для каждой команды вы можете прочитать " reference.wolfram.com/mathematica/ref/xxx.html " для описания. Например, reference.wolfram.com/mathematica/ref/…
доктор Белизарий
Хорошо, я сделал, как вы предложили. Но, похоже, вы используете Binarize для порогового значения. Что не возможно в моем случае. Так как большие площади могут иметь разные оттенки серого. (Например, средняя поверхность может быть очень светлой). И тогда порог не сработает.
Olivier_s_j