Fast moving object detection with non-stationary background 논문 요약
개발 일지 2019. 12. 13. 03:57 |- abstract
빠르게 움직이는 객체를 탐지->using optical flow clustering & Delaunary triangulation
1. 먼저 corner feature point를 Harris corner detector를 사용해서 추출한 뒤 그 점들로부터 optical flow vector를 계산.
2. 옵티컬플로우 벡터를 K-means clustering을 사용하여 클러스터링한 뒤, RANSAC으로 outlier를 제거
3. 옵티컬플로우의 흩어진 정도를 보고 카메라움직임 or 객체움직임 중에 분류한다.
4. multi-resolution block-based motion propagation으로 카메라 움직임을 보완하고, background subtraction으로 object detection
5. Delaunary triangulation을 사용하여 separately detected objects를 합쳐준다.
-Introduction
움직이는 카메라에서 객체를 탐지하려면 우선 다양한 모션들 중 카메라의 모션과 객체의 모션을 구분해야한다.
그러기 위해서는 세가지 접근방법이 있다.
첫번째, ego-motion estimation으로 카메라의 움직임을 보완한다. 두 프레임 사이에서 corner point와 epipolar geometry(https://darkpgmr.tistory.com/83 참고) 를 계산하여 이미지의 관계를 나타낸다. 그러나 이 방법은 카메라의 이동이 적은 경우만 다룰 수 있고 백그라운드가 한 통계적모델에 의해 잘 표현된다는 가정이 있어야한다.
두번째, input sequence의 multiple motion을 나누는 방법이다. 그러나 이 방법은 단지 모션을 분류하고 그것을 움직이는 물체의 모션임을 골라내는 추가적인 알고리즘이 필요하다.
세번째는 카메라와 객체의 움직임을 '그래프 컷 알고리즘'을 사용해서 나누는 것이다. 이 방법은 정확도가 높지만 계산이 오래걸린다.
-> 따라서 성능도 높고 빠른 방법을 제시함.
이 방법은 이러한 특징들이 있다.
1. 성능이 높음->Delaunary triangulation으로 잘못 분리된 요소를 합칠 수 있다(?)
2. real time app으로 쓸수있을정도로 빠르다-> 오직 연속된 두 프레임만 사용하고 배경에 평면 가정(planar assumption)을 쓰지 않기 때문
아래 부터는 한 단계씩 자세한 설명이 있음.
<Motion estimation>
corner feature points를 찾기위해 Harris corner detector를 사용함.
그 이유는 이 디텍터는 회전, 이동, 확장, 조명변화나 노이즈 등에 강하기 때문임.(이 요소들은 모션추정에서 중요한 요소들임)
harris corner detector 설명은 https://darkpgmr.tistory.com/131 참고
또한, 그 코너점들로부터 motion vector를 계산하기 위해 pyramidal Lucas-kanade method를 사용함.(두 이미지 프레임 사이에 상응하는 점 찾는 알고리즘)
Lucas kanade는 두가지 방법으로 모션벡터를 찾는다.
1. image pyramid 생성
이미지 피라미드란, 어떤 이미지 입력 I를 단계적으로 축소시켜서 일련의 축소된 이미지를 생성하는데 이때 이 집합을 이미지 피라미드라고 한다.
따라서 제일 낮은 층이 raw image이고 제일 고해상도이다. 그러니까 올라갈수록 해상도가 떨어지는 것이다.
루카스 카나데에서는 연속된 두 프레임이 각각 피라미드를 만들고 거기서 2~4층의 이미지를 사용했다고 한다.
(피라미드를 쓰는 이유는, 윈도우보다 큰 움직임이 발생한 경우 또한 잡아내기 위해서라고 한다)
2. 이미지 피라미드에 있는 두 프레임들 사이의 상응하는 점을 찾으면 된다.
알고리즘을 한줄로 요약하자면,
t번째 이미지 I_t(x,y)의 feature point (u_x, u_y)에 상응하는 (v_x, v_y)를 t+1번째 이미지 I_t+1(x,y)에서 찾는다. 이 과정을 I_t(x,y)의 모든 특징점에 대해서 반복함.
+) 루카스 카나데 추가설명(내가 추가함)
LK 알고리즘의 3가지 가정
-밝기 향상성: 어떤 객체상의 픽셀은 프레임이 바뀌어도 그 값이 변하지 않는다.
-시간 지속성: 영상에서 객체의 움직임에 비하여 시간의 변화가 더 빠르게 진행되며, 이는 연속된 프레임 사이에서 객체의 이동량이 많지 않음을 의미함.
-공간 일관성: 공간적으로 서로 인접하는 점들은 동일한 객체에 속할 가능성이 높고, 동일한 움직임을 갖는다.
Opencv -> cvCalcOpticalFlowPyrLK() : 피라미드 LK 코드
<Motion Clustering>
feature points를 optical flow vector의 direction θ와 길이 L을 이용해서 클러스터링한다.
즉 특징점들을 (L, θ) 좌표계 상에 나타낸다고 보면 된다.(변환법은 논문참고)
클러스터링에서 초기점(initial points for clustering)의 위치와 개수가 매우 중요하고 block-based k-means clustering을 사용했다고 한다.
block-based k-means 의 방법은 다음과 같다.
1. optical flow coordinate division
먼저 (L, θ) 좌표를 블락으로 나눈다. 여기서는 블락의 높이(이자 θ값)=30, 블락의 너비(이자 L)=1 로 지정함.
2. 생성된 블락으로부터 initial points들을 고르고 모든 feature points를 클러스터한다.
=>각 블락안에 있는 특징점들의 개수를 구한 뒤, 그 값을 기준으로 정렬한다.
그리고 최대값을 가진 블락에서부터의 합이 총 특징점 개수의 70% 이상이 될때까지 initial block을 고른다.
그리고 initial point와 가장가까운 점에 각 feature point를 할당함으로써 최종적인 motion cluster를 얻는다.
(이 부분 설명 잘 모르겠음.)
outlier제거를 위해서는 RANSAC 알고리즘을 사용한다.
(설명 https://darkpgmr.tistory.com/61 참고)
이는 세가지 단계로 이루어진다
1. model generation
먼저 2차원 가우시안 모델을 각 모션 클러스터마다 생성한다. 이때 무작위로 샘플 몇개를 뽑아서 consensus data를 세팅하고 그것을 이용하여 파라미터를 추정한다.
2. consensus data(일관된 데이터) update
그리고 추정한 모델을 가지고 consensus data를 업데이트한다. 모델로부터의 거리가 임계값보다 작은 점들은 consensus data에 추가한다.
3. best model selection
consensus data의 개수가 임계값보다 큰 모델을 best model로 고른다. 이전모델과 현재모델을 계속 반복 비교하면서 가장 consensus data개수가 많은 모델을 고르게된다.
<Motion classification>
이제 모션 클러스터들 중 객체인지 카메라의 움직임인지를 골라야된다. 카메라의 모션클러스터를 알면 카메라 모션 모델을 추정하고, 이를 사용해서 객체가 움직이는 범위를 찾아낼 수 있다.
배경의 corner point가 움직이는 객체의 corner point보다 더 흩어져 있을 것이다.
즉, original image 좌표평면(x,y)에서 배경은 움직이는 객체보다 더 큰 공간을 차지하고 있을 것이다.
흩어진 정도를 측정하는 방법으로는 여러가지가 있다.
첫째, Range(R) 사용. 두 점 사이의 가장 큰 거리를 구하는 것. 제일 심플하지만 distribtuion의 특성을 설명할 수 없음
둘째, Mean Absolute Deviation(MAD) 평균절대편차 사용: distribution의 중심점을 정의하고 중심점과 각 데이터점들 사이의 거리의 평균값을 계산. 이 방법은 또 예외적인 케이스가 있어서 안됨.
셋째, Standart Deviation 표준편차 사용
넷째, hyperellipsoid의 부피를 사용.-> 이 방법을 채택
hyper ellipsoid는 초기하 타원이라고 한다.
관련 이론은 여기를 참고하면 더 좋을 것 같다. http://wanochoi.com/lecture/PCA.pdf
covariance matrix와 Mahalanobis distance(얼마나 이상한 값인지를 수치화)를 사용하여, hyperellipsoid의 부피를 계산한다.
부피가 클 수록 더 넓게 퍼져있다고 여긴다.
이 논문에서 모든 경우에 대해서 분류 정확도를 측정했는데 이 방법이 제일 정확했다고 한다.
<Motion classification>
카메라 모션 클러스터 : 임계값보다 큰 특징점을 가진 클러스터 중 maximum value of scatteredness를 가진 클러스터
moving object cluster : hyperellipsoids의 평균 부피와의 상대적인 비율을 사용한 임계값보다 큰 특징점을 가진 클러스터
<Moving object detection>
-Moving object border detection
일반적인 camera motion compensation model을 사용할 수 없는게, 카메라와 백그라운드 컴포넌트 사이의 거리가 다르기 때문이다.
따라서 이 논문에서는 MRMP(multi-resolutional motion propagation)을 제안하였다.
이미지를 MxN blocks로 나누고 백그라운드 특징점 x_back을 모은다.
여기서 각 block의 카메라 모션을 추정하기 위해 perspective model을 사용했는데, 이것은 두 연속 프레임 사이의 pan/tilt/zoom effect를 다루는 모델이다.
파라미터가 없는 빈 박스에서 조금씩 크기를 늘려가다가 파라미터가 있는 박스가 되면 parameter forward propagation이 된다.
camera motion compensation은 예측된 모션 모델 파라미터를 사용해서 각 블락에서 행해진다.(backward propagation)
(이부분은 설명하기 어려워서 논문 읽는 거 추천)
그 후에는 frame difference(FD)로 moving object detection을 한다.
두 이미지를 그레이스케일로 바꾸고 각 픽셀의 difference의 절대값을 계산한다. 만약 그 값이 임계값보다 크면, 움직이는 객체의 픽셀이라고 여긴다.
이 방법은 객체 안쪽의 픽셀의 색깔정보가 비슷할때, 움직이는 객체 region과 정확한 바운더리를 탐지하지 못한다.
이러한 경우에 물체의 앞과 뒷 region만 디텍션하게 된다. ( 두 프레임 사이에서 이부분의 색깔정보은 차이가 있기 때문)
이것을 극복하기 위해서 Delaunay Triangulation 방법을 FD와 함께 썼다.
DT는 moving object cluster의 픽셀을 사용해 whole region of the moving object를 나누고,
FD는 region의 boundary shape을 다듬는다.
- Moving object interior detection
DT는 특정 영역이나 객체를 기술하는 방법이다.
인접한 삼각형들은 주어진 점들에 의해 생성되고, 그 삼각형으로 객체의 rough shape을 나타낼 수 있다.
Empty circum-circle property = 어떤 삼각형의 외접원도 그 삼각형의 세 꼭지점을 제외한 다른 어떤 점도 포함하지 않는다.
DT는 삼각형의 내각의 최소값이 최대가 되도록 분할한다.
여기서 제안할 moving object detection은 세가지 방법으로 이루어져있다.
1. inner-outlier rejection
- motion classification에서, 여러개의 클러스터로부터 카메라 모션 클러스터(=outlier object points)를 고른다.
- 남아있는 점들 중에서 inner-outlier object points를 제외(reject)하므로써 inner-inlier object points를 고른다.
- scatteredness가 카메라 모션 클러스터의 scatteredness와 비슷하면, 움직이는 물체가 아니라 여김
- inner-outlier object region(false detected region)을 제외(reject)
2. randomized incremental DT
초기 DT를 만들고, 블락사이즈의 두배보다 큰 변을 가진 삼각형을 제외(reject)
3. final object region detection
DT로 구한 삼각형들로 채워진 R_dt와 inlier object region R_fd를 합친다.
(이부분은 이론이 너무 어려워서..논문 설명으로 충분하지 않을거같아요)
- 실험
무빙카메라로 촬영한 자동차, 사람, 손 이미지
손으로 들고 찍거나 mobile robot위에 달려있는 카메라로 찍은 풍경 등을 사용.
MC / DT / MC와 DT를 합친 것 중에 MC의 결과가 안좋고, 합친게 제일 결과가 좋았다.
또, DT에서 쓰이는 블락 사이즈에 따른 결과를 보았는데, 10x10 정사각형 블락의 결과가 제일 좋았다.
한계점:
전경보다 배경이 차지한 비율이 더 커야되고, 배경 feature poirnt는 이미지 좌표에서 잘 퍼져있어야된다는 가정에서 벗어나지 못한다.
smooth plane background에서, 특징점은 추출이 잘 안되고 모션또한 잘 탐지가 안되었다고 한다.
'개발 일지' 카테고리의 다른 글
[Trash Detection] Tracking Algorithm (0) | 2019.11.06 |
---|---|
[Trash Detection] 쓰레기 인식 설계 (0) | 2019.11.05 |
[Trash Detection] 쓰레기의 움직임을 이용한 쓰레기 인식 (0) | 2019.10.20 |
Trash detection by Blob detection (0) | 2019.10.14 |
[Vehicle Detection] 알고리즘별 성능 비교 (0) | 2019.10.06 |