Python/OpenCV 学習:大津の2値化

2015-02-23 :  PCクリニック
本文の前に、
-・・・ -・-
現時点での blogramのランクインカテゴリは、
5、2、0、1、0、 1、0、0、0、0(41)で、換算ポイント 71pt 。
一昨日昼前に「グルコサミン」「Python」が若干bg値アップした。
その後、現在まで「C言語」「Firefox」も含め上位は全く変動無し。
・-・ - -・

さて、本文。

前回(2015-02-21)の記事:「Python/OpenCV 学習:ヒストグラム表示
で、
  ・・・・・
  ・・・・・
  「Histograms in OpenCV
  を見つけた。
  このページは、
  「OpenCV-Python Tutorials
  サイトの中。
  <紙>としては勉強すべきサイトのようだ。
  ・・・・・
  ・・・・・
と書いた。

それで、
それなりに、勉強している???


Image Processing in OpenCV
の3項目に、
Image Thresholding
がある。

このページでの“Goal”は、
  ・ In this tutorial, you will learn Simple thresholding,
    Adaptive thresholding, Otsu's thresholding etc.
  ・ You will learn these functions :
    cv2.threshold, cv2.adaptiveThreshold etc.

つまり、(グレースケール)画像の2値化に関するもの

それで、

  Simple Thresholding

基本は、「cv2.THRESH_BINARY」ですね。

  img = cv2.imread( '~.png', 0 )

として、グレースケールで読み込んで、

  ret, th1 = cv2.threshold( img, 閾値, 255, cv2.THRESH_BINARY )

で、白黒2値画像( th1 )を得る。



これでは不都合、となる場合は、・・・・・

  Adaptive Thresholding

  ・・・・・
  ・・・・・
  But it may not be good in all the conditions where
   image has different lighting conditions in different areas.
  ・・・・・
  ・・・・・

の場合は、
「cv2.ADAPTIVE_THRESH_MEAN_C」や、
「cv2.ADAPTIVE_THRESH_GAUSSIAN_C」で、
場所場所毎に、異なる適切な閾値で2値化する。

上記の入力画像( img )に対して、

  th2 = cv2.adaptiveThreshold( img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
        cv2.THRESH_BINARY, 11, 2 )

で、具合の良い白黒2値画像( th2 )ができる。



それから、1番目の単一の閾値を自分で選ぶのでは無く、
大津さんに選んで貰う???

  Otsu's Binarization

  In global thresholding,
   we used an arbitrary value for threshold value, right?
  So, how can we know a value we selected is good or not?
  Answer is, trial and error method.

但し、条件があるが、・・・・・

  But consider a bimodal image (In simple words,
   bimodal image is an image whose histogram has two peaks).

  For that image,
   we can approximately take a value in the middle of those peaks
   as threshold value, right ?
  That is what Otsu binarization does.
  So in simple words, it automatically calculates
   a threshold value from image histogram
   for a bimodal image.

もし、条件(ヒストグラムが二山形)を満たさなかったら、

  For images which are not bimodal,
   binarization won't be accurate.

この事には、注意が必要だが、・・・・・


で、同じ上記の入力画像( img )に対しては、・・・・・

  _, th3 = cv2.threshold( img, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU )

とすると、白黒2値画像( th3 )ができる。



最後に、
  「How Otsu's Binarization Works?」
に、理論(アルゴリズム)が載っている。

そのまま、Python でコード化したものも、載っていますネ。


もっと、もっと「OpenCV
を勉強しよう。


本日はここまで。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


150116P
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
06 | 2017/07 | 08
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク