[Computer Vision] Disparity Space Image(DSI)

SYiee·2023년 11월 9일
0

Computer Vision

목록 보기
10/11
post-thumbnail
post-custom-banner

수정필요

A Simple Stereo System

지난 시간의 issue들이 있었다.

  • corresponding point 찾는 것
  • visual pattern이 없는 것
  • 반사도가 크거나 uniform한 반사를 할 때 → 하얀 벽 같은 경우

✔ Stereo System

시점이 다른 우리는 두 개의 이미지가 있을 때 같은 부분이 어디있는지 찾고자 했다.

Matching using Epipolar Lines

왼쪽 사진과 오른쪽 사진에서 이제 같은 곳이 어디인지 찾아야 한다. 노란 선을 따라 즉 같은 행을 따라 쭉 가면서 비슷한 곳을 찾게 된다.

이 때 비슷한 곳을 만나면 Match Score Value가 아래 그래프처럼 커지는 부분을 만나게 된다. 그러면 이제 이곳이 두 이미지에서 같은 부분이 된다.

그런데 우리가 이렇게 전부를 full search를 하면 cost가 너무 크다. 그래서 constraint를 걸어서 동작했었다. 여기까지 이전 수업의 내용이었다.

각 픽셀(?)의 동일한 부분을 찾을 때 전부 independent한 task를 해야할까?

  1. 각각 결정

    → 모든 픽셀(?) 에 대해 수행해야 함으로 너무 cost가 크다

  2. 상호관계

    → 예를 들어 L(7, 10)이랑 R(9, 10)이 같다는 것을 찾았으면 이후에는 L(9, 10)을 별도의 계산 없이 R(11, 10) 과 같다고 판단하는 것이다.

    → 문제는 바운더리와 같은 특정 부분에서는 이게 적용이 안 될 수도 있다.

⇒ 따라서 global optimal한 무언가를 찾아서 이 task를 수행하게 된다. 그때 사용하는 방법은 2에 해당하는 같이 결정하는 방식이다.

✅ Disparity Space Image (DSI)

  • DSI에서 한 patch : (i,j)(i,j) 픽셀의 match score
  • if) 해상도가 100x100 이미지의 DSI를 구출할 때
    • DSI 크기 : 100x100

    • 그런 DSI가 100장 있는 것이다. 아래 사진에 해당하는 line 하나 당 한개씩 있는 것이다.

Disparity : Stereo 정합을 위한 두 이미지(left image, right image, 또는 왼쪽에서 보는 시야와 오른쪽에서 보는 시야를 말함)에서의 객체의 위치 상의 다른 차이.

첨부된 사진을 보면 Left와 Right가 뒤바뀐 것을 볼 수 있다.

✔ DSI는 Dissimilarity 이다.

→ 낮을 수록, 어두울 수록 좋은 값이다.

if) 7-9 matching이 되었다면 ⇒ 0값을 갖는다.

→ 대각선 방향으로 0이 나와야 한다.

✔ DSI 를 보고 **Base Line** 을 추정할 수 있을까?

→ 픽셀과 픽셀 사이의 물리적인 거리 size를 알면 추론이 가능하다.

💡 Base Line

스테레오 비전 시스템에서 두 개의 카메라 렌즈(또는 눈) 사이의 수평적인 거리

✔ DSI에서 대각선

  • 두 카메라 사이의 거리가 멀수록 선이 올라간다.

  • 선이 왜 끊길까?

    두 카메라 중 한 쪽에서는 안 보이는 상황(occlusion)에서 아래와 같은 jump가 발생한다.

    camera로부터 거리가 다 달라 disparity가 다르다. 이게 마치 base line을 다르게 한 것과 같은 효과를 준다.

  • base line이 조금 움직이면 disparity가 크다. 따라서 가장 가까이 있는 object는 123번 중에 1번이다.

  • 검정으로 뭉쳐 있는 부분은 왜 생길까?
    이 근처가 되게 비슷한 것이다. flat한 물체라고도 말할 수 있다.

      

✔ DSI를 통해 알 수 있는 것

  • base line
  • 물체 모양

Optimal Path Finding

optimal한 line을 찾고 싶다

→ DSI가 Dissimilarity라고 했으니 대각선을 다 이어서 값을 더했을 때 최소가 되는 것이 optimal line이라고 추정할 수 있다.

하지만 DSI를 전부 보는 것은 낭비이다.

  • diagonal 밑은 의미가 없으니 반은 버린다.
  • 오른쪽 상단도 좀 자르자. (using base line)

그러면 아래 그림과 같은 구간에서 찾게 된다.

✔ Lowest Cost Path

best path를 lowest cost로 찾고 싶다.

back방향으로는 갈 수 없음에 유의하자.

✔ Ordering Constraint

순서가바뀌네? 오른쪽처럼 D 가 너무 가까이 있으면 양쪽 카메라에서 봤을 때 순서가 다를 수도 있다. 이제 우리는 이런것을 다 고려하기 힘드니까 가까이 있는 것을 그냥 Noise로 처리하고 일단 뺀다.

✔ Dealing with Occlusions

몽미 잘 못들음

occlusion이 일어난 것은 빼고 matching 한다.

Search Over Correspondences

occlusion에서 발생하는 겂을 다 더해주지 않는다.

→ 대신 특정 값(score)를 더해준다.

→ 이때 score를 낮게 더해주면 ..?

Start를 보면 맨 왼쪽 모서리에서 시작한다. 그러나 실제론 그렇지 않느다. 조금 더 쉽게 하기 위해서 그렇게 보여주는 그림이다.

이때 대각선이 아니라 직선으로 표현된 부분들이 모두 occlusion된 부분이다.

모든 방향은 dissimilarity에 의해 아래 세가지 중 하나로 결정된다.

  • occluded from left : left img에서 보이고 right img에서 안 보이는 것
    → cost = constant value
  • occluded from right: right img에서 보이고 left img에서 안 보이는 것
    → cost = constant value
  • match : 두img에서 모두 보인다.
    → cost = dissimilarity score

optimal path를 찾기 위해 각 DSI값을 모두 더한다고 했다. 이 때 어떤 알고리즘을 사용할 수 있을까?

  1. Full Search

    성능이 좋지만 계산량이 너무 많다.

  2. Greedy Search

    계산량이 full search에 비해 작다. 그러나 운이 나쁘면 고기만 10번 먹을 수도 있다. 즉, global optimal path만을 찾다가 back(뒤돌아 갈 수) 없어서 엄청나게 큰 Big Jump를 해야 할 수 도 있다.

  3. Dynamic Programming

    모든 pixel의 가능성을 살핌.

profile
게임 개발자
post-custom-banner

0개의 댓글