КРАТКИЙ ОБЗОР:
Я разрабатываю модель на основе нейронной сети для дифференциации доброкачественных и злокачественных опухолей яичников. Я работаю с трансвагинальными ультразвуковыми изображениями, некоторые из которых содержат желтые маркеры, как показано на первом изображении ниже. Если не вдаваться в подробности, существует риск того, что наличие маркеров может привести к смещению, которое сеть сможет использовать. Чтобы попытаться противостоять этому смещению, я буду вставлять полуслучайные маркеры в изображения во время обучения и проверки в качестве типа увеличения изображения.
ПРОБЛЕМА:
Во время обучения я импортирую изображения (сохраненные в виде 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](https://i.stack.imgur.com/L7dKC.jpg)