Я сталкиваюсь с некоторыми проблемами при редактировании цветного массива изображений dicom с использованием cv2 и сохранении его обратно в dicom (для 'US-RGB-8-epicard'). Я могу сделать это с черно-белыми изображениями и изображениями в градациях серого, но не с цветными изображениями, поскольку пиксели искажаются при их сохранении.
Потратил 2 дня на это, но, кажется, не могу понять это правильно. Любая помощь или руководство с благодарностью. Спасибо!
DICOM файлы и код: https://drive.google.com/drive/folders/15ePCY0tcu1YUxN036ShysAlRYyPLEJ76?usp=sharing
Вещи, которые я пробовал:
- Сохранить как jpeg (без проблем, но мне нужно в .dcm)
- Сохранить как черно-белое изображение в формате .dcm (но мне нужно в цвете)
#Import the packages
import pydicom
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import hashlib
import os
import cv2
#First Image (No problems with black & white)
os.chdir(r"C:\Users\\Win\\Desktop\\sample_image")
dataset = pydicom.dcmread('OBXXXX1A.dcm')
image = dataset.pixel_array
h, w= image.shape
ModifiedImage = cv2.rectangle(image, (0,0), (w,int(.1*h)), (0, 0, 0), -1)
dataset.PixelData = ModifiedImage.tobytes()
dataset.save_as('OBXXXX1A-edited.dcm')
#Second Image (Problems with color)
os.chdir(r"C:\Users\\Win\\Desktop\\sample_image")
dataset = pydicom.dcmread('US-RGB-8-epicard')
image = dataset.pixel_array
h, w, _ = image.shape
ModifiedImage = cv2.rectangle(image, (0,0), (w,int(.1*h)), (255, 255, 255), -1)
#ModifiedImage = cv2.rectangle(image[:,:,2], (0,0), (w,int(.1*h)), (255, 255, 255), -1) #Get only black & white
cv2.imshow('image',ModifiedImage) #What I want
dataset.PixelData = ModifiedImage.get().tobytes()
dataset.save_as('US-RGB-8-epicard-(edited).dcm') #What I get
Исходное изображение: https://drive.google.com/file/d/1K1DdHh7qRGkmuP3fNv4gxacJGKun4jq_/view?usp=sharing)
Что я хочу: https://drive.google.com/file/d/1sLPwuf_IzcTetUSzbi9N5x-CeFoGpzeB/view?usp=sharing
Что я получаю: https://drive.google.com/file/d/1blbj357OAXFSQAqIxsOUoKt8DVxpNc5I/view?usp=sharing