[OpenCV]スポット検出



Blobは


複数の共通属性(階調値)の画像を共有する接続画素群.上の画像では、暗接続された領域は斑点であり、斑点感知の目標はこれらの領域を識別し表示することである.

スポット検出動作手順


SimpleBlobDetectorは、以下に説明するいくつかの簡単なアルゴリズムに基づいて、名前に示すようにします.アルゴリズムはパラメータによって制御され、次のステップがあります.

  • Thresholding:minThresholdからの閾値を用いてソース画像を閾値処理し、ソース画像を複数のバイナリ画像に変換する.これらの閾値は閾値StepからmaxThresholdに増加する.1番目のしきい値はminThreshold、2番目のしきい値はminThreshold+しきい値Step、3番目のしきい値はminThreshold+2 xしきい値です.

  • 組み合わせ:各バイナリ画像に接続されている白いピクセルを組み合わせます.これは李真布洛と申します.

  • Merging:バイナリ画像では、バイナリブールの中心を計算し、minDistBetweenBlobsよりも位置に近いブールを合成します.

  • 中心と半径の計算:新しく結合した混合液の中心と半径を計算して戻します.
  • 斑点をカラー、サイズ、シェイプでフィルタ


    SimpleBlobDetectorのパラメータを設定することで、必要なBlobタイプをフィルタできます.

    じゅんかんせい


    斑点が円にどれだけ近いかを測定する.たとえば、正の六角形は正の六角形の円形よりも高いです.プロトタイプフィルタリングを行うには、filterByCircularity=1をに設定します.次にminCircularityとmaxCircularityに適切な値を設定します.プロトタイプ図の定義は次のとおりです.

    すなわち、円の円度は1、正方形の円度は0.785である.

    とつせい


    凸性は(円球の面積/凸殻の面積)として定義されます.現在、形状の突起のハウジングは、形状を完全に包む最も密な突起の形式である.凸で濾過するには、FilterByVolxity = 1を設定し、0 ≤ minVolxity ≤ 1およびmaxVolxity ≤ 1を設定します.

    かんせいひ


    形の長さを測ることです.たとえば、円の場合は1、楕円の場合は0~1、直線の場合は0です.慣性比で濾過するには、filterByInertia = 1および0 ≤ minInertiaRatio ≤ 1に設定します.

    パラメータの設定

    params = cv2.SimpleBlobDetector_Params()
    
    # Change thresholds
    params.minThreshold = 10;
    params.maxThreshold = 200;
    
    # Filter by Area.
    params.filterByArea = True
    params.minArea = 1500
    
    # Filter by Circularity
    params.filterByCircularity = True
    params.minCircularity = 0.1
    
    # Filter by Convexity
    params.filterByConvexity = True
    params.minConvexity = 0.87
    
    # Filter by Inertia
    params.filterByInertia = True
    params.minInertiaRatio = 0.01
    
    # Create a detector with the parameters
    ver = (cv2.__version__).split('.')
    if int(ver[0]) < 3 :
    	detector = cv2.SimpleBlobDetector(params)
    else : 
    	detector = cv2.SimpleBlobDetector_create(params)