楽譜アーカイブアプリ - その16 細線化 [考え中の問題]
先日の直線検出の前処理として、直線をなすドットの並びがはっきりしている方がいいのに決まっている。それには「線は細くあるべし」という操作があればいい。その「細線化」のアルゴリズムを考える。
そこで細線化処理を行う必要がある。だが、OpenCVにも、もちろんvImageにも細線化のAPIはない。OpenCVのほうは多くの場合カメラ画像が相手で、その場合は輪郭線を頼りにするので細線化の要求は低い、ということなんだろうか。
また、図-7.2の上の絵では1本の横線になって欲しいが、では下は図のようになるのがいいのか? これは細線化の出来具合に対する評価が、人間が画像を見たときにある部分を直線として認識するそのやり方に依存するということで、結局「よりもっともらしく見える」アルゴリズムを正解とする、ということになってしまう。あるいは汎用の細線化アルゴリズムはあきらめて、特定の目的にあった細線化のアルゴリズムを個別に用意する、ということになる。
7 細線化
細線化とは読んで字のごとく、線を細くする処理である。今回対象にしている画像はスキャン画像なので五線を十分分解する解像度がある、と仮定してかまわないが、逆に一本の線が数ピクセルの幅で表されることを考慮しなければならない。そのまま直線検出してもいいが、その場合分解能によっては元画像の一本の線の中に複数の直線が検出されることになる。これはせっかく分解能を高めても検出された直線の傾きに幅ができてしまって分解能に意味が無くなってしまう。そこで細線化処理を行う必要がある。だが、OpenCVにも、もちろんvImageにも細線化のAPIはない。OpenCVのほうは多くの場合カメラ画像が相手で、その場合は輪郭線を頼りにするので細線化の要求は低い、ということなんだろうか。
7.1 細線化の難しさ
細線化は手書き認識に始まって、認証のための指紋や網膜血管などの認識や、医療画像の解析なんかにまで使われるので、膨大な量のアルゴリズムが提案されている。だが基本的にいずれも境界になっている画素をつぶしていく、という方法で、ある画素の隣接8画素(セルオートマトンで言うMoore近傍のこと)の状態を見てその画素をつぶすがどうか判定するというミニマルな方法が多い。 そもそも細線化というのは恣意的な部分がある。例えば図-7.1の左の画素の配列を右の三つのうちどう解釈するか、はこの形が出現するコンテクストに依存して、その解釈によって残す画素と消す画素が違ってくる。また、図-7.2の上の絵では1本の横線になって欲しいが、では下は図のようになるのがいいのか? これは細線化の出来具合に対する評価が、人間が画像を見たときにある部分を直線として認識するそのやり方に依存するということで、結局「よりもっともらしく見える」アルゴリズムを正解とする、ということになってしまう。あるいは汎用の細線化アルゴリズムはあきらめて、特定の目的にあった細線化のアルゴリズムを個別に用意する、ということになる。
2010-12-15 22:21
nice!(0)
コメント(0)
トラックバック(0)
コメント 0