Извлечь объект из изображения и применить его к другому изображению - PullRequest
0 голосов
/ 07 марта 2020

КРАТКИЙ ОБЗОР:

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


ПРОБЛЕМА:

Во время обучения я импортирую изображения (сохраненные в виде JPEG-файлов) и преобразую их в NumPy массивы.

  • Недостаточно просто наложить маркер, поскольку у маркера будет четкий / четкий контур, в то время как «настоящие» / уже имеющиеся маркеры несколько искажены из-за сглаживания / JPEG-изображения сжатие.

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

  • Вариант 1: ... вычитая одно изображение из другого (см. Третье и четвертое изображение ниже для результат). (Это может привести к неправильным значениям пикселей для маркера.)

  • Вариант 2: ... копирование изображения с маркерами и установка всех ячеек в ноль, где два изображения (с / без маркеров) ) (почти) равны (см. пятое и шестое изображение ниже для результата).


a)

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

  • Простое наложение маркера создаст черные пятна вокруг маркера.

  • Простое добавление значений пикселей приведет к неверные значения пикселей для маркера.


b) (учитывая, что а) решено)

Допустим, я теперь хочу иметь возможность вставлять маркер другого размера и ориентации.

Ориентация: Я мог вращать и перемещать маркер. Размер: Любое предложение о том, как я мог бы go сделать это? Я все еще хочу, чтобы маркер имел те же свойства, то есть просто растяжение не подходит.


from keras.preprocessing.image import load_img, img_to_array
from scipy.ndimage import rotate
import numpy as np

# importing images as NumPy arrays
img1 = img_to_array(load_img('img1.jpg'))
img2 = img_to_array(load_img('img2.jpg'))


# option 1
img3 = img2-img1   # extracting the marker by subtracting the image arrays
img3 = img3[:-100] # getting rid of the yellow/grey marker in the down-right corner

# option 2
img3 = img2[np.abs(img2 - img1) < 15] = 0


# rotating the image 
img3 = rotate(img3, angle=-23.6)

# cropping the image 
img3_copy = img3.copy()
img3_copy[np.abs(img3_copy) < 10**-4] = 0
idx = np.nonzero(img3_copy)
img3 = img3[np.min(idx[0]):np.max(idx[0])+1, np.min(idx[1]):np.max(idx[1])+1]

enter image description here enter image description here enter image description here enter image description here enter image description here enter image description here

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