Как найти точку шарнира или ось вращения из вида сверху, используя обработку изображений? - PullRequest
3 голосов
/ 11 июля 2019

У меня есть проблема, когда мне нужно определить / предсказать координаты точки шарнира или оси вращения, используя обработку изображений. Изображение как показано ниже:

image enter image description here

Я использовал метод, в котором я начал с отслеживания кругового движения (по дуге) нескольких характерных точек в RoI вокруг координат шарнира по умолчанию (введенных вручную) в файле конфигурации. Это круговое движение этих отслеживаемых точек происходит вокруг вертикальной оси, которая проходит через точку шарнира. Теперь я отслеживал эти точки от их начального положения до тех пор, пока соединительный стержень не образовал определенный угол (15 ° / 20 °) с осью Y, я нарисовал секущие между этими разными позициями (начальное и конечное положения) одной и той же точки и нарисовал его перпендикулярная биссектриса, которая в идеале пройдет через центр (концентрических) кругов, что является идеальной точкой шарнира.

Eg:
y_intercepts calculated for each point
H0 (322, 42)                        
H1 (322, 64) (within tolerance, closest to GT)
H2 (322, 48)
H_avg (322,52)
H_groundtruth (x,y): (322, 61)

Нам нужна точность или допуск +/- 3 пикселя. Теперь проблемы, с которыми мы столкнулись в этом идеальном сценарии при практической работе над ним:

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

enter image description here

Ответы [ 2 ]

0 голосов
/ 21 июля 2019

Я предполагал, что это всего лишь комментарий, но он значительно превысил ограничение на число символов:

Проблема с точки зрения точности (извините, не устояла), по-видимому, заключается в том, что вы пытаетесь использовать метод плоской евклидовой геометрии для решения задачи проективной геометрии.

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

Ваша ось вращения шарнира также не является одним пикселем, если только оптическая ось вашей камеры не выровнена напрямую с осью шарнира. Если это не так (как показывает перспектива на добавленной вами фотографии), то ваша ось шарнира фактически является линией в пиксельном пространстве, а не точкой, и разные высоты для разных дорожек в пространстве модели будут «центрированы» вокруг разных пикселей в этой строке. Поэтому вопрос о точности «точки» шарнира в +/- 3 пикселя неясен, как и измерение углов в пиксельном пространстве в целом так, чтобы не учитывать перспективу.

Я упоминаю только эти детали, потому что вы, кажется, сосредоточены на точных измерениях. Часто такие виды 2D-приближений хороши для многих приложений, но высокая точность и точность с одной камеры (если это действительно то, что вам нужно) требует лучшего понимания 3D-сцены. (Или вы могли бы обучить глубокую сеть с кучей маркированных изображений истинной земли и позволить ей выяснить сопоставления.)

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

0 голосов
/ 17 июля 2019

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

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

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

Вот пример того, как сделать простую жесткуюпреобразование с помощью elastix.

Надеюсь, это поможет!

...