書籍の自炊画像から、カラーページとモノクロページを判別するプログラムを実装したいです。


どのようなアルゴリズムでカラーとモノクロを判別するべきでしょうか。
もしコマンドラインツールやライブラリでそのような機能を持つものがあれば教えてください。

英語論文等でも構いません。

回答の条件
  • URL必須
  • 1人5回まで
  • 13歳以上
  • 登録:2012/06/28 20:33:23
  • 終了:2012/06/29 16:33:40

ベストアンサー

id:TransFreeBSD No.1

TransFreeBSD回答回数662ベストアンサー獲得回数2642012/06/28 22:24:30

ポイント200pt

単純に彩度に変換してノイズ除去して適当なしきい値で二値化して面積とかで見れば良いのでは?
ImageMagickとかで出来ませんかね。
http://hashi4.civil.tohoku.ac.jp/soft/node43.html


こんな感じか

convert in.jpg -colorspace HSB -separate -delete 0 -fx "u*v" -blur 2x2 -threshold 30% -format '%[fx:mean]' info:

こんな感じか
convert in.jpg -colorspace HSB -separate -delete 0 -fx "u*v" -format '%[fx:mean]' info:

ノイズ除去とかしきい値とかは場合によるかと思います。


そういえば、セピア調とかホワイトバランス崩れているのはカラーなのかモノクロなのかという問題が。
-auto-gamma オプション使えばいいのかな?でもムラとかあると誤判定しそう。
convert in.jpg -auto-gamma -colorspace HSB -separate -delete 0 -fx "u*v" -blur 2x2 -threshold 30% -format '%[fx:mean]' info:

ImageMagickの本家忘れてました。
http://www.imagemagick.org/script/index.php

あと、役に立つかわかりませんがこんなのありました。
http://spiedigitallibrary.org/proceedings/resource/2/psisdg/5007/1/87_1
人間の感覚に厳密に従おうとすると、個人差もあるでしょうし大変かもしれません。

他1件のコメントを見る
id:TransFreeBSD
  • formatで直接彩度というわけじゃないです。

最後ので各段階を説明すると、

  • auto-gamma : ガンマ自動調整
  • colorspace HSB : 色空間をHSBに
  • separate : HSBになってる各チャンネルを分離して3枚のモノクロ画像に
  • delete 0 : 最初の0番の画像(色相)を削除
  • fx "u*v" : 1番(彩度)と2番(明度)の画像の各ピクセルを掛け合わせる。これで円柱型から円錐型のHSB空間における彩度になる
  • blur 2x2 : ノイズ除去用にぼかし
  • threshold 30% : 彩度30%を閾に二値化
  • format '%[fx:mean]' : 全体の平均値。30%で二値化しているので30%以上となったピクセルの割合になる。

thresholdがなければ全体の彩度の平均になります。
fxで色々演算できるみたいです。HSBじゃなくRGBでseparateして自分でfxで演算してもいいかも知れません。さらに、実はL*a*b*で計算した方が良いのではと言う話もあったりします。
ただ、それで例えばセピア調の絵と、単に褪せただけの小説とが区別出来るのか、というと、多分別の方法か人の判断が必要になるかな、という気がしました。
意外に奥が深いかも知れません(^^;

2012/06/29 22:18:28
id:TransFreeBSD

度々ですが。
auto-gammaだめですね。ムラが強調されて誤判定が多くなりそう。

2012/06/29 22:26:32

その他の回答(1件)

id:TransFreeBSD No.1

TransFreeBSD回答回数662ベストアンサー獲得回数2642012/06/28 22:24:30ここでベストアンサー

ポイント200pt

単純に彩度に変換してノイズ除去して適当なしきい値で二値化して面積とかで見れば良いのでは?
ImageMagickとかで出来ませんかね。
http://hashi4.civil.tohoku.ac.jp/soft/node43.html


こんな感じか

convert in.jpg -colorspace HSB -separate -delete 0 -fx "u*v" -blur 2x2 -threshold 30% -format '%[fx:mean]' info:

こんな感じか
convert in.jpg -colorspace HSB -separate -delete 0 -fx "u*v" -format '%[fx:mean]' info:

ノイズ除去とかしきい値とかは場合によるかと思います。


そういえば、セピア調とかホワイトバランス崩れているのはカラーなのかモノクロなのかという問題が。
-auto-gamma オプション使えばいいのかな?でもムラとかあると誤判定しそう。
convert in.jpg -auto-gamma -colorspace HSB -separate -delete 0 -fx "u*v" -blur 2x2 -threshold 30% -format '%[fx:mean]' info:

ImageMagickの本家忘れてました。
http://www.imagemagick.org/script/index.php

あと、役に立つかわかりませんがこんなのありました。
http://spiedigitallibrary.org/proceedings/resource/2/psisdg/5007/1/87_1
人間の感覚に厳密に従おうとすると、個人差もあるでしょうし大変かもしれません。

他1件のコメントを見る
id:TransFreeBSD
  • formatで直接彩度というわけじゃないです。

最後ので各段階を説明すると、

  • auto-gamma : ガンマ自動調整
  • colorspace HSB : 色空間をHSBに
  • separate : HSBになってる各チャンネルを分離して3枚のモノクロ画像に
  • delete 0 : 最初の0番の画像(色相)を削除
  • fx "u*v" : 1番(彩度)と2番(明度)の画像の各ピクセルを掛け合わせる。これで円柱型から円錐型のHSB空間における彩度になる
  • blur 2x2 : ノイズ除去用にぼかし
  • threshold 30% : 彩度30%を閾に二値化
  • format '%[fx:mean]' : 全体の平均値。30%で二値化しているので30%以上となったピクセルの割合になる。

thresholdがなければ全体の彩度の平均になります。
fxで色々演算できるみたいです。HSBじゃなくRGBでseparateして自分でfxで演算してもいいかも知れません。さらに、実はL*a*b*で計算した方が良いのではと言う話もあったりします。
ただ、それで例えばセピア調の絵と、単に褪せただけの小説とが区別出来るのか、というと、多分別の方法か人の判断が必要になるかな、という気がしました。
意外に奥が深いかも知れません(^^;

2012/06/29 22:18:28
id:TransFreeBSD

度々ですが。
auto-gammaだめですね。ムラが強調されて誤判定が多くなりそう。

2012/06/29 22:26:32
id:NAPORIN No.2

なぽりん回答回数4646ベストアンサー獲得回数8512012/06/29 07:33:46

むしろ、彩度に幅のない画像を選択して色データを捨ててたとえば別形式で保存するほうが軽量化できていいようなきがします。
フォトショップのアクションでできそう。
処理されたものは拡張子が違うものになっているからソートすればわかるとかそんな。

http://retouch-weblab.com/photo/action/

id:enigma_0215

申し訳ありませんがフォトショップは持っていないので。。。

2012/06/29 16:34:18

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません