2013-03-19 4 views
4

Я только начинаю изучать OpenCV и оболочки EmguCV .NET для него и нуждаюсь в каком-то общем направлении от людей, которые понимают общую картину своих возможностей и, возможно, тех, кто занимался задачей, подобной той, Мне нужно выполнить.Частичное распознавание/классификация с OpenCV

У меня будет серия фотографий, и на каждом изображении появится объект или ничего. Объекты представляют собой металлические детали (болты) и будут укладываться на их стороне с длиной, параллельной верхней/нижней части изображения (то есть изображение берется сверху). Если есть объект, он будет одним из около 100 дискретных типов болтов, некоторые с очень похожими, но не идентичными функциями и размерами. Например, все они будут в основном прямоугольными в профиле, но будут различаться по длине и ширине (диаметру) и могут иметь головки, которые либо шестиугольные, либо круглые (которые будут видны в профиле как прямоугольные, так и в качестве второстепенного сегмента круга соответственно) или будут иметь конические головки для приложений с потайной головкой. Иллюстрация типов деталей я говорю о (это просто, чтобы показать типы деталей - мои изображения фотографий отдельных частей):

An Illustration http://donsnotes.com/home_garden/images/bolts-type.gif

мне нужно классифицировать их таким образом, что все размеры и типы дифференцированы. Болт 1-3/8 "должен классифицироваться как отличный от болта 1-1/2", даже если они имеют одинаковый диаметр и имеют один и тот же тип головки. Минимальная разница между размерами будет 1/8 ", а не стандартная 1/16".

Если это имеет значение, у меня есть хороший контроль следующее:

  • освещение (но резервное освещение не будет практичным)
  • Появление фона (полезно для вычитания фона, может быть ?)
  • расстояние от камеры до объекта (идентичные объекты будут всегда, как представляется, тот же размер в изображениях)
  • как правило, положение болта - это прокладки в горизонтальном положении на его сторона, параллельная верхним/нижним краям изображения рама. Я не могу контролировать, находится ли его голова слева или справа в изображении .

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

Я нашел довольно чистые края Canny на моих образцах изображений, но из-за освещения есть много шума внутри детали. Это делает поиск чистых сегментов линии Hough довольно пятнистым.

Я не уверен, что я должен попытаться просмотреть список возможных совпадений, используя абсолютные измерения, рассчитанные путем измерения по краям Canny, а затем использовать что-то более надежное, как каскадный классификатор ...? Или что.

Я действительно просто ищу чье-то мнение по общей стратегии или точкам в правильном направлении ...

Может кто-нибудь дать мне что-нибудь, чтобы начать пытаться? Я действительно в недоумении.

Спасибо!

+1

Хмм, это звучит как кошмарный проект разработки программного обеспечения 3 человека в месяц (или более), если это делается исключительно с помощью камеры. Вы не можете получить дополнительные сигналы? В наши дни шкала с цифровым считыванием является дешевой, и, вероятно, она значительно снизит пространство поиска. Я знаю, второй закон компьютерного зрения: «Нет проблем с компьютерным видением, которое невозможно решить с помощью достаточного количества аппаратного обеспечения» ;-) –

+0

Рассмотрите возможность добавления дополнительных функций, отличных от функций изображения, к «сорнякам», вне зависимости от того, какой экземпляр может/не может быть. Что-то, что приходит мне в голову, это вес. Но, как утверждают другие, вы являетесь экспертом в этом домене, поэтому вам нужно быть тем, кто придумывает отличительные черты высокого уровня. К сожалению, классификация чистого изображения будет очень сложной, если вы не сможете устранить большинство вышеупомянутых шумов изображения (например, освещение). – Porkbutts

+0

Спасибо, ребята, за ваши комментарии. Мне жаль, что я не могу взвесить их, но они находятся в [быстром] движении. Этого было достаточно, чтобы получить освещение и скорость затвора вправо. Остановка их для взвешивания не будет практичной, и я уверен, что я не могу позволить себе ничего, что могло бы надежно взвесить их в движении! –

ответ

2

Из моего опыта я предлагаю вам следующее. Вы знаете лучше, чем большинство из нас, как классифицировать вручную, не так ли? Поэтому подумайте, что происходит в вашем мозгу, пока вы классифицируете. Предположим, вы видите круговую форму сверху, так что теперь ваша проблема заключается в том, как идентифицировать эту фигуру? Выложите такие проблемы здесь, это будет намного легче для других людей. Выделение объектов - это не что иное, как мозг думает, когда вы видите этот объект.

Для этого вопроса я предлагаю вам сначала сохранить темный фон, чтобы стало необходимо бинаризовать это изображение. Затем, если его вид сверху, вы можете увидеть круг, шестиугольник и т. Д. Затем получите только ребра. Тогда получим минимальный ограничивающий круг и получим его диаметр. Алгоритм и код для поиска минимальной ограничивающей окружности можно получить here.

Что касается формы, я предлагаю вам взять градиент этого двоичного изображения, а затем рассчитать угол этого градиента только в точках края (которые вы получили в виде сверху). Гистограмма этих градиентов будет вашим вектор-функцией. См. График штрихов разной формы. Если ваш мозг может различать, тогда вы можете подумать о том, какой классификатор использовать. Я бы предпочел не комментировать это сейчас, поскольку это зависит от множества вещей, таких как распределение функций, их отделимость и, самое главное, потребность в скорости. Но не беспокойтесь о классификаторе.

Теперь давайте попробуем справиться с высотой. Я предполагаю, что вы можете получить вид спереди, а затем просто вычислить ограничивающий прямоугольник (вы можете получить это от regionprops функции в MATLAB).

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

P.S. +1 за хороший вопрос.

+1

Большое спасибо за ваш ответ. Сначала я буду работать с минимальным ограничивающим прямоугольником. Надеюсь, из этого я могу надежно определить длину детали. Если я затем обрезаю изображение в середине этого прямоугольника, я должен иметь дело только с частью болта и определить его ширину. В этот момент я на полпути - буду работать над более сложной проблемой классификации формы головы в последний раз.Надеюсь, что во время первой части у вас будет достаточно опыта, и у меня будет меньше вопросов при работе над головами. Еще раз спасибо! –

+0

дескриптор формы, о котором упоминалось выше, также имеет код с открытым исходным кодом. –

2

Ваша проблема - типичная задача распознавания образов. В вашем сценарии я бы использовал дескриптор формы, а затем использовал его для распознавания. Интересный подход описан в статье "Shape Matching and Object Recognition using Shape contexts".

Один из авторов Jitendra Malik - учитель интересного курса компьютерного зрения coursera, который я посещаю пару месяцев назад.

+0

Спасибо за это - это выглядит очень полезной бумагой, но много для моей головы. Я думаю, что это применит к части классификации головок болтов, что я делаю. Я очень ценю ваш ответ! –

Смежные вопросы