[matplotlib animation] 27. スノーノイズ

matplotlib Animation

はじめに

この記事では、matplotlib FuncAnimationを使用してスノーノイズのアニメーションを作成する方法について解説しています。ランダムなドットがスクリーン上で動き回る視覚効果を実現するためのコードと手順が紹介されています。

コード

解説

モジュールのインポート

図と軸と軸ラベルの設定

軸のラベルを非表示にし、軸の目盛を白くして見えないようにしています。

スノーノイズデータの生成

スノーノイズとは、ブラウン管TVでアナログテレビ放送を受信する際に生じるノイズのことです。

np.random.randint(0,2,(240,320,10))を使用して0または1のランダムなデータ群を生成します。このデータ構造は、(240,320)サイズのデータが10個あるかたちになっています。データのサイズはブラウン管TVのアスペクト比と同じ4:3に設定しました。

アニメーションの設定

アニメーションは古い画像を消去して新しい画像を表示する動作を繰り返すため、ax.cla()を使用して現在表示されている画像を消去しています。

plt.imshow(data[:,:,num], cmap=’binary’, vmin=0, vmax=1)を使用して、白黒のスノーノイズ画像をnumパラメータに従って順次表示します。つまり、data[:,:,0]、data[:,:,1]、data[:,:,2]という順序でデータが表示されていきます。

アニメーションの表示

FuncAnimationを使用してアニメーションを表示します。updateを10ステップ実行することでアニメーションを生成します。intervalパラメータは100msに設定されているため、全体で1秒のアニメーションとなります。

また、HTML(ani.to_html5_video())を使用することで、Jupyter Notebook上に直接アニメーションを表示できます。

アニメーションの保存

ani.save(‘snownoise.mp4’, writer=”ffmpeg”, dpi=dpi)を使用してアニメーションを保存できます。dpiパラメータを設定することで、特定の解像度で保存することが可能です。

ffmpegのインストールが必要な場合は、

conda install -c anaconda ffmpeg 

によりインストールします。(condaでモジュールの管理をしている場合)

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

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

まとめ

matplotlibのFuncAnimationを使えば、簡単なコードでスノーノイズのようなランダムなアニメーション効果を実装できます。異なるパラメータを調整することで、様々な視覚効果を作り出すことが可能です。

参考

スノーノイズ - Wikipedia
pyplot animation — Matplotlib 3.10.6 documentation

コメント