我正在使用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')
结果如下:
如何在主图内设置等高线图的位置?谢谢!
答案 0 :(得分:3)
您需要使用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()