楽譜アーカイブアプリ - その27 ヒストグラムによるノイズ除去その2 [考え中の問題]
「まいん」ムービー消去のショックから立ち直れない。ぼーぜんしたまま続きを書いてるので、おかしなことを言ってるかもしれない。
タイリングしてそれぞれのタイルでヒストグラムに山がふたつあるかひとつしかないかを判断する。ふたつある場合は五線のある部分だとしてラティテュード補正する。ひとつの場合はスペース部だとして白で塗りつぶす。
このとき、
得られたヒストグラムからふたつのピークの位置を探し出す。タイル内の画素の値が全部同じでない限り、これは可能である。ふたつのピークのうち大きな値に対応する方を白のピーク位置とみなそう。
まず白に対応するピークはすべてのタイルに存在する。第1次近似として画像全体の白のピークを、すべてのタイルのピーク位置の平均としよう。画像の端は除外した方がいいかもしれない。
そして次にもう一方のピーク位置を黒のピークだと考えてやはり平均の位置を計算する。タイルごとにその平均位置に近い黒ピークを持つタイルは楽譜が書かれた部分であるとみなすことができる。
そこから離れた位置にピークがあるタイルに関しては
楽譜のレイアウト上、スペース部が孤立していることはあまりなく連結しているはずである(タイルが十分小さいとして)。 そこで
タイルごとの平均としての白レベルと黒レベルが手に入るので、これを使ってラティテュード調整もやればいい。
これでおおまかなアルゴリズムはできた。
ヒストグラムからふたつのピークを選び出す方法は
隣接する候補は、OpenCVにあるモルフォロジー演算と同じようなErode&Dilateで検出できる。これ自身はそれほど難しいアルゴリズムではない。OpenCVというお手本もあるし。
先のアルゴリズムでは平均の白レベルと黒レベルを決めたが、画像の端でコントラストが低下していることはよくある。これは端の方で適応的に平均値をずらすような処理をすればいい。やりかたはいろいろあって、得意なのは適当な関数を定義してフィットする、という方法。しかし、この場合そこまでしなくてもいいだろう、たぶん。
また、画像の一番端のタイルがスペースでなくて、その内側にスペースのタイルがある場合は一番端もスペースとみなす、などもやったほうがいいだろう。
やっぱりFourier変換を使うやりかたより、こっちのほうがパラメータが少なそうだな。
9.3.2 具体的なアルゴリズム
あるていど判断できるようなヒストグラムになったとする。これからどうやってノイズ除去をやるか具体的に考えてみる。タイリングしてそれぞれのタイルでヒストグラムに山がふたつあるかひとつしかないかを判断する。ふたつある場合は五線のある部分だとしてラティテュード補正する。ひとつの場合はスペース部だとして白で塗りつぶす。
このとき、
- 近傍のタイルのヒストグラムのピークの位置は似通っているだろう
- さらにスキャナ画像を対象にすると、画像の端以外のタイルのピーク位置はだいたい揃っているだろう
得られたヒストグラムからふたつのピークの位置を探し出す。タイル内の画素の値が全部同じでない限り、これは可能である。ふたつのピークのうち大きな値に対応する方を白のピーク位置とみなそう。
まず白に対応するピークはすべてのタイルに存在する。第1次近似として画像全体の白のピークを、すべてのタイルのピーク位置の平均としよう。画像の端は除外した方がいいかもしれない。
そして次にもう一方のピーク位置を黒のピークだと考えてやはり平均の位置を計算する。タイルごとにその平均位置に近い黒ピークを持つタイルは楽譜が書かれた部分であるとみなすことができる。
そこから離れた位置にピークがあるタイルに関しては
- 黒に対応すると考えたピークが白によっている
- ピークの高さ(画素数)がある閾値以下
楽譜のレイアウト上、スペース部が孤立していることはあまりなく連結しているはずである(タイルが十分小さいとして)。 そこで
- 孤立しているスペース部候補
- 譜面の存在するタイルに隣接するスペース部候補
タイルごとの平均としての白レベルと黒レベルが手に入るので、これを使ってラティテュード調整もやればいい。
これでおおまかなアルゴリズムはできた。
9.3.3 アルゴリズムの詳細
上のアルゴリズムの中でもう少し詰める必要がある部分をおさらいする。ヒストグラムからふたつのピークを選び出す方法は
- ヒストグラムの隣りあうbinに入っている画素数の差分を取る
- あるbinの低い位置に対応する差分が正で、高い位置に対応する差分が負となるbinを探す
- 差分が0の場合はさらにその隣の差分を確認する
- 見つかったbinをその値(画素数)の大きい方から2つとる
隣接する候補は、OpenCVにあるモルフォロジー演算と同じようなErode&Dilateで検出できる。これ自身はそれほど難しいアルゴリズムではない。OpenCVというお手本もあるし。
先のアルゴリズムでは平均の白レベルと黒レベルを決めたが、画像の端でコントラストが低下していることはよくある。これは端の方で適応的に平均値をずらすような処理をすればいい。やりかたはいろいろあって、得意なのは適当な関数を定義してフィットする、という方法。しかし、この場合そこまでしなくてもいいだろう、たぶん。
また、画像の一番端のタイルがスペースでなくて、その内側にスペースのタイルがある場合は一番端もスペースとみなす、などもやったほうがいいだろう。
やっぱりFourier変換を使うやりかたより、こっちのほうがパラメータが少なそうだな。
2011-01-30 22:29
nice!(0)
コメント(5)
トラックバック(0)
まいんは真言宗、まいんは真言宗、まいんは真言宗・・・・
youtubeで
「Indukti - ...And Who's The God Now?! 」と検索してみてください。
0分40秒あたりから2分ぐらいまで。
ポーランドのグループなのに、まいんちゃんの宗教にえらくこだわっております。
by つる美 (2011-02-03 10:21)
上記、失礼しました。
そのままコピペしましたが出ませんでした。
Indukti Who’s The God Now
これで出ます。一番上の10分のやつです。
by つる美 (2011-02-03 10:26)
コメントありがとうございます。
おお、こ、これは...つる美さんらしい超マイナー発掘選曲。ポーランドのバンドですか。すごい。日本でこれを知っている人がいったい何人いるのやら。
しかし、僕の趣味としてはこの2:38から8:45までのところはカットした方がいいと思います。この中央の部分は音色はメタルで一見ハードですが迎合感というか、おもねった感じがあります。歌詞も英語だし。メタルってアウトローを気取っていますが、その発想は安全サイドで予定調和的なんですよね。
しかし、ほんとによくこんなの見つけてくるもんです。いや「まいんは真言宗」の空耳もそうですが。すごいなあ。
by decafish (2011-02-03 22:02)
つる美です。わざわざ確認ありがとうございます。
2:38から8:45までいらないということは、この曲はイントロと空耳とコーダだけでよい。曲の本体は全部いらないということに・・・
ところで、全部お聞きになったのならお気づきかと思いますが、
同じ、この曲の9:32から最後までの空耳。
「さらさらウンコ、さらさらウンコ、さらさらウンコ・・・」
何!気がつかなかった?Decafishさんがそんなことでどうする。
ぜひ、もういちど確認お願いします。
by つる美 (2011-02-03 23:45)
これは気がつきませんでした。というか、空耳には想像力が必要です。
ついでにもう一度聴き直しましたが、本体、いらないなあ。やっぱりヒヨってますよ。
by decafish (2011-02-04 06:33)