目次

2値化コンバータ(Python)

 カメラで撮影した階調つきのモノクロ画像を2値化
 したいときに、Pythonスクリプトを利用しました。

 もとの画像は、以下。



 アクリル板に、黒色と灰色のテープを貼ったコースです。


 画像データは、次のようにテキストファイルになって
 いるので、1行ごとに取り出し、閾値と比較後0か1
 にします。その値を文字列として合体すると、2値化
 できます。

192 199 202 205 202 204 209 211 210 210 214 217 212 218 220 223 227 232 236 239 241 241 238 238 230 230 229 226 231 231 231 229 233 235 236 236 231 237 237 244 242 245 244 244 248 248 248 248 248 235 186 153 153 153 150 120  90  81  70  68  65  58  59  55  60  51  58  52  53  53  59  51  60  63  58  65  64  59  59  56
182 184 188 190 188 190 192 194 191 191 192 195 197 199 198 201 205 210 213 220 226 226 223 214 208 203 200 197 198 198 197 198 199 201 202 202 204 205 206 227 242 245 246 246 248 248 248 248 248 240 195 153 153 153 152 137  91  80  75  64  65  61  61  57  59  56  53  58  56  56  53  58  52  62  58  65  60  63  58  57
:

 1ラインは、80ピクセルで構成しています。
 テキストファイルを読込み、リストに変換します。

# open
fin = open('mlogy01j.txt','r')
# get
line = fin.read()
# close
fin.close()

# generate list
glist = line.split('\n')

 ここまでで、リストの1要素が16データになります。
 要素を数値としたリストの方が、最大値、最小値を
 求めるときに便利なので、変換します。

# open
fin = open('mlogy01j.txt','r')
# get
line = fin.read()
# close
fin.close()

# generate list
glist = line.split('\n')

# convert strings
xlist = []
for e in glist :
  tmp = e.split(' ')
  xlist.extend( tmp )

# convert integer
mlist = []
for e in xlist :
  if e != '' :
    mlist.append( int(e) )

 組込み関数を利用して、最大値、最小値を求め
 閾値を計算します。

# open
fin = open('mlogy01j.txt','r')
# get
line = fin.read()
# close
fin.close()

# generate list
glist = line.split('\n')

# convert strings
xlist = []
for e in glist :
  tmp = e.split(' ')
  xlist.extend( tmp )

# convert integer
mlist = []
for e in xlist :
  if e != '' :
    mlist.append( int(e) )

# calculate threshold
xmax = max(mlist)
xmin = min(mlist)
xth  = (xmax+xmin) >> 1

 閾値を利用して2値化します。

# open
fin = open('mlogy01j.txt','r')
# get
line = fin.read()
# close
fin.close()

# generate list
glist = line.split('\n')

# convert strings
xlist = []
for e in glist :
  tmp = e.split(' ')
  xlist.extend( tmp )

# convert integer
mlist = []
for e in xlist :
  if e != '' :
    mlist.append( int(e) )

# calculate threshold
xmax = max(mlist)
xmin = min(mlist)
xth  = (xmax+xmin) >> 1

# convert binary
xstr = ""
for e in mlist :
  tmp = '0'
  if e > xth :
    tmp = '1'
  xstr += tmp 

 結果を表示します。

# open
fin = open('mlogy01j.txt','r')
# get
line = fin.read()
# close
fin.close()

# generate list
glist = line.split('\n')

# convert strings
xlist = []
for e in glist :
  tmp = e.split(' ')
  xlist.extend( tmp )

# convert integer
mlist = []
for e in xlist :
  if e != '' :
    mlist.append( int(e) )

# calculate threshold
xmax = max(mlist)
xmin = min(mlist)
xth  = (xmax+xmin) >> 1

# convert binary
xstr = ""
for e in mlist :
  tmp = '0'
  if e > xth :
    tmp = '1'
  xstr += tmp 

# show
xline = len(xstr) / 80
for e in range(0,xline+1) :
  begin = 80 * e
  fine  = begin + 80 
  tmp = xstr[begin:fine]
  print tmp

 テキストファイルに出力されると、以下。

11111111111111111111111111111111111111111111111111111110000000000000000000000000
11111111111111111111111111111111111111111111111111111111000000000000000000000000
01111111111111111111111111111111111111111111111111111111000000000000000000000000
00000000000000000001111000000000000000111111111111111111000000000000000000000000
00000000000000000000000000000000000000111111111111111111000000000000000000000000
00000000000000000000000000000000000000111111111111111111100000000000000000000000
00000000000000000000000000000000000000111111111111111111100000000000000000000000
00000000000000000000000000000000000001111111111111111111100000000000000000000000
00000000000000000000000000000000000001111111111111111111100000000000000000000000
00000000000000000000000000000000000001111111111111111111110000000000000000000000
00000000000000000000000000000000000001111111111111111111110000000000000000000000
00000000000000000000000000000000000001111111111111111111110000000000000000000000
00000000000000000000000000000000000001111111111111111111110000000000000000000000
00000000000000000000000000000000000011111111111111111111110000000000000000000000
00000000000000000000000000000000000011111111111111111111111000000000000000000000
00000000000000000000000000000000000011111111111111111111110000000000000000000000
00000000000000000000000000000000000011111111111111111111111000000000000000000000
00000000000000000000000000000000000011111111111111111111111000000000000000000000
00000000000000000000000000000000000011111111111111111111111000000000000000000000
00000000000000000000000000000000000011111111111111111111110100000000000000000000
00000000000000000000000000000000000011111111111111111111011100000000000000000000
00000000000000000000000000000000000111111111111111111110100000000000000000000000
00000000000000000000000000000000000111111111111111111110000000000000000000000000
00000000000000000000000000000000000111111111111111111110000000000000000000000000
00000000000000000000000000000000000111111111111111111110000000000000000000000000
00000000000000000000000000000000000111111111111111111110000000000000000000000000
00000000000000000000000000000000000111111111111111111110000000000000000000000000
00000000000000000000000000000000000111111111111111111110000000000000000000000000
00000000000000000000000000000000001111111111111111111110000000000000000000000000
00000000000000000000000000000000001111111111111111111110000000000000000000000000
00000000000000000000000000000000001111111111111111111110000000000000000000000000
00000000000000000000000000000000001111111111111111111111000000000000000000000000
00000000000000000000000000000000001111111111111111111111000000000000000000000000
00000000000000000000000000000000001111111111111111111111000000000000000000000000
00000000000000000000000000000000001111111111111111111111000000000000000000000000
00000000000000000000000000000000001111111111111111111111000000000000000000000000
00000000000000000000000000000000011111111111111111111111000000000000000000000000
00000000000000000000000000000000011111111111111111111111000000000000000000000000
00000000000000000000000000000000011111111111111111111111000000000000000000000000
00000000000000000000000000000000011111111111111111111111000000000000000000000000
00000000000000000000000000000000011111111111111111111111100000000000000000000000
00000000000000000000000000000000011111111111111111111111100000000000000000000000
00000000000000000000000000000000011111111111111111111111100000000000000000000000
00000000000000000000000000000000011111111111111111111111100000000000000000000000
00000000000000000000000000000000111111111111111111111111100000000000000000000000
00000000000000000000000000000000111111111111111111111111100000000000000000000000
00000000000000000000000000000000111111111111111111111111100000000000000000000000
00000000000000000000000000000000111111111111111111111111100000000000000000000000
00000000000000000000000000000000111111111111111111111111100000000000000000000000
00000000000000000000000000000000111111111111111111111111110000000000000000000000
00000000000000000000000000000000111111111111111111111111110000000000000000000000
00000000000000000000000000000000111111111111111111111111110000000000000000000000
00000000000000000000000000000000111111111111111111111111110000000000000000000000
00000000000000000000000000000000111111111111111111111111110000000000000000000000
00000000000000000000000000000001111111111111111111111111110000000000000000000000
00000000000000000000000000000001111111111111111111111111110000000000000000000000
00000000000000000000000000000001111111111111111111111111110000000000000000000000
00000000000000000000000000000001111111111111111111111111110000000000000000000000
00000000000000000000000000000001111111111111111111111111110000000000000000000000
00000000000000000000000000000001111111111111111111111111110000000000000000000000

 閾値をいろいろ変えると、モノクロ画像の
 見え方が変わるのがわかります。


目次

inserted by FC2 system