OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

画像の2値化について

  • すぐに回答を!
  • 質問No.130478
  • 閲覧数2372
  • ありがとう数0
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 41% (7/17)

グレー画像を微分ヒストグラムを用いて2値化する方法を教えてください。
プログラムが書ける程度の詳しさでアルゴリズムの説明をお願いします。
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1
レベル9

ベストアンサー率 71% (59/82)

・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;

なんかも。

あと、画像のサイズが十分に大きくないときには、
工夫(画素ヒストグラムが極端に低い・高い画素が
存在し得るので)が必要かも知れません。
-PR-
-PR-
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ