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

matplotlib Animation

はじめに

この記事では、scikit-imageライブラリのexposure.adjust_gamma関数を使用して、画像のガンマ値を変化させた際の効果をアニメーションで可視化する方法について解説します。ガンマ補正は画像の明るさを調整する技術で、ガンマ値を変えることで画像の暗部や明部がどのように変化するかを示します。

コード

解説

モジュールのインポート

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

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

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

ヒストグラムと累積ヒストグラムをアニメーション表示するために、空のリスト「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を使用してアニメーションを表示します。updateを20ステップ実行してアニメーションを生成します。intervalは400msに設定されているため、全体で8秒のアニメーションとなります。jupyter notebook上ではHTML(ani.to_html5_video())を実行することでアニメーションを表示できます。

まとめ

scikit-imageのexposure.adjust_gamma関数を用いたガンマ補正のアニメーション可視化により、画像処理における明暗調整の効果を直感的に理解することができます。異なるガンマ値が画像とそのヒストグラムにどのような影響を与えるかを動的に観察することで、画像処理における適切なパラメータ選択の参考になります。

参考

[scikit-image] 7. ガンマ補正と対数補正
scikit-imageライブラリを使用したガンマ補正と対数補正による画像コントラスト調整技術について解説します。暗部や明部の詳細を強調するこれらの手法の特性、適用方法、効果の違いを理解し、画像処理の幅を広げましょう。
matplotlib.animation.FuncAnimation — Matplotlib 3.10.6 documentation

コメント