"妄想ノートなラクガキ帳

09/09

2013

さらにpotrace (TIF編)

gimp potrace お絵かき スキャナ

コメント:0 TB:0


potraceの記事を書いてみて、改めて思うに、スキャンの設定が悪いのではないか?
とも思ったりもしたので、DCP-J940Nで画質調整を試そうと思いました。


しかし!
なんと、DCP-J940Nのスキャナには画質調整などというものは無いようなのですね。
(もしかしてPCからならできるのだろうか…)

そこでモノクロスキャンを試してみました。TIFですね。
グレースケールかと思ったら、モノクロ2値でスキャンしてくれるようです。
そのファイルサイズ、A4 300DPIで僅か67KB… 何故今まで使わなかったのか〜
これからはTIFで行くことにしました。ちょっとLinuxのgnome画像ビュワーでは扱いが悪いのがアレですけどね。

potrace出力と比較しておきたいのですが、いかんせん元絵がアレだったので区別がつきづらい(汗
比較的マシに見えた手の部分を切り出してみました。

hand_tiff.jpg
モノクロTIFスキャン100%から切り出し↑

hand_svg.jpg
そのモノクロ画像をpotrace svg→gimpインポート、100%から切り出し↑


今頃気づきましたが、原画の段階で中指の輪郭が飛んでしまっているのでかなり変なことに…なお、ちょくちょく手直ししている、色を塗った版では既に修正済みだったりします。どうでもいいですけどねw

…なんというか、粗を拡大しているだけというか、自分に対する公開処刑のような気がしてきましたが
気にせずに続けます。

どちらにせよ一部、ラインが結構いい感じに変化しているのがわかるかと思います。

ここで気になってpotraceのmanpageを見てみましたが、アレ?ってぐらいにオプションがありますね。特にベクタ化のアルゴリズム回りが。
何故、mypotrace.sh作った時に気づかなかったのか…?

この辺も詰めてみたほうがいいかも。なお、前回書いたスクリプトはものすごい単純化でオプションが全然通らない感じですので、今回記事末尾に修正したものを載せておきます。

そんなわけでturdsizeになんとなく25を指定してみたのですが

hand_tiff_t25.jpg
potraceに--turdsize 25を指定して、同じモノクロ画像をトレース↑

どうも、turdsizeはゴミを自動削除するオプションのようですね。25には何の根拠もありません。正真正銘の適当です。

う…ううむ…デフォの結果とはかなり違う気がする…
これからはturdsize25を基本にしようかなと思ったり…

それにしても、potraceすると少し大きくなるようですね。ベクタ画像の威力ということでしょうか…
一応並べます。
gimpで縮小(確か20%)、アルゴリズムはキュービックです。

ran_scanned.jpg
カラースキャンそのまま↑

ran_potrace.jpg
カラースキャンからのpotrace↑


ran_tiff_orig.jpg
モノクロスキャンそのまま↑
実際にgimpの操作画面で25%で見た時はもっとまともなのですが、縮小したらとたんに副作用が出たようです。つまり、キュービックや線形などの補間を使用しないほうがマシな結果になるということでしょう…


ran_tiff_scan.jpg
TIFからのpotrace ↑
(他のと違い多少原画に手が加えられているのでディテールが違いますが、大部分は変わっていないので、参考までに)

縮小で見るとあんまり変わらない…と思うでしょうが、TIFのほうが線が少し繊細になっている気がします。

よくよく考えてみると、TIFの二値画像ではもはやブラックレベルとか関係ないわけですね。その辺も影響しているような気がします。

あと、いろいろやっていて思いましたが、これぐらい縮小するとtifの撮って出しでも正直、それほどpotrace結果と変わらないような感じに見えました。しかし、gimp上で実際に縮小してみるとごらんの有様でしたので、実際には結構違いがある模様。



最後に、アルゴリズムオプション回りを修正したmypotrace.shを載せておきます…

…っと、ここでまたもおいらの知らなかった衝撃的事実が。

"TIFは内部に何ページも持てる"

"DCP-J940Nで連続スキャンすると、1つのTIFにされる"

"そのTIFをconvert(ImageMagick)にかけると、foo-0.bmp & foo-1.bmpのように出力される"

ううむ…手強い連中だ。
結局、連番ファイル回りがおいらの技術ではxargsで処理できなかったため、shではなくbashに逃げてしまいました。shしか使えない環境では動きません。(めったに無いと思いますが…)
もうそろそろ、pythonで書きたい…


#!/bin/bash

workdir=/tmp
b_level=0.9

while [ "$1" != "" ];do

case $1 in
-k | --blacklevel)
b_level=$2
shift 1
;;
-o | --output)
outfile="$2"
shift 1
;;
-h | --help)
cat $0
exit 0
;;
-w | --workdir)
if [ -d "$2" ];then
workdir=$2
else
echo "ERROR: work directory '$2' does not exist."
exit 1
fi
shift 1
;;
-z | --turnpolicy)
turnpolicy="-z $2"
shift 1
;;
-t | --turdsize)
turdsize="-t $2"
shift 1
;;
-a | --alphamax)
alphamax="-a $2"
shift 1
;;
-O | --opttolerance)
opttolerance="--opttolerance $2"
shift 1
;;
-u | --unit)
unit="-u $2"
shift 1
;;
-n | --longcurve)
longcurve="-n $2"
shift 1
;;
* )
infile=$1
;;
esac
shift 1
done

workfile=$workdir/tmp_$$_img.bmp
ext=${infile##*.}

function process_potrace
{
potrace $turdsize $policy $longcurve $alphamax $opttolerance $unit -k $b_level -s $1
if [ "$2" != "" ];then
mv ${1%*.*}.svg $2
fi
rm $1
}

if [ "$outfile" = "" ];then
outfile=${infile%*.*}.svg
fi



if [ -e "$infile" ];then
convert $infile $workfile
if [ "$ext" = "tif" ] || [ "$ext" = "TIF" ];then
basename=${workfile%*.bmp}
idx=0
for cbmp in `ls -1 ${basename}-*.bmp`;
do
process_potrace $cbmp ${outfile%*.*}-$idx.svg
idx=$(($idx + 1))
done
else
process_potrace $workfile $outfile
fi
else
echo "ERROR:file '$infile' does not exist."
fi

スポンサーサイト

コメント



名前
メールアドレス
URL
パスワード

トラックバック


トラックバックURL :

モブ沢ドト彦(dothiko)

ブログ主:モブ沢ドト彦(dothiko)
@dothiko

当ブログについて (←いわゆる「最初にお読みください」というヤツです)

このfc2ブログをお絵かき専用ブログに再編するにあたり、ハンドル名ではなくペンネーム「モブ沢ドト彦」を名乗ることに致しました。今後はプログレッシブに生きていこうと思います。基本的にお絵かきは毎週土曜日更新(予定)、その他のネタは不定期という事にしています。
amazonアソシエイトに参加することにしました。
年齢は特に明示しませんが
* おっさんです *

10 | 2017/11 | 12
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -

ユーザータグ

FC2Ad