2012-12-21 2 views
1

연속적인 프레임 움직임 차이를 찾기 위해 프레임의 절대 차이를 사용한 다음 모든 픽셀을 합하여 움직임의 양을 정량화했습니다. 나는 OpenCV에서 그렇게 해왔다.비디오에서 프레임 모션을 계산하는 더 좋은 방법은 무엇입니까?

하지만 최근 혼과 펑크의 옵티컬 플로우 알고리즘과 매크로 블록 기반의 모션 보상에 대해 알게되었습니다. OpenCV Library는 이미이를 계산할 수있는 함수를 내장하고 있습니다. 그러나 나는 그것들을 계량화하는 방법을 모른다. 첫 번째 접근 방식보다 나은 점이 있습니까?

도와주세요!

답변

2

광학 흐름을 OpenCV 구현되는 방식은 ...

  1. 는 Initialy 어떤 점을 검출 ... 일부 점이 대상 위에 놓여있을 수 있습니다. 일부는 배경에 놓여있을 수 있습니다 ...
  2. 감지 된 점은 벡터 배열에 저장되고 FrameA 및 FrameB와 함께 Optical Flow 함수로 전달됩니다. 나중에 (FrameB)는 관심 지점의 위치를 ​​찾을 다음 프레임입니다 ...
  3. 우리가 p의 위치를 ​​얻으면 귀하의 경우에 대한

... 당신이 프레임 모션 계산을하고 있기 때문에 우리는 FrameA와 FrameB 사이에 관심의 포인트의 변위를 추정 할 수 FrameB에 대한 관심의 oints ... 배경 빼기를 사용 (프레임 차별화). 관심 지점을 찾기 시작할 수있는 프레임을 시작하는 기술 ... 변경 사항이 임계 값을 초과하면 관심 지점 획득 ... 다음 연속 프레임에서 추적하고 얼마나 많은 관심 지점에 대한 히스토그램은 다음 프레임에서 얼마나 많은 위치 어긋남을 겪었는지 ... 프레임 모션을 정량화하기 위해 지금 생각할 수있는 모든 것 ...

1

특정 opencv 구현에 대한 경험이 거의 없지만 일반적으로 광학 플로우가 모션의 양을 정량화하려고 시도하지 않는다고 말할 수 있습니다. 옵티컬 플로우 벡터의 길이 (예 : 블록 속도 합계)를 기준으로 출력에 대한 메트릭을 정의 할 수 있지만 사용 된 메트릭과는 매우 다릅니다. 이것이 유용 할 경우 응용 프로그램에 따라 다릅니다. 비교를 위해 흰색 배경에 대해 움직이는 회색 물체와 흰색 배경에 대해 움직이는 검은 물체를 생각해보십시오. 프레임 차이 측정 항목은 검은 물체를 더 많은 모션으로 인식하지만 블록 속도 메트릭의 합계는 대략 동일한 양의 모션으로 인식합니다. 좋은 특징 대상이 나타날 때를 추적하기위한 프레임 (예를 들어 FrameA)에서 (주목 점)을 추적하도록

+0

비디오 요약 작업을하고 있습니다. 그래서, 나는 모션의 양을 측정하는 것이 중요하다고 생각합니다. 언급 된 방법이 그 (것)들을 위해 적당합니까? –

0

마지막으로 메서드의 런타임도 고려해야합니다. 차이 이미지의 산출 복잡성은 매우 낮으며 수 밀리 초 내에 예측 될 수 있습니다. 그러나 당신은 당신의 사물의 속도를 quatify 수 없습니다. 예 : 카메라 흔들림으로 문제가 발생할 수 있습니다. 피라미드 형 Lucas Kanade 또는 Horn Schunk 방식과 같은 옵티컬 플로 기반의 방법은 빠르지 만 각 픽셀 (Horn Schunk와 같은 고밀도 메소드) 또는 미리 정의 된 픽셀 세트 (피라미드 형 Lucas Kanade와 같은 드문 드문 방법) 모션 벡터. 이제 서로 다른 움직이는 물체를 구별하거나 계산 된 모션 벡터의 길이를 사용할 수 있습니다. 하지만 런타임은 약 200ms ~ 2 초이며 매개 변수, 프레임 크기 및 벡터 수 등을 고려하여 계산합니다.