[matplotlib animation] 41. approximate_polygonのtolerance変化アニメーション

matplotlib Animation

はじめに

matplotlib FuncAnimationによる、approximate_polygonのtoleranceを変化させるアニメーションの例を説明する。

コード

解説

モジュールのインポート

図形データの生成

閉じた台形状の図形データとなる。

図の作成

ax.set_aspect(‘equal’)ですべての図のアスペクト比を揃えて、
ax.plot(shape1[:, 0], shape1[:, 1])で元データの図形を表示する。

アニメーションの設定

空のリストの生成

アニメーション関数内で作成した図をいれるリスト。
ns1がapproximate_polygonを実行した図、
ns2がsubdivide_polygonを実行した図となる。

アニメーションの関数

古いプロットを消す
図形の細分化

new_shape1に所定の回数のsubdivide_polygonを適用し、細分化しておく。

subdivide_polygonについては、以下で解説した。

[scikit-image] 20. 図形の近似と細分化(measure.approximate_polygon)
skimage.measure の approximate_polygonを用いた図形の近似
図形の近似

approximate_polygon()で図形の近似をする。ここでは、toleranceを順次変化させて、近似される形の変化をアニメーションで表示する。

approximate_polygonについても、以下で解説した。

[scikit-image] 20. 図形の近似と細分化(measure.approximate_polygon)
skimage.measure の approximate_polygonを用いた図形の近似
図の表示

プロットして、リストに.append()で追加することで表示できる。

タイトルの表示

ax.set_title(“tolerance=”+str(0.01*num)+”,point=”+str(len(appr_shape1)-1))でタイトルにtoleranceの値と、approximate_polygonで近似した図形のデータポイント数を表示する。

アニメーションの表示

fargs=(new_shape,)とすることで、ローカルの変数(new_shape)をアニメーション関数内にもっていくことができる。
HTML(ani.to_html5_video())とすればjupyter notebook上にアニメーションを表示できる。

参考

[scikit-image] 20. 図形の近似と細分化(measure.approximate_polygon)
skimage.measure の approximate_polygonを用いた図形の近似

コメント