3 回答

TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超8個(gè)贊
您可以使用scipy的卷積函數(shù),該函數(shù)的好處是可以一次將任何特定的遮罩(即內(nèi)核)放置在數(shù)組中任意數(shù)量的給定坐標(biāo)上:
import numpy as np
from scipy.ndimage.filters import convolve
首先創(chuàng)建一個(gè)坐標(biāo)數(shù)組,其中將您希望遮罩(內(nèi)核)居中的位置的坐標(biāo)標(biāo)記為2
background = np.ones((10,10))
background[5,5] = 2
print(background)
[[ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1. 2. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]]
創(chuàng)建您的面具:
y,x = np.ogrid[-3: 3+1, -3: 3+1]
mask = x**2+y**2 <= 3**2
mask = 254*mask.astype(float)
print(mask)
[[ 0. 0. 0. 254. 0. 0. 0.]
[ 0. 254. 254. 254. 254. 254. 0.]
[ 0. 254. 254. 254. 254. 254. 0.]
[ 254. 254. 254. 254. 254. 254. 254.]
[ 0. 254. 254. 254. 254. 254. 0.]
[ 0. 254. 254. 254. 254. 254. 0.]
[ 0. 0. 0. 254. 0. 0. 0.]]
卷積兩個(gè)圖像:
b = convolve(background, mask)-sum(sum(mask))+1
print(b)
[[ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1. 255. 1. 1. 1. 1.]
[ 1. 1. 1. 255. 255. 255. 255. 255. 1. 1.]
[ 1. 1. 1. 255. 255. 255. 255. 255. 1. 1.]
[ 1. 1. 255. 255. 255. 255. 255. 255. 255. 1.]
[ 1. 1. 1. 255. 255. 255. 255. 255. 1. 1.]
[ 1. 1. 1. 255. 255. 255. 255. 255. 1. 1.]
[ 1. 1. 1. 1. 1. 255. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]]
請(qǐng)注意,卷積函數(shù)項(xiàng)不會(huì)上下班,即convolve(a,b)!= convolve(b,a)
還要注意,如果您的點(diǎn)在邊緣附近,則算法不會(huì)在坐標(biāo)處重現(xiàn)內(nèi)核。為了解決這個(gè)問(wèn)題,您可以使用內(nèi)核的最大軸填充背景,應(yīng)用卷積,然后刪除填充。
現(xiàn)在,您可以將任何內(nèi)核映射到數(shù)組中任意數(shù)量的點(diǎn),但是請(qǐng)注意,如果兩個(gè)內(nèi)核重疊,則它們會(huì)在重疊處相加。您可以根據(jù)需要設(shè)置閾值。
添加回答
舉報(bào)