Маркировка медицинского изображения - PullRequest
0 голосов
/ 30 марта 2020

Я хочу извлечь основную правду из моих медицинских данных. Я ищу программу, которая может помочь с этим. То, что я хочу сделать, заключается в следующем. Я хочу выбрать определенную область c и сделать ее белой, а в другой области она должна быть черной. Так что в моей руке была бы правдивая земля. Есть примеры на картинках. Примечание: у меня нет правды, есть только оригинальные изображения без правды. Мне нужно нарисовать и извлечь эту область из исходного изображения ... введите описание изображения здесь Спасибо за вашу помощь заранее.

введите описание изображения здесь

Ответы [ 2 ]

2 голосов
/ 30 марта 2020

Давайте разделим ваше изображение на две составные части: первую image.png:

enter image description here

и вторую mask.png:

enter image description here

Теперь вы можете просто использовать ImageMagick в Терминале без написания кода. У вас есть пара вариантов. Вы можете либо:

  • сделать черные части маски прозрачными в результате, либо
  • сделать черные части маски черными в результате.

Давайте сначала сделаем их прозрачными, поэтому мы эффективно копируем маску в изображение и обрабатываем ее как слой альфа / прозрачности:

magick image.png mask.png -compose copyalpha -composite result.png

enter image description here

А теперь давайте сделаем их черными, выбрав более темное изображение оригинала и маску в каждой точке пикселя - отсюда режим смешивания darken:

magick image.png mask.png -compose darken -composite result.png

enter image description here

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


Если вы хотите использовать метод прозрачности из Python с PIL, вы можете сделать:

from PIL import Image

# Read image and mask as PIL Images
im = Image.open('image.png').convert('RGB')
ma = Image.open('mask.png').convert('L')

# Merge in mask as alpha channel and save
im.putalpha(ma)
im.save('result.png')

Или метод прозрачности с OpenCV и Numpy :

import cv2
import numpy as np

# Open image and mask as NMumoy arrays
im = cv2.imread('image.png')
ma = cv2.imread('mask.png', cv2.IMREAD_GRAYSCALE) 

# Merge mask in as alpha channel and save
res = np.dstack((im,ma))
cv2.imwrite('result.png', res)

Если вы хотите использовать б Метод Lainen с Python и PIL / Pillow, используйте:

from PIL import Image, ImageChops

# Read image and mask as PIL Images
im = Image.open('image.png').convert('RGB')
ma = Image.open('mask.png').convert('RGB')

# Choose darker image at each pixel location and save
res = ImageChops.darker(im, ma)
res.save('result.png')

Если вы хотите использовать метод Blacken с OpenCV и Numpy, используйте код выше но замените строку np.dstack() на:

res = np.minimum(im, ma[...,np.newaxis])
0 голосов
/ 30 марта 2020

Я настоятельно рекомендую ITK - SNAP для этой задачи. Вы можете вручную пометить свои входные изображения определенными метками (1 для переднего плана, 0 для фона в вашем примере) и экспортировать основную правду очень удобно.

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