私はあなたが何を求めているのか理解していると思っています。あなたのピクセルの間に共有される「壁」の数を数えることをお勧めします:
私は、左から右へと連続性が低下していると主張します。
壁の数を数えることは難しいことではありませんが、ここで実装した方法が遅くなる可能性があります。共有壁の
import random
width = 5
height = 5
image = [[0 for x in range(width)] for y in range(height)]
num_pts_in_individual = 4
#I realize this may give replicate points
individual = [[int(random.uniform(0,height)),int(random.uniform(0,width))] for x in range(num_pts_in_individual)]
#Fill up the image
for point in individual:
image[point[0]][point[1]] = 1
#Print out the image
for row in image:
print row
def count_shared_walls(image):
num_shared = 0
height = len(image)
width = len(image[0])
for h in range(height):
for w in range(width):
if image[h][w] == 1:
if h > 0 and image[h-1][w] == 1:
num_shared += 1
if w > 0 and image[h][w-1] == 1:
num_shared += 1
if h < height-1 and image[h+1][w] == 1:
num_shared += 1
if w < width-1 and image[h][w+1] == 1:
num_shared += 1
return num_shared
shared_walls = count_shared_walls(image)
print shared_walls
異なる画像やカウント:これで
[0, 0, 0, 0, 0]
[0, 1, 0, 0, 0]
[0, 0, 0, 0, 0]
[1, 0, 0, 1, 1]
[0, 0, 0, 0, 0]
2
[1, 0, 0, 0, 0]
[0, 0, 0, 1, 0]
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[1, 0, 1, 0, 0]
0
[0, 0, 0, 1, 1]
[0, 0, 0, 1, 0]
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[1, 0, 0, 0, 0]
4
一つの大きな問題は、ピクセル位置の変化が発生した場合には、共有の壁の数を変更しないということです、それはしませんスコアに影響します。おそらく、あなたが記述した距離法と共有壁アプローチの組み合わせが最適かもしれません。
例を挙げてみると、これが多く役立ちます。現時点では、あなたが実質的な反応を得るのではないかと疑います。また、プログラミングに関する質問をしていないときには、これを言語でタグ付けしないでください。 – Prune
@Prune私は質問を編集しましたが、もう一度それを開くために追加することをお勧めしますか? – h4k1m
私は、あなたがグループを定義していると感じているものと、それに影響を与えるもの(それはあなたが必要とする言葉だと思います)について、さらに議論を加えることをお勧めします。たとえば、ダイヤモンドの1組の正方形を考えてみましょう... a2、c1、c1、d2の円弧と比較して、チェス/戦艦表記法... a2、b3、b1、c2を使用しましょう。どちらがより連続していますか?どのピクセルがクラスタの中心からどれくらい離れていても、そのクラスタの一部であることができますか?クラスタの連続性はその範囲に影響しますか?競合する3つのクラスタのうち、どのクラスタがそのクラスタ間に1つのピクセルを要求しているか、またはそのクラスタがあるかどうかを決定する「重力」の式は何ですか? – Prune