2012-04-21 3 views

ответ

4

Если у вас уже есть выпуклый корпус объекта, и этот корпус включает в себя угловые точки, то все, что вам нужно сделать, это упростить корпус, пока он не имеет только 6 точек.

Есть много способов, чтобы упростить многоугольники, например, вы могли бы просто использовать этот простой алгоритм, используемый в этом ответе: How to find corner coordinates of a rectangle in an image

do 
    for each point P on the convex hull: 
     measure its distance to the line AB _ 
     between the point A before P and the point B after P, 
    remove the point with the smallest distance 
repeat until 6 points left 

Если вы не знаете точное количество очков, то вы можете удалить точки пока минимальное расстояние не достигнет определенного порога

вы также можете сделать Ramer-Douglas-Peucker, чтобы упростить многоугольник, openCV уже реализован в cv::approxPolyDP.

Просто измените the openCV squares sample использовать 6 очков вместо 4

+0

Отлично! Я попробовал ваше предлагаемое решение, и он отлично работал! Я также рассмотрю алгоритм Рамера. –

+0

Алгоритм Рамера-Дугласа-Пьюкера имеет много применений. Рад, что HugoRune предложил это. Если вы возитесь с ним, убедитесь, например, эффект установки разных значений epsilon. Другим вариантом поиска хороших квадратных углов или нерегулярных углов является вычисление отношения расстояния между двумя точками вдоль контура и расстояния между этими двумя точками по фигуре. Для точек на прямой отношение равно 1: 1. – Rethunk

1

Вместо того, чтобы пытаться непосредственно определить, какие из характерных точек соответствуют углам, как о применении алгоритма к обнаружению угла на все изображение, то ищет, какие из характерных точек появляются близко к пикам в углу детектор?

Предлагаю начать с Harris corner detector. Реализация OpenCV - cv::cornerHarris.

По существу, алгоритм Харриса применяет к изображению как горизонтальный, так и вертикальный Sobel filter (или некоторое другое приближение частных производных изображения в направлениях x и y).

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

+0

Проблема в том, что я не получаю Харриса обнаружить углы на поворотах. Вот что я получаю: http://i.imgur.com/mqltv.png –

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