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

python

はじめに

scikit-imageのmeasureモジュールに含まれるapproximate_polygon関数は、図形の輪郭を近似したり細分化したりするのに役立ちます。この関数を使うと、複雑な形状を単純化したり、逆に単純な形状をより詳細にしたりすることができます。本記事では、この関数の使い方と応用例について解説します。

コード

解説

モジュールのインポート

図形データ

閉じた台形の形をした図形データとなります。

図形の細分化

.copyで配列をコピーし、そのコピーに細分化処理を適用します。

for _ in range(5):は、変数を使わずに同じ処理を5回繰り返す構文です。 subdivide_polygonを使用すると、B-スプライン曲線による図形の細分化が可能になります。 degree=2はB-スプライン曲線の次数を2に設定します。preserve_ends=Trueを指定すると、配列の最初と最後の要素を保持したまま計算が行われます。

図形の近似

approximate_polygon()関数は、細分化した画像に適用することで図形の近似を行えます。tolerance(許容誤差)パラメータは、元の多角形の点から近似多角形チェーンまでの最大距離を表します。toleranceが0の場合、元の座標配列がそのまま返されます。

図の表示

左側の図は上記コードで表示されます。

画像データの近似

画像データの生成と表示

円が2こ、楕円が1この画像が表示されます。

画像中の図形に対する近似線

find_contoursで検出した等高線に対してapproximate_polygonを実行します。toleranceを小さくすると元データに近い形状になり、大きくするとよりシンプルな近似となります。これは右側の図に示されています。

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

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

まとめ

scikit-imageのmeasure.approximate_polygon関数を使うことで、図形の輪郭点を減らして近似したり、逆に増やして細分化したりすることができます。許容誤差パラメータを調整することで、近似の精度をコントロールすることが可能です。この機能は画像処理や形状解析において、計算効率の向上やノイズ除去に役立ちます。

参考

Approximate and subdivide polygons — skimage 0.25.2 documentation

コメント

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