0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

オープンソース(AutoTrace)で画像をベクトル化

0
Posted at

画像をベクトル化(SVGやEPSに変換)したいけどIllustratorが使えず、オンラインの変換サービスも利用できない場合、PotraceやAutoTraceなどのオープンソースを使う手があります。AutoTraceはPotraceよりも前段の画像処理が充実していて;

  • 細線化できる
  • カラー画像を処理できる

などのアドバンテージがありますが最近あまり知られていないようなので、基本的な使い方をご紹介したいと思います。(各オプション等の詳細は続編で)

動作環境

AutoTraceは主にLinux上で動作します。
最近はWindows版もリリースされていますが、最新(0.31.10)のWindows版はどういうわけかうまく動作しないです。(資材にlibglibやlibgobjectなどのdllが同梱されているが、exeからの依存関係がない??)
リリース前の版(travis-20200219.65)は動作しますが、PNGが読み込めない、SVG出力の場合はsvgタグにxmlns属性が埋め込まれない等の制限があるようです。
なのでLinux版をおすすめします。

導入

RHELの8や9(クローン含む)ではパッケージに採用されています。
RHELの10や他のLinuxではGitHubからソースをダウンロードしてビルドする必要があります。ソースをダウンロードし展開したら、INSTALLの「1. Basic Installation」に書かれている通りにすれば、特に何事もなくビルドされインストールが完了します。

使い方

$ autotrace input.bmp

で画像をベクトル化したEPSが標準出力に出力されます。
SVGにする場合は

$ autotrace input.bmp -output-format svg

とします。
ファイルに出力するにはリダイレクトするか

$ autotrace input.bmp -output-file output.svg

とします。この場合「-output-format svg」は省略できます。

さまざまな対象の処理例

例1 単色塗りつぶしパターン

もっとも基本的な使い方です。毛筆や万年筆などで手書きされた文字からロゴマークデザインを起こす、などの利用シーンが想定されます。

  • 入力画像
    形状のバリエーション(直線、曲線、コーナー)が網羅され、ベクトル化の結果がほどよい複雑さになるように手作りした画像例です。
    AutoTrace_Ex1_input.png

  • 出力EPS(図形表現部分のみ抜粋)
    行末mは「moveto」でカレント位置の移動、lは「lineto」で直線、cは「curveto」で3次ベジェ曲線、fは「closepath」で輪郭を閉じて塗りつぶすことを表します。

10 33 m
69 12 l
69.001 22.404  73.966 29.253  75.671 39  c 
77.152 47.465  74.308 54.539  77.615 63  c 
81.189 72.144  92.085 83.964  90 94  c 
73.095 89.729  64.067 70.828  48 64.999  c 
36.198 60.718  35.831 77.911  27.042 79.079  c 
22.311 79.707  21.762 71.011  20.783 68  c 
19.157 62.996  15.176 59.040  13.843 54  c 
12.046 47.209  12.019 40.076  10 33  c 
f
  • この図形表現をプロットすると以下のようになります。
    各ベジェ曲線は$G^1$連続で接続されています(接点で接線の方向が一致)。ただし、右上の「耳」の先端だけそうなっていませんが、これはコーナーが検出されたからです。

例2 線画イラスト

AutoTraceの細線化の機能を用いる例です。

  • 入力画像
    ChatGPTに描いてもらった線画イラストのサンプルです。
  • 出力
    オプションに細線化の「-centerline」と、スペックル除去の「-despeckle-level 20」を指定してEPSにしました。
    左はベジェ曲線と直線の制御点のプロット(EPSなので左下原点)です。おおむね良好にベクトル化されています。右はこれをInkscapeで画像化(エクスポート)したものです。

例3 カラーイラスト(輪郭線なし)

ベクトル化の特性上、処理できるのは少ない色数でフラットに塗り分けられた画像に限られます。海外のサイトに濃淡画像の処理例が示されている場合がありますが、本来は苦手です。

  • 出力(SVGを画像化)① オプションなし
    同一色の領域ごとに輪郭抽出するので、領域間に丸めの相違によるすき間ができます。また、口の形が歪んでいます。
  • 出力② オプション「-error-threshold 1」を設定 →すき間が低減
  • 出力③ オプション「-despeckle-level 20」を追加 →口の形の歪みが低減

例4 カラーイラスト(輪郭線あり)

輪郭線と塗りつぶしによるイラスト(いわゆるアニメ絵など)で、ベクトル化にはあまり向きませんが、需要が多そうな種類の画像です。

  • 入力画像
    ChatGPTに描いてもらったサンプルイラストと、その一部拡大です。色数は15色です。

  • 出力 オプション「-error-threshold 1 -despeckle-level 20」を設定してSVGに変換し、Inkscapeで画像化:

元画像(PNG)のファイルサイズが79KBのところ、SVGは453KBになりました。オプションやパラメータを調節すればベクトル化の精度は向上(すき間が低減)しますが、SVGのサイズはさらに大きくなる方向です。レイヤーわけなど工夫が必要そうです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?