Python.use(better, GUI=Tkinter)《33》事例:ヒストグラムと2値化(3)★★
♪都合により「 続・ひよ子のきもち 」にお引越し致します。(^_^)/~
★引越し後は(予告なしに)削除しますので、新しい記事をご覧ください。m(_o_)m
-----------------------( きりとれません )-----------------------------
------------ 序 ------------
ここで公開している記事は「キーワード検索」を利用するための便宜的なものです。詳細は、正式版(PDF)をダウンロードしてご覧ください。
⇒「piyo070221.pdf」をダウンロード
【目次】関連記事
〔Python/Jython/Tkinter 入門〕Python.use(better, GUI=Tkinter)
Canvas 部品の理解を確認するために、簡単なアプリケーションを作成します。
------------ 本文 ------------
《33》事例:ヒストグラムと2値化(3)★★
(承前)
def draw_histo(self, canvas, median, histo):
self._draw_graph(canvas, median,
histo,
histo.items(),
max(histo.values()))
draw_histo では、ヒストグラム histo を図に描きます。
def draw_CDF(self, canvas, median, cdf):
self._draw_graph(canvas, median,
cdf,
enumerate(cdf),
self.image.width()*self.image.height())
draw_CDF では、累積ヒストグラム cdf を図に描きます。
def _draw_graph(self, canvas, median, table, items, max):
ox, dx, H = self.context
for i, e in items:
x = ox+dx*i
y = H*(1-e/float(max))
canvas.create_line(x, y, x, H)
x = ox+dx*median
y = H*(1-table[median]/float(max))
canvas.create_line(x, y, x, H, fill=self.fill_color)
_draw_graph は(draw_histo および draw_CDF に共通する)実際に図を描くための補助関数です。中央値 median に相当するバーを self.fill_color(赤色)で描きます。表 table は、濃淡レベルごとの画素数を参照します。最大値 max が、最も高いパーの長さ(画素数)H と等しくなるように正規化されます。
def draw_image(self, canvas, median):
src = self.image
dst = self.dest = src.copy()
dst.blank()
for y in range(src.height()):
for x in range(src.width()):
color = src.get(x, y).split(" ")
r, g, b = tuple(map(int, color))
if g < median:
dst.put(self.on_color, to=(x, y))
canvas.create_image(0, 0, anchor=NW, image=dst)
draw_image では、中央値 median を閾値として2値化した画像を描きます。copy(self) は、同じデータを持つ画像を作成(複製)します。put(self, data, to=None) は、行方向に連続する画像データ(画素の色情報)data を、to= から始まる座標の位置に設定します。ここでは、閾値を超えない緑成分のデータに対しては、各画素ごとに self.on_color(黒色)を設定しています。
file = "image/boat.gif"
tk_image = Tk(); tk_image.title("画像(2値化): %s"%file)
canvas_image = Canvas(tk_image, width=280, height=260)
canvas_image.pack()tk_histo = Tk(); tk_histo.title("ヒストグラム: %s"%file)
canvas_histo = Canvas(tk_histo, width=540, height=100)
canvas_histo.pack()tk_CDF = Tk(); tk_CDF.title("累積密度関数(CDF): %s"%file)
canvas_CDF = Canvas(tk_CDF, width=540, height=100)
canvas_CDF.pack()dip = DIP(file)
med, histo, cdf = dip.median()
dip.draw_histo(canvas_histo, med, histo)
dip.draw_CDF (canvas_CDF , med, cdf)
dip.draw_image(canvas_image, med)canvas_histo.mainloop()
canvas_CDF.mainloop()
canvas_image.mainloop()
このコードを実行すると、3つのウィンドウが現われます。それぞれに、ヒストグラム、累積ヒストグラム、2値化画像が描かれます。
==============================================
森こねこ 著 ◆ 監修:小泉ひよ子とタマゴ倶楽部
| 固定リンク
« Python.use(better, GUI=Tkinter)《32》事例:ヒストグラムと2値化(2)★★ | トップページ | Shall_we_Agile = Java.use(better, Python) # Swing《31》Arc(1)★ »
「.連載: Python.use(better, GUI=Tkinter)」カテゴリの記事
- Python.use(better, GUI=Tkinter)《33》事例:ヒストグラムと2値化(3)★★(2007.02.21)
- `Python.use(better, GUI=Tkinter)(2007.12.01)
- Python.use(better, GUI=Tkinter)《57》Text 部品に画像を組み込む★(2007.04.24)
- Python.use(better, GUI=Tkinter)《56》Text 部品に他の部品を組み込む★(2007.04.23)
- Python.use(better, GUI=Tkinter)《60》事例:クイックリファレンスツール(3)★★(2007.04.27)
「JML/Java/Eclipse」カテゴリの記事
- Shall_we_Agile = Java.use(better, Python) # Swing《6.5》モジュール:jarray(2008.04.25)
- Java.use(better, Jython)《61》アジァイル開発:要求仕様の変更★(2008.03.03)
- Python.use(better, GUI=Tkinter)《33》事例:ヒストグラムと2値化(3)★★(2007.02.21)
- 連載: Java.use(better) Jython はじめました《11》JavaBeans(1)値の参照と変更(2007.09.10)
- Shall_we_Agile = Java.use(better, Python) # Swing《43》JList(3)選択したらどうなるの★(2007.05.30)
「Jython/Python」カテゴリの記事
- Shall_we_Agile = Java.use(better, Python) # Swing《6.5》モジュール:jarray(2008.04.25)
- 【準備中】連載: Java.use(better) Jython はじめました《1》文字列とリスト(1)★(2006.07.10)
- Java.use(better, Jython)《61》アジァイル開発:要求仕様の変更★(2008.03.03)
- Python.use(better, GUI=Tkinter)《33》事例:ヒストグラムと2値化(3)★★(2007.02.21)
- 連載: Java.use(better) Jython はじめました《11》JavaBeans(1)値の参照と変更(2007.09.10)

コメント