동적 수의 이미지에 이동 평균이 적용됩니다.

간략한 설명

파일: \examples\Processing\Loop\RollingAverage\rollingAverage_Loop.vad

기본 플랫폼: imaFlex CXP-12 쿼드

요약 설명

프레임 지연 없이 실시간 이미지 스트림에 이동 평균을 적용하는 방법. 최근 N장의 흑백 이미지의 평균값을 계산하여, 이를 바탕으로 현재 이미지와 비교한 차이를 컬러로 시각화합니다. 평균값을 산출하는 데 사용되는 이미지 수는 128장으로 설정되어 있으나, 변경할 수 있습니다.

이 설계에서는 이동 평균이 어떻게 작동하는지 보여줍니다. 하지만 핵심 요소는 훨씬 더 다양한 응용 프로그램과 머신 비전 작업을 가능하게 해줄 루프입니다. 루프가 어떻게 작동하고 어떻게 구현될 수 있는지 이해하기 위해, 이 예제는 완벽한 출발점이 될 것입니다.

Algorithm

각 픽셀의 평균값을 계산하여 8비트 입력 값 범위로 정규화합니다. 이를 위해 수신된 각 프레임을 이전 프레임들과 합산한 뒤, 수신된 프레임 수로 나눕니다. 이동 평균 시퀀스의 길이에 도달하면, 저장되어 지연된 프레임만큼 합계에서 차감합니다. 이를 통해 첫 번째 이미지부터 시작하여 출력 이미지가 생성됩니다.

이 설계에서는 두 가지 조건이 이동 평균 시퀀스의 길이를 결정합니다. 이 두 값을 모두 N_rolling이라고 하며, 동일한 값으로 설정해야 합니다. 하나는 차감 이미지의 지연 저장 과정을 처리하고, 다른 하나는 픽셀 값의 정규화를 처리합니다.

Used Loop

RxImageLink 및 TxImageLink 연산자는 루프 처리를 가능하게 하는 데 사용됩니다. 수신되는 이미지 시퀀스의 정규화되지 않은 평균 합계는 하나의 루프에서 처리됩니다. 수신된 프레임을 저장하여 나중에 그 값을 차감하기 위해서는 두 번째 루프 처리가 필요합니다. 각 루프는 들어오는 카메라 프레임과 동기화되어야 합니다. 이로 인해 시작 조건이 충족되어야 하는 SYNC 연산자가 도입됩니다. 시작 조건 자체는 InsertImage 에 의해 처리되며, 첫 번째 실행에서는 단일 최소 프레임이 도입됩니다. 사용된 SYNC는 프레임 크기를 필요한 값으로 최대화합니다.

평균적인 처리 과정에서는 일정 수의 프레임을 저장해야 하므로 ImageBufferMultiRoiDyn 연산자가 사용됩니다. 첫 번째 이미지들은 단순히 저장될 뿐이며, 동기화 목적은 최소한의 프레임만 생성함으로써 충족됩니다.

VA 시뮬레이션을 활용하면 SYNC와 관련하여 이 과정이 어떻게 작동하는지 자세히 이해하는 데 도움이 될 것입니다. 일반적으로 일련의 인공 최소 프레임들이 동기화를 수행합니다.

Visualization

두 가지 서로 다른 시각화 방식이 구현되어 있습니다. 첫 번째 방식은 다음과 같은 24비트 RGB 이미지를 생성합니다.

  • 비행기 - 내용
  • RED - 현재 이미지
  • 녹색 - 평균적인 이미지
  • BLUE - 차이 이미지

두 번째 방법은 HSL 색상 공간을 기반으로 하며, 이후 24비트 RGB로 변환됩니다:

  • 비행기 - 내용
  • HUE / 색상각 - 차분 이미지(최소값이 녹색인 경우)
  • 채도 - 최대로 설정
  • LIGHTNESS - 현재 이미지

두 번째 방식은 EffectEnable = 1로 설정하면 활성화됩니다. 모든 색조(Hue) 색각에 대해 차분 스케일링을 적용할 때 동적 이득 계수를 사용할 수 있습니다.

VisualApplets Design

"rollingAverage_Loop.vad" 예제는 기본 구성의 단색 CameraLink 카메라를 위해 설계되었으며, 해상도는 1024x1024, 픽셀당 8비트입니다.

Simulation Data

"rollingAverage_Loop.vad" 예제 폴더(%VASINSTALLDIR%\examples\Processing\Advanced\RollingAverage\street_sequence*.jpg) 에는 시뮬레이션에 유용한 일련의 이미지가 포함되어 있습니다. 데이터 양을 줄이기 위해 손실 압축 형식이 사용되었습니다.