を使用して画像上skimage.feature.blob_doh
のブロブを検出しており、ブロブ領域を次の形式で取得しています。
A = 配列 ([[121, 271, 30], [123, 44, 23], [123, 205, 20], [124, 336, 20], [126, 101, 20], [126, 153, 20]、[156、302、30]、[185、348、30]、[192、212、23]、[193、275、23]、[195、100、23]、[197、44、20] 、[197、153、20]、[260、173、30]、[262、243、23]、[265、113、23]、[270、363、30]])
A : (n, 3) ndarray 各行が 3 つの値を表す 2 次元配列で、 はブロブの座標であり(y,x,sigma)
、ガウス カーネルの標準偏差です (おおよそ、私の領域の半径です)。(y,x)
sigma
問題は、さらなるデータ処理のためにこれらすべての領域をどのように選択するかです (平均フィーチャの計算、クラスタリングと分類の作成)。今、私はそれらをプロットに描画するだけですが、それらをビットマップ\配列変数に移行することはできません.
そして、このタスクに OpenCV ライブラリを使用したくありません。numpy/scipy/skimage およびその他のライブラリを使用して実行する必要があります。
fig, ax = plt.subplots(1, 1)
ax.set_title(title)
ax.imshow(image, interpolation='nearest')
for blob in blobs:
y, x, r = blob
c = plt.Circle((x, y), r, color=color, linewidth=2, fill=False)
print c
ax.add_patch(c)
plt.show()
助けてくれてありがとう!
UPD: トリミング用のコードをいくつか取得しましたが、奇妙なことをしています... うまくトリミングできますが、座標とは何ですか?
def crop_and_save_blobs(image, blobs):
image = np.asarray(image)
for blob in blobs:
y, x, radius = blob
center = (x, y)
mask = np.zeros((image.shape[0],image.shape[1]))
for i in range(image.shape[0]):
for j in range(image.shape[1]):
if (i-center[0])**2 + (j-center[0])**2 < radius**2:
mask[i,j] = 1
# assemble new image (uint8: 0-255)
newImArray = np.empty(image.shape,dtype='uint8')
# colors (three first columns, RGB)
newImArray[:,:,:3] = image[:,:,:3]
# transparency (4th column)
newImArray[:,:,3] = mask*255
newIm = Image.fromarray(newImArray, "RGBA")
plt.imshow(newIm)
plt.show()