アプリ版:「スタンプのみでお礼する」機能のリリースについて

読み込んだ画像が白黒かカラーかを判別する方法をご教授下さい。

要件としましては、
・ファイルのフォーマットとしてはどちらもカラー(24or32Bit)
・黄ばんだ紙をスキャナで取り込んだ画像も白黒、または準白黒(単一色?)としたい

単純に考えたところ、画素(RGB)の最大/最小との差が閾値以内の場合は灰色とし、そうでないものはカラーとしたりと考えました。
ですが、これだと黄ばんだ紙に対応できないように思えます。

環境は以下になります。
・Windows7,XP
・VisualStudio2005
・.Net framework 2.0
・OpenCVSharp(OpenCVの.NETラッパ)

以上です。
よろしくお願い致します。

A 回答 (3件)

3次元空間にプロットしたときに一直線に並んでいたら白黒と判断するのが良いと思います。


たぶん、1つの直線に乗ると仮定して最小二乗法を使うと直線の式が出ますので、各ピクセルについてそれとの距離を測り、その距離の最大値かなにか代表的な値を1つ求め、それがある基準値に収まれば白黒と判断、というアルゴリズムが思いつきます。
    • good
    • 0
この回答へのお礼

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

画像処理そのものや数学の知識はあまりないもので、
回答を有効活用できず申し訳ありません。

お礼日時:2011/06/12 15:53

あらかじめ、黄ばんでない紙の色をデータとして保存しておき、


その色と比較しないと、
「黄色い紙」との区別が付かないと思います。

人間が黄ばみとして判断しているのは、「『他の』紙の色」と比較しているためだと思います。
人間は記憶ですが、コンピューターは記録(データをファイルに保存)ですね。
    • good
    • 0
この回答へのお礼

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

私の質問としては、
人間が白黒(黄ばみ含む)とカラーを判断していることを、
コンピュータ上の画像情報から判断するため、
どういったデータを画像情報から抽出し、
どのように比較すればよいかを知りたかったのです。

説明が足らず、申し訳ありませんでした。

お礼日時:2011/06/12 15:59

色空間をRGBからYCrCb,HSV等の「明るさ+色」のものに変換して、色のばらつきで判定するのはどうでしょうか。




http://opencv.jp/opencv-2.2/c/imgproc_miscellane …
    • good
    • 0
この回答へのお礼

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

アドバイス頂いた内容から、
cvCvtColorを用いてHSV系に変換し、
cvAvgSdvを用いてHSV各要素の標準偏差を算出してみました。

そうしたところ、手持ちのイメージで試した限りですが、
彩度(S)が大体以下のようになりました。

  カラー:単色の多いもので約40~50。通常そうに見えるもので80以上、100オーバー。
  白黒 :20前後。
  黄ばみ:20~30前後。※あまりサンプルなかったのでそれなりですが

これから、30~40あたりを閾値にすることで判定できそうです。

ありがとうございました。

お礼日時:2011/06/12 16:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!