빠른 근사 광학 흐름 / 이미지 이동


9

운전자에게 속도 저하를 경고하기 위해 카메라가 얼마나 빠르게 패닝 (수평 / 수직)하는지 감지해야합니다.

전체 이미지가 블록으로 움직이고 있습니다. 실제 방향이 필요하지 않지만 (H 또는 V가 보너스 일지라도) 대략적인 크기 만 필요합니다. 'N'보다 많은 픽셀이 프레임간에 이동하면 트리거됩니다.

이미지는 크고 일반적으로 균일 한 저 대비 장면이므로 추적 할 명확한 하이라이트가 없습니다. 모든 CPU를 사용하지 않고 실시간 (60fps)으로해야합니다.

Niave 솔루션은 중앙에서 RoI를 선택하고, 가장자리를 찾고, 프레임 쌍 간의 유사성을 계산하고, 프레임 중 하나를 픽셀 단위로 왼쪽 / 오른쪽 / 위 / 아래로 이동하고, 반복-최소값을 찾습니다.

더 똑똑한 솔루션이 있는지 궁금했습니다.

답변:


3

아마도 간단한 방법을 찾고 있다면 MPEG 클래스의 압축 코덱에서 매우 성숙한 표준 모션 추정 알고리즘을 적용하는 것입니다. 그들은 이해하기 쉽고 코드를 사용할 준비가 된 것 같습니다. 이 알고리즘은 블록 단위로 모션 벡터를 생성 한 다음 가장 두드러진 군집을 찾아 평균 모션 벡터 방향과 크기를 취할 수 있습니다.

MPEG4- 카메라 모션과 패닝을 먼저 추정하고 보정하는 기술인 " 글로벌 모션 보정 " 이라는 또 다른 핵심 개념이 있습니다. 아름다움은 그러한 방법이 복잡성에 따라 더 간단하거나 철저 할 수 있다는 것입니다. 다음은 하나의 예제 용지 와 다른 용지 입니다.

일반적으로 카메라 패닝 및 모션 추정은 이미 확립 된 연구 영역입니다. 여기에 참고가 있습니다 : 종이다른 종이 .

이 주제에 대해. 간단하고 빠른 알고리즘뿐만 아니라 엄격하고 정확한 알고리즘을 찾을 수 있습니다.


좋은 MPEG 라이브러리에 편리하게 연결할 수 있다면 Mpeg의 GMC가 비판을 받았다는 것을 기억합니다. 카메라 안정화 알고리즘으로 인해 일반적인 영역이 될 것이라고 생각했습니다
Martin Beckett

MPEG 알고리즘을 확실하게 연결 (또는 추출) 할 수 있습니다. FFMPEG를 라이브러리로 사용하여 추출 할 수 있지만 까다로울 수 있습니다. 또는 MSSG의 깔끔한 코드를 읽어 추출 할 수 있습니다 .
Dipan Mehta

GMC에 대한 비판과 관련하여 비트 레이트를 획기적으로 줄이고 객체 기반 인코딩을 만드는 것은 더 이상 약속이 아닙니다 . 그러나 실제로 카메라 모션 매개 변수를 추정하는 것은 어렵지 않습니다.
Dipan Mehta

감사합니다. MSSG를 살펴 보겠습니다. 나는 ffmpeg를 사용하지만 물건을 꺼내는 것은 쉬운 라이브러리가 아닙니다!
Martin Beckett

3

이것은 끔찍한 해결책 일지 모르지만 후속 프레임의 FFT 기반 상호 상관을 수행 한 다음 프레임 사이의 오프셋을 식별하는 피크를 찾을 수 있습니다. 프로세서 사이클을 절약하기 위해 이미지의 작은 하위 집합에서만 수행 할 수 있습니다.

한 프레임에서 다음 프레임으로의 회전 또는 급격한 장면 변경에는 작동하지 않으며 더 나은 방법이있을 수 있습니다. 이것은 일종의 "해머가있어서 모든 것이 못처럼 보입니다"솔루션입니다. 에지 감지가 필요하지 않고 FFT가 한 번에 한 픽셀을 명시 적으로 시프트하는 것보다 훨씬 빠르다는 점을 제외하면 이것은 순진한 솔루션과 같습니다.

이 질문은 비슷하며 아무도 상호 상관 외에 다른 것을 제안하지 않으므로 그렇게 나쁘지는 않을 것입니다. MATLAB을 사용하여 연속 이미지 간의 오프셋 계산


고맙게도 FFT가 느리다고 가정하기는 쉽지만 작은 2 ^ n 창을 사용할 수 있습니다. 추신. 검색 stackoverflow.com/questions/1100100/…
Martin Beckett

3

속도와 방향을 추정 할 수있는 한 가지 방법은 이미지 중심에서 4 개의 창을 "로컬"유량 추정하는 것입니다. Lucas–Kanade 미분법은 변위가 거의 일정하다고 가정하므로 방정식으로 풀 수 있습니다.

따라서 단계별 가이드는 다음과 같습니다.

  1. 이미지 중앙에 픽셀 창을 가져옵니다 (예 : 20x20).
  2. 그라디언트 Ix 및 Iy를 계산하십시오.
  3. 그라디언트 창을 4x10x10과 같이 네 부분으로 나눕니다.
  4. 다음 프레임으로 네 개의 선형 최소 제곱 방정식을 풉니 다.
  5. 네 개의 속도 벡터를 평균화하십시오.

방향과 속도가 결정되지만 가중치 창을 사용하여 더 강하게 만들 수 있습니다. 확장 에 대해서는 Lucas-Kanade 메소드 를보십시오.


0

나는 상호 상관이 오프셋을 찾는 좋은 접근 방법이라고 생각하지만, 실제로 빠르게하고 싶다면 단일 수직 및 단일 수평 스캔 라인 (예 : 이미지 중심)으로 제한하려고 시도 할 수 있습니다. 두 프레임에서 스캔 라인 사이의 상호 상관을 계산하면 수평 및 수직 오프셋의 근사치가됩니다.


이것은 효과가 있지만 대각선으로 패닝하는 경우 옆으로 패닝하는 동안 약간의 지터가 위아래로 움직여도 잘 작동하지 않습니다. 이미지 중앙의 직사각형 하위 영역이 더 좋을 것이라고 생각합니다.
endolith
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.