Я хочу преобразовать изображение DICOM из int16 в uint8.Я сделал это на Python, используя Z_axis = bytescale(img)
, но это дает результаты, отличные от использования im2uint8
в MATLAB.В MATLAB минимальные и максимальные значения изображения DICOM после преобразования в uint8 с использованием im2uint8
равны (124, 136), соответственно.Но эти значения в Python после преобразования с использованием bytescale
равны (0, 255).
Код Python:
for person in range(0, len(dirs1)):
if not os.path.exists(os.path.join(directory, dirs1[person])):
Pathnew = os.path.join(directory, dirs1[person])
os.makedirs(Pathnew)
for root, dirs, files in os.walk(os.path.join(path, dirs1[person])):
dcmfiles = [_ for _ in files if _.endswith('.dcm')]
for dcmfile in dcmfiles:
dcm_image = pydicom.read_file(os.path.join(root, dcmfile))
img = dcm_image.pixel_array
Z_axis = bytescale(img)
minVal = Z_axis.min()
maxVal = Z_axis.max()
Код Matlab:
for j = 1 : length(Files2)
img = dicomread([galleryPath Files2(j).name]);
Z_axis = im2uint8(img);
minVal = min(min(Z_axis));
maxVal = max(max(Z_axis));
Изображениявыглядят одинаково при отображении, но числовые значения не.Итак, функции bytescale
и im2uint8
равны или нет?Если нет, я хочу получить результаты вроде im2uint8
в Python.Какую функцию выбрать (особенно для изображений DICOM)?
Например, в MATLAB после чтения файла DICOM:
img = dicomread([galleryPath Files2(j).name]);
img = [ -1024, -1024, 16;
-1024, 8, 11;
17, 5, 8];
Но в Python то же изображение после чтения:
dcm_image = pydicom.read_file(os.path.join(root, dcmfile))
img = dcm_image.pixel_array
img = array([[ -1024, -1024, 27],
[ -1024, 27, 26],
[ 24, 26, 23]])
Я не знаю, почему они отличаются в MATLAB и Python.После применения im2uint8
в MATLAB, вывод:
Z_axis = im2uint8(img)
Z_axis =
3×3 uint8 matrix
124 124 128
124 128 128
128 128 128
А после применения bytescale
в Python, вывод:
bytescale(img)
Z_axis =
array([[0, 0, 83],
[0, 83, 83],
[83, 83, 83]], dtype=uint8)