divire の「線画被覆」機能について

divire の 塗り分け処理方式設定ページの “Lay Color Over the Lines” のチェックを ON にすると「線画被覆」機能が有効になります。

「線画被覆」有効状態

チュートリアル記事で紹介した北海道のサンプル画像などは、この divire の初期状態からこのチェックを ON にするだけで、わりあい簡単に、元線画の線の部分を覆いつくした(線のない)塗り分け画像を出力することができます。

しかし、扱う線画によっては、ただ “Lay Color Over the Lines” のチェックを ON にしただけでは、線を塗り分け色でうまく覆い切ることのできない場合があります。

このような場合には、 “Lay Color Over the Lines” のチェックを ON にした際操作できるようになる “Maximum Thickness of the Lines” の数値の調整、また同じ塗り分け処理方式設定ページの “Threshold” (概略はこちら)の調整が必要になってきます。

この記事では、divire の「線画被覆」機能を使用する際のこうしたパラメータの調整など、塗り分けファイルを望ましい形で出力するための方法を説明します。

線画の線を覆い切ることのできないケース

divire の「線画被覆」機能を使用した際、線をうまく覆い切ることが難しいのは、

・ 線の強弱の変化が強く、場所によって「線の太さ」に極端なばらつきのある線画

・ 「ベタ」のある線画

を扱う場合です。

(「ベタ」のある線画を divire で扱う場合の注意点はこちらにも少し書きました。)

線画を覆い切ることができない状況というのを、次の具体的なテスト用線画を使って見てみましょう。

「線画被覆」テスト用線画

(※ テスト用線画ダウンロード: filling_test_01.png

画面全体の比率からすると相当太い線、しかもかなり強弱の変化をつけた線でタマゴ型を3つ描いてあります。また、この線画ファイルのサイズは 1000 [pixels] × 1000 [pixels] ですので、線の厚みを構成するピクセルの絶対数自体が多くなっています。

このテスト用線画の「線画被覆」塗り分け画像の出力を試みるため、 divire 初期状態から “Lay Color Over the Lines” のチェックを ON にし、かつ レイヤー構成設定ページで “Periphery” のチェックを OFF にした状態で塗り分けファイルを出力すると、次のようになります。

初期状態の設定で「線画被覆」を試みた
塗り分けファイルの出力結果

このように、線画の線を覆い切ることができていません。また、元線画で線の太かった(厚みがあった)場所ほど、元の線が残ってしまっています。

きっちりタマゴ型を描いた線を覆い切るには、“Maximum Thickness of the Lines” の設定数値を、初期状態の 11 から、 91(以上)に変更してやる必要があります。

“Maximum Thickness of the Lines” を 91 に設定して「線画被覆」

このように、元線画の線をうまく覆い切るための、設定の調整の仕方をつかむためには、divire で「線画被覆」をどのように実行しているのかの概容を理解していただく必要があります。

divire による線画被覆の概容

divire は、線画として指定された画像ファイルについて、まず、白地に黒の線が描かれた画像とみなし、その画像の中で「線」で囲まれた各箇所を塗り分けの対象領域とします。このとき、元画像の中で、どの程度「濃い色」の部分を検出すれば、それを「画の線」とみなしてよいかどうかは、塗り分け処理方式設定ページの “Threshold” (個別解説はこちら)の数値によって判断しています。

divire の「線画被覆」は、白地に黒の線が描かれた(と「みなす」)画像で、(黒の)線によって囲まれた(白の)各領域に、周辺の(黒の)線の部分を足し合わせることによって、「線を覆いつくすような塗り分け領域」を作成する操作になります。

上で扱った「線画被覆」テスト用線画の、右下のタマゴ型に着目してください。

divire の「線画被覆」実施時には、塗り分けの基礎になる、線で囲まれた領域の周囲から、「線」の部分を探し出して、自らにつけ加えようとします。

「線」の探索領域になるのは、線に囲まれた(「白」の)領域から「一定距離以内の外側の領域(上図のオレンジ色の部分)です。この領域に属していて「黒」である部分は、塗り分け時に覆ってしまうべき 「線」であるとして、塗り分けの領域に含めてしまうのです。divire はこの、囲まれた領域の外側から線の部分を探し出す「一定距離」として、“Maximum Thickness of the Lines” の設定数値を使用しています。

囲まれた領域から “Maximum Thickness of the Lines” すなわち、「最大の線の厚み」の距離以内の外側を探せば、周辺の「線」である部分はすべて見つかるはず、という算段です。

上で例に挙げた、線画被覆の失敗例(↓)では、

Maximum Thickness of the Lines” の設定値が、指定された線画内の実際の線の太さ(厚み)よりかなり小さかったために、「探索範囲」が狭く、囲まれた領域の外側にある「線」の部分をすべて探し出せていなかったのです。

ところで、ここで「白地に黒の線が描かれたと『みなす』画像」というような持って回ったような表現をしましたが、そもそもこの記事で扱ったテスト用線画などは「『みなす』までもなく、元々『白地に黒の線が描かれた画像』なんじゃないの?」 … という疑問を抱かれた方もおられるかもしれません。

この表現は、画像処理の専門用語で言えば「『二値化』された画像」ということになりますが、これに関連して少々補足しておかないと、そもそも線画の「線の太さ」とは何なのか、画像上で、どこからどこまでを計ったものなのかが、あいまいになってしまいますので、コンピュータ上の画像表現における「ジャギー」と「アンチエイリアス」ということを次に説明します。

ジャギーとアンチエイリアスについて

コンピュータでの画像情報は、写真のような複雑な「色彩」を保持するのに優れた「ラスター形式」と、フォントのような「形状」を保持するのに優れた「ベクター形式」に2大別されます。

JPEG 形式や、PNG 形式などは、「ラスター形式」で画像を扱うデータフォーマットです。「ラスター形式」の画像情報というのは、つまるところどれも、(オリジナルの)画像(イメージ)を縦横に等間隔で細かく切り分けて、マス目状にした各マス(「ピクセル」と呼ばれます)の「色」を確実に再現できるよう管理している情報です。

画像情報のサイズは有限であり、「マス目」の細かさには限界があるので、各々個々の「マス」が判別できる程度に近付いて見るならば当然、正方形が連なって「ギザギザ」した姿が現れることになるわけです。この「ギザギザ」は、コンピュータや画像処理の分野で「ジャギー」と呼称されています。「ジャギー」の出現は、「ラスター形式」の画像データにとって宿命的といえます。

下の画像は、この記事で使ったテスト用画像でタマゴ型を描いた線の一部を、 「ニアレストネイバー法」で 3200 % 拡大したものです。

線画を拡大したイメージ

この画像からまず、「ギザギザしている」印象を汲みとってください。

次に観察してほしいのは、遠目には(↓)単に白地に「黒」の線が描かれているとしか見えなかった画像が、

「ジャギー」を観察できるほどに近付いて見ると、線が「黒」だけでなく周りに多くの「中間調のグレー色」を配置して構成されているということです。周りに「中間調のグレー」のマスを配置せず、「黒」のマスだけで線を表現しようとすると、「ジャギー」のギザギザ感がより顕著になってしまうのです。

このような、色彩の境界のギザギザ感を和らげるために、中間調の色を配置していく技術は「アンチエイリアス」と呼ばれています。コンピュータ上で描画される多くの図形には、その輪郭付近、色彩の境界で「アンチエイリアス」の処理が施され、ギザギザ感が緩和されています。

お絵描きソフト(ラスター画像を扱ういわゆる「ペイント系」に分類されるソフト)で描かれる線も、「鉛筆」系のツールを使用したり、アンチエイリアス無効にした選択範囲を塗りつぶすなど、よほどの注意が払われていない限りは色の境界周辺に「アンチエイリアス」の中間調色を含んでいることを想定してよいと思います。

ここで、「アンチエイリアス」処理の施された描線について「線の太さ」とは何を考えればよいのか、という問題が持ち上がってきます。つまり、「線」として、色彩の境界部分の中間色を含めないのか含めるのか、含める場合はどの程度の階調までを「線」あつかいにするのか、ということです。

divire は、すでに何度か述べた通り、“Threshold” の設定値を持っているので、色の濃さが “Thresholdの設定値以下になる「濃い」マスはすべて「黒の線」、“Thresholdの設定値より「薄い」マスはすべて「白地」として、あいまい部分を持たせずキッパリ区分してしまいます。それゆえに、「線の太さ」ということを想定することができるようになっているのです。

ただし当然、“Threshold” の値を大きくすると、境界付近に「アンチエイリアス」ゆえ出現するかなり「薄い」色のマスまでもが「線」あつかいされてしまうので、線は「より太く」みなされて、逆に、“Threshold” の値を小さくして、「アンチエイリアス」の薄いマスは「線」として認めないようにすると、線は「より細く」みなされます。

そのため、divire の「線画被覆」で、“Maximum Thickness of the Lines” の数値を調整する際は、“Threshold” の値をどれくらいに設定しているかも、多少注意しておく必要があります。

divire のアンチエイリアス対応について

コンピュータ上での図形描画における、「アンチエイリアス」について触れましたが、divire で自動作成される「塗り分け領域」には、「アンチエイリアス」処理が施されているのか、気になることと思います。

現時点(2020 年 6 月)においては、divire の塗り分け領域は「アンチエイリアス」処理未対応になっています。

(「アンチエイリアス」については、いずれ対応しても良いと考えているのですが … 。)

したがって、divire の出力する塗り分けファイルにおいて、塗り分け領域の境界付近をグッと拡大すると、ジャギーの「ギザギザ」が存在することを確認できると思います。

ただし、 divire はあくまで「お絵描きお助けツール」という位置づけで、最終的な作品の完成にいたるまでの中間的生産物を出力するというスタンスですので、あえて「アンチエイリアス」処理までは組み込んでいない面もあります。

たとえば、divire で「とりあえず」塗り分け・レイヤー化した後の「本作業」で、自動塗り分けされた箇所を「範囲選択」するとき不明なアンチエイリアスが存在するとかえってうっとうしい(だろう)という想定があります。

なお、図形の輪郭・境界の「ジャギー(ギザギザ)」というのは、お絵描きソフトにつきものの「ぼかし」系フィルタを使えば簡単に緩和されますし、リサイズ(縮小)しても自然に失われていきますので、気になる方はそうした処置を試してみてください。


“Enable Opening” 設定について

「線画被覆」で、線をうまく覆い切ることができなかったとき、“Maximum Thickness of the Linesの値を大きくして、囲まれた領域の外側の「探索範囲」を拡大する、という解決例を上で紹介しました。

そのため、「線画被覆」するなら、

最初からMaximum Thickness of the Linesをめいっぱい大きくしておけばいいんじゃないの?

という疑問を抱かれた方もおられるかもしれません。

じつは、“Maximum Thickness of the Linesをめいっぱい(不必要に)大きくしておくことには、弊害があります。

チュートリアル記事で紹介した北海道のサンプル画像(↓)ですが、

Maximum Thickness of the Lines” を 30 にし、次のような設定で「線画被覆」塗り分けファイルの出力を試みます。

すると …

上川総合振興局の管轄区域がグリーン、オホーツク総合振興局が青で塗られ、かつ領域を囲んでいる「線」の部分が塗り分け色で覆いつくされていますが、よく見ると、隣りの領域を形づくるために描かれた線の上にも色を伸ばしてしまっています

 “Background” を Blank モードにすると、そのさまがわかりやすくなります。

隣の領域を描く線の上にまで色が伸びて、「ヒゲ」のようになってしまっています。

このように、 “Maximum Thickness of the Lines” の値を不必要に大きくして、囲まれた領域の外側の「探索範囲」を拡大しすぎると、ターゲットの囲まれた領域とは関係ない部分の線までを拾ってきて塗り分け領域に含めてしまうのです。

「線画被覆」において、“Maximum Thickness of the Lines” の値は、やはり、塗り分け対象の線画に合わせた適正値を指定する必要があると言えます。

ところで、“Maximum Thickness of the Lines” の値が大き過ぎた場合に生じる、上述の「ヒゲ発生の解消を考慮したオプション設定が、“Enable Opening” です。

“Enable Opening” のチェックを ON にした状態

Enable Opening” のチェックを ON にすると、線画被覆後の塗り分け領域にオープニングが実行されることになります。「オープニング」というのは、画像処理の分野で使われる用語で、主に、画像の中の小さなゴミを除去するような目的で使用される処理のことを指します。上の例の、“Maximum Thickness of the Lines” の値が大き過ぎた北海道の塗り分けファイル出力設定で、さらに “Enable Opening” のチェックを ON にした場合には、塗り分け領域は以下のように出力されます。

“Enable Opening” のチェックを ON にしたときの塗り分け領域

前の状態と比較すると、とりあえず「ヒゲ」は消えています

ただし、塗り分け領域の細かいディテールも損なわれてしまっているので、“Enable Opening” オプションは、こうしたデメリットに注意しながら使い方を試してみてください。

「線画被覆」の際は、塗り分け領域の「重ね順」に注意!

「線画被覆」を実行するとき、ひとつの線の領域の上には線をはさんで隣り合う二つの部分の両方の色が塗られることになり、重なり順に注意する必要があります。

とくに、描線が太めの線画での細かいパーツは、パーツの大きさが「線の太さ込み」で認識されている可能性があるので配慮が必要なよう思います。

チュートリアル記事で紹介したあひるちゃんの線画(↓)などは、かなり描線太めで描かれていますが、

これについて、塗り分け領域ごとの割り当て色は一致しながらも、色の「重ね順」が変わるよう、“Regions” の塗り分け順序(個別の解説はこちら)の「面積の大きい順」「面積の小さい順」の2つを入れ替えて「線画被覆」塗り分けファイルを出力してみます。(なお、“Maximum Thickness of the Lines” の値は 15 で、“Enable Opening” のチェックは ON です。)

“Descending Order of Area” (面積の大きい順)はこの設定(↓)で、

“Ascending Order of Area” (面積の小さい順)はこの設定(↓)で、

出力するとそれぞれ、

上から面積の大きい順に塗り分け領域が重なっているとき
上から面積の小さい順に塗り分け領域が重なっているとき

塗り分け領域ごとの配色は同じですが、画の印象がだいぶ異なって感じられるのではないでしょうか?

PSD 形式で出力して、お絵描きソフト(Krita)でレイヤーの重なり順を確認すると、次のようになっています。

“Descending Order of Area” (面積の大きい順)
“Ascending Order of Area” (面積の小さい順)

「線画被覆」の際上から面積の大きい順に塗り分け領域(レイヤー)を重ねていると描線が太めの線画での細かいパーツは、周りを取り囲む領域の線を被覆するための色に埋もれてしまうことになります。

一般的に、元の線画の印象を保つためには、PSD 形式で出力したあとレイヤーの重ね順を変えて、細かいパーツを塗ったレイヤーは上に引き上げてやると良いように思います。

まとめ

この記事では、divire の「線画被覆」機能について詳しく解説しました。

「線画被覆」機能は divire の最大の「売り」なのですが、注意してパラメータ設定しないと、なかなか望み通りの塗り分けファイルが出力されてくれないなど、作者として正直未完成に思う部分もあります。ただ、「線画被覆」機能を使いこなせば「線で絵を描くことの可能性は確実に拡がるはずですので、独自の活用法を模索されることを期待しております。

HOME



divire関連