본문으로 건너뛰기
r/computervision조회 1

STM32G431 기반 MCU에서 SAD 블록 매칭 옵티컬 플로우를 구현한 사례와 성능 관찰

STM32G431C 기반 MCU에서 96×96 영상과 11×11 블록 매칭으로 SAD 옵티컬 플로우를 구현하고 KF로 정제했으며 OpenCV Farneback과의 비교에서 한계와 개선점을 관찰했다.

이 요약은 AI가 원문을 분석해 생성했습니다. 정확한 내용은 원문 기준으로 확인하세요.

TL;DR

작성자는 STM32G431C 기반 MCU에서 실내 드론 안정화를 목표로 SAD 기반 블록 매칭 옵티컬 플로우를 구현했고 입력을 중앙 크롭 후 96×96 그레이스케일로 축소해 약 18KB의 작업 메모리를 확보했다. 블록 매칭은 11×11 격자에서 각 블록의 후보 변위에 대한 절댓값 합을 비교하는 방식으로 동작하며 분산 기반 블록 건너뛰기와 히스토그램 아웃라이어 필터, Kalman Filter를 도입해 잡음을 완화했다. 공개한 비교 결과에서 OpenCV Farneback과 평균 벡터가 일치하지 않는 사례가 관찰되었고 이는 작은 매칭 윈도우가 큰 움직임을 포착하지 못한 데 기인함이 확인되었다. 전체적으로 저자원 플랫폼에서의 경량 옵티컬 플로우는 가능한 접근이지만 검색 범위, 멀티스케일 처리, 센서 융합 등 추가적 설계 변경이 필요하다는 한계가 드러났다.

실용적 조언

  • 메모리 제약이 심한 MCU에서는 입력 해상도를 낮춰야 실시간 처리가 가능하므로 작성자는 중앙 크롭과 96×96으로 스케일링해 약 18KB의 작업 메모리를 확보했다. 이 방식은 연산량과 메모리 사용을 크게 줄여 임베디드 장치에서 SAD 연산을 수행할 수 있게 했으며 그 대가로 공간 해상도와 작은 디테일에 대한 민감도를 잃는다. 따라서 실무에서는 해상도 축소가 가능한 응용인지 우선 판단하고, 축소에 따른 추정 정확도 저하를 보상할 후처리나 센서 융합으로 보완해야 한다.
  • 계산량을 줄이기 위해 분산이 낮은 블록은 건너뛰고 히스토그램 기반으로 블록 벡터의 이상치를 제거하는 전략을 사용하면 노이즈 영향을 줄일 수 있다. 작성자는 이러한 필터를 통해 일부 잘못된 블록 벡터를 줄였고 이는 최종 평균 벡터 안정성에 긍정적 영향을 미쳤다. 임베디드 환경에서는 복잡한 재순위화나 cross-encoder 같은 고비용 절차 대신 블록 선택·이상치 필터링 같은 경량 전처리로 실용적 성능 향상을 노리는 것이 바람직하다.
  • 측정 잡음과 프레임 간 불연속을 완화하기 위해 작성자는 Kalman Filter를 적용해 vx와 vy 추정을 평활화했고 요각을 별도로 추정해 보정하는 방식을 병용했다. KF는 연속적 상태 예측과 측정 갱신으로 순간적인 잡음에 의한 벡터 편향을 완화했으며 특히 저속 영역에서 유효한 안정성 향상을 보였다. 따라서 임베디드 옵티컬 플로우 설계에서는 단일 프레임 추정치에 의존하지 말고 간단한 상태 추정 필터를 병행하는 것이 실효성 있는 접근법이다.

섹션별 상세

01
작성자는 저자원 마이크로컨트롤러에서 동작하는 옵티컬 플로우를 구현하려고 96×96 그레이스케일 영상으로 입력을 축소했고 이 전처리로 약 18KB의 메모리 사용을 확보했다. 입력 영상은 보정(rectified)과 중앙 크롭을 거쳐 스트리밍으로 STM32로 전달되었고 기기 내부에서 블록 단위로 SAD 연산을 수행하도록 설계되었다. 실제 구현에서는 11×11 격자에 대해 각 블록의 후보 변위들을 비교해 최적 벡터를 골라내는 방식이 적용되었으며 이 과정이 메모리와 연산 제약을 직접적으로 결정했다. 이러한 전처리 및 격자 선택은 하드웨어 제약 때문에 생긴 설계적 트레이드오프로, 해상도를 낮춘 대신 검색 능력이 제한되는 결과를 낳았다.
전처리된 입력 프레임의 예시로서 중앙 크롭 및 96×96 해상도로 축소된 그레이스케일 이미지이다.
Photo이 이미지는 작성자가 메모리 제약을 만족시키기 위해 원본을 보정하고 중앙을 크롭한 뒤 96×96로 스케일링했음을 시각적으로 확인시킨다. 축소된 해상도는 각 픽셀이 더 넓은 장면 영역을 표현하게 되어 작은 움직임이나 세부 패턴의 소실을 유발할 수 있으며 이는 후속 블록 매칭의 정밀도를 제한한다. 따라서 이 프레임은 해상도 축소가 연산·메모리 절감에는 기여하지만 추적 성능 측면에서 어떤 트레이드오프를 가져오는지 직접적으로 보여 준다.
SAD 블록 매칭이 적용된 11×11 격자 레이아웃을 보여 주는 그림으로서 블록 분할 방식을 나타낸다.
Diagram이 다이어그램은 작성자가 구현한 블록 그리드가 11×11로 구성되어 각 블록에서 SAD를 계산해 모션 벡터를 추정했음을 명확히 보여 준다. 격자 구성과 블록 크기는 후보 검색 범위와 연산량을 직접 결정하므로, 이 이미지로부터 구조적 설계 선택이 연산 비용과 추적 성능 간의 절충임을 유추할 수 있다. 구현자가 이후에 제시한 작은 매칭 윈도우로 인한 큰 움직임에서의 성능 저하 관찰은 이 격자 크기 선택과 직접 연관된다.
02
SAD 기반 블록 매칭은 각 블록에 대해 후보 변위만큼 픽셀별 절댓값 차를 합산해 최솟값을 선택하는 방식으로 동작하므로 검색 범위와 블록 크기가 성능을 좌우한다. 작성자는 상대적으로 작은 매칭 윈도우를 사용한 것이 큰 움직임에서 오탐과 누락을 유발했다고 관찰했으며 OpenCV의 Farneback 구현도 큰 변위에서는 유사한 어려움을 보였다. 게시물에 포함된 비교 결과 이미지에서 작성자의 구현과 Farneback 평균 벡터가 크게 엇갈리는 사례가 관찰되었고 이는 작은 블록·작은 검색 범위가 빠른 또는 큰 움직임을 포착하기 어렵다는 실험적 근거로 제시된다. 따라서 고정밀 추적 대신 저속 안정화 같은 제한된 용도를 전제로 설계하는 것이 타당하다는 결론이 도출된다.
03
작업 중 실제 성능 개선을 위해 작성자는 분산 기반 블록 건너뛰기와 히스토그램 기반 아웃라이어 필터를 적용했고, 최종적으로는 요(yaw) 추정과 Kalman Filter를 통해 vx와 vy 추정값을 평활화했다. 분산 값이 낮은 블록은 정보량이 적어 계산에서 제외했고 히스토그램 필터는 개별 블록 벡터들 중 이상치를 제거하는 역할을 했으며 이들 휴리스틱은 잡음에 의한 오차를 줄이는 데 기여했다. 그러나 작성자가 공개한 결과에서는 이러한 필터링과 KF 적용에도 불구하고 지상참값(ground truth)에 근접하는 일관된 성능을 얻는 데 한계가 있었고 특히 큰 이동 상황에서 성능 저하가 계속 관찰되었다. 따라서 휴리스틱 기반의 경량 전처리와 추정 평활화는 개선에 도움을 주지만 근본적으로는 검색 범위나 멀티스케일 처리 같은 추가적 설계 변경이 필요함을 시사한다.
작성자의 구현 결과와 OpenCV Farneback 평균 벡터(빨간색)를 비교한 시각화 이미지이다.
Screenshot이 비교 이미지는 작성자의 추정 벡터와 OpenCV Farneback 결과가 특정 장면에서 서로 다른 방향과 크기를 보이는 사례를 보여 주며, 특히 큰 물체 이동에서 오차가 두드러짐을 시사한다. 이미지의 시각적 차이는 작은 매칭 윈도우 및 블록 기반 접근이 복잡한 흐름 필드를 충분히 캡처하지 못할 수 있음을 실무적으로 보여 준다. 작성자는 이 결과를 근거로 현재 접근이 몇몇 상황에서는 안정화에 충분하지 않을 수 있음을 관찰했다.
실제 프레임 연속에서 계산된 옵티컬 플로우 벡터를 보여 주는 GIF 시연 자료이다.
Other이 GIF는 시간에 따른 벡터 필드의 변화와 노이즈, 그리고 KF 적용 전후의 안정성 차이를 직관적으로 확인할 수 있게 해 준다. 연속 프레임에서 보이는 진동과 불연속은 블록 기반 SAD 방식의 한계와 측정 잡음에 기인하며, 작성자가 제시한 Kalman Filter 적용이 추정 값의 평활화에 기여했음을 시각적으로 뒷받침한다. 따라서 이 애니메이션은 단일 정지 이미지보다 시스템의 동적 거동을 검증하는 데 더 직접적인 증거를 제공한다.
04
작성자는 해당 구현을 실내 드론 안정화라는 응용을 목표로 삼았고 구현 경험과 결과 이미지를 함께 공개하며 유사한 사례가 있는지 커뮤니티의 경험을 구했다. 코드와 데이터셋 링크가 함께 제공되어 타인이 동일 파이프라인을 재현하거나 변형해 테스트할 수 있도록 구성되어 있으며 이는 실험적 검증 가능성을 확보했다. 게시글 결말에서 작성자는 소규모 속도에서의 안정화 가능성 여부와 실무 적용 현실성에 의문을 제기했고 이는 단순 구현 성공을 넘어서 안정성·정밀도 요구를 충족시키기 위한 추가 연구 필요성을 드러낸다. 이런 공개·검증 중심의 접근은 제한된 하드웨어에서 컴퓨터 비전 알고리즘을 운용할 때 설계 선택과 트레이드오프를 명확히 해 준다.

용어 해설

Sum of Absolute Differences(SAD)
블록 매칭에서 두 블록의 픽셀 차이절댓값을 모두 더해 유사도를 측정하는 기법으로, 각 후보 변위에 대해 절댓값 합을 계산해 최솟값을 갖는 이동을 선택한다. 계산이 간단해 저사양 하드웨어에서 구현하기 쉽지만 후보 탐색 범위가 작으면 큰 움직임을 포착하지 못한다.
블록 매칭(Block Matching)
영상을 격자로 나눈 후 각 블록별로 후보 변위들을 비교해 최적의 이동 벡터를 찾는 방식으로, 입력 블록과 기준 프레임 블록 간의 유사도(예: SAD)를 계산해 전역 이동을 추정한다. 격자 크기와 검색 범위가 결과 정밀도와 연산량을 결정한다.
칼만 필터(Kalman Filter)
시간에 따라 변하는 상태(예: 속도, 각도)를 노이즈 관측으로부터 추정하는 확률적 필터로, 예측 단계와 갱신 단계를 반복해 측정 잡음을 줄이고 추정값을 평활화한다. 임베디드 환경에서 연속적인 속도 추정 안정화에 흔히 사용된다.
Farneback 옵티컬 플로우(Farneback)
밀도 높은 옵티컬 플로우를 계산하기 위해 다항식 근사를 사용해 지역적 변위를 추정하는 알고리즘으로, 블록 매칭보다 작은 움직임에서 세밀한 벡터 필드를 산출하지만 큰 변위나 빠른 동작에서 오류가 발생할 수 있다.

언급된 도구

OpenCV중립링크

Farneback 등 옵티컬 플로우 알고리즘 비교용으로 사용

px4flow중립

참고·영감용으로 사용된 기존 흐름 센서/참조 구현

STM32G431CBU6중립

타깃 마이크로컨트롤러 보드로 구현과 성능 제약의 근원

언급된 리소스

AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 06. 10.수집 2026. 06. 28.출처 타입 REDDIT

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.