
因为DICOM图像通常是一个序列,普通的dcm格式的图像序列可以直接使用DICOM图像查看软件打开进行查看;但mhd格式的3D图像却无法方便地查看。但为了研究方便,可视化mhd图像文件是绕不开的一项任务。 具体来说,在Python下可视化图像可以选择使用matplotlib,也可以用OpenCV将其保存查看,都非常方便。不过有些细节问题则需要特别注意。下面对这些进行一下简单记录,以防遗忘。
使用OpenCV保存一个三维的DICOM数据image,并在其上的某个坐标coord处绘制直径为diameter的圆形的代码如下:
import cv2
import SimpleITK as sitk
import numpy as np
image = sitk.ReadImage(mhd_path)
image = sitk.GetArrayFromImage(image)
for i, im in enumerate(image):
im = cv2.cvtColor(im, cv2.COLOR_GRAY2RGB)
cv2.circle(im, coord, diameter, color=(0, 0, 255))
cv2.imwrite(os.path.join(path, ‘{}.png’.format(i)), im)
需要特别注意的是 im = cv2.cvtColor(im, cv2.COLOR_GRAY2RGB)。因为输入图像是灰度图,如果不先将图像转换为彩色的RGB格式,下面绘制的circle将不会以彩色显示,可能会造成误解。
2.使用matplotlib绘制保存图像序列
使用matplotlib.pyplot在Python里进行各种图形的绘制会特别方便,而且我们使用的也更多更顺手。如,绘制一幅二维的image图像,代码如下:
import matplotlib.pyplot as plt
plt.imshow(image, cmap=’gray’)
plt.show()
因为我们绘制的医学影像是灰度图,所以用 cmap=’gray’ 这个参数。 而在绘制的图像上绘制其他内容也十分方便,比如1中绘制一个圆形,代码如下:
import matplotlib.pyplot as plt
plt.imshow(image, cmap=’gray’)
plt.Circle(coord, diameter, color=’r’, fill=False)
plt.show()
将绘制的图像像OpenCV一样保存为文件,也可以直接使用plt.savefig(path)即可。 不过,你应该能够看到,这样保存的图片边缘会有很大空白,而不能像OpenCV保存的图像那样,紧紧贴边,只保存了图像。 那么,如何使用matplotlib.pyplot像OpenCV的cv2那样保存图像时紧紧贴边,而没有边缘的空白呢以使用下面的代码:
def make_image(image, path, diameter, coord):
fig = plt.figure()
fig.set_size_inches(image.shape[0]/100., image.shape[1]/100.)
ax = plt.Axes(fig, [0., 0., 1., 1.])
ax.set_axis_off()
fig.add_axes(ax)
ax.imshow(image, aspect=’normal’, cmap=’gray’)
circle = plt.Circle(coord, diameter, color=’r’, fill=False)
ax.add_artist(circle)
plt.savefig(path)
使用该函数,即可将二维的numpy array格式的image图像数据保存为像OpenCV的cv2那样边缘没有任何空白的图像了。
相关资源:连续梁的弯矩计算软件V1.0绿色版_连续梁-其它代码类资源-CSDN文库
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!