2

我正在使用 SciPy 识别 CT 图像中的肿瘤。一旦我确定了包含肿瘤的切片,我使用以下方法检索切片:

slice_x, slice_y = ndimage.find_objects(label_im==label)[0]

然后我绘制完整图像如下:

plt.imshow(image, cmap='gray')

我想将提取的切片(包含肿瘤)的轮廓覆盖在适当位置的原始图像之上。但是,我无法让等高线图位于正确区域的顶部。相反,等高线图始终位于图像的左上角。这是我正在使用的:

plt.contour(mask[slice_x, slice_y], position=(slice_x.start, \
slice_y.start), linewidths=2, colors='r')

结果如下:

CT图像

如何在主图中设置等高线图的位置?谢谢!

4

1 回答 1

4

您需要使用extent关键字参数而不是position. 但是,您需要指定最大值和开始(即它必须是extent=[xmin, xmax, ymin, ymax]

在您的情况下,它看起来像:

extent=[xslice.start, xslice.stop+1, yslice.start, yslice.stop+1]
plt.contour(mask[xslice, yslice], extent=extent)

请注意,您可能需要使用origin关键字参数(或翻转 ymin 和 ymax)来控制输入数据的解释方式。

或者,您可以执行以下操作:

x, y = np.mgrid[xslice, yslice]
plt.contour(x, y, mask[xslcie, yslice])

如果你在一个大区域工作,效率会有点低,但它会干净得多。

作为后一种方法的完整示例:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm

data = np.random.random((100,100))

xslice, yslice = slice(20, 30), slice(45, 65)

plt.imshow(data, cmap=cm.gray)

x, y = np.mgrid[xslice, yslice]
plt.contour(x, y, data[xslice, yslice])

plt.show()

在此处输入图像描述

于 2012-11-15T03:23:11.877 回答