(57)【要約】【課題】服飾型紙をデジタイズする方法を提供する。【解決手段】まず物理的型紙がラスター画像にスキャンされる。ラスター画像中の輝度エッジの如き特徴が認識され、デジタル型紙、すなわち物理的型紙に関する適切な情報の組が生成される。適切な情報には物理的型紙の形と大きさ、外周上の角、その上に描かれた直線や曲線を含む。デジタル型紙は、点座標の列やスプライン・パラメーターなどの曲線の描写のような外周の明示的表現を含む。【選択図】図１
2005506620.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも１つの形を表現した少なくとも１つのデータを受信する工程と、
その少なくとも１つのデータ内のその少なくとも１つの形の少なくとも１つの外周を見分ける工程と、
その少なくとも１つの外周の少なくとも１つの角を見分ける工程と、
を有する、形をデジタイズする方法。
【請求項２】
コンピュータープログラムを含む記憶装置と、
コンピュータープログラムを実行する時に、
少なくとも１つの形を表現した少なくとも１つのデータを受信し、
その少なくとも１つのデータ内のその少なくとも１つの形の少なくとも１つの外周を見分け、
その少なくとも１つの外周の少なくとも１つの角を見分ける、
ように配置された処理装置と、
を有する、形をデジタイズするシステム。
【請求項３】
実行されたとき、少なくとも１つの形を表現した少なくとも１つのデータを受信する第１モジュールと、
実行されたとき、その少なくとも１つのデータ内のその少なくとも１つの形の少なくとも１つの外周を見分ける第２モジュールと、
実行されたとき、その少なくとも１つの外周の少なくとも１つの角を見分ける第３モジュールと、
を有するソフトウェア・プログラムを有し、処理装置によって実行された時、形をデジタイズするように配置されたソフトウェア記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は服飾スタイルのデジタイズ、特に画像スキャン技術による服飾スタイルの自動あるいは半自動デジタイズに関する。
【背景技術】
【０００２】
一般に衣服は幾つかの布片を縫い合わせて作られる。ゆえに衣服のデザインは大方においてそれらの布片の形によって決定される。それらの布片と正確に同じ大きさと形の厚紙が、衣服のデザインを決定するそれらの形を記録するために伝統的に使われる。これらの様々な形をした厚紙は当該産業では型紙と呼ばれる。ひとつの衣服を構成する型紙の集まりをスタイルと呼ぶ。そのようなスタイルが与えられれば、その形を写すことによって布片を切り縫い合わせることにより、望むデザインの衣服を作ることができる。
【０００３】
工業的状況においては、多くの異なるデザインやサイズの衣服が作られるので、何百何千ものスタイルを正しく管理するのは大変である。そのため、当該産業に衣服デザインの記録および管理の電算化が導入された。電算化されたデザイン管理システムにおいては、各布片の形は曲線や直線の集合として格納され、デジタル型紙を構成する。そのようなデジタル型紙から、実物大の形を紙の上にプロッターで描画することや、さらには、ペンの代わりにカッターを使う特別なプロッターでその形に紙や布を自動的に切ることは容易である。
【０００４】
そのようなデザインの電算化には多くの利益がある。各布片の形や大きさがデジタル記録されていれば、そのようなデザインの大きな集まりを管理するのははるかに容易である。さらに、デジタイズされたデザインを遠方に送信してそこで衣服を生産することも可能である。しかし最大の利点はグレーディングの容易さにあるかもしれない。普通、工業的状況においては同じデザインでいくつか異なるサイズの衣服を生産しなければならない。異なるサイズの衣服を作るためにスタイルを補正することをグレーディングと呼ぶ。このグレーディングが、計算機上で行えばはるかに容易になるのである。
【０００５】
このシステムの入力と出力は物理的である。出力はもちろん実際に生産される衣服である。理論的には、生産以外の全工程を電算化することが想像可能である。ファッションデザイナーやスタイリストはドレスやスーツを電算機の画面上でデザインをすることもできる。しかし、少なくとも現世代のスタイリストのほとんどにとっては、物理的様式すなわち厚紙でできた型紙を使うほうがずっと自然で用意である。そのため、工程のはじめにおいて、スタイリストは一組の物理的型紙であるスタイルを作り、ついで各型紙を「モデラー」と呼ばれる人が「デジタイザー」を使って各型紙の周囲をなぞることによってそれらはデジタイズされる。
【０００６】
物理的型紙をデジタイズするこの過程は、遅く労働集約的なものであった。典型的には、モデラーは型紙を大きなデジタイザー板に固定し、型紙の周囲上の適切な点を（特殊なポインターによって）一つ一つ指し示し、デジタイザー板にポインターの位置を測定し記録する合図を送るボタンを押すことによって、型紙の周囲をなぞるのである。
【０００７】
米国特許第４５７５６２８号（１９８６年、バンカート他）は、型紙スキャナーを教える。しかし、ひとつには型紙の外周の角を自動的に見つけることができないため、このスキャナーはあまり広く使われてこなかった。型紙の外周はもっとも重要な特徴であり、外周上の点を角とそうでない点とに分別することは非常に重要である。その証拠に、角は外周上もっとも目立つ特徴であり、グレード点にも頻繁に使われる。現在使用されているほとんどすべてのデザイン管理システムは角である点を他の点とは異なるように取り扱っている。そのため、先行技術においてはユーザーはデジタイザー板を使って手動でデジタイズするか、既存の型紙スキャナーを使って後に手動で角に印をつける必要があった。
【０００８】
本発明は物理的型紙をデジタイズするこの過程に関する。
【発明の開示】
【発明が解決しようとする課題】
【０００９】
従って、服飾型紙を自動デジタイズする方法を与えるのが本発明の目的である。さらに、服飾型紙を、出力データが角の位置を含む型紙の形についての情報を含むように自動デジタイズする方法を与えるのも本発明の目的である。
【課題を解決するための手段】
【００１０】
図１に本発明のプロセスを示す。第１段階において、物理的型紙１０１つまり衣服の一部である布片の形をした紙が、ラスター画像１０２にスキャンされる。これは現在のデジタルイメージング技術のどれを使っても行うことができる。たとえば、オフィスで普通に見られるフラットベッドスキャナー１０３やＣＣＤデジタルカメラ１０４を使うことができる。工業的状況においては、大判スキャナー１０５が使われるであろう。結果として得られるのがラスター画像１０２すなわち物理的型紙のデジタル的複写である。第２段階においては、ラスター画像内の輝度エッジのような特徴が認識され、デジタル型紙１０６すなわち物理的型紙の適切な情報のデジタル形式の集合が生成される。適切な情報には物理的型紙の形と大きさ、物理的型紙上に描かれた直線や曲線が含まれる。この情報は有用な形式、つまり、機械によって操作が容易な表現でデジタル表現される。例えば、プロッターを制御して型紙の外周を描画するには、外周の連続した点の座標が明示的に知られていることが必要である。そのため、デジタル型紙は外周の明示的な表現を含むべきである。そのような明示的表現とは、点の座標の列であるかもしれないし、スプライン・パラメーターのような何らかの曲線の描写であるかもしれないが、あきらかにラスター画像ではありえない。この情報を、非常に異なった表現であるラスター画像から抽出することは非自明な仕事である。
【００１１】
第１段階：スキャン
第１段階１０７では物理的型紙をラスター画像にスキャンする。これは現在のデジタルイメージング技術のどれを使っても行うことができる。たとえば、オフィスで普通に見られるフラットベッドスキャナー１０３やＣＣＤデジタルカメラ１０４を使うことができる。工業的状況においては、大判スキャナー１０５が使われるかもしれない。結果として得られるのがラスター画像１０２すなわち物理的型紙のデジタル的複写である。
【００１２】
第２段階：認識
第１段階から型紙のラスター画像１０２を得、本方法ではそれから適切な情報を抽出する。型紙についての最も重要な一つの情報は外周１０８である。重要な特徴には他に型紙上に描かれた直線や曲線１０９がある。これらをここでは内部曲線と呼ぶ。外周も内部曲線もラスター画像内に曲線として現れる。ゆえに、本方法ではラスター画像上の曲線を認識する。曲線を検出・認識するアルゴリズムは複数考えられるが、ラスター画像内の曲線を安定して認識するアルゴリズムならどれでも本発明に使用できる。
【００１３】
そのようなアルゴリズムは曲線のように位置するラスター画像内の特徴的なピクセルたちを見つける。そのようなピクセルがどのような特徴をもつかはアルゴリズムがどのような曲線を探しているかによる。背景と型紙の色が知られている場合には、外周上のピクセルは二つの色の境界として特徴づけられる。内部曲線上のピクセルは型紙の色と異なるその色によって特徴づけられる。そのような単純な特徴づけはそれだけでは十分でないかもしれないが、それらは曲線の位置を限定するための局所的条件として役に立つ。局所的条件を満たす候補ピクセルの集合を見つけた後に、アルゴリズムはそれらのピクセル上に横たわる曲線を見つける。
【００１４】
本段階の結果はここではデジタル型紙と呼ぶデータの集合である。それには外周と内部曲線を構成する曲線の表現を含む。その表現は曲線状の連続した点の座標を容易に計算できるようなものである。加えて、デジタル型紙には、認識番号、製作日、どのような織物が使われるべきか等の付随的データを含むこともできる。それらの付随的データはシステムに手動入力することができる。デジタル型紙は元のラスター画像さえ含むことができる。そうすれば、第２段階における間違いが後に見つかった場合、あるいは異なるパラメータを用いて、認識を再び行うことができる。
【００１５】
第３段階：手動データ入力（自由選択）
各型紙には認識番号、製作日、どのような織物が使われるべきか等のデータが付随する。これらはオペレータが手動で入力することができる。付随データの一部は物理的型紙上に書かれている。例えば、グレーディングに関する情報は時に型紙上のいくつかの点の近くにかかれた数字として表現される。図１に見える型紙のひとつ１１１はその例である。重要な情報を表す手書きの数字を白い矢印が指し示す。機械でこの数字を読めれば最善であるが、型紙上に散らばったすべての情報を安定して認識することは技術的に難しいかもしれない。そのかわりにオペレータがこれらのデータを入力することもできる。これを容易にするため、システムは型紙のラスター画像を電算機の画面上に表示してオペレータが画面からそれらのデータを読むことができるようにすることもできる。グレーディングに関する情報を入力する時には、画像の一部を番号から番号へ移動して表示することもできる。
【発明を実施するための最良の形態】
【００１６】
ここでは本発明の実施例を詳細に述べる。実施例はスキャナーを伴う標準的なＰＣシステムである。ハードウェア構成はコンピュータ機器業者から入手可能な普通のもので、本技術分野で熟練したものなら誰でも簡単に構成することができる。
【００１７】
スキャン
物理的型紙はスキャナーでスキャンされ、ＰＣ１１０に送られ、ビットマップ形式で保存される。形式は任意の知られたあるいは所有された形式でよい。以下では、スキャンされた画像の背景が、物理的型紙（すなわち衣服の一部である布片の形をした厚紙）の色として使われない特定の色（例えば黒）として現れることを仮定する。その特定の色が何であるかは重要ではないが、黒は物理的型紙の紙の色としてはまず使用されない。背景が特定の色に見えるように手配することも容易である。図１に典型的なスキャンされた物理的型紙のビットマップ画像１０２を示す。
【００１８】
大判スキャナー
ここでは服飾型紙をスキャンするのに好都合なように改変した大判スキャナーについて述べる。図２ａに典型的な大判スキャナー１０５を示す。それは回転して紙２０３（あるいはなんであれユーザーのスキャンしたいもの）を保持表面２０４上で動かす一組のローラー２０１を備える。紙２０３はスキャンしたい面を下にして置かれる。保持表面２０４の下から、光学スキャンがなされる。ローラーは典型的にはフォームラバーでできており、これも回転する２本の棒２０２に取り付けられている。図２ｂに回転機構の拡大図を示す。保持表面２０４の下には、紙２０３の円滑な動きをもたらすため保持表面２０４の上にあるローラー２０１と協力して回転するもう一組のローラー２０５がある。
【００１９】
図２ｃは服飾型紙２０６がスキャナーに入れられるところを表す。通常の方形の紙ではなく服飾型紙をスキャンする時には、ある問題が生じる。服飾型紙にはこのような大きなスキャナーでスキャンするには小さすぎるものがあるのである。図２ｄに、ローラー２０１及び２０５の届かないところにひっかかった小さな服飾型紙２０７を示す。このような小さな服飾型紙には、オフィスなどで見られるフラットベッドスキャナー１０３のような、より小さなスキャナーを使うこともできるが、同じ大判スキャナーをすべての型紙に使えるほうが便利である。それを可能にするためには、動く表面が型紙と常に接触していなければならない。図２ｅには、ベルト２０８を２つの棒２０２の間に張ることによってそれを可能にしたところを示す。ベルトもまたフォームラバーでできている。この変更を加えたスキャナー全体を図２ｆに示す。
【００２０】
典型的な大判スキャナーで服飾型紙のような不規則な形をした物体をスキャンするときのもうひとつの問題は、その物体２０９が不安定になりがちなことである。例えば、図２ｇに示すように、少数のローラー２０１としか接触していないときにはそれは回転しやすい。図２ｈに示したローラー２１０のように、ローラーをずっと幅広く、またはもっと進んで図２ｉに示したように棒全体を長いローラーにすることで、この問題は解決される。
【００２１】
この二つの変更を組み合わせて、図２ｊに示したように幅広いベルト２１１を２本の棒２０２の間に張ることで、上記の両方の問題が解決される。
【００２２】
動く表面を与える別のアプローチ（図２ｋ）は、大きな透明シート２１２と背景シート２１３を、それらがひとつの物体としてスキャナーを通るように使うことである。大小の服飾型紙（２０６、２０７）を２枚のシートの間に同様に挟むことができる。下になるシート２１２は透明であるため、スキャナーは型紙を光学的にスキャンすることができる。背景シート２１３は、ラスター画像に背景色として表れるように黒くなっている。
【００２３】
認識
ビットマップ画像から適切な情報を抽出する認識段階は、ＰＣシステム上で実行されるコンピュータープログラムとして実装される。プログラムはスキャンされたビットマップ画像を読み込み、抽出されたデータを含むコンピューターファイルを出力する。本実施例では、物理的型紙のもっとも重要な特徴である、型紙の外周が抽出される。
【００２３】
布をその外周にしたがって切るのであるから、型紙の外周はそのもっとも重要な特徴である。従って、型紙の外周を正確に見つけることが本システムにとって最も重要である。最も正確かつ安定した動作を達成するため、本実施例では、外周の特別な性質を使った、外周を検出するためだけの特別な方法を使用する。その方法では、外周が常に一つの閉曲線であるという事実を利用する。また、背景と型紙の色についての情報も使用する。具体的にはこの方法は、２つの色の境界である閉曲線で、画像のうちその閉曲線より外側の部分が背景色で塗りつぶされているようなものを見つける。いくつかのパラメータは画像の解像度に依存するので、具体性のためここでは７５ＤＰＩ（ドット・パー・インチ）を仮定する。
【００２４】
データ構造
この方法では、図３の３０１に図式的に示したように１つ以上の輪郭レコードを格納するデータ構造Ｃｏｎｔｏｕｒｓを保持する。各輪郭レコードは、図３の３０２に説明されているように、可変長配列やリストのような可変個のピクセルレコードを保持できるデータ構造をそなえたデータ構造である。各ピクセルレコードはいくつかのフィールドをそなえる（３０３）。フィールドｐｔ３０４はＶｅｃｔｏｒ型３０５の変数である。Ｖｅｃｔｏｒ型は、画像内のピクセル座標を表す整数変数である二つのフィールド、ｘ３０６とｙ３０７を持つ。他のフィールドには、実数変数であるｃｕｒｖ３０８や、ブール変数であるｃｏｒｎｅｒ３０９もある。輪郭レコード内の個々のピクセルレコードはインデックスによってアクセスされる。以下の文中及び図中では、Ｃという輪郭レコード内のレコード数はｓｉｚｅ（Ｃ）と記述され、またそのｎ番目のレコードはＣ［ｎ］と記述される。フィールドはＣ［ｎ］．ｐｔやＣ［ｎ］．ｃｕｒｖのように記述される。全てにわたって、インデックスは０から始まることとする。たとえば、輪郭レコードｃｔｒの最初のレコードはインデックスが０であり、ｃｔｒ［０］と記述される。最後のレコードはインデックスがｓｉｚｅ（ｃｔｒ）−１であり、ｃｔｒ［ｓｉｚｅ（ｃｔｒ）−１］と記述される。輪郭レコードは閉曲線を表すのに使われるため、データ構造は周期的であることとする。つまり、最後のレコードの後には、インデックスに関する限り、最初のレコードが再び現れる。したがって、ｃｔｒ［ｓｉｚｅ（ｃｔｒ）］はｃｔｒ［０］と同じレコードを表し、もっと一般に、ｃｔｒ［ｎ＋ｓｉｚｅ（ｃｔｒ）］は、任意の整数ｎについてｃｔｒ［ｎ］と同じレコードを表す。特に、記法の単純化のため、負の数のインデックスも許すこととする。したがって、たとえばｃｔｒ［−１］はｃｔｒの最後のレコードを表し、ｃｔｒ［ｓｉｚｅ（ｃｔｒ）−１］と同じである。
【００２５】
外周検出
図４にビットマップ画像から外周を検出する方法のフローチャートを示す。開始点は４０１である。ステップ４０２では、下に説明するように、データ構造ＣｏｎｔｏｕｒｓがサブルーチンＩｎｉｔｉａｌｉｚｅ−Ｃｏｎｔｏｕｒｓによって初期化される。次に２つのネストしたループがある。外側のループは、繰り返しの始め４０３でｔｒｕｅにセットされるブール変数ｆｉｎｉｓｈｅｄが最後４１６までｔｒｕｅにとどまるまで繰り返す。つまり、もし変数ｆｉｎｉｓｈｅｄが４１６でｆａｌｓｅであるならば、外側のループは終了せずに４０３に戻る。内側のループ（初期化ステップ４０４、インクリメントステップ４０５、終了検査ステップ４１５とで制御される）は、Ｃｏｎｔｏｕｒｓ内のすべての輪郭レコードについて繰り返す。現在の輪郭レコードは、内側のループ内ではｃｔｒと呼ばれる。内側のループの繰り返しにおいて、現在の輪郭レコードｃｔｒはいくつかのサブルーチンに参照によって渡される。各サブルーチンは下にさらに詳細に説明する。まず、サブルーチンＳｈｒｉｎｋが呼ばれる（４０６）。戻り値はｔｒｕｅかｆａｌｓｅのどちらかの値をとるブール型である。戻り値が検査され（４０７）、もしｔｒｕｅならば変数ｆｉｎｉｓｈｅｄにｆａｌｓｅ値が与えられる（４０８）。次に、サブルーチンＳｔｒｅｔｃｈ−Ｓｈｒｉｎｋが呼ばれる（４０９）。次にサブルーチンＬｏｏｐ−Ｃｈｅｃｋ（４１０）が呼ばれ、戻り値がｔｒｕｅならば（４１１）、サブルーチンＢａｄ−Ｃｏｎｔｏｕｒ４１２が呼ばれる。もしその戻り値もｔｒｕｅならば（４１３）、現在の輪郭レコードｃｔｒはＣｏｎｔｏｕｒｓから取り除かれる（４１４）。４１５においては内側のループがＣｏｎｔｏｕｒｓ内のすべての輪郭レコードについて繰り返されたかどうかが検査される。外側のループを終了した後、Ｃｏｎｔｏｕｒｓ内に残った輪郭のうち最大のものが、外周として選択され（４１７）、ｃｔｒと呼ばれる。次にｃｔｒが局所的な曲率を計算し（４１８）滑らかにし（４１９）、そして外周の角を見つける（４２０）、３つのサブルーチンに渡される。この方法はｃｔｒを戻り値として返す。
【００２６】
この方法の出力は戻り値ｃｔｒに格納された輪郭である。それは一続きのピクセルレコードであり、各ピクセルレコードはピクセル座標（ｐｔ）、その点での曲率（ｃｕｒｖ）、そしてその点が角であるかどうかの情報（ｃｏｒｎｅｒ）を持つ。
【００２７】
Ｉｎｉｔｉａｌｉｚｅ−Ｃｏｎｔｏｕｒｓ
図５にサブルーチンＩｎｉｔｉａｌｉｚｅ−Ｃｏｎｔｏｕｓのフローチャートを示す。
まず、データ構造Ｃｏｎｔｏｕｒｓが空にされ、ここではｎｅｗｃｏｎｔｏｕｒと呼ぶひとつの新しいレコードが生成される（５１）。次にこの新しい輪郭が画像方形の外周を表すようにピクセルレコードが加えられる。Ｖｅｃｔｏｒ型のグローバル変数ＩｍａｇｅＳｉｚｅが画像方形の大きさを、ＩｍａｇｅＳｉｚｅ．ｘが画像の幅を、ＩｍａｇｅＳｉｚｅ．ｙが画像の高さをというように、ピクセルの数で保持するものとする。したがって、新しい輪郭は座標（０，０）から始まり、水平に（ＩｍａｇｅＳｉｚｅ．ｘ−１，０）まで行き（５２で加えれれる）、次に（ＩｍａｇｅＳｉｚｅ．ｘ−１，ＩｍａｇｅＳｉｚｅ．ｙ−１）まで行き（５３）、ついで（０，ＩｍａｇｅＳｉｚｅ．ｙ−１）まで（５４）、そして最後に（０，０）に帰る（５５）。図では「点（０，０）を加える」とは「ｐｔフィールドを（０，０）としたピクセルレコードを加える」などという意味である。新しい輪郭はＣｏｎｔｏｕｒｓに加えられる（５６）。
【００２８】
Ｓｈｒｉｎｋ
図６にサブルーチンＳｈｒｉｎｋのフローチャートを示す。このサブルーチンは輪郭レコードｃｔｒへの参照を引数に呼ばれる。つまり、このサブルーチン内でｃｔｒになされるいかなる変更（ピクセルレコードを加える、ピクセルレコードを削除する、等）も、呼び出し側で実引数として与えられた輪郭レコードに直接なされる。プログラミング言語Ｃ＋＋においては、これは「参照呼出し」法という関数呼び出し法によってなされる。他の言語も類似の方法を持ち、それらの使用は本技術分野でよく知られている。
【００２９】
まず、ブール変数ｍｏｖｅｄがｆａｌｓｅに初期化され（６０１）、ｃｔｒはもうひとつの新しい輪郭レコードデータ構造Ｃににコピーされる（６０２）。次に、その輪郭レコードの各ピクセルレコードについて、インデックスｉを０からｓｉｚｅ（ｃｔｒ）−１まで増加させつつループを繰り返す（これは初期化ステップ６０３、インクリメントステップ６１１、終了検査ステップ６１２とで制御される）。ループ内では、ＶｅｃｔｏｒＣ［ｉ＋１］．ｐｔ−Ｃ［ｉ−１］．ｐｔの値がＶｅｃｔｏｒ型変数ｖに格納される（６０４）。Ｖｅｃｔｏｒ型は整数型の座標を持つことに注意。次に、ｖの長さ｜ｖ｜（すなわち、（ｖ．ｘ）２＋（ｖ．ｙ）２の正の平方根）がとられ、その整数部分が整数変数ｄに格納される（６０５）。ここで、関数Ｉｎｔ（ｔ）は数ｔの整数部分を与えるものとする。さらに具体的には、それは、もしｔが負でないならばｔより大きくない最大の整数を与え、ｔが負であるならばｔより小さくない最小の整数を与える。もしｄが０ならば（６０６）、ループは次のインデックスに進む。そうでないならば（Ｉｎｔ（−ｖ．ｙ／ｄ），Ｉｎｔ（ｖ．ｘ／ｄ））の値がｖに代入され（６０７）、点ｃｔｒ［ｉ］．ｐｔ＋ｖが画像方形内に入っているかどうかが調べられる（６０８）。もし入っているならば、その点のピクセルが背景ピクセルであるかどうかが調べれられる（６０９）。もしそれが背景ピクセルであるならば、輪郭レコードｃｔｒ内のｃｔｒ［ｉ］．ｐｔに格納された点座標が座標ｃｔｒ［ｉ］．ｐｔ＋ｖに変更され、変数ｍｏｖｅｄにはｔｒｕｅが代入される（６１０）。ループ終了後、変数ｍｏｖｅｄがブール型戻り値として返される。これは、輪郭レコードｃｔｒ内の点座標がひとつでもサブルーチン内で変更されたかどうかを表す。このサブルーチンは輪郭の各点を、背景でないピクセルにぶつからない限り「内側」方向（ｖ）に動かす効果を持つ。
【００３０】
Ｓｔｒｅｔｃｈ−Ｓｈｒｉｎｋ
図７にサブルーチンＳｔｒｅｔｃｈ−Ｓｈｒｉｎｋのフローチャートを示す。前記のサブルーチンＳｈｒｉｎｋと同様、このサブルーチンも輪郭レコードｃｔｒへの参照を引数に呼ばれる。ネストした２つのループがある。外側のループは、繰り返しの最初（７０１）にｔｒｕｅに初期化されるブール型変数ｎｏｃｈａｎｇｅが最後（７１４）までｔｒｕｅにとどまるまで繰り返す。内側のループ（これは初期化ステップ７０１、インクリメントステップ７１２、終了検査ステップ７１３とで制御される）はｃｔｒ内のすべてのピクセルレコードについて、インデックスｉを０からｓｉｚｅ（ｃｔｒ）−１まで増加させつつループを繰り返す。内側のループ内では、まず最初に、輪郭内の連続したインデックスの２つのピクセルレコード（７０２）あるいはインデックスが２だけ違う２つのピクセルレコード（７０３）が同じ点座標（ｐｔフィールド）を持つかどうかが試される。そのどちらかの場合には、ピクセルレコードｃｔｒ［ｉ］は輪郭レコードｃｔｒから除かれ（７０４）、ブール変数ｎｏｃｈａｎｇｅにはｆａｌｓｅが代入される（７０５）。そのどちらでもない場合には、連続した二つのレコードが遠く離れすぎた（どちらかの座標が１より大きく異なる）点座標を持っているかどうかを次のようにして試す。ベクトル差ｃｔｒ［ｉ］．ｐｔ−ｃｔｒ［ｉ−１］．ｐｔを変数ｖに格納し（７０６）、｜ｖ．ｘ｜＞１あるいは｜ｖ．ｙ｜＞１が成り立つかどうかを試す（７０７）。もしどちらも成り立たなければ、これらの点は遠く離れすぎてはいないのでループを継続する。もしどちらかが成り立つならば、新しいピクセルレコードがこれら２つのレコードの間に挿入される。新しい点をどこに挿入するべきかを見つけるため、｜ｖ．ｘ｜ａｎｄ｜ｖ．ｙ｜の両方が１以下になるまでｖを繰り返し（Ｉｎｔ（ｖ．ｘ／２），Ｉｎｔ（ｖ．ｙ／２））で置き換える（７０８，７０９）。次に、点座標ｃｔｒ［ｉ］．ｐｔ−ｖを持つピクセルレコードが輪郭レコードｃｔｒに、インデックスｉとｉ−１の間に挿入され（７１０）、ブール変数ｎｏｃｈａｎｇｅにｆａｌｓｅが代入される（７１１）。このようにすることで、新しい点は画像平面上で２点の間、ｃｔｒ［ｉ］．ｐｔのすぐ隣に位置することになる。もし新しい点とｃｔｒ［ｉ−１］．ｐｔがまだ遠すぎれば、次の外側の繰り返しで直される。このようにして、このサブルーチンは輪郭上の連続した点が各座標について最大１しか離れていない状態に保つ。
【００３１】
Ｌｏｏｐ−Ｃｈｅｃｋ
図８にサブルーチンＬｏｏｐ−Ｃｈｅｃｋのフローチャートを示す。このサブルーチンは輪郭レコードｃｔｒへの参照を引数に呼ばれる。このルーチンは輪郭中に、全輪郭よりも小さなループがあるかどうかを、２つのピクセルレコードのすべての組み合わせについてｐｔフィールドを比べることによってチェックする。したがって、このサブルーチンはｉが１からｓｉｚｅ（ｃｔｒ）−１まで走る外側のループ（これは初期化ステップ８０２、インクリメントステップ８１２、終了検査ステップ８１３とで制御される）と、ｊが０からｉ−１まで走る内側のループ（これは初期化ステップ８０３、インクリメントステップ８１０、終了検査ステップ８１１とで制御される）とを持つ。最初にブール変数ｌｏｏｐｆｏｕｎｄをｆａｌｓｅにする（８０１）。もしループが見つかれば、すなわちあるｉとｊについてｃｔｒ［ｉ］．ｐｔ＝ｃｔｒ［ｊ］．ｐｔであれば（８０４）、ループになった部分を表すピクセルレコード（インデックスｊからｉ−１）は、新しい輪郭レコードｎｅｗｃｏｎｔｏｕｒにコピーされ（８０５）、ｃｔｒからは除かれる（８０６）。ついでｎｅｗｃｏｎｔｏｕｒはＣｏｎｔｏｕｒｓに加えられ（８０７）、変数ｌｏｏｐｆｏｕｎｄにはｔｒｕｅが代入される（８０８）。インデックスｉはｃｔｒの短縮にしたがって補正され（８０９）、内側のループは終了する。このサブルーチンはｌｏｏｐｆｏｕｎｄを戻り値として返す。これはループが見つかったかどうかを表す。このサブルーチンは輪郭を自己交差の無い単純曲線に保つ効果を持つ。
【００３２】
Ｂａｄ−Ｃｏｎｔｏｕｒ
図９にサブルーチンＢａｄ−Ｃｏｎｔｏｕｒのフローチャートを示す。このサブルーチンは輪郭レコードｃｔｒへの参照を引数に呼ばれるが、ルーチン内ではｃｔｒを変更しない。まずｃｔｒがグローバル変数ＭｉｎＳｉｚｅで与えられる最低個数の点を持つかどうかが調べられる（９１）。ＭｉｎＳｉｚｅの最適な値は、入力画像の解像度を含むいくつかのパラメーターに依存する。数インチより小さな型紙はほとんど無いので、ＤＰＩ（ドット・パー・インチ）値の数倍くらいの値で十分小さい。もしｃｔｒがＭｉｎＳｉｚｅより少ない点しか持たない場合は、このサブルーチンはｔｒｕｅを戻り値として返す。もしこの輪郭がＭｉｎＳｉｚｅ以上の点を持つ場合は、この輪郭によって囲まれる領域の符号付き面積が計算される。符号付き面積は向き付け（時計回りか反時計回りか）によって符号を変え、輪郭がサブルーチンＩｎｉｔｉａｌｉｚｅ−Ｃｏｎｔｏｕｒｓで定義された初期輪郭と同じ向き付けを持つならば正の値をとり、逆向きならば負の値をとる。符号付き面積は次のようにして計算される。まず、蓄積変数ｖｏｌｕｍｅが０に初期化される（９２）。次に、単純なループ（これは初期化ステップ９２、インクリメントステップ９４、終了検査ステップ９５とで制御される）によって、ｃｔｒ［ｉ］．ｐｔ．ｙ×ｃｔｒ［ｉ−１］．ｐｔ．ｘ−ｃｔｒ［ｉ］．ｐｔ．ｘ×ｃｔｒ［ｉ−１］．ｐｔ．ｙの値がｖｏｌｕｍｅに０からｓｉｚｅ（ｃｔｒ）−１までのインデックスｉについて加えられる（９３）。このループを終了した後、ｖｏｌｕｍｅの符号を調べ（９６）、負ならばこのサブルーチンはｔｒｕｅを、そうでなければｆａｌｓｅを戻り値として返す。戻り値がｔｒｕｅであるときは、輪郭が悪い、すなわち小さすぎるか、向き付けが意図されたのとは逆になっていることを意味する。
【００３３】
Ｃａｌｃｕｌａｔｅ−Ｃｕｒｖａｔｕｒｅ
図１１にサブルーチンＣａｌｃｕｌａｔｅ−Ｃｕｒｖａｔｕｒｅのフローチャートを示す。このサブルーチンは輪郭レコードｃｔｒへの参照を引数に呼ばれる。このサブルーチンは輪郭の各ピクセル近傍での平均曲率を計算し、ピクセルレコードのｃｕｒｖフィールドに格納する。グローバル整数変数ＮＮが近傍の半径を決定する。ここに、ＮＮ＝Ｉｎｔ（ＤＰＩ／１８）（ＤＰＩ＝１５０なら８）を与える。ＤＰＩは画像の解像度をインチ毎のドット数で与えたものである。外側のループ（これは初期化ステップ１１０１、インクリメントステップ１１１３、終了検査ステップ１１１４とで制御される）は輪郭の各ピクセルレコードをインデックスｉを使って繰り返す。実数変数ｔｈｅｔａとｌｅｎが０に初期化される（１１０２）。内側のループ（これは初期化ステップ１１０３、インクリメントステップ１１１０、終了検査ステップ１１１１とで制御される）はインデックスｊによってそのピクセルレコードの近傍を、つまりインデックスｉ−ＮＮからｉ＋ＮＮまで走る。各ピクセルレコードについて、一つ前の点から今の点へのベクトル（ｖ１）と、今の点から次の点へのベクトル（ｖ２）が計算される（１１０４）。もしどちらのベクトルもゼロベクトルでないならば（１１０５）、これらのベクトルの間の角が、内積ｖ１・ｖ２（ｖ１．ｘ×ｖ２．ｘ＋ｖ１．ｙ×ｖ２．ｙで定義される）を使って、ａｃｏｓ（ｖ１・ｖ２／（｜ｖ１｜｜ｖ２｜））として計算される。ここで、アークコサインａｃｏｓ（ｘ）は、−１以上１以下のｘについて、ｃｏｓ（θ）＝ｘであるような０からπまでの間の角θを与える。角は符号付でなければならないので、ｖ１．ｘ×ｖ２．ｙ＜ｖ１．ｙ×ｖ２．ｘであるかどうか（１１０６）によって二通りの方法（１１０７、１１０８）で計算される。この角はｔｈｅｔａに加えられる。ベクトルｖ２の長さ｜ｖ２｜がｌｅｎに加えられる（１１０９）。内側のループが終了した後、曲率がａｎｇｌｅをｌｅｎで割ることによって計算され、ｃｔｒ［ｉ］．ｃｕｒｖに格納される（１１１２）。角が符号付きであるため、このサブルーチンによって小さなジグザグは滑らかにされ、近傍での平均曲率が計算されることに注意されたい。
【００３４】
Ｓｍｏｏｔｈ−Ｃｕｒｖａｔｕｒｅ
図１０にサブルーチンＳｍｏｏｔｈ−Ｃｕｒｖａｔｕｒｅのフローチャートを示す。このサブルーチンは輪郭レコードｃｔｒへの参照を引数に呼ばれる。このサブルーチンは曲率の値をガウシアンと畳み込むことによって滑らかにする。曲率の値は各ピクセルレコードのｃｕｒｖフィールドに格納されていることを仮定している。ｃｔｒは変更されるので、まず始めに曲率の値が実数値の周期的コンテナｃにコピーされる（１００１）。コンテナの大きさは同じである、つまりｓｉｚｅ（ｃ）＝ｓｉｚｅ（ｃｔｒ）とする。二つのループが使われる。外側のループ（初期化ステップ１００２、インクリメントステップ１００９、終了検査ステップ１０１０とで制御される）ではインデックスｉが０からｓｉｚｅ（ｃｔｒ）−１まで走り、内側のループ（初期化ステップ１００４、インクリメントステップ１００６、終了検査ステップ１００７とで制御される）ではインデックスｊがｉ−ＮＮからｉ＋ＮＮまで走る。ＮＮはＣａｌｃｕｌａｔｅ−Ｃｕｒｖａｔｕｒｅで使われたのと同じグローバル変数で、近傍の半径を格納している。内側のループの最初に実数変数ｓｕｍが０に初期化される（１００３）。数ｃ［ｊ］にｅｘｐ（−（ｊ−ｉ）２／（ＮＮ２×Ｒ））が乗算され、結果がｓｕｍに加えられる（１００５）。ここにＲは滑らかさを制御するパラメーターであり、ｅｘｐ（ｘ）はｘの指数関数を与える。ここで使われる値はＲ＝２である。内側のループが終了した後、ｓｕｍの値がｃｔｒ［ｉ］．ｃｕｒｖに格納される（１００８）。
【００３５】
Ｆｉｎｄ−Ｃｏｒｎｅｒｓ
図１２にサブルーチンＦｉｎｄ−Ｃｏｒｎｅｒｓのフローチャートを示す。このサブルーチンは輪郭レコードｃｔｒへの参照を引数に呼ばれる。このサブルーチンは、それぞれの近傍で最大でありかつ、前もって設定された最小値以上でもある曲率絶対値を持つ点を見つける。外側のループ（初期化ステップ１２０１、インクリメントステップ１２１１、終了検査ステップ１２１２とで制御される）ではインデックスｉが０からｓｉｚｅ（ｃｔｒ）−１まで走る。輪郭内の各ピクセルレコードについて、まずｃｏｒｎｅｒフィールドがｆａｌｓｅに設定される（１２０２）。次にその点での絶対曲率（曲率の絶対値）が調べられ（１２０３）、もしグローバル変数ＭｉｎＣに格納されている、角であるための最小曲率よりも大きくなければ、ループは継続する。ここに、ＭｉｎＣの値としてπ／８、あるいは０．３９２７という値を与える。もしこの点での絶対曲率がＭｉｎＣより大きければ、内側のループ（初期化ステップ１２０５、インクリメントステップ１２０７、終了検査ステップ１２０８とで制御される）を使って、このレコード近傍での最大絶対曲率が調べられる。実数値変数Ｍが０に初期化され（１２０４）、近傍内の各レコードについて更新される（１２０６）もしもともとの点が近傍での最大絶対曲率をもつことがわかれば（１２０９）、ｃｏｒｎｅｒフィールドにｔｒｕｅの値が代入される（１２１０）。
【産業上の利用可能性】
【００３６】
ここでは発明の好ましい特徴のうち特定のものだけを説明記述したが、本技術分野で熟練したものには多くの修正変更が思い浮かぶであろう。
【００３７】
例えば、型紙にあいた穴は基本的に同じ方法で見つけることができる。黒い物体の内側の黒くない物体を見つけるかわりに、黒くない物体の内側の黒い物体を見つけるだけのことである。穴の周囲にある角も、外周におけるのと同じ方法で見つけることができる。
【００３８】
さらに、曲線が見つけられた後、それを滑らかにすることもできる。たとえば、スプラインやベジェ曲線のようなパラメーター曲線をデジタイズされた曲線に合わせることもできる。その場合、パラメーター曲線では角はそこでの接ベクトルが非連続に変わることのできる点として他の点と異なった扱いをされるので、本発明で可能になるように角の位置が知られていることが重要である。その場合、デジタル型紙における外周の明示的な表現はそれらのパラメーター曲線のパラメーターであるかもしれない。
【００３９】
さらに、ここに公開された方法は必ずしも服飾型紙でないどんな形をデジタイズするのにも使用可能である。靴や鞄その他の縫製製品のための型紙は、この発明が使用可能な形の例の、より自明なもののいくつかにすぎない。
【００４０】
したがって、特許請求の範囲は、本発明の真の精神のうちにあるものとして、それらのすべての修正変更を含むものと意図されていると解されるべきである。
【図面の簡単な説明】
【図１】本発明のプロセスを示す。
【図２ａ】典型的な大判スキャナーを示す。
【図２ｂ】回転機構の拡大図である。
【図２ｃ】服飾型紙がスキャナーに入れられるところを示す。
【図２ｄ】小さな服飾型紙がローラーの届かないところに引っ掛かったところを示す。
【図２ｅ】二つの棒の間に張られたベルトを示す。
【図２ｆ】ベルトつきのスキャナー全体を示す。
【図２ｇ】少数のローラーとしか接触していない時に回転した型紙を示す。
【図２ｈ】はるかに幅広くされたローラーを示す。
【図２ｉ】棒全体を長いローラーにしたものを示す。
【図２ｊ】二つの棒の間に幅広いベルトを張ったスキャナーの改変を示す。
【図２ｋ】大きな透明のシートと背景シートをひとつの大きな物体としてスキャナーを通るものとして使うところを示す。
【図３】データ構造Ｃｏｎｔｏｕｒｓを図式的に表す。
【図４】ビットマップ画像から外周を検出する方法のフローチャートを示す。
【図５】サブルーチンＩｎｉｔｉａｌｉｚｅ−Ｃｏｎｔｏｕｒｓのフローチャートを示す。
【図６】サブルーチンＳｈｒｉｎｋのフローチャートを示す。
【図７】サブルーチンＳｔｒｅｔｃｈ−Ｓｈｒｉｎｋのフローチャートを示す。
【図８】サブルーチンＬｏｏｐ−Ｃｈｅｃｋのフローチャートを示す。
【図９】サブルーチンＢａｄ−Ｃｏｎｔｏｕｒのフローチャートを示す。
【図１０】サブルーチンＳｍｏｏｔｈ−Ｃｕｒｖａｔｕｒｅのフローチャートを示す。
【図１１】サブルーチンＣａｌｃｕｌａｔｅ−Ｃｕｒｖａｔｕｒｅのフローチャートを示す。
【図１２】サブルーチンＦｉｎｄ−Ｃｏｒｎｅｒｓのフローチャートを示す。
【図１】
2005506620.tif 000003
【図２ａ】
2005506620.tif 000004
【図２ｂ】
2005506620.tif 000005
【図２ｃ】
2005506620.tif 000006
【図２ｄ】
2005506620.tif 000007
【図２ｅ】
2005506620.tif 000008
【図２ｆ】
2005506620.tif 000009
【図２ｇ】
2005506620.tif 000010
【図２ｈ】
2005506620.tif 000011
【図２ｉ】
2005506620.tif 000012
【図２ｊ】
2005506620.tif 000013
【図２ｋ】
2005506620.tif 000014
【図３】
2005506620.tif 000015
【図４】
2005506620.tif 000016
【図５】
2005506620.tif 000017
【図６】
2005506620.tif 000018
【図７】
2005506620.tif 000019
【図８】
2005506620.tif 000020
【図９】
2005506620.tif 000021
【図１０】
2005506620.tif 000022
【図１１】
2005506620.tif 000023
【図１２】
2005506620.tif 000024
【国際公開パンフレット】
2005506620.tif 000025
2005506620.tif 000026
2005506620.tif 000027
2005506620.tif 000028
2005506620.tif 000029
2005506620.tif 000030
2005506620.tif 000031
2005506620.tif 000032
2005506620.tif 000033
2005506620.tif 000034
2005506620.tif 000035
2005506620.tif 000036
2005506620.tif 000037
2005506620.tif 000038
2005506620.tif 000039
2005506620.tif 000040
2005506620.tif 000041
2005506620.tif 000042
2005506620.tif 000043
2005506620.tif 000044
2005506620.tif 000045
2005506620.tif 000046
2005506620.tif 000047
2005506620.tif 000048
2005506620.tif 000049
2005506620.tif 000050
2005506620.tif 000051
2005506620.tif 000052
2005506620.tif 000053
【国際調査報告】
2005506620.tif 000054