はじめに
matplotlibでは対話的にパラメータを調整できる機能がある。ここでは、その機能の一つであるwidgets.Sliderにより、ヒストグラム上でしきい値を動かし、2値化像を変化させる方法について説明する。
コード

解説
モジュールのインポート
データの生成
画像の表示

この画像を2値化する。matplotlibにおける画像の取扱については下記で解説した。

2値像とヒストグラムの図の設定
plt.subplots(1, 2)とすることで横に並んだ図を作成し、左の図であるax1に2値化像、右の図のax2にヒストグラムを表示する。
plt.subplots_adjust(bottom=0.25)により、スライダーを表示する領域を確保する。
2値像とヒストグラムの表示
2値化はbinarized = Z>0.1で行う。これで0.1より大きい要素がTrueとなってそれ以外の要素はFalseとなる。
ヒストグラムはax.hist()で作成した。
l, = ax2.plot((0.1,0.1),(0,5000),’k-‘)によって、ヒストグラム上にしきい値の値を示す垂線を表示する。
スライダーの設定
スライダーの設置
2値化像とヒストグラムのグラフの下にスライダーを設置する。
スライダーの調整
sli_b = Slider(ax_b, ‘Binarize’, vmin, vmax, valinit=0.1)では、ax_bがスライダーを設置するところで、’Binarize’はスライダーのラベル、スライダーの選択可能な範囲はヒストグラムと同じとした。valintはスライダーの初期値となる。
スライダーの適用
slib = sli_b.valで、スライダーでセットした値を取得し、その値で2値化を行い画像を表示する。
l.set_xdata((slib,slib))によりヒストグラム上でしきい値を示す垂線をスライダーで選択した値に移動する。
スライダーを動かした場合の変化


参考
より簡単な方法
下記記事のipywidgetsを使えば、より簡単かつ柔軟に対話的な操作ができる。

コメント
[…] [matplotlibの使い方] 38. widgets.Sliderによる画像の2値化matplotlibではインタラクティブにパラメータを調整できる機能がある。ここでは、その機能の一つであるwidgets.Sliderにより、ヒストグラ […]