1. 기타 타브(TAB) 광학 악보 인식(OMR)의 컴퓨터 비전 도전 과제
광학 악보 인식(OMR, Optical Music Recognition)은 인쇄된 종이 악보나 PDF 악보 이미지를 컴퓨터가 재생 가능한 디지털 기보 포맷(MusicXML, MIDI)으로 자동 변환하는 컴퓨터 비전 기술입니다. 피아노 표준 5선보와 달리, 기타 타브(TAB) 악보는 컴퓨터 비전 알고리즘 관점에서 다음과 같은 고유하고 까다로운 난제들을 수반합니다:
- 6줄 보표 시스템: 표준 오선보와 달리 6개의 수평선이 조밀하게 밀집되어 있어 선분 간섭이 극심합니다.
- 숫자(Fret Number)와 보표 선의 중첩: 프렛 번호(0부터 24까지)가 보표 선분 바로 위에 관통하듯이 겹쳐 그려지므로 선분을 제거하면서 숫자의 획을 손상시키지 않는 형태학적(Morphological) 필터링이 필수적입니다.
- 스마트폰 촬영 왜곡: 조명 불균형, 종이 구김, 카메라 회전 기울기(Skew)로 인해 수평선이 곡선 형태로 변형되는 경우가 흔합니다.
이러한 문제를 브라우저 내부에서 순수 웹 기술(Canvas2D, WebAssembly)만으로 해결하려면, 전통적인 무거운 Python OpenCV 파이프라인을 경량화하여 단일 패스 이미지 프로세싱 파이프라인으로 재설계해야 합니다.
검출된 음표와 프렛 번호는 W3C 표준 MusicXML 4.0 스펙의 '
2. 악보 이미지 이진화 알고리즘 비교
입력 그레이스케일 이미지를 흑백 이진 픽셀로 전환하기 위한 임계값 처리(Thresholding) 기법들을 비교하면 다음과 같습니다.
| 이진화 기법 | 임계값 결정 방식 | 조명 그림자 내성 | 계산 복잡도 | 6줄 보표 보존성 |
|---|---|---|---|---|
| 전역 임계치 (Global) | 단일 고정 상수 () | 매우 취약 (그림자 구간 먹통) | (초고속) | 불량 |
| 오츠(Otsu) 이진화 (Every-Forge) | 클래스 간 분산(Between-Class Variance) 극대화 | 균일 스캔 악보에서 최상 | (고속) | 매우 우수 (선명한 에지) |
| 사우볼라(Sauvola) | 윈도우 국소 평균 및 표준편차 | 매우 우수 (복잡한 그림자 극복) | (다소 무거움) | 미세 획 끊김 발생 가능 |
| 적응형 가우시안 (Adaptive) | 가우시안 가중치 국소 평균 | 우수 | 양호 |
3. 오츠(Otsu) 분산 극대화와 허프 변환(Hough Transform) 직선 검출 수학
3.1. 오츠(Otsu) 최적 임계치 판별식
그레이스케일 레벨 의 정규화된 히스토그램 확률을 라 할 때, 임계치 로 분할되는 두 픽셀 집합(배경 , 전경 )의 가중치 와 평균 는 다음과 같습니다:
오츠 알고리즘은 클래스 간 분산 를 최대화하는 를 최적 임계치로 선정합니다:
3.2. 허프 변환(Hough Transform)의 극좌표 직선 모델
이진화된 에지 픽셀 를 기울기-절편 공간이 아닌 극좌표 파라미터 공간으로 변환하여 수평 보표 선분을 견고하게 검출합니다:
타브 보표의 수평선은 부근에서 누적 어큐뮬레이터 행렬 의 극대 피크들을 형성합니다. 동일한 보표 간격 를 가지며 연속된 6개의 피크 집합 을 군집화(Clustering)함으로써 타브 악보 1개 시스템(마디 행)을 완벽히 분할해 냅니다.
4. 수평 보표선 제거(Staff Removal)와 프렛 숫자 OCR
6줄 보표 위치가 확정되면, 수직 방향의 런렝스(Vertical Run-Length) 필터링을 적용하여 두께가 1~2픽셀에 불과한 수평선을 마스킹하여 제거합니다. 이때 수평선과 교차하는 숫자의 수직 획(예: 1, 4, 7 등)은 두께 검사 조건을 통해 보존됩니다.
분리된 숫자 바운딩 박스(Bounding Box)는 브라우저 내부에서 경량 Tesseract OCR 또는 작은 합성곱 신경망(CNN) 텐서로 전달되어 사이의 프렛 번호로 최종 디코딩됩니다.
5. 브라우저 캔버스 OMR 이미지 전처리 파이프라인 구현체
다음은 순수 자바스크립트/Canvas API를 활용하여 업로드된 악보 이미지의 오츠 이진화 및 수평 프로젝션 프로파일을 계산하는 TypeScript 핵심 엔진입니다.
// Every-Forge CV Lab: In-Browser Guitar Tab Staff Detection Engine
export class TabOmrImageProcessor {
static binarizeOtsu(imageData: ImageData): Uint8Array {
const { data, width, height } = imageData;
const totalPixels = width * height;
const histogram = new Int32Array(256);
const grayBuffer = new Uint8Array(totalPixels);
for (let i = 0; i < totalPixels; i++) {
const r = data[i * 4];
const g = data[i * 4 + 1];
const b = data[i * 4 + 2];
const gray = Math.round(0.299 * r + 0.587 * g + 0.114 * b);
grayBuffer[i] = gray;
histogram[gray]++;
}
let sumTotal = 0;
for (let i = 0; i < 256; i++) sumTotal += i * histogram[i];
let sumB = 0;
let wB = 0;
let maxVariance = 0;
let threshold = 128;
for (let t = 0; t < 256; t++) {
wB += histogram[t];
if (wB === 0) continue;
const wF = totalPixels - wB;
if (wF === 0) break;
sumB += t * histogram[t];
const mB = sumB / wB;
const mF = (sumTotal - sumB) / wF;
const betweenVariance = wB * wF * Math.pow(mB - mF, 2);
if (betweenVariance > maxVariance) {
maxVariance = betweenVariance;
threshold = t;
}
}
const binary = new Uint8Array(totalPixels);
for (let i = 0; i < totalPixels; i++) {
binary[i] = grayBuffer[i] < threshold ? 1 : 0;
}
return binary;
}
static computeHorizontalProjection(binary: Uint8Array, width: number, height: number): Int32Array {
const projection = new Int32Array(height);
for (let y = 0; y < height; y++) {
let rowSum = 0;
const rowOffset = y * width;
for (let x = 0; x < width; x++) {
rowSum += binary[rowOffset + x];
}
projection[y] = rowSum;
}
return projection;
}
}
6. 음표 기둥(Stem) 분리와 6줄 보표 기하 왜곡(Deskew) 보정 알고리즘
스마트폰 카메라로 비스듬히 촬영된 악보 이미지는 기하학적 원근 왜곡(Perspective Distortion)과 회전 기울기(Skew)를 갖습니다. 이를 사전에 보정하지 않으면 수평 프로젝션 프로파일의 피크가 무너져 보표 검출이 실패합니다.
Every-Forge OMR 파이프라인은 라돈 변환(Radon Transform)과 최소자승법(Least Squares Fitting)을 통해 이미지의 주 기울기 각도 를 단위로 정밀 추정하고 아핀 변환(Affine Transformation)을 적용하여 악보를 수평으로 교정합니다. 또한 프렛 번호 위아래로 지나가는 수직 음표 기둥(Stem)과 꼬리(Flag)를 2차원 모폴로지 침식(Erosion) 및 팽창(Dilation) 연산자로 분리하여 순수 프렛 숫자만을 깨끗하게 마스킹 추출합니다.
구조 요소(Structuring Element) 에 대한 이진 이미지 의 침식(Erosion) 및 팽창(Dilation) 수학적 연산자는 다음과 같이 정의됩니다:
수직 기둥 성분을 제거하기 위해 높이 , 너비 의 수직 막대 구조 요소를 적용하여 음표 기둥만을 선택적으로 감산(Subtract)하고, 잔여 수평선은 수평 구조 요소를 통해 완전 소거함으로써 숫자 글리프만을 고립시키는 견고한 분할 마스크를 생성합니다.
7. 결론 및 Every-Forge 타브 악보 OMR 도구 연동
컴퓨터 비전 기술을 활용한 악보 자동화는 종이 악보를 디지털 기보 규격으로 변환하는 속도를 비약적으로 단축시킵니다.
종이 악보 스캔본이나 PDF로부터 6줄 타브 보표를 자동 분할하고 MusicXML 및 벡터 TAB PDF로 즉시 변환하는 실전 도구는 Every-Forge 타브 악보 OMR 변환기 바로가기에서 직접 경험하실 수 있습니다.
Otsu 이진화 및 허프 변환 6줄 타브 악보 광학 인식(OMR) 엔진
Every-Forge Engine Lab
Verified AuthorPrincipal Audio DSP & Computer Vision Systems Architect
Every-Forge 엔진 랩은 브라우저 샌드박스 메모리 내에서 100% 동작하는 제로-서버(Zero-Server) 고성능 웹 엔지니어링을 연구합니다. WebGPU 셰이더 기반 연산, WebAssembly(WASM) 저지연 바이너리 파이프라인, W3C Web Crypto 표준의 영지식(Zero-Knowledge) 암호학 아키텍처, 그리고 통계적 확률론과 복리 수식 기반의 퀀트 금융 모델링을 직접 구현하고 오픈소스로 검증합니다.