10-6. 루카스-카나데 옵티컬플로우 & 10-7. 밀집 옵티컬 플로우

옵티컬 플로우(Optical Flow)

    연속하는 두 프레임(영상)에서 카메라 또는 객체의 움직임에 의해 나타나는 객체의 이동 정보 패턴

     Structure from Motion (모양 정보 판단), Video Compression, Video Stabilization (손떨림 보정) 등에 활용된다.

옵티컬 플로우 표현 방식 (출처: FastCampus)

    밝기 불변성(Brightness constancy constraint) 활용

     테일러 시리즈를 사용하여 함수 전개 후 2차 미분 이상 항들은 무시하면 1차 미분항이 0이 되야하기 때문에 미분항을 시간의 변화값으로 나누면 2개의 미지수를 갖는 방정식을 생성한다. 이는 이웃 픽셀은 같은 Flow를 가진다는 가정 하에 특정 픽셀 크기의 window 사용하면 N^2 방정식이 되므로 Least Squares method와 같은 방식으로 미지수를 찾을 수 있다.

밝기 불변성을 활용한 옵티컬 플로우 계산 방식 (출처: FastCampus)

    OpenCV에서 제공하는 두 가지 옵티컬 플로우 함수

     옵티컬 플로우 클래스 구성은 아래와 같다.

OpenCV 옵티컬 플로우 구성 방식 (출처: FastCampus)

  루카스-카나데 알고리즘 (Lucas-Kanade algorithm) 파네백 알고리즘 (Farneback's algorithm)
논문 링크 클릭 클릭
계산 법 주로 Sparse points에 대한 이동 벡터 계산하므로 특정 픽셀에서 옵티컬플로우 벡터 계산 Dense points에 대한 이동 벡터 계산하므로 모든 픽셀에서 옵티컬 플로우 벡터 계산
함수 cv2.calcOpticalFlowPyrLK(prevImg, nextImg, prevPts, nextPts, status, err, winSize, maxLevel, criteria, flags, minEigThreshold) -> nextPts, status, err cv2.calcOpticalFlowFarneback(prev, next, flow, pyr_scale, levels, winsize, iterations, poly_n, poly_sigma, flags) -> flow
함수 인자 prevImg, nextImg는 8-bit 이전 프레임과 현재 프레임 영상
prevPts는 (N,1,2) 크기, np.float32 타입의 np.ndarray 형태의 이전 프레임에서 추적할 점들
nextPts는 prevPts 점들이 이동한 현재 프레임 좌표 (출력)
status는 (N,1) 크기, np.uint8 타입의 np.ndarray 형태의 점들의 매칭 상태. i번째 원소가 1면 prevPts의 i번째 점이 nextPts의 i번째 점으로 이동했다는 의미
err는 (N,1) 크기, np.float32 타입의 np.ndarray 형태의 결과 오차 정보
winSize는 각 피라미드 레벨에서 검색할 윈도우 크기로 기본값은 (21,21)
maxLevel은 최대 피라미드 레벨로 0이면 사용 안 함으로 설정 되며 기본값은 3
criteria는 반복 알고리즘의 종료 기준
prev, nex는 그레이스케일의 이전과 현재 영상
flow는 (h,w,2) 크기, np.float32 타입의 np.ndarray 형태의 계산된 옵티컬 플로우 (출력)
pyr_scale는 피라미드 영상을 만들 때 축소 비율 (ex. 0.5 -> 반씩 줄여가며 피라미드 생성)
levels는 피라미드 영상 개수 (ex. 3)
winsize는 평균 윈도우 크기 (ex. 13~15)
iterations는 각 피라미드 레벨에서 알고리즘 반복 횟수 (ex. 10)
poly_n는 다항식 확장을 위한 이웃 픽셀의 크기로 보통 5 또는 7 사용
poly_sigma는 가우시안 표준 편차로 보통 poly_n=5이면 1.1, poly_n=7이면 1.5
flags에는 0, cv2.OPTFLOW_USE_INITAL_FLOW, cv2.OPTFLOW_FARNEBACK_GAUSSIAN이 존재

* 기본값이 없는 인자들이 많이 때문에 파라미터를 잘 선정해주어야한다.

동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.

동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.


인증 타임

오늘 배운 챕터는 강의에서 분리되어 있었지만 한 번에 보는게 나중에 편할거 같아서 합친 형태로 정리해 보았다. 

현재 여러 가지 객체의 판별과 그 객체 움직임을 판단하는 방법에 대하여 배우고 있는데 옵티컬 플로우는 처음 배우는 개념이라 매우 흥미로웠다. 수식까지만 봤을 때는 이해하기 힘들었는데 점과 선으로 나타낸 플로우 수행 결과를 보니 확실히 이해하기 쉬웠다.  

10-5. 공부 인증 영상
10-6. 공부 인증 영상


#패스트캠퍼스 #패캠챌린지 #직장인인강 #직장인자기계발 #패스트캠퍼스후기 #OpenCV를 활용한 컴퓨터비전과 딥러닝 올인원 패키지 Online

 

패스트캠퍼스(FastCampus) 강의 둘러보러 가기 

   

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.


 

+ Recent posts