Усреднение пикселей в ROI изображения - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть следующее изображение, и я хотел бы применить усреднение для каждой маскированной области (, а не ограничивающий прямоугольник ) на изображении.

enter image description here

Как видите, сейчас у регионов есть изменяющиеся значения внутри них на тепловой карте.Некоторые пиксели желтоватые, некоторые пурпурные.Я хочу, чтобы это было не так внутри масок.

Итак, что мне нужно сделать (я думаю):

  • , чтобы найти, какие координаты соответствуют маскам
  • усреднить пиксели в этих координатах

Вот как можно найти маски:

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)

Так что мне нужно внести изменения где-то здесь, но я не знаю, где именно.

1 Ответ

0 голосов
/ 23 ноября 2018

Я думаю, что маска, которую вы ищете, предоставляется кодом:

mask = masks[:, :, i]

, где i относится к номеру вашей маски.

Выможно получить средние значения области маски из исходного изображения с помощью функции openCV mean

Вот как должен выглядеть ваш код:

mask = masks[:, :, i]
avg_masked_value = cv2.mean(original_image,mask)

где original_image - это оригинальное изображение, которое вы загрузили, и avg_masked_value будет содержать массив усредненных значений 3x1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...