[matplotlib animation] 32. scikit-image のexposure.adjust_gamma におけるgamma値変化アニメーション

matplotlib Animation

はじめに

skimage.exposureの adjust_gamma のgamma値を変化させたときの画像とヒストグラムの変化をアニメーションで示す。

コード

解説

モジュールのインポート

画像の読み込みとグレースケール化

figの作成とヒストグラムの図の設定

x軸のラベルと軸範囲、y軸のラベルのフォーマットの調整をする。
ax_cdf = ax[1].twinx()でx軸を共有して、y軸の第2軸を利用して、累積ヒストグラムを表示する。

ヒストグラムと累積ヒストグラムをアニメーション表示するため、空のリスト、linesとBarsを作成しておく。

アニメーションの設定

アニメーションでは古いグラフを消して新しいグラフを表示するという動作を繰り返すので、ax[0].cla()で現在表示されている画像を消す。ax[1]を.cla()で消すと、軸ラベルの設定なども消えるので、データのみを消す。
.pop().remove()で消すことができる。

exposure.adjust_gamma()でガンマ補正をかけて、imshow()でax[0]に表示している。
ax[0].set_title(“gamma = “+str(num/10+0.1)[:3])で、現在のガンマ値をタイトルに表示する。

ax[1].histでアニメーションを表示しようとするとうまくいかないので、np.histogramでデータを生成して、それを.bar()で表示していく方法を採用した。
累積ヒストグラムは exposure.cumulative_distribution()で作成できる。

アニメーションの表示

FuncAnimationでanimationの表示する。updateを20step実行してアニメーションとする。intervalは400 ms なので8秒のアニメーションとなる。
HTML(ani.to_html5_video())でjupyter notebook上にアニメーションを表示できる。

参考

[scikit-image] 7. ガンマ補正と対数補正
skimage.exposureのadjust_gamma と adjust_logによる画像のコントラストの補正
matplotlib.animation.FuncAnimation — Matplotlib 3.9.3 documentation

コメント