Я использую код от https://gist.github.com/ravnoor/a8d26c485cd39c1d9dd21af7c27ac232. Сначала это сработало, но по какой-то причине больше нет. Я не могу вспомнить, что менял что-либо
volSize = numpy.array((256,256,100), numpy.int32)
dstRes = numpy.array((3.,3.,3.))
normDir = False
method = SimpleITK.sitkLinear
def process_scan(scan):
scan=SimpleITK.ReadImage(scan)
ret = numpy.zeros(volSize, dtype=numpy.float32)
factor = numpy.asarray(scan.GetSpacing()) / dstRes
factorSize = numpy.asarray(scan.GetSize() * factor, dtype=numpy.float)
newSize = numpy.max([factorSize, volSize], axis=0)
newSize = newSize.astype(dtype=numpy.int32)
T=SimpleITK.AffineTransform(3)
T.SetMatrix(scan.GetDirection())
resampler = SimpleITK.ResampleImageFilter()
resampler.SetReferenceImage(scan)
resampler.SetOutputSpacing(dstRes)
resampler.SetSize(newSize.tolist())
resampler.SetInterpolator(method)
if normDir:
resampler.SetTransform(T.GetInverse())
imgResampled = resampler.Execute(scan)
imgCentroid = numpy.asarray(newSize, dtype=numpy.float) / 2.0
imgStartPx = (imgCentroid - numpy.array(volSize) / 2.0).astype(dtype=int)
regionExtractor = SimpleITK.RegionOfInterestImageFilter()
regionExtractor.SetSize(volSize.astype(dtype=numpy.int32).tolist())
regionExtractor.SetIndex(imgStartPx.tolist())
imgResampledCropped = regionExtractor.Execute(imgResampled)
return numpy.transpose(
SimpleITK.GetArrayFromImage(imgResampledCropped).astype(dtype=numpy.float),
[2, 1, 0]
)
Входные данные сканирования представляют собой список абсолютных путей срезов диокм. На данный момент меня не волнует их порядок.
Вот что я получу, я хочу, чтобы КТ заполнил 256 пикселей.