こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

画像ファイル(一枚絵)を切り抜く方法

皆様のお知恵を何卒お貸し頂きたく存じます。

添付された下図をごらんください。

図1は、紙に鉛筆書きされた絵をスキャナーで取り込んだものです。スキャン時の解像度は100~150dpi程度。実線部分には所々に隙間があり、ラフな仕上がりになっています。
これを、図2の赤色部分のように選択し、周辺部分の色(下地である紙のグレー部分)を消去して、図3のような状態にしたいと思います。その際、絵の輪郭の部分にアンチエイリアスが無い状態である事が条件となります。
場合によっては、絵の下地(紙)に罫線がある場合もありますので、この場合は罫線も排除するものとします。

上記のような作業を、連続して大量に、しかも、できる限り短時間に可能な方法は無いものでしょうか。例えば、1時間に100枚程度。不可能でも、出来るだけ早くできる方法が知りたいのです。
ファイル形式はpsdかtga、場合によってはbmpでもよいのですが、jpgは先に触れた通り、アンチエイリアスを排除する都合で不可とします。

使用アプリはphotoshopか、入手可能なフリーソフトであると助かります。そうでなくても、参考になるツールがあれば教えていただきたいのです。
尚、当方はペンタブレットが使える作業環境である事を付記します。

photoshopで一枚ずつ手作業すればできる作業ではありますが、とにかく時間と労力を短縮したいので、半自動か、可能ならば全自動で大量にこれをできる方法が無いものでしょうか。仕上がり状態は綺麗でなくとも構いません。絵が図形として認識できれば、絵の周辺に多少のゴミや、はみ出した部分が残っていても構いませんし、絵の実線部分が白黒二値の状態になっていても構わないものとします。要するに、絵の部分だけを抜き出すのが目的ですので、アルファマスクで抜き出す等の手法も有りです。

当方も色々試したのですが、どうも上手い方法が見つかりません。はっきり言って無理難題である事も承知しておりますが、もしやと思って質問した次第です。

どなたか知恵のある方の御助力を願えれば幸いです。

投稿日時 - 2012-11-16 19:47:57

QNo.7800984

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

全自動は無理ですが,半自動で,多少汚くてもよければ添付画像くらいには可能です.

この問題は画像処理の,エッジを使う領域分割ですね.1988年に発明されたsnakesというアルゴリズムが有名で,多少線が切れていても対処できます.ただし万能ではありません.難しい課題で,アルゴリズムも様々な変種があります.

無料でお手軽に使えるところでは,GIMPのLasoプラグインがあります.
これを使うと,図形の線に合わせるように選択領域を自動で調整してくれます.
http://registry.gimp.org/taxonomy/term/1226
gimp-laso-plugin.zip

ただし対応しているGIMPのバージョン2.6または2.7です.
http://www.geocities.jp/gimproject2/download/gimp-download.html

インストール方法:
ダウンロードした gimp-laso-plugin.zip を展開すると gimp-laso-plugin\GIMP-2.0 というフォルダができるので,その下の lib フォルダを<GIMPのインストール先フォルダ>\lib に,shareフォルダを<GIMPのインストール先フォルダ>\share に上書きコピーすればLasoプラグインを使えるようになります.

使い方:
GIMPを起動して,メニュー から「ツール」「選択ツール」-「Laso plugin」を選ぶとダイアログ画面が表示されます.そのまま「OK」をクリックしても図形の周囲を選択してくれますが,細部の形状が失われます.

添付の画像のようにするには

1. メニュー - 「色」-「しきい値」- 215で「OK」をクリックし,二値化する.

2. ツールボックスから「自由選択」でマウスをドラッグして図形を大雑把になぞる.選択範囲は閉じた領域にする.このとき凸部分(サンプルの図の頭,左肩,手)は図形の少し外側を,凹部分(サンプルの図の右肩の辺り)は図形の少し内側をドラッグする.

3. メニューから「ツール」「選択ツール」-「Laso plugin」-「OK」をクリック.

添付画像では,最後に「塗りつぶす」で選択領域を赤にしました.
パラメータが色々ありますが,とりあえず調整しませんでした.


snakesだけでも様々なアルゴリズムがあるので,これ以外にも探せばソフトはあるでしょう.OpenCVにもあるので,もしプログラミングできれば一気に大量の画像をバッチ処理できると思います.ただ,やはり人間がケースバイケースで柔軟に判断して切り抜くのにはかなわないでしょう.

投稿日時 - 2012-11-19 00:25:48

お礼

回答いただき、ありがとうございます。

教えていただいたソフトを試してみました。仕上がり具合は、例に示していただいた程度で十分だったのですが、残念ながら満足の行く使用感ではありませんでした。フリーソフトに高度な完成度を期待してはいけないのは分かっていますが、やはり使い勝手が良くありません。
しかし、私が知らなかったアプローチを教えてくださった事には感謝いたします。

投稿日時 - 2012-12-07 17:44:00

ANo.3

なんかアプリの宣伝が有るみたいですけど
それはさておき
パスで手動以外無理ですね
明らかに色分けされていれば自動選択の余地もあるけどこういう場合は無理
うちの作業なら一点20秒くらいでやります

投稿日時 - 2012-11-17 23:21:33

お礼

そうですね。普通の人はパスで切って外側を消すやり方を考えると思います。しかし、私はこの作業を限られた時間内に、大量に行なう事を前提にしておりまして、集中力の限界などを考慮した場合、手指の器用さなどの個人技に出来るだけ依存しないやり方がないものかと模索している次第です。ぶっちゃけてしまいますと、「出来るだけ楽にやりたい」という事です。
今の所なかなかうまい手はありませんが、とにかく御回答いただきありがとうございました。

投稿日時 - 2012-11-22 17:33:28

ANo.1

まず全自動はムリでしょう。

線の切れてる部分をどうするかが問題。
それを「機械」に繋げるように認識させるには
イヤミな言い方ですけど、かなり高度な人工知能がないとムリじゃないでしょうか。


絵のアウトラインをペンツールで描いていくのが
仕上がりではベストだと思いますが
一番時間のかかるやり方ですね。

自動選択、色域指定等で背景の白い部分を選択し
クイックマスクモード(ツールボックスの一番下)にして
線が切れてて繋げる部分を鉛筆ツールで描いていき
抜く部分を自動選択で選択、消去
クイックマスクモードを解除

背景部分のみが選択されます。
(文字で伝わりました?)
この方法が簡単ではないでしょうか。

人間が、目で見て判断しなければいけない部分があるものが含まれている場合
やはり一つ一つ開いて作業していくしかないのではないでしょうか。

がんばって下さい。


私も、他の方の有意義な回答を楽しみにしています。

投稿日時 - 2012-11-17 10:08:57

お礼

ご回答ありがとうございます。

そうですね。自分で色々試した上ですので、量子コンピューターでもない限り全自動が不可能なのは分かっておりました。ダメ元で書いただけです。

私が現在使っているやり方は、一旦線を二階調化して、色域指定でシャドウを選択し、選択域を1~2拡張した上で新規レイヤーを作成。新規レイヤーの合成モードを比較(暗)にして、選択範囲内に描画色を塗りつぶす、と言う手順をアクション化して実行します。
その後、ペンタブによる手作業で切れている部分を繋ぐ、罫線などで繋がった部分を切る、といった要領で絵の選択範囲を抜き出し、然る後、絵の外側を「隣接」にチェックした状態で選択します。
その後、選択範囲を反転して描画色で塗りつぶす、と言う動作をアクションで実行します。
それから、再び手作業で選択ツールを使い、前段で塗りつぶした部分だけを選択します。
ここから再びアクションを使い、選択範囲を反転、画像統合、消去で、絵の部分以外を白く抜いた状態にする、といった要領です。

お教え頂いた方法と大体同じ方向性のやり方ですが、工程数をもっと減らし、手の早さ等、個人の技量に出来るだけ依存しないやり方があったらなぁ、と考えているわけです。やっぱり無理でしょうかね。

投稿日時 - 2012-11-22 12:41:36

あなたにオススメの質問