因此,我目前正試圖找出一個更優化的解決方案來確定圖像中的連通組件。目前,我有一個具有特定值的座標的數組。我想根據它們是否觸摸來創建這些座標的組。我正在使用一個numpy數組,並且目前我必須檢查每個值(左上角,上中角,右上角,中間左側,中間右側,左下角,中下角,右下角)是否在該數組中。我這樣做是通過此代碼:檢查相鄰值是否在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」賦值給矩陣中對應於圖像中像素的值(圖像爲黑白)。
我想知道,是否有可能,而不是像這樣檢查每個值,確定它們是否是包含另一個「真實」值的「true」元素?
這是輸入數組會是什麼樣子:
[
[0 0]
[0 1]
[0 2]
[10 2]
]
輸出看起來像
[
[0 0]
[0 1]
[0 2]
]
功能我希望能改進會檢查是否「真」值是感人,並創建一個所有觸及的值的「網絡」(它會繼續運行新的值)。
請問座標的順序很重要?我想我們正在篩選出那裏的座標。同樣,你是否需要他們從一端連接到另一端(如果適用)或其他標準的順序? – Divakar
你能給一個輸入的小例子(比如4x4數組)和期望的輸出嗎? –
@Divakar順序並不重要,我只需要將它們組合成一個數組。我將它用作OCR方法,因此它所做的是創建連接組件的列表,最終成爲圖像中的每個字符。 –