円形度とは

円っぽさを定量的にはかるための尺度で、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