Я работаю над полутоновыми изображениями некоторых микроструктур сплавов, полученных с помощью оптического микроскопа и т. Д. Моя цель - проанализировать количество (%) областей с заданным порогом (количество пикселей), а также количество, размер и т. Д. из этих сегментов. Для последнего я использую: из показателя импорта Skimage морфологию, которая находит эти сегменты, и каждый сегмент имеет уникальное целое число в матрице меток, которая имеет ту же форму, что и рис. Я могу сделать все, кроме раскраски этих сегментов на исходном изображении без петли for
.
import numpy as np
import matplotlib.pyplot as plt
grains = np.array([[1,3], [2,5], [6,2]] )
labels=np.array([[1,1,0,0,0],[1,0,0,2,0],[0,0,2,2,2],[0,0,0,2,0],[6,6,0,0,0]])
im = np.array([[223, 222, 225, 224, 227],[222, 224, 218, 220, 221],[216, 221, 219, 223, 225],[228, 226, 231, 224, 228],[226, 228, 225, 218, 225]])
image=np.stack((im, im, im), axis=2) # greyscale sample image
color = [0, 0, 255] # rgb blue color
for i in grains:
B=np.full((i[1],3), color).astype('int')
image[labels==i[0]]=B
plt.imshow(image)
plt.show()
Есть ли эффективный «тупой способ», который не будет включать цикл «for» и будетследовательно, будет намного быстрее.