• ベストアンサー

画像の2値化について

グレー画像を微分ヒストグラムを用いて2値化する方法を教えてください。 プログラムが書ける程度の詳しさでアルゴリズムの説明をお願いします。

  • bat3
  • お礼率41% (7/17)

質問者が選んだベストアンサー

  • ベストアンサー
  • Fooky
  • ベストアンサー率71% (59/82)
回答No.1

・2値化関数(グレー画像と閾値を引数に与えると2値画像を返す) ・閾値決定関数(グレー画像を引数に与えるとヒストグラムの微分値の         極大値を返す) というのがあれば実現できるのでは? 2値化関数は簡単ですよね。グレー画像における画素(i,j)における 2値化作業は、輝度値の閾値Θに対して、Ib[j][i] = Ig[j][i] > Θ を実行すれば良いですよね。ただし、Ib[j][i]は2値画像の画素(i,j)の 値、Ig[j][i]はグレー画像の画素(i,j)の値。不等号演算子は真なら1、 偽なら0を返す。 さて、閾値決定関数ですが、まず、輝度値ごとのヒストグラムを 作ります。 int hist[256]; // グレー画像が256階調であるとする。 for(i = 0 ; i < x_size ; i++)  for(j = 0 ; j < y_size ; j++)   hist[Ig[j][i]]++; 次に、ヒストグラムを使って、微分ヒストグラムを作ります。 int dhist[256]; for(i = 0; i < 256 ; i++)  dhist[i] = hist[i+1] - hist[i]; こんな感じです。後は微分ヒストグラムdhistを最大にする 輝度値を求めればOKです。 離散値の微分は他の方法もあります。例えば、  dhist[i] = (hist[i+1] - hist[i-1]) / 2.0f; なんかも。 あと、画像のサイズが十分に大きくないときには、 工夫(画素ヒストグラムが極端に低い・高い画素が 存在し得るので)が必要かも知れません。

関連するQ&A

  • ヒストグラム平均化のアルゴリズム

    画像をヒストグラム平均化処理するプログラムを 作成したいのですが,具体的なアルゴリズムが わかりません.どなたか,教えてください.

  • 画像処理について

    画像フォーマットの形式についてと、 カラー画像からグレー画像への変換方法、 2値による疑似グレースケール表現(ディザ法と誤差拡散法)、 画像の多値化(減色処理)について、 どれか1つだけでもいいんでプログラムが作成できる程度の詳しさでの説明をお願いします。

  • ヒストグラム類似度による画像のマッチング処理

    現在、C言語で画像のマッチング処理をして、画像の類似度を調べる必要が出てきました。 そこで、とりあえずヒストグラムの最大値を1として平均化して、ヒストグラム値を取得した二つの画像を用意。 その同じ画素値どうしのヒストグラムの値の差分(絶対値)をとり、それをRGBの1~256まで繰り返して全部合計。 その合計値が一番低かった画像が似た画像である。 という適当なアルゴリズムを作ってみたのですが、上手くいきませんでした。 何か良いアルゴリズムをご存知の方はいないでしょうか? 類似度といっても、ぱっと見の全体的な色が似てさえいればいいので、画像の詳細が似ている必要はありません。 どちらかといえば、処理速度は速いほうがいいです。

  • 画像処理アルゴリズムについて。

    画面上に表示される数値の画像データを読み込みたいのですが、 解析方法として、保存された数値画像データから表示された数値画像データとの対比で解析する形になると思われます。 このアルゴリズムのプログラム方法でいいやり方がありましたら教えてください。 またいい説明をされているサイトがありましたら教えてください。 よろしくお願いします。

  • メッシュの統計処理

    プログラムのアルゴリズムについての質問です。 下のようなメッシュがあり、 □は0 ■は各値(1~6) □□□□□□□□□□□□□■□□□□□□ □□■■■□□□□□□□■■■□□□□□ □□■■■□□■□■□□■■■□□□□□ □□■■■□□■■■□□□■□□□□□□ □□□□□□□■■■□□□□□□□□□□ □□□□□□□□□□□□□□□□□□□□ □□□□□□□■■□□□□□□□□□□□ □□□□□□□■■□□□□□□□□□□□ □□■■□□□□□□□□■□□□□□□□ □□■■■□□□□□□■■■□□□□□□ □□■■□□□□□□□■■■□□□□□□ □□□□□□□□□□□■□■□□□□□□ □□□□□□□□□□□□□□□□□□□□ □□□□□□□□□□□□□□□□□□□□ 各■を一まとまりのブロックと考えて それぞれのブロックごとのヒストグラムを作成したいと考えています。 どのようにアルゴリズム(プログラムのフロー)を書いていいか分りません。 なにかよいアドバイスをいただけないでしょうか? よろしくお願いします。

  • 使いやすい画像ビューワ

    写真取り扱いの効率化のためフリーな画像ビューワを探しているのですが なかなかこれといったものが見つかりません。 ご存知の方、教えてくださいませ。 必要な機能は以下です。 1.次の画像の先読みをして、高速表示できること。 2.常にヒストグラム(出来れば指定したEXIFも)を表示してくれること。 3.ロスレス回転が出来ること。 4.できれば縮小アルゴリズムを選べること。 どれも当たり前に要求されることだと思うのですが・・・

  • ヒストグラムを重ねる方法

    円画像を読み込みまして、その画像をヒストグラムに変換し、また別の円画像をヒストグラムに変換し、そして二つのヒストグラムを1つに重ねて合うか?といったものを作ろうとしているんですが、出だしから解らなくて困ってます。大まかに言うと… ・まず円画像をヒストグラムに変換がわからないこと。 ・次に2のヒストグラムを出したものを比べる方法がわからないこと。 この2点のプログラムの書き方が解りません。 私はVisual studio.NET2003を使用しています。 FormデザインにBottonを4つ作り、PictureBoxも4つ作る予定です。 PictureBox4つは、1つ目のBottonを押すと画像を出す。2つ目のBottonを押すとヒストグラムを出す。 3つ目のBottonを押すと別のヒストグラムを出す。4つ目のBottonを押すと2つと3つを重ねる。といった感じにしたいと考えています。 そのプログラムはどういった感じにすればいいでしょうか?

  • 減色処理について

    pgm画像で多値化による減色処理について、 アルゴリズムやプログラムが書ける程度に できるだけやさしく説明してください。 無理な質問かもしれませんが、よろしくお願いします。m(_ _)m

  • OpenCvsharpについて。

    OpenCvsharpについて。 現在OpenCvsharpを使って画像の類似度を計算するプログラムを作ろうと思っております。 現在サンプルについてくる画像のヒストグラムを描写するプログラムを改造しようと思っている段階なのですが、0~255の段階に分けられたヒストグラムの各要素を取り出して、その各距離を足し合わせたものが画像の類似度になると思うのですが、プログラム中にヒストグラムの値を表しているものがどれか分かりません。 どなたか、OpenCVsharpのヒストグラムに関するプログラムを使ったことがある人で分かる方がいましたら、是非回答お願いします。

  • 画像一致判定のアルゴリズム

    【やりたいこと】 2枚のデジカメなどで撮った画像を自動で合成したいのです。 その2枚は少し(数十ピクセル)左右上下にずれた画像で、最終的にはその2枚を平均化するなどして合成したい。 問題は、その2枚の画像がどの方向に何ピクセルずれているかを求めなければならないのです。 とりあえず1ピクセルずらしながら、差分を合計しその差分が最小となるずれを見つけるようにプログラムしましたが実用的な速度になりません。 【質問したいこと】 2枚の画像のずれを高速に求めるアルゴリズムはありませんでしょうか。 精度はあまり良くなくても構いません。ある程度絞り込めればその付近を1ピクセル調べる方法をとります。

専門家に質問してみよう