2013-02-08 1 views
1

opencv의 세미 전역 블록 매칭 작업을하고 있습니다. 사실 비용 집계를 계산하기 위해 모든 방향을 탐색해야하는 이유를 이해할 수 없습니다. 누구든지이 경로의 길이를 제한하려 했습니까 (주사선)?반 글로벌 블록 매칭

답변

4

비용 집계에는 여러 방향에서 검색하여 솔루션에 대한 전역 부드러움 제한 조건을 적용해야합니다. 이러한 제약 조건이 없으면 각 픽셀의 불일치가 이웃의 추정 된 불일치를 고려하지 않고 계산되며 결과는 대개 '노이즈'를 많이 포함하므로 일치 프로세스가 많은 오탐을 반환합니다.

관찰 된 서페이스가 매우 매끄럽다 고 가정하면 픽셀에 깊이를 할당하는 데 추가 비용을 설정하여 불일치 이동을 불리하게 할 수 있습니다. 느슨하게 말하자면, 이것은 깊이를 추정하고 몇 가지 가능한 일치가있을 때 인접한 픽셀의 깊이 추정치와 긴밀하게 일치하는 일치를 선택한다는 것을 의미합니다. 더 많은 방향으로 검색하면 비용 계산에서 고려하는 이웃의 수가 증가하고 일반적으로 증가합니다.

OpenCV는이 검색 경로의 길이를 줄이는 방법을 제공하지 않지만 알고리즘을 더 빠르게 방향의 일부를 비활성화하거나 8 대신 5 개의 경로 만 검색하거나 (이는 fullDP 인수를 false로 설정하여 수행) 또는 불일치 검색 범위를 줄임으로써 방향을 비활성화 할 수 있습니다.

+1

@shumi이 기능의 출처에 대해서는 잘 모릅니다. Block Matching 루틴에 의해 내부적으로 호출됩니까? C++ 문법에 대해 혼란 스럽습니까? 그렇다면 대답은 간단합니다 :'int diff_scale = c > diff_scale);'비트 시프트 (bithift)를 사용하고 있습니다. (http://en.wikipedia.org/wiki/Bitshift#Shifts_in_C.2C_C.2B.2B.2C_C. 23). 이것은 이미지 피라미드 또는 스케일링 팩터를 만드는 데 컴퓨터 비전에서 일반적으로 발생합니다. 이는 내가 여기서 상상하는 것입니다. –

+0

물론이게 뭔지는 알고 있습니다.)하지만 나는 누적 비용과 비트 시프트 사이의 관계를 보지 못하기 때문에 코드의이 부분에서 길을 잡지 못하는 것이 있다고 생각합니다. – shumi