본문 바로가기

프로그래밍116

[OpenCV/Python] 악보 인식(디지털 악보 인식) - 4 4. 객체 검출 과정 모든 전처리 과정이 끝났고 객체 검출 과정을 진행해보겠습니다. 먼저 정규화까지 진행된 이미지에 레이블링해보겠습니다. 잠시 그전에 functions.py에 함수 하나를 정의하겠습니다. # functions.py import cv2 import numpy as np def weighted(value): standard = 10 return int(value * (standard / 10)) weighted 함수는 standard에 따라 가중치가 곱해진 값을 리턴해주는 함수입니다. 이 함수가 왜 필요하냐면 오선 간격을 10이 아닌 20으로 정규화하였을 때 모든 구성요소들은 2배의 넓이와 높이를 가지게 됩니다. 그래서 코드 내에 상숫값을 적게 되면 standard 값을 바꿀 경우 제대로 코.. 2021. 8. 4.
[OpenCV/Python] 악보 인식(디지털 악보 인식) - 3 전처리 과정 - 3. 악보 이미지 정규화 노이즈 및 오선은 모두 제거 되었고 이제 악보 이미지 정규화가 필요합니다. 어떤 악보가 입력되던 악보의 이미지가 항상 같은 비율을 가지게끔 하면 추후 탐색 및 인식에서 이점으로 작용하기 때문입니다. 앞전에 오선의 좌표들을 모두 구했고 이를 이용하면 정규화가 가능합니다. avg_distance = 0 lines = int(len(staves) / 5) # 보표의 개수 for line in range(lines): for staff in range(4): staff_above = staves[line * 5 + staff] staff_below = staves[line * 5 + staff + 1] avg_distance += abs(staff_above - staf.. 2021. 8. 4.
[OpenCV/Python] 악보 인식(디지털 악보 인식) - 2 전처리 과정 - 2. 오선 제거 악보 영상의 구성요소들을 수월하게 인식하기 위해 오선을 제거합니다. 악보 인식에서 오선을 제거하는 것은 중요한 과제로 여겨지는데 현재 디지털 악보만을 대상으로 알고리즘을 구현하고 있기 때문에 수평 히스토그램을 통해 손쉽게 오선을 제거할 수 있습니다. height, width = image_1.shape for row in range(height): pixels = 0 for col in range(width): pixels += (image_1[row][col] == 255) # 한 행에 존재하는 픽셀의 개수를 셈 위 코드는 이미지를 탐색하여 각 행에 있는 흰색 픽셀의 개수를 세는 코드입니다. 배경은 검은색이고 물체는 흰색이기 때문에 해당 좌표의 픽셀값이 흰색(255)이면.. 2021. 8. 4.
[OpenCV/Python] 악보 인식(디지털 악보 인식) - 1 개요 졸업작품으로 진행했던 광학 음악 인식 기반 자동 편곡 시스템을 파이썬으로 옮기는 과정에 악보인식 모듈만을 먼저 포스팅해보려 합니다. Python 문법이나 OpenCV 함수 등에 대한 자세한 설명은 스킵하고 악보인식에 필요한 과정들을 위주로 포스팅하려고 합니다. Python 및 OpenCV 라이브러리에 대해 조금만 아신다면 크게 문제없이 진행하실 수 있습니다. 물론 클래식 및 가요 등 큰 보표 이상이 사용된 복잡한 악보거나 디지털이 아닌 수기 악보에 대해선 적용이 어렵겠으나, 전체적인 악보인식 진행 방법은 거의 다 비슷하다고 보시면 됩니다. Python은 당연히 설치가 되어있으셔야 하고, 라이브러리로 opencv, numpy 등이 필요합니다. 이미지 불러오기 먼저 악보 이미지를 OpenCV 라이브러리.. 2021. 8. 4.