円形度とは
円っぽさを定量的にはかるための尺度で、1.0に近いほど円らしいとする
円形度を求める理由
画像処理で対象の画像からいろんな形の図形が抽出できたとき、目的とするオブジェクトかどうか判定するのに円形度を使うことができる
計算方法
円形度 = 4π * S/L^2
(S = 面積, L = 図形の周囲長)
円形度の計算の説明
図形を円と仮定して r = 半径とすると
面積 S = π * r^2
周囲長 L = 2πr
4π * S/L^2 の公式のS, Lをrで置き換える
4π * πr^2/(2πr)^2
これを計算すると
4π * S/L^2 = 1
正円の時,1になる
opencvを使って、円形度を計算する
pythonでこんな感じ
import cv2
import numpy as np
# contourは輪郭点のリスト cv2.findContours
# areaは図形の面積 cv2.contourArea
def calcCircleLevel (contour, area):
perimeter = cv2.arcLength(contour, True)
circle_level = 4.0 * np.pi * area / (perimeter * perimeter); # perimeter = 0 のとき気をつける
return circle_level