Paper/3D vision

Massively Parallel Multiview Stereopsis by Surface Normal Diffusion

침닦는수건 2023. 11. 7. 20:17
반응형

내 맘대로 Introduction

이 논문 역시 꽤 오래된 2015년 논문인데 Patchmatch stereo의 multiview 버전이다. 핵심적인 아이디어는 patchmatch stereo와 완전히 동일하고 중간 중간 neighbor pixel을 정의하는 방법을 좀 더 넓은 범위를 효과적으로 보도록 변경한 것이 있다. patchmatch stereo의 아쉬운 부분이 multiview 특성 상 더 많은 시점 정보로 인해 보완되어 전체적인 성능은 많이 올라가 보인다. 

 

MVS의 기초와 같은 논문이어서 기록을 위해 정리하고자 한다.

 

메모하며 읽기



앞의 patchmatch stereo recap은 생략. 완전 동일하다. 전체 최적화 과정에서 사용하는 cost function을 가져온 것이라 그냥 똑같은 것.



cost function에 들어가는 Wp(neighbor 정의) 가 바뀌었다. 모든 pixel을 순차적으로 다루는 것이 아니라 그림 (a)처럼 격자 모양으로 red, black region을 나누어서 neighbor를 정의할 때 그림(b)처럼 정의했다. 

검정 pixel의 neighbor는 주위 빨강 pixel이 되는 구조다. 그리고 모양도 마름모꼴로 펼쳐 더 넓은 범위를 보도록 했다. 



이런 식으로 검정-빨강 번갈아면서 서로 업데이트하도록 디자인을 하면 실제로 성능 향상이 크다고 한다. 

cost function은 그대로 가져왔지만 RGB 대신 gray 를 사용했다는 것(multiview 니까 연산량을 줄이고 이미지 개수로 보상하겠다는 전략 같음)이다. 

(역시나 연산량 이야기하는데) 더 줄이기 위해선 그림2(c)처럼 neighbor 범위 내에서 sampling 개수를 줄여도 된다고 한다.

implementation detail인데 결국 Patchmatch cost function optimizer를 구현했다는 소리. 


이제 multiview로 확장하는데 기존에는 rectified image를 가정했기 때문에 epiploar geometry를 이용하는 것이 간단했는데 (같은 줄만 대상으로 하면 되니) 사실 multiview 에서는 그게 간단하지 않다. 매번 recitification하면서 사용하는 게 번잡하기 때문이다.

따라서 다시 scene space 즉 real scale 3d space를 사용했다. disparity가 아닌 distance를 다루고 disparity gradient가 아닌 normal을 다루는 식이다. 

scene space plane을 갖고 있으면 given camera pose를 이용해 homography를 계산할 수 있고 이를 이용해 correspondence를 찾아주는 식으로 구현했다. (지금 보면 당연한 이야기 같은..)


scene space plane을 초기화할 때 normal은 360도 공간 안에서 고르게 만들어 냈는데 그 수식은 (6)과 같다.

depth는 disparity 기준으로 uniform sampling했다. 가까운데가 많이, 먼데가 드물게 뽑히기 때문이다.




비교 대상으로 삼은 view selection은 heuristic하게 이미지 간 카메라 자세 차이가 너무 크지 않은 범위에서 random sampling했다.

그렇게 선별한 view에 대해서 cost를 계산해오면 N개가 얻어지는데 이 중 몇개는 occlusion 때문에 오염된 cost일 것이기 때문에 대충 cost가 낮은 순서대로 정렬해서 K개만 쓰는 식으로 완화했다.

cross check 같은 개념을 multiview로 확장한 것인데 reference view에서 얻어진 결과로 backprojection 해서 3d point를 얻은 뒤, 이 값들은 다른 시점으로 projection해서 비교하는 행위를 반복하는 것이다. 

다른 시점에 맺혔을 때 해당 시점이 원래 갖고 있떤 값과 차이가 threshold 밑일 때만 살아남는 식이다. 

이 행위는 reference view를 바꿔가면서 여러번 반복한다.
consistency check 시 사용하는 threshold를 어떻게 하느냐에 따라 복원 정확도와 복원 결과의 밀도가 서로 trade-off된다.
반응형