SSブログ

楽譜アーカイブアプリ - その25 ノイズ除去 [考え中の問題]

昨日までの数回ちょっと脱線して画像補間に使われるLanczos関数の安定化と効率化を考えた。
それは昨日のLanczos関数をBicubicと同じやり方でスプライン補間をした関数で置き換えたことで解決できた。地味だけどこれは結構役に立つと思われる。

去年暮れやってたことを思い出してその路線に戻る。次は読み込んだ楽譜のノイズの除去について。

9  ノイズ除去

一般的なノイズ除去はいろいろある。小さな孤立点や細い線を除いたり、ランダムな細かい揺らぎを取り除いたりということをする。

楽譜の場合、付点が取り除かれるのは困るので一般的なノイズ除去をやればいいというわけにはいかない。

楽譜というのは五線の上はごちゃごちゃしてるのに、その間には何もないスペースがあいている。バッハの手書き譜のような美しく詰め込まれた楽譜は例外として段と段の間はスペースがないと読みづらくなる。逆にこのスペースをちゃんと白くする、というのも読みやすさに影響する。

ということでここでやるノイズ除去はスペース部分を白ベタに塗る、ということに特化する。

そのためには五線の段の部分とそれ以外のスペース部分を区別しないといけない。そのためにはいろいろな手法がある。僕が真っ先に思いつくのはFourier変換を使う方法。

9.1  Fourier変換によるスペース部検出

音符のある部分は白黒が規則的に入り交じっているが、スペース部分はなにもないか、ノイズによるランダムな明暗があるだけである。これを検出すればいい。そのためにはFourier変換を使って周波数成分を比較することで実現できる。

具体的なアルゴリズムを考えてみる。

9.2  スペース部検出のアルゴリズム

音符のある部分はまず一定間隔が空いた横向き直線が5本並んでいるはずである。スペース部を音符と区別するために
  • 高い周波数成分があまりない
  • 他の部分との相関が低い
という特徴が利用できる。そこで画像を16×16なんかのタイルに分割し、そのそれぞれのタイルごとにFourier変換する。上の2点の特徴を持つタイルはスペースとみなして白で塗りつぶす、というアルゴリズムが一番簡単だろう。

32分音符の和音が並んでいる小節と1音の白玉があるだけの小節では複雑さも全然違うが、五線に対応する成分は必ずあるはずである。

9.3  他のやりかた

Fourier変換を使うのは僕にとって慣れているし、完全にミニマルな方法ではなくて全体的な傾向をとらえることができるのでわかりやすい。ただし、Fourier変換は計算量が多く時間がかかるのと、どうしてもパラメータが多くなりがちである。また、Fourier変換が適さない場合もある。

ほかの方法がないか考えてみて、効率の良さそうなものを採用しよう。
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

献立01/26献立01/27 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。