[matplotlib] 38. widgets.Sliderによる画像の2値化

matplotlib

はじめに

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

コード

解説

モジュールのインポート

データの生成

画像の表示

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

[matplotlib] 24. 画像
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))によりヒストグラム上でしきい値を示す垂線をスライダーで選択した値に移動する。

スライダーを動かした場合の変化

コードをダウンロード(.pyファイル)

コードをダウンロード(.ipynbファイル)

参考

Slider Demo — Matplotlib 3.1.2 documentation
matplotlib.widgets — Matplotlib 3.1.2 documentation
matplotlib.pyplot.hist — Matplotlib 3.1.0 documentation

より簡単な方法

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

[ipywidgets] 1. interactによる画像の2値化
jupyter notebookでは対話的にパラメータを調整できる機能(ipywidgets)がある。ここでは、その機能の一つであるinteractにより、ヒストグラム上でしきい値を動かし、2値化像を変化させる方法について説明する。

コメント

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