にっちもさっちも、ぼくボッチ。
どうも私です。
これからエンジニアになるので、Qiitaを活用して積極的にアウトプットしていこうかなと思います。どうぞ生温かい見守って頂けると幸いです。
はじめに…
さて今回初めての投稿ということで、何を書こうかなと思っていたのですが、今回は自分が初めて0から作ったプログラムについて書いていきたいと思います。
「画像認識による楽譜の読み取りシステム」
これだけ聞くとすごいことをやってそうですよね??
簡単にどんなシステムなのかというと、スキャンした楽譜の画像データから音符の位置を認識し音に変換し出力するシステムです。
処理を行った画像:
https://drive.google.com/file/d/12CioG8gzdif8xZvsWtCp2JM6hxRL2uPw/view?usp=sharing
処理の手順として
1.楽譜の五線を検出
2.音符の検出
3.音の出力
この開発はProcessingとOpenCVを使って開発しました。
今回は処理の1つ目の手順楽譜の五線を検出について書いていきます。
ではいくぅ~
楽譜の五線を検出
五線検出の手順
1.画像のグレースケール化
2.画像のエッジ検出
3.線分の検出
4.五線の検出
ざっとこんな感じです。
-
1.2.のグレースケールとエッジ検出に関してはOpenCV⑮の関数で元々あるので閾値等を最適化するだけなので簡単!
opencv.findCannyEdges(th1, th2);
//th1,th2は閾値の変数
-
3.の線分検出はHough変換を用いて直線検出。
**Hough変換とは**
画像の中から直線や円などの図形を検出したい際によく用いられる手法の一つ。
直線を小さな点の集合体だと考え、その点の密集度が高いと思われる部分を直線として認識するもの。
lines = opencv.findLines(th, minLength, maxLineGap);
OpenCVでは「opencv.findLines」という関数を使えば簡単のHough変換を行うことができます。
実行結果:
https://drive.google.com/file/d/1flUd90jAMDb98oXt2qOlpavJsRamV2HL/view?usp=sharing
(画像の添付方法分からない…)
ここで得た五線のY座標の値を配列に格納しておけば、とりあえず第一ステップは完了!
次回は音符の検出について書いていきます!
お楽しみに!