2

モルフォロジー パッケージを使用して、使用している画像のスケルトン バージョンを作成しています。骨格化されたバージョンで末端を​​検出できますが、構造が新しい枝を作るポイントも検出できるようにしたいと考えています。h1、h2、h3 という名前の 3 つの異なるマトリックスを使用してそれらを検出することから始めました。今のところ、フィルタリング用にミス マトリックスを埋めていません。これは後で追加しようとします。後でフィルタリングを試したい場合に備えて、編集を容易にするために 5x5 マトリックスを使用しています。

問題は、マトリックス h1 と h2 のパターンがスケルトン化されたバージョンに存在する場合でも、それらを検出できないことです。行列 h3 は機能します。なぜこれが起こるのかわかりません。

def branches(img_pruned,cropped_image):
img = img_pruned
nbranches = 0
branches = cropped_image

h1 = [
    [0,0,0,0,0],
    [0,0,0,1,0],
    [0,1,1,0,0],
    [0,0,1,0,0],
    [0,0,0,0,0]]
h2 = [
    [0,0,0,0,0],
    [0,1,0,1,0],
    [0,0,1,0,0],
    [0,0,1,0,0],
    [0,0,0,0,0]]
h3 = [
    [0,0,0,0,0],
    [0,1,1,1,0],
    [0,0,1,0,0],
    [0,0,0,0,0],
    [0,0,0,0,0]]
m1 = [[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]]

hitlist = []
misslist = []

for i in range(4):
    hitlist.append(np.rot90(h1, i))
    hitlist.append(np.rot90(h2, i))
    hitlist.append(np.rot90(h3, i))
for t in range(12):
    misslist.append(m1)

for hit,miss in zip(hitlist,misslist):
    branchimg = m.binary_hit_or_miss(img,hit,miss)

for y in range(len(branchimg)):
    for x in range(len(branchimg[y])):
        if branchimg[y][x]:
            nbranches +=1
            branches[y][x] = (0,0,255)

print nbranches
return branches

私たちが撮った元の画像。

画像:

スケルトン化した写真は、ターミニ (枝の終点) を滑らかにするために剪定も使用しました。

4

1 に答える 1