Files
guitar_score/docs/devlog/entries/20260329-001.md

2.9 KiB

스크롤 탭뷰에서의 ORB 특징점 추적기 한계와 1D Template Matching의 최적성 증명

  • 시간: 2026-03-28 23:00~2026-03-29 00:05
  • Commit: cd159c2
  • Vikunja: #560 → done

설계 결정 및 분석 내역

유저가 제기한 '12마디 앞의 12마디 붙음(중복 복제)' 및 '마디 번호 건너뜀' 현상을 조사하는 과정에서 ORB 기반 특징점 매칭의 한계와, 영상 편집자의 복합 패턴(페이지 넘김 + 스크롤)의 실체를 파악함.

원인 1: 플레이헤드로 인한 Optical Flow 오판

  • 영상이 스크롤되는 와중 노란색 플레이헤드가 악보 위를 가로지름.
  • 기존의 Red/Print 채널 추출(np.max)은 노란색을 완벽히 지우지 못하고 옅은 회색 잔상(200~220)을 남겼음.
  • 회색 박스가 움직이는 픽셀 변화는 Correlation(cv2.matchTemplate(..., TM_CCOEFF_NORMED))의 max_val을 0.85 미만으로 깎아먹었고, 이는 Tracker가 "영상이 페이드/전환(Transition) 중이다"라고 오해하게 만듦.

원인 2: 특징점 기반 매칭(ORB)의 악보 매칭 불가

  • 스크롤 중 발생한 일시적 in_transition이 해제(Recovered)될 때, ORB가 이전 영상(search_region)과 새로운 영상의 중복을 찾으려 시도함.
  • 기타 악보는 같은 음표, 같은 파워코드, 같은 8분음표 줄기 등 반복적인 요소가 매우 강함.
  • 검색 윈도우(search_region) 안에 "11마디"와 "12마디"가 들어있고, 새로운 페이지가 "11마디"부터 시작할 경우, ORB 매칭은 11마디의 특징점을 11마디와 매칭하는 대신 12마디의 특징점과 가장 많이 매칭(강한 일치표, 12표 이상)할 수 있음.
  • 이는 11마디의 위치를 12마디 위에 덧붙여 마디가 무단 복제(12마디 2개)되는 기현상을 유발함. ORB는 형태만 볼 뿐, 음악적 순서(Monotonic sequence)를 물리적으로 이해하지 못하기 때문임.

해결 전략: 절대 이진화 + 마디 단위 1D 슬라이딩 스티칭 부활

  1. 절대 이진화 (Absolute Binarization): cv2.threshold(gray, 120, 255, THRESH_BINARY_INV)를 써서 플레이헤드를 픽셀 단위에서 아예 삭제해버림. 이로써 conf는 스크롤 중 무조건 1.0을 유지하며, 씬전환(Transition) 오탐이 완전히 소멸됨.
  2. Page-Turn 1D Template 부활: ORB는 폐기하고, Morphological Filter(MORPH_OPEN, (1, 7))를 통해 가로선(오선지)을 지운 Canny Edge 뷰를 생성. 이후 직전 500px 구역에 대해서만 1D matchTemplate을 돌려 슬라이딩 중첩 검사를 수행함.
  3. 이 두 가지를 결합함으로써, "연속 스크롤 영상"에서는 dx 파트만 누적시키고 페이징을 차단하며, "페이드 아웃 & 페이지 넘김" 패턴에서는 완벽한 픽셀 단위 Overlap 병합을 자동으로 판단해 수행하는 차세대 통합 Tracker로 진화됨.