【发布时间】:2020-11-10 04:30:40
【问题描述】:
首先,对不起我的英语不好,我会说西班牙语,所以我会尽力解释我的问题。
我有一个标准化 ([0-255]) dicom 图像,我想显示 8 个图像,但改变位深度,我的意思是:1 位图像、2 位图像、3 位图像等。我的代码只是打开和规范化图像,因为我不知道应该怎么做才能得到我想要的东西,也许将所有像素值转换为二进制,但我不太了解,我开始学习数字图像处理。这是我的代码
import numpy as np
import matplotlib.pyplot as plt
import pydicom as dicom
IM = r"C:\Users\Nico\Desktop\tarea2\MR-cerebro-ANON\IM.dcm"
data = dicom.read_file(IM)
imagen = data.pixel_array[200]
img_norm = []
for pixel in imagen:
img_norm.append((pixel/np.amax(imagen)*255))
plt.imshow(img_norm,cmap='bone'),plt.axis('off')
plt.title('Imagen normalizada')
plt.show()
更新:
我终于得到了我想要的东西,所以我会把我的代码放在这里以防有人想改进它,因为我知道它可能没有那么优化,但我是初学者,所以这就是我所做的,如果任何人都想优化它,请随意。此外,也许有了这个结果,我的问题现在更清楚了,它适用于所有 8 位,只需修改第二个“for”上的 int 函数。这些是我得到的一些图像normalized Image、1 bit image、6 bits image
bin1 = []
bin11 = []
for i in c:
for j in i:
bin1.append('00000000'+bin(j)[2::])
for b in bin1:
bin11.append(int(b[-1:],2))
plt.imshow(np.reshape(bin22,(480,480)),cmap='gray')
plt.title('Imagen de 1 bits')
plt.show()
【问题讨论】:
-
您的问题是什么?运行此代码时,您现在得到的结果是什么?为什么是200?那不是很多像素,而是一维的。通常,处理图像的代码将有两个循环,一个在另一个循环中,因为图像是一个二维数据集。 200可能是您图像的宽度,您需要处理图像的每一行吗?我只是希望能给你一些思考的东西,这会对你有所帮助。
-
嗨,我的问题是如何显示所有 8 位深度的图像,我的意思是,例如:1 位深度的图像应该是黑白的,但对于 2 位或更多位,它应该是灰度的,所以我想显示 8 个不同的图像,每个位深度一个。如果我不能很好地解释自己,我很抱歉,希望你能理解我。 200 是 dicom 图像的切片 #,所以我得到了一个矢状切片图像(图像为 1024x1024)我真的很感激你试图帮助我,非常感谢。我不知道该怎么做才能获得所有 8 位深度图像
-
这里有代码可以在 0-255 之间进行标准化。您只需对每个位深度执行相同的操作。对于 1 位,您选择一个截止值(例如 128),低于该值的任何值都是 0,高于该值的任何值都是 1。其他深度也是如此……您只需将每个像素映射到位数你正在使用。然后是图像格式的问题。文件格式是否支持这些不同的深度,或者您是否真的只是创建灰度 (0-255) 图像,但是您已经为每个“深度”适当地量化了像素值。
-
感谢史蒂夫的帮助。我会尝试这个想法,我认为它可能会起作用,因为我只是创建灰度图像,所以我会尝试一下,非常感谢您抽出宝贵的时间
-
尽管您使用工作代码更新了您的问题,但我建议您使用找到的代码回答您自己的问题。虽然如果它回答了这个问题,它可能不会被优化,但它无疑会帮助其他可能在未来遇到这个问题的人。
标签: python imaging pydicom medical-imaging