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

matplotlib

はじめに

この記事では、matplotlibのwidgets.Sliderを使って画像の2値化処理をインタラクティブに調整する方法について解説します。ヒストグラム上でしきい値を動かすことで、リアルタイムに2値化された画像がどのように変化するかを確認できます。

コード

解説

モジュールのインポート

データの生成

画像の表示

この記事では画像の2値化処理について説明します。なお、matplotlibにおける画像の基本的な取扱いについては下記で解説しています。

[matplotlib] 24. 画像の表示、保存、画像処理について
Pythonのmatplotlibライブラリを使った画像の読み込み、表示、処理、保存方法について解説します。imshowメソッドの使い方や画像データの操作など、プログラミング初心者にもわかりやすく説明しています。

2値像とヒストグラムの図の設定

plt.subplots(1, 2)を使用して横に並んだ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’はスライダーのラベルを指定します。スライダーの選択可能な範囲はヒストグラムと同じ範囲に設定しています。また、valinitはスライダーの初期値を表します。

スライダーの適用

スライダーの値はslib = sli_b.val で取得し、この値を使って画像の2値化処理を行い表示します。また、l.set_xdata((slib,slib)) を用いることで、ヒストグラム上のしきい値を示す垂線がスライダーで選択した位置に移動します。

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

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

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

まとめ

matplotlibのwidgets.Sliderを活用することで、画像処理のパラメータ調整が直感的かつ効率的に行えるようになります。特に2値化処理のような閾値調整が必要な場合、スライダーを用いたインタラクティブな操作は非常に有効です。この手法は他の画像処理タスクにも応用可能で、Pythonによる画像処理の幅を広げてくれるでしょう。

参考

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機能を使って画像の二値化処理をリアルタイムで調整する方法を解説。ヒストグラム上でしきい値を動かしながら最適な二値化像を得るテクニックを紹介します。

コメント

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