(57)【特許請求の範囲】
【請求項１】
入力された楽譜画像データから各種記号を認識する楽譜認識装置において、
前記楽譜画像データを五線と直角方向に走査し、黒画素および白画素のラン幅を順に検出するラン幅検出手段と、
前記ラン幅検出手段によって検出された黒画素および白画素のラン幅がそれぞれ、黒画素の基準ラン幅および白画素の基準ラン幅に対してそれぞれ第１の所定の誤差内および第２の所定の誤差内で一致して五線状に並んでいることを検出するとともに、前記白画素の基準ラン幅に対して前記第２の所定の誤差内で一致するラン幅より大きい所定のラン幅を超えるラン幅の白画素のランが存在することを検出して五線位置とする検出手段と、
前記検出手段により検出された五線位置で、五線の線幅および間隔を検出する線幅・間隔検出手段とを備えることを特徴とする楽譜認識装置。
【請求項２】
更に、前記五線位置とされた位置に含まれる複数の座標点を始点として、五線と並行方向に隣接する座標点の画素を順に走査し、五線上であることを示す黒画素の割合が所定値以下になった場合には、割合が最大となるように前記座標点を上あるいは下にシフトさせると共に、シフト量を記録するシフト量検出手段と、
前記シフト量に基づき、前記楽譜画像データを修正する傾き補正手段とを含むことを特徴とする請求項１に記載の楽譜認識装置。
【請求項３】
前記シフト量検出手段は、前記五線位置における五線幅の中を線幅および間隔に基づいて均等に分割した複数の座標点を始点とすることを特徴とする請求項２に記載の楽譜認識装置。
【請求項４】
前記検出手段は、前記五線位置とされた位置が検出されなかった場合には、前記第１の所定の誤差および前記第２の所定の誤差の値を大きくして再度検出を試みることを特徴とする請求項１に記載の楽譜認識装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は楽譜認識装置に関し、特に楽譜内の五線の位置を確実に検出するとともに五線の線幅および間隔を精度良く検出し、かつずれを修正することが可能な楽譜認識装置に関するものである。
【０００２】
【従来の技術】
従来の楽譜認識装置においては、例えばスキャナによって読み込んだ楽譜画像データについて、横（Ｘ軸）方向の１走査線上にある黒画素（白い用紙に黒で五線が記載されている場合）数を計数し、これを縦（Ｙ軸）方向に並べた頻度分布図（ヒストグラム）を求め、そのピーク値の位置から五線を検出していた。
【０００３】
【発明が解決しようとする課題】
従来の楽譜認識装置の五線検出処理においては、読み込んだ画像データが走査線に対して傾いていると、頻度分布図のピークがなまって、五線位置の正確な検出ができないという問題点があった。このために、五線検出の前に、何らかの方法で画像データの傾きを検出し、画像全体を回転させて傾きを補正する必要があった。しかし、高価なフラットベッド型のスキャナの場合には画像データのずれは回転により補正可能であるが、安価なハンディスキャナの場合には部分的な上下のずれが生じ、このずれは回転しても補正できないという問題点があった。本発明の目的は、前記のような従来技術の問題点を解決し、上下のずれのある楽譜画像データからでも五線を確実に検出するとともに五線の線幅および間隔を精度良く検出し、かつずれの補正を行うことが可能な楽譜認識装置を提供することにある。
【０００４】
【課題を解決するための手段】
本発明は、入力された楽譜画像データから各種記号を認識する楽譜認識装置において、楽譜画像データを五線と直角方向に走査し、黒画素および白画素のラン幅を順に検出するラン幅検出手段と、ラン幅検出手段によって検出された黒画素および白画素のラン幅がそれぞれ、黒画素の基準ラン幅および白画素の基準ラン幅に対してそれぞれ第１の所定の誤差内および第２の所定の誤差内で一致して五線状に並んでいることを検出するとともに、白画素の基準ラン幅に対して第２の所定の誤差内で一致するラン幅より大きい所定のラン幅を超えるラン幅の白画素のランが存在することを検出して五線位置とする検出手段と、検出手段により検出された五線位置で、五線の線幅および間隔を検出する線幅・間隔検出手段とを備えたことを特徴とする。また、上記構成に加えて、五線位置とされた位置に含まれる複数の座標点を始点として、五線と並行方向に隣接する座標点の画素を順に走査し、五線上であることを示す画素の割合が所定値以下になった場合には、割合が最大となるように座標点を上あるいは下にシフトさせると共に、シフト量を記録するシフト量検出手段と、前記シフト量に基づき、楽譜画像データを修正する傾き補正手段とを含むことを特徴とする。
【０００５】
本発明はこのような構成により、例えば、ハンディスキャナで楽譜画像データを取り込み、楽譜画像データの一部が上下にずれているような場合であっても、確実に五線位置を検出するとともに五線の線幅および間隔を精度良く検出することが可能となる。また五線の各部において上下へのシフト量を検出し、該シフト量に基づき楽譜画像データを修正するので、ハンディスキャナによる部分的な上下のずれを含む楽譜画像データを正確に修正することができる。
【０００６】
【発明の実施の形態】
以下、本発明の実施の形態を図面を参照して詳細に説明する。図１は本発明の楽譜認識装置の一実施例の構成を示すブロック図である。この装置は、パソコン等の一般的な計算機システムにスキャナやＭＩＤＩインターフェース回路を付加したものである。ＣＰＵ１は、ＲＯＭ２あるいはＲＡＭ３に格納されるプログラムに基づき、楽譜認識装置全体の制御を行う中央処理装置である。また、予め設定された所定の周期でＣＰＵ１に割り込みをかけるタイマ回路を内蔵している。ＲＡＭ３はプログラムエリアの他、画像データバッファ、ワークエリア等として使用される。ハードディスク装置ＨＤＤ４およびフロッピディスク装置ＦＤＤ５は、プログラムおよび画像データ、演奏データ等を格納する。ＣＲＴ６はＣＰＵ１の制御に基づき、ＣＲＴインターフェース回路７から出力される映像情報を表示し、キーボード８から入力された情報は、キーボードインターフェース回路９を経てＣＰＵ１に取り込まれる。プリンタ１０は、ＣＰＵ１の制御に基づき、プリンタインターフェース回路１１から出力される印字情報を印字する。
【０００７】
スキャナ１２は、例えば（印刷された）楽譜を光学的に走査して、２値あるいはグレイスケールの画像データに変換するものであり、フラットベッド型、ハンディ型、フィーダー型等任意のタイプのスキャナを使用できる。スキャナ１２によって読み取られた画像情報は、スキャナインターフェース回路１３を介して、ＲＡＭ３あるいはＨＤＤ４に取り込まれる。ＭＩＤＩインターフェース回路１４は、音源モジュール等の外部のＭＩＤＩ機器との間でＭＩＤＩデータの送受信を行う回路である。バス１５は楽譜認識装置内の各回路を接続している。なお、この他にマウス等のポインティングデバイス、ＲＳ２３２Ｃ等のシリアルインターフェース回路等を備えていてもよい。
【０００８】
図３は、ＣＰＵ１のメイン処理を示すフローチャートである。ステップＳ１においては、スキャナ１２によって楽譜の画像をＲＡＭ３に取り込む。画像は２値の画像として取り込む。ステップＳ２においては、かすれやドットノイズなどを軽減するために、図形融合などの画質平滑化処理を行う。ステップＳ３においては、画質チェック処理を行う。該処理においては、倍率と濃度の情報を得ると共に、後段における五線検出の基準データを得るために、まず五線の線幅と五線の各線間の間幅を検出する。そして、画像データの倍率は、例えば間幅から推定可能であり、また、濃度は線幅と間幅の比から推定することができる。従って、ステップＳ３においては、これらの値が、所定の範囲内に入っているか否かがチェックされる。ステップＳ４においては、ステップＳ３におけるチェック結果が画質ＯＫであるか否かが判定され、結果がＯＫでない場合にはステップＳ１に戻って、倍率や濃度を変えて再取り込みを行う。
【０００９】
ステップＳ５においては、後述する五線認識を行う。五線認識処理においては、五線走査開始位置検出処理と五線シフト量の検出処理が行われる。ステップＳ６においては、段落認識処理を行う。この処理は、大きく、段落認識処理及び大かっこ認識処理に分かれる。段落認識処理においては、画像全体で五線を検出し、五線同士で左端がほぼ同じ場所にある五線の組を探し、五線の端同士が黒画素で結ばれているかどうかを検査し、段落を認識する。段落を囲む矩形が左右に並んでいた場合には、これも時系列になるように処理を行う。なお、予め、ｘ軸、ｙ軸方向に黒画素のヒストグラムを取り、これの空白部分を検出することによって段落の存在を推定しても良い。
【００１０】
五線同士が大かっこで結ばれていた場合には、五線同士にまたがる音符等が存在する場合があるので、大かっこで結ばれた五線は１つの単位で処理を行った方が良い。大かっこ認識においては、段落線の左の所定の範囲で、後述する定型記号認識と同様の手法で認識を行う。なお、この認識においては、大かっこおよび大弧線が認識できれば良い。
【００１１】
ステップＳ７においては、段落の認識結果を表示して、段落認識結果が正しいか否かを利用者にチェックさせることにより、ＯＫか否かが判定され、結果がＯＫでない場合にはステップＳ８に移行して、段落認識結果の修正が行われる。スコア譜においては、各段落のパート構成が等しいものの他に、途中でパートの省略や追加があったり、同じパートで単独譜表と大譜表が段落ごとに変化する場合もある。このようなパートの対応は、大かっこの対比等で行うが、パートの対応が一意に決められない場合もあるので、予め段落認識結果の修正を行えるようにする。
【００１２】
なお、五線認識が失敗した場合には、その後の処理が行えないので、倍率や濃度を変更して再度画像を取り込む必要がある。従って、ステップＳ７においては、まず五線の認識結果を表示し、正しいか否かを利用者に判定させ、もし正しくない場合には、Ｓ１に戻って画像の再取り込みを行い、また五線が正しく認識されている場合には、段落認識結果を表示し、チェックさせるようにしてもよい。
【００１３】
ステップＳ９においては、処理矩形の決定処理が行われる。求められた五線、（大譜表の場合には、譜表中の五線）を含む、ある程度広い矩形を採り、これを認識処理矩形とする。矩形の大きさは、その五線に関係する音楽記号が存在する最大領域以上で、かつ五線傾き補正により、必要な記号が消えない様な大きさにする。これ以降の認識はこの矩形内で行う。
【００１４】
ステップＳ１０においては、後述する五線傾き補正処理を行う。概略を述べると、先に求めた五線シフト量に基づいて矩形画像の列ごとに画素列を上下にシフトする。なお、五線ごとにシフト量を計算し、矩形画像内でシフト補正を行った方がより正確であるが、シフト量は、取り込み画像全体で１つ計算し、画像全体をシフトしても良い。この後、矩形の上下端に接した図形ラベル（独立した黒画素領域）は上下のパートの構成要素として削除する。最後に、上下端の空白部分を検出して、矩形を縮小する。
【００１５】
ステップＳ１１〜Ｓ１５においては、各種記号の認識処理が行われる。楽譜記号は、形、位置に関して大まかに以下の３つの種類がある。（１）定型で、上下位置がほぼ決まっているもの（音部記号、拍子記号等）。（２）定型で、上下位置は自由度があるもの（臨時記号、休符等）。（３）不定型かつ位置も不定のもの（音符、スラー、タイ等）。これらをそれぞれに適した方式で、音部記号、拍子認識、音符認識、定型記号認識、文字列認識、スラー、タイ認識の順に認識する。
【００１６】
音部記号、拍子認識を最初に行うのは、処理コストの低い認識を最初に行って、この記号を削除することによって、後の認識の処理コストを軽減するためと、最初により確実なものを認識することで、後の認識での誤認識を減らすためである。また、音符認識の後に定型記号認識を行うのは、ラベルの接触に影響されにくい認識方式である音符認識を行って、この音符を削除することで、音符に接触した臨時記号等の認識を可能にするためである。スラー、タイ認識が最後になっているのは、処理コストの高いスラー認識の対象になるラベルをなるべく少なくするためである。また、先に検出された音符の周りのラベルだけをスラー、タイ認識の対象にすることによって、更にスラー、タイ認識の処理コストを下げ、かつ、スラー、タイの誤認識も減らすことができる。
【００１７】
ステップＳ１１においては、五線に対して定位置にある記号として、音部記号と拍子記号を認識する。該処理においては、まず、求められた五線を含む矩形領域で縦に黒画素のヒストグラムを取っていき、黒画素量があるしきい値以上の帯域を、記号が存在する可能性のある場所としてマッチングの対象とする。マッチングは、五線間の数箇所について横方向のペリフェラル特徴によって行う。ペリフェラル特徴とは、マッチング対象となる記号のみを含む矩形領域において、左右端から五線間の数箇所の白画素領域を内方向に走査し、黒画素領域に達するまでの距離を１次（最初）あるいは数次（２回目以降）まで求めたものである。また、マッチングに失敗した場合には、隣接した帯域を併合して再度認識を行う。そして、認識された記号は画像データから削除する。
【００１８】
ステップＳ１２においては音符認識を行う。まず、矩形領域を横に走査して、所定の長さ以下の黒ランを検出し、分離する。分離された画像データは、横が細い部分であるので、ここから符尾や小節線の候補になる縦線を検出する。次に、縦に所定の長さ以下の黒ランを検出し分離する。分離された画像データは細い横線を構成する部分なので、ここから加線（五線からはみ出した音符を記載するために付加した横線）やクレッシェンドなどの候補になる横線を検出する。最後に、元の画像データから検出された縦横の細ランを消せば、画像中の太い部分（以下太ラベル）が抽出できる。楽譜の場合、４分音符より短い音符の符頭（以下黒玉符頭）や連鉤（複数の音符をつなぐ帯）が分離できる。
【００１９】
黒玉符頭は、太ラベルの境界線についての座標チェーンデータを求め、この座標データから公知の方法により楕円式を計算し、この形や太ラベルとのマッチング度をとって認識する。和音への対応として、まず横方向に並んだ和音を認識するために、符尾候補の縦線により太ラベルを切断する。また縦方向の和音への対応は、太ラベルのくぼみを検出し、左右のくぼみ同士の組を作って、これを結ぶ線で太ラベルを切断する。画像がつぶれている場合など、くぼみが１つ、あるいは全く見つからなかった場合には、くぼみの位置を推定する。
【００２０】
２分音符、全音符の符頭（以下白抜き符頭）は、画像の穴の座標チェーンから楕円式を計算する。音符が線上にあるものに対しては、２つの座標チェーンを結合したものから楕円式を計算する。なお、楕円式を計算して認識する代わりに、ペリフェラル特徴等で認識しても良いし、和音対策のために太ラベルを切断せずに、そのままの太ラベルを辞書に持っておいても良い。
【００２１】
最後に、先に求めた符尾候補と結合して音符を検出する。連鉤は、これまでに求められた旗を考えない音符の符尾の周辺に存在する太ラベルを検出し、これの形状から連鉤の本数を計算する。また、この連鉤に連結している他の音符も検出する。連結する他の音符が無い場合には単独の旗を持つ音符と考える。連鉤の本数により、音符の情報を変更する。この後、分離した横線を使って音の高さ（加線）やクレッシェンド、横線と縦線を使ってくり返しかっこ等を認識する。残った縦線から小節線を認識する。そして、認識された記号は画像から削除する。
【００２２】
ステップＳ１３においては、定型記号認識が行われる。この処理においては、まず、公知の輪郭線荷重方向指数を取り、辞書の各記号データについてラベルのサイズと荷重方向指数のマッチング度を計算して、各マッチング度を正規化し、統合した結果が最も高い記号を出力する。なお、サイズと荷重方向指数の他に、ペリフェラルなどの他の特徴を使っても良い。また、五線消去によりラベルが切れたものの対策として、五線消去によって切れたラベルを辞書に登録し、この記号であると認識された場合には、その周りのラベルを結合して再認識する。認識された記号は画像から削除する。
【００２３】
ステップＳ１４においては、文字列認識を行う。速度記号などの文字列を認識するために、定型記号認識で認識されたアルファベットその他の記号を使い、その記号を囲む矩形が文字列状に並んでいるものを抽出し、これと文字列辞書のマッチングをとることで、文字列状の記号を、それぞれの構成文字が多少間違っていても認識できるようにする。
【００２４】
ステップＳ１５においては、スラータイ認識を行う。この処理においては、残ったラベルのうち、検出された音符の周りのラベルに関して、これを細線化し、これを多円弧近似する。そして、以前に消された記号により線が切れている場合があるので、求められた多円弧同士の連結を行う。最後に、求められた円弧の形や元画像の図の太さ、音符との関係などからスラー、タイを認識する。これが認識で最後のルーチンなので、認識された記号は画像から削除しなくても良いが、認識したスラー、タイを削除し、この後で再度定型記号認識を行うようにすれば、スラー、タイと接触した記号を認識することができるようになる。
【００２５】
ステップＳ１６においては、例えば認識結果に基づき、楽譜画像データを合成して表示し、正しいか否かを利用者にチェックさせることにより、ＯＫか否かが判定され、結果がＯＫでない場合にはステップＳ１７に移行して、マウス、キーボード等を用いて、手動により認識結果の修正が行われる。ステップＳ１８においては、演奏データ作成処理が行われる。該処理においては、認識した各種の記号や音符情報に基づき、例えば公知の演奏データ形式であるＭＩＤＩファイルデータを生成する。
【００２６】
図６は、図３のステップＳ３〜Ｓ５の処理を詳細に示すフローチャートである。ステップＳ９０においては、倍率と濃度の情報を得ると共に、後段における五線検出の基準データを得るために、まず五線の線幅と五線の各線間の間幅を検出する。線幅、間幅を求めるためには、まず、画像上の横（ｘ）方向の数箇所において縦（ｙ）方向に走査し、黒ラン（連続する黒画素）と白ランの長さを全て求めて、長さ毎に頻度分布（ヒストグラム）データを作成する。楽譜上で最も多い記号は五線であるので、作成された黒ラン長ヒストグラムと、白ラン長ヒストグラムのピークを検出することで、五線の線幅、間幅が推定できる。
【００２７】
ステップＳ９１においては、画質のチェックを行う。画像データの倍率は、例えば間幅から推定可能であり、また、濃度は線幅と間幅の比から推定することができる。楽譜の認識処理においては、倍率および濃度が所定の範囲から外れると認識率が低下してしまうので、ステップＳ９１においては、これらの値が、所定の範囲内に入っているか否かがチェックされる。ステップＳ９２においては、ステップＳ９１におけるチェック結果が画質ＯＫであるか否かが判定され、結果がＯＫでない場合にはステップＳ９３に移行して、倍率あるいは濃度が不適当であることを表示し、ステップＳ１に戻って、倍率や濃度を自動であるいは手動により変更して再取り込みを行う。
【００２８】
ステップＳ９４においては、五線検出時の誤差レベルの初期値として、変数level に０を設定し、ステップＳ９５においては、後述する五線走査開始位置検出処理が行われる。図２は、五線走査開始位置の検出動作を示す説明図である。図２を参照して、該処理の概略を述べると、ｘ軸方向の例えば中点位置で、ｙ軸方向に黒画素と白画素のラン幅を順に求め、求められた線幅と間幅が、図２右側に示すように五線状に並んでいる位置を、ある程度の誤差を考慮して検出する。そして、加線の影響を除くために、五線状の並びの両側に間幅より大きな白画素幅があるという条件を加える。この条件に合う白黒画素の並びがあるｘ位置の各黒ランの中点を五線走査開始位置とする。音符等が存在するために、下端まで走査しても五線が検出されない場合には、ｘ座標を左右にシフトして検出動作を繰り返す。
【００２９】
ステップＳ９６においては、後述する五線シフト量検出処理が行われる。図８は、五線シフト量検出動作を示す説明図である。図８を参照して、該処理の概略を述べると、求められたｘ位置の五線走査開始位置（５点の黒画素位置）から、１ドットずつ位置を右および左に変えて、黒画素数の合計をチェックしていく。そして、５点の内、黒画素がある個数（例えば３あるいは４個）以下になった場合（図８においてはｘ座標がｘ＋ｎ＋１の位置で黒画素が０個になっている）には、５点を上下にずらして黒画素数をチェックし、ｙ座標を黒画素の割合が高くなる方向へシフトする（図８においては、５点を下にシフトする）。そして開始位置からのシフト量を五線のシフト量とする。五線走査開始位置から左右に、黒画素個数が０になる位置まで走査することにより五線の検出を行う。
【００３０】
図４、５は、図６のステップＳ９５の五線走査開始位置検出処理を示すフローチャートである。ステップＳ２０においては、五線検出を行うｘ座標を示す変数ｘに矩形のｘ座標の中点の値（xstart）をセットし、またｙ軸方向の走査の向きを示す変数xflag に定数XPLUS （例えば１）をセットする。またその他の変数も初期化する。ステップＳ２１においては、画素パターンのポインタである変数ptr に０を、直前（上）の画素値を表す変数cpに定数BACKGROUND（例えば０：白）を、現在の画素のラン長を示すlengthに定数THR3（例えば間幅の２倍）に１を加算した値をセットする。ステップＳ２２においては、五線検出を行うｙ座標の初期値として、図２に示すように矩形上端の値（０）をセットする。
【００３１】
ステップＳ２３においては、座標（ｘ，ｙ）の画素値を変数ｃにセットする。ステップＳ２４においては、ｃと上の画素値ｃｐとが等しいか否か、即ち色の変化が無いか否かが判定され、結果が肯定の場合にはステップＳ２５に移行して、変数lengthに１を加算し、ステップＳ２８に移行する。しかし判定結果が否定の場合にはステップＳ２６に移行し、後述するラン状態のチェック処理が行われる。ステップＳ２７においては、チェックの結果、五線が検出されたか否かが判定され、結果が肯定の場合には図５のステップＳ４２に移行するが、否定の場合にはステップＳ２８に移行する。ステップＳ２８においては、変数ｙが矩形の下端まで達したか否かが判定され、結果が否定の場合にはステップＳ２９においてｙに１が加算され、ステップＳ２３に戻って処理を繰り返すが、肯定の場合にはステップＳ３０に移行する。
【００３２】
ステップＳ３０〜３５の処理は、矩形の下端あるいはその近傍に五線が存在した場合においても、五線を確実に検出するための処理である。ステップＳ３０においては、ｃの値が定数FOREGROUND（例えば１：黒）であるか否かが判定され、結果が肯定の場合にはステップＳ３１のラン状態のチェック処理に移行する。ステップＳ３１においては、所定範囲内の黒ラン長が存在した場合には、後述する処理により、画素パターンのポインタptr が１だけ歩進する。ステップＳ３２においては、五線が検出されたか否かが判定され、結果が否定の場合にはステップＳ３３に移行する。ステップＳ３３においては、cpにBACKGROUNDをセットし、lengthに定数THR3に１を加算した値をセットする。これは、矩形の下端より下に広い白領域が存在するものと仮定して五線検出を試みるためである。ステップＳ３４においては、再度ラン状態のチェック処理が行われ、ステップＳ３５においては、五線が検出されたか否かが判定され、結果が肯定の場合には図５のステップＳ４２に移行するが、否定の場合にはステップＳ３６に移行する。
【００３３】
ステップＳ３６〜４１は、下端まで走査しても五線が検出されなかった場合に、五線検出を行うｘ座標を左右に移動する処理を行う。ステップＳ３６においては、xflag がXPLUS と等しいか否かが判定され、結果が肯定の場合には、ステップＳ３７でｘに１を加算し、ステップＳ３８に移行する。ステップＳ３８においては、ｘの値が矩形の右端より大きいか否かが判定され、結果が肯定の場合にはステップＳ３９に移行して、xflag に定数XMINUS（例えば０）を、ｘに（xstart−１）をセットし、ステップＳ２１に戻る。ステップＳ３６において判定結果が否定の場合には、ステップＳ４０に移行してｘから１を減算し、ステップＳ４１においては、ｘが矩形の左端より小さいか否かが判定され、結果が否定の場合にはステップＳ２１に戻るが、肯定の場合には、ｘを左右に移動しても五線が検出されなかったので、図５のステップＳ４８に移行する。
【００３４】
図５に移行して、ラン状態のチェックにより、五線が検出された場合に移行するステップＳ４２においては、検出された五線の上端と矩形画像の上端とのｙ幅が定数THR4より大きいか否かが判定され、結果が肯定の場合にはステップＳ４３に移行する。なお、THR4は、五線が検出された後、残りの矩形中に更に五線を検出できるほどの縦方向の隙間があるかどうかを判別するためのしきい値であり、例えば五線全体の幅（height = thick×4 + blank ×4 ）の２倍程度の値としてもよい。
【００３５】
ステップＳ４３においては、五線検出を行う矩形を五線より上の部分に縮小し、ステップＳ４４においては、図４、５に示す五線走査位置検出処理を再帰的に呼び出す。従って、ステップＳ４４においては、ステップＳ４３において縮小された矩形領域において五線検出処理を行うことになり、この処理の中で更に再帰呼び出しが行われる可能性もある。ステップＳ４５においては、検出された五線と矩形画像の下端とのｙ幅がTHR4より大きいか否かが判定され、結果が肯定の場合にはステップＳ４６に移行する。ステップＳ４６においては、五線検出を行う矩形を五線より下の部分に縮小し、ステップＳ４７においては、五線走査位置検出処理を再帰的に呼び出す。以上のような再帰呼び出し処理により、全ての五線が検出される。
【００３６】
ｘ座標を左右に移動して走査しても五線が検出されなかった場合には、図４のステップＳ４１から図５のステップＳ４８に移行する。ステップＳ４８においては、線幅や間幅を検出する際の誤差のレベルを示す変数level が０（誤差が小さい）であるか否かが判定され、結果が肯定の場合にはステップＳ４９に移行し、level を１にセットする。そして、ステップＳ５０において、再帰的に五線走査開始位置検出処理を呼び出し、大きな誤差まで許容する五線検出を行う。
また、この五線検出後に、求められた五線位置で、線幅および間幅とを再計算（例えば五線全体の幅から間幅を求める）することにより、後の認識でのしきい値の基準となる五線の線幅および間幅の精度を上げる。
【００３７】
図７は、図４のステップＳ２６他のラン状態のチェック処理を示すフローチャートである。ステップＳ６０においては、CPがFOREGROUND、即ち黒画素であるか否かが判定され、結果が肯定の場合にはステップＳ６１に移行する。ステップＳ６１においては、lengthと五線の線幅thick との差の絶対値を変数error にセットする。ステップＳ６２においては、error 値が現在のlevel 値によって参照される定数THR1(level) 以下であるか否かが判定され、結果が肯定の場合にはステップＳ６３に移行し、変数kindに線を意味する定数LIN がセットされる。しかし、結果が否定の場合にはステップＳ６４に移行し、変数kindに五線以外の領域を意味する定数ELS がセットされる。
【００３８】
ステップＳ６０における判定結果が否定の場合にはステップＳ６５に移行する。ステップＳ６５においては、lengthと五線の間幅blank との差の絶対値を変数error にセットする。ステップＳ６６においては、error 値が現在のlevel 値によって参照される定数THR2(level) 以下であるか否かが判定され、結果が肯定の場合にはステップＳ６７に移行し、変数kindに線間を意味する定数SPC がセットされる。しかし、結果が否定の場合にはステップＳ６８に移行する。
ステップＳ６８においては、lengthが定数THR3より大きいか否かが判定され、結果が肯定の場合にはステップＳ６９に移行して、変数kindに長い白ランを意味する定数LNG がセットされる。しかし、結果が否定の場合にはステップＳ７０に移行し、変数kindに五線以外の領域を意味する定数ELS がセットされる。なお、定数THR1(level) 、THR2(level) 、THR3の値は例えば、THR1(0)=THR2(0)=thick 、THR1(1)=THR2(1)=thick ×２、THR3=blank×２であってもよい。
【００３９】
ステップＳ７１においては、kindがELS であるか否かが判定され、結果が肯定の場合には五線以外の領域であるので、ステップＳ７８に移行してポインタptr を０にセットし、ステップＳ７９に移行する。ステップＳ７２においては、kindと、ポインタptr によって参照されるデータアレイstaffarray(ptr) の値とが等しくないか否かが判定され、結果が肯定の場合にはステップＳ７８に移行するが、否定の場合にはステップＳ７３に移行する。staffarray(ptr) は、五線走査開始位置になる白ラン、黒ランの並びを検出するための辞書配列であり、staffArray(11) = (LNG,LIN,SPC,LIN,SPC,LIN,SPC,LIN,SPC,LIN,LNG)のようなデータ配列を取る。なお、LNG は充分広い白ラン、LIN は線と考えられる黒ラン、SPC は線間と考えられる白ランに対応する。
【００４０】
ステップＳ７３においては、kindがLIN に等しいか否かが判定され、結果が肯定の場合にはステップＳ７４に移行し、五線位置（直前の黒画素ランの中点座標）を仮の五線位置バッファに格納する。ステップＳ７５においては、ポインタptr に１を加算し、ステップＳ７６においては、ptr が１１になったか否かが判定される。そして、結果が肯定の場合には、ステップＳ７７に移行し、五線検出フラグdetectを１にセットするが、否定の場合にはステップＳ７９に移行する。ステップＳ７９においては、lengthを０にセットし、ｃの画素値をｃｐにセットする。ステップＳ８０においては、detectを０にセットする。図２右側に示すような五線を走査した場合には、画素の色が変化する度に図７に示すラン状態のチェック処理が呼び出され、各画素のラン状態がstaffarray(ptr) と一致するので、ptr がカウントアップし、１１に達すると五線が検出されたものと判断される。
【００４１】
本発明では、後の認識でのしきい値の基準となる五線の線幅および間幅の精度を上げるために、五線検出後に、求められた五線位置で、線幅および間幅とを再計算（例えば五線全体の幅から間幅を求める）している。
以上、実施例を説明したが、次のような変形例も考えられる。五線シフト量の検出処理においては、５点のうちの、黒画素である点の割り合いをチェックしているが、それぞれの点の上下近傍に黒画素が存在する点の割り合いを求めるようにしてもよい。
【００４２】
実施例においては、完全な五線のパターンを検出したときのみ、五線検出と判断する例を開示したが、例えば五線の配列の内の３本（LIN,SPC,LIN,SPC,LIN ）以上の線の配列によって五線があると判断し、上下の広い余白の間の距離が五線幅と一致した場合には加線や記号が無いと判断できるので、これから五線を検出してもよい。五線のシフト量の検出処理の始点としては、各黒ランの中点とする例を開示したが、偶然に、始点の線幅が太くあるいは細くなっていた場合には始点座標が不適切な位置になってしまう。従って、検出した五線幅の中を線幅および間幅データに基づいて均等に分割した点を始点としてもよい。
【００４３】
【発明の効果】
以上述べたように、本発明は、ハンディスキャナで楽譜画像データを取り込み、楽譜画像データの一部が上下にずれて、五線の傾きが直線状でない場合であっても、またかすれやつぶれがあっても確実に五線位置を検出するとともに五線の線幅および間隔を精度良く検出することが可能となるという効果がある。更に、五線の各部において上下へのシフト量を検出し、該シフト量に基づき画像データを修正するので、ハンディスキャナによる上下のずれを含む画像データを正確に修正することができるという効果がある。
【図面の簡単な説明】
【図１】本発明の楽譜認識装置の実施例の構成を示すブロック図である。
【図２】五線走査開始位置の検出動作を示す説明図である。
【図３】ＣＰＵ１のメイン処理を示すフローチャートである。
【図４】五線走査開始位置検出処理を示すフローチャート（１）である。
【図５】五線走査開始位置検出処理を示すフローチャート（２）である。
【図６】図３のＳ３〜Ｓ５の処理を詳細に示すフローチャートである。
【図７】Ｓ２６のラン状態のチェック処理を示すフローチャートである。
【図８】五線シフト量検出動作を示す説明図である。
【符号の説明】
１…ＣＰＵ、２…ＲＯＭ、３…ＲＡＭ、４…ハードディスク装置、５…フロッピディスク装置、６…ＣＲＴディスプレイ装置、７…ＣＲＴインターフェース回路、８…キーボード、９…キーボードインターフェース回路、１０…プリンタ、１１…プリンタインターフェース回路、１２…スキャナ、１３…スキャナインターフェース回路、１４…ＭＩＤＩインターフェース回路、１５…バス
【図１】
0003812835.tif 000002
【図２】
0003812835.tif 000003
【図３】
0003812835.tif 000004
【図４】
0003812835.tif 000005
【図５】
0003812835.tif 000006
【図６】
0003812835.tif 000007
【図７】
0003812835.tif 000008
【図８】
0003812835.tif 000009