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