У меня есть следующее изображение, и я хотел бы применить усреднение для каждой маскированной области (, а не ограничивающий прямоугольник ) на изображении.
Как видите, сейчас у регионов есть изменяющиеся значения внутри них на тепловой карте.Некоторые пиксели желтоватые, некоторые пурпурные.Я хочу, чтобы это было не так внутри масок.
Итак, что мне нужно сделать (я думаю):
- , чтобы найти, какие координаты соответствуют маскам
- усреднить пиксели в этих координатах
Вот как можно найти маски:
file_names = glob(os.path.join(IMAGE_DIR, "*.jpg"))
masks_prediction = np.zeros((521, 768, len(file_names)))
for i in range(len(file_names)):
print(i)
image = skimage.io.imread(file_names[i])
predictions = model.detect([image], verbose=1)
p = predictions[0]
masks = p['masks']
merged_mask = np.zeros((masks.shape[0], masks.shape[1]))
for j in range(masks.shape[2]):
merged_mask[masks[:,:,j]==True] = True
masks_prediction[:,:,i] = merged_mask
Вот функция, которая применяет маски:
def apply_mask(image, mask, color, alpha=0.5):
"""Apply the given mask to the image.
"""
for c in range(3):
image[:, :, c] = np.where(mask == 1,
image[:, :, c] *
(1 - alpha) + alpha * color[c] * 255,
image[:, :, c])
return image
и в основном файле, вот какон используется:
mask = masks[:, :, i]
if show_mask:
masked_image = apply_mask(masked_image, mask, color)
Так что мне нужно внести изменения где-то здесь, но я не знаю, где именно.