2012-06-15 6 views
21

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

// opencv java example: 
Mat H = Calib3d.findHomography(src_points, dst_points, Calib3d.RANSAC, 10); 

Как вы можете определить, приемлема ли результирующая матрица гомосексуализма 3x3 или нет?

Я искал ответ на этот вопрос здесь, в Stackoverflow и в Google, и не смог его найти.

Я нашел эту статью, но это немного загадочным для меня:

"The geometric error for homographies"

+2

См. Вопрос http://stackoverflow.com/questions/10972438/detecting-garbage-homographies-from-findhomography-in-opencv/10981249#10981249 –

+0

Если ваше движение камеры ограничено, вы можете попытаться разложить свою гомографию и тестовую шкалу, параметры вращения и/или трансляции для резких значений. Другой метод. Если вы знаете (или принимаете ограничение), что большие части изображений должны пересекаться, вы можете вычислить перекрытие после деформирования и решить, может ли это быть явно ложной гомографией. Другой метод: если вы используете RANSAC, вы можете выбрать из числа более ранних (и/или соотношение inlier/total), следует ли отклонять гомографию) – Micka

+0

@ Мичка спасибо за вашу помощь, я уже использовал RANSAC, движение камеры не ограничиваясь, и я искал методы отбрасывать гомологии (главным образом математические), прежде чем переходить к более тяжелым вычислениям, таким как применение гомографии и проверка на совпадение. –

ответ

22

Лучший способ сказать, если гомография приемлемо будет.

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

//for one 3D point, this would be the projection 
px' = H * px; 
py' = H * py; 
pz' = H * pz; 

2- Вычислить euclidean distance между перепроецируется точками и реальными точками в изображении.

Reprojection error для одной точки. p - проецируемая точка, а q - действительная точка.

enter image description here

3- Установите Treshold, который решает, если ошибка перепроецирования является приемлемой.

Например, ошибка, превышающая один пиксель, неприемлема для многих приложений отслеживания.

+11

То, что вы предлагаете, относится к отслеживанию, когда вы знаете, что, вероятно, два изображения совместно используют патч в аналогичных местах. Когда вы вычисляете гомографию между двумя разными изображениями для проверки того, содержит ли одно изображение другое изображение, ошибка при воспроизведении вообще не полезна. Например, в моем случае я часто получаю, что многие (~ 30) точек из одного изображения отображаются на одну и ту же точку (или несколько, близкие точки) на втором изображении. Есть ли у вас какие-либо предложения по этому делу? –

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