問題

私はこのような画像をたくさん持っています:

enter image description here enter image description here

どのように私はサイクル、スケルトンのループを検出できますか? これを行う「特別な」機能はありますか、それともグラフとして実装する必要がありますか?

グラフオプションがある場合は、PythonグラフライブラリNetworkXが私を助けることができますか?

  ベストアンサー

スケルトンのトポロジを悪用することができます。サイクルには穴がないので、scipy.ndimageを使用して穴を見つけて比較することができます。これは最速の方法ではありませんが、コード化するのは非常に簡単です。

 import scipy.misc, scipy.ndimage

# Read the image
img = scipy.misc.imread("Skel.png")

# Retain only the skeleton
img[img!=255] = 0
img = img.astype(bool)

# Fill the holes
img2 = scipy.ndimage.binary_fill_holes(img)

# Compare the two, an image without cycles will have no holes
print "Cycles in image: ", ~(img == img2).all()

# As a test break the cycles
img3 = img.copy()
img3[0:200, 0:200] = 0
img4 = scipy.ndimage.binary_fill_holes(img3)

# Compare the two, an image without cycles will have no holes
print "Cycles in image: ", ~(img3 == img4).all()
 

私はあなたの "B"の画像を例として使用しました。最初の2つの画像は、サイクルを検出するオリジナルと塗りつぶされたバージョンです。 2番目のバージョンでは、私はサイクルを壊して何も満たされていないので、2つの画像は同じです。

enter image description here

  同じタグがついた質問を見る

pythonopencvimage-processingmathematical-morphologyscikit-image