2

私は自動化された「バグカウント」アルゴリズムに取り組んでおり、減算すると非常に低いレベルのコントラストをどのように認識できるのか疑問に思っています(パッドに追加のバグはありません-カメラが同じ位置にあり、照明条件が非常に似ていると仮定します) 2 枚の写真を相互に撮影すると、光の状態がほとんど異なるため、きれいな黒の画像が得られません。ここで、ガウス フィルターと mahotas.thresholding.otsu() を適用してバグがある場所を描画し (上に白いブロブを配置)、ndimage.label() を使用してそれらをカウントします。

ただし、入力画像「cropbugs.jpg」が非常に濃い灰色の場合、otsu() を適用するとランダムな出力が得られ、label() 関数はランダムなバグ カウント数を返します。画像が非常に暗い灰色であるかコントラストが低いかを認識し、バグ数を 0 に設定するにはどうすればよいですか? ありがとう

これまでの私のコードは次のようになります。

bug_img = mahotas.imread('cropbugs.jpg')
pylab.gray()

bug_img = ndimage.gaussian_filter(bug_img, 6)#8
T = mahotas.thresholding.otsu(bug_img)
pylab.imshow(bug_img > T)
labeled,nr_objects = ndimage.label(bug_img > T)
print "Bug Count: "+str(nr_objects)
pylab.imshow(labeled)
pylab.jet()
pylab.show()
4

1 に答える 1

1

この問題にアプローチする方法は複数あります

  1. (これはコメントの提案でした)。平均値、標準偏差、最大値、またはいくつかの組み合わせに基づいたタイプの固定ルールを定義します。次のいずれかのようなテストになります。

    bug_img.mean() + 2*bug_img.std() < THRESHOLD
    bug_img.std() < THRESHOLD
    bug_img.max() < THRESHOLD
    sorted(bug_img.ravel())[-10] < THRESHOLD
    
  2. テクスチャの特徴に基づく分類システムを使用します (以前の関連する質問に対する私の回答を参照してください)。

  3. labelすべてが良好であるかのように使用してから、結果をポスト フィルター処理します。例えば:

    labeled,nr_objects = mahotas.label(bug_img > T)
    sizes = mahotas.labeled.labeled_size(labeled)
    good_objects = (MIN_BUG_SIZE <= sizes) & (sizes <= MAX_BUG_SIZE)
    print np.sum(good_objects)
    
于 2013-02-02T13:40:36.133 に答える