Corner Detection & Optical Flow

인화·2026년 6월 17일

영상처리

목록 보기
4/9

Corner Detection

코너란?

코너는 단순히 모서리처럼 보이는 점이 아니라, 어떤 작은 패치(patch)를 상하좌우 어느 방향으로 움직여도 원래 패치와 많이 달라지는 위치를 의미한다. 연속된 프레임에서 같은 점을 다시 찾으려면, 그 점 주변의 작은 이미지 조각이 다른 위치와 잘 구분되어야 하는데, 이를 구분하기 위해 코너를 사용한다. 코너를 사용하면 추적 가능성이 높아진다. 왜냐하면 코너는 두 방향 모두에서 밝기 변화가 크기 때문에, 프레임이 바뀌어도 해당 점의 위치를 비교적 정확하게 다시 찾을 수 있기 때문이다. 반면, 평탄한 영역은 어디로 움직여도 비슷하게 보이고, 에지는 에지 방향으로 이동하면 변화가 작아 위치가 애매해질 수 있다. 따라서 코너는 영상 추적이나 Optical Flow에서 좋은 특징점으로 사용된다.

작은 패치를 (u,v)(u, v)만큼 이동시켰을 때 원래 패치와 이동된 패치의 차이는 다음과 같다.

E(u,v)=x,yW[I(x+u,y+v)I(x,y)]2E(u, v) = \sum_{x,y∈W} [ I(x + u, y + v) - I(x, y)]^2

평탄 영역(Flat Region), 에지(Edge), 코너(Corner)

  • 평탄 영역 : 주변이 거의 같은 밝기라서 어디로 이동해도 비슷해 보인다. → 평탄 영역은 픽셀 밝기 변화가 거의 없는 영역이다. 그래디언트의 크기가 거의 0이므로, 작은 패치를 조금 움직여도 차이를 느끼기 어렵다. 따라서 패치를 어느 방향으로 조금 이동해도 원래 패치와 거의 차이가 없다. 즉, x방향, y방향 어느 쪽으로 움직여도 변화가 작기 때문에 특징점으로 사용하기 어렵다. → E(u, v)가 거의 항상 작고, 어디로 움직여도 비슷하다.
  • 에지 영역 : 에지 방향을 따라 움직이면 변화가 거의 없어 위치가 모호하다. → 에지는 한 방향으로는 밝기 변화가 크지만, 변화 방향이 거의 하나로 정해져 있다. 에지를 따라가는 방향으로는 변화가 작기 때문이다. 에지와 평행한 방향으로 움직이면 패치가 비슷해 보여 위치가 모호하다. 예를 들어 세로 에지라면, 좌우로 이동하면 밝기가 크게 변하지만 위아래로 이동하면 비슷한 패치가 유지된다. 따라서 에지는 위치를 한 방향으로만 잘 구분할 수 있고, 에지 방향으로는 정확한 위치 추적이 어렵다. → 어떤 방향으로는 E(u, v)가 크고, 다른 한 방향으로는 E(u, v)가 작다. 다시 말해, 특정 방향으로 움직일 때만 E(u, v)가 작아 한 방향만 모호하다
  • 코너 영역 : 두 방향 이상으로 밝기 변화가 있으므로 이동 위치를 비교적 명확히 찾을 수 있다.
    → 코너는 서로 다른 두 방향 이상에서 밝기가 함께 변한다. 패치를 x방향으로 이동해도 달라지고, y방향으로 이동해도 달라진다. 따라서 코너는 위치가 명확하고, 이미지 매칭이나 추적에 좋은 특징점이 된다.
    
    → **대부분의 방향에서 E(u, v)가 커서 위치 구분이 잘 된다.**
    
    ![](https://velog.velcdn.com/images/inhwaaa_v/post/4ee422c6-7262-4aed-86ae-1c87d69f8932/image.png)
    S

코너 검출의 목표는 단순히 각진 모양을 찾는 것이 아니라, 두 방향 모두에서 밝기 변화가 충분히 큰 위치를 찾는 것이다.

Harris를 이해하기 위한 선형대수 기초

패치를 어떤 방향으로 움직였을 때 얼마나 달라지는지는 이동 방향 [u, v]와 구조 텐서 M을 이용해 계산할 수 있다.

  • u : 패치를 x방향으로 얼마나 움직였는가
  • v : 패치를 y방향으로 얼마나 움직였는가
  • E(u, v) : 만큼 움직였을 때 원래 패치와 얼마나 달라지는가
  • M : 주변 픽셀들의 밝기 변화 정보를 모아 놓은 2*2 행렬 → “이 위치가 어느 방향으로 잘 구분되는가”를 요약한 표
E(u,v)[uv]M[uv]E(u, v) ≈ \begin{bmatrix} u & v \end{bmatrix} M \begin{bmatrix} u \\ v \end{bmatrix}

Trace : 대각선 합으로 보는 전체 변화량

구조 텐서 M은 주변 패치의 밝기 변화 정보를 모아 둔 2×2 행렬이다. 이때, 대략적으로 a는 x방향 변화량, c는 y방향 변화량, b는 x, y 변화가 같이 나타나는 정도로 이해할 수 있다. Trace는 행렬의 대각선 성분을 더한 값으로 다음과 같이 정의할 수 있다. 즉, x방향 밝기 변화와 y방향 밝기 변화를 더한 값이다. 그래서 trace는 패치 안에서 전체적으로 밝기 변화가 얼마나 큰지를 나타낸다.

trace(M)=a+c=ΣwIx²+ΣwIy²trace(M) = a + c = ΣwIx² + ΣwIy²

하지만 trace만으로는 코너를 판단하기 어렵다. Trace는 전체 변화량만 보기 때문이다. 그래서 밝기 변화가 한 방향에만 몰려 있는지, 아니면 두 방향에 골고루 있는지는 잘 구분하지 못한다. 예를 들어 다음의 경우는 trace가 모두 비슷할 수 있다.

  • 에지 : 한 방향 변화는 매우 크고, 다른 방향 변화는 거의 없음
    (λ1,λ2)(20,0.2)(λ_1 , λ_2 ) ≈ (20, 0.2)
  • 코너 : 두 방향 변화가 모두 어느 정도 큼
    (λ1,λ2)(10,10)(λ_1 , λ_2 ) ≈ (10, 10)

따라서 trace는 밝기 변화가 전체적으로 있는지는 알려 주지만, 그 변화가 한 방향에만 몰려 있는지, 아니면 두 방향에 고르게 존재하는지는 충분히 알려 주지 못한다.

trace는 벌점 항, 전체 변화량에 대한 벌점이다. 특히 에지처럼 한 고유값만 매우 큰 경우에는 trace가 커지지만 determinant는 충분히 커지지 않는다. 그래서 Harris 응답이 음수가 되기 쉽다.

Determinant : 두 방향 정보가 함께 있는지 보는 값

Determinant는 2*2 행렬에서 다음과 같이 계산한다. 행렬식은 기하학적으로는 면적이 얼마나 유지되거나 커지는지와 관련된다. 어떤 행렬이 평면 위의 작은 정사각형을 납작한 선처럼 찌그러뜨리면 면적은 거의 0이 된다. 이때 determinant도 거의 0이다

det(M)=acb²det(M) = ac - b²

구조 텐서에서 이 의미는 매우 중요하다. 변화가 한 방향에만 있으면 정보가 거의 1차원이다. 이 경우 determinant가 작다. 서로 다른 두 방향에서 변화가 있으면 정보가 2차원으로 퍼진다. 이 경우 determinant가 커진다.

구조 텐서(Structure Tensor) : 이미지 패치 안에서 밝기 변화가 어느 방향으로 얼마나 강하게 일어나는지를 나타내는 행렬. 구조 텐서는 패치 내부의 gradient 정보를 모아서, 해당 영역이 평탄 영역인지, 에지인지, 코너인지를 판단하는 데 사용된다.

고유값으로 생각하면 determinant는 다음과 같고, 구조 텐서의 두 고유값 λ1, λ2는 서로 직교하는 두 주요 방향에서의 밝기 변화량을 의미한다. 이때, 둘 중 하나라도 작으면 곱도 작아지고, 두 값이 모두 크면 곱도 커진다. 즉, 두 고유값이 모두 크다는 것은 어느 방향으로 패치를 움직여도 밝기 변화가 크다는 뜻이므로 코너로 볼 수 있다.

det(M)=λ1λ2det(M) = \lambda_1 \lambda_2

이것이 코너 검출에서 determinant가 중요한 이유이다. 코너는 한 방향만 강한 점이 아니라, 두 방향에서 모두 구분 가능한 점이어야 한다.

determinant는 코너 후보를 강하게 만드는 항

Eigenvalue : 방향별 밝기 변화 강도

구조 텐서의 고유값은 “서로 직교하는 두 주요 방향에서 밝기 변화가 얼마나 강한가”를 나타낸다. 행렬 M에 어떤 방향 벡터 를 곱했을 때, 그 벡터의 방향은 그대로이고 길이만 바뀌는 경우가 있다.

Mq=λqMq = \lambda q

이때, q는 고유 벡터(특별한 방향) λ\lambda는 고유값(그 방향으로 얼마나 강하게 늘어나는가를 의미한다. 구조텐서에서는 이를 다음과 같이 해석한다. 여기서 중요한 점은 “고유값이 크다”는 말이 단순히 픽셀 값이 밝다는 뜻이 아니라는 것이다. 그 방향으로 조금 움직였을 때 패치 차이가 크게 변한다는 뜻이다.

  • λ1λ_1, λ2λ_2 모두 작다 → 평탄 영역
  • λ1λ_1은 크고 λ2λ_2는 작다 → 에지
  • λ1λ_1, λ2λ_2 모두 크다 → 코너

왜 Harris는 고유값을 직접 쓰지 않고 trace와 determinant를 쓸까?

Harris Corner Detector의 응답 함수는 다음과 같다. 여기서 보통 k는 0.04 근처 값을 많이 사용한다. k가 너무 작으면 에지를 코너처럼 남길 수 있고, 너무 크면 실제 코너도 약하게 평가될 수 있다.

R=det(M)ktrace(M)²R = det(M) - k · trace(M)²

이를 고유값으로 표현하면 다음과 같다.

R=λ1λ2k(λ1+λ2)²R = λ_1λ_2 - k(λ_1 + λ_2)²

이때, det(M)은 두 고유값의 곱이다. 두 고유값이 모두 클 때 determinant 값이 커진다. 즉, x방향과 y방향 모두에서 밝기 변화가 큰 경우에 큰 값을 가지므로 코너 후보를 강조하는 역할을 한다.

trace(M)은 두 고유값의 합이다. trace 항은 전체 gradient 크기를 나타내며, k · trace(M)² 형태로 빼주기 때문에 에지처럼 한쪽 방향 변화만 큰 경우를 억제하는 역할을 한다. 에지는 한 고유값은 크고 다른 고유값은 작기 때문에 determinant는 상대적으로 작지만 trace는 커질 수 있다. 따라서 trace 항을 빼면 에지의 응답값이 낮아진다.

Harris는 고유값을 직접 계산하지 않아도, trace, determinant 관계를 이용해서 두 방향 변화가 모두 큰 코너인지 판단할 수 있기 때문에 trace와 determinant를 사용한다. 이때, 좋은 코너는 trace가 어느 정도 크면서, determinant도 충분히 큰 위치다. trace만 크면에지일 수 있지만, determinant가 크려면 두 고유값이 모두 커야 하므로 코너일 가능성이 높다. ****

  • determinant 항 → 두 방향 변화가 모두 큰 코너를 강조
  • trace 항 → 전체 변화량. 한 방향 변화만 큰 에지를 억제

Harris Corner Detection

Harris와 Stephens가 제안한 Harris Corner Detector의 핵심은 패치를 조금 움직였을 때 밝기 변화가 모든 방향에서 큰 위치를 코너로 본다는 것이다. 이때, W는 작은 윈도우로, w(x, y)는 윈도우 내부 픽셀의 가중치이다. 일반적으로 중심 픽셀에 더 높은 가중치를 주기 위해 Gaussian 가중치를 사용할 수 있다.

E(u,v)=x,yWw(x,y)[I(x+u,y+v)I(x,y)]2E(u, v) = \sum_{x,y∈W} w(x, y) [ I(x + u, y + v) - I(x, y)]^2

위의 비용 함수는 패치를 (u, v)만큼 움직였을 때 얼마나 달라지는가를 측정한다. 그런데 모든 (u, v)에 대해 직접 이미지를 이동해 비교하면 계산량이 많아진다. 그래서 움직임이 아주 작다고 보고, 밝기 변화를 미분으로 근사한다. 그 결과는 다음의 행렬식으로 쓸 수 있고, 여기서 M은 구조 텐서 또는 second moment matrix라고 부른다. 즉, 구조 텐서는 주변 윈도우 안의 미분 정보를 모아서 이 위치가 어느 방향으로 얼마나 잘 구분되는지를 요약한 행렬이다. 또, 구조 텐서는 2*2의 대칭 행렬인데, 이런 대칭 행렬은 항상 서로 직교하는 두 방향의 고유 벡터와 그 방향에 대응하는 고유값을 가진다.

E(u,v)[uv]M[uv]E(u, v) ≈ \begin{bmatrix} u & v \end{bmatrix} M \begin{bmatrix} u \\ v \end{bmatrix}

이동 비용을 고유 벡터 방향으로 바라보면 다음처럼 단순해진다. 이때 α,β\alpha, \beta는 원래 x, y축이 아니라 구조 텐서가 찾아낸 두 주요 방향으로의 이동량이다.

E(u,v)λ1α2+λ2β2E(u, v) ≈ \lambda_1\alpha^2 + \lambda_2 \beta^2

Harris 알고리즘 절차

  1. 입력 영상을 grayscale로 변환한다.
  2. Sobel 등으로 Ix,IyI_x, I_y 를 계산한다.
  3. Ix2,Iy2,IxIyI_x^2, I_y^2, I_xI_y를 계산한다.
  4. 작은 윈도우 안에서 위 값들을 합산하거나 Gaussian smoothing한다.
  5. 각 픽셀에서 구조 텐서 M을 만들고 Harris 응답 R을 계산한다.
  6. 응답값이 큰 위치만 thresholding한다.
  7. 주변 픽셀보다 응답이 큰 지점만 남기는 non-maximum suppression을 적용한다

실제 응용에서는 보통 다음 처리가 추가된다.

  • Non-maximum suppression : 주변에서 가장 강한 응답만 남긴다.
  • Sub-pixel refinement : 정수 픽셀 단위보다 더 정밀한 위치로 보정한다.
    • 코너는 처음에는 정수 픽셀 위치로 검출된다. 하지만 카메라 보정, 정밀 측정, 추적 안정화에서는 정수 픽셀보다 더 정밀한 위치가 필요할 수 있다.
    • OpenCV의 cv.cornerSubPix() 는 초기 코너 위치를 주변 밝기 패턴을 이용해 sub-pixel 수준으로 보정한다. 하지만, 이는 “아무 점이나 더 정확한 코너로 바꿔주는 함수”가 아니다.
    • 초기 위치가 실제 코너 근처에 있어야 제대로 수렴한다. 초기 검출이 좋지 않거나, 윈도우 안에 충분한 구조가 없으면 보정 결과도 불안정할 수 있다.
  • ROI 제한 : 관심 영역 안에서만 코너를 찾는다.

Shi-Tomasi : Good Features to Track

Harris는 좋은 코너를 찾지만, 응답 함수가 k에 의존하고 thresholding과 후처리가 필요하다. Shi-Tomasi 방법은 구조 텐서의 고유값을 더 직접적으로 사용한다. Shi-Tomasi의 응답값은 다음과 같다.

RST=min(λ1,λ2)R_{ST} = min(\lambda_1, \lambda_2)

이는 두 고유값 중 더 작은 값을 기준으로 코너 여부를 판단한다. 두 방향 중 약한 방향의 밝기 변화도 충분히 커야 좋은 특징점으로 보는 것이다. 추적 관점에서는 매우 자연스러운 기준이다. Optical Flow 추적에서는 한 점이 두 방향 모두에서 안정적으로 구분되어야 한다. 만약 한 방향으로만 변화가 크고 다른 방향 변화가 작으면, 그 방향으로는 위치 변화가 모호해 움직임을 정확히 추정하기 어렵기 때문이다.

Shi-Tomasi는 두 고유값 중 작은 값이 충분히 큰 점만 선택하므로, x방향과 y방향 모두에서 밝기 변화가 큰 안정적인 특징점을 고를 수 있다. 이러한 이유에서 Shi-Tomasi Corner Detector가 Harris Detector보다 추적 초기점 선정에 적합하다.

cv.goodFeaturesToTrack() 은 강한 코너를 좌표 목록으로 반환한다. 주요 파라미터는 다음과 같다.

Good Features to Track이라는 이름은 단순히 “코너를 예쁘게 찾는다”는 뜻이 아니다. Lucas-Kanade 추적이 안정적으로 풀리려면 구조 텐서가 잘 조건화되어 있어야 하는데, 이 조건을 최소 고유값으로 판단한다는 점이 핵심이다.

goodFeaturesToTrack() 은 주변에서 가장 강한 코너를 선별하고, minDistance 보다 가까운 중복 코너를 제거한 좌표 목록을 반환한다. 그래서 추적 알고리즘의 초기점으로 바로 사용하기 좋다.

실무 파라미터 감각

  • 코너가 너무 많고 한 영역에 몰리면 minDistance 를 키운다.
  • 코너가 약한 텍스처까지 잡혀 불안정하면 qualityLevel 을 키운다.
  • 코너가 너무 적으면 qualityLevel 을 낮추거나 maxCorners 를 키운다.
  • 큰 물체의 안정적인 추적이 목적이면 minDistance 를 조금 크게 두는 편이 좋다.
  • 작은 구조를 세밀하게 추적해야 한다면 minDistance 를 줄이되, 노이즈에 주의한다.

Optical Flow

옵티컬 플로우는 연속된 두 프레임 사이에서 영상 내용이 어떻게 이동했는지를 나타내는 2차원 벡터장이다. 한 점이 첫 번째 프레임에서 (x,y)(x, y)에 있었고, 다음 프레임에서 (x+u,y+v)(x+u, y+v)로 이동했다면, 그 점의 optical flow는 다음 벡터다.

[uv]\begin{bmatrix} u \\ v \end{bmatrix}

옵티컬 플로우에는 두 종류가 자주 등장하며, 이번 장의 중심은 Shi-Tomasi로 좋은 점을 찾고, Lucas-Kanade로 그 점들을 추적하는 sparse optical flow다.

종류의미대표 함수
Sparse optical flow선택된 특징점 몇 개만 추적cv.calcOpticalFlowPyrLK()
Dense optical flow거의 모든 픽셀의 움직임 추정cv.calcOpticalFlowFarneback()

밝기 보존 가정과 Optical Flow Equation

옵티컬 플로우의 기본 가정은 같은 물체의 같은 지점은 짧은 시간 동안 밝기가 크게 변하지 않는다는 것이다. 예를 들어, 시간 t에서 (x, y)에 있던 점의 밝기와 시간 t+dt에서 이동한 위치의 밝기는 같다. 이렇게 점은 움직였지만 그 점 자체의 밝기는 그대로라고 가정하는 것이 옵티컬 플로우의 기본 가정이다.

I(x,y,t)=I(x+dx,y+dy,t+dt)I(x, y, t) = I(x + dx, y + dy, t + dt)

이 식에 대해 Taylor 전개하고 고차항을 무시한 뒤 양변을 dt로 나누면 다음과 같이 표현할 수 있다.

u=dxdtu = \frac{dx}{dt}
v=dydtv = \frac{dy}{dt}
Ixu+Iyv+It=0I_xu + I_yv + I_t = 0

하지만, Optical Flow Equation에서 미지수는 u, v 두 개이고 식은 하나 뿐이다. 따라서 한 픽셀만 보고는 움직임을 완전히 결정할 수 없다. 이 문제가 에지에서 특히 심하게 나타난다. 에지 위에서는 에지와 평행한 방향의 움직임이 잘 구분되지 않는다. 이를 aperture problem이라고 부른다.

Ixu+Iyv=ItI_xu + I_yv = -I_t

Lucas-Kanade 방법은 이 문제를 해결하기 위해 작은 윈도우 안의 픽셀들은 모두 같은 움직임 (u, v)를 가진다고 가정한다. 그러면 윈도우 안의 여러 픽셀이 각각 식을 하나씩 제공하므로, 여러 개의 식으로 두 미지수를 최소제곱 방식으로 풀 수 있다.

Lucas-Kanade Optical Flow

Lucas-Kanade Optical Flow는 한 픽셀만으로는 움직임을 계산할 수 없다는 문제를 해결하기 위해, 작은 윈도우 안의 픽셀들이 모두 같은 움직임을 가진다고 가정하는 방법이다. Optical Flow Equation은 한 픽셀마다 Ixu + Iyv = -It라는 식을 만들지만, 이 식 하나만으로는 미지수인 u, v 두 개를 모두 구할 수 없다. 따라서 Lucas-Kanade는 한 픽셀만 보지 않고, 주변 윈도우 안의 여러 픽셀을 함께 사용한다.

윈도우 안에 여러 픽셀이 있으면 각 픽셀마다 Optical Flow Equation이 하나씩 만들어진다. 이때 모든 픽셀이 같은 움직임 (u, v)를 가진다고 가정하면, 여러 개의 식을 이용해 두 개의 미지수 u, v를 구할 수 있다. 하지만 실제 영상에서는 노이즈, 조명 변화, 물체의 미세한 변형 등이 존재하기 때문에 모든 식을 완벽하게 만족하는 해가 존재하지 않을 수 있다. 그래서 Lucas-Kanade는 모든 식의 오차가 가장 작아지는 u, v를 최소제곱법으로 계산한다.

이 과정을 행렬로 표현하면 A[u v]^T = b 형태가 된다. 여기서 A는 윈도우 안 픽셀들의 x방향, y방향 밝기 변화량인 Ix, Iy를 모아 놓은 행렬이고, b는 시간에 따른 밝기 변화량 -It를 모아 놓은 벡터이다. 최소제곱 해는 (A^T A)^-1 A^T b 형태로 계산된다.

이때 A^T A는 Harris나 Shi-Tomasi Corner Detector에서 사용한 구조 텐서와 같은 형태를 가진다. 즉, Lucas-Kanade에서도 주변 패치의 밝기 변화가 두 방향 모두에서 충분히 커야 움직임을 안정적으로 계산할 수 있다. 평탄한 영역은 밝기 변화가 거의 없어서 움직임을 구하기 어렵고, 에지는 한 방향으로만 변화가 크기 때문에 에지와 평행한 방향의 움직임을 구분하기 어렵다. 반면 코너는 두 방향 모두에서 밝기 변화가 크기 때문에 u, v를 안정적으로 추정할 수 있다. 따라서 Lucas-Kanade Optical Flow에서는 Harris나 Shi-Tomasi로 검출한 코너점이 좋은 추적 초기점으로 사용된다.

하지만 기본 Lucas-Kanade 방법은 작은 움직임을 가정한다는 한계가 있다. 프레임 사이에서 물체가 크게 이동하면, 현재 위치 주변의 작은 윈도우만으로는 다음 프레임에서 같은 점을 찾기 어렵다. 이 문제를 해결하기 위해 이미지 피라미드를 사용한다. 이미지 피라미드는 원본 이미지를 여러 단계로 축소한 구조로, 낮은 해상도에서는 큰 움직임도 상대적으로 작게 보인다.

Pyramidal Lucas-Kanade 방식은 먼저 가장 낮은 해상도에서 대략적인 움직임을 추정한 뒤, 점점 높은 해상도로 올라가면서 위치를 세밀하게 보정한다. 낮은 해상도에서는 큰 움직임을 잡고, 높은 해상도에서는 정확한 위치를 조정하는 방식이다. 따라서 이미지 피라미드를 사용하면 기본 Lucas-Kanade보다 큰 움직임을 더 안정적으로 추적할 수 있다. OpenCV의 cv.calcOpticalFlowPyrLK()에서 maxLevel은 사용할 피라미드 단계 수를 조절하는 파라미터하며, maxLevel=0이면 원본 이미지만 사용하고, 값이 커질수록 더 많은 축소 이미지를 사용하여 큰 움직임에 대응할 수 있다. (예를 들어, maxLevel=2이면 원본 포함 3개 레벨을 사용한다.)

이미지 피라미드 방식은 원본 이미지를 여러 단계로 축소한다. 이렇게 하면 가장 작은 이미지에서는 큰 움직임도 상대적으로 작게 보이므로 거친 단계에서 이동을 먼저 추정하고, 점점 원본 해상도로 내려오며 보정할 수 있다.

Sparse Optical Flow와 Dense Optical Flow

  • Dense Optical Flow의 대표적인 예시인 Farneback 방법은 각 픽셀 주변을 다항식으로 근사하고, 두 프레임 사이의 변화를 이용해 픽셀 단위 flow를 추정한다. 결과는 (height, width, 2) 형태의 배열이며, 마지막 차원의 값은 각각 x방향 이동량과 y방향 이동량이다.
  • Dense flow는 직관적인 시각화에 좋지만, sparse LK보다 계산량이 크고 파라미터에 따라 결과가 많이 달라질 수 있다.

profile
얼렁뚱땅 바보 학부생...

0개의 댓글