Homography 매트릭스에서 카메라 포즈를 계산하는 방법은 무엇입니까?


13

보정 된 카메라를 하나만 사용한다고 가정 해 봅시다. 이 카메라에서 이미지 A와 B를 얻습니다. OpenCVfindHomography ()를 통해 계산 된 A와 B 사이의 호모 그래피를 알고 있습니다.

이미지 A의 포즈 (회전 행렬 R 및 변환 벡터 t)를 알고 있으며 이미지 B의 포즈가 필요합니다. 일단 그것을 얻으면 다음 이미지의 모든 추가 포즈를 계산할 수 있다고 가정합니다.

컴퓨팅 B의 포즈 구현을 알고 있습니까? 웹에서 여러 기사를 찾았지만 쉽게 구현할 수있는 솔루션을 찾을 수 없었습니다 ...


코드 사용 방법을 이해하고 있는지 잘 모르겠습니다. OpenCV를 사용하여 Homography를 검색하지만 알고리즘을 통해 해당 Homography를 보내면 항상 이것을 반환합니다. 카메라 포즈 [1, 0, 0, 0; 0, 1, 0, 0; 0, 0, 1, 0]
LeRoss

답변:


8

내 답변이 너무 늦어도 다른 사람들이 유용하다고 생각할 수 있습니다. Homography의 openCV Pose 코드가 있습니다. 이 유용한 웹 사이트 euclideanspace 에서 방법을 찾았습니다 .

void cameraPoseFromHomography(const Mat& H, Mat& pose)
{
    pose = Mat::eye(3, 4, CV_64FC1); //3x4 matrix
    float norm1 = (float)norm(H.col(0)); 
    float norm2 = (float)norm(H.col(1));
    float tnorm = (norm1 + norm2) / 2.0f;

    Mat v1 = H.col(0);
    Mat v2 = pose.col(0);

    cv::normalize(v1, v2); // Normalize the rotation

    v1 = H.col(1);
    v2 = pose.col(1);

    cv::normalize(v1, v2);

    v1 = pose.col(0);
    v2 = pose.col(1);

    Mat v3 = v1.cross(v2);  //Computes the cross-product of v1 and v2
    Mat c2 = pose.col(2);
    v3.copyTo(c2);      

    pose.col(3) = H.col(2) / tnorm; //vector t [R|t]
}

////


내 코드에서 함수를 사용했습니다.이 방법으로 계산 된 포즈 행렬은 항상 [1 0 0 0; 0 0 0; 0 0 0 0; 0 0 0]. 당신은 어떤 설명이 있습니까?
Muhammet Ali Asan 2016

A의 포즈를 사용하고 있습니까? 그것은 당신 만 입력 H를 사용하는 것 같다
Guig

이 방법은 알려진 포즈에서 직접 계산 된 호모 그래피 행렬을 사용하더라도 실제로 정확하지 않습니다. 그러나 추정 된 포즈에서 행렬을 가져 와서 반전시켜 원래 입력에 적용하는 반복 프로세스를 사용하여 결과를 개선 할 수 있습니다. 이 잔류 호모 그래피에서 포즈 매개 변수를 가져 와서 수렴 될 때까지 포즈 추정치를 업데이트하십시오.
나누기


0

Opencv 3.0 이상에서 구현 된 Homography 분해 방법을 사용할 수 있습니다

분해 단층 촬영 매트

  • Opencv의 함수는 가능한 회전, 카메라 법선 및 변환 행렬의 집합을 반환합니다.
  • 첫 번째 이미지를 캡처 할 때 카메라 표준을 카메라의 카메라 표준과 비교하여 올바른 설정을 선택해야
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.