2012-06-15 4 views
21

OpenCV의 findHomography 기능을 사용하여 서로 다른 이미지에서 두 세트의 점 사이의 동질성을 추정 할 때 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 수 (및/또는 비율 inlier/total)로부터 결정할 수 있습니다. – Micka

+0

@Micka, 귀하의 도움에 감사드립니다. 이미 RANSAC을 사용하고 있었고, 카메라 움직임은 제한적이지 않고 homography를 적용하고 중첩 여부를 확인하는 것과 같은 무거운 계산으로 들어가기 전에 동역학 (주로 수학)을 버리는 방법을 찾고있었습니다. –

답변

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 수립

.

예를 들어, 1 픽셀보다 큰 오차는 많은 추적 응용 프로그램에서 허용되지 않습니다.

+11

비슷한 위치에 두 이미지가 패치를 공유하고 있음을 알았을 때 추적이 유효하다는 것이 좋습니다. 하나의 이미지에 다른 이미지가 포함되어 있는지 확인하기 위해 두 개의 다른 이미지 사이의 동질성을 계산할 때 재 투영 오류는 전혀 유용하지 않습니다. 예를 들어, 제 경우에는 종종 한 이미지의 많은 (~ 30) 점이 두 번째 이미지의 같은 지점 (또는 거의없는 점)에 매핑됩니다. 이 사건에 대한 제안이 있습니까? –

관련 문제