여러 2D 이미지에서 3D 모양을 재구성하려고합니다. 기본 행렬을 계산했지만 이제 어떻게해야할지 모르겠습니다.
스택 오버플로 및 학술 논문에서 여러 상충되는 답변을 찾고 있습니다. 예를 들어 여기 에서는 기본 행렬에서 회전 및 변환 행렬을 계산해야한다고 말합니다.
여기 에서 카메라 매트릭스를 찾아야한다고 말합니다.
여기 에서 동형을 찾아야한다고 말합니다.
여기 에 epipolar 라인을 찾아야한다고 말합니다.
무엇 이니?? (어떻게하면 되나요? H & Z 책을 읽었 는데 이해가 안 돼요. 9.14 결과에서 '직접 공식'을 '쉽게'사용할 수 있지만 결과 9.14는 이해하기 쉽지도, 직접 적이지도 않습니다.)
스택 오버플로는 코드를 원하므로 지금까지 내가 가진 내용은 다음과 같습니다.
# let's create some sample data
Wpts = np.array([[1, 1, 1, 1], # A Cube in world points
[1, 2, 1, 1],
[2, 1, 1, 1],
[2, 2, 1, 1],
[1, 1, 2, 1],
[1, 2, 2, 1],
[2, 1, 2, 1],
[2, 2, 2, 1]])
Cpts = np.array([[0, 4, 0, 1], #slightly up
[4, 0, 0, 1],
[-4, 0, 0, 1],
[0, -4, 0, 1]])
Cangles = np.array([[0, -1, 0], #slightly looking down
[-1, 0, 0],
[1, 0, 0],
[0,1,0]])
views = []
transforms = []
clen = len(Cpts)
for i in range(clen):
cangle = Cangles[i]
cpt = Cpts[i]
transform = cameraTransformMatrix(cangle, cpt)
transforms.append(transform)
newpts = np.dot(Wpts, transform.T)
view = cameraView(newpts)
views.append(view)
H = cv2.findFundamentalMat(views[0], views[1])[0]
## now what??? How do I recover the cube shape?
편집 : 나는 카메라 매개 변수를 모른다
처음에는 기본 매트릭스 노래를 들어요 ;).
Fundamental Matrix 는 2 개의 이미지 (x '-이미지 2, x-이미지 1)에서 포인트 대응 사이의 수학적 관계 만 보여줍니다. "즉, 모든 쌍의 해당 포인트에 대해 " (Wikipedia)가 유지 됩니다. 이는 또한 이상치 또는 잘못된 포인트 대응이있는 경우 기본 매트릭스의 품질에 직접적인 영향을 미친다는 것을 의미합니다.
또한 Trifocal Tensor라고하는 3 개의 이미지 간의 점 대응 관계에 대해서도 유사한 구조가 존재합니다 .
Fundamental Matrix의 속성만을 사용하는 3D 재구성 은 불가능합니다 . "에피 폴라 기하학은 두 뷰 사이의 본질적인 투영 기하학입니다. 장면 구조와 무관하며 카메라의 내부 매개 변수 및 상대 포즈에만 의존합니다." (HZ, p.239).
여러 이미지에서 모양을 재구성하는 방법에 대한 질문을 참조하면 이미지의 카메라 매트릭스 (K ', K)를 알아야합니다. 카메라 매트릭스는 카메라 초점 거리 또는 기본 거리 (fx, fy)와 광학 중심 또는 기본 포인트 (cx, cy)로 구성된 3x3 매트릭스입니다.
카메라 보정을 사용하여 카메라 매트릭스를 유도 할 수 있습니다.
카메라 매트릭스를 알고 있으면 Fundamental Matrix를 Essential Matrix E로 확장 할 수 있습니다.
기본 매트릭스가 이제 "보정"되었다고 매우 엉성하게 말할 수 있습니다.
Essential Matrix는 투영 재구성 까지만 첫 번째 이미지와 비교하여 두 번째 이미지의 회전 (회전 행렬 R) 및 변환 (벡터 t)을 얻는 데 사용할 수 있습니다 . t는 단위 벡터가됩니다. 이를 위해 OpenCV 기능 을 사용 decomposeEssentialMat
하거나 recoverPose
(cheirality 검사를 사용하는) HZ의 자세한 설명을 읽을 수 있습니다.
번역과 회전을 알면 이미지에 대한 투영 행렬을 만들 수 있습니다. 투영 행렬은로 정의됩니다 . 마지막으로 삼각 측량 ( triangulatePoints
)을 사용하여 이미지 포인트의 3D 좌표를 유도 할 수 있습니다 . 적절한 구성을 받으려면 후속 번들 조정을 사용하는 것이 좋습니다. openCV에는 sfm 모듈도 있습니다.
3D 재구성을 위해 동형이나 에피 폴라 라인 지식이 본질적으로 필요하지 않기 때문에 이러한 개념을 설명하지 않았습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다