現在、私は、画像内の接続されたコンポーネントを決定するために、より最適な解決策を見つけようとしています。現在、特定の値を持つ座標を持つ配列があります。私は彼らが触れている場合に基づいて、これらの座標のグループを作成したいと思います。私はnumpyの配列を使用していますが、現在、各値(左上、上中央、右上、中央左、中央右、左下、下中央、右下)が配列内にあるかどうかをチェックする必要があります。隣り合った値がかっこいい行列であるかどうかを確認する
for x in range (0, groupCoords.shape[0]):
global tgroup
xCoord = groupCoords.item((x,0))
yCoord = groupCoords.item((x,1))
new = np.array([[xCoord, yCoord]])
if np.equal(Arr,[xCoord, yCoord+1]).all(1).any():
tgroup = np.append(tgroup, [[xCoord,yCoord+1]], axis=0)
new = np.append(new, [[xCoord,yCoord+1]], axis=0)
index = np.argwhere((Arr == [xCoord,yCoord+1]).all(1))
Arr = np.delete(Arr, (index), axis=0)
if np.equal(Arr,[xCoord, yCoord-1]).all(1).any():
tgroup = np.append(tgroup, [[xCoord, yCoord-1]],axis=0)
new = np.append(new, [[xCoord,yCoord-1]], axis=0)
index = np.argwhere((Arr == [xCoord,yCoord-1]).all(1))
Arr = np.delete(Arr, (index), axis=0)
if np.equal(Arr,[xCoord+1, yCoord]).all(1).any():
tgroup = np.append(tgroup, [[xCoord+1,yCoord]],axis=0)
new = np.append(new, [[xCoord+1,yCoord]], axis=0)
index = np.argwhere((Arr == [xCoord+1,yCoord]).all(1))
Arr = np.delete(Arr, (index), axis=0)
if np.equal(Arr,[xCoord+1, yCoord+1]).all(1).any():
tgroup = np.append(tgroup, [[xCoord+1,yCoord+1]],axis=0)
new = np.append(new, [[xCoord+1,yCoord+1]], axis=0)
index = np.argwhere((Arr == [xCoord+1,yCoord+1]).all(1))
Arr = np.delete(Arr, (index), axis=0)
if np.equal(Arr,[xCoord+1, yCoord-1]).all(1).any():
tgroup = np.append(tgroup, [[xCoord+1,yCoord-1]],axis=0)
new = np.append(new, [[xCoord+1,yCoord-1]], axis=0)
index = np.argwhere((Arr == [xCoord+1,yCoord-1]).all(1))
Arr = np.delete(Arr, (index), axis=0)
if np.equal(Arr,[xCoord-1, yCoord]).all(1).any():
tgroup = np.append(tgroup, [[xCoord-1,yCoord]],axis=0)
new = np.append(new, [[xCoord-1,yCoord]], axis=0)
index = np.argwhere((Arr == [xCoord-1,yCoord]).all(1))
Arr = np.delete(Arr, (index), axis=0)
if np.equal(Arr,[xCoord-1, yCoord+1]).all(1).any():
tgroup = np.append(tgroup, [[xCoord-1,yCoord+1]],axis=0)
new = np.append(new, [[xCoord-1,yCoord+1]], axis=0)
index = np.argwhere((Arr == [xCoord-1,yCoord+1]).all(1))
Arr = np.delete(Arr, (index), axis=0)
if np.equal(Arr,[xCoord-1, yCoord-1]).all(1).any():
tgroup = np.append(tgroup, [[xCoord-1,yCoord-1]],axis=0)
new = np.append(new, [[xCoord-1,yCoord-1]], axis=0)
index = np.argwhere((Arr == [xCoord-1,yCoord-1]).all(1))
Arr = np.delete(Arr, (index), axis=0)
ただし、画像が大きい場合、これには明らかに時間がかかります。私はイメージの幅と高さの次元を持つブール値行列を作成し、イメージのピクセルに対応する行列の値に値 "true"を割り当てます(画像は黒です)。
このような各値をチェックする代わりに、別の「真の」値を直接囲む要素が真であるかどうかを判断することは可能でしょうか?出力が「真」の値が触れている場合、私は改善するために期待しています関数はチェックでしょう
[
[0 0]
[0 1]
[0 2]
]
ようになり
[
[0 0]
[0 1]
[0 2]
[10 2]
]
:
これは、入力配列は次のようになります。新しい値が見つかるたびに実行されるすべての値の「ネットワーク」を作成します。
はい座標の順序は重要ですか?私たちはそこで座標を取り除いていると思います。あなたは、彼らが片方の側から別の側へ(もしあれば)、または他の何らかの基準で接続されている順序でそれらを必要としていますか? – Divakar
入力の小さな例(4x4配列など)と期待される出力を与えることができますか? –
@Divakar順序は関係ありません。配列にグループ化するだけです。私はこれをOCRメソッドとして使用しています。そのため、接続されているコンポーネントのリストを作成して、イメージの各文字になります。 –