4

모션 응용 프로그램의 구조체에서 작업 중이며 객체의 까다로운 구조를 결정하기 위해 객체에 배치 된 여러 마커를 추적하고 있습니다.모션 최적화/번들 조정에서 구조체에 누락 된 데이터를 처리하는 방법

이 앱은 기본적으로 여러 카메라보기에서 표준 Levenberg-Marquardt 최적화를 사용하고 각보기에서 2D로 얻은 예상 마커 점과 마커 점 간의 차이를 최소화합니다. 각 마커 포인트

각각은 다음 함수 최소화 볼 :

calculatedXY 값은 최적화를 통해 발견 될 필요 observedXY 됨 마커 점 위치 알려지지 않은 파라미터들의 수에 따라
double diff = calculatedXY[index] - observedXY[index] 

2D. 전체적으로 나는 (마커 포인트 * 뷰) 위와 같은 함수의 수를 최소화하려고합니다.

카메라의 모든 마커 점을 시뮬레이션 한 코드를 작성했지만 조명, 오 클루 전 또는 카메라보기에 있지 않아 점 실행 중에 표시되지 않는 경우를 처리하는 방법이 궁금합니다. 앱의 실제 실행에서 웹캠을 사용하여 개체를 볼 수 있으므로 모든 마커가 한 번에 표시되지 않을 수 있으며 내 컴퓨터 시각 알고리즘이 얼마나 강력한 지에 따라 검색 할 수 없을 수도 있습니다. 항상 마커.

마커 지점을 볼 수없는 경우 diff 값을 0 (σ 제곱 차이 = 0)으로 설정한다고 생각했지만 결과가 왜곡 될 수 있습니까?

또 다른 주목할 점은 알고리즘이 너무 많은 뷰를 제공 할 때 그다지 좋지 않다는 점입니다. 너무 많은 견해가 제시 될 때 나쁜 해결책을 추정 할 가능성이 더 큽니다. 너무 많은 뷰가있을 때 로컬 최소값에 도달 할 확률이 높아지기 때문에 번들 조정에 공통적 인 문제입니까?

답변

1

누락 된 마커에 해당하는 용어를 그냥 두는 것이 일반적입니다. 예. 어떤 observedXY 용어가없는 경우 calculateXY-observedXY을 최소화하려고 시도하지 마십시오. 아무 것도 0으로 설정할 필요가 없습니다. 처음에는이 용어를 고려하지 않아도됩니다. 건너 뛰기 만하면됩니다 (또는 코드에서 오류를 0으로 설정하는 것과 같습니다).

간단히 많은 수의 관측치를 던지면 번들 조정이 실패 할 수 있습니다. 먼저 몇 가지보기로 해결 한 다음 점차적으로 추가하여 솔루션을 점차적으로 구축하십시오.

'강력한'접근 방식을 시도해 볼 수 있습니다. 최소 제곱을 사용하는 대신 "손실 함수"1을 사용하십시오. 이것들은 올바르지 않은 관측치가 소수 존재하더라도 최적화가 생존 할 수있게합니다. Levenberg-Marquardt 프레임 워크에서이 작업을 수행 할 수 있습니다. 손실 함수의 파생물을 Jacobian에 통합하면됩니다.

관련 문제