2010-05-21 1 views
2

두 이미지를 함께 찍으려고합니다.
그렇게하기 위해이 C 구현을 사용하여 sift 기능을 추출하고 두 이미지에서 일치하는 항목을 찾습니다. cvWarpPerspective를 사용하여 뒤틀리는 이미지 일부 영역의 이미지가 보이기 쉬운 영역에서 벗어납니다.

http://web.engr.oregonstate.edu/~hess/index.html

그 후 I는 정합 점을 이용하여 호모 그래피 행렬을 알았다.

http://www.ics.forth.gr/~lourakis/homest/

하지만 "cvWarpPerspective"기능이 호모 그래피 행렬을 사용하는 경우, 이미지의 일부 부품은 가시 영역 (네거티브 corrdinates)에서 진행한다.

이것을 해결하기 위해 먼저 호모 그래피 매트릭스를 통해 이미지의 네 모퉁이를 파이핑하여 경계 상자를 계산하려고했습니다. 그리고 초기 이미지를 움직여서 뒤틀려 라. 그러나 이로 인해 뒤틀림 결과가 변경되었습니다.

이미지를 뒤틀어서 볼 수있는 영역에 유지할 수있는 방법이 있습니까?

어떤 도움을 주셔서 감사합니다. 미리 감사드립니다 ...

답변

0

나는 올바른 길을 가고 있다고 생각합니다. 이미지를 옮길 때 일어난 이미지 번역을 고려해야합니다.

가장자리를 기준으로 소스 이미지를 패딩하는 또 다른 방법입니다. 원근법이 얼마나 변화하는지에 따라 꽤 많이 덧 입어야 할 수도 있습니다. 또한, 패딩은 특징 매칭 및 워핑 매트릭스 전에 수행되어야한다. 분명히 더 큰 이미지를 사용하기 위해 계산의 측면에서 비용을 지불하게 될 것입니다.

1

연습 문제로 이전과 동일한 시도를했는데 같은 문제가 발생했습니다. 먼저 경계 상자를 계산하여 설명 했으므로 해결했습니다. 그런 다음 자체 워핑 함수를 작성했습니다. 뒤틀림은 매우 간단하지만, 혼자서 저울질을해야합니다. 어쨌든 좋은 결과를 얻기 위해서는 픽셀 단위의 가중치가 필요하므로 (다른 이미지의 여러 픽셀이 같은 출력 픽셀로 끝나기 때문에 혼합해야 할 필요가 있음) cvWarpPerspective를 포기하는 것이 좋지 않습니다.

0

편집 : 당신을 img1 및 IMG2 사이 호모 그래피를 발견 한 후

, 따라서 2 일에서 변형 행렬을 입수했습니다 :

이에 좀 더 많은 작업 후, 나는 몇 가지를 배웠습니다 cvWarpPerspective를 거의 실행할 준비가되었습니다.

먼저, img1을 덧씌우 기해야합니다. img1에 대한 경계 상자를 상당히 쉽게 얻을 수 있어야합니다. boundingBox-> width + img2-> width * 2, boundingBox-> height + img2-> height * 2 및 cvCopy img 1의 중간 크기로 새 img를 만듭니다.

지금 cvWarpPerspective를 시도하면 img1을 번역했기 때문에 변환이 꺼져 있습니다. 우리는이 번역을 설명하기 위해 또 다른 매트릭스를 만들어야합니다. img1을 합성 이미지의 중간에 놓은 경우, 왼쪽 위 모서리를 (img2 -> width, img2 -> height)에 놓습니다. 번역 행렬 = {1,0, img2-> width, 0,1, img2-> height, 0,0,0}을 만듭니다. 이제 cvMatMul (번역, 호모 그래피, 결과)를 사용하여 최종 변형 행렬을 얻으십시오.

이제 composite-> sized 이미지와 결과 행렬을 사용하여 cvWarpPerspective를 사용할 준비가되었습니다. 이미지 1을 왜곡하십시오.

바느질을 위해 수행해야 할 작업이 더 있지만 가시화 된 이미지가 보이는 영역을 벗어나는 문제가 해결됩니다. 바느질을 완료하려면 이미지 크기 2를 합성 크기의 이미지에 붙여넣고 왜곡 된 이미지에 마스크를 만든 다음 그 마스크를 사용하여 왜곡 된 이미지를 합성 이미지 2에 복사해야 좋은 모양의 이미지를 얻을 수 있습니다.

관련 문제