このページでは、Inkscapeで自動画像トレース(画像の中の境界線を自動的に抽出してパスオブジェクトに変換する機能)を実行する際の設定パラメータと操作手順について紹介します。
- Contents
- トレースの大まかな手順
- トレースのタイプを選ぶ
- 単一スキャンとマルチカラーの違い
- 単一スキャン
- マルチカラー
- オプション
- トレースの実行
(参考:画像トレースの前提知識)
(参考:画像トレースをやってみた)
(2023.08.21:更新)
トレースの大まかな手順
まず、トレース処理の対象とする画像のデータを、ファイル > インポートメニューで、画像ファイルから取り込み、ビットマップ画像オブジェクトとしてキャンバスに追加します。
次に、その画像オブジェクトを選択した状態で、パス > ビットマップのトレースメニューを選びます。すると、ビットマップのトレースダイアログが表示されます。このダイアログ上でどんなトレースを実行するかをパラメータとして設定して適用ボタンを押すと、トレースが実行されてパスオブジェクトがキャンバス上に生成されます。(生成直後は画像にピッタリ重なっているので注意!)
ダイアログ上でのパラメータの設定は、次のように進みます。
- トレースのタイプを選ぶ
- トレースのタイプに応じた検出モードを選ぶ
- 検出モードに応じた細かいパラメータを指定する
- タイプ、モードに共通のパラメータ(オプション)を指定する
- トレースを実行する。
トレースのタイプを選ぶ
Inkscapeでは、単一スキャン、マルチカラー、ピクセルアートという、大きく3タイプのトレースのタイプ(手法)がサポートされています。
ビットマップのトレースダイアログには、トレースのタイプに対応させて、単一スキャンタブとマルチカラータブとピクセルアートタブがあります。まず、このタブの中から1つ選ぶことで、トレースのタイプを選びます。
単一スキャンタブとマルチカラータブは、任意の画像からパスオブジェクトを生成するためのタブ画面です。
ピクセルアートタブは、ゲームキャラクタのようなくっきり色分けされた画像からパスオブジェクトを生成することに特に向いた方法を用いるためのタブ画面です。
どのタイプのトレースを行うかで、タブの上でさらに指定すべきパラメータも異なります。
ここでは、とりあえず広く応用できそうな単一スキャンタブとマルチカラータブについてまとめていきます。ピクセルアートタブについては使用頻度が高くなさそうなので割愛します。
単一スキャンとマルチカラーの違い
単一スキャンは、指定したパラメータを使って、1回だけ境界線の抽出を行ってパスオブジェクトを生成するモードです。画像をモノクロの線画に変換したいときなどに主に使う方法だと思います。
マルチカラーは、パラメータを自動的に変化させながら、画像全体のトレース(すなわちスキャン)を複数回にわたって繰り返し、1回のトレースごとに1個のパスオブジェクトを生成するモードです。何回トレースを繰り返すか(最終的に生成されるパスオブジェクトの数)は、スキャン数で指定します。画像の見た目はあまり変えずにベクタデータに変換したいときに主に使う方法だと思います。
単一スキャン
単一スキャンでは、検出モードとして、何をもって境界線とするか、言い換えると、どんな部分を「白」とし、どんな部分を「黒」として、「黒」の部分をパス化するのかを指定します。
検出モードとして明るさの境界を選択した場合は、パラメータとして指定する明るさのしきい値と、ピクセルごとのRGBの3つの値の合計(明度)との比較で、白とするか黒とするかを決めて、白と黒の境界線をパスに変換します。しきい値を大きくすると、白と判定されるピクセルが減ります(すごく白っぽい色だけが白と判定される)。しきい値を仮に「1.0」にすると、あらゆる色のピクセルは黒と判定されるので、結果は、画像オブジェクト全体を真っ黒に塗っただけのパス(?)を生成することになります。
検出モードとしてエッジ検出を選択した場合は、同じコントラスト(明度の差)が続く部分を境界(エッジ)として抽出して、そのエッジを表現する少し幅のある描線になるようなパスを生成します。パラメータとしてはエラーしきい値を設定します。抽出したエッジから、このエラーしきい値を超える明度の差がある領域までを囲うパスを、そのエッジを表現する黒塗りのパスとして生成します。言い換えれば、エッジを表現する線の細さ(どのぐらいの幅の線でエッジを表現するか)を指定したものになるので、エラーしきい値が小さい場合はコントラストのエッジからそんなに大きい差のない明度のピクセルまでをエッジの線に含める(つまり線が太くなる)ことになり、ピクセル間の明度のちょっとした変化部分もくっきりとした線として描かれるようになるようです。
なお、Inkscapeの解説コンテンツでは、エッジ自体をどうやって抽出するのかは具体的に説明されていません(Canny法/キャニー法っていうエッジ検出方法らしいですが、ちょっと調べた程度で理解できるものではなく、「エラー」の意味もピンときません。何の「エラー」なんだろう?「error threshold」で検索してもめぼしい情報がヒットしない…)。
検出モードとして色の量子化を選択した場合、明度などではなく、色それ自体の変化するところをパスに変換します。色の数を指定すると、画像全体のたくさんある色をその数のグループに分類されるように区切って(これが量子化するということなのでしょう)その区切られたグループを順番に並べたときに、隣同士の色が互い違いに白と黒になるように塗りつぶされるパスを生成するそうです。うーん、なんとか理解しようとしてるのですが、やっぱりよくわかってないかもしれません。英語力のせいか?
検出モードとして、あと2つ、オートトレースと中心線トレースがあります。これらは、他の検出モードと違い「autotrace」という別のトレースツールの機能を利用してトレースを行うモードです。オートトレースのほうは、ネットを検索しても、他のモードの結果とどのように違う結果を出すのかよく分からないという声が多いです。あえて使う必要はないのかもしれません。
中心線トレースは、機能的に他のモードと全然違います。他のモードは画像を分けている領域の境界線をトレースしてパスを生成しますが、中心線トレースは画像を分けている領域の中心を通るようなパスを生成します。生成されたパスはフィルの塗りつぶしなしなので、ペンで書いた線画のようなパスになります。ただ、どこが中心なのかは予想がつきにくく、割りにざっくりしたところを通る線になります。詳しくは「中心線トレース」のページを。
マルチカラー
マルチカラーでも、単一スキャンと同じように、検出モードとして、何をもって境界線とするかを指定します。
検出モードとして明るさのステップを選択した場合は、明度のしきい値をパラメータで指定するスキャン数に応じて均等に変化させながら、繰り返しパスを生成します。
検出モードとして色を選択した場合は、画像全体の色をパラメータで指定するスキャン数と同じ数の大まかな色に分類した上で、大まかな色のそれぞれの領域を囲うパスを生成します。内部の処理として、どんな色でも白と黒の2色から成る画像に変換してからそれぞれの領域の境界線を抽出し、それを繰り返すらしいです。
検出モードとして白黒を選択した場合は、色を選択した場合と似ていますが、結果は灰色(いわゆるグレースケール)で濃淡だけを表現したものになります。
オプション
ここまでのパラメータの他に、各モードに共通のオプションパラメータがあります。
スペックル
これは、トレースの結果として生成した部分的なパス(サブパス)が、指定した数よりも小さいサブパスとなった場合は、そのサブパスを除外するというものです。除外されたサブパスは、最終的なパスオブジェクトには含まれません。なお、指定する数が何を単位とする数なのか不明なのですが、実際に試してみるとピクセル数と思われます。(パスオブジェクトとして一旦生成したサブパス群を結合する直前に、各サブパスの生成元となった画像領域のピクセル数をチェックして、少ない場合はパスオブジェクトに結合するのを中断する、といった感じかと)
角を平滑化
生成されるパスのノードでの曲がり具合を指定します。大きいと、よりスムーズにつながるようになります。
最適化
大きいほど、多くのノード同士をマージして簡略化します。ゼロに設定した場合は、境界線のカーブしているところに多数のノードが生成されるので、細かくガクガクと曲がったパスになります。
トレースの実行
ビットマップをトレースダイアログのプレビューを更新ボタンを押すと、プレビュー画面にトレースの結果が表示され、さらに、適用ボタンを押すとトレースの結果を使ってキャンバス上にパスオブジェクトが追加されます。追加されたパスオブジェクトは選択された状態になります。(ライブ更新という項目もあって、チェックを入れると、パラメータを変更するとすぐにプレビュー画面に反映されますが、パラメータによっては反映されない場合もあるので注意が必要です。)
さらに、ユーザーによる支援ありのトレースというチェックボックスがありますが、これは「SIOX(Simple Interactive Object Extraction)」と呼ばれる手法を使うか否かを指定するオプションで、背景っぽい色の領域を自動的にパス抽出の対象から除外してくれる手法らしいです(Interactiveとあるが、別にユーザがトレースの途中で操作を加えるという意味ではないらしい)。
検出モードやオプションの指定などがトレース結果のどのような違いを生むのか、詳しくはこの後の「画像トレースをやってみた」のほうでまとめておきます。